From d099c1ebc6e43f08241e542b6ff613e0b76daa35 Mon Sep 17 00:00:00 2001 From: fatemeee33 Date: Thu, 24 Oct 2024 13:33:37 +0330 Subject: [PATCH] cfg_generator --- cfg_generator/grammar/JavaLexer.g4 | 941 + cfg_generator/grammar/JavaParser.g4 | 1588 ++ cfg_generator/src/__init__.py | 0 cfg_generator/src/antlr/__init__.py | 0 cfg_generator/src/antlr/gen/JavaLexer.interp | 441 + cfg_generator/src/antlr/gen/JavaLexer.py | 811 + cfg_generator/src/antlr/gen/JavaLexer.tokens | 242 + cfg_generator/src/antlr/gen/JavaParser.interp | 508 + cfg_generator/src/antlr/gen/JavaParser.py | 22100 ++++++++++++++++ cfg_generator/src/antlr/gen/JavaParser.tokens | 242 + .../src/antlr/gen/JavaParserListener.py | 2217 ++ .../src/antlr/gen/JavaParserVisitor.py | 1238 + cfg_generator/src/antlr/rule_utils.py | 23 + cfg_generator/src/cfg_extractor/__init__.py | 0 .../cfg_extractor/cfg_extractor_visitor.py | 128 + .../src/cfg_extractor/lang_structures.py | 261 + .../language_structure/__init__.py | 0 .../language_structure/digraph_embedder.py | 336 + .../structure_pattern_interface.py | 83 + cfg_generator/src/cfg_from_stdin.py | 81 + cfg_generator/src/code_coverage/__init__.py | 0 .../src/code_coverage/path_finder.py | 129 + .../src/code_coverage/prime_path_coverage.py | 293 + cfg_generator/src/data_structures/__init__.py | 0 .../src/data_structures/graph/__init__.py | 0 .../graph/builder_interface.py | 134 + .../data_structures/graph/networkx_builder.py | 166 + cfg_generator/src/graph/__init__.py | 0 cfg_generator/src/graph/utils.py | 138 + cfg_generator/src/graph/visual.py | 135 + .../distributionForInstance-cfg.gv | 184 + .../distributionForInstance-cfg.gv.png | Bin 0 -> 145160 bytes .../attribute/attribute-cfg.gv | 40 + .../attribute/attribute-cfg.gv.png | Bin 0 -> 23648 bytes .../attributeSparse/attributeSparse-cfg.gv | 40 + .../attributeSparse-cfg.gv.png | Bin 0 -> 23506 bytes .../classAttribute/classAttribute-cfg.gv | 40 + .../classAttribute/classAttribute-cfg.gv.png | Bin 0 -> 23768 bytes .../classIndex/classIndex-cfg.gv | 40 + .../classIndex/classIndex-cfg.gv.png | Bin 0 -> 23634 bytes .../classIsMissing/classIsMissing-cfg.gv | 39 + .../classIsMissing/classIsMissing-cfg.gv.png | Bin 0 -> 24256 bytes .../classValue/classValue-cfg.gv | 39 + .../classValue/classValue-cfg.gv.png | Bin 0 -> 24541 bytes .../AbstractInstance/dataset/dataset-cfg.gv | 23 + .../dataset/dataset-cfg.gv.png | Bin 0 -> 12798 bytes .../deleteAttributeAt-cfg.gv | 39 + .../deleteAttributeAt-cfg.gv.png | Bin 0 -> 24365 bytes .../enumerateAttributes-cfg.gv | 40 + .../enumerateAttributes-cfg.gv.png | Bin 0 -> 23468 bytes .../equalHeaders/equalHeaders-cfg.gv | 40 + .../equalHeaders/equalHeaders-cfg.gv.png | Bin 0 -> 23729 bytes .../equalHeadersMsg/equalHeadersMsg-cfg.gv | 40 + .../equalHeadersMsg-cfg.gv.png | Bin 0 -> 24129 bytes .../getRevision/getRevision-cfg.gv | 23 + .../getRevision/getRevision-cfg.gv.png | Bin 0 -> 15626 bytes .../hasMissingValue/hasMissingValue-cfg.gv | 40 + .../hasMissingValue-cfg.gv.png | Bin 0 -> 24164 bytes .../insertAttributeAt-cfg.gv | 39 + .../insertAttributeAt-cfg.gv.png | Bin 0 -> 24999 bytes .../isMissing/isMissing-cfg.gv | 23 + .../isMissing/isMissing-cfg.gv.png | Bin 0 -> 14206 bytes .../isMissingSparse/isMissingSparse-cfg.gv | 56 + .../isMissingSparse-cfg.gv.png | Bin 0 -> 28795 bytes .../numClasses/numClasses-cfg.gv | 40 + .../numClasses/numClasses-cfg.gv.png | Bin 0 -> 23902 bytes .../relationalValue/relationalValue-cfg.gv | 90 + .../relationalValue-cfg.gv.png | Bin 0 -> 71370 bytes .../setClassMissing/setClassMissing-cfg.gv | 39 + .../setClassMissing-cfg.gv.png | Bin 0 -> 24445 bytes .../setClassValue/setClassValue-cfg.gv | 39 + .../setClassValue/setClassValue-cfg.gv.png | Bin 0 -> 24570 bytes .../setDataset/setDataset-cfg.gv | 23 + .../setDataset/setDataset-cfg.gv.png | Bin 0 -> 12876 bytes .../setMissing/setMissing-cfg.gv | 23 + .../setMissing/setMissing-cfg.gv.png | Bin 0 -> 13729 bytes .../AbstractInstance/setValue/setValue-cfg.gv | 40 + .../setValue/setValue-cfg.gv.png | Bin 0 -> 24235 bytes .../setWeight/setWeight-cfg.gv | 23 + .../setWeight/setWeight-cfg.gv.png | Bin 0 -> 13149 bytes .../stringValue/stringValue-cfg.gv | 125 + .../stringValue/stringValue-cfg.gv.png | Bin 0 -> 126815 bytes .../AbstractInstance/toString/toString-cfg.gv | 23 + .../toString/toString-cfg.gv.png | Bin 0 -> 15621 bytes .../toStringMaxDecimalDigits-cfg.gv | 58 + .../toStringMaxDecimalDigits-cfg.gv.png | Bin 0 -> 50421 bytes .../AbstractInstance/value/value-cfg.gv | 23 + .../AbstractInstance/value/value-cfg.gv.png | Bin 0 -> 13748 bytes .../valueSparse/valueSparse-cfg.gv | 23 + .../valueSparse/valueSparse-cfg.gv.png | Bin 0 -> 14420 bytes .../AbstractInstance/weight/weight-cfg.gv | 23 + .../AbstractInstance/weight/weight-cfg.gv.png | Bin 0 -> 12971 bytes .../test_output/break/main/main-cfg.gv | 93 + .../test_output/break/main/main-cfg.gv.png | Bin 0 -> 49463 bytes .../test_output/dowhile/main/main-cfg.gv | 73 + .../test_output/dowhile/main/main-cfg.gv.png | Bin 0 -> 22647 bytes cfg_generator/test_source/4.java | 34 + .../test_source/AbstractInstance.java | 860 + cfg_generator/test_source/break.java | 17 + cfg_generator/test_source/continue.java | 18 + cfg_generator/test_source/dowhile.java | 11 + cfg_generator/test_source/for.java | 20 + cfg_generator/test_source/if.java | 23 + cfg_generator/test_source/switch.java | 27 + cfg_generator/test_source/test.java | 15 + cfg_generator/test_source/tetst.java | 14 + cfg_generator/test_source/throw.java | 21 + cfg_generator/test_source/try_catch.java | 26 + .../test_source/unconditional for.java | 14 + cfg_generator/test_source/while.java | 10 + 110 files changed, 34888 insertions(+) create mode 100644 cfg_generator/grammar/JavaLexer.g4 create mode 100644 cfg_generator/grammar/JavaParser.g4 create mode 100644 cfg_generator/src/__init__.py create mode 100644 cfg_generator/src/antlr/__init__.py create mode 100644 cfg_generator/src/antlr/gen/JavaLexer.interp create mode 100644 cfg_generator/src/antlr/gen/JavaLexer.py create mode 100644 cfg_generator/src/antlr/gen/JavaLexer.tokens create mode 100644 cfg_generator/src/antlr/gen/JavaParser.interp create mode 100644 cfg_generator/src/antlr/gen/JavaParser.py create mode 100644 cfg_generator/src/antlr/gen/JavaParser.tokens create mode 100644 cfg_generator/src/antlr/gen/JavaParserListener.py create mode 100644 cfg_generator/src/antlr/gen/JavaParserVisitor.py create mode 100644 cfg_generator/src/antlr/rule_utils.py create mode 100644 cfg_generator/src/cfg_extractor/__init__.py create mode 100644 cfg_generator/src/cfg_extractor/cfg_extractor_visitor.py create mode 100644 cfg_generator/src/cfg_extractor/lang_structures.py create mode 100644 cfg_generator/src/cfg_extractor/language_structure/__init__.py create mode 100644 cfg_generator/src/cfg_extractor/language_structure/digraph_embedder.py create mode 100644 cfg_generator/src/cfg_extractor/language_structure/structure_pattern_interface.py create mode 100644 cfg_generator/src/cfg_from_stdin.py create mode 100644 cfg_generator/src/code_coverage/__init__.py create mode 100644 cfg_generator/src/code_coverage/path_finder.py create mode 100644 cfg_generator/src/code_coverage/prime_path_coverage.py create mode 100644 cfg_generator/src/data_structures/__init__.py create mode 100644 cfg_generator/src/data_structures/graph/__init__.py create mode 100644 cfg_generator/src/data_structures/graph/builder_interface.py create mode 100644 cfg_generator/src/data_structures/graph/networkx_builder.py create mode 100644 cfg_generator/src/graph/__init__.py create mode 100644 cfg_generator/src/graph/utils.py create mode 100644 cfg_generator/src/graph/visual.py create mode 100644 cfg_generator/test_output/4/distributionForInstance/distributionForInstance-cfg.gv create mode 100644 cfg_generator/test_output/4/distributionForInstance/distributionForInstance-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/attribute/attribute-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/attribute/attribute-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/attributeSparse/attributeSparse-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/attributeSparse/attributeSparse-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/classAttribute/classAttribute-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/classAttribute/classAttribute-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/classIndex/classIndex-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/classIndex/classIndex-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/classIsMissing/classIsMissing-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/classIsMissing/classIsMissing-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/classValue/classValue-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/classValue/classValue-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/dataset/dataset-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/dataset/dataset-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/deleteAttributeAt/deleteAttributeAt-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/deleteAttributeAt/deleteAttributeAt-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/enumerateAttributes/enumerateAttributes-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/enumerateAttributes/enumerateAttributes-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/equalHeaders/equalHeaders-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/equalHeaders/equalHeaders-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/equalHeadersMsg/equalHeadersMsg-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/equalHeadersMsg/equalHeadersMsg-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/getRevision/getRevision-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/getRevision/getRevision-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/hasMissingValue/hasMissingValue-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/hasMissingValue/hasMissingValue-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/insertAttributeAt/insertAttributeAt-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/insertAttributeAt/insertAttributeAt-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/isMissing/isMissing-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/isMissing/isMissing-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/isMissingSparse/isMissingSparse-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/isMissingSparse/isMissingSparse-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/numClasses/numClasses-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/numClasses/numClasses-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/relationalValue/relationalValue-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/relationalValue/relationalValue-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/setClassMissing/setClassMissing-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/setClassMissing/setClassMissing-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/setClassValue/setClassValue-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/setClassValue/setClassValue-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/setDataset/setDataset-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/setDataset/setDataset-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/setMissing/setMissing-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/setMissing/setMissing-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/setValue/setValue-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/setValue/setValue-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/setWeight/setWeight-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/setWeight/setWeight-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/stringValue/stringValue-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/stringValue/stringValue-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/toString/toString-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/toString/toString-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/toStringMaxDecimalDigits/toStringMaxDecimalDigits-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/toStringMaxDecimalDigits/toStringMaxDecimalDigits-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/value/value-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/value/value-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/valueSparse/valueSparse-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/valueSparse/valueSparse-cfg.gv.png create mode 100644 cfg_generator/test_output/AbstractInstance/weight/weight-cfg.gv create mode 100644 cfg_generator/test_output/AbstractInstance/weight/weight-cfg.gv.png create mode 100644 cfg_generator/test_output/break/main/main-cfg.gv create mode 100644 cfg_generator/test_output/break/main/main-cfg.gv.png create mode 100644 cfg_generator/test_output/dowhile/main/main-cfg.gv create mode 100644 cfg_generator/test_output/dowhile/main/main-cfg.gv.png create mode 100644 cfg_generator/test_source/4.java create mode 100644 cfg_generator/test_source/AbstractInstance.java create mode 100644 cfg_generator/test_source/break.java create mode 100644 cfg_generator/test_source/continue.java create mode 100644 cfg_generator/test_source/dowhile.java create mode 100644 cfg_generator/test_source/for.java create mode 100644 cfg_generator/test_source/if.java create mode 100644 cfg_generator/test_source/switch.java create mode 100644 cfg_generator/test_source/test.java create mode 100644 cfg_generator/test_source/tetst.java create mode 100644 cfg_generator/test_source/throw.java create mode 100644 cfg_generator/test_source/try_catch.java create mode 100644 cfg_generator/test_source/unconditional for.java create mode 100644 cfg_generator/test_source/while.java diff --git a/cfg_generator/grammar/JavaLexer.g4 b/cfg_generator/grammar/JavaLexer.g4 new file mode 100644 index 00000000..aa9c0f3b --- /dev/null +++ b/cfg_generator/grammar/JavaLexer.g4 @@ -0,0 +1,941 @@ +// $antlr-format alignTrailingComments true, columnLimit 150, maxEmptyLinesToKeep 1, reflowComments false, useTab false +// $antlr-format allowShortRulesOnASingleLine true, allowShortBlocksOnASingleLine true, minEmptyLines 0, alignSemicolons ownLine +// $antlr-format alignColons trailing, singleLineOverrulesHangingColon true, alignLexerCommands true, alignLabels true, alignTrailers true + +lexer grammar JavaLexer; + +// LEXER + +EXPORTS : 'exports'; +MODULE : 'module'; +NONSEALED : 'non-sealed'; +OACA : '<>'; +OPEN : 'open'; +OPENS : 'opens'; +PERMITS : 'permits'; +PROVIDES : 'provides'; +RECORD : 'record'; +REQUIRES : 'requires'; +SEALED : 'sealed'; +TO : 'to'; +TRANSITIVE : 'transitive'; +USES : 'uses'; +VAR : 'var'; +WITH : 'with'; +YIELD : 'yield'; + +// §3.9 Keywords + +ABSTRACT : 'abstract'; +ASSERT : 'assert'; +BOOLEAN : 'boolean'; +BREAK : 'break'; +BYTE : 'byte'; +CASE : 'case'; +CATCH : 'catch'; +CHAR : 'char'; +CLASS : 'class'; +CONST : 'const'; +CONTINUE : 'continue'; +DEFAULT : 'default'; +DO : 'do'; +DOUBLE : 'double'; +ELSE : 'else'; +ENUM : 'enum'; +EXTENDS : 'extends'; +FINAL : 'final'; +FINALLY : 'finally'; +FLOAT : 'float'; +FOR : 'for'; +IF : 'if'; +GOTO : 'goto'; +IMPLEMENTS : 'implements'; +IMPORT : 'import'; +INSTANCEOF : 'instanceof'; +INT : 'int'; +INTERFACE : 'interface'; +LONG : 'long'; +NATIVE : 'native'; +NEW : 'new'; +PACKAGE : 'package'; +PRIVATE : 'private'; +PROTECTED : 'protected'; +PUBLIC : 'public'; +RETURN : 'return'; +SHORT : 'short'; +STATIC : 'static'; +STRICTFP : 'strictfp'; +SUPER : 'super'; +SWITCH : 'switch'; +SYNCHRONIZED : 'synchronized'; +THIS : 'this'; +THROW : 'throw'; +THROWS : 'throws'; +TRANSIENT : 'transient'; +TRY : 'try'; +VOID : 'void'; +VOLATILE : 'volatile'; +WHILE : 'while'; +UNDER_SCORE : '_'; //Introduced in Java 9 + +// §3.10.1 Integer Literals + +IntegerLiteral: + DecimalIntegerLiteral + | HexIntegerLiteral + | OctalIntegerLiteral + | BinaryIntegerLiteral +; + +fragment DecimalIntegerLiteral: DecimalNumeral IntegerTypeSuffix?; + +fragment HexIntegerLiteral: HexNumeral IntegerTypeSuffix?; + +fragment OctalIntegerLiteral: OctalNumeral IntegerTypeSuffix?; + +fragment BinaryIntegerLiteral: BinaryNumeral IntegerTypeSuffix?; + +fragment IntegerTypeSuffix: [lL]; + +fragment DecimalNumeral: '0' | NonZeroDigit (Digits? | Underscores Digits); + +fragment Digits: Digit (DigitsAndUnderscores? Digit)?; + +fragment Digit: '0' | NonZeroDigit; + +fragment NonZeroDigit: [1-9]; + +fragment DigitsAndUnderscores: DigitOrUnderscore+; + +fragment DigitOrUnderscore: Digit | '_'; + +fragment Underscores: '_'+; + +fragment HexNumeral: '0' [xX] HexDigits; + +fragment HexDigits: HexDigit (HexDigitsAndUnderscores? HexDigit)?; + +fragment HexDigit: [0-9a-fA-F]; + +fragment HexDigitsAndUnderscores: HexDigitOrUnderscore+; + +fragment HexDigitOrUnderscore: HexDigit | '_'; + +fragment OctalNumeral: '0' Underscores? OctalDigits; + +fragment OctalDigits: OctalDigit (OctalDigitsAndUnderscores? OctalDigit)?; + +fragment OctalDigit: [0-7]; + +fragment OctalDigitsAndUnderscores: OctalDigitOrUnderscore+; + +fragment OctalDigitOrUnderscore: OctalDigit | '_'; + +fragment BinaryNumeral: '0' [bB] BinaryDigits; + +fragment BinaryDigits: BinaryDigit (BinaryDigitsAndUnderscores? BinaryDigit)?; + +fragment BinaryDigit: [01]; + +fragment BinaryDigitsAndUnderscores: BinaryDigitOrUnderscore+; + +fragment BinaryDigitOrUnderscore: BinaryDigit | '_'; + +// §3.10.2 Floating-Point Literals + +FloatingPointLiteral: DecimalFloatingPointLiteral | HexadecimalFloatingPointLiteral; + +fragment DecimalFloatingPointLiteral: + Digits '.' Digits? ExponentPart? FloatTypeSuffix? + | '.' Digits ExponentPart? FloatTypeSuffix? + | Digits ExponentPart FloatTypeSuffix? + | Digits FloatTypeSuffix +; + +fragment ExponentPart: ExponentIndicator SignedInteger; + +fragment ExponentIndicator: [eE]; + +fragment SignedInteger: Sign? Digits; + +fragment Sign: [+-]; + +fragment FloatTypeSuffix: [fFdD]; + +fragment HexadecimalFloatingPointLiteral: HexSignificand BinaryExponent FloatTypeSuffix?; + +fragment HexSignificand: HexNumeral '.'? | '0' [xX] HexDigits? '.' HexDigits; + +fragment BinaryExponent: BinaryExponentIndicator SignedInteger; + +fragment BinaryExponentIndicator: [pP]; + +// §3.10.3 Boolean Literals + +BooleanLiteral: 'true' | 'false'; + +// §3.10.4 Character Literals + +CharacterLiteral: '\'' SingleCharacter '\'' | '\'' EscapeSequence '\''; + +fragment SingleCharacter: ~['\\\r\n]; + +// §3.10.5 String Literals + +StringLiteral: '"' StringCharacters? '"'; + +fragment StringCharacters: StringCharacter+; + +fragment StringCharacter: ~["\\\r\n] | EscapeSequence; + +TextBlock: '"""' [ \t]* [\n\r] [.\r\b]* '"""'; + +// §3.10.6 Escape Sequences for Character and String Literals + +fragment EscapeSequence: + '\\' [btnfr"'\\] + | OctalEscape + | UnicodeEscape // This is not in the spec but prevents having to preprocess the input +; + +fragment OctalEscape: + '\\' OctalDigit + | '\\' OctalDigit OctalDigit + | '\\' ZeroToThree OctalDigit OctalDigit +; + +fragment ZeroToThree: [0-3]; + +// This is not in the spec but prevents having to preprocess the input +fragment UnicodeEscape: '\\' 'u'+ HexDigit HexDigit HexDigit HexDigit; + +// §3.10.7 The Null Literal + +NullLiteral: 'null'; + +// §3.11 Separators + +LPAREN : '('; +RPAREN : ')'; +LBRACE : '{'; +RBRACE : '}'; +LBRACK : '['; +RBRACK : ']'; +SEMI : ';'; +COMMA : ','; +DOT : '.'; +ELLIPSIS : '...'; +AT : '@'; +COLONCOLON : '::'; + +// §3.12 Operators + +ASSIGN : '='; +GT : '>'; +LT : '<'; +BANG : '!'; +TILDE : '~'; +QUESTION : '?'; +COLON : ':'; +ARROW : '->'; +EQUAL : '=='; +LE : '<='; +GE : '>='; +NOTEQUAL : '!='; +AND : '&&'; +OR : '||'; +INC : '++'; +DEC : '--'; +ADD : '+'; +SUB : '-'; +MUL : '*'; +DIV : '/'; +BITAND : '&'; +BITOR : '|'; +CARET : '^'; +MOD : '%'; +//LSHIFT : '<<'; +//RSHIFT : '>>'; +//URSHIFT : '>>>'; + +ADD_ASSIGN : '+='; +SUB_ASSIGN : '-='; +MUL_ASSIGN : '*='; +DIV_ASSIGN : '/='; +AND_ASSIGN : '&='; +OR_ASSIGN : '|='; +XOR_ASSIGN : '^='; +MOD_ASSIGN : '%='; +LSHIFT_ASSIGN : '<<='; +RSHIFT_ASSIGN : '>>='; +URSHIFT_ASSIGN : '>>>='; + +// §3.8 Identifiers (must appear after all keywords in the grammar) + +Identifier: IdentifierStart IdentifierPart*; +/* +fragment +JavaLetter + : [a-zA-Z$_] // these are the "java letters" below 0x7F + | // covers all characters above 0x7F which are not a surrogate + ~[\u0000-\u007F\uD800-\uDBFF] {this.wasJavaIdentiferStart()}? + | // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF + [\uD800-\uDBFF] [\uDC00-\uDFFF] {this.wasJavaIdentiferStartUTF16()}? + ; + +fragment +JavaLetterOrDigit + : [a-zA-Z0-9$_] // these are the "java letters or digits" below 0x7F + | // covers all characters above 0x7F which are not a surrogate + ~[\u0000-\u007F\uD800-\uDBFF] {this.wasJavaIdentiferPart()}? + | // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF + [\uD800-\uDBFF] [\uDC00-\uDFFF] {this.wasJavaIdentiferPartUTF16()}? + ;*/ + +// Dropped SMP support as ANTLR has no native support for it +fragment IdentifierStart: + [\u0024] + | [\u0041-\u005A] + | [\u005F] + | [\u0061-\u007A] + | [\u00A2-\u00A5] + | [\u00AA] + | [\u00B5] + | [\u00BA] + | [\u00C0-\u00D6] + | [\u00D8-\u00F6] + | [\u00F8-\u02C1] + | [\u02C6-\u02D1] + | [\u02E0-\u02E4] + | [\u02EC] + | [\u02EE] + | [\u0370-\u0374] + | [\u0376-\u0377] + | [\u037A-\u037D] + | [\u037F] + | [\u0386] + | [\u0388-\u038A] + | [\u038C] + | [\u038E-\u03A1] + | [\u03A3-\u03F5] + | [\u03F7-\u0481] + | [\u048A-\u052F] + | [\u0531-\u0556] + | [\u0559] + | [\u0561-\u0587] + | [\u058F] + | [\u05D0-\u05EA] + | [\u05F0-\u05F2] + | [\u060B] + | [\u0620-\u064A] + | [\u066E-\u066F] + | [\u0671-\u06D3] + | [\u06D5] + | [\u06E5-\u06E6] + | [\u06EE-\u06EF] + | [\u06FA-\u06FC] + | [\u06FF] + | [\u0710] + | [\u0712-\u072F] + | [\u074D-\u07A5] + | [\u07B1] + | [\u07CA-\u07EA] + | [\u07F4-\u07F5] + | [\u07FA] + | [\u0800-\u0815] + | [\u081A] + | [\u0824] + | [\u0828] + | [\u0840-\u0858] + | [\u0860-\u086A] + | [\u08A0-\u08B4] + | [\u08B6-\u08BD] + | [\u0904-\u0939] + | [\u093D] + | [\u0950] + | [\u0958-\u0961] + | [\u0971-\u0980] + | [\u0985-\u098C] + | [\u098F-\u0990] + | [\u0993-\u09A8] + | [\u09AA-\u09B0] + | [\u09B2] + | [\u09B6-\u09B9] + | [\u09BD] + | [\u09CE] + | [\u09DC-\u09DD] + | [\u09DF-\u09E1] + | [\u09F0-\u09F3] + | [\u09FB-\u09FC] + | [\u0A05-\u0A0A] + | [\u0A0F-\u0A10] + | [\u0A13-\u0A28] + | [\u0A2A-\u0A30] + | [\u0A32-\u0A33] + | [\u0A35-\u0A36] + | [\u0A38-\u0A39] + | [\u0A59-\u0A5C] + | [\u0A5E] + | [\u0A72-\u0A74] + | [\u0A85-\u0A8D] + | [\u0A8F-\u0A91] + | [\u0A93-\u0AA8] + | [\u0AAA-\u0AB0] + | [\u0AB2-\u0AB3] + | [\u0AB5-\u0AB9] + | [\u0ABD] + | [\u0AD0] + | [\u0AE0-\u0AE1] + | [\u0AF1] + | [\u0AF9] + | [\u0B05-\u0B0C] + | [\u0B0F-\u0B10] + | [\u0B13-\u0B28] + | [\u0B2A-\u0B30] + | [\u0B32-\u0B33] + | [\u0B35-\u0B39] + | [\u0B3D] + | [\u0B5C-\u0B5D] + | [\u0B5F-\u0B61] + | [\u0B71] + | [\u0B83] + | [\u0B85-\u0B8A] + | [\u0B8E-\u0B90] + | [\u0B92-\u0B95] + | [\u0B99-\u0B9A] + | [\u0B9C] + | [\u0B9E-\u0B9F] + | [\u0BA3-\u0BA4] + | [\u0BA8-\u0BAA] + | [\u0BAE-\u0BB9] + | [\u0BD0] + | [\u0BF9] + | [\u0C05-\u0C0C] + | [\u0C0E-\u0C10] + | [\u0C12-\u0C28] + | [\u0C2A-\u0C39] + | [\u0C3D] + | [\u0C58-\u0C5A] + | [\u0C60-\u0C61] + | [\u0C80] + | [\u0C85-\u0C8C] + | [\u0C8E-\u0C90] + | [\u0C92-\u0CA8] + | [\u0CAA-\u0CB3] + | [\u0CB5-\u0CB9] + | [\u0CBD] + | [\u0CDE] + | [\u0CE0-\u0CE1] + | [\u0CF1-\u0CF2] + | [\u0D05-\u0D0C] + | [\u0D0E-\u0D10] + | [\u0D12-\u0D3A] + | [\u0D3D] + | [\u0D4E] + | [\u0D54-\u0D56] + | [\u0D5F-\u0D61] + | [\u0D7A-\u0D7F] + | [\u0D85-\u0D96] + | [\u0D9A-\u0DB1] + | [\u0DB3-\u0DBB] + | [\u0DBD] + | [\u0DC0-\u0DC6] + | [\u0E01-\u0E30] + | [\u0E32-\u0E33] + | [\u0E3F-\u0E46] + | [\u0E81-\u0E82] + | [\u0E84] + | [\u0E87-\u0E88] + | [\u0E8A] + | [\u0E8D] + | [\u0E94-\u0E97] + | [\u0E99-\u0E9F] + | [\u0EA1-\u0EA3] + | [\u0EA5] + | [\u0EA7] + | [\u0EAA-\u0EAB] + | [\u0EAD-\u0EB0] + | [\u0EB2-\u0EB3] + | [\u0EBD] + | [\u0EC0-\u0EC4] + | [\u0EC6] + | [\u0EDC-\u0EDF] + | [\u0F00] + | [\u0F40-\u0F47] + | [\u0F49-\u0F6C] + | [\u0F88-\u0F8C] + | [\u1000-\u102A] + | [\u103F] + | [\u1050-\u1055] + | [\u105A-\u105D] + | [\u1061] + | [\u1065-\u1066] + | [\u106E-\u1070] + | [\u1075-\u1081] + | [\u108E] + | [\u10A0-\u10C5] + | [\u10C7] + | [\u10CD] + | [\u10D0-\u10FA] + | [\u10FC-\u1248] + | [\u124A-\u124D] + | [\u1250-\u1256] + | [\u1258] + | [\u125A-\u125D] + | [\u1260-\u1288] + | [\u128A-\u128D] + | [\u1290-\u12B0] + | [\u12B2-\u12B5] + | [\u12B8-\u12BE] + | [\u12C0] + | [\u12C2-\u12C5] + | [\u12C8-\u12D6] + | [\u12D8-\u1310] + | [\u1312-\u1315] + | [\u1318-\u135A] + | [\u1380-\u138F] + | [\u13A0-\u13F5] + | [\u13F8-\u13FD] + | [\u1401-\u166C] + | [\u166F-\u167F] + | [\u1681-\u169A] + | [\u16A0-\u16EA] + | [\u16EE-\u16F8] + | [\u1700-\u170C] + | [\u170E-\u1711] + | [\u1720-\u1731] + | [\u1740-\u1751] + | [\u1760-\u176C] + | [\u176E-\u1770] + | [\u1780-\u17B3] + | [\u17D7] + | [\u17DB-\u17DC] + | [\u1820-\u1877] + | [\u1880-\u1884] + | [\u1887-\u18A8] + | [\u18AA] + | [\u18B0-\u18F5] + | [\u1900-\u191E] + | [\u1950-\u196D] + | [\u1970-\u1974] + | [\u1980-\u19AB] + | [\u19B0-\u19C9] + | [\u1A00-\u1A16] + | [\u1A20-\u1A54] + | [\u1AA7] + | [\u1B05-\u1B33] + | [\u1B45-\u1B4B] + | [\u1B83-\u1BA0] + | [\u1BAE-\u1BAF] + | [\u1BBA-\u1BE5] + | [\u1C00-\u1C23] + | [\u1C4D-\u1C4F] + | [\u1C5A-\u1C7D] + | [\u1C80-\u1C88] + | [\u1CE9-\u1CEC] + | [\u1CEE-\u1CF1] + | [\u1CF5-\u1CF6] + | [\u1D00-\u1DBF] + | [\u1E00-\u1F15] + | [\u1F18-\u1F1D] + | [\u1F20-\u1F45] + | [\u1F48-\u1F4D] + | [\u1F50-\u1F57] + | [\u1F59] + | [\u1F5B] + | [\u1F5D] + | [\u1F5F-\u1F7D] + | [\u1F80-\u1FB4] + | [\u1FB6-\u1FBC] + | [\u1FBE] + | [\u1FC2-\u1FC4] + | [\u1FC6-\u1FCC] + | [\u1FD0-\u1FD3] + | [\u1FD6-\u1FDB] + | [\u1FE0-\u1FEC] + | [\u1FF2-\u1FF4] + | [\u1FF6-\u1FFC] + | [\u203F-\u2040] + | [\u2054] + | [\u2071] + | [\u207F] + | [\u2090-\u209C] + | [\u20A0-\u20BF] + | [\u2102] + | [\u2107] + | [\u210A-\u2113] + | [\u2115] + | [\u2119-\u211D] + | [\u2124] + | [\u2126] + | [\u2128] + | [\u212A-\u212D] + | [\u212F-\u2139] + | [\u213C-\u213F] + | [\u2145-\u2149] + | [\u214E] + | [\u2160-\u2188] + | [\u2C00-\u2C2E] + | [\u2C30-\u2C5E] + | [\u2C60-\u2CE4] + | [\u2CEB-\u2CEE] + | [\u2CF2-\u2CF3] + | [\u2D00-\u2D25] + | [\u2D27] + | [\u2D2D] + | [\u2D30-\u2D67] + | [\u2D6F] + | [\u2D80-\u2D96] + | [\u2DA0-\u2DA6] + | [\u2DA8-\u2DAE] + | [\u2DB0-\u2DB6] + | [\u2DB8-\u2DBE] + | [\u2DC0-\u2DC6] + | [\u2DC8-\u2DCE] + | [\u2DD0-\u2DD6] + | [\u2DD8-\u2DDE] + | [\u2E2F] + | [\u3005-\u3007] + | [\u3021-\u3029] + | [\u3031-\u3035] + | [\u3038-\u303C] + | [\u3041-\u3096] + | [\u309D-\u309F] + | [\u30A1-\u30FA] + | [\u30FC-\u30FF] + | [\u3105-\u312E] + | [\u3131-\u318E] + | [\u31A0-\u31BA] + | [\u31F0-\u31FF] + | [\u3400-\u4DB5] + | [\u4E00-\u9FEA] + | [\uA000-\uA48C] + | [\uA4D0-\uA4FD] + | [\uA500-\uA60C] + | [\uA610-\uA61F] + | [\uA62A-\uA62B] + | [\uA640-\uA66E] + | [\uA67F-\uA69D] + | [\uA6A0-\uA6EF] + | [\uA717-\uA71F] + | [\uA722-\uA788] + | [\uA78B-\uA7AE] + | [\uA7B0-\uA7B7] + | [\uA7F7-\uA801] + | [\uA803-\uA805] + | [\uA807-\uA80A] + | [\uA80C-\uA822] + | [\uA838] + | [\uA840-\uA873] + | [\uA882-\uA8B3] + | [\uA8F2-\uA8F7] + | [\uA8FB] + | [\uA8FD] + | [\uA90A-\uA925] + | [\uA930-\uA946] + | [\uA960-\uA97C] + | [\uA984-\uA9B2] + | [\uA9CF] + | [\uA9E0-\uA9E4] + | [\uA9E6-\uA9EF] + | [\uA9FA-\uA9FE] + | [\uAA00-\uAA28] + | [\uAA40-\uAA42] + | [\uAA44-\uAA4B] + | [\uAA60-\uAA76] + | [\uAA7A] + | [\uAA7E-\uAAAF] + | [\uAAB1] + | [\uAAB5-\uAAB6] + | [\uAAB9-\uAABD] + | [\uAAC0] + | [\uAAC2] + | [\uAADB-\uAADD] + | [\uAAE0-\uAAEA] + | [\uAAF2-\uAAF4] + | [\uAB01-\uAB06] + | [\uAB09-\uAB0E] + | [\uAB11-\uAB16] + | [\uAB20-\uAB26] + | [\uAB28-\uAB2E] + | [\uAB30-\uAB5A] + | [\uAB5C-\uAB65] + | [\uAB70-\uABE2] + | [\uAC00-\uD7A3] + | [\uD7B0-\uD7C6] + | [\uD7CB-\uD7FB] + | [\uF900-\uFA6D] + | [\uFA70-\uFAD9] + | [\uFB00-\uFB06] + | [\uFB13-\uFB17] + | [\uFB1D] + | [\uFB1F-\uFB28] + | [\uFB2A-\uFB36] + | [\uFB38-\uFB3C] + | [\uFB3E] + | [\uFB40-\uFB41] + | [\uFB43-\uFB44] + | [\uFB46-\uFBB1] + | [\uFBD3-\uFD3D] + | [\uFD50-\uFD8F] + | [\uFD92-\uFDC7] + | [\uFDF0-\uFDFC] + | [\uFE33-\uFE34] + | [\uFE4D-\uFE4F] + | [\uFE69] + | [\uFE70-\uFE74] + | [\uFE76-\uFEFC] + | [\uFF04] + | [\uFF21-\uFF3A] + | [\uFF3F] + | [\uFF41-\uFF5A] + | [\uFF66-\uFFBE] + | [\uFFC2-\uFFC7] + | [\uFFCA-\uFFCF] + | [\uFFD2-\uFFD7] + | [\uFFDA-\uFFDC] + | [\uFFE0-\uFFE1] + | [\uFFE5-\uFFE6] +; + +fragment IdentifierPart: + IdentifierStart + | [\u0030-\u0039] + | [\u007F-\u009F] + | [\u00AD] + | [\u0300-\u036F] + | [\u0483-\u0487] + | [\u0591-\u05BD] + | [\u05BF] + | [\u05C1-\u05C2] + | [\u05C4-\u05C5] + | [\u05C7] + | [\u0600-\u0605] + | [\u0610-\u061A] + | [\u061C] + | [\u064B-\u0669] + | [\u0670] + | [\u06D6-\u06DD] + | [\u06DF-\u06E4] + | [\u06E7-\u06E8] + | [\u06EA-\u06ED] + | [\u06F0-\u06F9] + | [\u070F] + | [\u0711] + | [\u0730-\u074A] + | [\u07A6-\u07B0] + | [\u07C0-\u07C9] + | [\u07EB-\u07F3] + | [\u0816-\u0819] + | [\u081B-\u0823] + | [\u0825-\u0827] + | [\u0829-\u082D] + | [\u0859-\u085B] + | [\u08D4-\u0903] + | [\u093A-\u093C] + | [\u093E-\u094F] + | [\u0951-\u0957] + | [\u0962-\u0963] + | [\u0966-\u096F] + | [\u0981-\u0983] + | [\u09BC] + | [\u09BE-\u09C4] + | [\u09C7-\u09C8] + | [\u09CB-\u09CD] + | [\u09D7] + | [\u09E2-\u09E3] + | [\u09E6-\u09EF] + | [\u0A01-\u0A03] + | [\u0A3C] + | [\u0A3E-\u0A42] + | [\u0A47-\u0A48] + | [\u0A4B-\u0A4D] + | [\u0A51] + | [\u0A66-\u0A71] + | [\u0A75] + | [\u0A81-\u0A83] + | [\u0ABC] + | [\u0ABE-\u0AC5] + | [\u0AC7-\u0AC9] + | [\u0ACB-\u0ACD] + | [\u0AE2-\u0AE3] + | [\u0AE6-\u0AEF] + | [\u0AFA-\u0AFF] + | [\u0B01-\u0B03] + | [\u0B3C] + | [\u0B3E-\u0B44] + | [\u0B47-\u0B48] + | [\u0B4B-\u0B4D] + | [\u0B56-\u0B57] + | [\u0B62-\u0B63] + | [\u0B66-\u0B6F] + | [\u0B82] + | [\u0BBE-\u0BC2] + | [\u0BC6-\u0BC8] + | [\u0BCA-\u0BCD] + | [\u0BD7] + | [\u0BE6-\u0BEF] + | [\u0C00-\u0C03] + | [\u0C3E-\u0C44] + | [\u0C46-\u0C48] + | [\u0C4A-\u0C4D] + | [\u0C55-\u0C56] + | [\u0C62-\u0C63] + | [\u0C66-\u0C6F] + | [\u0C81-\u0C83] + | [\u0CBC] + | [\u0CBE-\u0CC4] + | [\u0CC6-\u0CC8] + | [\u0CCA-\u0CCD] + | [\u0CD5-\u0CD6] + | [\u0CE2-\u0CE3] + | [\u0CE6-\u0CEF] + | [\u0D00-\u0D03] + | [\u0D3B-\u0D3C] + | [\u0D3E-\u0D44] + | [\u0D46-\u0D48] + | [\u0D4A-\u0D4D] + | [\u0D57] + | [\u0D62-\u0D63] + | [\u0D66-\u0D6F] + | [\u0D82-\u0D83] + | [\u0DCA] + | [\u0DCF-\u0DD4] + | [\u0DD6] + | [\u0DD8-\u0DDF] + | [\u0DE6-\u0DEF] + | [\u0DF2-\u0DF3] + | [\u0E31] + | [\u0E34-\u0E3A] + | [\u0E47-\u0E4E] + | [\u0E50-\u0E59] + | [\u0EB1] + | [\u0EB4-\u0EB9] + | [\u0EBB-\u0EBC] + | [\u0EC8-\u0ECD] + | [\u0ED0-\u0ED9] + | [\u0F18-\u0F19] + | [\u0F20-\u0F29] + | [\u0F35] + | [\u0F37] + | [\u0F39] + | [\u0F3E-\u0F3F] + | [\u0F71-\u0F84] + | [\u0F86-\u0F87] + | [\u0F8D-\u0F97] + | [\u0F99-\u0FBC] + | [\u0FC6] + | [\u102B-\u103E] + | [\u1040-\u1049] + | [\u1056-\u1059] + | [\u105E-\u1060] + | [\u1062-\u1064] + | [\u1067-\u106D] + | [\u1071-\u1074] + | [\u1082-\u108D] + | [\u108F-\u109D] + | [\u135D-\u135F] + | [\u1712-\u1714] + | [\u1732-\u1734] + | [\u1752-\u1753] + | [\u1772-\u1773] + | [\u17B4-\u17D3] + | [\u17DD] + | [\u17E0-\u17E9] + | [\u180B-\u180E] + | [\u1810-\u1819] + | [\u1885-\u1886] + | [\u18A9] + | [\u1920-\u192B] + | [\u1930-\u193B] + | [\u1946-\u194F] + | [\u19D0-\u19D9] + | [\u1A17-\u1A1B] + | [\u1A55-\u1A5E] + | [\u1A60-\u1A7C] + | [\u1A7F-\u1A89] + | [\u1A90-\u1A99] + | [\u1AB0-\u1ABD] + | [\u1B00-\u1B04] + | [\u1B34-\u1B44] + | [\u1B50-\u1B59] + | [\u1B6B-\u1B73] + | [\u1B80-\u1B82] + | [\u1BA1-\u1BAD] + | [\u1BB0-\u1BB9] + | [\u1BE6-\u1BF3] + | [\u1C24-\u1C37] + | [\u1C40-\u1C49] + | [\u1C50-\u1C59] + | [\u1CD0-\u1CD2] + | [\u1CD4-\u1CE8] + | [\u1CED] + | [\u1CF2-\u1CF4] + | [\u1CF7-\u1CF9] + | [\u1DC0-\u1DF9] + | [\u1DFB-\u1DFF] + | [\u200B-\u200F] + | [\u202A-\u202E] + | [\u2060-\u2064] + | [\u2066-\u206F] + | [\u20D0-\u20DC] + | [\u20E1] + | [\u20E5-\u20F0] + | [\u2CEF-\u2CF1] + | [\u2D7F] + | [\u2DE0-\u2DFF] + | [\u302A-\u302F] + | [\u3099-\u309A] + | [\uA620-\uA629] + | [\uA66F] + | [\uA674-\uA67D] + | [\uA69E-\uA69F] + | [\uA6F0-\uA6F1] + | [\uA802] + | [\uA806] + | [\uA80B] + | [\uA823-\uA827] + | [\uA880-\uA881] + | [\uA8B4-\uA8C5] + | [\uA8D0-\uA8D9] + | [\uA8E0-\uA8F1] + | [\uA900-\uA909] + | [\uA926-\uA92D] + | [\uA947-\uA953] + | [\uA980-\uA983] + | [\uA9B3-\uA9C0] + | [\uA9D0-\uA9D9] + | [\uA9E5] + | [\uA9F0-\uA9F9] + | [\uAA29-\uAA36] + | [\uAA43] + | [\uAA4C-\uAA4D] + | [\uAA50-\uAA59] + | [\uAA7B-\uAA7D] + | [\uAAB0] + | [\uAAB2-\uAAB4] + | [\uAAB7-\uAAB8] + | [\uAABE-\uAABF] + | [\uAAC1] + | [\uAAEB-\uAAEF] + | [\uAAF5-\uAAF6] + | [\uABE3-\uABEA] + | [\uABEC-\uABED] + | [\uABF0-\uABF9] + | [\uFB1E] + | [\uFE00-\uFE0F] + | [\uFE20-\uFE2F] + | [\uFEFF] + | [\uFF10-\uFF19] + | [\uFFF9-\uFFFB] +; + +// +// Whitespace and comments +// + +WS : (' '|'\r'|'\t'|'\n') -> channel(HIDDEN); + +COMMENT: '/*' .*? '*/' -> channel(HIDDEN); + +LINE_COMMENT: '//' ~[\r\n]* -> channel(HIDDEN); \ No newline at end of file diff --git a/cfg_generator/grammar/JavaParser.g4 b/cfg_generator/grammar/JavaParser.g4 new file mode 100644 index 00000000..517795c2 --- /dev/null +++ b/cfg_generator/grammar/JavaParser.g4 @@ -0,0 +1,1588 @@ +// $antlr-format alignTrailingComments true, columnLimit 150, minEmptyLines 1, maxEmptyLinesToKeep 1, reflowComments false, useTab false +// $antlr-format allowShortRulesOnASingleLine false, allowShortBlocksOnASingleLine true, alignSemicolons hanging, alignColons hanging + +parser grammar JavaParser; + +options { + tokenVocab = JavaLexer; +} + +//============= + +start_ + : compilationUnit EOF + ; + +// Paragraph 3.10 +// -------------- + +literal + : IntegerLiteral + | FloatingPointLiteral + | BooleanLiteral + | CharacterLiteral + | StringLiteral + | TextBlock + | NullLiteral + ; + +// Paragraph 3.8 +// ------------- + +typeIdentifier + : Identifier + ; + +unqualifiedMethodIdentifier + : Identifier + ; + +// Paragraph 4.1 // Type is not used. +// Type ::= primitiveType +// | referenceType +// ; + +// Paragraph 4.2 +// ------------- + +primitiveType + : annotation* (numericType | 'boolean') + ; + +numericType + : integralType + | floatingPointType + ; + +integralType + : 'byte' + | 'short' + | 'int' + | 'long' + | 'char' + ; + +floatingPointType + : 'float' + | 'double' + ; + +// Paragraph 4.3 +// ------------- + +referenceType + : classOrInterfaceType + | typeVariable + | arrayType + ; + +// replace classType in classOrInterfaceType + +// classOrInterfaceType +// : classType +// | interfaceType +// ; +// + +// classOrInterfaceType +// : annotation* typeIdentifier typeArguments? coit +// | packageName '.' annotation* typeIdentifier typeArguments? coit +// | classOrInterfaceType '.' annotation* typeIdentifier typeArguments? +// | interfaceType coit +// ; +// + +coit + : '.' annotation* typeIdentifier typeArguments? coit? + ; + +classOrInterfaceType + : (packageName '.')? annotation* typeIdentifier typeArguments? coit? + ; + +classType + : annotation* typeIdentifier typeArguments? + | packageName '.' annotation* typeIdentifier typeArguments? + | classOrInterfaceType '.' annotation* typeIdentifier typeArguments? + ; + +interfaceType + : classType + ; + +typeVariable + : annotation* typeIdentifier + ; + +arrayType + : primitiveType dims + | classType dims + | typeVariable dims + ; + +dims + : annotation* '[' ']' (annotation* '[' ']')* + ; + +// Paragraph 4.4 +// ------------- + +typeParameter + : typeParameterModifier* typeIdentifier typeBound? + ; + +typeParameterModifier + : annotation + ; + +typeBound + : 'extends' (typeVariable | classOrInterfaceType additionalBound*) + ; + +additionalBound + : '&' interfaceType + ; + +// Paragraph 4.5.1 +// --------------- + +typeArguments + : '<' typeArgumentList '>' + ; + +typeArgumentList + : typeArgument (',' typeArgument)* + ; + +typeArgument + : referenceType + | wildcard + ; + +wildcard + : annotation* '?' wildcardBounds? + ; + +wildcardBounds + : 'extends' referenceType + | 'super' referenceType + ; + +// Paragraph 6.5 +// ------------- + +moduleName + : Identifier ('.' moduleName)? + // left recursion --> right recursion + ; + +packageName + : Identifier ('.' packageName)? + // left recursion --> right recursion + ; + +typeName + : packageName ('.' typeIdentifier)? + ; + +packageOrTypeName + : Identifier ('.' packageOrTypeName)? + // left recursion --> right recursion + ; + +expressionName + : (ambiguousName '.')? Identifier + ; + +methodName + : unqualifiedMethodIdentifier + ; + +ambiguousName + : Identifier ('.' ambiguousName)? + // left recursion --> right recursion + ; + +// Paragraph 7.3 +// ------------- + +compilationUnit + : ordinaryCompilationUnit + | modularCompilationUnit + ; + +ordinaryCompilationUnit + : packageDeclaration? importDeclaration* topLevelClassOrInterfaceDeclaration* + ; + +modularCompilationUnit + : importDeclaration* moduleDeclaration + ; + +// Paragraph 7.4 +// ------------- + +packageDeclaration + : packageModifier* 'package' Identifier ('.' Identifier)* ';' + ; + +packageModifier + : annotation + ; + +// Paragraph 7.5 +// ------------- + +importDeclaration + : singleTypeImportDeclaration + | typeImportOnDemandDeclaration + | singleStaticImportDeclaration + | staticImportOnDemandDeclaration + ; + +singleTypeImportDeclaration + : 'import' typeName ';' + ; + +typeImportOnDemandDeclaration + : 'import' packageOrTypeName '.' '*' ';' + ; + +singleStaticImportDeclaration + : 'import' 'static' typeName '.' Identifier ';' + ; + +staticImportOnDemandDeclaration + : 'import' 'static' typeName '.' '*' ';' + ; + +// Paragraph 7.6 +// ------------- + +topLevelClassOrInterfaceDeclaration + : classDeclaration + | interfaceDeclaration + | ';' + ; + +// Paragraph 7.7 +// ------------- + +moduleDeclaration + : annotation* 'open'? 'module' Identifier ('.' Identifier)* '{' moduleDirective* '}' + ; + +moduleDirective + : 'requires' requiresModifier* moduleName ';' + | 'exports' packageName ('to' moduleName ( ',' moduleName)*)? ';' + | 'opens' packageName ('to' moduleName ( ',' moduleName)*)? ';' + | 'uses' typeName ';' + | 'provides' typeName 'with' typeName ( ',' typeName)* ';' + ; + +requiresModifier + : 'transitive' + | 'static' + ; + +// Paragraph 8.1 +// ------------- + +classDeclaration + : normalClassDeclaration + | enumDeclaration + | recordDeclaration + ; + +normalClassDeclaration + : classModifier* 'class' typeIdentifier typeParameters? classExtends? classImplements? classPermits? classBody + ; + +classModifier + : annotation + | 'public' + | 'protected' + | 'private' + | 'abstract' + | 'static' + | 'final' + | 'sealed' + | 'non-sealed' + | 'strictfp' + ; + +typeParameters + : '<' typeParameterList '>' + ; + +typeParameterList + : typeParameter (',' typeParameter)* + ; + +classExtends + : 'extends' classType + ; + +classImplements + : 'implements' interfaceTypeList + ; + +interfaceTypeList + : interfaceType (',' interfaceType)* + ; + +classPermits + : 'permits' typeName (',' typeName)* + ; + +classBody + : '{' classBodyDeclaration* '}' + ; + +classBodyDeclaration + : classMemberDeclaration + | instanceInitializer + | staticInitializer + | constructorDeclaration + ; + +classMemberDeclaration + : fieldDeclaration + | methodDeclaration + | classDeclaration + | interfaceDeclaration + | ';' + ; + +// Paragraph 8.3 +// ------------- + +fieldDeclaration + : fieldModifier* unannType variableDeclaratorList ';' + ; + +fieldModifier + : annotation + | 'public' + | 'protected' + | 'private' + | 'static' + | 'final' + | 'transient' + | 'volatile' + ; + +variableDeclaratorList + : variableDeclarator (',' variableDeclarator)* + ; + +variableDeclarator + : variableDeclaratorId ('=' variableInitializer)? + ; + +variableDeclaratorId + : Identifier dims? + ; + +variableInitializer + : expression + | arrayInitializer + ; + +unannType + : unannPrimitiveType + | unannReferenceType + ; + +unannPrimitiveType + : numericType + | 'boolean' + ; + +unannReferenceType + : unannClassOrInterfaceType + | unannTypeVariable + | unannArrayType + ; + +// Replace unannClassType in unannClassOrInterfaceType + +// unannClassOrInterfaceType +// : unannClassType +// | unannInterfaceType +// ; +// + +unannClassOrInterfaceType + : (packageName '.' annotation*)? typeIdentifier typeArguments? uCOIT? + ; + +uCOIT + : '.' annotation* typeIdentifier typeArguments? uCOIT? + ; + +unannClassType + : typeIdentifier typeArguments? + | (packageName | unannClassOrInterfaceType) '.' annotation* typeIdentifier typeArguments? + ; + +unannInterfaceType + : unannClassType + ; + +unannTypeVariable + : typeIdentifier + ; + +unannArrayType + : (unannPrimitiveType | unannClassOrInterfaceType | unannTypeVariable) dims + ; + +// Paragraph 8.4 +// ------------- + +methodDeclaration + : methodModifier* methodHeader methodBody + ; + +methodModifier + : annotation + | 'public' + | 'protected' + | 'private' + | 'abstract' + | 'static' + | 'final' + | 'synchronized' + | 'native' + | 'strictfp' + ; + +methodHeader + : (typeParameters annotation*)? result methodDeclarator throwsT? + ; + +result + : unannType + | 'void' + ; + +methodDeclarator + : Identifier '(' (receiverParameter ',')? formalParameterList? ')' dims? + ; + +receiverParameter + : annotation* unannType (Identifier '.')? 'this' + ; + +formalParameterList + : formalParameter (',' formalParameter)* + ; + +formalParameter + : variableModifier* unannType variableDeclaratorId + | variableArityParameter + ; + +variableArityParameter + : variableModifier* unannType annotation* '...' Identifier + ; + +variableModifier + : annotation + | 'final' + ; + +throwsT + : 'throws' exceptionTypeList + ; + +exceptionTypeList + : exceptionType (',' exceptionType)* + ; + +exceptionType + : classType + | typeVariable + ; + +methodBody + : block + | ';' + ; + +// Paragraph 8.6 +// ------------- + +instanceInitializer + : block + ; + +// Paragraph 8.7 +// ------------- + +staticInitializer + : 'static' block + ; + +// Paragraph 8.8 +// ------------- + +constructorDeclaration + : constructorModifier* constructorDeclarator throwsT? constructorBody + ; + +constructorModifier + : annotation + | 'public' + | 'protected' + | 'private' + ; + +constructorDeclarator + : typeParameters? simpleTypeName '(' (receiverParameter ',')? formalParameterList? ')' + ; + +simpleTypeName + : typeIdentifier + ; + +constructorBody + : '{' explicitConstructorInvocation? blockStatements? '}' + ; + +explicitConstructorInvocation + : typeArguments? ('this' | 'super') '(' argumentList? ')' ';' + | (expressionName | primary) '.' typeArguments? 'super' '(' argumentList? ')' ';' + ; + +// Paragraph 8.9 +// ------------- + +enumDeclaration + : classModifier* 'enum' typeIdentifier classImplements? enumBody + ; + +enumBody + : '{' enumConstantList? ','? enumBodyDeclarations? '}' + // It is not my grammarmistake! It is based on //docs.oracle.com/javase/specs/jls/se20/jls20.pdf. + // Notice, javac accepts "enum One { , }" and also "enum Two { , ; {} }" + ; + +enumConstantList + : enumConstant (',' enumConstant)* + ; + +enumConstant + : enumConstantModifier* Identifier ('(' argumentList? ')')? classBody? + ; + +enumConstantModifier + : annotation + ; + +enumBodyDeclarations + : ';' classBodyDeclaration* + ; + +// Paragraph 8.10 +// -------------- + +recordDeclaration + : classModifier* 'record' typeIdentifier typeParameters? recordHeader classImplements? recordBody + ; + +recordHeader + : '(' recordComponentList? ')' + ; + +recordComponentList + : recordComponent (',' recordComponent)* + ; + +recordComponent + : recordComponentModifier* unannType Identifier + | variableArityRecordComponent + ; + +variableArityRecordComponent + : recordComponentModifier* unannType annotation* '...' Identifier + ; + +recordComponentModifier + : annotation + ; + +recordBody + : '{' recordBodyDeclaration* '}' + ; + +recordBodyDeclaration + : classBodyDeclaration + | compactConstructorDeclaration + ; + +compactConstructorDeclaration + : constructorModifier* simpleTypeName constructorBody + ; + +// Paragraph 9.1 +// ------------- + +interfaceDeclaration + : normalInterfaceDeclaration + | annotationInterfaceDeclaration + ; + +normalInterfaceDeclaration + : interfaceModifier* 'interface' typeIdentifier typeParameters? interfaceExtends? interfacePermits? interfaceBody + ; + +interfaceModifier + : annotation + | 'public' + | 'protected' + | 'private' + | 'abstract' + | 'static' + | 'sealed' + | 'non-sealed' + | 'strictfp' + ; + +interfaceExtends + : 'extends' interfaceTypeList + ; + +interfacePermits + : 'permits' typeName (',' typeName)* + ; + +interfaceBody + : '{' interfaceMemberDeclaration* '}' + ; + +interfaceMemberDeclaration + : constantDeclaration + | interfaceMethodDeclaration + | classDeclaration + | interfaceDeclaration + | ';' + ; + +// Paragraph 9.3 +// ------------- + +constantDeclaration + : constantModifier* unannType variableDeclaratorList ';' + ; + +constantModifier + : annotation + | 'public' + | 'static' + | 'final' + ; + +// Paragraph 9.4 +// ------------- + +interfaceMethodDeclaration + : interfaceMethodModifier* methodHeader methodBody + ; + +interfaceMethodModifier + : annotation + | 'public' + | 'private' + | 'abstract' + | 'default' + | 'static' + | 'strictfp' + ; + +// Paragraph 9.6 +// ------------- + +annotationInterfaceDeclaration + : interfaceModifier* '@' 'interface' typeIdentifier annotationInterfaceBody + ; + +annotationInterfaceBody + : '{' annotationInterfaceMemberDeclaration* '}' + ; + +annotationInterfaceMemberDeclaration + : annotationInterfaceElementDeclaration + | constantDeclaration + | classDeclaration + | interfaceDeclaration + | ';' + ; + +annotationInterfaceElementDeclaration + : annotationInterfaceElementModifier* unannType Identifier '(' ')' dims? defaultValue? ';' + ; + +annotationInterfaceElementModifier + : annotation + | 'public' + | 'abstract' + ; + +defaultValue + : 'default' elementValue + ; + +// Paragraph 9.7 +// ------------- + +annotation + : normalAnnotation + | markerAnnotation + | singleElementAnnotation + ; + +normalAnnotation + : '@' typeName '(' elementValuePairList? ')' + ; + +elementValuePairList + : elementValuePair (',' elementValuePair)* + ; + +elementValuePair + : Identifier '=' elementValue + ; + +elementValue + : conditionalExpression + | elementValueArrayInitializer + | annotation + ; + +elementValueArrayInitializer + : '{' elementValueList? ','? '}' + ; + +elementValueList + : elementValue (',' elementValue)* + ; + +markerAnnotation + : '@' typeName + ; + +singleElementAnnotation + : '@' typeName '(' elementValue ')' + ; + +// Paragraph 10.6 +// -------------- + +arrayInitializer + : '{' variableInitializerList? ','? '}' + // Strange ',' ?! staat ook in antlr_java.g4 + ; + +variableInitializerList + : variableInitializer (',' variableInitializer)* + ; + +// Paragraph 14.2 +// -------------- + +block + : '{' blockStatements? '}' + ; + +blockStatements + : blockStatement blockStatement* + ; + +blockStatement + : localClassOrInterfaceDeclaration + | localVariableDeclarationStatement + | statement + ; + +// Paragraph 14.3 +// -------------- + +localClassOrInterfaceDeclaration + : classDeclaration + | normalInterfaceDeclaration + ; + +// Paragraph 14.4 +// -------------- + +localVariableDeclaration + : variableModifier* localVariableType variableDeclaratorList? + ; + +localVariableType + : unannType + | 'var' + ; + +localVariableDeclarationStatement + : localVariableDeclaration ';' + ; + +// Paragraph 14.5 +// -------------- + +statement + : statementWithoutTrailingSubstatement + | labeledStatement + | ifThenStatement + | ifThenElseStatement + | whileStatement + | forStatement + ; + +statementNoShortIf + : statementWithoutTrailingSubstatement + | labeledStatementNoShortIf + | ifThenElseStatementNoShortIf + | whileStatementNoShortIf + | forStatementNoShortIf + ; + +statementWithoutTrailingSubstatement + : block + | emptyStatement_ + | expressionStatement + | assertStatement + | switchStatement + | doStatement + | breakStatement + | continueStatement + | returnStatement + | synchronizedStatement + | throwStatement + | tryStatement + | yieldStatement + ; + +// Paragraph 14.6 +// -------------- + +emptyStatement_ + : ';' + ; + +// Paragraph 14.7 +// -------------- + +labeledStatement + : Identifier ':' statement + ; + +labeledStatementNoShortIf + : Identifier ':' statementNoShortIf + ; + +// Paragraph 14.8 +// -------------- + +expressionStatement + : statementExpression ';' + ; + +statementExpression + : assignment + | preIncrementExpression + | preDecrementExpression + | postIncrementExpression + | postDecrementExpression + | methodInvocation + | classInstanceCreationExpression + ; + +// Paragraph 14.9 +// -------------- + +ifThenStatement + : 'if' '(' expression ')' statement + ; + +ifThenElseStatement + : 'if' '(' expression ')' statementNoShortIf 'else' statement + ; + +ifThenElseStatementNoShortIf + : 'if' '(' expression ')' statementNoShortIf 'else' statementNoShortIf + ; + +// Paragraph 14.10 +// --------------- + +assertStatement + : 'assert' expression (':' expression)? ';' + ; + +// Paragraph 14.11 +// -------------- + +switchStatement + : 'switch' '(' expression ')' switchBlock + ; + +switchBlock + : '{' switchRule switchRule* '}' + | '{' switchBlockStatementGroup* ( switchLabel ':')* '}' + ; + +switchRule + : switchLabel '->' (expression ';' | block | throwStatement) + ; + +switchBlockStatementGroup + : switchLabel ':' (switchLabel ':')* blockStatements + ; + +switchLabel + : 'case' caseConstant (',' caseConstant)* + | 'default' + ; + +caseConstant + : conditionalExpression + ; + +// Paragraph 14.12 +// --------------- + +whileStatement + : 'while' '(' expression ')' statement + ; + +whileStatementNoShortIf + : 'while' '(' expression ')' statementNoShortIf + ; + +// Paragraph 14.13 +// --------------- + +doStatement + : 'do' statement 'while' '(' expression ')' ';' + ; + +// Paragraph 14.14 +// --------------- + +forStatement + : basicForStatement + | enhancedForStatement + ; + +forStatementNoShortIf + : basicForStatementNoShortIf + | enhancedForStatementNoShortIf + ; + +basicForStatement + : 'for' '(' forInit? ';' expression? ';' forUpdate? ')' statement + ; + +basicForStatementNoShortIf + : 'for' '(' forInit? ';' expression? ';' forUpdate? ')' statementNoShortIf + ; + +forInit + : statementExpressionList + | localVariableDeclaration + ; + +forUpdate + : statementExpressionList + ; + +statementExpressionList + : statementExpression (',' statementExpression)* + ; + +enhancedForStatement + : 'for' '(' localVariableDeclaration ':' expression ')' statement + ; + +enhancedForStatementNoShortIf + : 'for' '(' localVariableDeclaration ':' expression ')' statementNoShortIf + ; + +// Paragraph 14.15 +// --------------- + +breakStatement + : 'break' Identifier? ';' + ; + +// Paragraph 14.16 +// --------------- + +continueStatement + : 'continue' Identifier? ';' + ; + +// Paragraph 14.17 +// --------------- + +returnStatement + : 'return' expression? ';' + ; + +// Paragraph 14.18 +// --------------- + +throwStatement + : 'throw' expression ';' + ; + +// Paragraph 14.19 +// --------------- + +synchronizedStatement + : 'synchronized' '(' expression ')' block + ; + +// Paragraph 14.20 +// --------------- + +tryStatement + : 'try' block catches + | 'try' block finallyBlock + | 'try' block catches? finallyBlock + | tryWithResourcesStatement + ; + +catches + : catchClause catchClause* + ; + +catchClause + : 'catch' '(' catchFormalParameter ')' block + ; + +catchFormalParameter + : variableModifier* catchType variableDeclaratorId + ; + +catchType + : unannClassType ('|' classType)* + ; + +finallyBlock + : 'finally' block + ; + +tryWithResourcesStatement + : 'try' resourceSpecification block catches? finallyBlock? + ; + +resourceSpecification + : '(' resourceList ';'? ')' + ; + +resourceList + : resource (';' resource)* + ; + +resource + : localVariableDeclaration + | variableAccess + ; + +variableAccess + : expressionName + | fieldAccess + ; + +// Paragraph 14.21 +//---------------- + +yieldStatement + : 'yield' expression ';' + ; + +// Paragraph 14.30 +// -------------- + +pattern + : typePattern + ; + +typePattern + : localVariableDeclaration + ; + +// Paragraph 15.2 +// -------------- + +expression + : lambdaExpression + | assignmentExpression + ; + +// Paragraph 15.8 +// -------------- + +primary + : primaryNoNewArray + | arrayCreationExpression + ; + +// Replace classInstanceCreationExpression, fieldAccess, arrayAccess, methodInvocation, and +// methodReference in primaryNoNewArray. +// Replace in these two rules primary by primaryNoNewArray. + +// primaryNoNewArray +// : literal +// | classLiteral +// | 'this' +// | typeName '.' 'this' +// | '(' expression ')' +// | classInstanceCreationExpression +// | fieldAccess +// | arrayAccess +// | methodInvocation +// | methodReference +// ; +// + +// primaryNoNewArray +// : literal +// | classLiteral +// | 'this' +// | typeName '.' 'this' +// | '(' expression ')' +// | unqualifiedClassInstanceCreationExpression +// | expressionName '.' unqualifiedClassInstanceCreationExpression +// +// | primaryNoNewArray '.' unqualifiedClassInstanceCreationExpression +// | arrayCreationExpression '.' unqualifiedClassInstanceCreationExpression +// +// | primaryNoNewArray '.' Identifier +// | arrayCreationExpression '.' Identifier +// +// | 'super' '.' Identifier +// | typeName '.' 'super' '.' Identifier +// +// | expressionName '[' expression ']' +// | primaryNoNewArray '[' expression ']' +// | arrayCreationExpressionWithInitializer '[' expression ']' +// +// | methodName '(' argumentList? ')' +// | typeName '.' typeArguments? Identifier '(' argumentList? ')' +// | expressionName '.' typeArguments? Identifier '(' argumentList? ')' +// +// | primaryNoNewArray '.' typeArguments? Identifier '(' argumentList? ')' +// | arrayCreationExpression '.' typeArguments? Identifier '(' argumentList? ')' +// +// | 'super' '.' typeArguments? Identifier '(' argumentList? ')' +// | typeName '.' 'super' '.' typeArguments? Identifier '(' argumentList? ')' +// +// | expressionName '::' typeArguments? Identifier +// +// | primaryNoNewArray '::' typeArguments? Identifier +// | arrayCreationExpression '::' typeArguments? Identifier +// +// +// | referenceType '::' typeArguments? Identifier +// | 'super' '::' typeArguments? Identifier +// | typeName '.' 'super' '::' typeArguments? Identifier +// | classType '::' typeArguments? 'new' +// | arrayType '::' 'new' +// ; +// + +primaryNoNewArray + : literal pNNA? + | classLiteral pNNA? + | 'this' pNNA? + | typeName '.' 'this' pNNA? + | '(' expression ')' pNNA? + | unqualifiedClassInstanceCreationExpression pNNA? + | expressionName '.' unqualifiedClassInstanceCreationExpression pNNA? + | arrayCreationExpression '.' unqualifiedClassInstanceCreationExpression pNNA? + | arrayCreationExpression '.' Identifier pNNA? + | 'super' '.' Identifier pNNA? + | typeName '.' 'super' '.' Identifier pNNA? + | expressionName '[' expression ']' pNNA? + | arrayCreationExpressionWithInitializer '[' expression ']' pNNA? + | methodName '(' argumentList? ')' pNNA? + | typeName '.' typeArguments? Identifier '(' argumentList? ')' pNNA? + | expressionName '.' typeArguments? Identifier '(' argumentList? ')' pNNA? + | arrayCreationExpression '.' typeArguments? Identifier '(' argumentList? ')' pNNA? + | 'super' '.' typeArguments? Identifier '(' argumentList? ')' pNNA? + | typeName '.' 'super' '.' typeArguments? Identifier '(' argumentList? ')' pNNA? + | expressionName '::' typeArguments? Identifier pNNA? + | arrayCreationExpression '::' typeArguments? Identifier pNNA? + | referenceType '::' typeArguments? Identifier pNNA? + | 'super' '::' typeArguments? Identifier pNNA? + | typeName '.' 'super' '::' typeArguments? Identifier pNNA? + | classType '::' typeArguments? 'new' pNNA? + | arrayType '::' 'new' pNNA? + ; + +pNNA + : '.' unqualifiedClassInstanceCreationExpression pNNA? + | '.' Identifier pNNA? + | '[' expression ']' pNNA? + | '.' typeArguments? Identifier '(' argumentList? ')' pNNA? + | '::' typeArguments? Identifier pNNA? + ; + +classLiteral + : typeName ('[' ']')* '.' 'class' + | numericType ( '[' ']')* '.' 'class' + | 'boolean' ( '[' ']')* '.' 'class' + | 'void' '.' 'class' + ; + +// Paragraph 15.9 +// -------------- + +classInstanceCreationExpression + : unqualifiedClassInstanceCreationExpression + | expressionName '.' unqualifiedClassInstanceCreationExpression + | primary '.' unqualifiedClassInstanceCreationExpression + ; + +unqualifiedClassInstanceCreationExpression + : 'new' typeArguments? classOrInterfaceTypeToInstantiate '(' argumentList? ')' classBody? + ; + +classOrInterfaceTypeToInstantiate + : annotation* Identifier ('.' annotation* Identifier)* typeArgumentsOrDiamond? + ; + +typeArgumentsOrDiamond + : typeArguments + | '<>' + ; + +// Paragraph 15.10 +// --------------- + +arrayCreationExpression + : arrayCreationExpressionWithoutInitializer + | arrayCreationExpressionWithInitializer + ; + +arrayCreationExpressionWithoutInitializer + : 'new' primitiveType dimExprs dims? + | 'new' classType dimExprs dims? + ; + +arrayCreationExpressionWithInitializer + : 'new' primitiveType dims arrayInitializer + | 'new' classOrInterfaceType dims arrayInitializer + ; + +dimExprs + : dimExpr dimExpr* + ; + +dimExpr + : annotation* '[' expression ']' + ; + +arrayAccess + : expressionName '[' expression ']' + | primaryNoNewArray '[' expression ']' + | arrayCreationExpressionWithInitializer '[' expression ']' + ; + +// Paragraph 15.11 +// --------------- + +fieldAccess + : primary '.' Identifier + | 'super' '.' Identifier + | typeName '.' 'super' '.' Identifier + ; + +// Paragraph 15.12 +// --------------- + +methodInvocation + : methodName '(' argumentList? ')' + | typeName '.' typeArguments? Identifier '(' argumentList? ')' + | expressionName '.' typeArguments? Identifier '(' argumentList? ')' + | primary '.' typeArguments? Identifier '(' argumentList? ')' + | 'super' '.' typeArguments? Identifier '(' argumentList? ')' + | typeName '.' 'super' '.' typeArguments? Identifier '(' argumentList? ')' + ; + +argumentList + : expression (',' expression)* + ; + +// Paragraph 15.13 +// --------------- + +methodReference + : expressionName '::' typeArguments? Identifier + | primary '::' typeArguments? Identifier + | referenceType '::' typeArguments? Identifier + | 'super' '::' typeArguments? Identifier + | typeName '.' 'super' '::' typeArguments? Identifier + | classType '::' typeArguments? 'new' + | arrayType '::' 'new' + ; + +// Paragraph 15.14 +// --------------- + +// Replace postIncrementExpression and postDecrementExpression by postfixExpression. + +// postfixExpression +// : primary +// | expressionName +// | postIncrementExpression +// | postDecrementExpression +// ; +// + +// postfixExpression +// : primary +// | expressionName +// | postfixExpression '++' +// | postfixExpression '--' +// ; +// + +postfixExpression + : primary pfE? + | expressionName pfE? + ; + +pfE + : '++' pfE? + | '--' pfE? + ; + +postIncrementExpression + : postfixExpression '++' + ; + +postDecrementExpression + : postfixExpression '--' + ; + +// Paragraph 15.15 +// --------------- + +unaryExpression + : preIncrementExpression + | preDecrementExpression + | '+' unaryExpression + | '-' unaryExpression + | unaryExpressionNotPlusMinus + ; + +preIncrementExpression + : '++' unaryExpression + ; + +preDecrementExpression + : '--' unaryExpression + ; + +unaryExpressionNotPlusMinus + : postfixExpression + | '~' unaryExpression + | '!' unaryExpression + | castExpression + | switchExpression + ; + +// Paragraph 15.16 +// --------------- + +castExpression + : '(' primitiveType ')' unaryExpression + | '(' referenceType additionalBound* ')' unaryExpressionNotPlusMinus + | '(' referenceType additionalBound* ')' lambdaExpression + ; + +// Paragraph 15.17 +// --------------- + +multiplicativeExpression + : unaryExpression + | multiplicativeExpression '*' unaryExpression + | multiplicativeExpression '/' unaryExpression + | multiplicativeExpression '%' unaryExpression + ; + +// Paragraph 15.18 +// --------------- + +additiveExpression + : multiplicativeExpression + | additiveExpression '+' multiplicativeExpression + | additiveExpression '-' multiplicativeExpression + ; + +// Paragraph 15.19 +// --------------- + +shiftExpression + : additiveExpression + | shiftExpression '<' '<' additiveExpression + | shiftExpression '>' '>' additiveExpression + | shiftExpression '>' '>' '>' additiveExpression + ; + +// Paragraph 15.20 +// --------------- + +relationalExpression + : shiftExpression + | relationalExpression '<' shiftExpression + | relationalExpression '>' shiftExpression + | relationalExpression '<=' shiftExpression + | relationalExpression '>=' shiftExpression + // | instanceofExpression + | relationalExpression 'instanceof' (referenceType | pattern) + // Solves left recursion with instanceofExpression. + ; + +// instanceofExpression +// : relationalExpression 'instanceof' (referenceType | pattern) +// ; +// Resulted to left recursion with relationalExpression. + +// Paragraph 15.21 +// --------------- + +equalityExpression + : relationalExpression + | equalityExpression '==' relationalExpression + | equalityExpression '!=' relationalExpression + ; + +// Paragraph 15.22 +// --------------- + +andExpression + : equalityExpression + | andExpression '&' equalityExpression + ; + +exclusiveOrExpression + : andExpression + | exclusiveOrExpression '^' andExpression + ; + +inclusiveOrExpression + : exclusiveOrExpression + | inclusiveOrExpression '|' exclusiveOrExpression + ; + +// Paragraph 15.23 +// --------------- + +conditionalAndExpression + : inclusiveOrExpression + | conditionalAndExpression '&&' inclusiveOrExpression + ; + +// Paragraph 15.24 +// --------------- + +conditionalOrExpression + : conditionalAndExpression + | conditionalOrExpression '||' conditionalAndExpression + ; + +// Paragraph 15.25 +// --------------- + +conditionalExpression + : conditionalOrExpression + | conditionalOrExpression '?' expression ':' conditionalExpression + | conditionalOrExpression '?' expression ':' lambdaExpression + ; + +// Paragraph 15.26 +// --------------- + +assignmentExpression + : conditionalExpression + | assignment + ; + +assignment + : leftHandSide assignmentOperator expression + ; + +leftHandSide + : expressionName + | fieldAccess + | arrayAccess + ; + +assignmentOperator + : '=' + | '*=' + | '/=' + | '%=' + | '+=' + | '-=' + | '<<=' + | '>>=' + | '>>>=' + | '&=' + | '^=' + | '|=' + ; + +// Paragraph 15.27 +// --------------- + +lambdaExpression + : lambdaParameters '->' lambdaBody + ; + +lambdaParameters + : '(' lambdaParameterList? ')' + | Identifier + ; + +lambdaParameterList + : lambdaParameter (',' lambdaParameter)* + | Identifier ( ',' Identifier)* + ; + +lambdaParameter + : variableModifier* lambdaParameterType variableDeclaratorId + | variableArityParameter + ; + +lambdaParameterType + : unannType + | 'var' + ; + +lambdaBody + : expression + | block + ; + +// Paragraph 15.28 +// --------------- + +switchExpression + : 'switch' '(' expression ')' switchBlock + ; + +// Paragraph 15.29 +// --------------- + +constantExpression + : expression + ; \ No newline at end of file diff --git a/cfg_generator/src/__init__.py b/cfg_generator/src/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/cfg_generator/src/antlr/__init__.py b/cfg_generator/src/antlr/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/cfg_generator/src/antlr/gen/JavaLexer.interp b/cfg_generator/src/antlr/gen/JavaLexer.interp new file mode 100644 index 00000000..cbb00a56 --- /dev/null +++ b/cfg_generator/src/antlr/gen/JavaLexer.interp @@ -0,0 +1,441 @@ +token literal names: +null +'exports' +'module' +'non-sealed' +'<>' +'open' +'opens' +'permits' +'provides' +'record' +'requires' +'sealed' +'to' +'transitive' +'uses' +'var' +'with' +'yield' +'abstract' +'assert' +'boolean' +'break' +'byte' +'case' +'catch' +'char' +'class' +'const' +'continue' +'default' +'do' +'double' +'else' +'enum' +'extends' +'final' +'finally' +'float' +'for' +'if' +'goto' +'implements' +'import' +'instanceof' +'int' +'interface' +'long' +'native' +'new' +'package' +'private' +'protected' +'public' +'return' +'short' +'static' +'strictfp' +'super' +'switch' +'synchronized' +'this' +'throw' +'throws' +'transient' +'try' +'void' +'volatile' +'while' +'_' +null +null +null +null +null +null +'null' +'(' +')' +'{' +'}' +'[' +']' +';' +',' +'.' +'...' +'@' +'::' +'=' +'>' +'<' +'!' +'~' +'?' +':' +'->' +'==' +'<=' +'>=' +'!=' +'&&' +'||' +'++' +'--' +'+' +'-' +'*' +'/' +'&' +'|' +'^' +'%' +'+=' +'-=' +'*=' +'/=' +'&=' +'|=' +'^=' +'%=' +'<<=' +'>>=' +'>>>=' +null +null +null +null + +token symbolic names: +null +EXPORTS +MODULE +NONSEALED +OACA +OPEN +OPENS +PERMITS +PROVIDES +RECORD +REQUIRES +SEALED +TO +TRANSITIVE +USES +VAR +WITH +YIELD +ABSTRACT +ASSERT +BOOLEAN +BREAK +BYTE +CASE +CATCH +CHAR +CLASS +CONST +CONTINUE +DEFAULT +DO +DOUBLE +ELSE +ENUM +EXTENDS +FINAL +FINALLY +FLOAT +FOR +IF +GOTO +IMPLEMENTS +IMPORT +INSTANCEOF +INT +INTERFACE +LONG +NATIVE +NEW +PACKAGE +PRIVATE +PROTECTED +PUBLIC +RETURN +SHORT +STATIC +STRICTFP +SUPER +SWITCH +SYNCHRONIZED +THIS +THROW +THROWS +TRANSIENT +TRY +VOID +VOLATILE +WHILE +UNDER_SCORE +IntegerLiteral +FloatingPointLiteral +BooleanLiteral +CharacterLiteral +StringLiteral +TextBlock +NullLiteral +LPAREN +RPAREN +LBRACE +RBRACE +LBRACK +RBRACK +SEMI +COMMA +DOT +ELLIPSIS +AT +COLONCOLON +ASSIGN +GT +LT +BANG +TILDE +QUESTION +COLON +ARROW +EQUAL +LE +GE +NOTEQUAL +AND +OR +INC +DEC +ADD +SUB +MUL +DIV +BITAND +BITOR +CARET +MOD +ADD_ASSIGN +SUB_ASSIGN +MUL_ASSIGN +DIV_ASSIGN +AND_ASSIGN +OR_ASSIGN +XOR_ASSIGN +MOD_ASSIGN +LSHIFT_ASSIGN +RSHIFT_ASSIGN +URSHIFT_ASSIGN +Identifier +WS +COMMENT +LINE_COMMENT + +rule names: +EXPORTS +MODULE +NONSEALED +OACA +OPEN +OPENS +PERMITS +PROVIDES +RECORD +REQUIRES +SEALED +TO +TRANSITIVE +USES +VAR +WITH +YIELD +ABSTRACT +ASSERT +BOOLEAN +BREAK +BYTE +CASE +CATCH +CHAR +CLASS +CONST +CONTINUE +DEFAULT +DO +DOUBLE +ELSE +ENUM +EXTENDS +FINAL +FINALLY +FLOAT +FOR +IF +GOTO +IMPLEMENTS +IMPORT +INSTANCEOF +INT +INTERFACE +LONG +NATIVE +NEW +PACKAGE +PRIVATE +PROTECTED +PUBLIC +RETURN +SHORT +STATIC +STRICTFP +SUPER +SWITCH +SYNCHRONIZED +THIS +THROW +THROWS +TRANSIENT +TRY +VOID +VOLATILE +WHILE +UNDER_SCORE +IntegerLiteral +DecimalIntegerLiteral +HexIntegerLiteral +OctalIntegerLiteral +BinaryIntegerLiteral +IntegerTypeSuffix +DecimalNumeral +Digits +Digit +NonZeroDigit +DigitsAndUnderscores +DigitOrUnderscore +Underscores +HexNumeral +HexDigits +HexDigit +HexDigitsAndUnderscores +HexDigitOrUnderscore +OctalNumeral +OctalDigits +OctalDigit +OctalDigitsAndUnderscores +OctalDigitOrUnderscore +BinaryNumeral +BinaryDigits +BinaryDigit +BinaryDigitsAndUnderscores +BinaryDigitOrUnderscore +FloatingPointLiteral +DecimalFloatingPointLiteral +ExponentPart +ExponentIndicator +SignedInteger +Sign +FloatTypeSuffix +HexadecimalFloatingPointLiteral +HexSignificand +BinaryExponent +BinaryExponentIndicator +BooleanLiteral +CharacterLiteral +SingleCharacter +StringLiteral +StringCharacters +StringCharacter +TextBlock +EscapeSequence +OctalEscape +ZeroToThree +UnicodeEscape +NullLiteral +LPAREN +RPAREN +LBRACE +RBRACE +LBRACK +RBRACK +SEMI +COMMA +DOT +ELLIPSIS +AT +COLONCOLON +ASSIGN +GT +LT +BANG +TILDE +QUESTION +COLON +ARROW +EQUAL +LE +GE +NOTEQUAL +AND +OR +INC +DEC +ADD +SUB +MUL +DIV +BITAND +BITOR +CARET +MOD +ADD_ASSIGN +SUB_ASSIGN +MUL_ASSIGN +DIV_ASSIGN +AND_ASSIGN +OR_ASSIGN +XOR_ASSIGN +MOD_ASSIGN +LSHIFT_ASSIGN +RSHIFT_ASSIGN +URSHIFT_ASSIGN +Identifier +IdentifierStart +IdentifierPart +WS +COMMENT +LINE_COMMENT + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 126, 1261, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 805, 8, 68, 1, 69, 1, 69, 3, 69, 809, 8, 69, 1, 70, 1, 70, 3, 70, 813, 8, 70, 1, 71, 1, 71, 3, 71, 817, 8, 71, 1, 72, 1, 72, 3, 72, 821, 8, 72, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 3, 74, 828, 8, 74, 1, 74, 1, 74, 1, 74, 3, 74, 833, 8, 74, 3, 74, 835, 8, 74, 1, 75, 1, 75, 3, 75, 839, 8, 75, 1, 75, 3, 75, 842, 8, 75, 1, 76, 1, 76, 3, 76, 846, 8, 76, 1, 77, 1, 77, 1, 78, 4, 78, 851, 8, 78, 11, 78, 12, 78, 852, 1, 79, 1, 79, 3, 79, 857, 8, 79, 1, 80, 4, 80, 860, 8, 80, 11, 80, 12, 80, 861, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 3, 82, 870, 8, 82, 1, 82, 3, 82, 873, 8, 82, 1, 83, 1, 83, 1, 84, 4, 84, 878, 8, 84, 11, 84, 12, 84, 879, 1, 85, 1, 85, 3, 85, 884, 8, 85, 1, 86, 1, 86, 3, 86, 888, 8, 86, 1, 86, 1, 86, 1, 87, 1, 87, 3, 87, 894, 8, 87, 1, 87, 3, 87, 897, 8, 87, 1, 88, 1, 88, 1, 89, 4, 89, 902, 8, 89, 11, 89, 12, 89, 903, 1, 90, 1, 90, 3, 90, 908, 8, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 3, 92, 916, 8, 92, 1, 92, 3, 92, 919, 8, 92, 1, 93, 1, 93, 1, 94, 4, 94, 924, 8, 94, 11, 94, 12, 94, 925, 1, 95, 1, 95, 3, 95, 930, 8, 95, 1, 96, 1, 96, 3, 96, 934, 8, 96, 1, 97, 1, 97, 1, 97, 3, 97, 939, 8, 97, 1, 97, 3, 97, 942, 8, 97, 1, 97, 3, 97, 945, 8, 97, 1, 97, 1, 97, 1, 97, 3, 97, 950, 8, 97, 1, 97, 3, 97, 953, 8, 97, 1, 97, 1, 97, 1, 97, 3, 97, 958, 8, 97, 1, 97, 1, 97, 1, 97, 3, 97, 963, 8, 97, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 100, 3, 100, 971, 8, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 3, 103, 982, 8, 103, 1, 104, 1, 104, 3, 104, 986, 8, 104, 1, 104, 1, 104, 1, 104, 3, 104, 991, 8, 104, 1, 104, 1, 104, 3, 104, 995, 8, 104, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 3, 107, 1011, 8, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1021, 8, 108, 1, 109, 1, 109, 1, 110, 1, 110, 3, 110, 1027, 8, 110, 1, 110, 1, 110, 1, 111, 4, 111, 1032, 8, 111, 11, 111, 12, 111, 1033, 1, 112, 1, 112, 3, 112, 1038, 8, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 5, 113, 1045, 8, 113, 10, 113, 12, 113, 1048, 9, 113, 1, 113, 1, 113, 5, 113, 1052, 8, 113, 10, 113, 12, 113, 1055, 9, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 3, 114, 1065, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 1078, 8, 115, 1, 116, 1, 116, 1, 117, 1, 117, 4, 117, 1084, 8, 117, 11, 117, 12, 117, 1085, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 126, 1, 126, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, 1, 149, 1, 150, 1, 150, 1, 151, 1, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 5, 166, 1221, 8, 166, 10, 166, 12, 166, 1224, 9, 166, 1, 167, 3, 167, 1227, 8, 167, 1, 168, 1, 168, 3, 168, 1231, 8, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 5, 170, 1241, 8, 170, 10, 170, 12, 170, 1244, 9, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 5, 171, 1255, 8, 171, 10, 171, 12, 171, 1258, 9, 171, 1, 171, 1, 171, 1, 1242, 0, 172, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 0, 141, 0, 143, 0, 145, 0, 147, 0, 149, 0, 151, 0, 153, 0, 155, 0, 157, 0, 159, 0, 161, 0, 163, 0, 165, 0, 167, 0, 169, 0, 171, 0, 173, 0, 175, 0, 177, 0, 179, 0, 181, 0, 183, 0, 185, 0, 187, 0, 189, 0, 191, 0, 193, 70, 195, 0, 197, 0, 199, 0, 201, 0, 203, 0, 205, 0, 207, 0, 209, 0, 211, 0, 213, 0, 215, 71, 217, 72, 219, 0, 221, 73, 223, 0, 225, 0, 227, 74, 229, 0, 231, 0, 233, 0, 235, 0, 237, 75, 239, 76, 241, 77, 243, 78, 245, 79, 247, 80, 249, 81, 251, 82, 253, 83, 255, 84, 257, 85, 259, 86, 261, 87, 263, 88, 265, 89, 267, 90, 269, 91, 271, 92, 273, 93, 275, 94, 277, 95, 279, 96, 281, 97, 283, 98, 285, 99, 287, 100, 289, 101, 291, 102, 293, 103, 295, 104, 297, 105, 299, 106, 301, 107, 303, 108, 305, 109, 307, 110, 309, 111, 311, 112, 313, 113, 315, 114, 317, 115, 319, 116, 321, 117, 323, 118, 325, 119, 327, 120, 329, 121, 331, 122, 333, 123, 335, 0, 337, 0, 339, 124, 341, 125, 343, 126, 1, 0, 21, 2, 0, 76, 76, 108, 108, 1, 0, 49, 57, 2, 0, 88, 88, 120, 120, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 48, 55, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 4, 0, 68, 68, 70, 70, 100, 100, 102, 102, 2, 0, 80, 80, 112, 112, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 2, 0, 9, 9, 32, 32, 2, 0, 10, 10, 13, 13, 3, 0, 8, 8, 13, 13, 46, 46, 8, 0, 34, 34, 39, 39, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 116, 1, 0, 48, 51, 402, 0, 36, 36, 65, 90, 95, 95, 97, 122, 162, 165, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1377, 1415, 1423, 1423, 1488, 1514, 1520, 1522, 1547, 1547, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2208, 2228, 2230, 2237, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2547, 2555, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2801, 2801, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3065, 3065, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3647, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6107, 6108, 6176, 6263, 6272, 6276, 6279, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8352, 8383, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12590, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40938, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42926, 42928, 42935, 42999, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43064, 43064, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43261, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43877, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65020, 65075, 65076, 65101, 65103, 65129, 65129, 65136, 65140, 65142, 65276, 65284, 65284, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65504, 65505, 65509, 65510, 228, 0, 48, 57, 127, 159, 173, 173, 768, 879, 1155, 1159, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1536, 1541, 1552, 1562, 1564, 1564, 1611, 1641, 1648, 1648, 1750, 1757, 1759, 1764, 1767, 1768, 1770, 1773, 1776, 1785, 1807, 1807, 1809, 1809, 1840, 1866, 1958, 1968, 1984, 1993, 2027, 2035, 2070, 2073, 2075, 2083, 2085, 2087, 2089, 2093, 2137, 2139, 2260, 2307, 2362, 2364, 2366, 2383, 2385, 2391, 2402, 2403, 2406, 2415, 2433, 2435, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2530, 2531, 2534, 2543, 2561, 2563, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2662, 2673, 2677, 2677, 2689, 2691, 2748, 2748, 2750, 2757, 2759, 2761, 2763, 2765, 2786, 2787, 2790, 2799, 2810, 2815, 2817, 2819, 2876, 2876, 2878, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2914, 2915, 2918, 2927, 2946, 2946, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3046, 3055, 3072, 3075, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3170, 3171, 3174, 3183, 3201, 3203, 3260, 3260, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3298, 3299, 3302, 3311, 3328, 3331, 3387, 3388, 3390, 3396, 3398, 3400, 3402, 3405, 3415, 3415, 3426, 3427, 3430, 3439, 3458, 3459, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3633, 3633, 3636, 3642, 3655, 3662, 3664, 3673, 3761, 3761, 3764, 3769, 3771, 3772, 3784, 3789, 3792, 3801, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3903, 3953, 3972, 3974, 3975, 3981, 3991, 3993, 4028, 4038, 4038, 4139, 4158, 4160, 4169, 4182, 4185, 4190, 4192, 4194, 4196, 4199, 4205, 4209, 4212, 4226, 4237, 4239, 4253, 4957, 4959, 5906, 5908, 5938, 5940, 5970, 5971, 6002, 6003, 6068, 6099, 6109, 6109, 6112, 6121, 6155, 6158, 6160, 6169, 6277, 6278, 6313, 6313, 6432, 6443, 6448, 6459, 6470, 6479, 6608, 6617, 6679, 6683, 6741, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6832, 6845, 6912, 6916, 6964, 6980, 6992, 7001, 7019, 7027, 7040, 7042, 7073, 7085, 7088, 7097, 7142, 7155, 7204, 7223, 7232, 7241, 7248, 7257, 7376, 7378, 7380, 7400, 7405, 7405, 7410, 7412, 7415, 7417, 7616, 7673, 7675, 7679, 8203, 8207, 8234, 8238, 8288, 8292, 8294, 8303, 8400, 8412, 8417, 8417, 8421, 8432, 11503, 11505, 11647, 11647, 11744, 11775, 12330, 12335, 12441, 12442, 42528, 42537, 42607, 42607, 42612, 42621, 42654, 42655, 42736, 42737, 43010, 43010, 43014, 43014, 43019, 43019, 43043, 43047, 43136, 43137, 43188, 43205, 43216, 43225, 43232, 43249, 43264, 43273, 43302, 43309, 43335, 43347, 43392, 43395, 43443, 43456, 43472, 43481, 43493, 43493, 43504, 43513, 43561, 43574, 43587, 43587, 43596, 43597, 43600, 43609, 43643, 43645, 43696, 43696, 43698, 43700, 43703, 43704, 43710, 43711, 43713, 43713, 43755, 43759, 43765, 43766, 44003, 44010, 44012, 44013, 44016, 44025, 64286, 64286, 65024, 65039, 65056, 65071, 65279, 65279, 65296, 65305, 65529, 65531, 3, 0, 9, 10, 13, 13, 32, 32, 1274, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 1, 345, 1, 0, 0, 0, 3, 353, 1, 0, 0, 0, 5, 360, 1, 0, 0, 0, 7, 371, 1, 0, 0, 0, 9, 374, 1, 0, 0, 0, 11, 379, 1, 0, 0, 0, 13, 385, 1, 0, 0, 0, 15, 393, 1, 0, 0, 0, 17, 402, 1, 0, 0, 0, 19, 409, 1, 0, 0, 0, 21, 418, 1, 0, 0, 0, 23, 425, 1, 0, 0, 0, 25, 428, 1, 0, 0, 0, 27, 439, 1, 0, 0, 0, 29, 444, 1, 0, 0, 0, 31, 448, 1, 0, 0, 0, 33, 453, 1, 0, 0, 0, 35, 459, 1, 0, 0, 0, 37, 468, 1, 0, 0, 0, 39, 475, 1, 0, 0, 0, 41, 483, 1, 0, 0, 0, 43, 489, 1, 0, 0, 0, 45, 494, 1, 0, 0, 0, 47, 499, 1, 0, 0, 0, 49, 505, 1, 0, 0, 0, 51, 510, 1, 0, 0, 0, 53, 516, 1, 0, 0, 0, 55, 522, 1, 0, 0, 0, 57, 531, 1, 0, 0, 0, 59, 539, 1, 0, 0, 0, 61, 542, 1, 0, 0, 0, 63, 549, 1, 0, 0, 0, 65, 554, 1, 0, 0, 0, 67, 559, 1, 0, 0, 0, 69, 567, 1, 0, 0, 0, 71, 573, 1, 0, 0, 0, 73, 581, 1, 0, 0, 0, 75, 587, 1, 0, 0, 0, 77, 591, 1, 0, 0, 0, 79, 594, 1, 0, 0, 0, 81, 599, 1, 0, 0, 0, 83, 610, 1, 0, 0, 0, 85, 617, 1, 0, 0, 0, 87, 628, 1, 0, 0, 0, 89, 632, 1, 0, 0, 0, 91, 642, 1, 0, 0, 0, 93, 647, 1, 0, 0, 0, 95, 654, 1, 0, 0, 0, 97, 658, 1, 0, 0, 0, 99, 666, 1, 0, 0, 0, 101, 674, 1, 0, 0, 0, 103, 684, 1, 0, 0, 0, 105, 691, 1, 0, 0, 0, 107, 698, 1, 0, 0, 0, 109, 704, 1, 0, 0, 0, 111, 711, 1, 0, 0, 0, 113, 720, 1, 0, 0, 0, 115, 726, 1, 0, 0, 0, 117, 733, 1, 0, 0, 0, 119, 746, 1, 0, 0, 0, 121, 751, 1, 0, 0, 0, 123, 757, 1, 0, 0, 0, 125, 764, 1, 0, 0, 0, 127, 774, 1, 0, 0, 0, 129, 778, 1, 0, 0, 0, 131, 783, 1, 0, 0, 0, 133, 792, 1, 0, 0, 0, 135, 798, 1, 0, 0, 0, 137, 804, 1, 0, 0, 0, 139, 806, 1, 0, 0, 0, 141, 810, 1, 0, 0, 0, 143, 814, 1, 0, 0, 0, 145, 818, 1, 0, 0, 0, 147, 822, 1, 0, 0, 0, 149, 834, 1, 0, 0, 0, 151, 836, 1, 0, 0, 0, 153, 845, 1, 0, 0, 0, 155, 847, 1, 0, 0, 0, 157, 850, 1, 0, 0, 0, 159, 856, 1, 0, 0, 0, 161, 859, 1, 0, 0, 0, 163, 863, 1, 0, 0, 0, 165, 867, 1, 0, 0, 0, 167, 874, 1, 0, 0, 0, 169, 877, 1, 0, 0, 0, 171, 883, 1, 0, 0, 0, 173, 885, 1, 0, 0, 0, 175, 891, 1, 0, 0, 0, 177, 898, 1, 0, 0, 0, 179, 901, 1, 0, 0, 0, 181, 907, 1, 0, 0, 0, 183, 909, 1, 0, 0, 0, 185, 913, 1, 0, 0, 0, 187, 920, 1, 0, 0, 0, 189, 923, 1, 0, 0, 0, 191, 929, 1, 0, 0, 0, 193, 933, 1, 0, 0, 0, 195, 962, 1, 0, 0, 0, 197, 964, 1, 0, 0, 0, 199, 967, 1, 0, 0, 0, 201, 970, 1, 0, 0, 0, 203, 974, 1, 0, 0, 0, 205, 976, 1, 0, 0, 0, 207, 978, 1, 0, 0, 0, 209, 994, 1, 0, 0, 0, 211, 996, 1, 0, 0, 0, 213, 999, 1, 0, 0, 0, 215, 1010, 1, 0, 0, 0, 217, 1020, 1, 0, 0, 0, 219, 1022, 1, 0, 0, 0, 221, 1024, 1, 0, 0, 0, 223, 1031, 1, 0, 0, 0, 225, 1037, 1, 0, 0, 0, 227, 1039, 1, 0, 0, 0, 229, 1064, 1, 0, 0, 0, 231, 1077, 1, 0, 0, 0, 233, 1079, 1, 0, 0, 0, 235, 1081, 1, 0, 0, 0, 237, 1092, 1, 0, 0, 0, 239, 1097, 1, 0, 0, 0, 241, 1099, 1, 0, 0, 0, 243, 1101, 1, 0, 0, 0, 245, 1103, 1, 0, 0, 0, 247, 1105, 1, 0, 0, 0, 249, 1107, 1, 0, 0, 0, 251, 1109, 1, 0, 0, 0, 253, 1111, 1, 0, 0, 0, 255, 1113, 1, 0, 0, 0, 257, 1115, 1, 0, 0, 0, 259, 1119, 1, 0, 0, 0, 261, 1121, 1, 0, 0, 0, 263, 1124, 1, 0, 0, 0, 265, 1126, 1, 0, 0, 0, 267, 1128, 1, 0, 0, 0, 269, 1130, 1, 0, 0, 0, 271, 1132, 1, 0, 0, 0, 273, 1134, 1, 0, 0, 0, 275, 1136, 1, 0, 0, 0, 277, 1138, 1, 0, 0, 0, 279, 1141, 1, 0, 0, 0, 281, 1144, 1, 0, 0, 0, 283, 1147, 1, 0, 0, 0, 285, 1150, 1, 0, 0, 0, 287, 1153, 1, 0, 0, 0, 289, 1156, 1, 0, 0, 0, 291, 1159, 1, 0, 0, 0, 293, 1162, 1, 0, 0, 0, 295, 1165, 1, 0, 0, 0, 297, 1167, 1, 0, 0, 0, 299, 1169, 1, 0, 0, 0, 301, 1171, 1, 0, 0, 0, 303, 1173, 1, 0, 0, 0, 305, 1175, 1, 0, 0, 0, 307, 1177, 1, 0, 0, 0, 309, 1179, 1, 0, 0, 0, 311, 1181, 1, 0, 0, 0, 313, 1184, 1, 0, 0, 0, 315, 1187, 1, 0, 0, 0, 317, 1190, 1, 0, 0, 0, 319, 1193, 1, 0, 0, 0, 321, 1196, 1, 0, 0, 0, 323, 1199, 1, 0, 0, 0, 325, 1202, 1, 0, 0, 0, 327, 1205, 1, 0, 0, 0, 329, 1209, 1, 0, 0, 0, 331, 1213, 1, 0, 0, 0, 333, 1218, 1, 0, 0, 0, 335, 1226, 1, 0, 0, 0, 337, 1230, 1, 0, 0, 0, 339, 1232, 1, 0, 0, 0, 341, 1236, 1, 0, 0, 0, 343, 1250, 1, 0, 0, 0, 345, 346, 5, 101, 0, 0, 346, 347, 5, 120, 0, 0, 347, 348, 5, 112, 0, 0, 348, 349, 5, 111, 0, 0, 349, 350, 5, 114, 0, 0, 350, 351, 5, 116, 0, 0, 351, 352, 5, 115, 0, 0, 352, 2, 1, 0, 0, 0, 353, 354, 5, 109, 0, 0, 354, 355, 5, 111, 0, 0, 355, 356, 5, 100, 0, 0, 356, 357, 5, 117, 0, 0, 357, 358, 5, 108, 0, 0, 358, 359, 5, 101, 0, 0, 359, 4, 1, 0, 0, 0, 360, 361, 5, 110, 0, 0, 361, 362, 5, 111, 0, 0, 362, 363, 5, 110, 0, 0, 363, 364, 5, 45, 0, 0, 364, 365, 5, 115, 0, 0, 365, 366, 5, 101, 0, 0, 366, 367, 5, 97, 0, 0, 367, 368, 5, 108, 0, 0, 368, 369, 5, 101, 0, 0, 369, 370, 5, 100, 0, 0, 370, 6, 1, 0, 0, 0, 371, 372, 5, 60, 0, 0, 372, 373, 5, 62, 0, 0, 373, 8, 1, 0, 0, 0, 374, 375, 5, 111, 0, 0, 375, 376, 5, 112, 0, 0, 376, 377, 5, 101, 0, 0, 377, 378, 5, 110, 0, 0, 378, 10, 1, 0, 0, 0, 379, 380, 5, 111, 0, 0, 380, 381, 5, 112, 0, 0, 381, 382, 5, 101, 0, 0, 382, 383, 5, 110, 0, 0, 383, 384, 5, 115, 0, 0, 384, 12, 1, 0, 0, 0, 385, 386, 5, 112, 0, 0, 386, 387, 5, 101, 0, 0, 387, 388, 5, 114, 0, 0, 388, 389, 5, 109, 0, 0, 389, 390, 5, 105, 0, 0, 390, 391, 5, 116, 0, 0, 391, 392, 5, 115, 0, 0, 392, 14, 1, 0, 0, 0, 393, 394, 5, 112, 0, 0, 394, 395, 5, 114, 0, 0, 395, 396, 5, 111, 0, 0, 396, 397, 5, 118, 0, 0, 397, 398, 5, 105, 0, 0, 398, 399, 5, 100, 0, 0, 399, 400, 5, 101, 0, 0, 400, 401, 5, 115, 0, 0, 401, 16, 1, 0, 0, 0, 402, 403, 5, 114, 0, 0, 403, 404, 5, 101, 0, 0, 404, 405, 5, 99, 0, 0, 405, 406, 5, 111, 0, 0, 406, 407, 5, 114, 0, 0, 407, 408, 5, 100, 0, 0, 408, 18, 1, 0, 0, 0, 409, 410, 5, 114, 0, 0, 410, 411, 5, 101, 0, 0, 411, 412, 5, 113, 0, 0, 412, 413, 5, 117, 0, 0, 413, 414, 5, 105, 0, 0, 414, 415, 5, 114, 0, 0, 415, 416, 5, 101, 0, 0, 416, 417, 5, 115, 0, 0, 417, 20, 1, 0, 0, 0, 418, 419, 5, 115, 0, 0, 419, 420, 5, 101, 0, 0, 420, 421, 5, 97, 0, 0, 421, 422, 5, 108, 0, 0, 422, 423, 5, 101, 0, 0, 423, 424, 5, 100, 0, 0, 424, 22, 1, 0, 0, 0, 425, 426, 5, 116, 0, 0, 426, 427, 5, 111, 0, 0, 427, 24, 1, 0, 0, 0, 428, 429, 5, 116, 0, 0, 429, 430, 5, 114, 0, 0, 430, 431, 5, 97, 0, 0, 431, 432, 5, 110, 0, 0, 432, 433, 5, 115, 0, 0, 433, 434, 5, 105, 0, 0, 434, 435, 5, 116, 0, 0, 435, 436, 5, 105, 0, 0, 436, 437, 5, 118, 0, 0, 437, 438, 5, 101, 0, 0, 438, 26, 1, 0, 0, 0, 439, 440, 5, 117, 0, 0, 440, 441, 5, 115, 0, 0, 441, 442, 5, 101, 0, 0, 442, 443, 5, 115, 0, 0, 443, 28, 1, 0, 0, 0, 444, 445, 5, 118, 0, 0, 445, 446, 5, 97, 0, 0, 446, 447, 5, 114, 0, 0, 447, 30, 1, 0, 0, 0, 448, 449, 5, 119, 0, 0, 449, 450, 5, 105, 0, 0, 450, 451, 5, 116, 0, 0, 451, 452, 5, 104, 0, 0, 452, 32, 1, 0, 0, 0, 453, 454, 5, 121, 0, 0, 454, 455, 5, 105, 0, 0, 455, 456, 5, 101, 0, 0, 456, 457, 5, 108, 0, 0, 457, 458, 5, 100, 0, 0, 458, 34, 1, 0, 0, 0, 459, 460, 5, 97, 0, 0, 460, 461, 5, 98, 0, 0, 461, 462, 5, 115, 0, 0, 462, 463, 5, 116, 0, 0, 463, 464, 5, 114, 0, 0, 464, 465, 5, 97, 0, 0, 465, 466, 5, 99, 0, 0, 466, 467, 5, 116, 0, 0, 467, 36, 1, 0, 0, 0, 468, 469, 5, 97, 0, 0, 469, 470, 5, 115, 0, 0, 470, 471, 5, 115, 0, 0, 471, 472, 5, 101, 0, 0, 472, 473, 5, 114, 0, 0, 473, 474, 5, 116, 0, 0, 474, 38, 1, 0, 0, 0, 475, 476, 5, 98, 0, 0, 476, 477, 5, 111, 0, 0, 477, 478, 5, 111, 0, 0, 478, 479, 5, 108, 0, 0, 479, 480, 5, 101, 0, 0, 480, 481, 5, 97, 0, 0, 481, 482, 5, 110, 0, 0, 482, 40, 1, 0, 0, 0, 483, 484, 5, 98, 0, 0, 484, 485, 5, 114, 0, 0, 485, 486, 5, 101, 0, 0, 486, 487, 5, 97, 0, 0, 487, 488, 5, 107, 0, 0, 488, 42, 1, 0, 0, 0, 489, 490, 5, 98, 0, 0, 490, 491, 5, 121, 0, 0, 491, 492, 5, 116, 0, 0, 492, 493, 5, 101, 0, 0, 493, 44, 1, 0, 0, 0, 494, 495, 5, 99, 0, 0, 495, 496, 5, 97, 0, 0, 496, 497, 5, 115, 0, 0, 497, 498, 5, 101, 0, 0, 498, 46, 1, 0, 0, 0, 499, 500, 5, 99, 0, 0, 500, 501, 5, 97, 0, 0, 501, 502, 5, 116, 0, 0, 502, 503, 5, 99, 0, 0, 503, 504, 5, 104, 0, 0, 504, 48, 1, 0, 0, 0, 505, 506, 5, 99, 0, 0, 506, 507, 5, 104, 0, 0, 507, 508, 5, 97, 0, 0, 508, 509, 5, 114, 0, 0, 509, 50, 1, 0, 0, 0, 510, 511, 5, 99, 0, 0, 511, 512, 5, 108, 0, 0, 512, 513, 5, 97, 0, 0, 513, 514, 5, 115, 0, 0, 514, 515, 5, 115, 0, 0, 515, 52, 1, 0, 0, 0, 516, 517, 5, 99, 0, 0, 517, 518, 5, 111, 0, 0, 518, 519, 5, 110, 0, 0, 519, 520, 5, 115, 0, 0, 520, 521, 5, 116, 0, 0, 521, 54, 1, 0, 0, 0, 522, 523, 5, 99, 0, 0, 523, 524, 5, 111, 0, 0, 524, 525, 5, 110, 0, 0, 525, 526, 5, 116, 0, 0, 526, 527, 5, 105, 0, 0, 527, 528, 5, 110, 0, 0, 528, 529, 5, 117, 0, 0, 529, 530, 5, 101, 0, 0, 530, 56, 1, 0, 0, 0, 531, 532, 5, 100, 0, 0, 532, 533, 5, 101, 0, 0, 533, 534, 5, 102, 0, 0, 534, 535, 5, 97, 0, 0, 535, 536, 5, 117, 0, 0, 536, 537, 5, 108, 0, 0, 537, 538, 5, 116, 0, 0, 538, 58, 1, 0, 0, 0, 539, 540, 5, 100, 0, 0, 540, 541, 5, 111, 0, 0, 541, 60, 1, 0, 0, 0, 542, 543, 5, 100, 0, 0, 543, 544, 5, 111, 0, 0, 544, 545, 5, 117, 0, 0, 545, 546, 5, 98, 0, 0, 546, 547, 5, 108, 0, 0, 547, 548, 5, 101, 0, 0, 548, 62, 1, 0, 0, 0, 549, 550, 5, 101, 0, 0, 550, 551, 5, 108, 0, 0, 551, 552, 5, 115, 0, 0, 552, 553, 5, 101, 0, 0, 553, 64, 1, 0, 0, 0, 554, 555, 5, 101, 0, 0, 555, 556, 5, 110, 0, 0, 556, 557, 5, 117, 0, 0, 557, 558, 5, 109, 0, 0, 558, 66, 1, 0, 0, 0, 559, 560, 5, 101, 0, 0, 560, 561, 5, 120, 0, 0, 561, 562, 5, 116, 0, 0, 562, 563, 5, 101, 0, 0, 563, 564, 5, 110, 0, 0, 564, 565, 5, 100, 0, 0, 565, 566, 5, 115, 0, 0, 566, 68, 1, 0, 0, 0, 567, 568, 5, 102, 0, 0, 568, 569, 5, 105, 0, 0, 569, 570, 5, 110, 0, 0, 570, 571, 5, 97, 0, 0, 571, 572, 5, 108, 0, 0, 572, 70, 1, 0, 0, 0, 573, 574, 5, 102, 0, 0, 574, 575, 5, 105, 0, 0, 575, 576, 5, 110, 0, 0, 576, 577, 5, 97, 0, 0, 577, 578, 5, 108, 0, 0, 578, 579, 5, 108, 0, 0, 579, 580, 5, 121, 0, 0, 580, 72, 1, 0, 0, 0, 581, 582, 5, 102, 0, 0, 582, 583, 5, 108, 0, 0, 583, 584, 5, 111, 0, 0, 584, 585, 5, 97, 0, 0, 585, 586, 5, 116, 0, 0, 586, 74, 1, 0, 0, 0, 587, 588, 5, 102, 0, 0, 588, 589, 5, 111, 0, 0, 589, 590, 5, 114, 0, 0, 590, 76, 1, 0, 0, 0, 591, 592, 5, 105, 0, 0, 592, 593, 5, 102, 0, 0, 593, 78, 1, 0, 0, 0, 594, 595, 5, 103, 0, 0, 595, 596, 5, 111, 0, 0, 596, 597, 5, 116, 0, 0, 597, 598, 5, 111, 0, 0, 598, 80, 1, 0, 0, 0, 599, 600, 5, 105, 0, 0, 600, 601, 5, 109, 0, 0, 601, 602, 5, 112, 0, 0, 602, 603, 5, 108, 0, 0, 603, 604, 5, 101, 0, 0, 604, 605, 5, 109, 0, 0, 605, 606, 5, 101, 0, 0, 606, 607, 5, 110, 0, 0, 607, 608, 5, 116, 0, 0, 608, 609, 5, 115, 0, 0, 609, 82, 1, 0, 0, 0, 610, 611, 5, 105, 0, 0, 611, 612, 5, 109, 0, 0, 612, 613, 5, 112, 0, 0, 613, 614, 5, 111, 0, 0, 614, 615, 5, 114, 0, 0, 615, 616, 5, 116, 0, 0, 616, 84, 1, 0, 0, 0, 617, 618, 5, 105, 0, 0, 618, 619, 5, 110, 0, 0, 619, 620, 5, 115, 0, 0, 620, 621, 5, 116, 0, 0, 621, 622, 5, 97, 0, 0, 622, 623, 5, 110, 0, 0, 623, 624, 5, 99, 0, 0, 624, 625, 5, 101, 0, 0, 625, 626, 5, 111, 0, 0, 626, 627, 5, 102, 0, 0, 627, 86, 1, 0, 0, 0, 628, 629, 5, 105, 0, 0, 629, 630, 5, 110, 0, 0, 630, 631, 5, 116, 0, 0, 631, 88, 1, 0, 0, 0, 632, 633, 5, 105, 0, 0, 633, 634, 5, 110, 0, 0, 634, 635, 5, 116, 0, 0, 635, 636, 5, 101, 0, 0, 636, 637, 5, 114, 0, 0, 637, 638, 5, 102, 0, 0, 638, 639, 5, 97, 0, 0, 639, 640, 5, 99, 0, 0, 640, 641, 5, 101, 0, 0, 641, 90, 1, 0, 0, 0, 642, 643, 5, 108, 0, 0, 643, 644, 5, 111, 0, 0, 644, 645, 5, 110, 0, 0, 645, 646, 5, 103, 0, 0, 646, 92, 1, 0, 0, 0, 647, 648, 5, 110, 0, 0, 648, 649, 5, 97, 0, 0, 649, 650, 5, 116, 0, 0, 650, 651, 5, 105, 0, 0, 651, 652, 5, 118, 0, 0, 652, 653, 5, 101, 0, 0, 653, 94, 1, 0, 0, 0, 654, 655, 5, 110, 0, 0, 655, 656, 5, 101, 0, 0, 656, 657, 5, 119, 0, 0, 657, 96, 1, 0, 0, 0, 658, 659, 5, 112, 0, 0, 659, 660, 5, 97, 0, 0, 660, 661, 5, 99, 0, 0, 661, 662, 5, 107, 0, 0, 662, 663, 5, 97, 0, 0, 663, 664, 5, 103, 0, 0, 664, 665, 5, 101, 0, 0, 665, 98, 1, 0, 0, 0, 666, 667, 5, 112, 0, 0, 667, 668, 5, 114, 0, 0, 668, 669, 5, 105, 0, 0, 669, 670, 5, 118, 0, 0, 670, 671, 5, 97, 0, 0, 671, 672, 5, 116, 0, 0, 672, 673, 5, 101, 0, 0, 673, 100, 1, 0, 0, 0, 674, 675, 5, 112, 0, 0, 675, 676, 5, 114, 0, 0, 676, 677, 5, 111, 0, 0, 677, 678, 5, 116, 0, 0, 678, 679, 5, 101, 0, 0, 679, 680, 5, 99, 0, 0, 680, 681, 5, 116, 0, 0, 681, 682, 5, 101, 0, 0, 682, 683, 5, 100, 0, 0, 683, 102, 1, 0, 0, 0, 684, 685, 5, 112, 0, 0, 685, 686, 5, 117, 0, 0, 686, 687, 5, 98, 0, 0, 687, 688, 5, 108, 0, 0, 688, 689, 5, 105, 0, 0, 689, 690, 5, 99, 0, 0, 690, 104, 1, 0, 0, 0, 691, 692, 5, 114, 0, 0, 692, 693, 5, 101, 0, 0, 693, 694, 5, 116, 0, 0, 694, 695, 5, 117, 0, 0, 695, 696, 5, 114, 0, 0, 696, 697, 5, 110, 0, 0, 697, 106, 1, 0, 0, 0, 698, 699, 5, 115, 0, 0, 699, 700, 5, 104, 0, 0, 700, 701, 5, 111, 0, 0, 701, 702, 5, 114, 0, 0, 702, 703, 5, 116, 0, 0, 703, 108, 1, 0, 0, 0, 704, 705, 5, 115, 0, 0, 705, 706, 5, 116, 0, 0, 706, 707, 5, 97, 0, 0, 707, 708, 5, 116, 0, 0, 708, 709, 5, 105, 0, 0, 709, 710, 5, 99, 0, 0, 710, 110, 1, 0, 0, 0, 711, 712, 5, 115, 0, 0, 712, 713, 5, 116, 0, 0, 713, 714, 5, 114, 0, 0, 714, 715, 5, 105, 0, 0, 715, 716, 5, 99, 0, 0, 716, 717, 5, 116, 0, 0, 717, 718, 5, 102, 0, 0, 718, 719, 5, 112, 0, 0, 719, 112, 1, 0, 0, 0, 720, 721, 5, 115, 0, 0, 721, 722, 5, 117, 0, 0, 722, 723, 5, 112, 0, 0, 723, 724, 5, 101, 0, 0, 724, 725, 5, 114, 0, 0, 725, 114, 1, 0, 0, 0, 726, 727, 5, 115, 0, 0, 727, 728, 5, 119, 0, 0, 728, 729, 5, 105, 0, 0, 729, 730, 5, 116, 0, 0, 730, 731, 5, 99, 0, 0, 731, 732, 5, 104, 0, 0, 732, 116, 1, 0, 0, 0, 733, 734, 5, 115, 0, 0, 734, 735, 5, 121, 0, 0, 735, 736, 5, 110, 0, 0, 736, 737, 5, 99, 0, 0, 737, 738, 5, 104, 0, 0, 738, 739, 5, 114, 0, 0, 739, 740, 5, 111, 0, 0, 740, 741, 5, 110, 0, 0, 741, 742, 5, 105, 0, 0, 742, 743, 5, 122, 0, 0, 743, 744, 5, 101, 0, 0, 744, 745, 5, 100, 0, 0, 745, 118, 1, 0, 0, 0, 746, 747, 5, 116, 0, 0, 747, 748, 5, 104, 0, 0, 748, 749, 5, 105, 0, 0, 749, 750, 5, 115, 0, 0, 750, 120, 1, 0, 0, 0, 751, 752, 5, 116, 0, 0, 752, 753, 5, 104, 0, 0, 753, 754, 5, 114, 0, 0, 754, 755, 5, 111, 0, 0, 755, 756, 5, 119, 0, 0, 756, 122, 1, 0, 0, 0, 757, 758, 5, 116, 0, 0, 758, 759, 5, 104, 0, 0, 759, 760, 5, 114, 0, 0, 760, 761, 5, 111, 0, 0, 761, 762, 5, 119, 0, 0, 762, 763, 5, 115, 0, 0, 763, 124, 1, 0, 0, 0, 764, 765, 5, 116, 0, 0, 765, 766, 5, 114, 0, 0, 766, 767, 5, 97, 0, 0, 767, 768, 5, 110, 0, 0, 768, 769, 5, 115, 0, 0, 769, 770, 5, 105, 0, 0, 770, 771, 5, 101, 0, 0, 771, 772, 5, 110, 0, 0, 772, 773, 5, 116, 0, 0, 773, 126, 1, 0, 0, 0, 774, 775, 5, 116, 0, 0, 775, 776, 5, 114, 0, 0, 776, 777, 5, 121, 0, 0, 777, 128, 1, 0, 0, 0, 778, 779, 5, 118, 0, 0, 779, 780, 5, 111, 0, 0, 780, 781, 5, 105, 0, 0, 781, 782, 5, 100, 0, 0, 782, 130, 1, 0, 0, 0, 783, 784, 5, 118, 0, 0, 784, 785, 5, 111, 0, 0, 785, 786, 5, 108, 0, 0, 786, 787, 5, 97, 0, 0, 787, 788, 5, 116, 0, 0, 788, 789, 5, 105, 0, 0, 789, 790, 5, 108, 0, 0, 790, 791, 5, 101, 0, 0, 791, 132, 1, 0, 0, 0, 792, 793, 5, 119, 0, 0, 793, 794, 5, 104, 0, 0, 794, 795, 5, 105, 0, 0, 795, 796, 5, 108, 0, 0, 796, 797, 5, 101, 0, 0, 797, 134, 1, 0, 0, 0, 798, 799, 5, 95, 0, 0, 799, 136, 1, 0, 0, 0, 800, 805, 3, 139, 69, 0, 801, 805, 3, 141, 70, 0, 802, 805, 3, 143, 71, 0, 803, 805, 3, 145, 72, 0, 804, 800, 1, 0, 0, 0, 804, 801, 1, 0, 0, 0, 804, 802, 1, 0, 0, 0, 804, 803, 1, 0, 0, 0, 805, 138, 1, 0, 0, 0, 806, 808, 3, 149, 74, 0, 807, 809, 3, 147, 73, 0, 808, 807, 1, 0, 0, 0, 808, 809, 1, 0, 0, 0, 809, 140, 1, 0, 0, 0, 810, 812, 3, 163, 81, 0, 811, 813, 3, 147, 73, 0, 812, 811, 1, 0, 0, 0, 812, 813, 1, 0, 0, 0, 813, 142, 1, 0, 0, 0, 814, 816, 3, 173, 86, 0, 815, 817, 3, 147, 73, 0, 816, 815, 1, 0, 0, 0, 816, 817, 1, 0, 0, 0, 817, 144, 1, 0, 0, 0, 818, 820, 3, 183, 91, 0, 819, 821, 3, 147, 73, 0, 820, 819, 1, 0, 0, 0, 820, 821, 1, 0, 0, 0, 821, 146, 1, 0, 0, 0, 822, 823, 7, 0, 0, 0, 823, 148, 1, 0, 0, 0, 824, 835, 5, 48, 0, 0, 825, 832, 3, 155, 77, 0, 826, 828, 3, 151, 75, 0, 827, 826, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 833, 1, 0, 0, 0, 829, 830, 3, 161, 80, 0, 830, 831, 3, 151, 75, 0, 831, 833, 1, 0, 0, 0, 832, 827, 1, 0, 0, 0, 832, 829, 1, 0, 0, 0, 833, 835, 1, 0, 0, 0, 834, 824, 1, 0, 0, 0, 834, 825, 1, 0, 0, 0, 835, 150, 1, 0, 0, 0, 836, 841, 3, 153, 76, 0, 837, 839, 3, 157, 78, 0, 838, 837, 1, 0, 0, 0, 838, 839, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 842, 3, 153, 76, 0, 841, 838, 1, 0, 0, 0, 841, 842, 1, 0, 0, 0, 842, 152, 1, 0, 0, 0, 843, 846, 5, 48, 0, 0, 844, 846, 3, 155, 77, 0, 845, 843, 1, 0, 0, 0, 845, 844, 1, 0, 0, 0, 846, 154, 1, 0, 0, 0, 847, 848, 7, 1, 0, 0, 848, 156, 1, 0, 0, 0, 849, 851, 3, 159, 79, 0, 850, 849, 1, 0, 0, 0, 851, 852, 1, 0, 0, 0, 852, 850, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 158, 1, 0, 0, 0, 854, 857, 3, 153, 76, 0, 855, 857, 5, 95, 0, 0, 856, 854, 1, 0, 0, 0, 856, 855, 1, 0, 0, 0, 857, 160, 1, 0, 0, 0, 858, 860, 5, 95, 0, 0, 859, 858, 1, 0, 0, 0, 860, 861, 1, 0, 0, 0, 861, 859, 1, 0, 0, 0, 861, 862, 1, 0, 0, 0, 862, 162, 1, 0, 0, 0, 863, 864, 5, 48, 0, 0, 864, 865, 7, 2, 0, 0, 865, 866, 3, 165, 82, 0, 866, 164, 1, 0, 0, 0, 867, 872, 3, 167, 83, 0, 868, 870, 3, 169, 84, 0, 869, 868, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 871, 1, 0, 0, 0, 871, 873, 3, 167, 83, 0, 872, 869, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 166, 1, 0, 0, 0, 874, 875, 7, 3, 0, 0, 875, 168, 1, 0, 0, 0, 876, 878, 3, 171, 85, 0, 877, 876, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 877, 1, 0, 0, 0, 879, 880, 1, 0, 0, 0, 880, 170, 1, 0, 0, 0, 881, 884, 3, 167, 83, 0, 882, 884, 5, 95, 0, 0, 883, 881, 1, 0, 0, 0, 883, 882, 1, 0, 0, 0, 884, 172, 1, 0, 0, 0, 885, 887, 5, 48, 0, 0, 886, 888, 3, 161, 80, 0, 887, 886, 1, 0, 0, 0, 887, 888, 1, 0, 0, 0, 888, 889, 1, 0, 0, 0, 889, 890, 3, 175, 87, 0, 890, 174, 1, 0, 0, 0, 891, 896, 3, 177, 88, 0, 892, 894, 3, 179, 89, 0, 893, 892, 1, 0, 0, 0, 893, 894, 1, 0, 0, 0, 894, 895, 1, 0, 0, 0, 895, 897, 3, 177, 88, 0, 896, 893, 1, 0, 0, 0, 896, 897, 1, 0, 0, 0, 897, 176, 1, 0, 0, 0, 898, 899, 7, 4, 0, 0, 899, 178, 1, 0, 0, 0, 900, 902, 3, 181, 90, 0, 901, 900, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 901, 1, 0, 0, 0, 903, 904, 1, 0, 0, 0, 904, 180, 1, 0, 0, 0, 905, 908, 3, 177, 88, 0, 906, 908, 5, 95, 0, 0, 907, 905, 1, 0, 0, 0, 907, 906, 1, 0, 0, 0, 908, 182, 1, 0, 0, 0, 909, 910, 5, 48, 0, 0, 910, 911, 7, 5, 0, 0, 911, 912, 3, 185, 92, 0, 912, 184, 1, 0, 0, 0, 913, 918, 3, 187, 93, 0, 914, 916, 3, 189, 94, 0, 915, 914, 1, 0, 0, 0, 915, 916, 1, 0, 0, 0, 916, 917, 1, 0, 0, 0, 917, 919, 3, 187, 93, 0, 918, 915, 1, 0, 0, 0, 918, 919, 1, 0, 0, 0, 919, 186, 1, 0, 0, 0, 920, 921, 7, 6, 0, 0, 921, 188, 1, 0, 0, 0, 922, 924, 3, 191, 95, 0, 923, 922, 1, 0, 0, 0, 924, 925, 1, 0, 0, 0, 925, 923, 1, 0, 0, 0, 925, 926, 1, 0, 0, 0, 926, 190, 1, 0, 0, 0, 927, 930, 3, 187, 93, 0, 928, 930, 5, 95, 0, 0, 929, 927, 1, 0, 0, 0, 929, 928, 1, 0, 0, 0, 930, 192, 1, 0, 0, 0, 931, 934, 3, 195, 97, 0, 932, 934, 3, 207, 103, 0, 933, 931, 1, 0, 0, 0, 933, 932, 1, 0, 0, 0, 934, 194, 1, 0, 0, 0, 935, 936, 3, 151, 75, 0, 936, 938, 5, 46, 0, 0, 937, 939, 3, 151, 75, 0, 938, 937, 1, 0, 0, 0, 938, 939, 1, 0, 0, 0, 939, 941, 1, 0, 0, 0, 940, 942, 3, 197, 98, 0, 941, 940, 1, 0, 0, 0, 941, 942, 1, 0, 0, 0, 942, 944, 1, 0, 0, 0, 943, 945, 3, 205, 102, 0, 944, 943, 1, 0, 0, 0, 944, 945, 1, 0, 0, 0, 945, 963, 1, 0, 0, 0, 946, 947, 5, 46, 0, 0, 947, 949, 3, 151, 75, 0, 948, 950, 3, 197, 98, 0, 949, 948, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 952, 1, 0, 0, 0, 951, 953, 3, 205, 102, 0, 952, 951, 1, 0, 0, 0, 952, 953, 1, 0, 0, 0, 953, 963, 1, 0, 0, 0, 954, 955, 3, 151, 75, 0, 955, 957, 3, 197, 98, 0, 956, 958, 3, 205, 102, 0, 957, 956, 1, 0, 0, 0, 957, 958, 1, 0, 0, 0, 958, 963, 1, 0, 0, 0, 959, 960, 3, 151, 75, 0, 960, 961, 3, 205, 102, 0, 961, 963, 1, 0, 0, 0, 962, 935, 1, 0, 0, 0, 962, 946, 1, 0, 0, 0, 962, 954, 1, 0, 0, 0, 962, 959, 1, 0, 0, 0, 963, 196, 1, 0, 0, 0, 964, 965, 3, 199, 99, 0, 965, 966, 3, 201, 100, 0, 966, 198, 1, 0, 0, 0, 967, 968, 7, 7, 0, 0, 968, 200, 1, 0, 0, 0, 969, 971, 3, 203, 101, 0, 970, 969, 1, 0, 0, 0, 970, 971, 1, 0, 0, 0, 971, 972, 1, 0, 0, 0, 972, 973, 3, 151, 75, 0, 973, 202, 1, 0, 0, 0, 974, 975, 7, 8, 0, 0, 975, 204, 1, 0, 0, 0, 976, 977, 7, 9, 0, 0, 977, 206, 1, 0, 0, 0, 978, 979, 3, 209, 104, 0, 979, 981, 3, 211, 105, 0, 980, 982, 3, 205, 102, 0, 981, 980, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 208, 1, 0, 0, 0, 983, 985, 3, 163, 81, 0, 984, 986, 5, 46, 0, 0, 985, 984, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 995, 1, 0, 0, 0, 987, 988, 5, 48, 0, 0, 988, 990, 7, 2, 0, 0, 989, 991, 3, 165, 82, 0, 990, 989, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 5, 46, 0, 0, 993, 995, 3, 165, 82, 0, 994, 983, 1, 0, 0, 0, 994, 987, 1, 0, 0, 0, 995, 210, 1, 0, 0, 0, 996, 997, 3, 213, 106, 0, 997, 998, 3, 201, 100, 0, 998, 212, 1, 0, 0, 0, 999, 1000, 7, 10, 0, 0, 1000, 214, 1, 0, 0, 0, 1001, 1002, 5, 116, 0, 0, 1002, 1003, 5, 114, 0, 0, 1003, 1004, 5, 117, 0, 0, 1004, 1011, 5, 101, 0, 0, 1005, 1006, 5, 102, 0, 0, 1006, 1007, 5, 97, 0, 0, 1007, 1008, 5, 108, 0, 0, 1008, 1009, 5, 115, 0, 0, 1009, 1011, 5, 101, 0, 0, 1010, 1001, 1, 0, 0, 0, 1010, 1005, 1, 0, 0, 0, 1011, 216, 1, 0, 0, 0, 1012, 1013, 5, 39, 0, 0, 1013, 1014, 3, 219, 109, 0, 1014, 1015, 5, 39, 0, 0, 1015, 1021, 1, 0, 0, 0, 1016, 1017, 5, 39, 0, 0, 1017, 1018, 3, 229, 114, 0, 1018, 1019, 5, 39, 0, 0, 1019, 1021, 1, 0, 0, 0, 1020, 1012, 1, 0, 0, 0, 1020, 1016, 1, 0, 0, 0, 1021, 218, 1, 0, 0, 0, 1022, 1023, 8, 11, 0, 0, 1023, 220, 1, 0, 0, 0, 1024, 1026, 5, 34, 0, 0, 1025, 1027, 3, 223, 111, 0, 1026, 1025, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 1029, 5, 34, 0, 0, 1029, 222, 1, 0, 0, 0, 1030, 1032, 3, 225, 112, 0, 1031, 1030, 1, 0, 0, 0, 1032, 1033, 1, 0, 0, 0, 1033, 1031, 1, 0, 0, 0, 1033, 1034, 1, 0, 0, 0, 1034, 224, 1, 0, 0, 0, 1035, 1038, 8, 12, 0, 0, 1036, 1038, 3, 229, 114, 0, 1037, 1035, 1, 0, 0, 0, 1037, 1036, 1, 0, 0, 0, 1038, 226, 1, 0, 0, 0, 1039, 1040, 5, 34, 0, 0, 1040, 1041, 5, 34, 0, 0, 1041, 1042, 5, 34, 0, 0, 1042, 1046, 1, 0, 0, 0, 1043, 1045, 7, 13, 0, 0, 1044, 1043, 1, 0, 0, 0, 1045, 1048, 1, 0, 0, 0, 1046, 1044, 1, 0, 0, 0, 1046, 1047, 1, 0, 0, 0, 1047, 1049, 1, 0, 0, 0, 1048, 1046, 1, 0, 0, 0, 1049, 1053, 7, 14, 0, 0, 1050, 1052, 7, 15, 0, 0, 1051, 1050, 1, 0, 0, 0, 1052, 1055, 1, 0, 0, 0, 1053, 1051, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 1056, 1, 0, 0, 0, 1055, 1053, 1, 0, 0, 0, 1056, 1057, 5, 34, 0, 0, 1057, 1058, 5, 34, 0, 0, 1058, 1059, 5, 34, 0, 0, 1059, 228, 1, 0, 0, 0, 1060, 1061, 5, 92, 0, 0, 1061, 1065, 7, 16, 0, 0, 1062, 1065, 3, 231, 115, 0, 1063, 1065, 3, 235, 117, 0, 1064, 1060, 1, 0, 0, 0, 1064, 1062, 1, 0, 0, 0, 1064, 1063, 1, 0, 0, 0, 1065, 230, 1, 0, 0, 0, 1066, 1067, 5, 92, 0, 0, 1067, 1078, 3, 177, 88, 0, 1068, 1069, 5, 92, 0, 0, 1069, 1070, 3, 177, 88, 0, 1070, 1071, 3, 177, 88, 0, 1071, 1078, 1, 0, 0, 0, 1072, 1073, 5, 92, 0, 0, 1073, 1074, 3, 233, 116, 0, 1074, 1075, 3, 177, 88, 0, 1075, 1076, 3, 177, 88, 0, 1076, 1078, 1, 0, 0, 0, 1077, 1066, 1, 0, 0, 0, 1077, 1068, 1, 0, 0, 0, 1077, 1072, 1, 0, 0, 0, 1078, 232, 1, 0, 0, 0, 1079, 1080, 7, 17, 0, 0, 1080, 234, 1, 0, 0, 0, 1081, 1083, 5, 92, 0, 0, 1082, 1084, 5, 117, 0, 0, 1083, 1082, 1, 0, 0, 0, 1084, 1085, 1, 0, 0, 0, 1085, 1083, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1088, 3, 167, 83, 0, 1088, 1089, 3, 167, 83, 0, 1089, 1090, 3, 167, 83, 0, 1090, 1091, 3, 167, 83, 0, 1091, 236, 1, 0, 0, 0, 1092, 1093, 5, 110, 0, 0, 1093, 1094, 5, 117, 0, 0, 1094, 1095, 5, 108, 0, 0, 1095, 1096, 5, 108, 0, 0, 1096, 238, 1, 0, 0, 0, 1097, 1098, 5, 40, 0, 0, 1098, 240, 1, 0, 0, 0, 1099, 1100, 5, 41, 0, 0, 1100, 242, 1, 0, 0, 0, 1101, 1102, 5, 123, 0, 0, 1102, 244, 1, 0, 0, 0, 1103, 1104, 5, 125, 0, 0, 1104, 246, 1, 0, 0, 0, 1105, 1106, 5, 91, 0, 0, 1106, 248, 1, 0, 0, 0, 1107, 1108, 5, 93, 0, 0, 1108, 250, 1, 0, 0, 0, 1109, 1110, 5, 59, 0, 0, 1110, 252, 1, 0, 0, 0, 1111, 1112, 5, 44, 0, 0, 1112, 254, 1, 0, 0, 0, 1113, 1114, 5, 46, 0, 0, 1114, 256, 1, 0, 0, 0, 1115, 1116, 5, 46, 0, 0, 1116, 1117, 5, 46, 0, 0, 1117, 1118, 5, 46, 0, 0, 1118, 258, 1, 0, 0, 0, 1119, 1120, 5, 64, 0, 0, 1120, 260, 1, 0, 0, 0, 1121, 1122, 5, 58, 0, 0, 1122, 1123, 5, 58, 0, 0, 1123, 262, 1, 0, 0, 0, 1124, 1125, 5, 61, 0, 0, 1125, 264, 1, 0, 0, 0, 1126, 1127, 5, 62, 0, 0, 1127, 266, 1, 0, 0, 0, 1128, 1129, 5, 60, 0, 0, 1129, 268, 1, 0, 0, 0, 1130, 1131, 5, 33, 0, 0, 1131, 270, 1, 0, 0, 0, 1132, 1133, 5, 126, 0, 0, 1133, 272, 1, 0, 0, 0, 1134, 1135, 5, 63, 0, 0, 1135, 274, 1, 0, 0, 0, 1136, 1137, 5, 58, 0, 0, 1137, 276, 1, 0, 0, 0, 1138, 1139, 5, 45, 0, 0, 1139, 1140, 5, 62, 0, 0, 1140, 278, 1, 0, 0, 0, 1141, 1142, 5, 61, 0, 0, 1142, 1143, 5, 61, 0, 0, 1143, 280, 1, 0, 0, 0, 1144, 1145, 5, 60, 0, 0, 1145, 1146, 5, 61, 0, 0, 1146, 282, 1, 0, 0, 0, 1147, 1148, 5, 62, 0, 0, 1148, 1149, 5, 61, 0, 0, 1149, 284, 1, 0, 0, 0, 1150, 1151, 5, 33, 0, 0, 1151, 1152, 5, 61, 0, 0, 1152, 286, 1, 0, 0, 0, 1153, 1154, 5, 38, 0, 0, 1154, 1155, 5, 38, 0, 0, 1155, 288, 1, 0, 0, 0, 1156, 1157, 5, 124, 0, 0, 1157, 1158, 5, 124, 0, 0, 1158, 290, 1, 0, 0, 0, 1159, 1160, 5, 43, 0, 0, 1160, 1161, 5, 43, 0, 0, 1161, 292, 1, 0, 0, 0, 1162, 1163, 5, 45, 0, 0, 1163, 1164, 5, 45, 0, 0, 1164, 294, 1, 0, 0, 0, 1165, 1166, 5, 43, 0, 0, 1166, 296, 1, 0, 0, 0, 1167, 1168, 5, 45, 0, 0, 1168, 298, 1, 0, 0, 0, 1169, 1170, 5, 42, 0, 0, 1170, 300, 1, 0, 0, 0, 1171, 1172, 5, 47, 0, 0, 1172, 302, 1, 0, 0, 0, 1173, 1174, 5, 38, 0, 0, 1174, 304, 1, 0, 0, 0, 1175, 1176, 5, 124, 0, 0, 1176, 306, 1, 0, 0, 0, 1177, 1178, 5, 94, 0, 0, 1178, 308, 1, 0, 0, 0, 1179, 1180, 5, 37, 0, 0, 1180, 310, 1, 0, 0, 0, 1181, 1182, 5, 43, 0, 0, 1182, 1183, 5, 61, 0, 0, 1183, 312, 1, 0, 0, 0, 1184, 1185, 5, 45, 0, 0, 1185, 1186, 5, 61, 0, 0, 1186, 314, 1, 0, 0, 0, 1187, 1188, 5, 42, 0, 0, 1188, 1189, 5, 61, 0, 0, 1189, 316, 1, 0, 0, 0, 1190, 1191, 5, 47, 0, 0, 1191, 1192, 5, 61, 0, 0, 1192, 318, 1, 0, 0, 0, 1193, 1194, 5, 38, 0, 0, 1194, 1195, 5, 61, 0, 0, 1195, 320, 1, 0, 0, 0, 1196, 1197, 5, 124, 0, 0, 1197, 1198, 5, 61, 0, 0, 1198, 322, 1, 0, 0, 0, 1199, 1200, 5, 94, 0, 0, 1200, 1201, 5, 61, 0, 0, 1201, 324, 1, 0, 0, 0, 1202, 1203, 5, 37, 0, 0, 1203, 1204, 5, 61, 0, 0, 1204, 326, 1, 0, 0, 0, 1205, 1206, 5, 60, 0, 0, 1206, 1207, 5, 60, 0, 0, 1207, 1208, 5, 61, 0, 0, 1208, 328, 1, 0, 0, 0, 1209, 1210, 5, 62, 0, 0, 1210, 1211, 5, 62, 0, 0, 1211, 1212, 5, 61, 0, 0, 1212, 330, 1, 0, 0, 0, 1213, 1214, 5, 62, 0, 0, 1214, 1215, 5, 62, 0, 0, 1215, 1216, 5, 62, 0, 0, 1216, 1217, 5, 61, 0, 0, 1217, 332, 1, 0, 0, 0, 1218, 1222, 3, 335, 167, 0, 1219, 1221, 3, 337, 168, 0, 1220, 1219, 1, 0, 0, 0, 1221, 1224, 1, 0, 0, 0, 1222, 1220, 1, 0, 0, 0, 1222, 1223, 1, 0, 0, 0, 1223, 334, 1, 0, 0, 0, 1224, 1222, 1, 0, 0, 0, 1225, 1227, 7, 18, 0, 0, 1226, 1225, 1, 0, 0, 0, 1227, 336, 1, 0, 0, 0, 1228, 1231, 3, 335, 167, 0, 1229, 1231, 7, 19, 0, 0, 1230, 1228, 1, 0, 0, 0, 1230, 1229, 1, 0, 0, 0, 1231, 338, 1, 0, 0, 0, 1232, 1233, 7, 20, 0, 0, 1233, 1234, 1, 0, 0, 0, 1234, 1235, 6, 169, 0, 0, 1235, 340, 1, 0, 0, 0, 1236, 1237, 5, 47, 0, 0, 1237, 1238, 5, 42, 0, 0, 1238, 1242, 1, 0, 0, 0, 1239, 1241, 9, 0, 0, 0, 1240, 1239, 1, 0, 0, 0, 1241, 1244, 1, 0, 0, 0, 1242, 1243, 1, 0, 0, 0, 1242, 1240, 1, 0, 0, 0, 1243, 1245, 1, 0, 0, 0, 1244, 1242, 1, 0, 0, 0, 1245, 1246, 5, 42, 0, 0, 1246, 1247, 5, 47, 0, 0, 1247, 1248, 1, 0, 0, 0, 1248, 1249, 6, 170, 0, 0, 1249, 342, 1, 0, 0, 0, 1250, 1251, 5, 47, 0, 0, 1251, 1252, 5, 47, 0, 0, 1252, 1256, 1, 0, 0, 0, 1253, 1255, 8, 14, 0, 0, 1254, 1253, 1, 0, 0, 0, 1255, 1258, 1, 0, 0, 0, 1256, 1254, 1, 0, 0, 0, 1256, 1257, 1, 0, 0, 0, 1257, 1259, 1, 0, 0, 0, 1258, 1256, 1, 0, 0, 0, 1259, 1260, 6, 171, 0, 0, 1260, 344, 1, 0, 0, 0, 56, 0, 804, 808, 812, 816, 820, 827, 832, 834, 838, 841, 845, 852, 856, 861, 869, 872, 879, 883, 887, 893, 896, 903, 907, 915, 918, 925, 929, 933, 938, 941, 944, 949, 952, 957, 962, 970, 981, 985, 990, 994, 1010, 1020, 1026, 1033, 1037, 1046, 1053, 1064, 1077, 1085, 1222, 1226, 1230, 1242, 1256, 1, 0, 1, 0] \ No newline at end of file diff --git a/cfg_generator/src/antlr/gen/JavaLexer.py b/cfg_generator/src/antlr/gen/JavaLexer.py new file mode 100644 index 00000000..9adf4cb6 --- /dev/null +++ b/cfg_generator/src/antlr/gen/JavaLexer.py @@ -0,0 +1,811 @@ +# Generated from F:/cfg-generator/grammar/JavaLexer.g4 by ANTLR 4.13.1 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + + +def serializedATN(): + return [ + 4,0,126,1261,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7, + 5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12, + 2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19, + 7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25, + 2,26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32, + 7,32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38, + 2,39,7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45, + 7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51, + 2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58, + 7,58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64, + 2,65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71, + 7,71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77, + 2,78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84, + 7,84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90, + 2,91,7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97, + 7,97,2,98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103, + 7,103,2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108, + 2,109,7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114, + 7,114,2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119, + 2,120,7,120,2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124,2,125, + 7,125,2,126,7,126,2,127,7,127,2,128,7,128,2,129,7,129,2,130,7,130, + 2,131,7,131,2,132,7,132,2,133,7,133,2,134,7,134,2,135,7,135,2,136, + 7,136,2,137,7,137,2,138,7,138,2,139,7,139,2,140,7,140,2,141,7,141, + 2,142,7,142,2,143,7,143,2,144,7,144,2,145,7,145,2,146,7,146,2,147, + 7,147,2,148,7,148,2,149,7,149,2,150,7,150,2,151,7,151,2,152,7,152, + 2,153,7,153,2,154,7,154,2,155,7,155,2,156,7,156,2,157,7,157,2,158, + 7,158,2,159,7,159,2,160,7,160,2,161,7,161,2,162,7,162,2,163,7,163, + 2,164,7,164,2,165,7,165,2,166,7,166,2,167,7,167,2,168,7,168,2,169, + 7,169,2,170,7,170,2,171,7,171,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1, + 2,1,2,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1, + 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1, + 7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1, + 9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,12,1,12,1, + 12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1, + 13,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1, + 16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1, + 18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1, + 19,1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,22,1, + 22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1, + 24,1,24,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1, + 26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1, + 28,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1, + 30,1,30,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,33,1, + 33,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1, + 35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,1, + 36,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1, + 40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1, + 41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1, + 42,1,42,1,42,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1, + 44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1, + 46,1,46,1,46,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,1, + 48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1, + 50,1,50,1,50,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,51,1, + 51,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1, + 53,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1, + 55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1, + 57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1, + 58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1, + 60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1, + 62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1, + 64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1, + 66,1,66,1,66,1,66,1,67,1,67,1,68,1,68,1,68,1,68,3,68,805,8,68,1, + 69,1,69,3,69,809,8,69,1,70,1,70,3,70,813,8,70,1,71,1,71,3,71,817, + 8,71,1,72,1,72,3,72,821,8,72,1,73,1,73,1,74,1,74,1,74,3,74,828,8, + 74,1,74,1,74,1,74,3,74,833,8,74,3,74,835,8,74,1,75,1,75,3,75,839, + 8,75,1,75,3,75,842,8,75,1,76,1,76,3,76,846,8,76,1,77,1,77,1,78,4, + 78,851,8,78,11,78,12,78,852,1,79,1,79,3,79,857,8,79,1,80,4,80,860, + 8,80,11,80,12,80,861,1,81,1,81,1,81,1,81,1,82,1,82,3,82,870,8,82, + 1,82,3,82,873,8,82,1,83,1,83,1,84,4,84,878,8,84,11,84,12,84,879, + 1,85,1,85,3,85,884,8,85,1,86,1,86,3,86,888,8,86,1,86,1,86,1,87,1, + 87,3,87,894,8,87,1,87,3,87,897,8,87,1,88,1,88,1,89,4,89,902,8,89, + 11,89,12,89,903,1,90,1,90,3,90,908,8,90,1,91,1,91,1,91,1,91,1,92, + 1,92,3,92,916,8,92,1,92,3,92,919,8,92,1,93,1,93,1,94,4,94,924,8, + 94,11,94,12,94,925,1,95,1,95,3,95,930,8,95,1,96,1,96,3,96,934,8, + 96,1,97,1,97,1,97,3,97,939,8,97,1,97,3,97,942,8,97,1,97,3,97,945, + 8,97,1,97,1,97,1,97,3,97,950,8,97,1,97,3,97,953,8,97,1,97,1,97,1, + 97,3,97,958,8,97,1,97,1,97,1,97,3,97,963,8,97,1,98,1,98,1,98,1,99, + 1,99,1,100,3,100,971,8,100,1,100,1,100,1,101,1,101,1,102,1,102,1, + 103,1,103,1,103,3,103,982,8,103,1,104,1,104,3,104,986,8,104,1,104, + 1,104,1,104,3,104,991,8,104,1,104,1,104,3,104,995,8,104,1,105,1, + 105,1,105,1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107, + 1,107,1,107,3,107,1011,8,107,1,108,1,108,1,108,1,108,1,108,1,108, + 1,108,1,108,3,108,1021,8,108,1,109,1,109,1,110,1,110,3,110,1027, + 8,110,1,110,1,110,1,111,4,111,1032,8,111,11,111,12,111,1033,1,112, + 1,112,3,112,1038,8,112,1,113,1,113,1,113,1,113,1,113,5,113,1045, + 8,113,10,113,12,113,1048,9,113,1,113,1,113,5,113,1052,8,113,10,113, + 12,113,1055,9,113,1,113,1,113,1,113,1,113,1,114,1,114,1,114,1,114, + 3,114,1065,8,114,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115, + 1,115,1,115,1,115,3,115,1078,8,115,1,116,1,116,1,117,1,117,4,117, + 1084,8,117,11,117,12,117,1085,1,117,1,117,1,117,1,117,1,117,1,118, + 1,118,1,118,1,118,1,118,1,119,1,119,1,120,1,120,1,121,1,121,1,122, + 1,122,1,123,1,123,1,124,1,124,1,125,1,125,1,126,1,126,1,127,1,127, + 1,128,1,128,1,128,1,128,1,129,1,129,1,130,1,130,1,130,1,131,1,131, + 1,132,1,132,1,133,1,133,1,134,1,134,1,135,1,135,1,136,1,136,1,137, + 1,137,1,138,1,138,1,138,1,139,1,139,1,139,1,140,1,140,1,140,1,141, + 1,141,1,141,1,142,1,142,1,142,1,143,1,143,1,143,1,144,1,144,1,144, + 1,145,1,145,1,145,1,146,1,146,1,146,1,147,1,147,1,148,1,148,1,149, + 1,149,1,150,1,150,1,151,1,151,1,152,1,152,1,153,1,153,1,154,1,154, + 1,155,1,155,1,155,1,156,1,156,1,156,1,157,1,157,1,157,1,158,1,158, + 1,158,1,159,1,159,1,159,1,160,1,160,1,160,1,161,1,161,1,161,1,162, + 1,162,1,162,1,163,1,163,1,163,1,163,1,164,1,164,1,164,1,164,1,165, + 1,165,1,165,1,165,1,165,1,166,1,166,5,166,1221,8,166,10,166,12,166, + 1224,9,166,1,167,3,167,1227,8,167,1,168,1,168,3,168,1231,8,168,1, + 169,1,169,1,169,1,169,1,170,1,170,1,170,1,170,5,170,1241,8,170,10, + 170,12,170,1244,9,170,1,170,1,170,1,170,1,170,1,170,1,171,1,171, + 1,171,1,171,5,171,1255,8,171,10,171,12,171,1258,9,171,1,171,1,171, + 1,1242,0,172,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11, + 23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22, + 45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33, + 67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85,43,87,44, + 89,45,91,46,93,47,95,48,97,49,99,50,101,51,103,52,105,53,107,54, + 109,55,111,56,113,57,115,58,117,59,119,60,121,61,123,62,125,63,127, + 64,129,65,131,66,133,67,135,68,137,69,139,0,141,0,143,0,145,0,147, + 0,149,0,151,0,153,0,155,0,157,0,159,0,161,0,163,0,165,0,167,0,169, + 0,171,0,173,0,175,0,177,0,179,0,181,0,183,0,185,0,187,0,189,0,191, + 0,193,70,195,0,197,0,199,0,201,0,203,0,205,0,207,0,209,0,211,0,213, + 0,215,71,217,72,219,0,221,73,223,0,225,0,227,74,229,0,231,0,233, + 0,235,0,237,75,239,76,241,77,243,78,245,79,247,80,249,81,251,82, + 253,83,255,84,257,85,259,86,261,87,263,88,265,89,267,90,269,91,271, + 92,273,93,275,94,277,95,279,96,281,97,283,98,285,99,287,100,289, + 101,291,102,293,103,295,104,297,105,299,106,301,107,303,108,305, + 109,307,110,309,111,311,112,313,113,315,114,317,115,319,116,321, + 117,323,118,325,119,327,120,329,121,331,122,333,123,335,0,337,0, + 339,124,341,125,343,126,1,0,21,2,0,76,76,108,108,1,0,49,57,2,0,88, + 88,120,120,3,0,48,57,65,70,97,102,1,0,48,55,2,0,66,66,98,98,1,0, + 48,49,2,0,69,69,101,101,2,0,43,43,45,45,4,0,68,68,70,70,100,100, + 102,102,2,0,80,80,112,112,4,0,10,10,13,13,39,39,92,92,4,0,10,10, + 13,13,34,34,92,92,2,0,9,9,32,32,2,0,10,10,13,13,3,0,8,8,13,13,46, + 46,8,0,34,34,39,39,92,92,98,98,102,102,110,110,114,114,116,116,1, + 0,48,51,402,0,36,36,65,90,95,95,97,122,162,165,170,170,181,181,186, + 186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880, + 884,886,887,890,893,895,895,902,902,904,906,908,908,910,929,931, + 1013,1015,1153,1162,1327,1329,1366,1369,1369,1377,1415,1423,1423, + 1488,1514,1520,1522,1547,1547,1568,1610,1646,1647,1649,1747,1749, + 1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839, + 1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074, + 2074,2084,2084,2088,2088,2112,2136,2144,2154,2208,2228,2230,2237, + 2308,2361,2365,2365,2384,2384,2392,2401,2417,2432,2437,2444,2447, + 2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510, + 2524,2525,2527,2529,2544,2547,2555,2556,2565,2570,2575,2576,2579, + 2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654, + 2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741, + 2745,2749,2749,2768,2768,2784,2785,2801,2801,2809,2809,2821,2828, + 2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908, + 2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965, + 2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024, + 3024,3065,3065,3077,3084,3086,3088,3090,3112,3114,3129,3133,3133, + 3160,3162,3168,3169,3200,3200,3205,3212,3214,3216,3218,3240,3242, + 3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340, + 3342,3344,3346,3386,3389,3389,3406,3406,3412,3414,3423,3425,3450, + 3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632, + 3634,3635,3647,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725, + 3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755, + 3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840, + 3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181, + 4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256, + 4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694, + 4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792, + 4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954, + 4992,5007,5024,5109,5112,5117,5121,5740,5743,5759,5761,5786,5792, + 5866,5870,5880,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996, + 5998,6000,6016,6067,6103,6103,6107,6108,6176,6263,6272,6276,6279, + 6312,6314,6314,6320,6389,6400,6430,6480,6509,6512,6516,6528,6571, + 6576,6601,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043, + 7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7296,7304, + 7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968, + 8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061, + 8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150, + 8155,8160,8172,8178,8180,8182,8188,8255,8256,8276,8276,8305,8305, + 8319,8319,8336,8348,8352,8383,8450,8450,8455,8455,8458,8467,8469, + 8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505, + 8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358, + 11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565, + 11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694, + 11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736, + 11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348, + 12353,12438,12445,12447,12449,12538,12540,12543,12549,12590,12593, + 12686,12704,12730,12784,12799,13312,19893,19968,40938,40960,42124, + 42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623, + 42653,42656,42735,42775,42783,42786,42888,42891,42926,42928,42935, + 42999,43009,43011,43013,43015,43018,43020,43042,43064,43064,43072, + 43123,43138,43187,43250,43255,43259,43259,43261,43261,43274,43301, + 43312,43334,43360,43388,43396,43442,43471,43471,43488,43492,43494, + 43503,43514,43518,43520,43560,43584,43586,43588,43595,43616,43638, + 43642,43642,43646,43695,43697,43697,43701,43702,43705,43709,43712, + 43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782, + 43785,43790,43793,43798,43808,43814,43816,43822,43824,43866,43868, + 43877,43888,44002,44032,55203,55216,55238,55243,55291,63744,64109, + 64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298, + 64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433, + 64467,64829,64848,64911,64914,64967,65008,65020,65075,65076,65101, + 65103,65129,65129,65136,65140,65142,65276,65284,65284,65313,65338, + 65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490, + 65495,65498,65500,65504,65505,65509,65510,228,0,48,57,127,159,173, + 173,768,879,1155,1159,1425,1469,1471,1471,1473,1474,1476,1477,1479, + 1479,1536,1541,1552,1562,1564,1564,1611,1641,1648,1648,1750,1757, + 1759,1764,1767,1768,1770,1773,1776,1785,1807,1807,1809,1809,1840, + 1866,1958,1968,1984,1993,2027,2035,2070,2073,2075,2083,2085,2087, + 2089,2093,2137,2139,2260,2307,2362,2364,2366,2383,2385,2391,2402, + 2403,2406,2415,2433,2435,2492,2492,2494,2500,2503,2504,2507,2509, + 2519,2519,2530,2531,2534,2543,2561,2563,2620,2620,2622,2626,2631, + 2632,2635,2637,2641,2641,2662,2673,2677,2677,2689,2691,2748,2748, + 2750,2757,2759,2761,2763,2765,2786,2787,2790,2799,2810,2815,2817, + 2819,2876,2876,2878,2884,2887,2888,2891,2893,2902,2903,2914,2915, + 2918,2927,2946,2946,3006,3010,3014,3016,3018,3021,3031,3031,3046, + 3055,3072,3075,3134,3140,3142,3144,3146,3149,3157,3158,3170,3171, + 3174,3183,3201,3203,3260,3260,3262,3268,3270,3272,3274,3277,3285, + 3286,3298,3299,3302,3311,3328,3331,3387,3388,3390,3396,3398,3400, + 3402,3405,3415,3415,3426,3427,3430,3439,3458,3459,3530,3530,3535, + 3540,3542,3542,3544,3551,3558,3567,3570,3571,3633,3633,3636,3642, + 3655,3662,3664,3673,3761,3761,3764,3769,3771,3772,3784,3789,3792, + 3801,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3903, + 3953,3972,3974,3975,3981,3991,3993,4028,4038,4038,4139,4158,4160, + 4169,4182,4185,4190,4192,4194,4196,4199,4205,4209,4212,4226,4237, + 4239,4253,4957,4959,5906,5908,5938,5940,5970,5971,6002,6003,6068, + 6099,6109,6109,6112,6121,6155,6158,6160,6169,6277,6278,6313,6313, + 6432,6443,6448,6459,6470,6479,6608,6617,6679,6683,6741,6750,6752, + 6780,6783,6793,6800,6809,6832,6845,6912,6916,6964,6980,6992,7001, + 7019,7027,7040,7042,7073,7085,7088,7097,7142,7155,7204,7223,7232, + 7241,7248,7257,7376,7378,7380,7400,7405,7405,7410,7412,7415,7417, + 7616,7673,7675,7679,8203,8207,8234,8238,8288,8292,8294,8303,8400, + 8412,8417,8417,8421,8432,11503,11505,11647,11647,11744,11775,12330, + 12335,12441,12442,42528,42537,42607,42607,42612,42621,42654,42655, + 42736,42737,43010,43010,43014,43014,43019,43019,43043,43047,43136, + 43137,43188,43205,43216,43225,43232,43249,43264,43273,43302,43309, + 43335,43347,43392,43395,43443,43456,43472,43481,43493,43493,43504, + 43513,43561,43574,43587,43587,43596,43597,43600,43609,43643,43645, + 43696,43696,43698,43700,43703,43704,43710,43711,43713,43713,43755, + 43759,43765,43766,44003,44010,44012,44013,44016,44025,64286,64286, + 65024,65039,65056,65071,65279,65279,65296,65305,65529,65531,3,0, + 9,10,13,13,32,32,1274,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1, + 0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1, + 0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1, + 0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1, + 0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1, + 0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1, + 0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1, + 0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1, + 0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1, + 0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1, + 0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107, + 1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0, + 0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1, + 0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0, + 135,1,0,0,0,0,137,1,0,0,0,0,193,1,0,0,0,0,215,1,0,0,0,0,217,1,0, + 0,0,0,221,1,0,0,0,0,227,1,0,0,0,0,237,1,0,0,0,0,239,1,0,0,0,0,241, + 1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249,1,0,0,0, + 0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,0,0,0,0,259,1, + 0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267,1,0,0,0,0, + 269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0,277,1,0, + 0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0,0,0,0,287, + 1,0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295,1,0,0,0, + 0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0,0,303,1,0,0,0,0,305,1, + 0,0,0,0,307,1,0,0,0,0,309,1,0,0,0,0,311,1,0,0,0,0,313,1,0,0,0,0, + 315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0,0,321,1,0,0,0,0,323,1,0, + 0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0,0,331,1,0,0,0,0,333, + 1,0,0,0,0,339,1,0,0,0,0,341,1,0,0,0,0,343,1,0,0,0,1,345,1,0,0,0, + 3,353,1,0,0,0,5,360,1,0,0,0,7,371,1,0,0,0,9,374,1,0,0,0,11,379,1, + 0,0,0,13,385,1,0,0,0,15,393,1,0,0,0,17,402,1,0,0,0,19,409,1,0,0, + 0,21,418,1,0,0,0,23,425,1,0,0,0,25,428,1,0,0,0,27,439,1,0,0,0,29, + 444,1,0,0,0,31,448,1,0,0,0,33,453,1,0,0,0,35,459,1,0,0,0,37,468, + 1,0,0,0,39,475,1,0,0,0,41,483,1,0,0,0,43,489,1,0,0,0,45,494,1,0, + 0,0,47,499,1,0,0,0,49,505,1,0,0,0,51,510,1,0,0,0,53,516,1,0,0,0, + 55,522,1,0,0,0,57,531,1,0,0,0,59,539,1,0,0,0,61,542,1,0,0,0,63,549, + 1,0,0,0,65,554,1,0,0,0,67,559,1,0,0,0,69,567,1,0,0,0,71,573,1,0, + 0,0,73,581,1,0,0,0,75,587,1,0,0,0,77,591,1,0,0,0,79,594,1,0,0,0, + 81,599,1,0,0,0,83,610,1,0,0,0,85,617,1,0,0,0,87,628,1,0,0,0,89,632, + 1,0,0,0,91,642,1,0,0,0,93,647,1,0,0,0,95,654,1,0,0,0,97,658,1,0, + 0,0,99,666,1,0,0,0,101,674,1,0,0,0,103,684,1,0,0,0,105,691,1,0,0, + 0,107,698,1,0,0,0,109,704,1,0,0,0,111,711,1,0,0,0,113,720,1,0,0, + 0,115,726,1,0,0,0,117,733,1,0,0,0,119,746,1,0,0,0,121,751,1,0,0, + 0,123,757,1,0,0,0,125,764,1,0,0,0,127,774,1,0,0,0,129,778,1,0,0, + 0,131,783,1,0,0,0,133,792,1,0,0,0,135,798,1,0,0,0,137,804,1,0,0, + 0,139,806,1,0,0,0,141,810,1,0,0,0,143,814,1,0,0,0,145,818,1,0,0, + 0,147,822,1,0,0,0,149,834,1,0,0,0,151,836,1,0,0,0,153,845,1,0,0, + 0,155,847,1,0,0,0,157,850,1,0,0,0,159,856,1,0,0,0,161,859,1,0,0, + 0,163,863,1,0,0,0,165,867,1,0,0,0,167,874,1,0,0,0,169,877,1,0,0, + 0,171,883,1,0,0,0,173,885,1,0,0,0,175,891,1,0,0,0,177,898,1,0,0, + 0,179,901,1,0,0,0,181,907,1,0,0,0,183,909,1,0,0,0,185,913,1,0,0, + 0,187,920,1,0,0,0,189,923,1,0,0,0,191,929,1,0,0,0,193,933,1,0,0, + 0,195,962,1,0,0,0,197,964,1,0,0,0,199,967,1,0,0,0,201,970,1,0,0, + 0,203,974,1,0,0,0,205,976,1,0,0,0,207,978,1,0,0,0,209,994,1,0,0, + 0,211,996,1,0,0,0,213,999,1,0,0,0,215,1010,1,0,0,0,217,1020,1,0, + 0,0,219,1022,1,0,0,0,221,1024,1,0,0,0,223,1031,1,0,0,0,225,1037, + 1,0,0,0,227,1039,1,0,0,0,229,1064,1,0,0,0,231,1077,1,0,0,0,233,1079, + 1,0,0,0,235,1081,1,0,0,0,237,1092,1,0,0,0,239,1097,1,0,0,0,241,1099, + 1,0,0,0,243,1101,1,0,0,0,245,1103,1,0,0,0,247,1105,1,0,0,0,249,1107, + 1,0,0,0,251,1109,1,0,0,0,253,1111,1,0,0,0,255,1113,1,0,0,0,257,1115, + 1,0,0,0,259,1119,1,0,0,0,261,1121,1,0,0,0,263,1124,1,0,0,0,265,1126, + 1,0,0,0,267,1128,1,0,0,0,269,1130,1,0,0,0,271,1132,1,0,0,0,273,1134, + 1,0,0,0,275,1136,1,0,0,0,277,1138,1,0,0,0,279,1141,1,0,0,0,281,1144, + 1,0,0,0,283,1147,1,0,0,0,285,1150,1,0,0,0,287,1153,1,0,0,0,289,1156, + 1,0,0,0,291,1159,1,0,0,0,293,1162,1,0,0,0,295,1165,1,0,0,0,297,1167, + 1,0,0,0,299,1169,1,0,0,0,301,1171,1,0,0,0,303,1173,1,0,0,0,305,1175, + 1,0,0,0,307,1177,1,0,0,0,309,1179,1,0,0,0,311,1181,1,0,0,0,313,1184, + 1,0,0,0,315,1187,1,0,0,0,317,1190,1,0,0,0,319,1193,1,0,0,0,321,1196, + 1,0,0,0,323,1199,1,0,0,0,325,1202,1,0,0,0,327,1205,1,0,0,0,329,1209, + 1,0,0,0,331,1213,1,0,0,0,333,1218,1,0,0,0,335,1226,1,0,0,0,337,1230, + 1,0,0,0,339,1232,1,0,0,0,341,1236,1,0,0,0,343,1250,1,0,0,0,345,346, + 5,101,0,0,346,347,5,120,0,0,347,348,5,112,0,0,348,349,5,111,0,0, + 349,350,5,114,0,0,350,351,5,116,0,0,351,352,5,115,0,0,352,2,1,0, + 0,0,353,354,5,109,0,0,354,355,5,111,0,0,355,356,5,100,0,0,356,357, + 5,117,0,0,357,358,5,108,0,0,358,359,5,101,0,0,359,4,1,0,0,0,360, + 361,5,110,0,0,361,362,5,111,0,0,362,363,5,110,0,0,363,364,5,45,0, + 0,364,365,5,115,0,0,365,366,5,101,0,0,366,367,5,97,0,0,367,368,5, + 108,0,0,368,369,5,101,0,0,369,370,5,100,0,0,370,6,1,0,0,0,371,372, + 5,60,0,0,372,373,5,62,0,0,373,8,1,0,0,0,374,375,5,111,0,0,375,376, + 5,112,0,0,376,377,5,101,0,0,377,378,5,110,0,0,378,10,1,0,0,0,379, + 380,5,111,0,0,380,381,5,112,0,0,381,382,5,101,0,0,382,383,5,110, + 0,0,383,384,5,115,0,0,384,12,1,0,0,0,385,386,5,112,0,0,386,387,5, + 101,0,0,387,388,5,114,0,0,388,389,5,109,0,0,389,390,5,105,0,0,390, + 391,5,116,0,0,391,392,5,115,0,0,392,14,1,0,0,0,393,394,5,112,0,0, + 394,395,5,114,0,0,395,396,5,111,0,0,396,397,5,118,0,0,397,398,5, + 105,0,0,398,399,5,100,0,0,399,400,5,101,0,0,400,401,5,115,0,0,401, + 16,1,0,0,0,402,403,5,114,0,0,403,404,5,101,0,0,404,405,5,99,0,0, + 405,406,5,111,0,0,406,407,5,114,0,0,407,408,5,100,0,0,408,18,1,0, + 0,0,409,410,5,114,0,0,410,411,5,101,0,0,411,412,5,113,0,0,412,413, + 5,117,0,0,413,414,5,105,0,0,414,415,5,114,0,0,415,416,5,101,0,0, + 416,417,5,115,0,0,417,20,1,0,0,0,418,419,5,115,0,0,419,420,5,101, + 0,0,420,421,5,97,0,0,421,422,5,108,0,0,422,423,5,101,0,0,423,424, + 5,100,0,0,424,22,1,0,0,0,425,426,5,116,0,0,426,427,5,111,0,0,427, + 24,1,0,0,0,428,429,5,116,0,0,429,430,5,114,0,0,430,431,5,97,0,0, + 431,432,5,110,0,0,432,433,5,115,0,0,433,434,5,105,0,0,434,435,5, + 116,0,0,435,436,5,105,0,0,436,437,5,118,0,0,437,438,5,101,0,0,438, + 26,1,0,0,0,439,440,5,117,0,0,440,441,5,115,0,0,441,442,5,101,0,0, + 442,443,5,115,0,0,443,28,1,0,0,0,444,445,5,118,0,0,445,446,5,97, + 0,0,446,447,5,114,0,0,447,30,1,0,0,0,448,449,5,119,0,0,449,450,5, + 105,0,0,450,451,5,116,0,0,451,452,5,104,0,0,452,32,1,0,0,0,453,454, + 5,121,0,0,454,455,5,105,0,0,455,456,5,101,0,0,456,457,5,108,0,0, + 457,458,5,100,0,0,458,34,1,0,0,0,459,460,5,97,0,0,460,461,5,98,0, + 0,461,462,5,115,0,0,462,463,5,116,0,0,463,464,5,114,0,0,464,465, + 5,97,0,0,465,466,5,99,0,0,466,467,5,116,0,0,467,36,1,0,0,0,468,469, + 5,97,0,0,469,470,5,115,0,0,470,471,5,115,0,0,471,472,5,101,0,0,472, + 473,5,114,0,0,473,474,5,116,0,0,474,38,1,0,0,0,475,476,5,98,0,0, + 476,477,5,111,0,0,477,478,5,111,0,0,478,479,5,108,0,0,479,480,5, + 101,0,0,480,481,5,97,0,0,481,482,5,110,0,0,482,40,1,0,0,0,483,484, + 5,98,0,0,484,485,5,114,0,0,485,486,5,101,0,0,486,487,5,97,0,0,487, + 488,5,107,0,0,488,42,1,0,0,0,489,490,5,98,0,0,490,491,5,121,0,0, + 491,492,5,116,0,0,492,493,5,101,0,0,493,44,1,0,0,0,494,495,5,99, + 0,0,495,496,5,97,0,0,496,497,5,115,0,0,497,498,5,101,0,0,498,46, + 1,0,0,0,499,500,5,99,0,0,500,501,5,97,0,0,501,502,5,116,0,0,502, + 503,5,99,0,0,503,504,5,104,0,0,504,48,1,0,0,0,505,506,5,99,0,0,506, + 507,5,104,0,0,507,508,5,97,0,0,508,509,5,114,0,0,509,50,1,0,0,0, + 510,511,5,99,0,0,511,512,5,108,0,0,512,513,5,97,0,0,513,514,5,115, + 0,0,514,515,5,115,0,0,515,52,1,0,0,0,516,517,5,99,0,0,517,518,5, + 111,0,0,518,519,5,110,0,0,519,520,5,115,0,0,520,521,5,116,0,0,521, + 54,1,0,0,0,522,523,5,99,0,0,523,524,5,111,0,0,524,525,5,110,0,0, + 525,526,5,116,0,0,526,527,5,105,0,0,527,528,5,110,0,0,528,529,5, + 117,0,0,529,530,5,101,0,0,530,56,1,0,0,0,531,532,5,100,0,0,532,533, + 5,101,0,0,533,534,5,102,0,0,534,535,5,97,0,0,535,536,5,117,0,0,536, + 537,5,108,0,0,537,538,5,116,0,0,538,58,1,0,0,0,539,540,5,100,0,0, + 540,541,5,111,0,0,541,60,1,0,0,0,542,543,5,100,0,0,543,544,5,111, + 0,0,544,545,5,117,0,0,545,546,5,98,0,0,546,547,5,108,0,0,547,548, + 5,101,0,0,548,62,1,0,0,0,549,550,5,101,0,0,550,551,5,108,0,0,551, + 552,5,115,0,0,552,553,5,101,0,0,553,64,1,0,0,0,554,555,5,101,0,0, + 555,556,5,110,0,0,556,557,5,117,0,0,557,558,5,109,0,0,558,66,1,0, + 0,0,559,560,5,101,0,0,560,561,5,120,0,0,561,562,5,116,0,0,562,563, + 5,101,0,0,563,564,5,110,0,0,564,565,5,100,0,0,565,566,5,115,0,0, + 566,68,1,0,0,0,567,568,5,102,0,0,568,569,5,105,0,0,569,570,5,110, + 0,0,570,571,5,97,0,0,571,572,5,108,0,0,572,70,1,0,0,0,573,574,5, + 102,0,0,574,575,5,105,0,0,575,576,5,110,0,0,576,577,5,97,0,0,577, + 578,5,108,0,0,578,579,5,108,0,0,579,580,5,121,0,0,580,72,1,0,0,0, + 581,582,5,102,0,0,582,583,5,108,0,0,583,584,5,111,0,0,584,585,5, + 97,0,0,585,586,5,116,0,0,586,74,1,0,0,0,587,588,5,102,0,0,588,589, + 5,111,0,0,589,590,5,114,0,0,590,76,1,0,0,0,591,592,5,105,0,0,592, + 593,5,102,0,0,593,78,1,0,0,0,594,595,5,103,0,0,595,596,5,111,0,0, + 596,597,5,116,0,0,597,598,5,111,0,0,598,80,1,0,0,0,599,600,5,105, + 0,0,600,601,5,109,0,0,601,602,5,112,0,0,602,603,5,108,0,0,603,604, + 5,101,0,0,604,605,5,109,0,0,605,606,5,101,0,0,606,607,5,110,0,0, + 607,608,5,116,0,0,608,609,5,115,0,0,609,82,1,0,0,0,610,611,5,105, + 0,0,611,612,5,109,0,0,612,613,5,112,0,0,613,614,5,111,0,0,614,615, + 5,114,0,0,615,616,5,116,0,0,616,84,1,0,0,0,617,618,5,105,0,0,618, + 619,5,110,0,0,619,620,5,115,0,0,620,621,5,116,0,0,621,622,5,97,0, + 0,622,623,5,110,0,0,623,624,5,99,0,0,624,625,5,101,0,0,625,626,5, + 111,0,0,626,627,5,102,0,0,627,86,1,0,0,0,628,629,5,105,0,0,629,630, + 5,110,0,0,630,631,5,116,0,0,631,88,1,0,0,0,632,633,5,105,0,0,633, + 634,5,110,0,0,634,635,5,116,0,0,635,636,5,101,0,0,636,637,5,114, + 0,0,637,638,5,102,0,0,638,639,5,97,0,0,639,640,5,99,0,0,640,641, + 5,101,0,0,641,90,1,0,0,0,642,643,5,108,0,0,643,644,5,111,0,0,644, + 645,5,110,0,0,645,646,5,103,0,0,646,92,1,0,0,0,647,648,5,110,0,0, + 648,649,5,97,0,0,649,650,5,116,0,0,650,651,5,105,0,0,651,652,5,118, + 0,0,652,653,5,101,0,0,653,94,1,0,0,0,654,655,5,110,0,0,655,656,5, + 101,0,0,656,657,5,119,0,0,657,96,1,0,0,0,658,659,5,112,0,0,659,660, + 5,97,0,0,660,661,5,99,0,0,661,662,5,107,0,0,662,663,5,97,0,0,663, + 664,5,103,0,0,664,665,5,101,0,0,665,98,1,0,0,0,666,667,5,112,0,0, + 667,668,5,114,0,0,668,669,5,105,0,0,669,670,5,118,0,0,670,671,5, + 97,0,0,671,672,5,116,0,0,672,673,5,101,0,0,673,100,1,0,0,0,674,675, + 5,112,0,0,675,676,5,114,0,0,676,677,5,111,0,0,677,678,5,116,0,0, + 678,679,5,101,0,0,679,680,5,99,0,0,680,681,5,116,0,0,681,682,5,101, + 0,0,682,683,5,100,0,0,683,102,1,0,0,0,684,685,5,112,0,0,685,686, + 5,117,0,0,686,687,5,98,0,0,687,688,5,108,0,0,688,689,5,105,0,0,689, + 690,5,99,0,0,690,104,1,0,0,0,691,692,5,114,0,0,692,693,5,101,0,0, + 693,694,5,116,0,0,694,695,5,117,0,0,695,696,5,114,0,0,696,697,5, + 110,0,0,697,106,1,0,0,0,698,699,5,115,0,0,699,700,5,104,0,0,700, + 701,5,111,0,0,701,702,5,114,0,0,702,703,5,116,0,0,703,108,1,0,0, + 0,704,705,5,115,0,0,705,706,5,116,0,0,706,707,5,97,0,0,707,708,5, + 116,0,0,708,709,5,105,0,0,709,710,5,99,0,0,710,110,1,0,0,0,711,712, + 5,115,0,0,712,713,5,116,0,0,713,714,5,114,0,0,714,715,5,105,0,0, + 715,716,5,99,0,0,716,717,5,116,0,0,717,718,5,102,0,0,718,719,5,112, + 0,0,719,112,1,0,0,0,720,721,5,115,0,0,721,722,5,117,0,0,722,723, + 5,112,0,0,723,724,5,101,0,0,724,725,5,114,0,0,725,114,1,0,0,0,726, + 727,5,115,0,0,727,728,5,119,0,0,728,729,5,105,0,0,729,730,5,116, + 0,0,730,731,5,99,0,0,731,732,5,104,0,0,732,116,1,0,0,0,733,734,5, + 115,0,0,734,735,5,121,0,0,735,736,5,110,0,0,736,737,5,99,0,0,737, + 738,5,104,0,0,738,739,5,114,0,0,739,740,5,111,0,0,740,741,5,110, + 0,0,741,742,5,105,0,0,742,743,5,122,0,0,743,744,5,101,0,0,744,745, + 5,100,0,0,745,118,1,0,0,0,746,747,5,116,0,0,747,748,5,104,0,0,748, + 749,5,105,0,0,749,750,5,115,0,0,750,120,1,0,0,0,751,752,5,116,0, + 0,752,753,5,104,0,0,753,754,5,114,0,0,754,755,5,111,0,0,755,756, + 5,119,0,0,756,122,1,0,0,0,757,758,5,116,0,0,758,759,5,104,0,0,759, + 760,5,114,0,0,760,761,5,111,0,0,761,762,5,119,0,0,762,763,5,115, + 0,0,763,124,1,0,0,0,764,765,5,116,0,0,765,766,5,114,0,0,766,767, + 5,97,0,0,767,768,5,110,0,0,768,769,5,115,0,0,769,770,5,105,0,0,770, + 771,5,101,0,0,771,772,5,110,0,0,772,773,5,116,0,0,773,126,1,0,0, + 0,774,775,5,116,0,0,775,776,5,114,0,0,776,777,5,121,0,0,777,128, + 1,0,0,0,778,779,5,118,0,0,779,780,5,111,0,0,780,781,5,105,0,0,781, + 782,5,100,0,0,782,130,1,0,0,0,783,784,5,118,0,0,784,785,5,111,0, + 0,785,786,5,108,0,0,786,787,5,97,0,0,787,788,5,116,0,0,788,789,5, + 105,0,0,789,790,5,108,0,0,790,791,5,101,0,0,791,132,1,0,0,0,792, + 793,5,119,0,0,793,794,5,104,0,0,794,795,5,105,0,0,795,796,5,108, + 0,0,796,797,5,101,0,0,797,134,1,0,0,0,798,799,5,95,0,0,799,136,1, + 0,0,0,800,805,3,139,69,0,801,805,3,141,70,0,802,805,3,143,71,0,803, + 805,3,145,72,0,804,800,1,0,0,0,804,801,1,0,0,0,804,802,1,0,0,0,804, + 803,1,0,0,0,805,138,1,0,0,0,806,808,3,149,74,0,807,809,3,147,73, + 0,808,807,1,0,0,0,808,809,1,0,0,0,809,140,1,0,0,0,810,812,3,163, + 81,0,811,813,3,147,73,0,812,811,1,0,0,0,812,813,1,0,0,0,813,142, + 1,0,0,0,814,816,3,173,86,0,815,817,3,147,73,0,816,815,1,0,0,0,816, + 817,1,0,0,0,817,144,1,0,0,0,818,820,3,183,91,0,819,821,3,147,73, + 0,820,819,1,0,0,0,820,821,1,0,0,0,821,146,1,0,0,0,822,823,7,0,0, + 0,823,148,1,0,0,0,824,835,5,48,0,0,825,832,3,155,77,0,826,828,3, + 151,75,0,827,826,1,0,0,0,827,828,1,0,0,0,828,833,1,0,0,0,829,830, + 3,161,80,0,830,831,3,151,75,0,831,833,1,0,0,0,832,827,1,0,0,0,832, + 829,1,0,0,0,833,835,1,0,0,0,834,824,1,0,0,0,834,825,1,0,0,0,835, + 150,1,0,0,0,836,841,3,153,76,0,837,839,3,157,78,0,838,837,1,0,0, + 0,838,839,1,0,0,0,839,840,1,0,0,0,840,842,3,153,76,0,841,838,1,0, + 0,0,841,842,1,0,0,0,842,152,1,0,0,0,843,846,5,48,0,0,844,846,3,155, + 77,0,845,843,1,0,0,0,845,844,1,0,0,0,846,154,1,0,0,0,847,848,7,1, + 0,0,848,156,1,0,0,0,849,851,3,159,79,0,850,849,1,0,0,0,851,852,1, + 0,0,0,852,850,1,0,0,0,852,853,1,0,0,0,853,158,1,0,0,0,854,857,3, + 153,76,0,855,857,5,95,0,0,856,854,1,0,0,0,856,855,1,0,0,0,857,160, + 1,0,0,0,858,860,5,95,0,0,859,858,1,0,0,0,860,861,1,0,0,0,861,859, + 1,0,0,0,861,862,1,0,0,0,862,162,1,0,0,0,863,864,5,48,0,0,864,865, + 7,2,0,0,865,866,3,165,82,0,866,164,1,0,0,0,867,872,3,167,83,0,868, + 870,3,169,84,0,869,868,1,0,0,0,869,870,1,0,0,0,870,871,1,0,0,0,871, + 873,3,167,83,0,872,869,1,0,0,0,872,873,1,0,0,0,873,166,1,0,0,0,874, + 875,7,3,0,0,875,168,1,0,0,0,876,878,3,171,85,0,877,876,1,0,0,0,878, + 879,1,0,0,0,879,877,1,0,0,0,879,880,1,0,0,0,880,170,1,0,0,0,881, + 884,3,167,83,0,882,884,5,95,0,0,883,881,1,0,0,0,883,882,1,0,0,0, + 884,172,1,0,0,0,885,887,5,48,0,0,886,888,3,161,80,0,887,886,1,0, + 0,0,887,888,1,0,0,0,888,889,1,0,0,0,889,890,3,175,87,0,890,174,1, + 0,0,0,891,896,3,177,88,0,892,894,3,179,89,0,893,892,1,0,0,0,893, + 894,1,0,0,0,894,895,1,0,0,0,895,897,3,177,88,0,896,893,1,0,0,0,896, + 897,1,0,0,0,897,176,1,0,0,0,898,899,7,4,0,0,899,178,1,0,0,0,900, + 902,3,181,90,0,901,900,1,0,0,0,902,903,1,0,0,0,903,901,1,0,0,0,903, + 904,1,0,0,0,904,180,1,0,0,0,905,908,3,177,88,0,906,908,5,95,0,0, + 907,905,1,0,0,0,907,906,1,0,0,0,908,182,1,0,0,0,909,910,5,48,0,0, + 910,911,7,5,0,0,911,912,3,185,92,0,912,184,1,0,0,0,913,918,3,187, + 93,0,914,916,3,189,94,0,915,914,1,0,0,0,915,916,1,0,0,0,916,917, + 1,0,0,0,917,919,3,187,93,0,918,915,1,0,0,0,918,919,1,0,0,0,919,186, + 1,0,0,0,920,921,7,6,0,0,921,188,1,0,0,0,922,924,3,191,95,0,923,922, + 1,0,0,0,924,925,1,0,0,0,925,923,1,0,0,0,925,926,1,0,0,0,926,190, + 1,0,0,0,927,930,3,187,93,0,928,930,5,95,0,0,929,927,1,0,0,0,929, + 928,1,0,0,0,930,192,1,0,0,0,931,934,3,195,97,0,932,934,3,207,103, + 0,933,931,1,0,0,0,933,932,1,0,0,0,934,194,1,0,0,0,935,936,3,151, + 75,0,936,938,5,46,0,0,937,939,3,151,75,0,938,937,1,0,0,0,938,939, + 1,0,0,0,939,941,1,0,0,0,940,942,3,197,98,0,941,940,1,0,0,0,941,942, + 1,0,0,0,942,944,1,0,0,0,943,945,3,205,102,0,944,943,1,0,0,0,944, + 945,1,0,0,0,945,963,1,0,0,0,946,947,5,46,0,0,947,949,3,151,75,0, + 948,950,3,197,98,0,949,948,1,0,0,0,949,950,1,0,0,0,950,952,1,0,0, + 0,951,953,3,205,102,0,952,951,1,0,0,0,952,953,1,0,0,0,953,963,1, + 0,0,0,954,955,3,151,75,0,955,957,3,197,98,0,956,958,3,205,102,0, + 957,956,1,0,0,0,957,958,1,0,0,0,958,963,1,0,0,0,959,960,3,151,75, + 0,960,961,3,205,102,0,961,963,1,0,0,0,962,935,1,0,0,0,962,946,1, + 0,0,0,962,954,1,0,0,0,962,959,1,0,0,0,963,196,1,0,0,0,964,965,3, + 199,99,0,965,966,3,201,100,0,966,198,1,0,0,0,967,968,7,7,0,0,968, + 200,1,0,0,0,969,971,3,203,101,0,970,969,1,0,0,0,970,971,1,0,0,0, + 971,972,1,0,0,0,972,973,3,151,75,0,973,202,1,0,0,0,974,975,7,8,0, + 0,975,204,1,0,0,0,976,977,7,9,0,0,977,206,1,0,0,0,978,979,3,209, + 104,0,979,981,3,211,105,0,980,982,3,205,102,0,981,980,1,0,0,0,981, + 982,1,0,0,0,982,208,1,0,0,0,983,985,3,163,81,0,984,986,5,46,0,0, + 985,984,1,0,0,0,985,986,1,0,0,0,986,995,1,0,0,0,987,988,5,48,0,0, + 988,990,7,2,0,0,989,991,3,165,82,0,990,989,1,0,0,0,990,991,1,0,0, + 0,991,992,1,0,0,0,992,993,5,46,0,0,993,995,3,165,82,0,994,983,1, + 0,0,0,994,987,1,0,0,0,995,210,1,0,0,0,996,997,3,213,106,0,997,998, + 3,201,100,0,998,212,1,0,0,0,999,1000,7,10,0,0,1000,214,1,0,0,0,1001, + 1002,5,116,0,0,1002,1003,5,114,0,0,1003,1004,5,117,0,0,1004,1011, + 5,101,0,0,1005,1006,5,102,0,0,1006,1007,5,97,0,0,1007,1008,5,108, + 0,0,1008,1009,5,115,0,0,1009,1011,5,101,0,0,1010,1001,1,0,0,0,1010, + 1005,1,0,0,0,1011,216,1,0,0,0,1012,1013,5,39,0,0,1013,1014,3,219, + 109,0,1014,1015,5,39,0,0,1015,1021,1,0,0,0,1016,1017,5,39,0,0,1017, + 1018,3,229,114,0,1018,1019,5,39,0,0,1019,1021,1,0,0,0,1020,1012, + 1,0,0,0,1020,1016,1,0,0,0,1021,218,1,0,0,0,1022,1023,8,11,0,0,1023, + 220,1,0,0,0,1024,1026,5,34,0,0,1025,1027,3,223,111,0,1026,1025,1, + 0,0,0,1026,1027,1,0,0,0,1027,1028,1,0,0,0,1028,1029,5,34,0,0,1029, + 222,1,0,0,0,1030,1032,3,225,112,0,1031,1030,1,0,0,0,1032,1033,1, + 0,0,0,1033,1031,1,0,0,0,1033,1034,1,0,0,0,1034,224,1,0,0,0,1035, + 1038,8,12,0,0,1036,1038,3,229,114,0,1037,1035,1,0,0,0,1037,1036, + 1,0,0,0,1038,226,1,0,0,0,1039,1040,5,34,0,0,1040,1041,5,34,0,0,1041, + 1042,5,34,0,0,1042,1046,1,0,0,0,1043,1045,7,13,0,0,1044,1043,1,0, + 0,0,1045,1048,1,0,0,0,1046,1044,1,0,0,0,1046,1047,1,0,0,0,1047,1049, + 1,0,0,0,1048,1046,1,0,0,0,1049,1053,7,14,0,0,1050,1052,7,15,0,0, + 1051,1050,1,0,0,0,1052,1055,1,0,0,0,1053,1051,1,0,0,0,1053,1054, + 1,0,0,0,1054,1056,1,0,0,0,1055,1053,1,0,0,0,1056,1057,5,34,0,0,1057, + 1058,5,34,0,0,1058,1059,5,34,0,0,1059,228,1,0,0,0,1060,1061,5,92, + 0,0,1061,1065,7,16,0,0,1062,1065,3,231,115,0,1063,1065,3,235,117, + 0,1064,1060,1,0,0,0,1064,1062,1,0,0,0,1064,1063,1,0,0,0,1065,230, + 1,0,0,0,1066,1067,5,92,0,0,1067,1078,3,177,88,0,1068,1069,5,92,0, + 0,1069,1070,3,177,88,0,1070,1071,3,177,88,0,1071,1078,1,0,0,0,1072, + 1073,5,92,0,0,1073,1074,3,233,116,0,1074,1075,3,177,88,0,1075,1076, + 3,177,88,0,1076,1078,1,0,0,0,1077,1066,1,0,0,0,1077,1068,1,0,0,0, + 1077,1072,1,0,0,0,1078,232,1,0,0,0,1079,1080,7,17,0,0,1080,234,1, + 0,0,0,1081,1083,5,92,0,0,1082,1084,5,117,0,0,1083,1082,1,0,0,0,1084, + 1085,1,0,0,0,1085,1083,1,0,0,0,1085,1086,1,0,0,0,1086,1087,1,0,0, + 0,1087,1088,3,167,83,0,1088,1089,3,167,83,0,1089,1090,3,167,83,0, + 1090,1091,3,167,83,0,1091,236,1,0,0,0,1092,1093,5,110,0,0,1093,1094, + 5,117,0,0,1094,1095,5,108,0,0,1095,1096,5,108,0,0,1096,238,1,0,0, + 0,1097,1098,5,40,0,0,1098,240,1,0,0,0,1099,1100,5,41,0,0,1100,242, + 1,0,0,0,1101,1102,5,123,0,0,1102,244,1,0,0,0,1103,1104,5,125,0,0, + 1104,246,1,0,0,0,1105,1106,5,91,0,0,1106,248,1,0,0,0,1107,1108,5, + 93,0,0,1108,250,1,0,0,0,1109,1110,5,59,0,0,1110,252,1,0,0,0,1111, + 1112,5,44,0,0,1112,254,1,0,0,0,1113,1114,5,46,0,0,1114,256,1,0,0, + 0,1115,1116,5,46,0,0,1116,1117,5,46,0,0,1117,1118,5,46,0,0,1118, + 258,1,0,0,0,1119,1120,5,64,0,0,1120,260,1,0,0,0,1121,1122,5,58,0, + 0,1122,1123,5,58,0,0,1123,262,1,0,0,0,1124,1125,5,61,0,0,1125,264, + 1,0,0,0,1126,1127,5,62,0,0,1127,266,1,0,0,0,1128,1129,5,60,0,0,1129, + 268,1,0,0,0,1130,1131,5,33,0,0,1131,270,1,0,0,0,1132,1133,5,126, + 0,0,1133,272,1,0,0,0,1134,1135,5,63,0,0,1135,274,1,0,0,0,1136,1137, + 5,58,0,0,1137,276,1,0,0,0,1138,1139,5,45,0,0,1139,1140,5,62,0,0, + 1140,278,1,0,0,0,1141,1142,5,61,0,0,1142,1143,5,61,0,0,1143,280, + 1,0,0,0,1144,1145,5,60,0,0,1145,1146,5,61,0,0,1146,282,1,0,0,0,1147, + 1148,5,62,0,0,1148,1149,5,61,0,0,1149,284,1,0,0,0,1150,1151,5,33, + 0,0,1151,1152,5,61,0,0,1152,286,1,0,0,0,1153,1154,5,38,0,0,1154, + 1155,5,38,0,0,1155,288,1,0,0,0,1156,1157,5,124,0,0,1157,1158,5,124, + 0,0,1158,290,1,0,0,0,1159,1160,5,43,0,0,1160,1161,5,43,0,0,1161, + 292,1,0,0,0,1162,1163,5,45,0,0,1163,1164,5,45,0,0,1164,294,1,0,0, + 0,1165,1166,5,43,0,0,1166,296,1,0,0,0,1167,1168,5,45,0,0,1168,298, + 1,0,0,0,1169,1170,5,42,0,0,1170,300,1,0,0,0,1171,1172,5,47,0,0,1172, + 302,1,0,0,0,1173,1174,5,38,0,0,1174,304,1,0,0,0,1175,1176,5,124, + 0,0,1176,306,1,0,0,0,1177,1178,5,94,0,0,1178,308,1,0,0,0,1179,1180, + 5,37,0,0,1180,310,1,0,0,0,1181,1182,5,43,0,0,1182,1183,5,61,0,0, + 1183,312,1,0,0,0,1184,1185,5,45,0,0,1185,1186,5,61,0,0,1186,314, + 1,0,0,0,1187,1188,5,42,0,0,1188,1189,5,61,0,0,1189,316,1,0,0,0,1190, + 1191,5,47,0,0,1191,1192,5,61,0,0,1192,318,1,0,0,0,1193,1194,5,38, + 0,0,1194,1195,5,61,0,0,1195,320,1,0,0,0,1196,1197,5,124,0,0,1197, + 1198,5,61,0,0,1198,322,1,0,0,0,1199,1200,5,94,0,0,1200,1201,5,61, + 0,0,1201,324,1,0,0,0,1202,1203,5,37,0,0,1203,1204,5,61,0,0,1204, + 326,1,0,0,0,1205,1206,5,60,0,0,1206,1207,5,60,0,0,1207,1208,5,61, + 0,0,1208,328,1,0,0,0,1209,1210,5,62,0,0,1210,1211,5,62,0,0,1211, + 1212,5,61,0,0,1212,330,1,0,0,0,1213,1214,5,62,0,0,1214,1215,5,62, + 0,0,1215,1216,5,62,0,0,1216,1217,5,61,0,0,1217,332,1,0,0,0,1218, + 1222,3,335,167,0,1219,1221,3,337,168,0,1220,1219,1,0,0,0,1221,1224, + 1,0,0,0,1222,1220,1,0,0,0,1222,1223,1,0,0,0,1223,334,1,0,0,0,1224, + 1222,1,0,0,0,1225,1227,7,18,0,0,1226,1225,1,0,0,0,1227,336,1,0,0, + 0,1228,1231,3,335,167,0,1229,1231,7,19,0,0,1230,1228,1,0,0,0,1230, + 1229,1,0,0,0,1231,338,1,0,0,0,1232,1233,7,20,0,0,1233,1234,1,0,0, + 0,1234,1235,6,169,0,0,1235,340,1,0,0,0,1236,1237,5,47,0,0,1237,1238, + 5,42,0,0,1238,1242,1,0,0,0,1239,1241,9,0,0,0,1240,1239,1,0,0,0,1241, + 1244,1,0,0,0,1242,1243,1,0,0,0,1242,1240,1,0,0,0,1243,1245,1,0,0, + 0,1244,1242,1,0,0,0,1245,1246,5,42,0,0,1246,1247,5,47,0,0,1247,1248, + 1,0,0,0,1248,1249,6,170,0,0,1249,342,1,0,0,0,1250,1251,5,47,0,0, + 1251,1252,5,47,0,0,1252,1256,1,0,0,0,1253,1255,8,14,0,0,1254,1253, + 1,0,0,0,1255,1258,1,0,0,0,1256,1254,1,0,0,0,1256,1257,1,0,0,0,1257, + 1259,1,0,0,0,1258,1256,1,0,0,0,1259,1260,6,171,0,0,1260,344,1,0, + 0,0,56,0,804,808,812,816,820,827,832,834,838,841,845,852,856,861, + 869,872,879,883,887,893,896,903,907,915,918,925,929,933,938,941, + 944,949,952,957,962,970,981,985,990,994,1010,1020,1026,1033,1037, + 1046,1053,1064,1077,1085,1222,1226,1230,1242,1256,1,0,1,0 + ] + +class JavaLexer(Lexer): + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + EXPORTS = 1 + MODULE = 2 + NONSEALED = 3 + OACA = 4 + OPEN = 5 + OPENS = 6 + PERMITS = 7 + PROVIDES = 8 + RECORD = 9 + REQUIRES = 10 + SEALED = 11 + TO = 12 + TRANSITIVE = 13 + USES = 14 + VAR = 15 + WITH = 16 + YIELD = 17 + ABSTRACT = 18 + ASSERT = 19 + BOOLEAN = 20 + BREAK = 21 + BYTE = 22 + CASE = 23 + CATCH = 24 + CHAR = 25 + CLASS = 26 + CONST = 27 + CONTINUE = 28 + DEFAULT = 29 + DO = 30 + DOUBLE = 31 + ELSE = 32 + ENUM = 33 + EXTENDS = 34 + FINAL = 35 + FINALLY = 36 + FLOAT = 37 + FOR = 38 + IF = 39 + GOTO = 40 + IMPLEMENTS = 41 + IMPORT = 42 + INSTANCEOF = 43 + INT = 44 + INTERFACE = 45 + LONG = 46 + NATIVE = 47 + NEW = 48 + PACKAGE = 49 + PRIVATE = 50 + PROTECTED = 51 + PUBLIC = 52 + RETURN = 53 + SHORT = 54 + STATIC = 55 + STRICTFP = 56 + SUPER = 57 + SWITCH = 58 + SYNCHRONIZED = 59 + THIS = 60 + THROW = 61 + THROWS = 62 + TRANSIENT = 63 + TRY = 64 + VOID = 65 + VOLATILE = 66 + WHILE = 67 + UNDER_SCORE = 68 + IntegerLiteral = 69 + FloatingPointLiteral = 70 + BooleanLiteral = 71 + CharacterLiteral = 72 + StringLiteral = 73 + TextBlock = 74 + NullLiteral = 75 + LPAREN = 76 + RPAREN = 77 + LBRACE = 78 + RBRACE = 79 + LBRACK = 80 + RBRACK = 81 + SEMI = 82 + COMMA = 83 + DOT = 84 + ELLIPSIS = 85 + AT = 86 + COLONCOLON = 87 + ASSIGN = 88 + GT = 89 + LT = 90 + BANG = 91 + TILDE = 92 + QUESTION = 93 + COLON = 94 + ARROW = 95 + EQUAL = 96 + LE = 97 + GE = 98 + NOTEQUAL = 99 + AND = 100 + OR = 101 + INC = 102 + DEC = 103 + ADD = 104 + SUB = 105 + MUL = 106 + DIV = 107 + BITAND = 108 + BITOR = 109 + CARET = 110 + MOD = 111 + ADD_ASSIGN = 112 + SUB_ASSIGN = 113 + MUL_ASSIGN = 114 + DIV_ASSIGN = 115 + AND_ASSIGN = 116 + OR_ASSIGN = 117 + XOR_ASSIGN = 118 + MOD_ASSIGN = 119 + LSHIFT_ASSIGN = 120 + RSHIFT_ASSIGN = 121 + URSHIFT_ASSIGN = 122 + Identifier = 123 + WS = 124 + COMMENT = 125 + LINE_COMMENT = 126 + + channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] + + modeNames = [ "DEFAULT_MODE" ] + + literalNames = [ "", + "'exports'", "'module'", "'non-sealed'", "'<>'", "'open'", "'opens'", + "'permits'", "'provides'", "'record'", "'requires'", "'sealed'", + "'to'", "'transitive'", "'uses'", "'var'", "'with'", "'yield'", + "'abstract'", "'assert'", "'boolean'", "'break'", "'byte'", + "'case'", "'catch'", "'char'", "'class'", "'const'", "'continue'", + "'default'", "'do'", "'double'", "'else'", "'enum'", "'extends'", + "'final'", "'finally'", "'float'", "'for'", "'if'", "'goto'", + "'implements'", "'import'", "'instanceof'", "'int'", "'interface'", + "'long'", "'native'", "'new'", "'package'", "'private'", "'protected'", + "'public'", "'return'", "'short'", "'static'", "'strictfp'", + "'super'", "'switch'", "'synchronized'", "'this'", "'throw'", + "'throws'", "'transient'", "'try'", "'void'", "'volatile'", + "'while'", "'_'", "'null'", "'('", "')'", "'{'", "'}'", "'['", + "']'", "';'", "','", "'.'", "'...'", "'@'", "'::'", "'='", "'>'", + "'<'", "'!'", "'~'", "'?'", "':'", "'->'", "'=='", "'<='", "'>='", + "'!='", "'&&'", "'||'", "'++'", "'--'", "'+'", "'-'", "'*'", + "'/'", "'&'", "'|'", "'^'", "'%'", "'+='", "'-='", "'*='", "'/='", + "'&='", "'|='", "'^='", "'%='", "'<<='", "'>>='", "'>>>='" ] + + symbolicNames = [ "", + "EXPORTS", "MODULE", "NONSEALED", "OACA", "OPEN", "OPENS", "PERMITS", + "PROVIDES", "RECORD", "REQUIRES", "SEALED", "TO", "TRANSITIVE", + "USES", "VAR", "WITH", "YIELD", "ABSTRACT", "ASSERT", "BOOLEAN", + "BREAK", "BYTE", "CASE", "CATCH", "CHAR", "CLASS", "CONST", + "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", "ENUM", "EXTENDS", + "FINAL", "FINALLY", "FLOAT", "FOR", "IF", "GOTO", "IMPLEMENTS", + "IMPORT", "INSTANCEOF", "INT", "INTERFACE", "LONG", "NATIVE", + "NEW", "PACKAGE", "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", + "SHORT", "STATIC", "STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", + "THIS", "THROW", "THROWS", "TRANSIENT", "TRY", "VOID", "VOLATILE", + "WHILE", "UNDER_SCORE", "IntegerLiteral", "FloatingPointLiteral", + "BooleanLiteral", "CharacterLiteral", "StringLiteral", "TextBlock", + "NullLiteral", "LPAREN", "RPAREN", "LBRACE", "RBRACE", "LBRACK", + "RBRACK", "SEMI", "COMMA", "DOT", "ELLIPSIS", "AT", "COLONCOLON", + "ASSIGN", "GT", "LT", "BANG", "TILDE", "QUESTION", "COLON", + "ARROW", "EQUAL", "LE", "GE", "NOTEQUAL", "AND", "OR", "INC", + "DEC", "ADD", "SUB", "MUL", "DIV", "BITAND", "BITOR", "CARET", + "MOD", "ADD_ASSIGN", "SUB_ASSIGN", "MUL_ASSIGN", "DIV_ASSIGN", + "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN", "MOD_ASSIGN", "LSHIFT_ASSIGN", + "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "Identifier", "WS", "COMMENT", + "LINE_COMMENT" ] + + ruleNames = [ "EXPORTS", "MODULE", "NONSEALED", "OACA", "OPEN", "OPENS", + "PERMITS", "PROVIDES", "RECORD", "REQUIRES", "SEALED", + "TO", "TRANSITIVE", "USES", "VAR", "WITH", "YIELD", "ABSTRACT", + "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH", + "CHAR", "CLASS", "CONST", "CONTINUE", "DEFAULT", "DO", + "DOUBLE", "ELSE", "ENUM", "EXTENDS", "FINAL", "FINALLY", + "FLOAT", "FOR", "IF", "GOTO", "IMPLEMENTS", "IMPORT", + "INSTANCEOF", "INT", "INTERFACE", "LONG", "NATIVE", "NEW", + "PACKAGE", "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", + "SHORT", "STATIC", "STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", + "THIS", "THROW", "THROWS", "TRANSIENT", "TRY", "VOID", + "VOLATILE", "WHILE", "UNDER_SCORE", "IntegerLiteral", + "DecimalIntegerLiteral", "HexIntegerLiteral", "OctalIntegerLiteral", + "BinaryIntegerLiteral", "IntegerTypeSuffix", "DecimalNumeral", + "Digits", "Digit", "NonZeroDigit", "DigitsAndUnderscores", + "DigitOrUnderscore", "Underscores", "HexNumeral", "HexDigits", + "HexDigit", "HexDigitsAndUnderscores", "HexDigitOrUnderscore", + "OctalNumeral", "OctalDigits", "OctalDigit", "OctalDigitsAndUnderscores", + "OctalDigitOrUnderscore", "BinaryNumeral", "BinaryDigits", + "BinaryDigit", "BinaryDigitsAndUnderscores", "BinaryDigitOrUnderscore", + "FloatingPointLiteral", "DecimalFloatingPointLiteral", + "ExponentPart", "ExponentIndicator", "SignedInteger", + "Sign", "FloatTypeSuffix", "HexadecimalFloatingPointLiteral", + "HexSignificand", "BinaryExponent", "BinaryExponentIndicator", + "BooleanLiteral", "CharacterLiteral", "SingleCharacter", + "StringLiteral", "StringCharacters", "StringCharacter", + "TextBlock", "EscapeSequence", "OctalEscape", "ZeroToThree", + "UnicodeEscape", "NullLiteral", "LPAREN", "RPAREN", "LBRACE", + "RBRACE", "LBRACK", "RBRACK", "SEMI", "COMMA", "DOT", + "ELLIPSIS", "AT", "COLONCOLON", "ASSIGN", "GT", "LT", + "BANG", "TILDE", "QUESTION", "COLON", "ARROW", "EQUAL", + "LE", "GE", "NOTEQUAL", "AND", "OR", "INC", "DEC", "ADD", + "SUB", "MUL", "DIV", "BITAND", "BITOR", "CARET", "MOD", + "ADD_ASSIGN", "SUB_ASSIGN", "MUL_ASSIGN", "DIV_ASSIGN", + "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN", "MOD_ASSIGN", + "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "Identifier", + "IdentifierStart", "IdentifierPart", "WS", "COMMENT", + "LINE_COMMENT" ] + + grammarFileName = "JavaLexer.g4" + + def __init__(self, input=None, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.1") + self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) + self._actions = None + self._predicates = None + + diff --git a/cfg_generator/src/antlr/gen/JavaLexer.tokens b/cfg_generator/src/antlr/gen/JavaLexer.tokens new file mode 100644 index 00000000..891a5f22 --- /dev/null +++ b/cfg_generator/src/antlr/gen/JavaLexer.tokens @@ -0,0 +1,242 @@ +EXPORTS=1 +MODULE=2 +NONSEALED=3 +OACA=4 +OPEN=5 +OPENS=6 +PERMITS=7 +PROVIDES=8 +RECORD=9 +REQUIRES=10 +SEALED=11 +TO=12 +TRANSITIVE=13 +USES=14 +VAR=15 +WITH=16 +YIELD=17 +ABSTRACT=18 +ASSERT=19 +BOOLEAN=20 +BREAK=21 +BYTE=22 +CASE=23 +CATCH=24 +CHAR=25 +CLASS=26 +CONST=27 +CONTINUE=28 +DEFAULT=29 +DO=30 +DOUBLE=31 +ELSE=32 +ENUM=33 +EXTENDS=34 +FINAL=35 +FINALLY=36 +FLOAT=37 +FOR=38 +IF=39 +GOTO=40 +IMPLEMENTS=41 +IMPORT=42 +INSTANCEOF=43 +INT=44 +INTERFACE=45 +LONG=46 +NATIVE=47 +NEW=48 +PACKAGE=49 +PRIVATE=50 +PROTECTED=51 +PUBLIC=52 +RETURN=53 +SHORT=54 +STATIC=55 +STRICTFP=56 +SUPER=57 +SWITCH=58 +SYNCHRONIZED=59 +THIS=60 +THROW=61 +THROWS=62 +TRANSIENT=63 +TRY=64 +VOID=65 +VOLATILE=66 +WHILE=67 +UNDER_SCORE=68 +IntegerLiteral=69 +FloatingPointLiteral=70 +BooleanLiteral=71 +CharacterLiteral=72 +StringLiteral=73 +TextBlock=74 +NullLiteral=75 +LPAREN=76 +RPAREN=77 +LBRACE=78 +RBRACE=79 +LBRACK=80 +RBRACK=81 +SEMI=82 +COMMA=83 +DOT=84 +ELLIPSIS=85 +AT=86 +COLONCOLON=87 +ASSIGN=88 +GT=89 +LT=90 +BANG=91 +TILDE=92 +QUESTION=93 +COLON=94 +ARROW=95 +EQUAL=96 +LE=97 +GE=98 +NOTEQUAL=99 +AND=100 +OR=101 +INC=102 +DEC=103 +ADD=104 +SUB=105 +MUL=106 +DIV=107 +BITAND=108 +BITOR=109 +CARET=110 +MOD=111 +ADD_ASSIGN=112 +SUB_ASSIGN=113 +MUL_ASSIGN=114 +DIV_ASSIGN=115 +AND_ASSIGN=116 +OR_ASSIGN=117 +XOR_ASSIGN=118 +MOD_ASSIGN=119 +LSHIFT_ASSIGN=120 +RSHIFT_ASSIGN=121 +URSHIFT_ASSIGN=122 +Identifier=123 +WS=124 +COMMENT=125 +LINE_COMMENT=126 +'exports'=1 +'module'=2 +'non-sealed'=3 +'<>'=4 +'open'=5 +'opens'=6 +'permits'=7 +'provides'=8 +'record'=9 +'requires'=10 +'sealed'=11 +'to'=12 +'transitive'=13 +'uses'=14 +'var'=15 +'with'=16 +'yield'=17 +'abstract'=18 +'assert'=19 +'boolean'=20 +'break'=21 +'byte'=22 +'case'=23 +'catch'=24 +'char'=25 +'class'=26 +'const'=27 +'continue'=28 +'default'=29 +'do'=30 +'double'=31 +'else'=32 +'enum'=33 +'extends'=34 +'final'=35 +'finally'=36 +'float'=37 +'for'=38 +'if'=39 +'goto'=40 +'implements'=41 +'import'=42 +'instanceof'=43 +'int'=44 +'interface'=45 +'long'=46 +'native'=47 +'new'=48 +'package'=49 +'private'=50 +'protected'=51 +'public'=52 +'return'=53 +'short'=54 +'static'=55 +'strictfp'=56 +'super'=57 +'switch'=58 +'synchronized'=59 +'this'=60 +'throw'=61 +'throws'=62 +'transient'=63 +'try'=64 +'void'=65 +'volatile'=66 +'while'=67 +'_'=68 +'null'=75 +'('=76 +')'=77 +'{'=78 +'}'=79 +'['=80 +']'=81 +';'=82 +','=83 +'.'=84 +'...'=85 +'@'=86 +'::'=87 +'='=88 +'>'=89 +'<'=90 +'!'=91 +'~'=92 +'?'=93 +':'=94 +'->'=95 +'=='=96 +'<='=97 +'>='=98 +'!='=99 +'&&'=100 +'||'=101 +'++'=102 +'--'=103 +'+'=104 +'-'=105 +'*'=106 +'/'=107 +'&'=108 +'|'=109 +'^'=110 +'%'=111 +'+='=112 +'-='=113 +'*='=114 +'/='=115 +'&='=116 +'|='=117 +'^='=118 +'%='=119 +'<<='=120 +'>>='=121 +'>>>='=122 diff --git a/cfg_generator/src/antlr/gen/JavaParser.interp b/cfg_generator/src/antlr/gen/JavaParser.interp new file mode 100644 index 00000000..4a770078 --- /dev/null +++ b/cfg_generator/src/antlr/gen/JavaParser.interp @@ -0,0 +1,508 @@ +token literal names: +null +'exports' +'module' +'non-sealed' +'<>' +'open' +'opens' +'permits' +'provides' +'record' +'requires' +'sealed' +'to' +'transitive' +'uses' +'var' +'with' +'yield' +'abstract' +'assert' +'boolean' +'break' +'byte' +'case' +'catch' +'char' +'class' +'const' +'continue' +'default' +'do' +'double' +'else' +'enum' +'extends' +'final' +'finally' +'float' +'for' +'if' +'goto' +'implements' +'import' +'instanceof' +'int' +'interface' +'long' +'native' +'new' +'package' +'private' +'protected' +'public' +'return' +'short' +'static' +'strictfp' +'super' +'switch' +'synchronized' +'this' +'throw' +'throws' +'transient' +'try' +'void' +'volatile' +'while' +'_' +null +null +null +null +null +null +'null' +'(' +')' +'{' +'}' +'[' +']' +';' +',' +'.' +'...' +'@' +'::' +'=' +'>' +'<' +'!' +'~' +'?' +':' +'->' +'==' +'<=' +'>=' +'!=' +'&&' +'||' +'++' +'--' +'+' +'-' +'*' +'/' +'&' +'|' +'^' +'%' +'+=' +'-=' +'*=' +'/=' +'&=' +'|=' +'^=' +'%=' +'<<=' +'>>=' +'>>>=' +null +null +null +null + +token symbolic names: +null +EXPORTS +MODULE +NONSEALED +OACA +OPEN +OPENS +PERMITS +PROVIDES +RECORD +REQUIRES +SEALED +TO +TRANSITIVE +USES +VAR +WITH +YIELD +ABSTRACT +ASSERT +BOOLEAN +BREAK +BYTE +CASE +CATCH +CHAR +CLASS +CONST +CONTINUE +DEFAULT +DO +DOUBLE +ELSE +ENUM +EXTENDS +FINAL +FINALLY +FLOAT +FOR +IF +GOTO +IMPLEMENTS +IMPORT +INSTANCEOF +INT +INTERFACE +LONG +NATIVE +NEW +PACKAGE +PRIVATE +PROTECTED +PUBLIC +RETURN +SHORT +STATIC +STRICTFP +SUPER +SWITCH +SYNCHRONIZED +THIS +THROW +THROWS +TRANSIENT +TRY +VOID +VOLATILE +WHILE +UNDER_SCORE +IntegerLiteral +FloatingPointLiteral +BooleanLiteral +CharacterLiteral +StringLiteral +TextBlock +NullLiteral +LPAREN +RPAREN +LBRACE +RBRACE +LBRACK +RBRACK +SEMI +COMMA +DOT +ELLIPSIS +AT +COLONCOLON +ASSIGN +GT +LT +BANG +TILDE +QUESTION +COLON +ARROW +EQUAL +LE +GE +NOTEQUAL +AND +OR +INC +DEC +ADD +SUB +MUL +DIV +BITAND +BITOR +CARET +MOD +ADD_ASSIGN +SUB_ASSIGN +MUL_ASSIGN +DIV_ASSIGN +AND_ASSIGN +OR_ASSIGN +XOR_ASSIGN +MOD_ASSIGN +LSHIFT_ASSIGN +RSHIFT_ASSIGN +URSHIFT_ASSIGN +Identifier +WS +COMMENT +LINE_COMMENT + +rule names: +start_ +literal +typeIdentifier +unqualifiedMethodIdentifier +primitiveType +numericType +integralType +floatingPointType +referenceType +coit +classOrInterfaceType +classType +interfaceType +typeVariable +arrayType +dims +typeParameter +typeParameterModifier +typeBound +additionalBound +typeArguments +typeArgumentList +typeArgument +wildcard +wildcardBounds +moduleName +packageName +typeName +packageOrTypeName +expressionName +methodName +ambiguousName +compilationUnit +ordinaryCompilationUnit +modularCompilationUnit +packageDeclaration +packageModifier +importDeclaration +singleTypeImportDeclaration +typeImportOnDemandDeclaration +singleStaticImportDeclaration +staticImportOnDemandDeclaration +topLevelClassOrInterfaceDeclaration +moduleDeclaration +moduleDirective +requiresModifier +classDeclaration +normalClassDeclaration +classModifier +typeParameters +typeParameterList +classExtends +classImplements +interfaceTypeList +classPermits +classBody +classBodyDeclaration +classMemberDeclaration +fieldDeclaration +fieldModifier +variableDeclaratorList +variableDeclarator +variableDeclaratorId +variableInitializer +unannType +unannPrimitiveType +unannReferenceType +unannClassOrInterfaceType +uCOIT +unannClassType +unannInterfaceType +unannTypeVariable +unannArrayType +methodDeclaration +methodModifier +methodHeader +result +methodDeclarator +receiverParameter +formalParameterList +formalParameter +variableArityParameter +variableModifier +throwsT +exceptionTypeList +exceptionType +methodBody +instanceInitializer +staticInitializer +constructorDeclaration +constructorModifier +constructorDeclarator +simpleTypeName +constructorBody +explicitConstructorInvocation +enumDeclaration +enumBody +enumConstantList +enumConstant +enumConstantModifier +enumBodyDeclarations +recordDeclaration +recordHeader +recordComponentList +recordComponent +variableArityRecordComponent +recordComponentModifier +recordBody +recordBodyDeclaration +compactConstructorDeclaration +interfaceDeclaration +normalInterfaceDeclaration +interfaceModifier +interfaceExtends +interfacePermits +interfaceBody +interfaceMemberDeclaration +constantDeclaration +constantModifier +interfaceMethodDeclaration +interfaceMethodModifier +annotationInterfaceDeclaration +annotationInterfaceBody +annotationInterfaceMemberDeclaration +annotationInterfaceElementDeclaration +annotationInterfaceElementModifier +defaultValue +annotation +normalAnnotation +elementValuePairList +elementValuePair +elementValue +elementValueArrayInitializer +elementValueList +markerAnnotation +singleElementAnnotation +arrayInitializer +variableInitializerList +block +blockStatements +blockStatement +localClassOrInterfaceDeclaration +localVariableDeclaration +localVariableType +localVariableDeclarationStatement +statement +statementNoShortIf +statementWithoutTrailingSubstatement +emptyStatement_ +labeledStatement +labeledStatementNoShortIf +expressionStatement +statementExpression +ifThenStatement +ifThenElseStatement +ifThenElseStatementNoShortIf +assertStatement +switchStatement +switchBlock +switchRule +switchBlockStatementGroup +switchLabel +caseConstant +whileStatement +whileStatementNoShortIf +doStatement +forStatement +forStatementNoShortIf +basicForStatement +basicForStatementNoShortIf +forInit +forUpdate +statementExpressionList +enhancedForStatement +enhancedForStatementNoShortIf +breakStatement +continueStatement +returnStatement +throwStatement +synchronizedStatement +tryStatement +catches +catchClause +catchFormalParameter +catchType +finallyBlock +tryWithResourcesStatement +resourceSpecification +resourceList +resource +variableAccess +yieldStatement +pattern +typePattern +expression +primary +primaryNoNewArray +pNNA +classLiteral +classInstanceCreationExpression +unqualifiedClassInstanceCreationExpression +classOrInterfaceTypeToInstantiate +typeArgumentsOrDiamond +arrayCreationExpression +arrayCreationExpressionWithoutInitializer +arrayCreationExpressionWithInitializer +dimExprs +dimExpr +arrayAccess +fieldAccess +methodInvocation +argumentList +methodReference +postfixExpression +pfE +postIncrementExpression +postDecrementExpression +unaryExpression +preIncrementExpression +preDecrementExpression +unaryExpressionNotPlusMinus +castExpression +multiplicativeExpression +additiveExpression +shiftExpression +relationalExpression +equalityExpression +andExpression +exclusiveOrExpression +inclusiveOrExpression +conditionalAndExpression +conditionalOrExpression +conditionalExpression +assignmentExpression +assignment +leftHandSide +assignmentOperator +lambdaExpression +lambdaParameters +lambdaParameterList +lambdaParameter +lambdaParameterType +lambdaBody +switchExpression +constantExpression + + +atn: +[4, 1, 126, 2946, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 5, 4, 501, 8, 4, 10, 4, 12, 4, 504, 9, 4, 1, 4, 1, 4, 3, 4, 508, 8, 4, 1, 5, 1, 5, 3, 5, 512, 8, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 3, 8, 521, 8, 8, 1, 9, 1, 9, 5, 9, 525, 8, 9, 10, 9, 12, 9, 528, 9, 9, 1, 9, 1, 9, 3, 9, 532, 8, 9, 1, 9, 3, 9, 535, 8, 9, 1, 10, 1, 10, 1, 10, 3, 10, 540, 8, 10, 1, 10, 5, 10, 543, 8, 10, 10, 10, 12, 10, 546, 9, 10, 1, 10, 1, 10, 3, 10, 550, 8, 10, 1, 10, 3, 10, 553, 8, 10, 1, 11, 5, 11, 556, 8, 11, 10, 11, 12, 11, 559, 9, 11, 1, 11, 1, 11, 3, 11, 563, 8, 11, 1, 11, 1, 11, 1, 11, 5, 11, 568, 8, 11, 10, 11, 12, 11, 571, 9, 11, 1, 11, 1, 11, 3, 11, 575, 8, 11, 1, 11, 1, 11, 1, 11, 5, 11, 580, 8, 11, 10, 11, 12, 11, 583, 9, 11, 1, 11, 1, 11, 3, 11, 587, 8, 11, 3, 11, 589, 8, 11, 1, 12, 1, 12, 1, 13, 5, 13, 594, 8, 13, 10, 13, 12, 13, 597, 9, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 610, 8, 14, 1, 15, 5, 15, 613, 8, 15, 10, 15, 12, 15, 616, 9, 15, 1, 15, 1, 15, 1, 15, 5, 15, 621, 8, 15, 10, 15, 12, 15, 624, 9, 15, 1, 15, 1, 15, 5, 15, 628, 8, 15, 10, 15, 12, 15, 631, 9, 15, 1, 16, 5, 16, 634, 8, 16, 10, 16, 12, 16, 637, 9, 16, 1, 16, 1, 16, 3, 16, 641, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 649, 8, 18, 10, 18, 12, 18, 652, 9, 18, 3, 18, 654, 8, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 5, 21, 666, 8, 21, 10, 21, 12, 21, 669, 9, 21, 1, 22, 1, 22, 3, 22, 673, 8, 22, 1, 23, 5, 23, 676, 8, 23, 10, 23, 12, 23, 679, 9, 23, 1, 23, 1, 23, 3, 23, 683, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 689, 8, 24, 1, 25, 1, 25, 1, 25, 3, 25, 694, 8, 25, 1, 26, 1, 26, 1, 26, 3, 26, 699, 8, 26, 1, 27, 1, 27, 1, 27, 3, 27, 704, 8, 27, 1, 28, 1, 28, 1, 28, 3, 28, 709, 8, 28, 1, 29, 1, 29, 1, 29, 3, 29, 714, 8, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 3, 31, 723, 8, 31, 1, 32, 1, 32, 3, 32, 727, 8, 32, 1, 33, 3, 33, 730, 8, 33, 1, 33, 5, 33, 733, 8, 33, 10, 33, 12, 33, 736, 9, 33, 1, 33, 5, 33, 739, 8, 33, 10, 33, 12, 33, 742, 9, 33, 1, 34, 5, 34, 745, 8, 34, 10, 34, 12, 34, 748, 9, 34, 1, 34, 1, 34, 1, 35, 5, 35, 753, 8, 35, 10, 35, 12, 35, 756, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 762, 8, 35, 10, 35, 12, 35, 765, 9, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 775, 8, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 3, 42, 804, 8, 42, 1, 43, 5, 43, 807, 8, 43, 10, 43, 12, 43, 810, 9, 43, 1, 43, 3, 43, 813, 8, 43, 1, 43, 1, 43, 1, 43, 1, 43, 5, 43, 819, 8, 43, 10, 43, 12, 43, 822, 9, 43, 1, 43, 1, 43, 5, 43, 826, 8, 43, 10, 43, 12, 43, 829, 9, 43, 1, 43, 1, 43, 1, 44, 1, 44, 5, 44, 835, 8, 44, 10, 44, 12, 44, 838, 9, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 849, 8, 44, 10, 44, 12, 44, 852, 9, 44, 3, 44, 854, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 864, 8, 44, 10, 44, 12, 44, 867, 9, 44, 3, 44, 869, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 883, 8, 44, 10, 44, 12, 44, 886, 9, 44, 1, 44, 1, 44, 3, 44, 890, 8, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 3, 46, 897, 8, 46, 1, 47, 5, 47, 900, 8, 47, 10, 47, 12, 47, 903, 9, 47, 1, 47, 1, 47, 1, 47, 3, 47, 908, 8, 47, 1, 47, 3, 47, 911, 8, 47, 1, 47, 3, 47, 914, 8, 47, 1, 47, 3, 47, 917, 8, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 931, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 5, 50, 940, 8, 50, 10, 50, 12, 50, 943, 9, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 5, 53, 954, 8, 53, 10, 53, 12, 53, 957, 9, 53, 1, 54, 1, 54, 1, 54, 1, 54, 5, 54, 963, 8, 54, 10, 54, 12, 54, 966, 9, 54, 1, 55, 1, 55, 5, 55, 970, 8, 55, 10, 55, 12, 55, 973, 9, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 981, 8, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 988, 8, 57, 1, 58, 5, 58, 991, 8, 58, 10, 58, 12, 58, 994, 9, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 1008, 8, 59, 1, 60, 1, 60, 1, 60, 5, 60, 1013, 8, 60, 10, 60, 12, 60, 1016, 9, 60, 1, 61, 1, 61, 1, 61, 3, 61, 1021, 8, 61, 1, 62, 1, 62, 3, 62, 1025, 8, 62, 1, 63, 1, 63, 3, 63, 1029, 8, 63, 1, 64, 1, 64, 3, 64, 1033, 8, 64, 1, 65, 1, 65, 3, 65, 1037, 8, 65, 1, 66, 1, 66, 1, 66, 3, 66, 1042, 8, 66, 1, 67, 1, 67, 1, 67, 5, 67, 1047, 8, 67, 10, 67, 12, 67, 1050, 9, 67, 3, 67, 1052, 8, 67, 1, 67, 1, 67, 3, 67, 1056, 8, 67, 1, 67, 3, 67, 1059, 8, 67, 1, 68, 1, 68, 5, 68, 1063, 8, 68, 10, 68, 12, 68, 1066, 9, 68, 1, 68, 1, 68, 3, 68, 1070, 8, 68, 1, 68, 3, 68, 1073, 8, 68, 1, 69, 1, 69, 3, 69, 1077, 8, 69, 1, 69, 1, 69, 3, 69, 1081, 8, 69, 1, 69, 1, 69, 5, 69, 1085, 8, 69, 10, 69, 12, 69, 1088, 9, 69, 1, 69, 1, 69, 3, 69, 1092, 8, 69, 3, 69, 1094, 8, 69, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 3, 72, 1103, 8, 72, 1, 72, 1, 72, 1, 73, 5, 73, 1108, 8, 73, 10, 73, 12, 73, 1111, 9, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 1126, 8, 74, 1, 75, 1, 75, 5, 75, 1130, 8, 75, 10, 75, 12, 75, 1133, 9, 75, 3, 75, 1135, 8, 75, 1, 75, 1, 75, 1, 75, 3, 75, 1140, 8, 75, 1, 76, 1, 76, 3, 76, 1144, 8, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1151, 8, 77, 1, 77, 3, 77, 1154, 8, 77, 1, 77, 1, 77, 3, 77, 1158, 8, 77, 1, 78, 5, 78, 1161, 8, 78, 10, 78, 12, 78, 1164, 9, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1169, 8, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 5, 79, 1176, 8, 79, 10, 79, 12, 79, 1179, 9, 79, 1, 80, 5, 80, 1182, 8, 80, 10, 80, 12, 80, 1185, 9, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1191, 8, 80, 1, 81, 5, 81, 1194, 8, 81, 10, 81, 12, 81, 1197, 9, 81, 1, 81, 1, 81, 5, 81, 1201, 8, 81, 10, 81, 12, 81, 1204, 9, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 3, 82, 1211, 8, 82, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 5, 84, 1219, 8, 84, 10, 84, 12, 84, 1222, 9, 84, 1, 85, 1, 85, 3, 85, 1226, 8, 85, 1, 86, 1, 86, 3, 86, 1230, 8, 86, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 89, 5, 89, 1238, 8, 89, 10, 89, 12, 89, 1241, 9, 89, 1, 89, 1, 89, 3, 89, 1245, 8, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1253, 8, 90, 1, 91, 3, 91, 1256, 8, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 1263, 8, 91, 1, 91, 3, 91, 1266, 8, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 93, 1, 93, 3, 93, 1274, 8, 93, 1, 93, 3, 93, 1277, 8, 93, 1, 93, 1, 93, 1, 94, 3, 94, 1282, 8, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1287, 8, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1293, 8, 94, 1, 94, 1, 94, 3, 94, 1297, 8, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1302, 8, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1307, 8, 94, 1, 95, 5, 95, 1310, 8, 95, 10, 95, 12, 95, 1313, 9, 95, 1, 95, 1, 95, 1, 95, 3, 95, 1318, 8, 95, 1, 95, 1, 95, 1, 96, 1, 96, 3, 96, 1324, 8, 96, 1, 96, 3, 96, 1327, 8, 96, 1, 96, 3, 96, 1330, 8, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 5, 97, 1337, 8, 97, 10, 97, 12, 97, 1340, 9, 97, 1, 98, 5, 98, 1343, 8, 98, 10, 98, 12, 98, 1346, 9, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1351, 8, 98, 1, 98, 3, 98, 1354, 8, 98, 1, 98, 3, 98, 1357, 8, 98, 1, 99, 1, 99, 1, 100, 1, 100, 5, 100, 1363, 8, 100, 10, 100, 12, 100, 1366, 9, 100, 1, 101, 5, 101, 1369, 8, 101, 10, 101, 12, 101, 1372, 9, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1377, 8, 101, 1, 101, 1, 101, 3, 101, 1381, 8, 101, 1, 101, 1, 101, 1, 102, 1, 102, 3, 102, 1387, 8, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 5, 103, 1394, 8, 103, 10, 103, 12, 103, 1397, 9, 103, 1, 104, 5, 104, 1400, 8, 104, 10, 104, 12, 104, 1403, 9, 104, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1409, 8, 104, 1, 105, 5, 105, 1412, 8, 105, 10, 105, 12, 105, 1415, 9, 105, 1, 105, 1, 105, 5, 105, 1419, 8, 105, 10, 105, 12, 105, 1422, 9, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 5, 107, 1431, 8, 107, 10, 107, 12, 107, 1434, 9, 107, 1, 107, 1, 107, 1, 108, 1, 108, 3, 108, 1440, 8, 108, 1, 109, 5, 109, 1443, 8, 109, 10, 109, 12, 109, 1446, 9, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 3, 110, 1453, 8, 110, 1, 111, 5, 111, 1456, 8, 111, 10, 111, 12, 111, 1459, 9, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1464, 8, 111, 1, 111, 3, 111, 1467, 8, 111, 1, 111, 3, 111, 1470, 8, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1483, 8, 112, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 5, 114, 1492, 8, 114, 10, 114, 12, 114, 1495, 9, 114, 1, 115, 1, 115, 5, 115, 1499, 8, 115, 10, 115, 12, 115, 1502, 9, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 1511, 8, 116, 1, 117, 5, 117, 1514, 8, 117, 10, 117, 12, 117, 1517, 9, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 1527, 8, 118, 1, 119, 5, 119, 1530, 8, 119, 10, 119, 12, 119, 1533, 9, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 3, 120, 1545, 8, 120, 1, 121, 5, 121, 1548, 8, 121, 10, 121, 12, 121, 1551, 9, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 5, 122, 1560, 8, 122, 10, 122, 12, 122, 1563, 9, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1572, 8, 123, 1, 124, 5, 124, 1575, 8, 124, 10, 124, 12, 124, 1578, 9, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1585, 8, 124, 1, 124, 3, 124, 1588, 8, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 3, 125, 1595, 8, 125, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 3, 127, 1603, 8, 127, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 1609, 8, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 5, 129, 1616, 8, 129, 10, 129, 12, 129, 1619, 9, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 3, 131, 1628, 8, 131, 1, 132, 1, 132, 3, 132, 1632, 8, 132, 1, 132, 3, 132, 1635, 8, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 5, 133, 1642, 8, 133, 10, 133, 12, 133, 1645, 9, 133, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 3, 136, 1658, 8, 136, 1, 136, 3, 136, 1661, 8, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 5, 137, 1668, 8, 137, 10, 137, 12, 137, 1671, 9, 137, 1, 138, 1, 138, 3, 138, 1675, 8, 138, 1, 138, 1, 138, 1, 139, 1, 139, 5, 139, 1681, 8, 139, 10, 139, 12, 139, 1684, 9, 139, 1, 140, 1, 140, 1, 140, 3, 140, 1689, 8, 140, 1, 141, 1, 141, 3, 141, 1693, 8, 141, 1, 142, 5, 142, 1696, 8, 142, 10, 142, 12, 142, 1699, 9, 142, 1, 142, 1, 142, 3, 142, 1703, 8, 142, 1, 143, 1, 143, 3, 143, 1707, 8, 143, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 3, 145, 1718, 8, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 3, 146, 1725, 8, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 3, 147, 1740, 8, 147, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 3, 152, 1762, 8, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 1790, 8, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 5, 158, 1803, 8, 158, 10, 158, 12, 158, 1806, 9, 158, 1, 158, 1, 158, 1, 158, 1, 158, 5, 158, 1812, 8, 158, 10, 158, 12, 158, 1815, 9, 158, 1, 158, 1, 158, 1, 158, 5, 158, 1820, 8, 158, 10, 158, 12, 158, 1823, 9, 158, 1, 158, 3, 158, 1826, 8, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 3, 159, 1835, 8, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 5, 160, 1842, 8, 160, 10, 160, 12, 160, 1845, 9, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 5, 161, 1853, 8, 161, 10, 161, 12, 161, 1856, 9, 161, 1, 161, 3, 161, 1859, 8, 161, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 3, 166, 1885, 8, 166, 1, 167, 1, 167, 3, 167, 1889, 8, 167, 1, 168, 1, 168, 1, 168, 3, 168, 1894, 8, 168, 1, 168, 1, 168, 3, 168, 1898, 8, 168, 1, 168, 1, 168, 3, 168, 1902, 8, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 3, 169, 1910, 8, 169, 1, 169, 1, 169, 3, 169, 1914, 8, 169, 1, 169, 1, 169, 3, 169, 1918, 8, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 3, 170, 1925, 8, 170, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 5, 172, 1932, 8, 172, 10, 172, 12, 172, 1935, 9, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 3, 175, 1955, 8, 175, 1, 175, 1, 175, 1, 176, 1, 176, 3, 176, 1961, 8, 176, 1, 176, 1, 176, 1, 177, 1, 177, 3, 177, 1967, 8, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 3, 180, 1992, 8, 180, 1, 180, 1, 180, 1, 180, 3, 180, 1997, 8, 180, 1, 181, 1, 181, 5, 181, 2001, 8, 181, 10, 181, 12, 181, 2004, 9, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 5, 183, 2013, 8, 183, 10, 183, 12, 183, 2016, 9, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 5, 184, 2024, 8, 184, 10, 184, 12, 184, 2027, 9, 184, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 3, 186, 2036, 8, 186, 1, 186, 3, 186, 2039, 8, 186, 1, 187, 1, 187, 1, 187, 3, 187, 2044, 8, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 5, 188, 2051, 8, 188, 10, 188, 12, 188, 2054, 9, 188, 1, 189, 1, 189, 3, 189, 2058, 8, 189, 1, 190, 1, 190, 3, 190, 2062, 8, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 193, 1, 193, 1, 194, 1, 194, 3, 194, 2074, 8, 194, 1, 195, 1, 195, 3, 195, 2078, 8, 195, 1, 196, 1, 196, 3, 196, 2082, 8, 196, 1, 196, 1, 196, 3, 196, 2086, 8, 196, 1, 196, 1, 196, 3, 196, 2090, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2096, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2102, 8, 196, 1, 196, 1, 196, 3, 196, 2106, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2112, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2118, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2124, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2130, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2138, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2145, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2152, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2157, 8, 196, 1, 196, 1, 196, 3, 196, 2161, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2166, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2171, 8, 196, 1, 196, 1, 196, 3, 196, 2175, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2180, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2185, 8, 196, 1, 196, 1, 196, 3, 196, 2189, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2194, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2199, 8, 196, 1, 196, 1, 196, 3, 196, 2203, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2208, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2213, 8, 196, 1, 196, 1, 196, 3, 196, 2217, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2224, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2229, 8, 196, 1, 196, 1, 196, 3, 196, 2233, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2238, 8, 196, 1, 196, 1, 196, 3, 196, 2242, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2247, 8, 196, 1, 196, 1, 196, 3, 196, 2251, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2256, 8, 196, 1, 196, 1, 196, 3, 196, 2260, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2265, 8, 196, 1, 196, 1, 196, 3, 196, 2269, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2276, 8, 196, 1, 196, 1, 196, 3, 196, 2280, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2285, 8, 196, 1, 196, 1, 196, 3, 196, 2289, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2295, 8, 196, 3, 196, 2297, 8, 196, 1, 197, 1, 197, 1, 197, 3, 197, 2302, 8, 197, 1, 197, 1, 197, 1, 197, 3, 197, 2307, 8, 197, 1, 197, 1, 197, 1, 197, 1, 197, 3, 197, 2313, 8, 197, 1, 197, 1, 197, 3, 197, 2317, 8, 197, 1, 197, 1, 197, 1, 197, 3, 197, 2322, 8, 197, 1, 197, 1, 197, 3, 197, 2326, 8, 197, 1, 197, 1, 197, 3, 197, 2330, 8, 197, 1, 197, 1, 197, 3, 197, 2334, 8, 197, 3, 197, 2336, 8, 197, 1, 198, 1, 198, 1, 198, 5, 198, 2341, 8, 198, 10, 198, 12, 198, 2344, 9, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 5, 198, 2352, 8, 198, 10, 198, 12, 198, 2355, 9, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 5, 198, 2363, 8, 198, 10, 198, 12, 198, 2366, 9, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 3, 198, 2373, 8, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 3, 199, 2384, 8, 199, 1, 200, 1, 200, 3, 200, 2388, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2393, 8, 200, 1, 200, 1, 200, 3, 200, 2397, 8, 200, 1, 201, 5, 201, 2400, 8, 201, 10, 201, 12, 201, 2403, 9, 201, 1, 201, 1, 201, 1, 201, 5, 201, 2408, 8, 201, 10, 201, 12, 201, 2411, 9, 201, 1, 201, 5, 201, 2414, 8, 201, 10, 201, 12, 201, 2417, 9, 201, 1, 201, 3, 201, 2420, 8, 201, 1, 202, 1, 202, 3, 202, 2424, 8, 202, 1, 203, 1, 203, 3, 203, 2428, 8, 203, 1, 204, 1, 204, 1, 204, 1, 204, 3, 204, 2434, 8, 204, 1, 204, 1, 204, 1, 204, 1, 204, 3, 204, 2440, 8, 204, 3, 204, 2442, 8, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 3, 205, 2454, 8, 205, 1, 206, 1, 206, 5, 206, 2458, 8, 206, 10, 206, 12, 206, 2461, 9, 206, 1, 207, 5, 207, 2464, 8, 207, 10, 207, 12, 207, 2467, 9, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2488, 8, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 3, 209, 2503, 8, 209, 1, 210, 1, 210, 1, 210, 3, 210, 2508, 8, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2515, 8, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2520, 8, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2527, 8, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2532, 8, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2539, 8, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2544, 8, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2551, 8, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2556, 8, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2564, 8, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2569, 8, 210, 1, 210, 1, 210, 3, 210, 2573, 8, 210, 1, 211, 1, 211, 1, 211, 5, 211, 2578, 8, 211, 10, 211, 12, 211, 2581, 9, 211, 1, 212, 1, 212, 1, 212, 3, 212, 2586, 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 2593, 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 2600, 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 2607, 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 2615, 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 2622, 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 2630, 8, 212, 1, 213, 1, 213, 3, 213, 2634, 8, 213, 1, 213, 1, 213, 3, 213, 2638, 8, 213, 3, 213, 2640, 8, 213, 1, 214, 1, 214, 3, 214, 2644, 8, 214, 1, 214, 1, 214, 3, 214, 2648, 8, 214, 3, 214, 2650, 8, 214, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 3, 217, 2665, 8, 217, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 3, 220, 2680, 8, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 5, 221, 2690, 8, 221, 10, 221, 12, 221, 2693, 9, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 5, 221, 2701, 8, 221, 10, 221, 12, 221, 2704, 9, 221, 1, 221, 1, 221, 1, 221, 3, 221, 2709, 8, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 5, 222, 2723, 8, 222, 10, 222, 12, 222, 2726, 9, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 5, 223, 2737, 8, 223, 10, 223, 12, 223, 2740, 9, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 5, 224, 2758, 8, 224, 10, 224, 12, 224, 2761, 9, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 3, 225, 2782, 8, 225, 5, 225, 2784, 8, 225, 10, 225, 12, 225, 2787, 9, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 5, 226, 2798, 8, 226, 10, 226, 12, 226, 2801, 9, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 5, 227, 2809, 8, 227, 10, 227, 12, 227, 2812, 9, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 5, 228, 2820, 8, 228, 10, 228, 12, 228, 2823, 9, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 5, 229, 2831, 8, 229, 10, 229, 12, 229, 2834, 9, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 5, 230, 2842, 8, 230, 10, 230, 12, 230, 2845, 9, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 5, 231, 2853, 8, 231, 10, 231, 12, 231, 2856, 9, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 3, 232, 2871, 8, 232, 1, 233, 1, 233, 3, 233, 2875, 8, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 3, 235, 2884, 8, 235, 1, 236, 1, 236, 1, 237, 1, 237, 1, 237, 1, 237, 1, 238, 1, 238, 3, 238, 2894, 8, 238, 1, 238, 1, 238, 3, 238, 2898, 8, 238, 1, 239, 1, 239, 1, 239, 5, 239, 2903, 8, 239, 10, 239, 12, 239, 2906, 9, 239, 1, 239, 1, 239, 1, 239, 5, 239, 2911, 8, 239, 10, 239, 12, 239, 2914, 9, 239, 3, 239, 2916, 8, 239, 1, 240, 5, 240, 2919, 8, 240, 10, 240, 12, 240, 2922, 9, 240, 1, 240, 1, 240, 1, 240, 1, 240, 3, 240, 2928, 8, 240, 1, 241, 1, 241, 3, 241, 2932, 8, 241, 1, 242, 1, 242, 3, 242, 2936, 8, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 244, 1, 244, 1, 244, 0, 10, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 245, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 0, 6, 1, 0, 69, 75, 5, 0, 22, 22, 25, 25, 44, 44, 46, 46, 54, 54, 2, 0, 31, 31, 37, 37, 2, 0, 13, 13, 55, 55, 2, 0, 57, 57, 60, 60, 2, 0, 88, 88, 112, 122, 3206, 0, 490, 1, 0, 0, 0, 2, 493, 1, 0, 0, 0, 4, 495, 1, 0, 0, 0, 6, 497, 1, 0, 0, 0, 8, 502, 1, 0, 0, 0, 10, 511, 1, 0, 0, 0, 12, 513, 1, 0, 0, 0, 14, 515, 1, 0, 0, 0, 16, 520, 1, 0, 0, 0, 18, 522, 1, 0, 0, 0, 20, 539, 1, 0, 0, 0, 22, 588, 1, 0, 0, 0, 24, 590, 1, 0, 0, 0, 26, 595, 1, 0, 0, 0, 28, 609, 1, 0, 0, 0, 30, 614, 1, 0, 0, 0, 32, 635, 1, 0, 0, 0, 34, 642, 1, 0, 0, 0, 36, 644, 1, 0, 0, 0, 38, 655, 1, 0, 0, 0, 40, 658, 1, 0, 0, 0, 42, 662, 1, 0, 0, 0, 44, 672, 1, 0, 0, 0, 46, 677, 1, 0, 0, 0, 48, 688, 1, 0, 0, 0, 50, 690, 1, 0, 0, 0, 52, 695, 1, 0, 0, 0, 54, 700, 1, 0, 0, 0, 56, 705, 1, 0, 0, 0, 58, 713, 1, 0, 0, 0, 60, 717, 1, 0, 0, 0, 62, 719, 1, 0, 0, 0, 64, 726, 1, 0, 0, 0, 66, 729, 1, 0, 0, 0, 68, 746, 1, 0, 0, 0, 70, 754, 1, 0, 0, 0, 72, 768, 1, 0, 0, 0, 74, 774, 1, 0, 0, 0, 76, 776, 1, 0, 0, 0, 78, 780, 1, 0, 0, 0, 80, 786, 1, 0, 0, 0, 82, 793, 1, 0, 0, 0, 84, 803, 1, 0, 0, 0, 86, 808, 1, 0, 0, 0, 88, 889, 1, 0, 0, 0, 90, 891, 1, 0, 0, 0, 92, 896, 1, 0, 0, 0, 94, 901, 1, 0, 0, 0, 96, 930, 1, 0, 0, 0, 98, 932, 1, 0, 0, 0, 100, 936, 1, 0, 0, 0, 102, 944, 1, 0, 0, 0, 104, 947, 1, 0, 0, 0, 106, 950, 1, 0, 0, 0, 108, 958, 1, 0, 0, 0, 110, 967, 1, 0, 0, 0, 112, 980, 1, 0, 0, 0, 114, 987, 1, 0, 0, 0, 116, 992, 1, 0, 0, 0, 118, 1007, 1, 0, 0, 0, 120, 1009, 1, 0, 0, 0, 122, 1017, 1, 0, 0, 0, 124, 1022, 1, 0, 0, 0, 126, 1028, 1, 0, 0, 0, 128, 1032, 1, 0, 0, 0, 130, 1036, 1, 0, 0, 0, 132, 1041, 1, 0, 0, 0, 134, 1051, 1, 0, 0, 0, 136, 1060, 1, 0, 0, 0, 138, 1093, 1, 0, 0, 0, 140, 1095, 1, 0, 0, 0, 142, 1097, 1, 0, 0, 0, 144, 1102, 1, 0, 0, 0, 146, 1109, 1, 0, 0, 0, 148, 1125, 1, 0, 0, 0, 150, 1134, 1, 0, 0, 0, 152, 1143, 1, 0, 0, 0, 154, 1145, 1, 0, 0, 0, 156, 1162, 1, 0, 0, 0, 158, 1172, 1, 0, 0, 0, 160, 1190, 1, 0, 0, 0, 162, 1195, 1, 0, 0, 0, 164, 1210, 1, 0, 0, 0, 166, 1212, 1, 0, 0, 0, 168, 1215, 1, 0, 0, 0, 170, 1225, 1, 0, 0, 0, 172, 1229, 1, 0, 0, 0, 174, 1231, 1, 0, 0, 0, 176, 1233, 1, 0, 0, 0, 178, 1239, 1, 0, 0, 0, 180, 1252, 1, 0, 0, 0, 182, 1255, 1, 0, 0, 0, 184, 1269, 1, 0, 0, 0, 186, 1271, 1, 0, 0, 0, 188, 1306, 1, 0, 0, 0, 190, 1311, 1, 0, 0, 0, 192, 1321, 1, 0, 0, 0, 194, 1333, 1, 0, 0, 0, 196, 1344, 1, 0, 0, 0, 198, 1358, 1, 0, 0, 0, 200, 1360, 1, 0, 0, 0, 202, 1370, 1, 0, 0, 0, 204, 1384, 1, 0, 0, 0, 206, 1390, 1, 0, 0, 0, 208, 1408, 1, 0, 0, 0, 210, 1413, 1, 0, 0, 0, 212, 1426, 1, 0, 0, 0, 214, 1428, 1, 0, 0, 0, 216, 1439, 1, 0, 0, 0, 218, 1444, 1, 0, 0, 0, 220, 1452, 1, 0, 0, 0, 222, 1457, 1, 0, 0, 0, 224, 1482, 1, 0, 0, 0, 226, 1484, 1, 0, 0, 0, 228, 1487, 1, 0, 0, 0, 230, 1496, 1, 0, 0, 0, 232, 1510, 1, 0, 0, 0, 234, 1515, 1, 0, 0, 0, 236, 1526, 1, 0, 0, 0, 238, 1531, 1, 0, 0, 0, 240, 1544, 1, 0, 0, 0, 242, 1549, 1, 0, 0, 0, 244, 1557, 1, 0, 0, 0, 246, 1571, 1, 0, 0, 0, 248, 1576, 1, 0, 0, 0, 250, 1594, 1, 0, 0, 0, 252, 1596, 1, 0, 0, 0, 254, 1602, 1, 0, 0, 0, 256, 1604, 1, 0, 0, 0, 258, 1612, 1, 0, 0, 0, 260, 1620, 1, 0, 0, 0, 262, 1627, 1, 0, 0, 0, 264, 1629, 1, 0, 0, 0, 266, 1638, 1, 0, 0, 0, 268, 1646, 1, 0, 0, 0, 270, 1649, 1, 0, 0, 0, 272, 1655, 1, 0, 0, 0, 274, 1664, 1, 0, 0, 0, 276, 1672, 1, 0, 0, 0, 278, 1678, 1, 0, 0, 0, 280, 1688, 1, 0, 0, 0, 282, 1692, 1, 0, 0, 0, 284, 1697, 1, 0, 0, 0, 286, 1706, 1, 0, 0, 0, 288, 1708, 1, 0, 0, 0, 290, 1717, 1, 0, 0, 0, 292, 1724, 1, 0, 0, 0, 294, 1739, 1, 0, 0, 0, 296, 1741, 1, 0, 0, 0, 298, 1743, 1, 0, 0, 0, 300, 1747, 1, 0, 0, 0, 302, 1751, 1, 0, 0, 0, 304, 1761, 1, 0, 0, 0, 306, 1763, 1, 0, 0, 0, 308, 1769, 1, 0, 0, 0, 310, 1777, 1, 0, 0, 0, 312, 1785, 1, 0, 0, 0, 314, 1793, 1, 0, 0, 0, 316, 1825, 1, 0, 0, 0, 318, 1827, 1, 0, 0, 0, 320, 1836, 1, 0, 0, 0, 322, 1858, 1, 0, 0, 0, 324, 1860, 1, 0, 0, 0, 326, 1862, 1, 0, 0, 0, 328, 1868, 1, 0, 0, 0, 330, 1874, 1, 0, 0, 0, 332, 1884, 1, 0, 0, 0, 334, 1888, 1, 0, 0, 0, 336, 1890, 1, 0, 0, 0, 338, 1906, 1, 0, 0, 0, 340, 1924, 1, 0, 0, 0, 342, 1926, 1, 0, 0, 0, 344, 1928, 1, 0, 0, 0, 346, 1936, 1, 0, 0, 0, 348, 1944, 1, 0, 0, 0, 350, 1952, 1, 0, 0, 0, 352, 1958, 1, 0, 0, 0, 354, 1964, 1, 0, 0, 0, 356, 1970, 1, 0, 0, 0, 358, 1974, 1, 0, 0, 0, 360, 1996, 1, 0, 0, 0, 362, 1998, 1, 0, 0, 0, 364, 2005, 1, 0, 0, 0, 366, 2014, 1, 0, 0, 0, 368, 2020, 1, 0, 0, 0, 370, 2028, 1, 0, 0, 0, 372, 2031, 1, 0, 0, 0, 374, 2040, 1, 0, 0, 0, 376, 2047, 1, 0, 0, 0, 378, 2057, 1, 0, 0, 0, 380, 2061, 1, 0, 0, 0, 382, 2063, 1, 0, 0, 0, 384, 2067, 1, 0, 0, 0, 386, 2069, 1, 0, 0, 0, 388, 2073, 1, 0, 0, 0, 390, 2077, 1, 0, 0, 0, 392, 2296, 1, 0, 0, 0, 394, 2335, 1, 0, 0, 0, 396, 2372, 1, 0, 0, 0, 398, 2383, 1, 0, 0, 0, 400, 2385, 1, 0, 0, 0, 402, 2401, 1, 0, 0, 0, 404, 2423, 1, 0, 0, 0, 406, 2427, 1, 0, 0, 0, 408, 2441, 1, 0, 0, 0, 410, 2453, 1, 0, 0, 0, 412, 2455, 1, 0, 0, 0, 414, 2465, 1, 0, 0, 0, 416, 2487, 1, 0, 0, 0, 418, 2502, 1, 0, 0, 0, 420, 2572, 1, 0, 0, 0, 422, 2574, 1, 0, 0, 0, 424, 2629, 1, 0, 0, 0, 426, 2639, 1, 0, 0, 0, 428, 2649, 1, 0, 0, 0, 430, 2651, 1, 0, 0, 0, 432, 2654, 1, 0, 0, 0, 434, 2664, 1, 0, 0, 0, 436, 2666, 1, 0, 0, 0, 438, 2669, 1, 0, 0, 0, 440, 2679, 1, 0, 0, 0, 442, 2708, 1, 0, 0, 0, 444, 2710, 1, 0, 0, 0, 446, 2727, 1, 0, 0, 0, 448, 2741, 1, 0, 0, 0, 450, 2762, 1, 0, 0, 0, 452, 2788, 1, 0, 0, 0, 454, 2802, 1, 0, 0, 0, 456, 2813, 1, 0, 0, 0, 458, 2824, 1, 0, 0, 0, 460, 2835, 1, 0, 0, 0, 462, 2846, 1, 0, 0, 0, 464, 2870, 1, 0, 0, 0, 466, 2874, 1, 0, 0, 0, 468, 2876, 1, 0, 0, 0, 470, 2883, 1, 0, 0, 0, 472, 2885, 1, 0, 0, 0, 474, 2887, 1, 0, 0, 0, 476, 2897, 1, 0, 0, 0, 478, 2915, 1, 0, 0, 0, 480, 2927, 1, 0, 0, 0, 482, 2931, 1, 0, 0, 0, 484, 2935, 1, 0, 0, 0, 486, 2937, 1, 0, 0, 0, 488, 2943, 1, 0, 0, 0, 490, 491, 3, 64, 32, 0, 491, 492, 5, 0, 0, 1, 492, 1, 1, 0, 0, 0, 493, 494, 7, 0, 0, 0, 494, 3, 1, 0, 0, 0, 495, 496, 5, 123, 0, 0, 496, 5, 1, 0, 0, 0, 497, 498, 5, 123, 0, 0, 498, 7, 1, 0, 0, 0, 499, 501, 3, 254, 127, 0, 500, 499, 1, 0, 0, 0, 501, 504, 1, 0, 0, 0, 502, 500, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 507, 1, 0, 0, 0, 504, 502, 1, 0, 0, 0, 505, 508, 3, 10, 5, 0, 506, 508, 5, 20, 0, 0, 507, 505, 1, 0, 0, 0, 507, 506, 1, 0, 0, 0, 508, 9, 1, 0, 0, 0, 509, 512, 3, 12, 6, 0, 510, 512, 3, 14, 7, 0, 511, 509, 1, 0, 0, 0, 511, 510, 1, 0, 0, 0, 512, 11, 1, 0, 0, 0, 513, 514, 7, 1, 0, 0, 514, 13, 1, 0, 0, 0, 515, 516, 7, 2, 0, 0, 516, 15, 1, 0, 0, 0, 517, 521, 3, 20, 10, 0, 518, 521, 3, 26, 13, 0, 519, 521, 3, 28, 14, 0, 520, 517, 1, 0, 0, 0, 520, 518, 1, 0, 0, 0, 520, 519, 1, 0, 0, 0, 521, 17, 1, 0, 0, 0, 522, 526, 5, 84, 0, 0, 523, 525, 3, 254, 127, 0, 524, 523, 1, 0, 0, 0, 525, 528, 1, 0, 0, 0, 526, 524, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 529, 1, 0, 0, 0, 528, 526, 1, 0, 0, 0, 529, 531, 3, 4, 2, 0, 530, 532, 3, 40, 20, 0, 531, 530, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 534, 1, 0, 0, 0, 533, 535, 3, 18, 9, 0, 534, 533, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, 19, 1, 0, 0, 0, 536, 537, 3, 52, 26, 0, 537, 538, 5, 84, 0, 0, 538, 540, 1, 0, 0, 0, 539, 536, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 544, 1, 0, 0, 0, 541, 543, 3, 254, 127, 0, 542, 541, 1, 0, 0, 0, 543, 546, 1, 0, 0, 0, 544, 542, 1, 0, 0, 0, 544, 545, 1, 0, 0, 0, 545, 547, 1, 0, 0, 0, 546, 544, 1, 0, 0, 0, 547, 549, 3, 4, 2, 0, 548, 550, 3, 40, 20, 0, 549, 548, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 552, 1, 0, 0, 0, 551, 553, 3, 18, 9, 0, 552, 551, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 21, 1, 0, 0, 0, 554, 556, 3, 254, 127, 0, 555, 554, 1, 0, 0, 0, 556, 559, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 560, 1, 0, 0, 0, 559, 557, 1, 0, 0, 0, 560, 562, 3, 4, 2, 0, 561, 563, 3, 40, 20, 0, 562, 561, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 589, 1, 0, 0, 0, 564, 565, 3, 52, 26, 0, 565, 569, 5, 84, 0, 0, 566, 568, 3, 254, 127, 0, 567, 566, 1, 0, 0, 0, 568, 571, 1, 0, 0, 0, 569, 567, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 572, 1, 0, 0, 0, 571, 569, 1, 0, 0, 0, 572, 574, 3, 4, 2, 0, 573, 575, 3, 40, 20, 0, 574, 573, 1, 0, 0, 0, 574, 575, 1, 0, 0, 0, 575, 589, 1, 0, 0, 0, 576, 577, 3, 20, 10, 0, 577, 581, 5, 84, 0, 0, 578, 580, 3, 254, 127, 0, 579, 578, 1, 0, 0, 0, 580, 583, 1, 0, 0, 0, 581, 579, 1, 0, 0, 0, 581, 582, 1, 0, 0, 0, 582, 584, 1, 0, 0, 0, 583, 581, 1, 0, 0, 0, 584, 586, 3, 4, 2, 0, 585, 587, 3, 40, 20, 0, 586, 585, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 589, 1, 0, 0, 0, 588, 557, 1, 0, 0, 0, 588, 564, 1, 0, 0, 0, 588, 576, 1, 0, 0, 0, 589, 23, 1, 0, 0, 0, 590, 591, 3, 22, 11, 0, 591, 25, 1, 0, 0, 0, 592, 594, 3, 254, 127, 0, 593, 592, 1, 0, 0, 0, 594, 597, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 598, 1, 0, 0, 0, 597, 595, 1, 0, 0, 0, 598, 599, 3, 4, 2, 0, 599, 27, 1, 0, 0, 0, 600, 601, 3, 8, 4, 0, 601, 602, 3, 30, 15, 0, 602, 610, 1, 0, 0, 0, 603, 604, 3, 22, 11, 0, 604, 605, 3, 30, 15, 0, 605, 610, 1, 0, 0, 0, 606, 607, 3, 26, 13, 0, 607, 608, 3, 30, 15, 0, 608, 610, 1, 0, 0, 0, 609, 600, 1, 0, 0, 0, 609, 603, 1, 0, 0, 0, 609, 606, 1, 0, 0, 0, 610, 29, 1, 0, 0, 0, 611, 613, 3, 254, 127, 0, 612, 611, 1, 0, 0, 0, 613, 616, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 617, 1, 0, 0, 0, 616, 614, 1, 0, 0, 0, 617, 618, 5, 80, 0, 0, 618, 629, 5, 81, 0, 0, 619, 621, 3, 254, 127, 0, 620, 619, 1, 0, 0, 0, 621, 624, 1, 0, 0, 0, 622, 620, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 625, 1, 0, 0, 0, 624, 622, 1, 0, 0, 0, 625, 626, 5, 80, 0, 0, 626, 628, 5, 81, 0, 0, 627, 622, 1, 0, 0, 0, 628, 631, 1, 0, 0, 0, 629, 627, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 31, 1, 0, 0, 0, 631, 629, 1, 0, 0, 0, 632, 634, 3, 34, 17, 0, 633, 632, 1, 0, 0, 0, 634, 637, 1, 0, 0, 0, 635, 633, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 638, 1, 0, 0, 0, 637, 635, 1, 0, 0, 0, 638, 640, 3, 4, 2, 0, 639, 641, 3, 36, 18, 0, 640, 639, 1, 0, 0, 0, 640, 641, 1, 0, 0, 0, 641, 33, 1, 0, 0, 0, 642, 643, 3, 254, 127, 0, 643, 35, 1, 0, 0, 0, 644, 653, 5, 34, 0, 0, 645, 654, 3, 26, 13, 0, 646, 650, 3, 20, 10, 0, 647, 649, 3, 38, 19, 0, 648, 647, 1, 0, 0, 0, 649, 652, 1, 0, 0, 0, 650, 648, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 654, 1, 0, 0, 0, 652, 650, 1, 0, 0, 0, 653, 645, 1, 0, 0, 0, 653, 646, 1, 0, 0, 0, 654, 37, 1, 0, 0, 0, 655, 656, 5, 108, 0, 0, 656, 657, 3, 24, 12, 0, 657, 39, 1, 0, 0, 0, 658, 659, 5, 90, 0, 0, 659, 660, 3, 42, 21, 0, 660, 661, 5, 89, 0, 0, 661, 41, 1, 0, 0, 0, 662, 667, 3, 44, 22, 0, 663, 664, 5, 83, 0, 0, 664, 666, 3, 44, 22, 0, 665, 663, 1, 0, 0, 0, 666, 669, 1, 0, 0, 0, 667, 665, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 43, 1, 0, 0, 0, 669, 667, 1, 0, 0, 0, 670, 673, 3, 16, 8, 0, 671, 673, 3, 46, 23, 0, 672, 670, 1, 0, 0, 0, 672, 671, 1, 0, 0, 0, 673, 45, 1, 0, 0, 0, 674, 676, 3, 254, 127, 0, 675, 674, 1, 0, 0, 0, 676, 679, 1, 0, 0, 0, 677, 675, 1, 0, 0, 0, 677, 678, 1, 0, 0, 0, 678, 680, 1, 0, 0, 0, 679, 677, 1, 0, 0, 0, 680, 682, 5, 93, 0, 0, 681, 683, 3, 48, 24, 0, 682, 681, 1, 0, 0, 0, 682, 683, 1, 0, 0, 0, 683, 47, 1, 0, 0, 0, 684, 685, 5, 34, 0, 0, 685, 689, 3, 16, 8, 0, 686, 687, 5, 57, 0, 0, 687, 689, 3, 16, 8, 0, 688, 684, 1, 0, 0, 0, 688, 686, 1, 0, 0, 0, 689, 49, 1, 0, 0, 0, 690, 693, 5, 123, 0, 0, 691, 692, 5, 84, 0, 0, 692, 694, 3, 50, 25, 0, 693, 691, 1, 0, 0, 0, 693, 694, 1, 0, 0, 0, 694, 51, 1, 0, 0, 0, 695, 698, 5, 123, 0, 0, 696, 697, 5, 84, 0, 0, 697, 699, 3, 52, 26, 0, 698, 696, 1, 0, 0, 0, 698, 699, 1, 0, 0, 0, 699, 53, 1, 0, 0, 0, 700, 703, 3, 52, 26, 0, 701, 702, 5, 84, 0, 0, 702, 704, 3, 4, 2, 0, 703, 701, 1, 0, 0, 0, 703, 704, 1, 0, 0, 0, 704, 55, 1, 0, 0, 0, 705, 708, 5, 123, 0, 0, 706, 707, 5, 84, 0, 0, 707, 709, 3, 56, 28, 0, 708, 706, 1, 0, 0, 0, 708, 709, 1, 0, 0, 0, 709, 57, 1, 0, 0, 0, 710, 711, 3, 62, 31, 0, 711, 712, 5, 84, 0, 0, 712, 714, 1, 0, 0, 0, 713, 710, 1, 0, 0, 0, 713, 714, 1, 0, 0, 0, 714, 715, 1, 0, 0, 0, 715, 716, 5, 123, 0, 0, 716, 59, 1, 0, 0, 0, 717, 718, 3, 6, 3, 0, 718, 61, 1, 0, 0, 0, 719, 722, 5, 123, 0, 0, 720, 721, 5, 84, 0, 0, 721, 723, 3, 62, 31, 0, 722, 720, 1, 0, 0, 0, 722, 723, 1, 0, 0, 0, 723, 63, 1, 0, 0, 0, 724, 727, 3, 66, 33, 0, 725, 727, 3, 68, 34, 0, 726, 724, 1, 0, 0, 0, 726, 725, 1, 0, 0, 0, 727, 65, 1, 0, 0, 0, 728, 730, 3, 70, 35, 0, 729, 728, 1, 0, 0, 0, 729, 730, 1, 0, 0, 0, 730, 734, 1, 0, 0, 0, 731, 733, 3, 74, 37, 0, 732, 731, 1, 0, 0, 0, 733, 736, 1, 0, 0, 0, 734, 732, 1, 0, 0, 0, 734, 735, 1, 0, 0, 0, 735, 740, 1, 0, 0, 0, 736, 734, 1, 0, 0, 0, 737, 739, 3, 84, 42, 0, 738, 737, 1, 0, 0, 0, 739, 742, 1, 0, 0, 0, 740, 738, 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 67, 1, 0, 0, 0, 742, 740, 1, 0, 0, 0, 743, 745, 3, 74, 37, 0, 744, 743, 1, 0, 0, 0, 745, 748, 1, 0, 0, 0, 746, 744, 1, 0, 0, 0, 746, 747, 1, 0, 0, 0, 747, 749, 1, 0, 0, 0, 748, 746, 1, 0, 0, 0, 749, 750, 3, 86, 43, 0, 750, 69, 1, 0, 0, 0, 751, 753, 3, 72, 36, 0, 752, 751, 1, 0, 0, 0, 753, 756, 1, 0, 0, 0, 754, 752, 1, 0, 0, 0, 754, 755, 1, 0, 0, 0, 755, 757, 1, 0, 0, 0, 756, 754, 1, 0, 0, 0, 757, 758, 5, 49, 0, 0, 758, 763, 5, 123, 0, 0, 759, 760, 5, 84, 0, 0, 760, 762, 5, 123, 0, 0, 761, 759, 1, 0, 0, 0, 762, 765, 1, 0, 0, 0, 763, 761, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 766, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 766, 767, 5, 82, 0, 0, 767, 71, 1, 0, 0, 0, 768, 769, 3, 254, 127, 0, 769, 73, 1, 0, 0, 0, 770, 775, 3, 76, 38, 0, 771, 775, 3, 78, 39, 0, 772, 775, 3, 80, 40, 0, 773, 775, 3, 82, 41, 0, 774, 770, 1, 0, 0, 0, 774, 771, 1, 0, 0, 0, 774, 772, 1, 0, 0, 0, 774, 773, 1, 0, 0, 0, 775, 75, 1, 0, 0, 0, 776, 777, 5, 42, 0, 0, 777, 778, 3, 54, 27, 0, 778, 779, 5, 82, 0, 0, 779, 77, 1, 0, 0, 0, 780, 781, 5, 42, 0, 0, 781, 782, 3, 56, 28, 0, 782, 783, 5, 84, 0, 0, 783, 784, 5, 106, 0, 0, 784, 785, 5, 82, 0, 0, 785, 79, 1, 0, 0, 0, 786, 787, 5, 42, 0, 0, 787, 788, 5, 55, 0, 0, 788, 789, 3, 54, 27, 0, 789, 790, 5, 84, 0, 0, 790, 791, 5, 123, 0, 0, 791, 792, 5, 82, 0, 0, 792, 81, 1, 0, 0, 0, 793, 794, 5, 42, 0, 0, 794, 795, 5, 55, 0, 0, 795, 796, 3, 54, 27, 0, 796, 797, 5, 84, 0, 0, 797, 798, 5, 106, 0, 0, 798, 799, 5, 82, 0, 0, 799, 83, 1, 0, 0, 0, 800, 804, 3, 92, 46, 0, 801, 804, 3, 220, 110, 0, 802, 804, 5, 82, 0, 0, 803, 800, 1, 0, 0, 0, 803, 801, 1, 0, 0, 0, 803, 802, 1, 0, 0, 0, 804, 85, 1, 0, 0, 0, 805, 807, 3, 254, 127, 0, 806, 805, 1, 0, 0, 0, 807, 810, 1, 0, 0, 0, 808, 806, 1, 0, 0, 0, 808, 809, 1, 0, 0, 0, 809, 812, 1, 0, 0, 0, 810, 808, 1, 0, 0, 0, 811, 813, 5, 5, 0, 0, 812, 811, 1, 0, 0, 0, 812, 813, 1, 0, 0, 0, 813, 814, 1, 0, 0, 0, 814, 815, 5, 2, 0, 0, 815, 820, 5, 123, 0, 0, 816, 817, 5, 84, 0, 0, 817, 819, 5, 123, 0, 0, 818, 816, 1, 0, 0, 0, 819, 822, 1, 0, 0, 0, 820, 818, 1, 0, 0, 0, 820, 821, 1, 0, 0, 0, 821, 823, 1, 0, 0, 0, 822, 820, 1, 0, 0, 0, 823, 827, 5, 78, 0, 0, 824, 826, 3, 88, 44, 0, 825, 824, 1, 0, 0, 0, 826, 829, 1, 0, 0, 0, 827, 825, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 830, 1, 0, 0, 0, 829, 827, 1, 0, 0, 0, 830, 831, 5, 79, 0, 0, 831, 87, 1, 0, 0, 0, 832, 836, 5, 10, 0, 0, 833, 835, 3, 90, 45, 0, 834, 833, 1, 0, 0, 0, 835, 838, 1, 0, 0, 0, 836, 834, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 839, 1, 0, 0, 0, 838, 836, 1, 0, 0, 0, 839, 840, 3, 50, 25, 0, 840, 841, 5, 82, 0, 0, 841, 890, 1, 0, 0, 0, 842, 843, 5, 1, 0, 0, 843, 853, 3, 52, 26, 0, 844, 845, 5, 12, 0, 0, 845, 850, 3, 50, 25, 0, 846, 847, 5, 83, 0, 0, 847, 849, 3, 50, 25, 0, 848, 846, 1, 0, 0, 0, 849, 852, 1, 0, 0, 0, 850, 848, 1, 0, 0, 0, 850, 851, 1, 0, 0, 0, 851, 854, 1, 0, 0, 0, 852, 850, 1, 0, 0, 0, 853, 844, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 855, 1, 0, 0, 0, 855, 856, 5, 82, 0, 0, 856, 890, 1, 0, 0, 0, 857, 858, 5, 6, 0, 0, 858, 868, 3, 52, 26, 0, 859, 860, 5, 12, 0, 0, 860, 865, 3, 50, 25, 0, 861, 862, 5, 83, 0, 0, 862, 864, 3, 50, 25, 0, 863, 861, 1, 0, 0, 0, 864, 867, 1, 0, 0, 0, 865, 863, 1, 0, 0, 0, 865, 866, 1, 0, 0, 0, 866, 869, 1, 0, 0, 0, 867, 865, 1, 0, 0, 0, 868, 859, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 871, 5, 82, 0, 0, 871, 890, 1, 0, 0, 0, 872, 873, 5, 14, 0, 0, 873, 874, 3, 54, 27, 0, 874, 875, 5, 82, 0, 0, 875, 890, 1, 0, 0, 0, 876, 877, 5, 8, 0, 0, 877, 878, 3, 54, 27, 0, 878, 879, 5, 16, 0, 0, 879, 884, 3, 54, 27, 0, 880, 881, 5, 83, 0, 0, 881, 883, 3, 54, 27, 0, 882, 880, 1, 0, 0, 0, 883, 886, 1, 0, 0, 0, 884, 882, 1, 0, 0, 0, 884, 885, 1, 0, 0, 0, 885, 887, 1, 0, 0, 0, 886, 884, 1, 0, 0, 0, 887, 888, 5, 82, 0, 0, 888, 890, 1, 0, 0, 0, 889, 832, 1, 0, 0, 0, 889, 842, 1, 0, 0, 0, 889, 857, 1, 0, 0, 0, 889, 872, 1, 0, 0, 0, 889, 876, 1, 0, 0, 0, 890, 89, 1, 0, 0, 0, 891, 892, 7, 3, 0, 0, 892, 91, 1, 0, 0, 0, 893, 897, 3, 94, 47, 0, 894, 897, 3, 190, 95, 0, 895, 897, 3, 202, 101, 0, 896, 893, 1, 0, 0, 0, 896, 894, 1, 0, 0, 0, 896, 895, 1, 0, 0, 0, 897, 93, 1, 0, 0, 0, 898, 900, 3, 96, 48, 0, 899, 898, 1, 0, 0, 0, 900, 903, 1, 0, 0, 0, 901, 899, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, 902, 904, 1, 0, 0, 0, 903, 901, 1, 0, 0, 0, 904, 905, 5, 26, 0, 0, 905, 907, 3, 4, 2, 0, 906, 908, 3, 98, 49, 0, 907, 906, 1, 0, 0, 0, 907, 908, 1, 0, 0, 0, 908, 910, 1, 0, 0, 0, 909, 911, 3, 102, 51, 0, 910, 909, 1, 0, 0, 0, 910, 911, 1, 0, 0, 0, 911, 913, 1, 0, 0, 0, 912, 914, 3, 104, 52, 0, 913, 912, 1, 0, 0, 0, 913, 914, 1, 0, 0, 0, 914, 916, 1, 0, 0, 0, 915, 917, 3, 108, 54, 0, 916, 915, 1, 0, 0, 0, 916, 917, 1, 0, 0, 0, 917, 918, 1, 0, 0, 0, 918, 919, 3, 110, 55, 0, 919, 95, 1, 0, 0, 0, 920, 931, 3, 254, 127, 0, 921, 931, 5, 52, 0, 0, 922, 931, 5, 51, 0, 0, 923, 931, 5, 50, 0, 0, 924, 931, 5, 18, 0, 0, 925, 931, 5, 55, 0, 0, 926, 931, 5, 35, 0, 0, 927, 931, 5, 11, 0, 0, 928, 931, 5, 3, 0, 0, 929, 931, 5, 56, 0, 0, 930, 920, 1, 0, 0, 0, 930, 921, 1, 0, 0, 0, 930, 922, 1, 0, 0, 0, 930, 923, 1, 0, 0, 0, 930, 924, 1, 0, 0, 0, 930, 925, 1, 0, 0, 0, 930, 926, 1, 0, 0, 0, 930, 927, 1, 0, 0, 0, 930, 928, 1, 0, 0, 0, 930, 929, 1, 0, 0, 0, 931, 97, 1, 0, 0, 0, 932, 933, 5, 90, 0, 0, 933, 934, 3, 100, 50, 0, 934, 935, 5, 89, 0, 0, 935, 99, 1, 0, 0, 0, 936, 941, 3, 32, 16, 0, 937, 938, 5, 83, 0, 0, 938, 940, 3, 32, 16, 0, 939, 937, 1, 0, 0, 0, 940, 943, 1, 0, 0, 0, 941, 939, 1, 0, 0, 0, 941, 942, 1, 0, 0, 0, 942, 101, 1, 0, 0, 0, 943, 941, 1, 0, 0, 0, 944, 945, 5, 34, 0, 0, 945, 946, 3, 22, 11, 0, 946, 103, 1, 0, 0, 0, 947, 948, 5, 41, 0, 0, 948, 949, 3, 106, 53, 0, 949, 105, 1, 0, 0, 0, 950, 955, 3, 24, 12, 0, 951, 952, 5, 83, 0, 0, 952, 954, 3, 24, 12, 0, 953, 951, 1, 0, 0, 0, 954, 957, 1, 0, 0, 0, 955, 953, 1, 0, 0, 0, 955, 956, 1, 0, 0, 0, 956, 107, 1, 0, 0, 0, 957, 955, 1, 0, 0, 0, 958, 959, 5, 7, 0, 0, 959, 964, 3, 54, 27, 0, 960, 961, 5, 83, 0, 0, 961, 963, 3, 54, 27, 0, 962, 960, 1, 0, 0, 0, 963, 966, 1, 0, 0, 0, 964, 962, 1, 0, 0, 0, 964, 965, 1, 0, 0, 0, 965, 109, 1, 0, 0, 0, 966, 964, 1, 0, 0, 0, 967, 971, 5, 78, 0, 0, 968, 970, 3, 112, 56, 0, 969, 968, 1, 0, 0, 0, 970, 973, 1, 0, 0, 0, 971, 969, 1, 0, 0, 0, 971, 972, 1, 0, 0, 0, 972, 974, 1, 0, 0, 0, 973, 971, 1, 0, 0, 0, 974, 975, 5, 79, 0, 0, 975, 111, 1, 0, 0, 0, 976, 981, 3, 114, 57, 0, 977, 981, 3, 174, 87, 0, 978, 981, 3, 176, 88, 0, 979, 981, 3, 178, 89, 0, 980, 976, 1, 0, 0, 0, 980, 977, 1, 0, 0, 0, 980, 978, 1, 0, 0, 0, 980, 979, 1, 0, 0, 0, 981, 113, 1, 0, 0, 0, 982, 988, 3, 116, 58, 0, 983, 988, 3, 146, 73, 0, 984, 988, 3, 92, 46, 0, 985, 988, 3, 220, 110, 0, 986, 988, 5, 82, 0, 0, 987, 982, 1, 0, 0, 0, 987, 983, 1, 0, 0, 0, 987, 984, 1, 0, 0, 0, 987, 985, 1, 0, 0, 0, 987, 986, 1, 0, 0, 0, 988, 115, 1, 0, 0, 0, 989, 991, 3, 118, 59, 0, 990, 989, 1, 0, 0, 0, 991, 994, 1, 0, 0, 0, 992, 990, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 995, 1, 0, 0, 0, 994, 992, 1, 0, 0, 0, 995, 996, 3, 128, 64, 0, 996, 997, 3, 120, 60, 0, 997, 998, 5, 82, 0, 0, 998, 117, 1, 0, 0, 0, 999, 1008, 3, 254, 127, 0, 1000, 1008, 5, 52, 0, 0, 1001, 1008, 5, 51, 0, 0, 1002, 1008, 5, 50, 0, 0, 1003, 1008, 5, 55, 0, 0, 1004, 1008, 5, 35, 0, 0, 1005, 1008, 5, 63, 0, 0, 1006, 1008, 5, 66, 0, 0, 1007, 999, 1, 0, 0, 0, 1007, 1000, 1, 0, 0, 0, 1007, 1001, 1, 0, 0, 0, 1007, 1002, 1, 0, 0, 0, 1007, 1003, 1, 0, 0, 0, 1007, 1004, 1, 0, 0, 0, 1007, 1005, 1, 0, 0, 0, 1007, 1006, 1, 0, 0, 0, 1008, 119, 1, 0, 0, 0, 1009, 1014, 3, 122, 61, 0, 1010, 1011, 5, 83, 0, 0, 1011, 1013, 3, 122, 61, 0, 1012, 1010, 1, 0, 0, 0, 1013, 1016, 1, 0, 0, 0, 1014, 1012, 1, 0, 0, 0, 1014, 1015, 1, 0, 0, 0, 1015, 121, 1, 0, 0, 0, 1016, 1014, 1, 0, 0, 0, 1017, 1020, 3, 124, 62, 0, 1018, 1019, 5, 88, 0, 0, 1019, 1021, 3, 126, 63, 0, 1020, 1018, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 123, 1, 0, 0, 0, 1022, 1024, 5, 123, 0, 0, 1023, 1025, 3, 30, 15, 0, 1024, 1023, 1, 0, 0, 0, 1024, 1025, 1, 0, 0, 0, 1025, 125, 1, 0, 0, 0, 1026, 1029, 3, 388, 194, 0, 1027, 1029, 3, 272, 136, 0, 1028, 1026, 1, 0, 0, 0, 1028, 1027, 1, 0, 0, 0, 1029, 127, 1, 0, 0, 0, 1030, 1033, 3, 130, 65, 0, 1031, 1033, 3, 132, 66, 0, 1032, 1030, 1, 0, 0, 0, 1032, 1031, 1, 0, 0, 0, 1033, 129, 1, 0, 0, 0, 1034, 1037, 3, 10, 5, 0, 1035, 1037, 5, 20, 0, 0, 1036, 1034, 1, 0, 0, 0, 1036, 1035, 1, 0, 0, 0, 1037, 131, 1, 0, 0, 0, 1038, 1042, 3, 134, 67, 0, 1039, 1042, 3, 142, 71, 0, 1040, 1042, 3, 144, 72, 0, 1041, 1038, 1, 0, 0, 0, 1041, 1039, 1, 0, 0, 0, 1041, 1040, 1, 0, 0, 0, 1042, 133, 1, 0, 0, 0, 1043, 1044, 3, 52, 26, 0, 1044, 1048, 5, 84, 0, 0, 1045, 1047, 3, 254, 127, 0, 1046, 1045, 1, 0, 0, 0, 1047, 1050, 1, 0, 0, 0, 1048, 1046, 1, 0, 0, 0, 1048, 1049, 1, 0, 0, 0, 1049, 1052, 1, 0, 0, 0, 1050, 1048, 1, 0, 0, 0, 1051, 1043, 1, 0, 0, 0, 1051, 1052, 1, 0, 0, 0, 1052, 1053, 1, 0, 0, 0, 1053, 1055, 3, 4, 2, 0, 1054, 1056, 3, 40, 20, 0, 1055, 1054, 1, 0, 0, 0, 1055, 1056, 1, 0, 0, 0, 1056, 1058, 1, 0, 0, 0, 1057, 1059, 3, 136, 68, 0, 1058, 1057, 1, 0, 0, 0, 1058, 1059, 1, 0, 0, 0, 1059, 135, 1, 0, 0, 0, 1060, 1064, 5, 84, 0, 0, 1061, 1063, 3, 254, 127, 0, 1062, 1061, 1, 0, 0, 0, 1063, 1066, 1, 0, 0, 0, 1064, 1062, 1, 0, 0, 0, 1064, 1065, 1, 0, 0, 0, 1065, 1067, 1, 0, 0, 0, 1066, 1064, 1, 0, 0, 0, 1067, 1069, 3, 4, 2, 0, 1068, 1070, 3, 40, 20, 0, 1069, 1068, 1, 0, 0, 0, 1069, 1070, 1, 0, 0, 0, 1070, 1072, 1, 0, 0, 0, 1071, 1073, 3, 136, 68, 0, 1072, 1071, 1, 0, 0, 0, 1072, 1073, 1, 0, 0, 0, 1073, 137, 1, 0, 0, 0, 1074, 1076, 3, 4, 2, 0, 1075, 1077, 3, 40, 20, 0, 1076, 1075, 1, 0, 0, 0, 1076, 1077, 1, 0, 0, 0, 1077, 1094, 1, 0, 0, 0, 1078, 1081, 3, 52, 26, 0, 1079, 1081, 3, 134, 67, 0, 1080, 1078, 1, 0, 0, 0, 1080, 1079, 1, 0, 0, 0, 1081, 1082, 1, 0, 0, 0, 1082, 1086, 5, 84, 0, 0, 1083, 1085, 3, 254, 127, 0, 1084, 1083, 1, 0, 0, 0, 1085, 1088, 1, 0, 0, 0, 1086, 1084, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1089, 1, 0, 0, 0, 1088, 1086, 1, 0, 0, 0, 1089, 1091, 3, 4, 2, 0, 1090, 1092, 3, 40, 20, 0, 1091, 1090, 1, 0, 0, 0, 1091, 1092, 1, 0, 0, 0, 1092, 1094, 1, 0, 0, 0, 1093, 1074, 1, 0, 0, 0, 1093, 1080, 1, 0, 0, 0, 1094, 139, 1, 0, 0, 0, 1095, 1096, 3, 138, 69, 0, 1096, 141, 1, 0, 0, 0, 1097, 1098, 3, 4, 2, 0, 1098, 143, 1, 0, 0, 0, 1099, 1103, 3, 130, 65, 0, 1100, 1103, 3, 134, 67, 0, 1101, 1103, 3, 142, 71, 0, 1102, 1099, 1, 0, 0, 0, 1102, 1100, 1, 0, 0, 0, 1102, 1101, 1, 0, 0, 0, 1103, 1104, 1, 0, 0, 0, 1104, 1105, 3, 30, 15, 0, 1105, 145, 1, 0, 0, 0, 1106, 1108, 3, 148, 74, 0, 1107, 1106, 1, 0, 0, 0, 1108, 1111, 1, 0, 0, 0, 1109, 1107, 1, 0, 0, 0, 1109, 1110, 1, 0, 0, 0, 1110, 1112, 1, 0, 0, 0, 1111, 1109, 1, 0, 0, 0, 1112, 1113, 3, 150, 75, 0, 1113, 1114, 3, 172, 86, 0, 1114, 147, 1, 0, 0, 0, 1115, 1126, 3, 254, 127, 0, 1116, 1126, 5, 52, 0, 0, 1117, 1126, 5, 51, 0, 0, 1118, 1126, 5, 50, 0, 0, 1119, 1126, 5, 18, 0, 0, 1120, 1126, 5, 55, 0, 0, 1121, 1126, 5, 35, 0, 0, 1122, 1126, 5, 59, 0, 0, 1123, 1126, 5, 47, 0, 0, 1124, 1126, 5, 56, 0, 0, 1125, 1115, 1, 0, 0, 0, 1125, 1116, 1, 0, 0, 0, 1125, 1117, 1, 0, 0, 0, 1125, 1118, 1, 0, 0, 0, 1125, 1119, 1, 0, 0, 0, 1125, 1120, 1, 0, 0, 0, 1125, 1121, 1, 0, 0, 0, 1125, 1122, 1, 0, 0, 0, 1125, 1123, 1, 0, 0, 0, 1125, 1124, 1, 0, 0, 0, 1126, 149, 1, 0, 0, 0, 1127, 1131, 3, 98, 49, 0, 1128, 1130, 3, 254, 127, 0, 1129, 1128, 1, 0, 0, 0, 1130, 1133, 1, 0, 0, 0, 1131, 1129, 1, 0, 0, 0, 1131, 1132, 1, 0, 0, 0, 1132, 1135, 1, 0, 0, 0, 1133, 1131, 1, 0, 0, 0, 1134, 1127, 1, 0, 0, 0, 1134, 1135, 1, 0, 0, 0, 1135, 1136, 1, 0, 0, 0, 1136, 1137, 3, 152, 76, 0, 1137, 1139, 3, 154, 77, 0, 1138, 1140, 3, 166, 83, 0, 1139, 1138, 1, 0, 0, 0, 1139, 1140, 1, 0, 0, 0, 1140, 151, 1, 0, 0, 0, 1141, 1144, 3, 128, 64, 0, 1142, 1144, 5, 65, 0, 0, 1143, 1141, 1, 0, 0, 0, 1143, 1142, 1, 0, 0, 0, 1144, 153, 1, 0, 0, 0, 1145, 1146, 5, 123, 0, 0, 1146, 1150, 5, 76, 0, 0, 1147, 1148, 3, 156, 78, 0, 1148, 1149, 5, 83, 0, 0, 1149, 1151, 1, 0, 0, 0, 1150, 1147, 1, 0, 0, 0, 1150, 1151, 1, 0, 0, 0, 1151, 1153, 1, 0, 0, 0, 1152, 1154, 3, 158, 79, 0, 1153, 1152, 1, 0, 0, 0, 1153, 1154, 1, 0, 0, 0, 1154, 1155, 1, 0, 0, 0, 1155, 1157, 5, 77, 0, 0, 1156, 1158, 3, 30, 15, 0, 1157, 1156, 1, 0, 0, 0, 1157, 1158, 1, 0, 0, 0, 1158, 155, 1, 0, 0, 0, 1159, 1161, 3, 254, 127, 0, 1160, 1159, 1, 0, 0, 0, 1161, 1164, 1, 0, 0, 0, 1162, 1160, 1, 0, 0, 0, 1162, 1163, 1, 0, 0, 0, 1163, 1165, 1, 0, 0, 0, 1164, 1162, 1, 0, 0, 0, 1165, 1168, 3, 128, 64, 0, 1166, 1167, 5, 123, 0, 0, 1167, 1169, 5, 84, 0, 0, 1168, 1166, 1, 0, 0, 0, 1168, 1169, 1, 0, 0, 0, 1169, 1170, 1, 0, 0, 0, 1170, 1171, 5, 60, 0, 0, 1171, 157, 1, 0, 0, 0, 1172, 1177, 3, 160, 80, 0, 1173, 1174, 5, 83, 0, 0, 1174, 1176, 3, 160, 80, 0, 1175, 1173, 1, 0, 0, 0, 1176, 1179, 1, 0, 0, 0, 1177, 1175, 1, 0, 0, 0, 1177, 1178, 1, 0, 0, 0, 1178, 159, 1, 0, 0, 0, 1179, 1177, 1, 0, 0, 0, 1180, 1182, 3, 164, 82, 0, 1181, 1180, 1, 0, 0, 0, 1182, 1185, 1, 0, 0, 0, 1183, 1181, 1, 0, 0, 0, 1183, 1184, 1, 0, 0, 0, 1184, 1186, 1, 0, 0, 0, 1185, 1183, 1, 0, 0, 0, 1186, 1187, 3, 128, 64, 0, 1187, 1188, 3, 124, 62, 0, 1188, 1191, 1, 0, 0, 0, 1189, 1191, 3, 162, 81, 0, 1190, 1183, 1, 0, 0, 0, 1190, 1189, 1, 0, 0, 0, 1191, 161, 1, 0, 0, 0, 1192, 1194, 3, 164, 82, 0, 1193, 1192, 1, 0, 0, 0, 1194, 1197, 1, 0, 0, 0, 1195, 1193, 1, 0, 0, 0, 1195, 1196, 1, 0, 0, 0, 1196, 1198, 1, 0, 0, 0, 1197, 1195, 1, 0, 0, 0, 1198, 1202, 3, 128, 64, 0, 1199, 1201, 3, 254, 127, 0, 1200, 1199, 1, 0, 0, 0, 1201, 1204, 1, 0, 0, 0, 1202, 1200, 1, 0, 0, 0, 1202, 1203, 1, 0, 0, 0, 1203, 1205, 1, 0, 0, 0, 1204, 1202, 1, 0, 0, 0, 1205, 1206, 5, 85, 0, 0, 1206, 1207, 5, 123, 0, 0, 1207, 163, 1, 0, 0, 0, 1208, 1211, 3, 254, 127, 0, 1209, 1211, 5, 35, 0, 0, 1210, 1208, 1, 0, 0, 0, 1210, 1209, 1, 0, 0, 0, 1211, 165, 1, 0, 0, 0, 1212, 1213, 5, 62, 0, 0, 1213, 1214, 3, 168, 84, 0, 1214, 167, 1, 0, 0, 0, 1215, 1220, 3, 170, 85, 0, 1216, 1217, 5, 83, 0, 0, 1217, 1219, 3, 170, 85, 0, 1218, 1216, 1, 0, 0, 0, 1219, 1222, 1, 0, 0, 0, 1220, 1218, 1, 0, 0, 0, 1220, 1221, 1, 0, 0, 0, 1221, 169, 1, 0, 0, 0, 1222, 1220, 1, 0, 0, 0, 1223, 1226, 3, 22, 11, 0, 1224, 1226, 3, 26, 13, 0, 1225, 1223, 1, 0, 0, 0, 1225, 1224, 1, 0, 0, 0, 1226, 171, 1, 0, 0, 0, 1227, 1230, 3, 276, 138, 0, 1228, 1230, 5, 82, 0, 0, 1229, 1227, 1, 0, 0, 0, 1229, 1228, 1, 0, 0, 0, 1230, 173, 1, 0, 0, 0, 1231, 1232, 3, 276, 138, 0, 1232, 175, 1, 0, 0, 0, 1233, 1234, 5, 55, 0, 0, 1234, 1235, 3, 276, 138, 0, 1235, 177, 1, 0, 0, 0, 1236, 1238, 3, 180, 90, 0, 1237, 1236, 1, 0, 0, 0, 1238, 1241, 1, 0, 0, 0, 1239, 1237, 1, 0, 0, 0, 1239, 1240, 1, 0, 0, 0, 1240, 1242, 1, 0, 0, 0, 1241, 1239, 1, 0, 0, 0, 1242, 1244, 3, 182, 91, 0, 1243, 1245, 3, 166, 83, 0, 1244, 1243, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 1246, 1, 0, 0, 0, 1246, 1247, 3, 186, 93, 0, 1247, 179, 1, 0, 0, 0, 1248, 1253, 3, 254, 127, 0, 1249, 1253, 5, 52, 0, 0, 1250, 1253, 5, 51, 0, 0, 1251, 1253, 5, 50, 0, 0, 1252, 1248, 1, 0, 0, 0, 1252, 1249, 1, 0, 0, 0, 1252, 1250, 1, 0, 0, 0, 1252, 1251, 1, 0, 0, 0, 1253, 181, 1, 0, 0, 0, 1254, 1256, 3, 98, 49, 0, 1255, 1254, 1, 0, 0, 0, 1255, 1256, 1, 0, 0, 0, 1256, 1257, 1, 0, 0, 0, 1257, 1258, 3, 184, 92, 0, 1258, 1262, 5, 76, 0, 0, 1259, 1260, 3, 156, 78, 0, 1260, 1261, 5, 83, 0, 0, 1261, 1263, 1, 0, 0, 0, 1262, 1259, 1, 0, 0, 0, 1262, 1263, 1, 0, 0, 0, 1263, 1265, 1, 0, 0, 0, 1264, 1266, 3, 158, 79, 0, 1265, 1264, 1, 0, 0, 0, 1265, 1266, 1, 0, 0, 0, 1266, 1267, 1, 0, 0, 0, 1267, 1268, 5, 77, 0, 0, 1268, 183, 1, 0, 0, 0, 1269, 1270, 3, 4, 2, 0, 1270, 185, 1, 0, 0, 0, 1271, 1273, 5, 78, 0, 0, 1272, 1274, 3, 188, 94, 0, 1273, 1272, 1, 0, 0, 0, 1273, 1274, 1, 0, 0, 0, 1274, 1276, 1, 0, 0, 0, 1275, 1277, 3, 278, 139, 0, 1276, 1275, 1, 0, 0, 0, 1276, 1277, 1, 0, 0, 0, 1277, 1278, 1, 0, 0, 0, 1278, 1279, 5, 79, 0, 0, 1279, 187, 1, 0, 0, 0, 1280, 1282, 3, 40, 20, 0, 1281, 1280, 1, 0, 0, 0, 1281, 1282, 1, 0, 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1284, 7, 4, 0, 0, 1284, 1286, 5, 76, 0, 0, 1285, 1287, 3, 422, 211, 0, 1286, 1285, 1, 0, 0, 0, 1286, 1287, 1, 0, 0, 0, 1287, 1288, 1, 0, 0, 0, 1288, 1289, 5, 77, 0, 0, 1289, 1307, 5, 82, 0, 0, 1290, 1293, 3, 58, 29, 0, 1291, 1293, 3, 390, 195, 0, 1292, 1290, 1, 0, 0, 0, 1292, 1291, 1, 0, 0, 0, 1293, 1294, 1, 0, 0, 0, 1294, 1296, 5, 84, 0, 0, 1295, 1297, 3, 40, 20, 0, 1296, 1295, 1, 0, 0, 0, 1296, 1297, 1, 0, 0, 0, 1297, 1298, 1, 0, 0, 0, 1298, 1299, 5, 57, 0, 0, 1299, 1301, 5, 76, 0, 0, 1300, 1302, 3, 422, 211, 0, 1301, 1300, 1, 0, 0, 0, 1301, 1302, 1, 0, 0, 0, 1302, 1303, 1, 0, 0, 0, 1303, 1304, 5, 77, 0, 0, 1304, 1305, 5, 82, 0, 0, 1305, 1307, 1, 0, 0, 0, 1306, 1281, 1, 0, 0, 0, 1306, 1292, 1, 0, 0, 0, 1307, 189, 1, 0, 0, 0, 1308, 1310, 3, 96, 48, 0, 1309, 1308, 1, 0, 0, 0, 1310, 1313, 1, 0, 0, 0, 1311, 1309, 1, 0, 0, 0, 1311, 1312, 1, 0, 0, 0, 1312, 1314, 1, 0, 0, 0, 1313, 1311, 1, 0, 0, 0, 1314, 1315, 5, 33, 0, 0, 1315, 1317, 3, 4, 2, 0, 1316, 1318, 3, 104, 52, 0, 1317, 1316, 1, 0, 0, 0, 1317, 1318, 1, 0, 0, 0, 1318, 1319, 1, 0, 0, 0, 1319, 1320, 3, 192, 96, 0, 1320, 191, 1, 0, 0, 0, 1321, 1323, 5, 78, 0, 0, 1322, 1324, 3, 194, 97, 0, 1323, 1322, 1, 0, 0, 0, 1323, 1324, 1, 0, 0, 0, 1324, 1326, 1, 0, 0, 0, 1325, 1327, 5, 83, 0, 0, 1326, 1325, 1, 0, 0, 0, 1326, 1327, 1, 0, 0, 0, 1327, 1329, 1, 0, 0, 0, 1328, 1330, 3, 200, 100, 0, 1329, 1328, 1, 0, 0, 0, 1329, 1330, 1, 0, 0, 0, 1330, 1331, 1, 0, 0, 0, 1331, 1332, 5, 79, 0, 0, 1332, 193, 1, 0, 0, 0, 1333, 1338, 3, 196, 98, 0, 1334, 1335, 5, 83, 0, 0, 1335, 1337, 3, 196, 98, 0, 1336, 1334, 1, 0, 0, 0, 1337, 1340, 1, 0, 0, 0, 1338, 1336, 1, 0, 0, 0, 1338, 1339, 1, 0, 0, 0, 1339, 195, 1, 0, 0, 0, 1340, 1338, 1, 0, 0, 0, 1341, 1343, 3, 198, 99, 0, 1342, 1341, 1, 0, 0, 0, 1343, 1346, 1, 0, 0, 0, 1344, 1342, 1, 0, 0, 0, 1344, 1345, 1, 0, 0, 0, 1345, 1347, 1, 0, 0, 0, 1346, 1344, 1, 0, 0, 0, 1347, 1353, 5, 123, 0, 0, 1348, 1350, 5, 76, 0, 0, 1349, 1351, 3, 422, 211, 0, 1350, 1349, 1, 0, 0, 0, 1350, 1351, 1, 0, 0, 0, 1351, 1352, 1, 0, 0, 0, 1352, 1354, 5, 77, 0, 0, 1353, 1348, 1, 0, 0, 0, 1353, 1354, 1, 0, 0, 0, 1354, 1356, 1, 0, 0, 0, 1355, 1357, 3, 110, 55, 0, 1356, 1355, 1, 0, 0, 0, 1356, 1357, 1, 0, 0, 0, 1357, 197, 1, 0, 0, 0, 1358, 1359, 3, 254, 127, 0, 1359, 199, 1, 0, 0, 0, 1360, 1364, 5, 82, 0, 0, 1361, 1363, 3, 112, 56, 0, 1362, 1361, 1, 0, 0, 0, 1363, 1366, 1, 0, 0, 0, 1364, 1362, 1, 0, 0, 0, 1364, 1365, 1, 0, 0, 0, 1365, 201, 1, 0, 0, 0, 1366, 1364, 1, 0, 0, 0, 1367, 1369, 3, 96, 48, 0, 1368, 1367, 1, 0, 0, 0, 1369, 1372, 1, 0, 0, 0, 1370, 1368, 1, 0, 0, 0, 1370, 1371, 1, 0, 0, 0, 1371, 1373, 1, 0, 0, 0, 1372, 1370, 1, 0, 0, 0, 1373, 1374, 5, 9, 0, 0, 1374, 1376, 3, 4, 2, 0, 1375, 1377, 3, 98, 49, 0, 1376, 1375, 1, 0, 0, 0, 1376, 1377, 1, 0, 0, 0, 1377, 1378, 1, 0, 0, 0, 1378, 1380, 3, 204, 102, 0, 1379, 1381, 3, 104, 52, 0, 1380, 1379, 1, 0, 0, 0, 1380, 1381, 1, 0, 0, 0, 1381, 1382, 1, 0, 0, 0, 1382, 1383, 3, 214, 107, 0, 1383, 203, 1, 0, 0, 0, 1384, 1386, 5, 76, 0, 0, 1385, 1387, 3, 206, 103, 0, 1386, 1385, 1, 0, 0, 0, 1386, 1387, 1, 0, 0, 0, 1387, 1388, 1, 0, 0, 0, 1388, 1389, 5, 77, 0, 0, 1389, 205, 1, 0, 0, 0, 1390, 1395, 3, 208, 104, 0, 1391, 1392, 5, 83, 0, 0, 1392, 1394, 3, 208, 104, 0, 1393, 1391, 1, 0, 0, 0, 1394, 1397, 1, 0, 0, 0, 1395, 1393, 1, 0, 0, 0, 1395, 1396, 1, 0, 0, 0, 1396, 207, 1, 0, 0, 0, 1397, 1395, 1, 0, 0, 0, 1398, 1400, 3, 212, 106, 0, 1399, 1398, 1, 0, 0, 0, 1400, 1403, 1, 0, 0, 0, 1401, 1399, 1, 0, 0, 0, 1401, 1402, 1, 0, 0, 0, 1402, 1404, 1, 0, 0, 0, 1403, 1401, 1, 0, 0, 0, 1404, 1405, 3, 128, 64, 0, 1405, 1406, 5, 123, 0, 0, 1406, 1409, 1, 0, 0, 0, 1407, 1409, 3, 210, 105, 0, 1408, 1401, 1, 0, 0, 0, 1408, 1407, 1, 0, 0, 0, 1409, 209, 1, 0, 0, 0, 1410, 1412, 3, 212, 106, 0, 1411, 1410, 1, 0, 0, 0, 1412, 1415, 1, 0, 0, 0, 1413, 1411, 1, 0, 0, 0, 1413, 1414, 1, 0, 0, 0, 1414, 1416, 1, 0, 0, 0, 1415, 1413, 1, 0, 0, 0, 1416, 1420, 3, 128, 64, 0, 1417, 1419, 3, 254, 127, 0, 1418, 1417, 1, 0, 0, 0, 1419, 1422, 1, 0, 0, 0, 1420, 1418, 1, 0, 0, 0, 1420, 1421, 1, 0, 0, 0, 1421, 1423, 1, 0, 0, 0, 1422, 1420, 1, 0, 0, 0, 1423, 1424, 5, 85, 0, 0, 1424, 1425, 5, 123, 0, 0, 1425, 211, 1, 0, 0, 0, 1426, 1427, 3, 254, 127, 0, 1427, 213, 1, 0, 0, 0, 1428, 1432, 5, 78, 0, 0, 1429, 1431, 3, 216, 108, 0, 1430, 1429, 1, 0, 0, 0, 1431, 1434, 1, 0, 0, 0, 1432, 1430, 1, 0, 0, 0, 1432, 1433, 1, 0, 0, 0, 1433, 1435, 1, 0, 0, 0, 1434, 1432, 1, 0, 0, 0, 1435, 1436, 5, 79, 0, 0, 1436, 215, 1, 0, 0, 0, 1437, 1440, 3, 112, 56, 0, 1438, 1440, 3, 218, 109, 0, 1439, 1437, 1, 0, 0, 0, 1439, 1438, 1, 0, 0, 0, 1440, 217, 1, 0, 0, 0, 1441, 1443, 3, 180, 90, 0, 1442, 1441, 1, 0, 0, 0, 1443, 1446, 1, 0, 0, 0, 1444, 1442, 1, 0, 0, 0, 1444, 1445, 1, 0, 0, 0, 1445, 1447, 1, 0, 0, 0, 1446, 1444, 1, 0, 0, 0, 1447, 1448, 3, 184, 92, 0, 1448, 1449, 3, 186, 93, 0, 1449, 219, 1, 0, 0, 0, 1450, 1453, 3, 222, 111, 0, 1451, 1453, 3, 242, 121, 0, 1452, 1450, 1, 0, 0, 0, 1452, 1451, 1, 0, 0, 0, 1453, 221, 1, 0, 0, 0, 1454, 1456, 3, 224, 112, 0, 1455, 1454, 1, 0, 0, 0, 1456, 1459, 1, 0, 0, 0, 1457, 1455, 1, 0, 0, 0, 1457, 1458, 1, 0, 0, 0, 1458, 1460, 1, 0, 0, 0, 1459, 1457, 1, 0, 0, 0, 1460, 1461, 5, 45, 0, 0, 1461, 1463, 3, 4, 2, 0, 1462, 1464, 3, 98, 49, 0, 1463, 1462, 1, 0, 0, 0, 1463, 1464, 1, 0, 0, 0, 1464, 1466, 1, 0, 0, 0, 1465, 1467, 3, 226, 113, 0, 1466, 1465, 1, 0, 0, 0, 1466, 1467, 1, 0, 0, 0, 1467, 1469, 1, 0, 0, 0, 1468, 1470, 3, 228, 114, 0, 1469, 1468, 1, 0, 0, 0, 1469, 1470, 1, 0, 0, 0, 1470, 1471, 1, 0, 0, 0, 1471, 1472, 3, 230, 115, 0, 1472, 223, 1, 0, 0, 0, 1473, 1483, 3, 254, 127, 0, 1474, 1483, 5, 52, 0, 0, 1475, 1483, 5, 51, 0, 0, 1476, 1483, 5, 50, 0, 0, 1477, 1483, 5, 18, 0, 0, 1478, 1483, 5, 55, 0, 0, 1479, 1483, 5, 11, 0, 0, 1480, 1483, 5, 3, 0, 0, 1481, 1483, 5, 56, 0, 0, 1482, 1473, 1, 0, 0, 0, 1482, 1474, 1, 0, 0, 0, 1482, 1475, 1, 0, 0, 0, 1482, 1476, 1, 0, 0, 0, 1482, 1477, 1, 0, 0, 0, 1482, 1478, 1, 0, 0, 0, 1482, 1479, 1, 0, 0, 0, 1482, 1480, 1, 0, 0, 0, 1482, 1481, 1, 0, 0, 0, 1483, 225, 1, 0, 0, 0, 1484, 1485, 5, 34, 0, 0, 1485, 1486, 3, 106, 53, 0, 1486, 227, 1, 0, 0, 0, 1487, 1488, 5, 7, 0, 0, 1488, 1493, 3, 54, 27, 0, 1489, 1490, 5, 83, 0, 0, 1490, 1492, 3, 54, 27, 0, 1491, 1489, 1, 0, 0, 0, 1492, 1495, 1, 0, 0, 0, 1493, 1491, 1, 0, 0, 0, 1493, 1494, 1, 0, 0, 0, 1494, 229, 1, 0, 0, 0, 1495, 1493, 1, 0, 0, 0, 1496, 1500, 5, 78, 0, 0, 1497, 1499, 3, 232, 116, 0, 1498, 1497, 1, 0, 0, 0, 1499, 1502, 1, 0, 0, 0, 1500, 1498, 1, 0, 0, 0, 1500, 1501, 1, 0, 0, 0, 1501, 1503, 1, 0, 0, 0, 1502, 1500, 1, 0, 0, 0, 1503, 1504, 5, 79, 0, 0, 1504, 231, 1, 0, 0, 0, 1505, 1511, 3, 234, 117, 0, 1506, 1511, 3, 238, 119, 0, 1507, 1511, 3, 92, 46, 0, 1508, 1511, 3, 220, 110, 0, 1509, 1511, 5, 82, 0, 0, 1510, 1505, 1, 0, 0, 0, 1510, 1506, 1, 0, 0, 0, 1510, 1507, 1, 0, 0, 0, 1510, 1508, 1, 0, 0, 0, 1510, 1509, 1, 0, 0, 0, 1511, 233, 1, 0, 0, 0, 1512, 1514, 3, 236, 118, 0, 1513, 1512, 1, 0, 0, 0, 1514, 1517, 1, 0, 0, 0, 1515, 1513, 1, 0, 0, 0, 1515, 1516, 1, 0, 0, 0, 1516, 1518, 1, 0, 0, 0, 1517, 1515, 1, 0, 0, 0, 1518, 1519, 3, 128, 64, 0, 1519, 1520, 3, 120, 60, 0, 1520, 1521, 5, 82, 0, 0, 1521, 235, 1, 0, 0, 0, 1522, 1527, 3, 254, 127, 0, 1523, 1527, 5, 52, 0, 0, 1524, 1527, 5, 55, 0, 0, 1525, 1527, 5, 35, 0, 0, 1526, 1522, 1, 0, 0, 0, 1526, 1523, 1, 0, 0, 0, 1526, 1524, 1, 0, 0, 0, 1526, 1525, 1, 0, 0, 0, 1527, 237, 1, 0, 0, 0, 1528, 1530, 3, 240, 120, 0, 1529, 1528, 1, 0, 0, 0, 1530, 1533, 1, 0, 0, 0, 1531, 1529, 1, 0, 0, 0, 1531, 1532, 1, 0, 0, 0, 1532, 1534, 1, 0, 0, 0, 1533, 1531, 1, 0, 0, 0, 1534, 1535, 3, 150, 75, 0, 1535, 1536, 3, 172, 86, 0, 1536, 239, 1, 0, 0, 0, 1537, 1545, 3, 254, 127, 0, 1538, 1545, 5, 52, 0, 0, 1539, 1545, 5, 50, 0, 0, 1540, 1545, 5, 18, 0, 0, 1541, 1545, 5, 29, 0, 0, 1542, 1545, 5, 55, 0, 0, 1543, 1545, 5, 56, 0, 0, 1544, 1537, 1, 0, 0, 0, 1544, 1538, 1, 0, 0, 0, 1544, 1539, 1, 0, 0, 0, 1544, 1540, 1, 0, 0, 0, 1544, 1541, 1, 0, 0, 0, 1544, 1542, 1, 0, 0, 0, 1544, 1543, 1, 0, 0, 0, 1545, 241, 1, 0, 0, 0, 1546, 1548, 3, 224, 112, 0, 1547, 1546, 1, 0, 0, 0, 1548, 1551, 1, 0, 0, 0, 1549, 1547, 1, 0, 0, 0, 1549, 1550, 1, 0, 0, 0, 1550, 1552, 1, 0, 0, 0, 1551, 1549, 1, 0, 0, 0, 1552, 1553, 5, 86, 0, 0, 1553, 1554, 5, 45, 0, 0, 1554, 1555, 3, 4, 2, 0, 1555, 1556, 3, 244, 122, 0, 1556, 243, 1, 0, 0, 0, 1557, 1561, 5, 78, 0, 0, 1558, 1560, 3, 246, 123, 0, 1559, 1558, 1, 0, 0, 0, 1560, 1563, 1, 0, 0, 0, 1561, 1559, 1, 0, 0, 0, 1561, 1562, 1, 0, 0, 0, 1562, 1564, 1, 0, 0, 0, 1563, 1561, 1, 0, 0, 0, 1564, 1565, 5, 79, 0, 0, 1565, 245, 1, 0, 0, 0, 1566, 1572, 3, 248, 124, 0, 1567, 1572, 3, 234, 117, 0, 1568, 1572, 3, 92, 46, 0, 1569, 1572, 3, 220, 110, 0, 1570, 1572, 5, 82, 0, 0, 1571, 1566, 1, 0, 0, 0, 1571, 1567, 1, 0, 0, 0, 1571, 1568, 1, 0, 0, 0, 1571, 1569, 1, 0, 0, 0, 1571, 1570, 1, 0, 0, 0, 1572, 247, 1, 0, 0, 0, 1573, 1575, 3, 250, 125, 0, 1574, 1573, 1, 0, 0, 0, 1575, 1578, 1, 0, 0, 0, 1576, 1574, 1, 0, 0, 0, 1576, 1577, 1, 0, 0, 0, 1577, 1579, 1, 0, 0, 0, 1578, 1576, 1, 0, 0, 0, 1579, 1580, 3, 128, 64, 0, 1580, 1581, 5, 123, 0, 0, 1581, 1582, 5, 76, 0, 0, 1582, 1584, 5, 77, 0, 0, 1583, 1585, 3, 30, 15, 0, 1584, 1583, 1, 0, 0, 0, 1584, 1585, 1, 0, 0, 0, 1585, 1587, 1, 0, 0, 0, 1586, 1588, 3, 252, 126, 0, 1587, 1586, 1, 0, 0, 0, 1587, 1588, 1, 0, 0, 0, 1588, 1589, 1, 0, 0, 0, 1589, 1590, 5, 82, 0, 0, 1590, 249, 1, 0, 0, 0, 1591, 1595, 3, 254, 127, 0, 1592, 1595, 5, 52, 0, 0, 1593, 1595, 5, 18, 0, 0, 1594, 1591, 1, 0, 0, 0, 1594, 1592, 1, 0, 0, 0, 1594, 1593, 1, 0, 0, 0, 1595, 251, 1, 0, 0, 0, 1596, 1597, 5, 29, 0, 0, 1597, 1598, 3, 262, 131, 0, 1598, 253, 1, 0, 0, 0, 1599, 1603, 3, 256, 128, 0, 1600, 1603, 3, 268, 134, 0, 1601, 1603, 3, 270, 135, 0, 1602, 1599, 1, 0, 0, 0, 1602, 1600, 1, 0, 0, 0, 1602, 1601, 1, 0, 0, 0, 1603, 255, 1, 0, 0, 0, 1604, 1605, 5, 86, 0, 0, 1605, 1606, 3, 54, 27, 0, 1606, 1608, 5, 76, 0, 0, 1607, 1609, 3, 258, 129, 0, 1608, 1607, 1, 0, 0, 0, 1608, 1609, 1, 0, 0, 0, 1609, 1610, 1, 0, 0, 0, 1610, 1611, 5, 77, 0, 0, 1611, 257, 1, 0, 0, 0, 1612, 1617, 3, 260, 130, 0, 1613, 1614, 5, 83, 0, 0, 1614, 1616, 3, 260, 130, 0, 1615, 1613, 1, 0, 0, 0, 1616, 1619, 1, 0, 0, 0, 1617, 1615, 1, 0, 0, 0, 1617, 1618, 1, 0, 0, 0, 1618, 259, 1, 0, 0, 0, 1619, 1617, 1, 0, 0, 0, 1620, 1621, 5, 123, 0, 0, 1621, 1622, 5, 88, 0, 0, 1622, 1623, 3, 262, 131, 0, 1623, 261, 1, 0, 0, 0, 1624, 1628, 3, 464, 232, 0, 1625, 1628, 3, 264, 132, 0, 1626, 1628, 3, 254, 127, 0, 1627, 1624, 1, 0, 0, 0, 1627, 1625, 1, 0, 0, 0, 1627, 1626, 1, 0, 0, 0, 1628, 263, 1, 0, 0, 0, 1629, 1631, 5, 78, 0, 0, 1630, 1632, 3, 266, 133, 0, 1631, 1630, 1, 0, 0, 0, 1631, 1632, 1, 0, 0, 0, 1632, 1634, 1, 0, 0, 0, 1633, 1635, 5, 83, 0, 0, 1634, 1633, 1, 0, 0, 0, 1634, 1635, 1, 0, 0, 0, 1635, 1636, 1, 0, 0, 0, 1636, 1637, 5, 79, 0, 0, 1637, 265, 1, 0, 0, 0, 1638, 1643, 3, 262, 131, 0, 1639, 1640, 5, 83, 0, 0, 1640, 1642, 3, 262, 131, 0, 1641, 1639, 1, 0, 0, 0, 1642, 1645, 1, 0, 0, 0, 1643, 1641, 1, 0, 0, 0, 1643, 1644, 1, 0, 0, 0, 1644, 267, 1, 0, 0, 0, 1645, 1643, 1, 0, 0, 0, 1646, 1647, 5, 86, 0, 0, 1647, 1648, 3, 54, 27, 0, 1648, 269, 1, 0, 0, 0, 1649, 1650, 5, 86, 0, 0, 1650, 1651, 3, 54, 27, 0, 1651, 1652, 5, 76, 0, 0, 1652, 1653, 3, 262, 131, 0, 1653, 1654, 5, 77, 0, 0, 1654, 271, 1, 0, 0, 0, 1655, 1657, 5, 78, 0, 0, 1656, 1658, 3, 274, 137, 0, 1657, 1656, 1, 0, 0, 0, 1657, 1658, 1, 0, 0, 0, 1658, 1660, 1, 0, 0, 0, 1659, 1661, 5, 83, 0, 0, 1660, 1659, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1663, 5, 79, 0, 0, 1663, 273, 1, 0, 0, 0, 1664, 1669, 3, 126, 63, 0, 1665, 1666, 5, 83, 0, 0, 1666, 1668, 3, 126, 63, 0, 1667, 1665, 1, 0, 0, 0, 1668, 1671, 1, 0, 0, 0, 1669, 1667, 1, 0, 0, 0, 1669, 1670, 1, 0, 0, 0, 1670, 275, 1, 0, 0, 0, 1671, 1669, 1, 0, 0, 0, 1672, 1674, 5, 78, 0, 0, 1673, 1675, 3, 278, 139, 0, 1674, 1673, 1, 0, 0, 0, 1674, 1675, 1, 0, 0, 0, 1675, 1676, 1, 0, 0, 0, 1676, 1677, 5, 79, 0, 0, 1677, 277, 1, 0, 0, 0, 1678, 1682, 3, 280, 140, 0, 1679, 1681, 3, 280, 140, 0, 1680, 1679, 1, 0, 0, 0, 1681, 1684, 1, 0, 0, 0, 1682, 1680, 1, 0, 0, 0, 1682, 1683, 1, 0, 0, 0, 1683, 279, 1, 0, 0, 0, 1684, 1682, 1, 0, 0, 0, 1685, 1689, 3, 282, 141, 0, 1686, 1689, 3, 288, 144, 0, 1687, 1689, 3, 290, 145, 0, 1688, 1685, 1, 0, 0, 0, 1688, 1686, 1, 0, 0, 0, 1688, 1687, 1, 0, 0, 0, 1689, 281, 1, 0, 0, 0, 1690, 1693, 3, 92, 46, 0, 1691, 1693, 3, 222, 111, 0, 1692, 1690, 1, 0, 0, 0, 1692, 1691, 1, 0, 0, 0, 1693, 283, 1, 0, 0, 0, 1694, 1696, 3, 164, 82, 0, 1695, 1694, 1, 0, 0, 0, 1696, 1699, 1, 0, 0, 0, 1697, 1695, 1, 0, 0, 0, 1697, 1698, 1, 0, 0, 0, 1698, 1700, 1, 0, 0, 0, 1699, 1697, 1, 0, 0, 0, 1700, 1702, 3, 286, 143, 0, 1701, 1703, 3, 120, 60, 0, 1702, 1701, 1, 0, 0, 0, 1702, 1703, 1, 0, 0, 0, 1703, 285, 1, 0, 0, 0, 1704, 1707, 3, 128, 64, 0, 1705, 1707, 5, 15, 0, 0, 1706, 1704, 1, 0, 0, 0, 1706, 1705, 1, 0, 0, 0, 1707, 287, 1, 0, 0, 0, 1708, 1709, 3, 284, 142, 0, 1709, 1710, 5, 82, 0, 0, 1710, 289, 1, 0, 0, 0, 1711, 1718, 3, 294, 147, 0, 1712, 1718, 3, 298, 149, 0, 1713, 1718, 3, 306, 153, 0, 1714, 1718, 3, 308, 154, 0, 1715, 1718, 3, 326, 163, 0, 1716, 1718, 3, 332, 166, 0, 1717, 1711, 1, 0, 0, 0, 1717, 1712, 1, 0, 0, 0, 1717, 1713, 1, 0, 0, 0, 1717, 1714, 1, 0, 0, 0, 1717, 1715, 1, 0, 0, 0, 1717, 1716, 1, 0, 0, 0, 1718, 291, 1, 0, 0, 0, 1719, 1725, 3, 294, 147, 0, 1720, 1725, 3, 300, 150, 0, 1721, 1725, 3, 310, 155, 0, 1722, 1725, 3, 328, 164, 0, 1723, 1725, 3, 334, 167, 0, 1724, 1719, 1, 0, 0, 0, 1724, 1720, 1, 0, 0, 0, 1724, 1721, 1, 0, 0, 0, 1724, 1722, 1, 0, 0, 0, 1724, 1723, 1, 0, 0, 0, 1725, 293, 1, 0, 0, 0, 1726, 1740, 3, 276, 138, 0, 1727, 1740, 3, 296, 148, 0, 1728, 1740, 3, 302, 151, 0, 1729, 1740, 3, 312, 156, 0, 1730, 1740, 3, 314, 157, 0, 1731, 1740, 3, 330, 165, 0, 1732, 1740, 3, 350, 175, 0, 1733, 1740, 3, 352, 176, 0, 1734, 1740, 3, 354, 177, 0, 1735, 1740, 3, 358, 179, 0, 1736, 1740, 3, 356, 178, 0, 1737, 1740, 3, 360, 180, 0, 1738, 1740, 3, 382, 191, 0, 1739, 1726, 1, 0, 0, 0, 1739, 1727, 1, 0, 0, 0, 1739, 1728, 1, 0, 0, 0, 1739, 1729, 1, 0, 0, 0, 1739, 1730, 1, 0, 0, 0, 1739, 1731, 1, 0, 0, 0, 1739, 1732, 1, 0, 0, 0, 1739, 1733, 1, 0, 0, 0, 1739, 1734, 1, 0, 0, 0, 1739, 1735, 1, 0, 0, 0, 1739, 1736, 1, 0, 0, 0, 1739, 1737, 1, 0, 0, 0, 1739, 1738, 1, 0, 0, 0, 1740, 295, 1, 0, 0, 0, 1741, 1742, 5, 82, 0, 0, 1742, 297, 1, 0, 0, 0, 1743, 1744, 5, 123, 0, 0, 1744, 1745, 5, 94, 0, 0, 1745, 1746, 3, 290, 145, 0, 1746, 299, 1, 0, 0, 0, 1747, 1748, 5, 123, 0, 0, 1748, 1749, 5, 94, 0, 0, 1749, 1750, 3, 292, 146, 0, 1750, 301, 1, 0, 0, 0, 1751, 1752, 3, 304, 152, 0, 1752, 1753, 5, 82, 0, 0, 1753, 303, 1, 0, 0, 0, 1754, 1762, 3, 468, 234, 0, 1755, 1762, 3, 436, 218, 0, 1756, 1762, 3, 438, 219, 0, 1757, 1762, 3, 430, 215, 0, 1758, 1762, 3, 432, 216, 0, 1759, 1762, 3, 420, 210, 0, 1760, 1762, 3, 398, 199, 0, 1761, 1754, 1, 0, 0, 0, 1761, 1755, 1, 0, 0, 0, 1761, 1756, 1, 0, 0, 0, 1761, 1757, 1, 0, 0, 0, 1761, 1758, 1, 0, 0, 0, 1761, 1759, 1, 0, 0, 0, 1761, 1760, 1, 0, 0, 0, 1762, 305, 1, 0, 0, 0, 1763, 1764, 5, 39, 0, 0, 1764, 1765, 5, 76, 0, 0, 1765, 1766, 3, 388, 194, 0, 1766, 1767, 5, 77, 0, 0, 1767, 1768, 3, 290, 145, 0, 1768, 307, 1, 0, 0, 0, 1769, 1770, 5, 39, 0, 0, 1770, 1771, 5, 76, 0, 0, 1771, 1772, 3, 388, 194, 0, 1772, 1773, 5, 77, 0, 0, 1773, 1774, 3, 292, 146, 0, 1774, 1775, 5, 32, 0, 0, 1775, 1776, 3, 290, 145, 0, 1776, 309, 1, 0, 0, 0, 1777, 1778, 5, 39, 0, 0, 1778, 1779, 5, 76, 0, 0, 1779, 1780, 3, 388, 194, 0, 1780, 1781, 5, 77, 0, 0, 1781, 1782, 3, 292, 146, 0, 1782, 1783, 5, 32, 0, 0, 1783, 1784, 3, 292, 146, 0, 1784, 311, 1, 0, 0, 0, 1785, 1786, 5, 19, 0, 0, 1786, 1789, 3, 388, 194, 0, 1787, 1788, 5, 94, 0, 0, 1788, 1790, 3, 388, 194, 0, 1789, 1787, 1, 0, 0, 0, 1789, 1790, 1, 0, 0, 0, 1790, 1791, 1, 0, 0, 0, 1791, 1792, 5, 82, 0, 0, 1792, 313, 1, 0, 0, 0, 1793, 1794, 5, 58, 0, 0, 1794, 1795, 5, 76, 0, 0, 1795, 1796, 3, 388, 194, 0, 1796, 1797, 5, 77, 0, 0, 1797, 1798, 3, 316, 158, 0, 1798, 315, 1, 0, 0, 0, 1799, 1800, 5, 78, 0, 0, 1800, 1804, 3, 318, 159, 0, 1801, 1803, 3, 318, 159, 0, 1802, 1801, 1, 0, 0, 0, 1803, 1806, 1, 0, 0, 0, 1804, 1802, 1, 0, 0, 0, 1804, 1805, 1, 0, 0, 0, 1805, 1807, 1, 0, 0, 0, 1806, 1804, 1, 0, 0, 0, 1807, 1808, 5, 79, 0, 0, 1808, 1826, 1, 0, 0, 0, 1809, 1813, 5, 78, 0, 0, 1810, 1812, 3, 320, 160, 0, 1811, 1810, 1, 0, 0, 0, 1812, 1815, 1, 0, 0, 0, 1813, 1811, 1, 0, 0, 0, 1813, 1814, 1, 0, 0, 0, 1814, 1821, 1, 0, 0, 0, 1815, 1813, 1, 0, 0, 0, 1816, 1817, 3, 322, 161, 0, 1817, 1818, 5, 94, 0, 0, 1818, 1820, 1, 0, 0, 0, 1819, 1816, 1, 0, 0, 0, 1820, 1823, 1, 0, 0, 0, 1821, 1819, 1, 0, 0, 0, 1821, 1822, 1, 0, 0, 0, 1822, 1824, 1, 0, 0, 0, 1823, 1821, 1, 0, 0, 0, 1824, 1826, 5, 79, 0, 0, 1825, 1799, 1, 0, 0, 0, 1825, 1809, 1, 0, 0, 0, 1826, 317, 1, 0, 0, 0, 1827, 1828, 3, 322, 161, 0, 1828, 1834, 5, 95, 0, 0, 1829, 1830, 3, 388, 194, 0, 1830, 1831, 5, 82, 0, 0, 1831, 1835, 1, 0, 0, 0, 1832, 1835, 3, 276, 138, 0, 1833, 1835, 3, 356, 178, 0, 1834, 1829, 1, 0, 0, 0, 1834, 1832, 1, 0, 0, 0, 1834, 1833, 1, 0, 0, 0, 1835, 319, 1, 0, 0, 0, 1836, 1837, 3, 322, 161, 0, 1837, 1843, 5, 94, 0, 0, 1838, 1839, 3, 322, 161, 0, 1839, 1840, 5, 94, 0, 0, 1840, 1842, 1, 0, 0, 0, 1841, 1838, 1, 0, 0, 0, 1842, 1845, 1, 0, 0, 0, 1843, 1841, 1, 0, 0, 0, 1843, 1844, 1, 0, 0, 0, 1844, 1846, 1, 0, 0, 0, 1845, 1843, 1, 0, 0, 0, 1846, 1847, 3, 278, 139, 0, 1847, 321, 1, 0, 0, 0, 1848, 1849, 5, 23, 0, 0, 1849, 1854, 3, 324, 162, 0, 1850, 1851, 5, 83, 0, 0, 1851, 1853, 3, 324, 162, 0, 1852, 1850, 1, 0, 0, 0, 1853, 1856, 1, 0, 0, 0, 1854, 1852, 1, 0, 0, 0, 1854, 1855, 1, 0, 0, 0, 1855, 1859, 1, 0, 0, 0, 1856, 1854, 1, 0, 0, 0, 1857, 1859, 5, 29, 0, 0, 1858, 1848, 1, 0, 0, 0, 1858, 1857, 1, 0, 0, 0, 1859, 323, 1, 0, 0, 0, 1860, 1861, 3, 464, 232, 0, 1861, 325, 1, 0, 0, 0, 1862, 1863, 5, 67, 0, 0, 1863, 1864, 5, 76, 0, 0, 1864, 1865, 3, 388, 194, 0, 1865, 1866, 5, 77, 0, 0, 1866, 1867, 3, 290, 145, 0, 1867, 327, 1, 0, 0, 0, 1868, 1869, 5, 67, 0, 0, 1869, 1870, 5, 76, 0, 0, 1870, 1871, 3, 388, 194, 0, 1871, 1872, 5, 77, 0, 0, 1872, 1873, 3, 292, 146, 0, 1873, 329, 1, 0, 0, 0, 1874, 1875, 5, 30, 0, 0, 1875, 1876, 3, 290, 145, 0, 1876, 1877, 5, 67, 0, 0, 1877, 1878, 5, 76, 0, 0, 1878, 1879, 3, 388, 194, 0, 1879, 1880, 5, 77, 0, 0, 1880, 1881, 5, 82, 0, 0, 1881, 331, 1, 0, 0, 0, 1882, 1885, 3, 336, 168, 0, 1883, 1885, 3, 346, 173, 0, 1884, 1882, 1, 0, 0, 0, 1884, 1883, 1, 0, 0, 0, 1885, 333, 1, 0, 0, 0, 1886, 1889, 3, 338, 169, 0, 1887, 1889, 3, 348, 174, 0, 1888, 1886, 1, 0, 0, 0, 1888, 1887, 1, 0, 0, 0, 1889, 335, 1, 0, 0, 0, 1890, 1891, 5, 38, 0, 0, 1891, 1893, 5, 76, 0, 0, 1892, 1894, 3, 340, 170, 0, 1893, 1892, 1, 0, 0, 0, 1893, 1894, 1, 0, 0, 0, 1894, 1895, 1, 0, 0, 0, 1895, 1897, 5, 82, 0, 0, 1896, 1898, 3, 388, 194, 0, 1897, 1896, 1, 0, 0, 0, 1897, 1898, 1, 0, 0, 0, 1898, 1899, 1, 0, 0, 0, 1899, 1901, 5, 82, 0, 0, 1900, 1902, 3, 342, 171, 0, 1901, 1900, 1, 0, 0, 0, 1901, 1902, 1, 0, 0, 0, 1902, 1903, 1, 0, 0, 0, 1903, 1904, 5, 77, 0, 0, 1904, 1905, 3, 290, 145, 0, 1905, 337, 1, 0, 0, 0, 1906, 1907, 5, 38, 0, 0, 1907, 1909, 5, 76, 0, 0, 1908, 1910, 3, 340, 170, 0, 1909, 1908, 1, 0, 0, 0, 1909, 1910, 1, 0, 0, 0, 1910, 1911, 1, 0, 0, 0, 1911, 1913, 5, 82, 0, 0, 1912, 1914, 3, 388, 194, 0, 1913, 1912, 1, 0, 0, 0, 1913, 1914, 1, 0, 0, 0, 1914, 1915, 1, 0, 0, 0, 1915, 1917, 5, 82, 0, 0, 1916, 1918, 3, 342, 171, 0, 1917, 1916, 1, 0, 0, 0, 1917, 1918, 1, 0, 0, 0, 1918, 1919, 1, 0, 0, 0, 1919, 1920, 5, 77, 0, 0, 1920, 1921, 3, 292, 146, 0, 1921, 339, 1, 0, 0, 0, 1922, 1925, 3, 344, 172, 0, 1923, 1925, 3, 284, 142, 0, 1924, 1922, 1, 0, 0, 0, 1924, 1923, 1, 0, 0, 0, 1925, 341, 1, 0, 0, 0, 1926, 1927, 3, 344, 172, 0, 1927, 343, 1, 0, 0, 0, 1928, 1933, 3, 304, 152, 0, 1929, 1930, 5, 83, 0, 0, 1930, 1932, 3, 304, 152, 0, 1931, 1929, 1, 0, 0, 0, 1932, 1935, 1, 0, 0, 0, 1933, 1931, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 345, 1, 0, 0, 0, 1935, 1933, 1, 0, 0, 0, 1936, 1937, 5, 38, 0, 0, 1937, 1938, 5, 76, 0, 0, 1938, 1939, 3, 284, 142, 0, 1939, 1940, 5, 94, 0, 0, 1940, 1941, 3, 388, 194, 0, 1941, 1942, 5, 77, 0, 0, 1942, 1943, 3, 290, 145, 0, 1943, 347, 1, 0, 0, 0, 1944, 1945, 5, 38, 0, 0, 1945, 1946, 5, 76, 0, 0, 1946, 1947, 3, 284, 142, 0, 1947, 1948, 5, 94, 0, 0, 1948, 1949, 3, 388, 194, 0, 1949, 1950, 5, 77, 0, 0, 1950, 1951, 3, 292, 146, 0, 1951, 349, 1, 0, 0, 0, 1952, 1954, 5, 21, 0, 0, 1953, 1955, 5, 123, 0, 0, 1954, 1953, 1, 0, 0, 0, 1954, 1955, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 1957, 5, 82, 0, 0, 1957, 351, 1, 0, 0, 0, 1958, 1960, 5, 28, 0, 0, 1959, 1961, 5, 123, 0, 0, 1960, 1959, 1, 0, 0, 0, 1960, 1961, 1, 0, 0, 0, 1961, 1962, 1, 0, 0, 0, 1962, 1963, 5, 82, 0, 0, 1963, 353, 1, 0, 0, 0, 1964, 1966, 5, 53, 0, 0, 1965, 1967, 3, 388, 194, 0, 1966, 1965, 1, 0, 0, 0, 1966, 1967, 1, 0, 0, 0, 1967, 1968, 1, 0, 0, 0, 1968, 1969, 5, 82, 0, 0, 1969, 355, 1, 0, 0, 0, 1970, 1971, 5, 61, 0, 0, 1971, 1972, 3, 388, 194, 0, 1972, 1973, 5, 82, 0, 0, 1973, 357, 1, 0, 0, 0, 1974, 1975, 5, 59, 0, 0, 1975, 1976, 5, 76, 0, 0, 1976, 1977, 3, 388, 194, 0, 1977, 1978, 5, 77, 0, 0, 1978, 1979, 3, 276, 138, 0, 1979, 359, 1, 0, 0, 0, 1980, 1981, 5, 64, 0, 0, 1981, 1982, 3, 276, 138, 0, 1982, 1983, 3, 362, 181, 0, 1983, 1997, 1, 0, 0, 0, 1984, 1985, 5, 64, 0, 0, 1985, 1986, 3, 276, 138, 0, 1986, 1987, 3, 370, 185, 0, 1987, 1997, 1, 0, 0, 0, 1988, 1989, 5, 64, 0, 0, 1989, 1991, 3, 276, 138, 0, 1990, 1992, 3, 362, 181, 0, 1991, 1990, 1, 0, 0, 0, 1991, 1992, 1, 0, 0, 0, 1992, 1993, 1, 0, 0, 0, 1993, 1994, 3, 370, 185, 0, 1994, 1997, 1, 0, 0, 0, 1995, 1997, 3, 372, 186, 0, 1996, 1980, 1, 0, 0, 0, 1996, 1984, 1, 0, 0, 0, 1996, 1988, 1, 0, 0, 0, 1996, 1995, 1, 0, 0, 0, 1997, 361, 1, 0, 0, 0, 1998, 2002, 3, 364, 182, 0, 1999, 2001, 3, 364, 182, 0, 2000, 1999, 1, 0, 0, 0, 2001, 2004, 1, 0, 0, 0, 2002, 2000, 1, 0, 0, 0, 2002, 2003, 1, 0, 0, 0, 2003, 363, 1, 0, 0, 0, 2004, 2002, 1, 0, 0, 0, 2005, 2006, 5, 24, 0, 0, 2006, 2007, 5, 76, 0, 0, 2007, 2008, 3, 366, 183, 0, 2008, 2009, 5, 77, 0, 0, 2009, 2010, 3, 276, 138, 0, 2010, 365, 1, 0, 0, 0, 2011, 2013, 3, 164, 82, 0, 2012, 2011, 1, 0, 0, 0, 2013, 2016, 1, 0, 0, 0, 2014, 2012, 1, 0, 0, 0, 2014, 2015, 1, 0, 0, 0, 2015, 2017, 1, 0, 0, 0, 2016, 2014, 1, 0, 0, 0, 2017, 2018, 3, 368, 184, 0, 2018, 2019, 3, 124, 62, 0, 2019, 367, 1, 0, 0, 0, 2020, 2025, 3, 138, 69, 0, 2021, 2022, 5, 109, 0, 0, 2022, 2024, 3, 22, 11, 0, 2023, 2021, 1, 0, 0, 0, 2024, 2027, 1, 0, 0, 0, 2025, 2023, 1, 0, 0, 0, 2025, 2026, 1, 0, 0, 0, 2026, 369, 1, 0, 0, 0, 2027, 2025, 1, 0, 0, 0, 2028, 2029, 5, 36, 0, 0, 2029, 2030, 3, 276, 138, 0, 2030, 371, 1, 0, 0, 0, 2031, 2032, 5, 64, 0, 0, 2032, 2033, 3, 374, 187, 0, 2033, 2035, 3, 276, 138, 0, 2034, 2036, 3, 362, 181, 0, 2035, 2034, 1, 0, 0, 0, 2035, 2036, 1, 0, 0, 0, 2036, 2038, 1, 0, 0, 0, 2037, 2039, 3, 370, 185, 0, 2038, 2037, 1, 0, 0, 0, 2038, 2039, 1, 0, 0, 0, 2039, 373, 1, 0, 0, 0, 2040, 2041, 5, 76, 0, 0, 2041, 2043, 3, 376, 188, 0, 2042, 2044, 5, 82, 0, 0, 2043, 2042, 1, 0, 0, 0, 2043, 2044, 1, 0, 0, 0, 2044, 2045, 1, 0, 0, 0, 2045, 2046, 5, 77, 0, 0, 2046, 375, 1, 0, 0, 0, 2047, 2052, 3, 378, 189, 0, 2048, 2049, 5, 82, 0, 0, 2049, 2051, 3, 378, 189, 0, 2050, 2048, 1, 0, 0, 0, 2051, 2054, 1, 0, 0, 0, 2052, 2050, 1, 0, 0, 0, 2052, 2053, 1, 0, 0, 0, 2053, 377, 1, 0, 0, 0, 2054, 2052, 1, 0, 0, 0, 2055, 2058, 3, 284, 142, 0, 2056, 2058, 3, 380, 190, 0, 2057, 2055, 1, 0, 0, 0, 2057, 2056, 1, 0, 0, 0, 2058, 379, 1, 0, 0, 0, 2059, 2062, 3, 58, 29, 0, 2060, 2062, 3, 418, 209, 0, 2061, 2059, 1, 0, 0, 0, 2061, 2060, 1, 0, 0, 0, 2062, 381, 1, 0, 0, 0, 2063, 2064, 5, 17, 0, 0, 2064, 2065, 3, 388, 194, 0, 2065, 2066, 5, 82, 0, 0, 2066, 383, 1, 0, 0, 0, 2067, 2068, 3, 386, 193, 0, 2068, 385, 1, 0, 0, 0, 2069, 2070, 3, 284, 142, 0, 2070, 387, 1, 0, 0, 0, 2071, 2074, 3, 474, 237, 0, 2072, 2074, 3, 466, 233, 0, 2073, 2071, 1, 0, 0, 0, 2073, 2072, 1, 0, 0, 0, 2074, 389, 1, 0, 0, 0, 2075, 2078, 3, 392, 196, 0, 2076, 2078, 3, 406, 203, 0, 2077, 2075, 1, 0, 0, 0, 2077, 2076, 1, 0, 0, 0, 2078, 391, 1, 0, 0, 0, 2079, 2081, 3, 2, 1, 0, 2080, 2082, 3, 394, 197, 0, 2081, 2080, 1, 0, 0, 0, 2081, 2082, 1, 0, 0, 0, 2082, 2297, 1, 0, 0, 0, 2083, 2085, 3, 396, 198, 0, 2084, 2086, 3, 394, 197, 0, 2085, 2084, 1, 0, 0, 0, 2085, 2086, 1, 0, 0, 0, 2086, 2297, 1, 0, 0, 0, 2087, 2089, 5, 60, 0, 0, 2088, 2090, 3, 394, 197, 0, 2089, 2088, 1, 0, 0, 0, 2089, 2090, 1, 0, 0, 0, 2090, 2297, 1, 0, 0, 0, 2091, 2092, 3, 54, 27, 0, 2092, 2093, 5, 84, 0, 0, 2093, 2095, 5, 60, 0, 0, 2094, 2096, 3, 394, 197, 0, 2095, 2094, 1, 0, 0, 0, 2095, 2096, 1, 0, 0, 0, 2096, 2297, 1, 0, 0, 0, 2097, 2098, 5, 76, 0, 0, 2098, 2099, 3, 388, 194, 0, 2099, 2101, 5, 77, 0, 0, 2100, 2102, 3, 394, 197, 0, 2101, 2100, 1, 0, 0, 0, 2101, 2102, 1, 0, 0, 0, 2102, 2297, 1, 0, 0, 0, 2103, 2105, 3, 400, 200, 0, 2104, 2106, 3, 394, 197, 0, 2105, 2104, 1, 0, 0, 0, 2105, 2106, 1, 0, 0, 0, 2106, 2297, 1, 0, 0, 0, 2107, 2108, 3, 58, 29, 0, 2108, 2109, 5, 84, 0, 0, 2109, 2111, 3, 400, 200, 0, 2110, 2112, 3, 394, 197, 0, 2111, 2110, 1, 0, 0, 0, 2111, 2112, 1, 0, 0, 0, 2112, 2297, 1, 0, 0, 0, 2113, 2114, 3, 406, 203, 0, 2114, 2115, 5, 84, 0, 0, 2115, 2117, 3, 400, 200, 0, 2116, 2118, 3, 394, 197, 0, 2117, 2116, 1, 0, 0, 0, 2117, 2118, 1, 0, 0, 0, 2118, 2297, 1, 0, 0, 0, 2119, 2120, 3, 406, 203, 0, 2120, 2121, 5, 84, 0, 0, 2121, 2123, 5, 123, 0, 0, 2122, 2124, 3, 394, 197, 0, 2123, 2122, 1, 0, 0, 0, 2123, 2124, 1, 0, 0, 0, 2124, 2297, 1, 0, 0, 0, 2125, 2126, 5, 57, 0, 0, 2126, 2127, 5, 84, 0, 0, 2127, 2129, 5, 123, 0, 0, 2128, 2130, 3, 394, 197, 0, 2129, 2128, 1, 0, 0, 0, 2129, 2130, 1, 0, 0, 0, 2130, 2297, 1, 0, 0, 0, 2131, 2132, 3, 54, 27, 0, 2132, 2133, 5, 84, 0, 0, 2133, 2134, 5, 57, 0, 0, 2134, 2135, 5, 84, 0, 0, 2135, 2137, 5, 123, 0, 0, 2136, 2138, 3, 394, 197, 0, 2137, 2136, 1, 0, 0, 0, 2137, 2138, 1, 0, 0, 0, 2138, 2297, 1, 0, 0, 0, 2139, 2140, 3, 58, 29, 0, 2140, 2141, 5, 80, 0, 0, 2141, 2142, 3, 388, 194, 0, 2142, 2144, 5, 81, 0, 0, 2143, 2145, 3, 394, 197, 0, 2144, 2143, 1, 0, 0, 0, 2144, 2145, 1, 0, 0, 0, 2145, 2297, 1, 0, 0, 0, 2146, 2147, 3, 410, 205, 0, 2147, 2148, 5, 80, 0, 0, 2148, 2149, 3, 388, 194, 0, 2149, 2151, 5, 81, 0, 0, 2150, 2152, 3, 394, 197, 0, 2151, 2150, 1, 0, 0, 0, 2151, 2152, 1, 0, 0, 0, 2152, 2297, 1, 0, 0, 0, 2153, 2154, 3, 60, 30, 0, 2154, 2156, 5, 76, 0, 0, 2155, 2157, 3, 422, 211, 0, 2156, 2155, 1, 0, 0, 0, 2156, 2157, 1, 0, 0, 0, 2157, 2158, 1, 0, 0, 0, 2158, 2160, 5, 77, 0, 0, 2159, 2161, 3, 394, 197, 0, 2160, 2159, 1, 0, 0, 0, 2160, 2161, 1, 0, 0, 0, 2161, 2297, 1, 0, 0, 0, 2162, 2163, 3, 54, 27, 0, 2163, 2165, 5, 84, 0, 0, 2164, 2166, 3, 40, 20, 0, 2165, 2164, 1, 0, 0, 0, 2165, 2166, 1, 0, 0, 0, 2166, 2167, 1, 0, 0, 0, 2167, 2168, 5, 123, 0, 0, 2168, 2170, 5, 76, 0, 0, 2169, 2171, 3, 422, 211, 0, 2170, 2169, 1, 0, 0, 0, 2170, 2171, 1, 0, 0, 0, 2171, 2172, 1, 0, 0, 0, 2172, 2174, 5, 77, 0, 0, 2173, 2175, 3, 394, 197, 0, 2174, 2173, 1, 0, 0, 0, 2174, 2175, 1, 0, 0, 0, 2175, 2297, 1, 0, 0, 0, 2176, 2177, 3, 58, 29, 0, 2177, 2179, 5, 84, 0, 0, 2178, 2180, 3, 40, 20, 0, 2179, 2178, 1, 0, 0, 0, 2179, 2180, 1, 0, 0, 0, 2180, 2181, 1, 0, 0, 0, 2181, 2182, 5, 123, 0, 0, 2182, 2184, 5, 76, 0, 0, 2183, 2185, 3, 422, 211, 0, 2184, 2183, 1, 0, 0, 0, 2184, 2185, 1, 0, 0, 0, 2185, 2186, 1, 0, 0, 0, 2186, 2188, 5, 77, 0, 0, 2187, 2189, 3, 394, 197, 0, 2188, 2187, 1, 0, 0, 0, 2188, 2189, 1, 0, 0, 0, 2189, 2297, 1, 0, 0, 0, 2190, 2191, 3, 406, 203, 0, 2191, 2193, 5, 84, 0, 0, 2192, 2194, 3, 40, 20, 0, 2193, 2192, 1, 0, 0, 0, 2193, 2194, 1, 0, 0, 0, 2194, 2195, 1, 0, 0, 0, 2195, 2196, 5, 123, 0, 0, 2196, 2198, 5, 76, 0, 0, 2197, 2199, 3, 422, 211, 0, 2198, 2197, 1, 0, 0, 0, 2198, 2199, 1, 0, 0, 0, 2199, 2200, 1, 0, 0, 0, 2200, 2202, 5, 77, 0, 0, 2201, 2203, 3, 394, 197, 0, 2202, 2201, 1, 0, 0, 0, 2202, 2203, 1, 0, 0, 0, 2203, 2297, 1, 0, 0, 0, 2204, 2205, 5, 57, 0, 0, 2205, 2207, 5, 84, 0, 0, 2206, 2208, 3, 40, 20, 0, 2207, 2206, 1, 0, 0, 0, 2207, 2208, 1, 0, 0, 0, 2208, 2209, 1, 0, 0, 0, 2209, 2210, 5, 123, 0, 0, 2210, 2212, 5, 76, 0, 0, 2211, 2213, 3, 422, 211, 0, 2212, 2211, 1, 0, 0, 0, 2212, 2213, 1, 0, 0, 0, 2213, 2214, 1, 0, 0, 0, 2214, 2216, 5, 77, 0, 0, 2215, 2217, 3, 394, 197, 0, 2216, 2215, 1, 0, 0, 0, 2216, 2217, 1, 0, 0, 0, 2217, 2297, 1, 0, 0, 0, 2218, 2219, 3, 54, 27, 0, 2219, 2220, 5, 84, 0, 0, 2220, 2221, 5, 57, 0, 0, 2221, 2223, 5, 84, 0, 0, 2222, 2224, 3, 40, 20, 0, 2223, 2222, 1, 0, 0, 0, 2223, 2224, 1, 0, 0, 0, 2224, 2225, 1, 0, 0, 0, 2225, 2226, 5, 123, 0, 0, 2226, 2228, 5, 76, 0, 0, 2227, 2229, 3, 422, 211, 0, 2228, 2227, 1, 0, 0, 0, 2228, 2229, 1, 0, 0, 0, 2229, 2230, 1, 0, 0, 0, 2230, 2232, 5, 77, 0, 0, 2231, 2233, 3, 394, 197, 0, 2232, 2231, 1, 0, 0, 0, 2232, 2233, 1, 0, 0, 0, 2233, 2297, 1, 0, 0, 0, 2234, 2235, 3, 58, 29, 0, 2235, 2237, 5, 87, 0, 0, 2236, 2238, 3, 40, 20, 0, 2237, 2236, 1, 0, 0, 0, 2237, 2238, 1, 0, 0, 0, 2238, 2239, 1, 0, 0, 0, 2239, 2241, 5, 123, 0, 0, 2240, 2242, 3, 394, 197, 0, 2241, 2240, 1, 0, 0, 0, 2241, 2242, 1, 0, 0, 0, 2242, 2297, 1, 0, 0, 0, 2243, 2244, 3, 406, 203, 0, 2244, 2246, 5, 87, 0, 0, 2245, 2247, 3, 40, 20, 0, 2246, 2245, 1, 0, 0, 0, 2246, 2247, 1, 0, 0, 0, 2247, 2248, 1, 0, 0, 0, 2248, 2250, 5, 123, 0, 0, 2249, 2251, 3, 394, 197, 0, 2250, 2249, 1, 0, 0, 0, 2250, 2251, 1, 0, 0, 0, 2251, 2297, 1, 0, 0, 0, 2252, 2253, 3, 16, 8, 0, 2253, 2255, 5, 87, 0, 0, 2254, 2256, 3, 40, 20, 0, 2255, 2254, 1, 0, 0, 0, 2255, 2256, 1, 0, 0, 0, 2256, 2257, 1, 0, 0, 0, 2257, 2259, 5, 123, 0, 0, 2258, 2260, 3, 394, 197, 0, 2259, 2258, 1, 0, 0, 0, 2259, 2260, 1, 0, 0, 0, 2260, 2297, 1, 0, 0, 0, 2261, 2262, 5, 57, 0, 0, 2262, 2264, 5, 87, 0, 0, 2263, 2265, 3, 40, 20, 0, 2264, 2263, 1, 0, 0, 0, 2264, 2265, 1, 0, 0, 0, 2265, 2266, 1, 0, 0, 0, 2266, 2268, 5, 123, 0, 0, 2267, 2269, 3, 394, 197, 0, 2268, 2267, 1, 0, 0, 0, 2268, 2269, 1, 0, 0, 0, 2269, 2297, 1, 0, 0, 0, 2270, 2271, 3, 54, 27, 0, 2271, 2272, 5, 84, 0, 0, 2272, 2273, 5, 57, 0, 0, 2273, 2275, 5, 87, 0, 0, 2274, 2276, 3, 40, 20, 0, 2275, 2274, 1, 0, 0, 0, 2275, 2276, 1, 0, 0, 0, 2276, 2277, 1, 0, 0, 0, 2277, 2279, 5, 123, 0, 0, 2278, 2280, 3, 394, 197, 0, 2279, 2278, 1, 0, 0, 0, 2279, 2280, 1, 0, 0, 0, 2280, 2297, 1, 0, 0, 0, 2281, 2282, 3, 22, 11, 0, 2282, 2284, 5, 87, 0, 0, 2283, 2285, 3, 40, 20, 0, 2284, 2283, 1, 0, 0, 0, 2284, 2285, 1, 0, 0, 0, 2285, 2286, 1, 0, 0, 0, 2286, 2288, 5, 48, 0, 0, 2287, 2289, 3, 394, 197, 0, 2288, 2287, 1, 0, 0, 0, 2288, 2289, 1, 0, 0, 0, 2289, 2297, 1, 0, 0, 0, 2290, 2291, 3, 28, 14, 0, 2291, 2292, 5, 87, 0, 0, 2292, 2294, 5, 48, 0, 0, 2293, 2295, 3, 394, 197, 0, 2294, 2293, 1, 0, 0, 0, 2294, 2295, 1, 0, 0, 0, 2295, 2297, 1, 0, 0, 0, 2296, 2079, 1, 0, 0, 0, 2296, 2083, 1, 0, 0, 0, 2296, 2087, 1, 0, 0, 0, 2296, 2091, 1, 0, 0, 0, 2296, 2097, 1, 0, 0, 0, 2296, 2103, 1, 0, 0, 0, 2296, 2107, 1, 0, 0, 0, 2296, 2113, 1, 0, 0, 0, 2296, 2119, 1, 0, 0, 0, 2296, 2125, 1, 0, 0, 0, 2296, 2131, 1, 0, 0, 0, 2296, 2139, 1, 0, 0, 0, 2296, 2146, 1, 0, 0, 0, 2296, 2153, 1, 0, 0, 0, 2296, 2162, 1, 0, 0, 0, 2296, 2176, 1, 0, 0, 0, 2296, 2190, 1, 0, 0, 0, 2296, 2204, 1, 0, 0, 0, 2296, 2218, 1, 0, 0, 0, 2296, 2234, 1, 0, 0, 0, 2296, 2243, 1, 0, 0, 0, 2296, 2252, 1, 0, 0, 0, 2296, 2261, 1, 0, 0, 0, 2296, 2270, 1, 0, 0, 0, 2296, 2281, 1, 0, 0, 0, 2296, 2290, 1, 0, 0, 0, 2297, 393, 1, 0, 0, 0, 2298, 2299, 5, 84, 0, 0, 2299, 2301, 3, 400, 200, 0, 2300, 2302, 3, 394, 197, 0, 2301, 2300, 1, 0, 0, 0, 2301, 2302, 1, 0, 0, 0, 2302, 2336, 1, 0, 0, 0, 2303, 2304, 5, 84, 0, 0, 2304, 2306, 5, 123, 0, 0, 2305, 2307, 3, 394, 197, 0, 2306, 2305, 1, 0, 0, 0, 2306, 2307, 1, 0, 0, 0, 2307, 2336, 1, 0, 0, 0, 2308, 2309, 5, 80, 0, 0, 2309, 2310, 3, 388, 194, 0, 2310, 2312, 5, 81, 0, 0, 2311, 2313, 3, 394, 197, 0, 2312, 2311, 1, 0, 0, 0, 2312, 2313, 1, 0, 0, 0, 2313, 2336, 1, 0, 0, 0, 2314, 2316, 5, 84, 0, 0, 2315, 2317, 3, 40, 20, 0, 2316, 2315, 1, 0, 0, 0, 2316, 2317, 1, 0, 0, 0, 2317, 2318, 1, 0, 0, 0, 2318, 2319, 5, 123, 0, 0, 2319, 2321, 5, 76, 0, 0, 2320, 2322, 3, 422, 211, 0, 2321, 2320, 1, 0, 0, 0, 2321, 2322, 1, 0, 0, 0, 2322, 2323, 1, 0, 0, 0, 2323, 2325, 5, 77, 0, 0, 2324, 2326, 3, 394, 197, 0, 2325, 2324, 1, 0, 0, 0, 2325, 2326, 1, 0, 0, 0, 2326, 2336, 1, 0, 0, 0, 2327, 2329, 5, 87, 0, 0, 2328, 2330, 3, 40, 20, 0, 2329, 2328, 1, 0, 0, 0, 2329, 2330, 1, 0, 0, 0, 2330, 2331, 1, 0, 0, 0, 2331, 2333, 5, 123, 0, 0, 2332, 2334, 3, 394, 197, 0, 2333, 2332, 1, 0, 0, 0, 2333, 2334, 1, 0, 0, 0, 2334, 2336, 1, 0, 0, 0, 2335, 2298, 1, 0, 0, 0, 2335, 2303, 1, 0, 0, 0, 2335, 2308, 1, 0, 0, 0, 2335, 2314, 1, 0, 0, 0, 2335, 2327, 1, 0, 0, 0, 2336, 395, 1, 0, 0, 0, 2337, 2342, 3, 54, 27, 0, 2338, 2339, 5, 80, 0, 0, 2339, 2341, 5, 81, 0, 0, 2340, 2338, 1, 0, 0, 0, 2341, 2344, 1, 0, 0, 0, 2342, 2340, 1, 0, 0, 0, 2342, 2343, 1, 0, 0, 0, 2343, 2345, 1, 0, 0, 0, 2344, 2342, 1, 0, 0, 0, 2345, 2346, 5, 84, 0, 0, 2346, 2347, 5, 26, 0, 0, 2347, 2373, 1, 0, 0, 0, 2348, 2353, 3, 10, 5, 0, 2349, 2350, 5, 80, 0, 0, 2350, 2352, 5, 81, 0, 0, 2351, 2349, 1, 0, 0, 0, 2352, 2355, 1, 0, 0, 0, 2353, 2351, 1, 0, 0, 0, 2353, 2354, 1, 0, 0, 0, 2354, 2356, 1, 0, 0, 0, 2355, 2353, 1, 0, 0, 0, 2356, 2357, 5, 84, 0, 0, 2357, 2358, 5, 26, 0, 0, 2358, 2373, 1, 0, 0, 0, 2359, 2364, 5, 20, 0, 0, 2360, 2361, 5, 80, 0, 0, 2361, 2363, 5, 81, 0, 0, 2362, 2360, 1, 0, 0, 0, 2363, 2366, 1, 0, 0, 0, 2364, 2362, 1, 0, 0, 0, 2364, 2365, 1, 0, 0, 0, 2365, 2367, 1, 0, 0, 0, 2366, 2364, 1, 0, 0, 0, 2367, 2368, 5, 84, 0, 0, 2368, 2373, 5, 26, 0, 0, 2369, 2370, 5, 65, 0, 0, 2370, 2371, 5, 84, 0, 0, 2371, 2373, 5, 26, 0, 0, 2372, 2337, 1, 0, 0, 0, 2372, 2348, 1, 0, 0, 0, 2372, 2359, 1, 0, 0, 0, 2372, 2369, 1, 0, 0, 0, 2373, 397, 1, 0, 0, 0, 2374, 2384, 3, 400, 200, 0, 2375, 2376, 3, 58, 29, 0, 2376, 2377, 5, 84, 0, 0, 2377, 2378, 3, 400, 200, 0, 2378, 2384, 1, 0, 0, 0, 2379, 2380, 3, 390, 195, 0, 2380, 2381, 5, 84, 0, 0, 2381, 2382, 3, 400, 200, 0, 2382, 2384, 1, 0, 0, 0, 2383, 2374, 1, 0, 0, 0, 2383, 2375, 1, 0, 0, 0, 2383, 2379, 1, 0, 0, 0, 2384, 399, 1, 0, 0, 0, 2385, 2387, 5, 48, 0, 0, 2386, 2388, 3, 40, 20, 0, 2387, 2386, 1, 0, 0, 0, 2387, 2388, 1, 0, 0, 0, 2388, 2389, 1, 0, 0, 0, 2389, 2390, 3, 402, 201, 0, 2390, 2392, 5, 76, 0, 0, 2391, 2393, 3, 422, 211, 0, 2392, 2391, 1, 0, 0, 0, 2392, 2393, 1, 0, 0, 0, 2393, 2394, 1, 0, 0, 0, 2394, 2396, 5, 77, 0, 0, 2395, 2397, 3, 110, 55, 0, 2396, 2395, 1, 0, 0, 0, 2396, 2397, 1, 0, 0, 0, 2397, 401, 1, 0, 0, 0, 2398, 2400, 3, 254, 127, 0, 2399, 2398, 1, 0, 0, 0, 2400, 2403, 1, 0, 0, 0, 2401, 2399, 1, 0, 0, 0, 2401, 2402, 1, 0, 0, 0, 2402, 2404, 1, 0, 0, 0, 2403, 2401, 1, 0, 0, 0, 2404, 2415, 5, 123, 0, 0, 2405, 2409, 5, 84, 0, 0, 2406, 2408, 3, 254, 127, 0, 2407, 2406, 1, 0, 0, 0, 2408, 2411, 1, 0, 0, 0, 2409, 2407, 1, 0, 0, 0, 2409, 2410, 1, 0, 0, 0, 2410, 2412, 1, 0, 0, 0, 2411, 2409, 1, 0, 0, 0, 2412, 2414, 5, 123, 0, 0, 2413, 2405, 1, 0, 0, 0, 2414, 2417, 1, 0, 0, 0, 2415, 2413, 1, 0, 0, 0, 2415, 2416, 1, 0, 0, 0, 2416, 2419, 1, 0, 0, 0, 2417, 2415, 1, 0, 0, 0, 2418, 2420, 3, 404, 202, 0, 2419, 2418, 1, 0, 0, 0, 2419, 2420, 1, 0, 0, 0, 2420, 403, 1, 0, 0, 0, 2421, 2424, 3, 40, 20, 0, 2422, 2424, 5, 4, 0, 0, 2423, 2421, 1, 0, 0, 0, 2423, 2422, 1, 0, 0, 0, 2424, 405, 1, 0, 0, 0, 2425, 2428, 3, 408, 204, 0, 2426, 2428, 3, 410, 205, 0, 2427, 2425, 1, 0, 0, 0, 2427, 2426, 1, 0, 0, 0, 2428, 407, 1, 0, 0, 0, 2429, 2430, 5, 48, 0, 0, 2430, 2431, 3, 8, 4, 0, 2431, 2433, 3, 412, 206, 0, 2432, 2434, 3, 30, 15, 0, 2433, 2432, 1, 0, 0, 0, 2433, 2434, 1, 0, 0, 0, 2434, 2442, 1, 0, 0, 0, 2435, 2436, 5, 48, 0, 0, 2436, 2437, 3, 22, 11, 0, 2437, 2439, 3, 412, 206, 0, 2438, 2440, 3, 30, 15, 0, 2439, 2438, 1, 0, 0, 0, 2439, 2440, 1, 0, 0, 0, 2440, 2442, 1, 0, 0, 0, 2441, 2429, 1, 0, 0, 0, 2441, 2435, 1, 0, 0, 0, 2442, 409, 1, 0, 0, 0, 2443, 2444, 5, 48, 0, 0, 2444, 2445, 3, 8, 4, 0, 2445, 2446, 3, 30, 15, 0, 2446, 2447, 3, 272, 136, 0, 2447, 2454, 1, 0, 0, 0, 2448, 2449, 5, 48, 0, 0, 2449, 2450, 3, 20, 10, 0, 2450, 2451, 3, 30, 15, 0, 2451, 2452, 3, 272, 136, 0, 2452, 2454, 1, 0, 0, 0, 2453, 2443, 1, 0, 0, 0, 2453, 2448, 1, 0, 0, 0, 2454, 411, 1, 0, 0, 0, 2455, 2459, 3, 414, 207, 0, 2456, 2458, 3, 414, 207, 0, 2457, 2456, 1, 0, 0, 0, 2458, 2461, 1, 0, 0, 0, 2459, 2457, 1, 0, 0, 0, 2459, 2460, 1, 0, 0, 0, 2460, 413, 1, 0, 0, 0, 2461, 2459, 1, 0, 0, 0, 2462, 2464, 3, 254, 127, 0, 2463, 2462, 1, 0, 0, 0, 2464, 2467, 1, 0, 0, 0, 2465, 2463, 1, 0, 0, 0, 2465, 2466, 1, 0, 0, 0, 2466, 2468, 1, 0, 0, 0, 2467, 2465, 1, 0, 0, 0, 2468, 2469, 5, 80, 0, 0, 2469, 2470, 3, 388, 194, 0, 2470, 2471, 5, 81, 0, 0, 2471, 415, 1, 0, 0, 0, 2472, 2473, 3, 58, 29, 0, 2473, 2474, 5, 80, 0, 0, 2474, 2475, 3, 388, 194, 0, 2475, 2476, 5, 81, 0, 0, 2476, 2488, 1, 0, 0, 0, 2477, 2478, 3, 392, 196, 0, 2478, 2479, 5, 80, 0, 0, 2479, 2480, 3, 388, 194, 0, 2480, 2481, 5, 81, 0, 0, 2481, 2488, 1, 0, 0, 0, 2482, 2483, 3, 410, 205, 0, 2483, 2484, 5, 80, 0, 0, 2484, 2485, 3, 388, 194, 0, 2485, 2486, 5, 81, 0, 0, 2486, 2488, 1, 0, 0, 0, 2487, 2472, 1, 0, 0, 0, 2487, 2477, 1, 0, 0, 0, 2487, 2482, 1, 0, 0, 0, 2488, 417, 1, 0, 0, 0, 2489, 2490, 3, 390, 195, 0, 2490, 2491, 5, 84, 0, 0, 2491, 2492, 5, 123, 0, 0, 2492, 2503, 1, 0, 0, 0, 2493, 2494, 5, 57, 0, 0, 2494, 2495, 5, 84, 0, 0, 2495, 2503, 5, 123, 0, 0, 2496, 2497, 3, 54, 27, 0, 2497, 2498, 5, 84, 0, 0, 2498, 2499, 5, 57, 0, 0, 2499, 2500, 5, 84, 0, 0, 2500, 2501, 5, 123, 0, 0, 2501, 2503, 1, 0, 0, 0, 2502, 2489, 1, 0, 0, 0, 2502, 2493, 1, 0, 0, 0, 2502, 2496, 1, 0, 0, 0, 2503, 419, 1, 0, 0, 0, 2504, 2505, 3, 60, 30, 0, 2505, 2507, 5, 76, 0, 0, 2506, 2508, 3, 422, 211, 0, 2507, 2506, 1, 0, 0, 0, 2507, 2508, 1, 0, 0, 0, 2508, 2509, 1, 0, 0, 0, 2509, 2510, 5, 77, 0, 0, 2510, 2573, 1, 0, 0, 0, 2511, 2512, 3, 54, 27, 0, 2512, 2514, 5, 84, 0, 0, 2513, 2515, 3, 40, 20, 0, 2514, 2513, 1, 0, 0, 0, 2514, 2515, 1, 0, 0, 0, 2515, 2516, 1, 0, 0, 0, 2516, 2517, 5, 123, 0, 0, 2517, 2519, 5, 76, 0, 0, 2518, 2520, 3, 422, 211, 0, 2519, 2518, 1, 0, 0, 0, 2519, 2520, 1, 0, 0, 0, 2520, 2521, 1, 0, 0, 0, 2521, 2522, 5, 77, 0, 0, 2522, 2573, 1, 0, 0, 0, 2523, 2524, 3, 58, 29, 0, 2524, 2526, 5, 84, 0, 0, 2525, 2527, 3, 40, 20, 0, 2526, 2525, 1, 0, 0, 0, 2526, 2527, 1, 0, 0, 0, 2527, 2528, 1, 0, 0, 0, 2528, 2529, 5, 123, 0, 0, 2529, 2531, 5, 76, 0, 0, 2530, 2532, 3, 422, 211, 0, 2531, 2530, 1, 0, 0, 0, 2531, 2532, 1, 0, 0, 0, 2532, 2533, 1, 0, 0, 0, 2533, 2534, 5, 77, 0, 0, 2534, 2573, 1, 0, 0, 0, 2535, 2536, 3, 390, 195, 0, 2536, 2538, 5, 84, 0, 0, 2537, 2539, 3, 40, 20, 0, 2538, 2537, 1, 0, 0, 0, 2538, 2539, 1, 0, 0, 0, 2539, 2540, 1, 0, 0, 0, 2540, 2541, 5, 123, 0, 0, 2541, 2543, 5, 76, 0, 0, 2542, 2544, 3, 422, 211, 0, 2543, 2542, 1, 0, 0, 0, 2543, 2544, 1, 0, 0, 0, 2544, 2545, 1, 0, 0, 0, 2545, 2546, 5, 77, 0, 0, 2546, 2573, 1, 0, 0, 0, 2547, 2548, 5, 57, 0, 0, 2548, 2550, 5, 84, 0, 0, 2549, 2551, 3, 40, 20, 0, 2550, 2549, 1, 0, 0, 0, 2550, 2551, 1, 0, 0, 0, 2551, 2552, 1, 0, 0, 0, 2552, 2553, 5, 123, 0, 0, 2553, 2555, 5, 76, 0, 0, 2554, 2556, 3, 422, 211, 0, 2555, 2554, 1, 0, 0, 0, 2555, 2556, 1, 0, 0, 0, 2556, 2557, 1, 0, 0, 0, 2557, 2573, 5, 77, 0, 0, 2558, 2559, 3, 54, 27, 0, 2559, 2560, 5, 84, 0, 0, 2560, 2561, 5, 57, 0, 0, 2561, 2563, 5, 84, 0, 0, 2562, 2564, 3, 40, 20, 0, 2563, 2562, 1, 0, 0, 0, 2563, 2564, 1, 0, 0, 0, 2564, 2565, 1, 0, 0, 0, 2565, 2566, 5, 123, 0, 0, 2566, 2568, 5, 76, 0, 0, 2567, 2569, 3, 422, 211, 0, 2568, 2567, 1, 0, 0, 0, 2568, 2569, 1, 0, 0, 0, 2569, 2570, 1, 0, 0, 0, 2570, 2571, 5, 77, 0, 0, 2571, 2573, 1, 0, 0, 0, 2572, 2504, 1, 0, 0, 0, 2572, 2511, 1, 0, 0, 0, 2572, 2523, 1, 0, 0, 0, 2572, 2535, 1, 0, 0, 0, 2572, 2547, 1, 0, 0, 0, 2572, 2558, 1, 0, 0, 0, 2573, 421, 1, 0, 0, 0, 2574, 2579, 3, 388, 194, 0, 2575, 2576, 5, 83, 0, 0, 2576, 2578, 3, 388, 194, 0, 2577, 2575, 1, 0, 0, 0, 2578, 2581, 1, 0, 0, 0, 2579, 2577, 1, 0, 0, 0, 2579, 2580, 1, 0, 0, 0, 2580, 423, 1, 0, 0, 0, 2581, 2579, 1, 0, 0, 0, 2582, 2583, 3, 58, 29, 0, 2583, 2585, 5, 87, 0, 0, 2584, 2586, 3, 40, 20, 0, 2585, 2584, 1, 0, 0, 0, 2585, 2586, 1, 0, 0, 0, 2586, 2587, 1, 0, 0, 0, 2587, 2588, 5, 123, 0, 0, 2588, 2630, 1, 0, 0, 0, 2589, 2590, 3, 390, 195, 0, 2590, 2592, 5, 87, 0, 0, 2591, 2593, 3, 40, 20, 0, 2592, 2591, 1, 0, 0, 0, 2592, 2593, 1, 0, 0, 0, 2593, 2594, 1, 0, 0, 0, 2594, 2595, 5, 123, 0, 0, 2595, 2630, 1, 0, 0, 0, 2596, 2597, 3, 16, 8, 0, 2597, 2599, 5, 87, 0, 0, 2598, 2600, 3, 40, 20, 0, 2599, 2598, 1, 0, 0, 0, 2599, 2600, 1, 0, 0, 0, 2600, 2601, 1, 0, 0, 0, 2601, 2602, 5, 123, 0, 0, 2602, 2630, 1, 0, 0, 0, 2603, 2604, 5, 57, 0, 0, 2604, 2606, 5, 87, 0, 0, 2605, 2607, 3, 40, 20, 0, 2606, 2605, 1, 0, 0, 0, 2606, 2607, 1, 0, 0, 0, 2607, 2608, 1, 0, 0, 0, 2608, 2630, 5, 123, 0, 0, 2609, 2610, 3, 54, 27, 0, 2610, 2611, 5, 84, 0, 0, 2611, 2612, 5, 57, 0, 0, 2612, 2614, 5, 87, 0, 0, 2613, 2615, 3, 40, 20, 0, 2614, 2613, 1, 0, 0, 0, 2614, 2615, 1, 0, 0, 0, 2615, 2616, 1, 0, 0, 0, 2616, 2617, 5, 123, 0, 0, 2617, 2630, 1, 0, 0, 0, 2618, 2619, 3, 22, 11, 0, 2619, 2621, 5, 87, 0, 0, 2620, 2622, 3, 40, 20, 0, 2621, 2620, 1, 0, 0, 0, 2621, 2622, 1, 0, 0, 0, 2622, 2623, 1, 0, 0, 0, 2623, 2624, 5, 48, 0, 0, 2624, 2630, 1, 0, 0, 0, 2625, 2626, 3, 28, 14, 0, 2626, 2627, 5, 87, 0, 0, 2627, 2628, 5, 48, 0, 0, 2628, 2630, 1, 0, 0, 0, 2629, 2582, 1, 0, 0, 0, 2629, 2589, 1, 0, 0, 0, 2629, 2596, 1, 0, 0, 0, 2629, 2603, 1, 0, 0, 0, 2629, 2609, 1, 0, 0, 0, 2629, 2618, 1, 0, 0, 0, 2629, 2625, 1, 0, 0, 0, 2630, 425, 1, 0, 0, 0, 2631, 2633, 3, 390, 195, 0, 2632, 2634, 3, 428, 214, 0, 2633, 2632, 1, 0, 0, 0, 2633, 2634, 1, 0, 0, 0, 2634, 2640, 1, 0, 0, 0, 2635, 2637, 3, 58, 29, 0, 2636, 2638, 3, 428, 214, 0, 2637, 2636, 1, 0, 0, 0, 2637, 2638, 1, 0, 0, 0, 2638, 2640, 1, 0, 0, 0, 2639, 2631, 1, 0, 0, 0, 2639, 2635, 1, 0, 0, 0, 2640, 427, 1, 0, 0, 0, 2641, 2643, 5, 102, 0, 0, 2642, 2644, 3, 428, 214, 0, 2643, 2642, 1, 0, 0, 0, 2643, 2644, 1, 0, 0, 0, 2644, 2650, 1, 0, 0, 0, 2645, 2647, 5, 103, 0, 0, 2646, 2648, 3, 428, 214, 0, 2647, 2646, 1, 0, 0, 0, 2647, 2648, 1, 0, 0, 0, 2648, 2650, 1, 0, 0, 0, 2649, 2641, 1, 0, 0, 0, 2649, 2645, 1, 0, 0, 0, 2650, 429, 1, 0, 0, 0, 2651, 2652, 3, 426, 213, 0, 2652, 2653, 5, 102, 0, 0, 2653, 431, 1, 0, 0, 0, 2654, 2655, 3, 426, 213, 0, 2655, 2656, 5, 103, 0, 0, 2656, 433, 1, 0, 0, 0, 2657, 2665, 3, 436, 218, 0, 2658, 2665, 3, 438, 219, 0, 2659, 2660, 5, 104, 0, 0, 2660, 2665, 3, 434, 217, 0, 2661, 2662, 5, 105, 0, 0, 2662, 2665, 3, 434, 217, 0, 2663, 2665, 3, 440, 220, 0, 2664, 2657, 1, 0, 0, 0, 2664, 2658, 1, 0, 0, 0, 2664, 2659, 1, 0, 0, 0, 2664, 2661, 1, 0, 0, 0, 2664, 2663, 1, 0, 0, 0, 2665, 435, 1, 0, 0, 0, 2666, 2667, 5, 102, 0, 0, 2667, 2668, 3, 434, 217, 0, 2668, 437, 1, 0, 0, 0, 2669, 2670, 5, 103, 0, 0, 2670, 2671, 3, 434, 217, 0, 2671, 439, 1, 0, 0, 0, 2672, 2680, 3, 426, 213, 0, 2673, 2674, 5, 92, 0, 0, 2674, 2680, 3, 434, 217, 0, 2675, 2676, 5, 91, 0, 0, 2676, 2680, 3, 434, 217, 0, 2677, 2680, 3, 442, 221, 0, 2678, 2680, 3, 486, 243, 0, 2679, 2672, 1, 0, 0, 0, 2679, 2673, 1, 0, 0, 0, 2679, 2675, 1, 0, 0, 0, 2679, 2677, 1, 0, 0, 0, 2679, 2678, 1, 0, 0, 0, 2680, 441, 1, 0, 0, 0, 2681, 2682, 5, 76, 0, 0, 2682, 2683, 3, 8, 4, 0, 2683, 2684, 5, 77, 0, 0, 2684, 2685, 3, 434, 217, 0, 2685, 2709, 1, 0, 0, 0, 2686, 2687, 5, 76, 0, 0, 2687, 2691, 3, 16, 8, 0, 2688, 2690, 3, 38, 19, 0, 2689, 2688, 1, 0, 0, 0, 2690, 2693, 1, 0, 0, 0, 2691, 2689, 1, 0, 0, 0, 2691, 2692, 1, 0, 0, 0, 2692, 2694, 1, 0, 0, 0, 2693, 2691, 1, 0, 0, 0, 2694, 2695, 5, 77, 0, 0, 2695, 2696, 3, 440, 220, 0, 2696, 2709, 1, 0, 0, 0, 2697, 2698, 5, 76, 0, 0, 2698, 2702, 3, 16, 8, 0, 2699, 2701, 3, 38, 19, 0, 2700, 2699, 1, 0, 0, 0, 2701, 2704, 1, 0, 0, 0, 2702, 2700, 1, 0, 0, 0, 2702, 2703, 1, 0, 0, 0, 2703, 2705, 1, 0, 0, 0, 2704, 2702, 1, 0, 0, 0, 2705, 2706, 5, 77, 0, 0, 2706, 2707, 3, 474, 237, 0, 2707, 2709, 1, 0, 0, 0, 2708, 2681, 1, 0, 0, 0, 2708, 2686, 1, 0, 0, 0, 2708, 2697, 1, 0, 0, 0, 2709, 443, 1, 0, 0, 0, 2710, 2711, 6, 222, -1, 0, 2711, 2712, 3, 434, 217, 0, 2712, 2724, 1, 0, 0, 0, 2713, 2714, 10, 3, 0, 0, 2714, 2715, 5, 106, 0, 0, 2715, 2723, 3, 434, 217, 0, 2716, 2717, 10, 2, 0, 0, 2717, 2718, 5, 107, 0, 0, 2718, 2723, 3, 434, 217, 0, 2719, 2720, 10, 1, 0, 0, 2720, 2721, 5, 111, 0, 0, 2721, 2723, 3, 434, 217, 0, 2722, 2713, 1, 0, 0, 0, 2722, 2716, 1, 0, 0, 0, 2722, 2719, 1, 0, 0, 0, 2723, 2726, 1, 0, 0, 0, 2724, 2722, 1, 0, 0, 0, 2724, 2725, 1, 0, 0, 0, 2725, 445, 1, 0, 0, 0, 2726, 2724, 1, 0, 0, 0, 2727, 2728, 6, 223, -1, 0, 2728, 2729, 3, 444, 222, 0, 2729, 2738, 1, 0, 0, 0, 2730, 2731, 10, 2, 0, 0, 2731, 2732, 5, 104, 0, 0, 2732, 2737, 3, 444, 222, 0, 2733, 2734, 10, 1, 0, 0, 2734, 2735, 5, 105, 0, 0, 2735, 2737, 3, 444, 222, 0, 2736, 2730, 1, 0, 0, 0, 2736, 2733, 1, 0, 0, 0, 2737, 2740, 1, 0, 0, 0, 2738, 2736, 1, 0, 0, 0, 2738, 2739, 1, 0, 0, 0, 2739, 447, 1, 0, 0, 0, 2740, 2738, 1, 0, 0, 0, 2741, 2742, 6, 224, -1, 0, 2742, 2743, 3, 446, 223, 0, 2743, 2759, 1, 0, 0, 0, 2744, 2745, 10, 3, 0, 0, 2745, 2746, 5, 90, 0, 0, 2746, 2747, 5, 90, 0, 0, 2747, 2758, 3, 446, 223, 0, 2748, 2749, 10, 2, 0, 0, 2749, 2750, 5, 89, 0, 0, 2750, 2751, 5, 89, 0, 0, 2751, 2758, 3, 446, 223, 0, 2752, 2753, 10, 1, 0, 0, 2753, 2754, 5, 89, 0, 0, 2754, 2755, 5, 89, 0, 0, 2755, 2756, 5, 89, 0, 0, 2756, 2758, 3, 446, 223, 0, 2757, 2744, 1, 0, 0, 0, 2757, 2748, 1, 0, 0, 0, 2757, 2752, 1, 0, 0, 0, 2758, 2761, 1, 0, 0, 0, 2759, 2757, 1, 0, 0, 0, 2759, 2760, 1, 0, 0, 0, 2760, 449, 1, 0, 0, 0, 2761, 2759, 1, 0, 0, 0, 2762, 2763, 6, 225, -1, 0, 2763, 2764, 3, 448, 224, 0, 2764, 2785, 1, 0, 0, 0, 2765, 2766, 10, 5, 0, 0, 2766, 2767, 5, 90, 0, 0, 2767, 2784, 3, 448, 224, 0, 2768, 2769, 10, 4, 0, 0, 2769, 2770, 5, 89, 0, 0, 2770, 2784, 3, 448, 224, 0, 2771, 2772, 10, 3, 0, 0, 2772, 2773, 5, 97, 0, 0, 2773, 2784, 3, 448, 224, 0, 2774, 2775, 10, 2, 0, 0, 2775, 2776, 5, 98, 0, 0, 2776, 2784, 3, 448, 224, 0, 2777, 2778, 10, 1, 0, 0, 2778, 2781, 5, 43, 0, 0, 2779, 2782, 3, 16, 8, 0, 2780, 2782, 3, 384, 192, 0, 2781, 2779, 1, 0, 0, 0, 2781, 2780, 1, 0, 0, 0, 2782, 2784, 1, 0, 0, 0, 2783, 2765, 1, 0, 0, 0, 2783, 2768, 1, 0, 0, 0, 2783, 2771, 1, 0, 0, 0, 2783, 2774, 1, 0, 0, 0, 2783, 2777, 1, 0, 0, 0, 2784, 2787, 1, 0, 0, 0, 2785, 2783, 1, 0, 0, 0, 2785, 2786, 1, 0, 0, 0, 2786, 451, 1, 0, 0, 0, 2787, 2785, 1, 0, 0, 0, 2788, 2789, 6, 226, -1, 0, 2789, 2790, 3, 450, 225, 0, 2790, 2799, 1, 0, 0, 0, 2791, 2792, 10, 2, 0, 0, 2792, 2793, 5, 96, 0, 0, 2793, 2798, 3, 450, 225, 0, 2794, 2795, 10, 1, 0, 0, 2795, 2796, 5, 99, 0, 0, 2796, 2798, 3, 450, 225, 0, 2797, 2791, 1, 0, 0, 0, 2797, 2794, 1, 0, 0, 0, 2798, 2801, 1, 0, 0, 0, 2799, 2797, 1, 0, 0, 0, 2799, 2800, 1, 0, 0, 0, 2800, 453, 1, 0, 0, 0, 2801, 2799, 1, 0, 0, 0, 2802, 2803, 6, 227, -1, 0, 2803, 2804, 3, 452, 226, 0, 2804, 2810, 1, 0, 0, 0, 2805, 2806, 10, 1, 0, 0, 2806, 2807, 5, 108, 0, 0, 2807, 2809, 3, 452, 226, 0, 2808, 2805, 1, 0, 0, 0, 2809, 2812, 1, 0, 0, 0, 2810, 2808, 1, 0, 0, 0, 2810, 2811, 1, 0, 0, 0, 2811, 455, 1, 0, 0, 0, 2812, 2810, 1, 0, 0, 0, 2813, 2814, 6, 228, -1, 0, 2814, 2815, 3, 454, 227, 0, 2815, 2821, 1, 0, 0, 0, 2816, 2817, 10, 1, 0, 0, 2817, 2818, 5, 110, 0, 0, 2818, 2820, 3, 454, 227, 0, 2819, 2816, 1, 0, 0, 0, 2820, 2823, 1, 0, 0, 0, 2821, 2819, 1, 0, 0, 0, 2821, 2822, 1, 0, 0, 0, 2822, 457, 1, 0, 0, 0, 2823, 2821, 1, 0, 0, 0, 2824, 2825, 6, 229, -1, 0, 2825, 2826, 3, 456, 228, 0, 2826, 2832, 1, 0, 0, 0, 2827, 2828, 10, 1, 0, 0, 2828, 2829, 5, 109, 0, 0, 2829, 2831, 3, 456, 228, 0, 2830, 2827, 1, 0, 0, 0, 2831, 2834, 1, 0, 0, 0, 2832, 2830, 1, 0, 0, 0, 2832, 2833, 1, 0, 0, 0, 2833, 459, 1, 0, 0, 0, 2834, 2832, 1, 0, 0, 0, 2835, 2836, 6, 230, -1, 0, 2836, 2837, 3, 458, 229, 0, 2837, 2843, 1, 0, 0, 0, 2838, 2839, 10, 1, 0, 0, 2839, 2840, 5, 100, 0, 0, 2840, 2842, 3, 458, 229, 0, 2841, 2838, 1, 0, 0, 0, 2842, 2845, 1, 0, 0, 0, 2843, 2841, 1, 0, 0, 0, 2843, 2844, 1, 0, 0, 0, 2844, 461, 1, 0, 0, 0, 2845, 2843, 1, 0, 0, 0, 2846, 2847, 6, 231, -1, 0, 2847, 2848, 3, 460, 230, 0, 2848, 2854, 1, 0, 0, 0, 2849, 2850, 10, 1, 0, 0, 2850, 2851, 5, 101, 0, 0, 2851, 2853, 3, 460, 230, 0, 2852, 2849, 1, 0, 0, 0, 2853, 2856, 1, 0, 0, 0, 2854, 2852, 1, 0, 0, 0, 2854, 2855, 1, 0, 0, 0, 2855, 463, 1, 0, 0, 0, 2856, 2854, 1, 0, 0, 0, 2857, 2871, 3, 462, 231, 0, 2858, 2859, 3, 462, 231, 0, 2859, 2860, 5, 93, 0, 0, 2860, 2861, 3, 388, 194, 0, 2861, 2862, 5, 94, 0, 0, 2862, 2863, 3, 464, 232, 0, 2863, 2871, 1, 0, 0, 0, 2864, 2865, 3, 462, 231, 0, 2865, 2866, 5, 93, 0, 0, 2866, 2867, 3, 388, 194, 0, 2867, 2868, 5, 94, 0, 0, 2868, 2869, 3, 474, 237, 0, 2869, 2871, 1, 0, 0, 0, 2870, 2857, 1, 0, 0, 0, 2870, 2858, 1, 0, 0, 0, 2870, 2864, 1, 0, 0, 0, 2871, 465, 1, 0, 0, 0, 2872, 2875, 3, 464, 232, 0, 2873, 2875, 3, 468, 234, 0, 2874, 2872, 1, 0, 0, 0, 2874, 2873, 1, 0, 0, 0, 2875, 467, 1, 0, 0, 0, 2876, 2877, 3, 470, 235, 0, 2877, 2878, 3, 472, 236, 0, 2878, 2879, 3, 388, 194, 0, 2879, 469, 1, 0, 0, 0, 2880, 2884, 3, 58, 29, 0, 2881, 2884, 3, 418, 209, 0, 2882, 2884, 3, 416, 208, 0, 2883, 2880, 1, 0, 0, 0, 2883, 2881, 1, 0, 0, 0, 2883, 2882, 1, 0, 0, 0, 2884, 471, 1, 0, 0, 0, 2885, 2886, 7, 5, 0, 0, 2886, 473, 1, 0, 0, 0, 2887, 2888, 3, 476, 238, 0, 2888, 2889, 5, 95, 0, 0, 2889, 2890, 3, 484, 242, 0, 2890, 475, 1, 0, 0, 0, 2891, 2893, 5, 76, 0, 0, 2892, 2894, 3, 478, 239, 0, 2893, 2892, 1, 0, 0, 0, 2893, 2894, 1, 0, 0, 0, 2894, 2895, 1, 0, 0, 0, 2895, 2898, 5, 77, 0, 0, 2896, 2898, 5, 123, 0, 0, 2897, 2891, 1, 0, 0, 0, 2897, 2896, 1, 0, 0, 0, 2898, 477, 1, 0, 0, 0, 2899, 2904, 3, 480, 240, 0, 2900, 2901, 5, 83, 0, 0, 2901, 2903, 3, 480, 240, 0, 2902, 2900, 1, 0, 0, 0, 2903, 2906, 1, 0, 0, 0, 2904, 2902, 1, 0, 0, 0, 2904, 2905, 1, 0, 0, 0, 2905, 2916, 1, 0, 0, 0, 2906, 2904, 1, 0, 0, 0, 2907, 2912, 5, 123, 0, 0, 2908, 2909, 5, 83, 0, 0, 2909, 2911, 5, 123, 0, 0, 2910, 2908, 1, 0, 0, 0, 2911, 2914, 1, 0, 0, 0, 2912, 2910, 1, 0, 0, 0, 2912, 2913, 1, 0, 0, 0, 2913, 2916, 1, 0, 0, 0, 2914, 2912, 1, 0, 0, 0, 2915, 2899, 1, 0, 0, 0, 2915, 2907, 1, 0, 0, 0, 2916, 479, 1, 0, 0, 0, 2917, 2919, 3, 164, 82, 0, 2918, 2917, 1, 0, 0, 0, 2919, 2922, 1, 0, 0, 0, 2920, 2918, 1, 0, 0, 0, 2920, 2921, 1, 0, 0, 0, 2921, 2923, 1, 0, 0, 0, 2922, 2920, 1, 0, 0, 0, 2923, 2924, 3, 482, 241, 0, 2924, 2925, 3, 124, 62, 0, 2925, 2928, 1, 0, 0, 0, 2926, 2928, 3, 162, 81, 0, 2927, 2920, 1, 0, 0, 0, 2927, 2926, 1, 0, 0, 0, 2928, 481, 1, 0, 0, 0, 2929, 2932, 3, 128, 64, 0, 2930, 2932, 5, 15, 0, 0, 2931, 2929, 1, 0, 0, 0, 2931, 2930, 1, 0, 0, 0, 2932, 483, 1, 0, 0, 0, 2933, 2936, 3, 388, 194, 0, 2934, 2936, 3, 276, 138, 0, 2935, 2933, 1, 0, 0, 0, 2935, 2934, 1, 0, 0, 0, 2936, 485, 1, 0, 0, 0, 2937, 2938, 5, 58, 0, 0, 2938, 2939, 5, 76, 0, 0, 2939, 2940, 3, 388, 194, 0, 2940, 2941, 5, 77, 0, 0, 2941, 2942, 3, 316, 158, 0, 2942, 487, 1, 0, 0, 0, 2943, 2944, 3, 388, 194, 0, 2944, 489, 1, 0, 0, 0, 360, 502, 507, 511, 520, 526, 531, 534, 539, 544, 549, 552, 557, 562, 569, 574, 581, 586, 588, 595, 609, 614, 622, 629, 635, 640, 650, 653, 667, 672, 677, 682, 688, 693, 698, 703, 708, 713, 722, 726, 729, 734, 740, 746, 754, 763, 774, 803, 808, 812, 820, 827, 836, 850, 853, 865, 868, 884, 889, 896, 901, 907, 910, 913, 916, 930, 941, 955, 964, 971, 980, 987, 992, 1007, 1014, 1020, 1024, 1028, 1032, 1036, 1041, 1048, 1051, 1055, 1058, 1064, 1069, 1072, 1076, 1080, 1086, 1091, 1093, 1102, 1109, 1125, 1131, 1134, 1139, 1143, 1150, 1153, 1157, 1162, 1168, 1177, 1183, 1190, 1195, 1202, 1210, 1220, 1225, 1229, 1239, 1244, 1252, 1255, 1262, 1265, 1273, 1276, 1281, 1286, 1292, 1296, 1301, 1306, 1311, 1317, 1323, 1326, 1329, 1338, 1344, 1350, 1353, 1356, 1364, 1370, 1376, 1380, 1386, 1395, 1401, 1408, 1413, 1420, 1432, 1439, 1444, 1452, 1457, 1463, 1466, 1469, 1482, 1493, 1500, 1510, 1515, 1526, 1531, 1544, 1549, 1561, 1571, 1576, 1584, 1587, 1594, 1602, 1608, 1617, 1627, 1631, 1634, 1643, 1657, 1660, 1669, 1674, 1682, 1688, 1692, 1697, 1702, 1706, 1717, 1724, 1739, 1761, 1789, 1804, 1813, 1821, 1825, 1834, 1843, 1854, 1858, 1884, 1888, 1893, 1897, 1901, 1909, 1913, 1917, 1924, 1933, 1954, 1960, 1966, 1991, 1996, 2002, 2014, 2025, 2035, 2038, 2043, 2052, 2057, 2061, 2073, 2077, 2081, 2085, 2089, 2095, 2101, 2105, 2111, 2117, 2123, 2129, 2137, 2144, 2151, 2156, 2160, 2165, 2170, 2174, 2179, 2184, 2188, 2193, 2198, 2202, 2207, 2212, 2216, 2223, 2228, 2232, 2237, 2241, 2246, 2250, 2255, 2259, 2264, 2268, 2275, 2279, 2284, 2288, 2294, 2296, 2301, 2306, 2312, 2316, 2321, 2325, 2329, 2333, 2335, 2342, 2353, 2364, 2372, 2383, 2387, 2392, 2396, 2401, 2409, 2415, 2419, 2423, 2427, 2433, 2439, 2441, 2453, 2459, 2465, 2487, 2502, 2507, 2514, 2519, 2526, 2531, 2538, 2543, 2550, 2555, 2563, 2568, 2572, 2579, 2585, 2592, 2599, 2606, 2614, 2621, 2629, 2633, 2637, 2639, 2643, 2647, 2649, 2664, 2679, 2691, 2702, 2708, 2722, 2724, 2736, 2738, 2757, 2759, 2781, 2783, 2785, 2797, 2799, 2810, 2821, 2832, 2843, 2854, 2870, 2874, 2883, 2893, 2897, 2904, 2912, 2915, 2920, 2927, 2931, 2935] \ No newline at end of file diff --git a/cfg_generator/src/antlr/gen/JavaParser.py b/cfg_generator/src/antlr/gen/JavaParser.py new file mode 100644 index 00000000..3cf84c4b --- /dev/null +++ b/cfg_generator/src/antlr/gen/JavaParser.py @@ -0,0 +1,22100 @@ +# Generated from F:/cfg-generator/grammar/JavaParser.g4 by ANTLR 4.13.1 +# encoding: utf-8 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + +def serializedATN(): + return [ + 4,1,126,2946,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7, + 13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2, + 20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7, + 26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2, + 33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7, + 39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2, + 46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,7, + 52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,2, + 59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,65,7, + 65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7,71,2, + 72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2,78,7, + 78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7,84,2, + 85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,91,7, + 91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,2, + 98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103,7,103, + 2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108,2,109, + 7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114,7,114, + 2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119,2,120, + 7,120,2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124,2,125,7,125, + 2,126,7,126,2,127,7,127,2,128,7,128,2,129,7,129,2,130,7,130,2,131, + 7,131,2,132,7,132,2,133,7,133,2,134,7,134,2,135,7,135,2,136,7,136, + 2,137,7,137,2,138,7,138,2,139,7,139,2,140,7,140,2,141,7,141,2,142, + 7,142,2,143,7,143,2,144,7,144,2,145,7,145,2,146,7,146,2,147,7,147, + 2,148,7,148,2,149,7,149,2,150,7,150,2,151,7,151,2,152,7,152,2,153, + 7,153,2,154,7,154,2,155,7,155,2,156,7,156,2,157,7,157,2,158,7,158, + 2,159,7,159,2,160,7,160,2,161,7,161,2,162,7,162,2,163,7,163,2,164, + 7,164,2,165,7,165,2,166,7,166,2,167,7,167,2,168,7,168,2,169,7,169, + 2,170,7,170,2,171,7,171,2,172,7,172,2,173,7,173,2,174,7,174,2,175, + 7,175,2,176,7,176,2,177,7,177,2,178,7,178,2,179,7,179,2,180,7,180, + 2,181,7,181,2,182,7,182,2,183,7,183,2,184,7,184,2,185,7,185,2,186, + 7,186,2,187,7,187,2,188,7,188,2,189,7,189,2,190,7,190,2,191,7,191, + 2,192,7,192,2,193,7,193,2,194,7,194,2,195,7,195,2,196,7,196,2,197, + 7,197,2,198,7,198,2,199,7,199,2,200,7,200,2,201,7,201,2,202,7,202, + 2,203,7,203,2,204,7,204,2,205,7,205,2,206,7,206,2,207,7,207,2,208, + 7,208,2,209,7,209,2,210,7,210,2,211,7,211,2,212,7,212,2,213,7,213, + 2,214,7,214,2,215,7,215,2,216,7,216,2,217,7,217,2,218,7,218,2,219, + 7,219,2,220,7,220,2,221,7,221,2,222,7,222,2,223,7,223,2,224,7,224, + 2,225,7,225,2,226,7,226,2,227,7,227,2,228,7,228,2,229,7,229,2,230, + 7,230,2,231,7,231,2,232,7,232,2,233,7,233,2,234,7,234,2,235,7,235, + 2,236,7,236,2,237,7,237,2,238,7,238,2,239,7,239,2,240,7,240,2,241, + 7,241,2,242,7,242,2,243,7,243,2,244,7,244,1,0,1,0,1,0,1,1,1,1,1, + 2,1,2,1,3,1,3,1,4,5,4,501,8,4,10,4,12,4,504,9,4,1,4,1,4,3,4,508, + 8,4,1,5,1,5,3,5,512,8,5,1,6,1,6,1,7,1,7,1,8,1,8,1,8,3,8,521,8,8, + 1,9,1,9,5,9,525,8,9,10,9,12,9,528,9,9,1,9,1,9,3,9,532,8,9,1,9,3, + 9,535,8,9,1,10,1,10,1,10,3,10,540,8,10,1,10,5,10,543,8,10,10,10, + 12,10,546,9,10,1,10,1,10,3,10,550,8,10,1,10,3,10,553,8,10,1,11,5, + 11,556,8,11,10,11,12,11,559,9,11,1,11,1,11,3,11,563,8,11,1,11,1, + 11,1,11,5,11,568,8,11,10,11,12,11,571,9,11,1,11,1,11,3,11,575,8, + 11,1,11,1,11,1,11,5,11,580,8,11,10,11,12,11,583,9,11,1,11,1,11,3, + 11,587,8,11,3,11,589,8,11,1,12,1,12,1,13,5,13,594,8,13,10,13,12, + 13,597,9,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1, + 14,3,14,610,8,14,1,15,5,15,613,8,15,10,15,12,15,616,9,15,1,15,1, + 15,1,15,5,15,621,8,15,10,15,12,15,624,9,15,1,15,1,15,5,15,628,8, + 15,10,15,12,15,631,9,15,1,16,5,16,634,8,16,10,16,12,16,637,9,16, + 1,16,1,16,3,16,641,8,16,1,17,1,17,1,18,1,18,1,18,1,18,5,18,649,8, + 18,10,18,12,18,652,9,18,3,18,654,8,18,1,19,1,19,1,19,1,20,1,20,1, + 20,1,20,1,21,1,21,1,21,5,21,666,8,21,10,21,12,21,669,9,21,1,22,1, + 22,3,22,673,8,22,1,23,5,23,676,8,23,10,23,12,23,679,9,23,1,23,1, + 23,3,23,683,8,23,1,24,1,24,1,24,1,24,3,24,689,8,24,1,25,1,25,1,25, + 3,25,694,8,25,1,26,1,26,1,26,3,26,699,8,26,1,27,1,27,1,27,3,27,704, + 8,27,1,28,1,28,1,28,3,28,709,8,28,1,29,1,29,1,29,3,29,714,8,29,1, + 29,1,29,1,30,1,30,1,31,1,31,1,31,3,31,723,8,31,1,32,1,32,3,32,727, + 8,32,1,33,3,33,730,8,33,1,33,5,33,733,8,33,10,33,12,33,736,9,33, + 1,33,5,33,739,8,33,10,33,12,33,742,9,33,1,34,5,34,745,8,34,10,34, + 12,34,748,9,34,1,34,1,34,1,35,5,35,753,8,35,10,35,12,35,756,9,35, + 1,35,1,35,1,35,1,35,5,35,762,8,35,10,35,12,35,765,9,35,1,35,1,35, + 1,36,1,36,1,37,1,37,1,37,1,37,3,37,775,8,37,1,38,1,38,1,38,1,38, + 1,39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40, + 1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,3,42,804,8,42, + 1,43,5,43,807,8,43,10,43,12,43,810,9,43,1,43,3,43,813,8,43,1,43, + 1,43,1,43,1,43,5,43,819,8,43,10,43,12,43,822,9,43,1,43,1,43,5,43, + 826,8,43,10,43,12,43,829,9,43,1,43,1,43,1,44,1,44,5,44,835,8,44, + 10,44,12,44,838,9,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44, + 5,44,849,8,44,10,44,12,44,852,9,44,3,44,854,8,44,1,44,1,44,1,44, + 1,44,1,44,1,44,1,44,1,44,5,44,864,8,44,10,44,12,44,867,9,44,3,44, + 869,8,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44, + 1,44,5,44,883,8,44,10,44,12,44,886,9,44,1,44,1,44,3,44,890,8,44, + 1,45,1,45,1,46,1,46,1,46,3,46,897,8,46,1,47,5,47,900,8,47,10,47, + 12,47,903,9,47,1,47,1,47,1,47,3,47,908,8,47,1,47,3,47,911,8,47,1, + 47,3,47,914,8,47,1,47,3,47,917,8,47,1,47,1,47,1,48,1,48,1,48,1,48, + 1,48,1,48,1,48,1,48,1,48,1,48,3,48,931,8,48,1,49,1,49,1,49,1,49, + 1,50,1,50,1,50,5,50,940,8,50,10,50,12,50,943,9,50,1,51,1,51,1,51, + 1,52,1,52,1,52,1,53,1,53,1,53,5,53,954,8,53,10,53,12,53,957,9,53, + 1,54,1,54,1,54,1,54,5,54,963,8,54,10,54,12,54,966,9,54,1,55,1,55, + 5,55,970,8,55,10,55,12,55,973,9,55,1,55,1,55,1,56,1,56,1,56,1,56, + 3,56,981,8,56,1,57,1,57,1,57,1,57,1,57,3,57,988,8,57,1,58,5,58,991, + 8,58,10,58,12,58,994,9,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59, + 1,59,1,59,1,59,1,59,3,59,1008,8,59,1,60,1,60,1,60,5,60,1013,8,60, + 10,60,12,60,1016,9,60,1,61,1,61,1,61,3,61,1021,8,61,1,62,1,62,3, + 62,1025,8,62,1,63,1,63,3,63,1029,8,63,1,64,1,64,3,64,1033,8,64,1, + 65,1,65,3,65,1037,8,65,1,66,1,66,1,66,3,66,1042,8,66,1,67,1,67,1, + 67,5,67,1047,8,67,10,67,12,67,1050,9,67,3,67,1052,8,67,1,67,1,67, + 3,67,1056,8,67,1,67,3,67,1059,8,67,1,68,1,68,5,68,1063,8,68,10,68, + 12,68,1066,9,68,1,68,1,68,3,68,1070,8,68,1,68,3,68,1073,8,68,1,69, + 1,69,3,69,1077,8,69,1,69,1,69,3,69,1081,8,69,1,69,1,69,5,69,1085, + 8,69,10,69,12,69,1088,9,69,1,69,1,69,3,69,1092,8,69,3,69,1094,8, + 69,1,70,1,70,1,71,1,71,1,72,1,72,1,72,3,72,1103,8,72,1,72,1,72,1, + 73,5,73,1108,8,73,10,73,12,73,1111,9,73,1,73,1,73,1,73,1,74,1,74, + 1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,3,74,1126,8,74,1,75,1,75, + 5,75,1130,8,75,10,75,12,75,1133,9,75,3,75,1135,8,75,1,75,1,75,1, + 75,3,75,1140,8,75,1,76,1,76,3,76,1144,8,76,1,77,1,77,1,77,1,77,1, + 77,3,77,1151,8,77,1,77,3,77,1154,8,77,1,77,1,77,3,77,1158,8,77,1, + 78,5,78,1161,8,78,10,78,12,78,1164,9,78,1,78,1,78,1,78,3,78,1169, + 8,78,1,78,1,78,1,79,1,79,1,79,5,79,1176,8,79,10,79,12,79,1179,9, + 79,1,80,5,80,1182,8,80,10,80,12,80,1185,9,80,1,80,1,80,1,80,1,80, + 3,80,1191,8,80,1,81,5,81,1194,8,81,10,81,12,81,1197,9,81,1,81,1, + 81,5,81,1201,8,81,10,81,12,81,1204,9,81,1,81,1,81,1,81,1,82,1,82, + 3,82,1211,8,82,1,83,1,83,1,83,1,84,1,84,1,84,5,84,1219,8,84,10,84, + 12,84,1222,9,84,1,85,1,85,3,85,1226,8,85,1,86,1,86,3,86,1230,8,86, + 1,87,1,87,1,88,1,88,1,88,1,89,5,89,1238,8,89,10,89,12,89,1241,9, + 89,1,89,1,89,3,89,1245,8,89,1,89,1,89,1,90,1,90,1,90,1,90,3,90,1253, + 8,90,1,91,3,91,1256,8,91,1,91,1,91,1,91,1,91,1,91,3,91,1263,8,91, + 1,91,3,91,1266,8,91,1,91,1,91,1,92,1,92,1,93,1,93,3,93,1274,8,93, + 1,93,3,93,1277,8,93,1,93,1,93,1,94,3,94,1282,8,94,1,94,1,94,1,94, + 3,94,1287,8,94,1,94,1,94,1,94,1,94,3,94,1293,8,94,1,94,1,94,3,94, + 1297,8,94,1,94,1,94,1,94,3,94,1302,8,94,1,94,1,94,1,94,3,94,1307, + 8,94,1,95,5,95,1310,8,95,10,95,12,95,1313,9,95,1,95,1,95,1,95,3, + 95,1318,8,95,1,95,1,95,1,96,1,96,3,96,1324,8,96,1,96,3,96,1327,8, + 96,1,96,3,96,1330,8,96,1,96,1,96,1,97,1,97,1,97,5,97,1337,8,97,10, + 97,12,97,1340,9,97,1,98,5,98,1343,8,98,10,98,12,98,1346,9,98,1,98, + 1,98,1,98,3,98,1351,8,98,1,98,3,98,1354,8,98,1,98,3,98,1357,8,98, + 1,99,1,99,1,100,1,100,5,100,1363,8,100,10,100,12,100,1366,9,100, + 1,101,5,101,1369,8,101,10,101,12,101,1372,9,101,1,101,1,101,1,101, + 3,101,1377,8,101,1,101,1,101,3,101,1381,8,101,1,101,1,101,1,102, + 1,102,3,102,1387,8,102,1,102,1,102,1,103,1,103,1,103,5,103,1394, + 8,103,10,103,12,103,1397,9,103,1,104,5,104,1400,8,104,10,104,12, + 104,1403,9,104,1,104,1,104,1,104,1,104,3,104,1409,8,104,1,105,5, + 105,1412,8,105,10,105,12,105,1415,9,105,1,105,1,105,5,105,1419,8, + 105,10,105,12,105,1422,9,105,1,105,1,105,1,105,1,106,1,106,1,107, + 1,107,5,107,1431,8,107,10,107,12,107,1434,9,107,1,107,1,107,1,108, + 1,108,3,108,1440,8,108,1,109,5,109,1443,8,109,10,109,12,109,1446, + 9,109,1,109,1,109,1,109,1,110,1,110,3,110,1453,8,110,1,111,5,111, + 1456,8,111,10,111,12,111,1459,9,111,1,111,1,111,1,111,3,111,1464, + 8,111,1,111,3,111,1467,8,111,1,111,3,111,1470,8,111,1,111,1,111, + 1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,3,112,1483, + 8,112,1,113,1,113,1,113,1,114,1,114,1,114,1,114,5,114,1492,8,114, + 10,114,12,114,1495,9,114,1,115,1,115,5,115,1499,8,115,10,115,12, + 115,1502,9,115,1,115,1,115,1,116,1,116,1,116,1,116,1,116,3,116,1511, + 8,116,1,117,5,117,1514,8,117,10,117,12,117,1517,9,117,1,117,1,117, + 1,117,1,117,1,118,1,118,1,118,1,118,3,118,1527,8,118,1,119,5,119, + 1530,8,119,10,119,12,119,1533,9,119,1,119,1,119,1,119,1,120,1,120, + 1,120,1,120,1,120,1,120,1,120,3,120,1545,8,120,1,121,5,121,1548, + 8,121,10,121,12,121,1551,9,121,1,121,1,121,1,121,1,121,1,121,1,122, + 1,122,5,122,1560,8,122,10,122,12,122,1563,9,122,1,122,1,122,1,123, + 1,123,1,123,1,123,1,123,3,123,1572,8,123,1,124,5,124,1575,8,124, + 10,124,12,124,1578,9,124,1,124,1,124,1,124,1,124,1,124,3,124,1585, + 8,124,1,124,3,124,1588,8,124,1,124,1,124,1,125,1,125,1,125,3,125, + 1595,8,125,1,126,1,126,1,126,1,127,1,127,1,127,3,127,1603,8,127, + 1,128,1,128,1,128,1,128,3,128,1609,8,128,1,128,1,128,1,129,1,129, + 1,129,5,129,1616,8,129,10,129,12,129,1619,9,129,1,130,1,130,1,130, + 1,130,1,131,1,131,1,131,3,131,1628,8,131,1,132,1,132,3,132,1632, + 8,132,1,132,3,132,1635,8,132,1,132,1,132,1,133,1,133,1,133,5,133, + 1642,8,133,10,133,12,133,1645,9,133,1,134,1,134,1,134,1,135,1,135, + 1,135,1,135,1,135,1,135,1,136,1,136,3,136,1658,8,136,1,136,3,136, + 1661,8,136,1,136,1,136,1,137,1,137,1,137,5,137,1668,8,137,10,137, + 12,137,1671,9,137,1,138,1,138,3,138,1675,8,138,1,138,1,138,1,139, + 1,139,5,139,1681,8,139,10,139,12,139,1684,9,139,1,140,1,140,1,140, + 3,140,1689,8,140,1,141,1,141,3,141,1693,8,141,1,142,5,142,1696,8, + 142,10,142,12,142,1699,9,142,1,142,1,142,3,142,1703,8,142,1,143, + 1,143,3,143,1707,8,143,1,144,1,144,1,144,1,145,1,145,1,145,1,145, + 1,145,1,145,3,145,1718,8,145,1,146,1,146,1,146,1,146,1,146,3,146, + 1725,8,146,1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,147, + 1,147,1,147,1,147,1,147,3,147,1740,8,147,1,148,1,148,1,149,1,149, + 1,149,1,149,1,150,1,150,1,150,1,150,1,151,1,151,1,151,1,152,1,152, + 1,152,1,152,1,152,1,152,1,152,3,152,1762,8,152,1,153,1,153,1,153, + 1,153,1,153,1,153,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154, + 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,156,1,156,1,156, + 1,156,3,156,1790,8,156,1,156,1,156,1,157,1,157,1,157,1,157,1,157, + 1,157,1,158,1,158,1,158,5,158,1803,8,158,10,158,12,158,1806,9,158, + 1,158,1,158,1,158,1,158,5,158,1812,8,158,10,158,12,158,1815,9,158, + 1,158,1,158,1,158,5,158,1820,8,158,10,158,12,158,1823,9,158,1,158, + 3,158,1826,8,158,1,159,1,159,1,159,1,159,1,159,1,159,1,159,3,159, + 1835,8,159,1,160,1,160,1,160,1,160,1,160,5,160,1842,8,160,10,160, + 12,160,1845,9,160,1,160,1,160,1,161,1,161,1,161,1,161,5,161,1853, + 8,161,10,161,12,161,1856,9,161,1,161,3,161,1859,8,161,1,162,1,162, + 1,163,1,163,1,163,1,163,1,163,1,163,1,164,1,164,1,164,1,164,1,164, + 1,164,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,166,1,166, + 3,166,1885,8,166,1,167,1,167,3,167,1889,8,167,1,168,1,168,1,168, + 3,168,1894,8,168,1,168,1,168,3,168,1898,8,168,1,168,1,168,3,168, + 1902,8,168,1,168,1,168,1,168,1,169,1,169,1,169,3,169,1910,8,169, + 1,169,1,169,3,169,1914,8,169,1,169,1,169,3,169,1918,8,169,1,169, + 1,169,1,169,1,170,1,170,3,170,1925,8,170,1,171,1,171,1,172,1,172, + 1,172,5,172,1932,8,172,10,172,12,172,1935,9,172,1,173,1,173,1,173, + 1,173,1,173,1,173,1,173,1,173,1,174,1,174,1,174,1,174,1,174,1,174, + 1,174,1,174,1,175,1,175,3,175,1955,8,175,1,175,1,175,1,176,1,176, + 3,176,1961,8,176,1,176,1,176,1,177,1,177,3,177,1967,8,177,1,177, + 1,177,1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,179,1,179, + 1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180, + 3,180,1992,8,180,1,180,1,180,1,180,3,180,1997,8,180,1,181,1,181, + 5,181,2001,8,181,10,181,12,181,2004,9,181,1,182,1,182,1,182,1,182, + 1,182,1,182,1,183,5,183,2013,8,183,10,183,12,183,2016,9,183,1,183, + 1,183,1,183,1,184,1,184,1,184,5,184,2024,8,184,10,184,12,184,2027, + 9,184,1,185,1,185,1,185,1,186,1,186,1,186,1,186,3,186,2036,8,186, + 1,186,3,186,2039,8,186,1,187,1,187,1,187,3,187,2044,8,187,1,187, + 1,187,1,188,1,188,1,188,5,188,2051,8,188,10,188,12,188,2054,9,188, + 1,189,1,189,3,189,2058,8,189,1,190,1,190,3,190,2062,8,190,1,191, + 1,191,1,191,1,191,1,192,1,192,1,193,1,193,1,194,1,194,3,194,2074, + 8,194,1,195,1,195,3,195,2078,8,195,1,196,1,196,3,196,2082,8,196, + 1,196,1,196,3,196,2086,8,196,1,196,1,196,3,196,2090,8,196,1,196, + 1,196,1,196,1,196,3,196,2096,8,196,1,196,1,196,1,196,1,196,3,196, + 2102,8,196,1,196,1,196,3,196,2106,8,196,1,196,1,196,1,196,1,196, + 3,196,2112,8,196,1,196,1,196,1,196,1,196,3,196,2118,8,196,1,196, + 1,196,1,196,1,196,3,196,2124,8,196,1,196,1,196,1,196,1,196,3,196, + 2130,8,196,1,196,1,196,1,196,1,196,1,196,1,196,3,196,2138,8,196, + 1,196,1,196,1,196,1,196,1,196,3,196,2145,8,196,1,196,1,196,1,196, + 1,196,1,196,3,196,2152,8,196,1,196,1,196,1,196,3,196,2157,8,196, + 1,196,1,196,3,196,2161,8,196,1,196,1,196,1,196,3,196,2166,8,196, + 1,196,1,196,1,196,3,196,2171,8,196,1,196,1,196,3,196,2175,8,196, + 1,196,1,196,1,196,3,196,2180,8,196,1,196,1,196,1,196,3,196,2185, + 8,196,1,196,1,196,3,196,2189,8,196,1,196,1,196,1,196,3,196,2194, + 8,196,1,196,1,196,1,196,3,196,2199,8,196,1,196,1,196,3,196,2203, + 8,196,1,196,1,196,1,196,3,196,2208,8,196,1,196,1,196,1,196,3,196, + 2213,8,196,1,196,1,196,3,196,2217,8,196,1,196,1,196,1,196,1,196, + 1,196,3,196,2224,8,196,1,196,1,196,1,196,3,196,2229,8,196,1,196, + 1,196,3,196,2233,8,196,1,196,1,196,1,196,3,196,2238,8,196,1,196, + 1,196,3,196,2242,8,196,1,196,1,196,1,196,3,196,2247,8,196,1,196, + 1,196,3,196,2251,8,196,1,196,1,196,1,196,3,196,2256,8,196,1,196, + 1,196,3,196,2260,8,196,1,196,1,196,1,196,3,196,2265,8,196,1,196, + 1,196,3,196,2269,8,196,1,196,1,196,1,196,1,196,1,196,3,196,2276, + 8,196,1,196,1,196,3,196,2280,8,196,1,196,1,196,1,196,3,196,2285, + 8,196,1,196,1,196,3,196,2289,8,196,1,196,1,196,1,196,1,196,3,196, + 2295,8,196,3,196,2297,8,196,1,197,1,197,1,197,3,197,2302,8,197,1, + 197,1,197,1,197,3,197,2307,8,197,1,197,1,197,1,197,1,197,3,197,2313, + 8,197,1,197,1,197,3,197,2317,8,197,1,197,1,197,1,197,3,197,2322, + 8,197,1,197,1,197,3,197,2326,8,197,1,197,1,197,3,197,2330,8,197, + 1,197,1,197,3,197,2334,8,197,3,197,2336,8,197,1,198,1,198,1,198, + 5,198,2341,8,198,10,198,12,198,2344,9,198,1,198,1,198,1,198,1,198, + 1,198,1,198,5,198,2352,8,198,10,198,12,198,2355,9,198,1,198,1,198, + 1,198,1,198,1,198,1,198,5,198,2363,8,198,10,198,12,198,2366,9,198, + 1,198,1,198,1,198,1,198,1,198,3,198,2373,8,198,1,199,1,199,1,199, + 1,199,1,199,1,199,1,199,1,199,1,199,3,199,2384,8,199,1,200,1,200, + 3,200,2388,8,200,1,200,1,200,1,200,3,200,2393,8,200,1,200,1,200, + 3,200,2397,8,200,1,201,5,201,2400,8,201,10,201,12,201,2403,9,201, + 1,201,1,201,1,201,5,201,2408,8,201,10,201,12,201,2411,9,201,1,201, + 5,201,2414,8,201,10,201,12,201,2417,9,201,1,201,3,201,2420,8,201, + 1,202,1,202,3,202,2424,8,202,1,203,1,203,3,203,2428,8,203,1,204, + 1,204,1,204,1,204,3,204,2434,8,204,1,204,1,204,1,204,1,204,3,204, + 2440,8,204,3,204,2442,8,204,1,205,1,205,1,205,1,205,1,205,1,205, + 1,205,1,205,1,205,1,205,3,205,2454,8,205,1,206,1,206,5,206,2458, + 8,206,10,206,12,206,2461,9,206,1,207,5,207,2464,8,207,10,207,12, + 207,2467,9,207,1,207,1,207,1,207,1,207,1,208,1,208,1,208,1,208,1, + 208,1,208,1,208,1,208,1,208,1,208,1,208,1,208,1,208,1,208,1,208, + 3,208,2488,8,208,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209, + 1,209,1,209,1,209,1,209,1,209,3,209,2503,8,209,1,210,1,210,1,210, + 3,210,2508,8,210,1,210,1,210,1,210,1,210,1,210,3,210,2515,8,210, + 1,210,1,210,1,210,3,210,2520,8,210,1,210,1,210,1,210,1,210,1,210, + 3,210,2527,8,210,1,210,1,210,1,210,3,210,2532,8,210,1,210,1,210, + 1,210,1,210,1,210,3,210,2539,8,210,1,210,1,210,1,210,3,210,2544, + 8,210,1,210,1,210,1,210,1,210,1,210,3,210,2551,8,210,1,210,1,210, + 1,210,3,210,2556,8,210,1,210,1,210,1,210,1,210,1,210,1,210,3,210, + 2564,8,210,1,210,1,210,1,210,3,210,2569,8,210,1,210,1,210,3,210, + 2573,8,210,1,211,1,211,1,211,5,211,2578,8,211,10,211,12,211,2581, + 9,211,1,212,1,212,1,212,3,212,2586,8,212,1,212,1,212,1,212,1,212, + 1,212,3,212,2593,8,212,1,212,1,212,1,212,1,212,1,212,3,212,2600, + 8,212,1,212,1,212,1,212,1,212,1,212,3,212,2607,8,212,1,212,1,212, + 1,212,1,212,1,212,1,212,3,212,2615,8,212,1,212,1,212,1,212,1,212, + 1,212,3,212,2622,8,212,1,212,1,212,1,212,1,212,1,212,1,212,3,212, + 2630,8,212,1,213,1,213,3,213,2634,8,213,1,213,1,213,3,213,2638,8, + 213,3,213,2640,8,213,1,214,1,214,3,214,2644,8,214,1,214,1,214,3, + 214,2648,8,214,3,214,2650,8,214,1,215,1,215,1,215,1,216,1,216,1, + 216,1,217,1,217,1,217,1,217,1,217,1,217,1,217,3,217,2665,8,217,1, + 218,1,218,1,218,1,219,1,219,1,219,1,220,1,220,1,220,1,220,1,220, + 1,220,1,220,3,220,2680,8,220,1,221,1,221,1,221,1,221,1,221,1,221, + 1,221,1,221,5,221,2690,8,221,10,221,12,221,2693,9,221,1,221,1,221, + 1,221,1,221,1,221,1,221,5,221,2701,8,221,10,221,12,221,2704,9,221, + 1,221,1,221,1,221,3,221,2709,8,221,1,222,1,222,1,222,1,222,1,222, + 1,222,1,222,1,222,1,222,1,222,1,222,1,222,5,222,2723,8,222,10,222, + 12,222,2726,9,222,1,223,1,223,1,223,1,223,1,223,1,223,1,223,1,223, + 1,223,5,223,2737,8,223,10,223,12,223,2740,9,223,1,224,1,224,1,224, + 1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224, + 1,224,1,224,5,224,2758,8,224,10,224,12,224,2761,9,224,1,225,1,225, + 1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225, + 1,225,1,225,1,225,1,225,1,225,1,225,3,225,2782,8,225,5,225,2784, + 8,225,10,225,12,225,2787,9,225,1,226,1,226,1,226,1,226,1,226,1,226, + 1,226,1,226,1,226,5,226,2798,8,226,10,226,12,226,2801,9,226,1,227, + 1,227,1,227,1,227,1,227,1,227,5,227,2809,8,227,10,227,12,227,2812, + 9,227,1,228,1,228,1,228,1,228,1,228,1,228,5,228,2820,8,228,10,228, + 12,228,2823,9,228,1,229,1,229,1,229,1,229,1,229,1,229,5,229,2831, + 8,229,10,229,12,229,2834,9,229,1,230,1,230,1,230,1,230,1,230,1,230, + 5,230,2842,8,230,10,230,12,230,2845,9,230,1,231,1,231,1,231,1,231, + 1,231,1,231,5,231,2853,8,231,10,231,12,231,2856,9,231,1,232,1,232, + 1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232, + 3,232,2871,8,232,1,233,1,233,3,233,2875,8,233,1,234,1,234,1,234, + 1,234,1,235,1,235,1,235,3,235,2884,8,235,1,236,1,236,1,237,1,237, + 1,237,1,237,1,238,1,238,3,238,2894,8,238,1,238,1,238,3,238,2898, + 8,238,1,239,1,239,1,239,5,239,2903,8,239,10,239,12,239,2906,9,239, + 1,239,1,239,1,239,5,239,2911,8,239,10,239,12,239,2914,9,239,3,239, + 2916,8,239,1,240,5,240,2919,8,240,10,240,12,240,2922,9,240,1,240, + 1,240,1,240,1,240,3,240,2928,8,240,1,241,1,241,3,241,2932,8,241, + 1,242,1,242,3,242,2936,8,242,1,243,1,243,1,243,1,243,1,243,1,243, + 1,244,1,244,1,244,0,10,444,446,448,450,452,454,456,458,460,462,245, + 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44, + 46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88, + 90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124, + 126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156, + 158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188, + 190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220, + 222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252, + 254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284, + 286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316, + 318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348, + 350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380, + 382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412, + 414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444, + 446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476, + 478,480,482,484,486,488,0,6,1,0,69,75,5,0,22,22,25,25,44,44,46,46, + 54,54,2,0,31,31,37,37,2,0,13,13,55,55,2,0,57,57,60,60,2,0,88,88, + 112,122,3206,0,490,1,0,0,0,2,493,1,0,0,0,4,495,1,0,0,0,6,497,1,0, + 0,0,8,502,1,0,0,0,10,511,1,0,0,0,12,513,1,0,0,0,14,515,1,0,0,0,16, + 520,1,0,0,0,18,522,1,0,0,0,20,539,1,0,0,0,22,588,1,0,0,0,24,590, + 1,0,0,0,26,595,1,0,0,0,28,609,1,0,0,0,30,614,1,0,0,0,32,635,1,0, + 0,0,34,642,1,0,0,0,36,644,1,0,0,0,38,655,1,0,0,0,40,658,1,0,0,0, + 42,662,1,0,0,0,44,672,1,0,0,0,46,677,1,0,0,0,48,688,1,0,0,0,50,690, + 1,0,0,0,52,695,1,0,0,0,54,700,1,0,0,0,56,705,1,0,0,0,58,713,1,0, + 0,0,60,717,1,0,0,0,62,719,1,0,0,0,64,726,1,0,0,0,66,729,1,0,0,0, + 68,746,1,0,0,0,70,754,1,0,0,0,72,768,1,0,0,0,74,774,1,0,0,0,76,776, + 1,0,0,0,78,780,1,0,0,0,80,786,1,0,0,0,82,793,1,0,0,0,84,803,1,0, + 0,0,86,808,1,0,0,0,88,889,1,0,0,0,90,891,1,0,0,0,92,896,1,0,0,0, + 94,901,1,0,0,0,96,930,1,0,0,0,98,932,1,0,0,0,100,936,1,0,0,0,102, + 944,1,0,0,0,104,947,1,0,0,0,106,950,1,0,0,0,108,958,1,0,0,0,110, + 967,1,0,0,0,112,980,1,0,0,0,114,987,1,0,0,0,116,992,1,0,0,0,118, + 1007,1,0,0,0,120,1009,1,0,0,0,122,1017,1,0,0,0,124,1022,1,0,0,0, + 126,1028,1,0,0,0,128,1032,1,0,0,0,130,1036,1,0,0,0,132,1041,1,0, + 0,0,134,1051,1,0,0,0,136,1060,1,0,0,0,138,1093,1,0,0,0,140,1095, + 1,0,0,0,142,1097,1,0,0,0,144,1102,1,0,0,0,146,1109,1,0,0,0,148,1125, + 1,0,0,0,150,1134,1,0,0,0,152,1143,1,0,0,0,154,1145,1,0,0,0,156,1162, + 1,0,0,0,158,1172,1,0,0,0,160,1190,1,0,0,0,162,1195,1,0,0,0,164,1210, + 1,0,0,0,166,1212,1,0,0,0,168,1215,1,0,0,0,170,1225,1,0,0,0,172,1229, + 1,0,0,0,174,1231,1,0,0,0,176,1233,1,0,0,0,178,1239,1,0,0,0,180,1252, + 1,0,0,0,182,1255,1,0,0,0,184,1269,1,0,0,0,186,1271,1,0,0,0,188,1306, + 1,0,0,0,190,1311,1,0,0,0,192,1321,1,0,0,0,194,1333,1,0,0,0,196,1344, + 1,0,0,0,198,1358,1,0,0,0,200,1360,1,0,0,0,202,1370,1,0,0,0,204,1384, + 1,0,0,0,206,1390,1,0,0,0,208,1408,1,0,0,0,210,1413,1,0,0,0,212,1426, + 1,0,0,0,214,1428,1,0,0,0,216,1439,1,0,0,0,218,1444,1,0,0,0,220,1452, + 1,0,0,0,222,1457,1,0,0,0,224,1482,1,0,0,0,226,1484,1,0,0,0,228,1487, + 1,0,0,0,230,1496,1,0,0,0,232,1510,1,0,0,0,234,1515,1,0,0,0,236,1526, + 1,0,0,0,238,1531,1,0,0,0,240,1544,1,0,0,0,242,1549,1,0,0,0,244,1557, + 1,0,0,0,246,1571,1,0,0,0,248,1576,1,0,0,0,250,1594,1,0,0,0,252,1596, + 1,0,0,0,254,1602,1,0,0,0,256,1604,1,0,0,0,258,1612,1,0,0,0,260,1620, + 1,0,0,0,262,1627,1,0,0,0,264,1629,1,0,0,0,266,1638,1,0,0,0,268,1646, + 1,0,0,0,270,1649,1,0,0,0,272,1655,1,0,0,0,274,1664,1,0,0,0,276,1672, + 1,0,0,0,278,1678,1,0,0,0,280,1688,1,0,0,0,282,1692,1,0,0,0,284,1697, + 1,0,0,0,286,1706,1,0,0,0,288,1708,1,0,0,0,290,1717,1,0,0,0,292,1724, + 1,0,0,0,294,1739,1,0,0,0,296,1741,1,0,0,0,298,1743,1,0,0,0,300,1747, + 1,0,0,0,302,1751,1,0,0,0,304,1761,1,0,0,0,306,1763,1,0,0,0,308,1769, + 1,0,0,0,310,1777,1,0,0,0,312,1785,1,0,0,0,314,1793,1,0,0,0,316,1825, + 1,0,0,0,318,1827,1,0,0,0,320,1836,1,0,0,0,322,1858,1,0,0,0,324,1860, + 1,0,0,0,326,1862,1,0,0,0,328,1868,1,0,0,0,330,1874,1,0,0,0,332,1884, + 1,0,0,0,334,1888,1,0,0,0,336,1890,1,0,0,0,338,1906,1,0,0,0,340,1924, + 1,0,0,0,342,1926,1,0,0,0,344,1928,1,0,0,0,346,1936,1,0,0,0,348,1944, + 1,0,0,0,350,1952,1,0,0,0,352,1958,1,0,0,0,354,1964,1,0,0,0,356,1970, + 1,0,0,0,358,1974,1,0,0,0,360,1996,1,0,0,0,362,1998,1,0,0,0,364,2005, + 1,0,0,0,366,2014,1,0,0,0,368,2020,1,0,0,0,370,2028,1,0,0,0,372,2031, + 1,0,0,0,374,2040,1,0,0,0,376,2047,1,0,0,0,378,2057,1,0,0,0,380,2061, + 1,0,0,0,382,2063,1,0,0,0,384,2067,1,0,0,0,386,2069,1,0,0,0,388,2073, + 1,0,0,0,390,2077,1,0,0,0,392,2296,1,0,0,0,394,2335,1,0,0,0,396,2372, + 1,0,0,0,398,2383,1,0,0,0,400,2385,1,0,0,0,402,2401,1,0,0,0,404,2423, + 1,0,0,0,406,2427,1,0,0,0,408,2441,1,0,0,0,410,2453,1,0,0,0,412,2455, + 1,0,0,0,414,2465,1,0,0,0,416,2487,1,0,0,0,418,2502,1,0,0,0,420,2572, + 1,0,0,0,422,2574,1,0,0,0,424,2629,1,0,0,0,426,2639,1,0,0,0,428,2649, + 1,0,0,0,430,2651,1,0,0,0,432,2654,1,0,0,0,434,2664,1,0,0,0,436,2666, + 1,0,0,0,438,2669,1,0,0,0,440,2679,1,0,0,0,442,2708,1,0,0,0,444,2710, + 1,0,0,0,446,2727,1,0,0,0,448,2741,1,0,0,0,450,2762,1,0,0,0,452,2788, + 1,0,0,0,454,2802,1,0,0,0,456,2813,1,0,0,0,458,2824,1,0,0,0,460,2835, + 1,0,0,0,462,2846,1,0,0,0,464,2870,1,0,0,0,466,2874,1,0,0,0,468,2876, + 1,0,0,0,470,2883,1,0,0,0,472,2885,1,0,0,0,474,2887,1,0,0,0,476,2897, + 1,0,0,0,478,2915,1,0,0,0,480,2927,1,0,0,0,482,2931,1,0,0,0,484,2935, + 1,0,0,0,486,2937,1,0,0,0,488,2943,1,0,0,0,490,491,3,64,32,0,491, + 492,5,0,0,1,492,1,1,0,0,0,493,494,7,0,0,0,494,3,1,0,0,0,495,496, + 5,123,0,0,496,5,1,0,0,0,497,498,5,123,0,0,498,7,1,0,0,0,499,501, + 3,254,127,0,500,499,1,0,0,0,501,504,1,0,0,0,502,500,1,0,0,0,502, + 503,1,0,0,0,503,507,1,0,0,0,504,502,1,0,0,0,505,508,3,10,5,0,506, + 508,5,20,0,0,507,505,1,0,0,0,507,506,1,0,0,0,508,9,1,0,0,0,509,512, + 3,12,6,0,510,512,3,14,7,0,511,509,1,0,0,0,511,510,1,0,0,0,512,11, + 1,0,0,0,513,514,7,1,0,0,514,13,1,0,0,0,515,516,7,2,0,0,516,15,1, + 0,0,0,517,521,3,20,10,0,518,521,3,26,13,0,519,521,3,28,14,0,520, + 517,1,0,0,0,520,518,1,0,0,0,520,519,1,0,0,0,521,17,1,0,0,0,522,526, + 5,84,0,0,523,525,3,254,127,0,524,523,1,0,0,0,525,528,1,0,0,0,526, + 524,1,0,0,0,526,527,1,0,0,0,527,529,1,0,0,0,528,526,1,0,0,0,529, + 531,3,4,2,0,530,532,3,40,20,0,531,530,1,0,0,0,531,532,1,0,0,0,532, + 534,1,0,0,0,533,535,3,18,9,0,534,533,1,0,0,0,534,535,1,0,0,0,535, + 19,1,0,0,0,536,537,3,52,26,0,537,538,5,84,0,0,538,540,1,0,0,0,539, + 536,1,0,0,0,539,540,1,0,0,0,540,544,1,0,0,0,541,543,3,254,127,0, + 542,541,1,0,0,0,543,546,1,0,0,0,544,542,1,0,0,0,544,545,1,0,0,0, + 545,547,1,0,0,0,546,544,1,0,0,0,547,549,3,4,2,0,548,550,3,40,20, + 0,549,548,1,0,0,0,549,550,1,0,0,0,550,552,1,0,0,0,551,553,3,18,9, + 0,552,551,1,0,0,0,552,553,1,0,0,0,553,21,1,0,0,0,554,556,3,254,127, + 0,555,554,1,0,0,0,556,559,1,0,0,0,557,555,1,0,0,0,557,558,1,0,0, + 0,558,560,1,0,0,0,559,557,1,0,0,0,560,562,3,4,2,0,561,563,3,40,20, + 0,562,561,1,0,0,0,562,563,1,0,0,0,563,589,1,0,0,0,564,565,3,52,26, + 0,565,569,5,84,0,0,566,568,3,254,127,0,567,566,1,0,0,0,568,571,1, + 0,0,0,569,567,1,0,0,0,569,570,1,0,0,0,570,572,1,0,0,0,571,569,1, + 0,0,0,572,574,3,4,2,0,573,575,3,40,20,0,574,573,1,0,0,0,574,575, + 1,0,0,0,575,589,1,0,0,0,576,577,3,20,10,0,577,581,5,84,0,0,578,580, + 3,254,127,0,579,578,1,0,0,0,580,583,1,0,0,0,581,579,1,0,0,0,581, + 582,1,0,0,0,582,584,1,0,0,0,583,581,1,0,0,0,584,586,3,4,2,0,585, + 587,3,40,20,0,586,585,1,0,0,0,586,587,1,0,0,0,587,589,1,0,0,0,588, + 557,1,0,0,0,588,564,1,0,0,0,588,576,1,0,0,0,589,23,1,0,0,0,590,591, + 3,22,11,0,591,25,1,0,0,0,592,594,3,254,127,0,593,592,1,0,0,0,594, + 597,1,0,0,0,595,593,1,0,0,0,595,596,1,0,0,0,596,598,1,0,0,0,597, + 595,1,0,0,0,598,599,3,4,2,0,599,27,1,0,0,0,600,601,3,8,4,0,601,602, + 3,30,15,0,602,610,1,0,0,0,603,604,3,22,11,0,604,605,3,30,15,0,605, + 610,1,0,0,0,606,607,3,26,13,0,607,608,3,30,15,0,608,610,1,0,0,0, + 609,600,1,0,0,0,609,603,1,0,0,0,609,606,1,0,0,0,610,29,1,0,0,0,611, + 613,3,254,127,0,612,611,1,0,0,0,613,616,1,0,0,0,614,612,1,0,0,0, + 614,615,1,0,0,0,615,617,1,0,0,0,616,614,1,0,0,0,617,618,5,80,0,0, + 618,629,5,81,0,0,619,621,3,254,127,0,620,619,1,0,0,0,621,624,1,0, + 0,0,622,620,1,0,0,0,622,623,1,0,0,0,623,625,1,0,0,0,624,622,1,0, + 0,0,625,626,5,80,0,0,626,628,5,81,0,0,627,622,1,0,0,0,628,631,1, + 0,0,0,629,627,1,0,0,0,629,630,1,0,0,0,630,31,1,0,0,0,631,629,1,0, + 0,0,632,634,3,34,17,0,633,632,1,0,0,0,634,637,1,0,0,0,635,633,1, + 0,0,0,635,636,1,0,0,0,636,638,1,0,0,0,637,635,1,0,0,0,638,640,3, + 4,2,0,639,641,3,36,18,0,640,639,1,0,0,0,640,641,1,0,0,0,641,33,1, + 0,0,0,642,643,3,254,127,0,643,35,1,0,0,0,644,653,5,34,0,0,645,654, + 3,26,13,0,646,650,3,20,10,0,647,649,3,38,19,0,648,647,1,0,0,0,649, + 652,1,0,0,0,650,648,1,0,0,0,650,651,1,0,0,0,651,654,1,0,0,0,652, + 650,1,0,0,0,653,645,1,0,0,0,653,646,1,0,0,0,654,37,1,0,0,0,655,656, + 5,108,0,0,656,657,3,24,12,0,657,39,1,0,0,0,658,659,5,90,0,0,659, + 660,3,42,21,0,660,661,5,89,0,0,661,41,1,0,0,0,662,667,3,44,22,0, + 663,664,5,83,0,0,664,666,3,44,22,0,665,663,1,0,0,0,666,669,1,0,0, + 0,667,665,1,0,0,0,667,668,1,0,0,0,668,43,1,0,0,0,669,667,1,0,0,0, + 670,673,3,16,8,0,671,673,3,46,23,0,672,670,1,0,0,0,672,671,1,0,0, + 0,673,45,1,0,0,0,674,676,3,254,127,0,675,674,1,0,0,0,676,679,1,0, + 0,0,677,675,1,0,0,0,677,678,1,0,0,0,678,680,1,0,0,0,679,677,1,0, + 0,0,680,682,5,93,0,0,681,683,3,48,24,0,682,681,1,0,0,0,682,683,1, + 0,0,0,683,47,1,0,0,0,684,685,5,34,0,0,685,689,3,16,8,0,686,687,5, + 57,0,0,687,689,3,16,8,0,688,684,1,0,0,0,688,686,1,0,0,0,689,49,1, + 0,0,0,690,693,5,123,0,0,691,692,5,84,0,0,692,694,3,50,25,0,693,691, + 1,0,0,0,693,694,1,0,0,0,694,51,1,0,0,0,695,698,5,123,0,0,696,697, + 5,84,0,0,697,699,3,52,26,0,698,696,1,0,0,0,698,699,1,0,0,0,699,53, + 1,0,0,0,700,703,3,52,26,0,701,702,5,84,0,0,702,704,3,4,2,0,703,701, + 1,0,0,0,703,704,1,0,0,0,704,55,1,0,0,0,705,708,5,123,0,0,706,707, + 5,84,0,0,707,709,3,56,28,0,708,706,1,0,0,0,708,709,1,0,0,0,709,57, + 1,0,0,0,710,711,3,62,31,0,711,712,5,84,0,0,712,714,1,0,0,0,713,710, + 1,0,0,0,713,714,1,0,0,0,714,715,1,0,0,0,715,716,5,123,0,0,716,59, + 1,0,0,0,717,718,3,6,3,0,718,61,1,0,0,0,719,722,5,123,0,0,720,721, + 5,84,0,0,721,723,3,62,31,0,722,720,1,0,0,0,722,723,1,0,0,0,723,63, + 1,0,0,0,724,727,3,66,33,0,725,727,3,68,34,0,726,724,1,0,0,0,726, + 725,1,0,0,0,727,65,1,0,0,0,728,730,3,70,35,0,729,728,1,0,0,0,729, + 730,1,0,0,0,730,734,1,0,0,0,731,733,3,74,37,0,732,731,1,0,0,0,733, + 736,1,0,0,0,734,732,1,0,0,0,734,735,1,0,0,0,735,740,1,0,0,0,736, + 734,1,0,0,0,737,739,3,84,42,0,738,737,1,0,0,0,739,742,1,0,0,0,740, + 738,1,0,0,0,740,741,1,0,0,0,741,67,1,0,0,0,742,740,1,0,0,0,743,745, + 3,74,37,0,744,743,1,0,0,0,745,748,1,0,0,0,746,744,1,0,0,0,746,747, + 1,0,0,0,747,749,1,0,0,0,748,746,1,0,0,0,749,750,3,86,43,0,750,69, + 1,0,0,0,751,753,3,72,36,0,752,751,1,0,0,0,753,756,1,0,0,0,754,752, + 1,0,0,0,754,755,1,0,0,0,755,757,1,0,0,0,756,754,1,0,0,0,757,758, + 5,49,0,0,758,763,5,123,0,0,759,760,5,84,0,0,760,762,5,123,0,0,761, + 759,1,0,0,0,762,765,1,0,0,0,763,761,1,0,0,0,763,764,1,0,0,0,764, + 766,1,0,0,0,765,763,1,0,0,0,766,767,5,82,0,0,767,71,1,0,0,0,768, + 769,3,254,127,0,769,73,1,0,0,0,770,775,3,76,38,0,771,775,3,78,39, + 0,772,775,3,80,40,0,773,775,3,82,41,0,774,770,1,0,0,0,774,771,1, + 0,0,0,774,772,1,0,0,0,774,773,1,0,0,0,775,75,1,0,0,0,776,777,5,42, + 0,0,777,778,3,54,27,0,778,779,5,82,0,0,779,77,1,0,0,0,780,781,5, + 42,0,0,781,782,3,56,28,0,782,783,5,84,0,0,783,784,5,106,0,0,784, + 785,5,82,0,0,785,79,1,0,0,0,786,787,5,42,0,0,787,788,5,55,0,0,788, + 789,3,54,27,0,789,790,5,84,0,0,790,791,5,123,0,0,791,792,5,82,0, + 0,792,81,1,0,0,0,793,794,5,42,0,0,794,795,5,55,0,0,795,796,3,54, + 27,0,796,797,5,84,0,0,797,798,5,106,0,0,798,799,5,82,0,0,799,83, + 1,0,0,0,800,804,3,92,46,0,801,804,3,220,110,0,802,804,5,82,0,0,803, + 800,1,0,0,0,803,801,1,0,0,0,803,802,1,0,0,0,804,85,1,0,0,0,805,807, + 3,254,127,0,806,805,1,0,0,0,807,810,1,0,0,0,808,806,1,0,0,0,808, + 809,1,0,0,0,809,812,1,0,0,0,810,808,1,0,0,0,811,813,5,5,0,0,812, + 811,1,0,0,0,812,813,1,0,0,0,813,814,1,0,0,0,814,815,5,2,0,0,815, + 820,5,123,0,0,816,817,5,84,0,0,817,819,5,123,0,0,818,816,1,0,0,0, + 819,822,1,0,0,0,820,818,1,0,0,0,820,821,1,0,0,0,821,823,1,0,0,0, + 822,820,1,0,0,0,823,827,5,78,0,0,824,826,3,88,44,0,825,824,1,0,0, + 0,826,829,1,0,0,0,827,825,1,0,0,0,827,828,1,0,0,0,828,830,1,0,0, + 0,829,827,1,0,0,0,830,831,5,79,0,0,831,87,1,0,0,0,832,836,5,10,0, + 0,833,835,3,90,45,0,834,833,1,0,0,0,835,838,1,0,0,0,836,834,1,0, + 0,0,836,837,1,0,0,0,837,839,1,0,0,0,838,836,1,0,0,0,839,840,3,50, + 25,0,840,841,5,82,0,0,841,890,1,0,0,0,842,843,5,1,0,0,843,853,3, + 52,26,0,844,845,5,12,0,0,845,850,3,50,25,0,846,847,5,83,0,0,847, + 849,3,50,25,0,848,846,1,0,0,0,849,852,1,0,0,0,850,848,1,0,0,0,850, + 851,1,0,0,0,851,854,1,0,0,0,852,850,1,0,0,0,853,844,1,0,0,0,853, + 854,1,0,0,0,854,855,1,0,0,0,855,856,5,82,0,0,856,890,1,0,0,0,857, + 858,5,6,0,0,858,868,3,52,26,0,859,860,5,12,0,0,860,865,3,50,25,0, + 861,862,5,83,0,0,862,864,3,50,25,0,863,861,1,0,0,0,864,867,1,0,0, + 0,865,863,1,0,0,0,865,866,1,0,0,0,866,869,1,0,0,0,867,865,1,0,0, + 0,868,859,1,0,0,0,868,869,1,0,0,0,869,870,1,0,0,0,870,871,5,82,0, + 0,871,890,1,0,0,0,872,873,5,14,0,0,873,874,3,54,27,0,874,875,5,82, + 0,0,875,890,1,0,0,0,876,877,5,8,0,0,877,878,3,54,27,0,878,879,5, + 16,0,0,879,884,3,54,27,0,880,881,5,83,0,0,881,883,3,54,27,0,882, + 880,1,0,0,0,883,886,1,0,0,0,884,882,1,0,0,0,884,885,1,0,0,0,885, + 887,1,0,0,0,886,884,1,0,0,0,887,888,5,82,0,0,888,890,1,0,0,0,889, + 832,1,0,0,0,889,842,1,0,0,0,889,857,1,0,0,0,889,872,1,0,0,0,889, + 876,1,0,0,0,890,89,1,0,0,0,891,892,7,3,0,0,892,91,1,0,0,0,893,897, + 3,94,47,0,894,897,3,190,95,0,895,897,3,202,101,0,896,893,1,0,0,0, + 896,894,1,0,0,0,896,895,1,0,0,0,897,93,1,0,0,0,898,900,3,96,48,0, + 899,898,1,0,0,0,900,903,1,0,0,0,901,899,1,0,0,0,901,902,1,0,0,0, + 902,904,1,0,0,0,903,901,1,0,0,0,904,905,5,26,0,0,905,907,3,4,2,0, + 906,908,3,98,49,0,907,906,1,0,0,0,907,908,1,0,0,0,908,910,1,0,0, + 0,909,911,3,102,51,0,910,909,1,0,0,0,910,911,1,0,0,0,911,913,1,0, + 0,0,912,914,3,104,52,0,913,912,1,0,0,0,913,914,1,0,0,0,914,916,1, + 0,0,0,915,917,3,108,54,0,916,915,1,0,0,0,916,917,1,0,0,0,917,918, + 1,0,0,0,918,919,3,110,55,0,919,95,1,0,0,0,920,931,3,254,127,0,921, + 931,5,52,0,0,922,931,5,51,0,0,923,931,5,50,0,0,924,931,5,18,0,0, + 925,931,5,55,0,0,926,931,5,35,0,0,927,931,5,11,0,0,928,931,5,3,0, + 0,929,931,5,56,0,0,930,920,1,0,0,0,930,921,1,0,0,0,930,922,1,0,0, + 0,930,923,1,0,0,0,930,924,1,0,0,0,930,925,1,0,0,0,930,926,1,0,0, + 0,930,927,1,0,0,0,930,928,1,0,0,0,930,929,1,0,0,0,931,97,1,0,0,0, + 932,933,5,90,0,0,933,934,3,100,50,0,934,935,5,89,0,0,935,99,1,0, + 0,0,936,941,3,32,16,0,937,938,5,83,0,0,938,940,3,32,16,0,939,937, + 1,0,0,0,940,943,1,0,0,0,941,939,1,0,0,0,941,942,1,0,0,0,942,101, + 1,0,0,0,943,941,1,0,0,0,944,945,5,34,0,0,945,946,3,22,11,0,946,103, + 1,0,0,0,947,948,5,41,0,0,948,949,3,106,53,0,949,105,1,0,0,0,950, + 955,3,24,12,0,951,952,5,83,0,0,952,954,3,24,12,0,953,951,1,0,0,0, + 954,957,1,0,0,0,955,953,1,0,0,0,955,956,1,0,0,0,956,107,1,0,0,0, + 957,955,1,0,0,0,958,959,5,7,0,0,959,964,3,54,27,0,960,961,5,83,0, + 0,961,963,3,54,27,0,962,960,1,0,0,0,963,966,1,0,0,0,964,962,1,0, + 0,0,964,965,1,0,0,0,965,109,1,0,0,0,966,964,1,0,0,0,967,971,5,78, + 0,0,968,970,3,112,56,0,969,968,1,0,0,0,970,973,1,0,0,0,971,969,1, + 0,0,0,971,972,1,0,0,0,972,974,1,0,0,0,973,971,1,0,0,0,974,975,5, + 79,0,0,975,111,1,0,0,0,976,981,3,114,57,0,977,981,3,174,87,0,978, + 981,3,176,88,0,979,981,3,178,89,0,980,976,1,0,0,0,980,977,1,0,0, + 0,980,978,1,0,0,0,980,979,1,0,0,0,981,113,1,0,0,0,982,988,3,116, + 58,0,983,988,3,146,73,0,984,988,3,92,46,0,985,988,3,220,110,0,986, + 988,5,82,0,0,987,982,1,0,0,0,987,983,1,0,0,0,987,984,1,0,0,0,987, + 985,1,0,0,0,987,986,1,0,0,0,988,115,1,0,0,0,989,991,3,118,59,0,990, + 989,1,0,0,0,991,994,1,0,0,0,992,990,1,0,0,0,992,993,1,0,0,0,993, + 995,1,0,0,0,994,992,1,0,0,0,995,996,3,128,64,0,996,997,3,120,60, + 0,997,998,5,82,0,0,998,117,1,0,0,0,999,1008,3,254,127,0,1000,1008, + 5,52,0,0,1001,1008,5,51,0,0,1002,1008,5,50,0,0,1003,1008,5,55,0, + 0,1004,1008,5,35,0,0,1005,1008,5,63,0,0,1006,1008,5,66,0,0,1007, + 999,1,0,0,0,1007,1000,1,0,0,0,1007,1001,1,0,0,0,1007,1002,1,0,0, + 0,1007,1003,1,0,0,0,1007,1004,1,0,0,0,1007,1005,1,0,0,0,1007,1006, + 1,0,0,0,1008,119,1,0,0,0,1009,1014,3,122,61,0,1010,1011,5,83,0,0, + 1011,1013,3,122,61,0,1012,1010,1,0,0,0,1013,1016,1,0,0,0,1014,1012, + 1,0,0,0,1014,1015,1,0,0,0,1015,121,1,0,0,0,1016,1014,1,0,0,0,1017, + 1020,3,124,62,0,1018,1019,5,88,0,0,1019,1021,3,126,63,0,1020,1018, + 1,0,0,0,1020,1021,1,0,0,0,1021,123,1,0,0,0,1022,1024,5,123,0,0,1023, + 1025,3,30,15,0,1024,1023,1,0,0,0,1024,1025,1,0,0,0,1025,125,1,0, + 0,0,1026,1029,3,388,194,0,1027,1029,3,272,136,0,1028,1026,1,0,0, + 0,1028,1027,1,0,0,0,1029,127,1,0,0,0,1030,1033,3,130,65,0,1031,1033, + 3,132,66,0,1032,1030,1,0,0,0,1032,1031,1,0,0,0,1033,129,1,0,0,0, + 1034,1037,3,10,5,0,1035,1037,5,20,0,0,1036,1034,1,0,0,0,1036,1035, + 1,0,0,0,1037,131,1,0,0,0,1038,1042,3,134,67,0,1039,1042,3,142,71, + 0,1040,1042,3,144,72,0,1041,1038,1,0,0,0,1041,1039,1,0,0,0,1041, + 1040,1,0,0,0,1042,133,1,0,0,0,1043,1044,3,52,26,0,1044,1048,5,84, + 0,0,1045,1047,3,254,127,0,1046,1045,1,0,0,0,1047,1050,1,0,0,0,1048, + 1046,1,0,0,0,1048,1049,1,0,0,0,1049,1052,1,0,0,0,1050,1048,1,0,0, + 0,1051,1043,1,0,0,0,1051,1052,1,0,0,0,1052,1053,1,0,0,0,1053,1055, + 3,4,2,0,1054,1056,3,40,20,0,1055,1054,1,0,0,0,1055,1056,1,0,0,0, + 1056,1058,1,0,0,0,1057,1059,3,136,68,0,1058,1057,1,0,0,0,1058,1059, + 1,0,0,0,1059,135,1,0,0,0,1060,1064,5,84,0,0,1061,1063,3,254,127, + 0,1062,1061,1,0,0,0,1063,1066,1,0,0,0,1064,1062,1,0,0,0,1064,1065, + 1,0,0,0,1065,1067,1,0,0,0,1066,1064,1,0,0,0,1067,1069,3,4,2,0,1068, + 1070,3,40,20,0,1069,1068,1,0,0,0,1069,1070,1,0,0,0,1070,1072,1,0, + 0,0,1071,1073,3,136,68,0,1072,1071,1,0,0,0,1072,1073,1,0,0,0,1073, + 137,1,0,0,0,1074,1076,3,4,2,0,1075,1077,3,40,20,0,1076,1075,1,0, + 0,0,1076,1077,1,0,0,0,1077,1094,1,0,0,0,1078,1081,3,52,26,0,1079, + 1081,3,134,67,0,1080,1078,1,0,0,0,1080,1079,1,0,0,0,1081,1082,1, + 0,0,0,1082,1086,5,84,0,0,1083,1085,3,254,127,0,1084,1083,1,0,0,0, + 1085,1088,1,0,0,0,1086,1084,1,0,0,0,1086,1087,1,0,0,0,1087,1089, + 1,0,0,0,1088,1086,1,0,0,0,1089,1091,3,4,2,0,1090,1092,3,40,20,0, + 1091,1090,1,0,0,0,1091,1092,1,0,0,0,1092,1094,1,0,0,0,1093,1074, + 1,0,0,0,1093,1080,1,0,0,0,1094,139,1,0,0,0,1095,1096,3,138,69,0, + 1096,141,1,0,0,0,1097,1098,3,4,2,0,1098,143,1,0,0,0,1099,1103,3, + 130,65,0,1100,1103,3,134,67,0,1101,1103,3,142,71,0,1102,1099,1,0, + 0,0,1102,1100,1,0,0,0,1102,1101,1,0,0,0,1103,1104,1,0,0,0,1104,1105, + 3,30,15,0,1105,145,1,0,0,0,1106,1108,3,148,74,0,1107,1106,1,0,0, + 0,1108,1111,1,0,0,0,1109,1107,1,0,0,0,1109,1110,1,0,0,0,1110,1112, + 1,0,0,0,1111,1109,1,0,0,0,1112,1113,3,150,75,0,1113,1114,3,172,86, + 0,1114,147,1,0,0,0,1115,1126,3,254,127,0,1116,1126,5,52,0,0,1117, + 1126,5,51,0,0,1118,1126,5,50,0,0,1119,1126,5,18,0,0,1120,1126,5, + 55,0,0,1121,1126,5,35,0,0,1122,1126,5,59,0,0,1123,1126,5,47,0,0, + 1124,1126,5,56,0,0,1125,1115,1,0,0,0,1125,1116,1,0,0,0,1125,1117, + 1,0,0,0,1125,1118,1,0,0,0,1125,1119,1,0,0,0,1125,1120,1,0,0,0,1125, + 1121,1,0,0,0,1125,1122,1,0,0,0,1125,1123,1,0,0,0,1125,1124,1,0,0, + 0,1126,149,1,0,0,0,1127,1131,3,98,49,0,1128,1130,3,254,127,0,1129, + 1128,1,0,0,0,1130,1133,1,0,0,0,1131,1129,1,0,0,0,1131,1132,1,0,0, + 0,1132,1135,1,0,0,0,1133,1131,1,0,0,0,1134,1127,1,0,0,0,1134,1135, + 1,0,0,0,1135,1136,1,0,0,0,1136,1137,3,152,76,0,1137,1139,3,154,77, + 0,1138,1140,3,166,83,0,1139,1138,1,0,0,0,1139,1140,1,0,0,0,1140, + 151,1,0,0,0,1141,1144,3,128,64,0,1142,1144,5,65,0,0,1143,1141,1, + 0,0,0,1143,1142,1,0,0,0,1144,153,1,0,0,0,1145,1146,5,123,0,0,1146, + 1150,5,76,0,0,1147,1148,3,156,78,0,1148,1149,5,83,0,0,1149,1151, + 1,0,0,0,1150,1147,1,0,0,0,1150,1151,1,0,0,0,1151,1153,1,0,0,0,1152, + 1154,3,158,79,0,1153,1152,1,0,0,0,1153,1154,1,0,0,0,1154,1155,1, + 0,0,0,1155,1157,5,77,0,0,1156,1158,3,30,15,0,1157,1156,1,0,0,0,1157, + 1158,1,0,0,0,1158,155,1,0,0,0,1159,1161,3,254,127,0,1160,1159,1, + 0,0,0,1161,1164,1,0,0,0,1162,1160,1,0,0,0,1162,1163,1,0,0,0,1163, + 1165,1,0,0,0,1164,1162,1,0,0,0,1165,1168,3,128,64,0,1166,1167,5, + 123,0,0,1167,1169,5,84,0,0,1168,1166,1,0,0,0,1168,1169,1,0,0,0,1169, + 1170,1,0,0,0,1170,1171,5,60,0,0,1171,157,1,0,0,0,1172,1177,3,160, + 80,0,1173,1174,5,83,0,0,1174,1176,3,160,80,0,1175,1173,1,0,0,0,1176, + 1179,1,0,0,0,1177,1175,1,0,0,0,1177,1178,1,0,0,0,1178,159,1,0,0, + 0,1179,1177,1,0,0,0,1180,1182,3,164,82,0,1181,1180,1,0,0,0,1182, + 1185,1,0,0,0,1183,1181,1,0,0,0,1183,1184,1,0,0,0,1184,1186,1,0,0, + 0,1185,1183,1,0,0,0,1186,1187,3,128,64,0,1187,1188,3,124,62,0,1188, + 1191,1,0,0,0,1189,1191,3,162,81,0,1190,1183,1,0,0,0,1190,1189,1, + 0,0,0,1191,161,1,0,0,0,1192,1194,3,164,82,0,1193,1192,1,0,0,0,1194, + 1197,1,0,0,0,1195,1193,1,0,0,0,1195,1196,1,0,0,0,1196,1198,1,0,0, + 0,1197,1195,1,0,0,0,1198,1202,3,128,64,0,1199,1201,3,254,127,0,1200, + 1199,1,0,0,0,1201,1204,1,0,0,0,1202,1200,1,0,0,0,1202,1203,1,0,0, + 0,1203,1205,1,0,0,0,1204,1202,1,0,0,0,1205,1206,5,85,0,0,1206,1207, + 5,123,0,0,1207,163,1,0,0,0,1208,1211,3,254,127,0,1209,1211,5,35, + 0,0,1210,1208,1,0,0,0,1210,1209,1,0,0,0,1211,165,1,0,0,0,1212,1213, + 5,62,0,0,1213,1214,3,168,84,0,1214,167,1,0,0,0,1215,1220,3,170,85, + 0,1216,1217,5,83,0,0,1217,1219,3,170,85,0,1218,1216,1,0,0,0,1219, + 1222,1,0,0,0,1220,1218,1,0,0,0,1220,1221,1,0,0,0,1221,169,1,0,0, + 0,1222,1220,1,0,0,0,1223,1226,3,22,11,0,1224,1226,3,26,13,0,1225, + 1223,1,0,0,0,1225,1224,1,0,0,0,1226,171,1,0,0,0,1227,1230,3,276, + 138,0,1228,1230,5,82,0,0,1229,1227,1,0,0,0,1229,1228,1,0,0,0,1230, + 173,1,0,0,0,1231,1232,3,276,138,0,1232,175,1,0,0,0,1233,1234,5,55, + 0,0,1234,1235,3,276,138,0,1235,177,1,0,0,0,1236,1238,3,180,90,0, + 1237,1236,1,0,0,0,1238,1241,1,0,0,0,1239,1237,1,0,0,0,1239,1240, + 1,0,0,0,1240,1242,1,0,0,0,1241,1239,1,0,0,0,1242,1244,3,182,91,0, + 1243,1245,3,166,83,0,1244,1243,1,0,0,0,1244,1245,1,0,0,0,1245,1246, + 1,0,0,0,1246,1247,3,186,93,0,1247,179,1,0,0,0,1248,1253,3,254,127, + 0,1249,1253,5,52,0,0,1250,1253,5,51,0,0,1251,1253,5,50,0,0,1252, + 1248,1,0,0,0,1252,1249,1,0,0,0,1252,1250,1,0,0,0,1252,1251,1,0,0, + 0,1253,181,1,0,0,0,1254,1256,3,98,49,0,1255,1254,1,0,0,0,1255,1256, + 1,0,0,0,1256,1257,1,0,0,0,1257,1258,3,184,92,0,1258,1262,5,76,0, + 0,1259,1260,3,156,78,0,1260,1261,5,83,0,0,1261,1263,1,0,0,0,1262, + 1259,1,0,0,0,1262,1263,1,0,0,0,1263,1265,1,0,0,0,1264,1266,3,158, + 79,0,1265,1264,1,0,0,0,1265,1266,1,0,0,0,1266,1267,1,0,0,0,1267, + 1268,5,77,0,0,1268,183,1,0,0,0,1269,1270,3,4,2,0,1270,185,1,0,0, + 0,1271,1273,5,78,0,0,1272,1274,3,188,94,0,1273,1272,1,0,0,0,1273, + 1274,1,0,0,0,1274,1276,1,0,0,0,1275,1277,3,278,139,0,1276,1275,1, + 0,0,0,1276,1277,1,0,0,0,1277,1278,1,0,0,0,1278,1279,5,79,0,0,1279, + 187,1,0,0,0,1280,1282,3,40,20,0,1281,1280,1,0,0,0,1281,1282,1,0, + 0,0,1282,1283,1,0,0,0,1283,1284,7,4,0,0,1284,1286,5,76,0,0,1285, + 1287,3,422,211,0,1286,1285,1,0,0,0,1286,1287,1,0,0,0,1287,1288,1, + 0,0,0,1288,1289,5,77,0,0,1289,1307,5,82,0,0,1290,1293,3,58,29,0, + 1291,1293,3,390,195,0,1292,1290,1,0,0,0,1292,1291,1,0,0,0,1293,1294, + 1,0,0,0,1294,1296,5,84,0,0,1295,1297,3,40,20,0,1296,1295,1,0,0,0, + 1296,1297,1,0,0,0,1297,1298,1,0,0,0,1298,1299,5,57,0,0,1299,1301, + 5,76,0,0,1300,1302,3,422,211,0,1301,1300,1,0,0,0,1301,1302,1,0,0, + 0,1302,1303,1,0,0,0,1303,1304,5,77,0,0,1304,1305,5,82,0,0,1305,1307, + 1,0,0,0,1306,1281,1,0,0,0,1306,1292,1,0,0,0,1307,189,1,0,0,0,1308, + 1310,3,96,48,0,1309,1308,1,0,0,0,1310,1313,1,0,0,0,1311,1309,1,0, + 0,0,1311,1312,1,0,0,0,1312,1314,1,0,0,0,1313,1311,1,0,0,0,1314,1315, + 5,33,0,0,1315,1317,3,4,2,0,1316,1318,3,104,52,0,1317,1316,1,0,0, + 0,1317,1318,1,0,0,0,1318,1319,1,0,0,0,1319,1320,3,192,96,0,1320, + 191,1,0,0,0,1321,1323,5,78,0,0,1322,1324,3,194,97,0,1323,1322,1, + 0,0,0,1323,1324,1,0,0,0,1324,1326,1,0,0,0,1325,1327,5,83,0,0,1326, + 1325,1,0,0,0,1326,1327,1,0,0,0,1327,1329,1,0,0,0,1328,1330,3,200, + 100,0,1329,1328,1,0,0,0,1329,1330,1,0,0,0,1330,1331,1,0,0,0,1331, + 1332,5,79,0,0,1332,193,1,0,0,0,1333,1338,3,196,98,0,1334,1335,5, + 83,0,0,1335,1337,3,196,98,0,1336,1334,1,0,0,0,1337,1340,1,0,0,0, + 1338,1336,1,0,0,0,1338,1339,1,0,0,0,1339,195,1,0,0,0,1340,1338,1, + 0,0,0,1341,1343,3,198,99,0,1342,1341,1,0,0,0,1343,1346,1,0,0,0,1344, + 1342,1,0,0,0,1344,1345,1,0,0,0,1345,1347,1,0,0,0,1346,1344,1,0,0, + 0,1347,1353,5,123,0,0,1348,1350,5,76,0,0,1349,1351,3,422,211,0,1350, + 1349,1,0,0,0,1350,1351,1,0,0,0,1351,1352,1,0,0,0,1352,1354,5,77, + 0,0,1353,1348,1,0,0,0,1353,1354,1,0,0,0,1354,1356,1,0,0,0,1355,1357, + 3,110,55,0,1356,1355,1,0,0,0,1356,1357,1,0,0,0,1357,197,1,0,0,0, + 1358,1359,3,254,127,0,1359,199,1,0,0,0,1360,1364,5,82,0,0,1361,1363, + 3,112,56,0,1362,1361,1,0,0,0,1363,1366,1,0,0,0,1364,1362,1,0,0,0, + 1364,1365,1,0,0,0,1365,201,1,0,0,0,1366,1364,1,0,0,0,1367,1369,3, + 96,48,0,1368,1367,1,0,0,0,1369,1372,1,0,0,0,1370,1368,1,0,0,0,1370, + 1371,1,0,0,0,1371,1373,1,0,0,0,1372,1370,1,0,0,0,1373,1374,5,9,0, + 0,1374,1376,3,4,2,0,1375,1377,3,98,49,0,1376,1375,1,0,0,0,1376,1377, + 1,0,0,0,1377,1378,1,0,0,0,1378,1380,3,204,102,0,1379,1381,3,104, + 52,0,1380,1379,1,0,0,0,1380,1381,1,0,0,0,1381,1382,1,0,0,0,1382, + 1383,3,214,107,0,1383,203,1,0,0,0,1384,1386,5,76,0,0,1385,1387,3, + 206,103,0,1386,1385,1,0,0,0,1386,1387,1,0,0,0,1387,1388,1,0,0,0, + 1388,1389,5,77,0,0,1389,205,1,0,0,0,1390,1395,3,208,104,0,1391,1392, + 5,83,0,0,1392,1394,3,208,104,0,1393,1391,1,0,0,0,1394,1397,1,0,0, + 0,1395,1393,1,0,0,0,1395,1396,1,0,0,0,1396,207,1,0,0,0,1397,1395, + 1,0,0,0,1398,1400,3,212,106,0,1399,1398,1,0,0,0,1400,1403,1,0,0, + 0,1401,1399,1,0,0,0,1401,1402,1,0,0,0,1402,1404,1,0,0,0,1403,1401, + 1,0,0,0,1404,1405,3,128,64,0,1405,1406,5,123,0,0,1406,1409,1,0,0, + 0,1407,1409,3,210,105,0,1408,1401,1,0,0,0,1408,1407,1,0,0,0,1409, + 209,1,0,0,0,1410,1412,3,212,106,0,1411,1410,1,0,0,0,1412,1415,1, + 0,0,0,1413,1411,1,0,0,0,1413,1414,1,0,0,0,1414,1416,1,0,0,0,1415, + 1413,1,0,0,0,1416,1420,3,128,64,0,1417,1419,3,254,127,0,1418,1417, + 1,0,0,0,1419,1422,1,0,0,0,1420,1418,1,0,0,0,1420,1421,1,0,0,0,1421, + 1423,1,0,0,0,1422,1420,1,0,0,0,1423,1424,5,85,0,0,1424,1425,5,123, + 0,0,1425,211,1,0,0,0,1426,1427,3,254,127,0,1427,213,1,0,0,0,1428, + 1432,5,78,0,0,1429,1431,3,216,108,0,1430,1429,1,0,0,0,1431,1434, + 1,0,0,0,1432,1430,1,0,0,0,1432,1433,1,0,0,0,1433,1435,1,0,0,0,1434, + 1432,1,0,0,0,1435,1436,5,79,0,0,1436,215,1,0,0,0,1437,1440,3,112, + 56,0,1438,1440,3,218,109,0,1439,1437,1,0,0,0,1439,1438,1,0,0,0,1440, + 217,1,0,0,0,1441,1443,3,180,90,0,1442,1441,1,0,0,0,1443,1446,1,0, + 0,0,1444,1442,1,0,0,0,1444,1445,1,0,0,0,1445,1447,1,0,0,0,1446,1444, + 1,0,0,0,1447,1448,3,184,92,0,1448,1449,3,186,93,0,1449,219,1,0,0, + 0,1450,1453,3,222,111,0,1451,1453,3,242,121,0,1452,1450,1,0,0,0, + 1452,1451,1,0,0,0,1453,221,1,0,0,0,1454,1456,3,224,112,0,1455,1454, + 1,0,0,0,1456,1459,1,0,0,0,1457,1455,1,0,0,0,1457,1458,1,0,0,0,1458, + 1460,1,0,0,0,1459,1457,1,0,0,0,1460,1461,5,45,0,0,1461,1463,3,4, + 2,0,1462,1464,3,98,49,0,1463,1462,1,0,0,0,1463,1464,1,0,0,0,1464, + 1466,1,0,0,0,1465,1467,3,226,113,0,1466,1465,1,0,0,0,1466,1467,1, + 0,0,0,1467,1469,1,0,0,0,1468,1470,3,228,114,0,1469,1468,1,0,0,0, + 1469,1470,1,0,0,0,1470,1471,1,0,0,0,1471,1472,3,230,115,0,1472,223, + 1,0,0,0,1473,1483,3,254,127,0,1474,1483,5,52,0,0,1475,1483,5,51, + 0,0,1476,1483,5,50,0,0,1477,1483,5,18,0,0,1478,1483,5,55,0,0,1479, + 1483,5,11,0,0,1480,1483,5,3,0,0,1481,1483,5,56,0,0,1482,1473,1,0, + 0,0,1482,1474,1,0,0,0,1482,1475,1,0,0,0,1482,1476,1,0,0,0,1482,1477, + 1,0,0,0,1482,1478,1,0,0,0,1482,1479,1,0,0,0,1482,1480,1,0,0,0,1482, + 1481,1,0,0,0,1483,225,1,0,0,0,1484,1485,5,34,0,0,1485,1486,3,106, + 53,0,1486,227,1,0,0,0,1487,1488,5,7,0,0,1488,1493,3,54,27,0,1489, + 1490,5,83,0,0,1490,1492,3,54,27,0,1491,1489,1,0,0,0,1492,1495,1, + 0,0,0,1493,1491,1,0,0,0,1493,1494,1,0,0,0,1494,229,1,0,0,0,1495, + 1493,1,0,0,0,1496,1500,5,78,0,0,1497,1499,3,232,116,0,1498,1497, + 1,0,0,0,1499,1502,1,0,0,0,1500,1498,1,0,0,0,1500,1501,1,0,0,0,1501, + 1503,1,0,0,0,1502,1500,1,0,0,0,1503,1504,5,79,0,0,1504,231,1,0,0, + 0,1505,1511,3,234,117,0,1506,1511,3,238,119,0,1507,1511,3,92,46, + 0,1508,1511,3,220,110,0,1509,1511,5,82,0,0,1510,1505,1,0,0,0,1510, + 1506,1,0,0,0,1510,1507,1,0,0,0,1510,1508,1,0,0,0,1510,1509,1,0,0, + 0,1511,233,1,0,0,0,1512,1514,3,236,118,0,1513,1512,1,0,0,0,1514, + 1517,1,0,0,0,1515,1513,1,0,0,0,1515,1516,1,0,0,0,1516,1518,1,0,0, + 0,1517,1515,1,0,0,0,1518,1519,3,128,64,0,1519,1520,3,120,60,0,1520, + 1521,5,82,0,0,1521,235,1,0,0,0,1522,1527,3,254,127,0,1523,1527,5, + 52,0,0,1524,1527,5,55,0,0,1525,1527,5,35,0,0,1526,1522,1,0,0,0,1526, + 1523,1,0,0,0,1526,1524,1,0,0,0,1526,1525,1,0,0,0,1527,237,1,0,0, + 0,1528,1530,3,240,120,0,1529,1528,1,0,0,0,1530,1533,1,0,0,0,1531, + 1529,1,0,0,0,1531,1532,1,0,0,0,1532,1534,1,0,0,0,1533,1531,1,0,0, + 0,1534,1535,3,150,75,0,1535,1536,3,172,86,0,1536,239,1,0,0,0,1537, + 1545,3,254,127,0,1538,1545,5,52,0,0,1539,1545,5,50,0,0,1540,1545, + 5,18,0,0,1541,1545,5,29,0,0,1542,1545,5,55,0,0,1543,1545,5,56,0, + 0,1544,1537,1,0,0,0,1544,1538,1,0,0,0,1544,1539,1,0,0,0,1544,1540, + 1,0,0,0,1544,1541,1,0,0,0,1544,1542,1,0,0,0,1544,1543,1,0,0,0,1545, + 241,1,0,0,0,1546,1548,3,224,112,0,1547,1546,1,0,0,0,1548,1551,1, + 0,0,0,1549,1547,1,0,0,0,1549,1550,1,0,0,0,1550,1552,1,0,0,0,1551, + 1549,1,0,0,0,1552,1553,5,86,0,0,1553,1554,5,45,0,0,1554,1555,3,4, + 2,0,1555,1556,3,244,122,0,1556,243,1,0,0,0,1557,1561,5,78,0,0,1558, + 1560,3,246,123,0,1559,1558,1,0,0,0,1560,1563,1,0,0,0,1561,1559,1, + 0,0,0,1561,1562,1,0,0,0,1562,1564,1,0,0,0,1563,1561,1,0,0,0,1564, + 1565,5,79,0,0,1565,245,1,0,0,0,1566,1572,3,248,124,0,1567,1572,3, + 234,117,0,1568,1572,3,92,46,0,1569,1572,3,220,110,0,1570,1572,5, + 82,0,0,1571,1566,1,0,0,0,1571,1567,1,0,0,0,1571,1568,1,0,0,0,1571, + 1569,1,0,0,0,1571,1570,1,0,0,0,1572,247,1,0,0,0,1573,1575,3,250, + 125,0,1574,1573,1,0,0,0,1575,1578,1,0,0,0,1576,1574,1,0,0,0,1576, + 1577,1,0,0,0,1577,1579,1,0,0,0,1578,1576,1,0,0,0,1579,1580,3,128, + 64,0,1580,1581,5,123,0,0,1581,1582,5,76,0,0,1582,1584,5,77,0,0,1583, + 1585,3,30,15,0,1584,1583,1,0,0,0,1584,1585,1,0,0,0,1585,1587,1,0, + 0,0,1586,1588,3,252,126,0,1587,1586,1,0,0,0,1587,1588,1,0,0,0,1588, + 1589,1,0,0,0,1589,1590,5,82,0,0,1590,249,1,0,0,0,1591,1595,3,254, + 127,0,1592,1595,5,52,0,0,1593,1595,5,18,0,0,1594,1591,1,0,0,0,1594, + 1592,1,0,0,0,1594,1593,1,0,0,0,1595,251,1,0,0,0,1596,1597,5,29,0, + 0,1597,1598,3,262,131,0,1598,253,1,0,0,0,1599,1603,3,256,128,0,1600, + 1603,3,268,134,0,1601,1603,3,270,135,0,1602,1599,1,0,0,0,1602,1600, + 1,0,0,0,1602,1601,1,0,0,0,1603,255,1,0,0,0,1604,1605,5,86,0,0,1605, + 1606,3,54,27,0,1606,1608,5,76,0,0,1607,1609,3,258,129,0,1608,1607, + 1,0,0,0,1608,1609,1,0,0,0,1609,1610,1,0,0,0,1610,1611,5,77,0,0,1611, + 257,1,0,0,0,1612,1617,3,260,130,0,1613,1614,5,83,0,0,1614,1616,3, + 260,130,0,1615,1613,1,0,0,0,1616,1619,1,0,0,0,1617,1615,1,0,0,0, + 1617,1618,1,0,0,0,1618,259,1,0,0,0,1619,1617,1,0,0,0,1620,1621,5, + 123,0,0,1621,1622,5,88,0,0,1622,1623,3,262,131,0,1623,261,1,0,0, + 0,1624,1628,3,464,232,0,1625,1628,3,264,132,0,1626,1628,3,254,127, + 0,1627,1624,1,0,0,0,1627,1625,1,0,0,0,1627,1626,1,0,0,0,1628,263, + 1,0,0,0,1629,1631,5,78,0,0,1630,1632,3,266,133,0,1631,1630,1,0,0, + 0,1631,1632,1,0,0,0,1632,1634,1,0,0,0,1633,1635,5,83,0,0,1634,1633, + 1,0,0,0,1634,1635,1,0,0,0,1635,1636,1,0,0,0,1636,1637,5,79,0,0,1637, + 265,1,0,0,0,1638,1643,3,262,131,0,1639,1640,5,83,0,0,1640,1642,3, + 262,131,0,1641,1639,1,0,0,0,1642,1645,1,0,0,0,1643,1641,1,0,0,0, + 1643,1644,1,0,0,0,1644,267,1,0,0,0,1645,1643,1,0,0,0,1646,1647,5, + 86,0,0,1647,1648,3,54,27,0,1648,269,1,0,0,0,1649,1650,5,86,0,0,1650, + 1651,3,54,27,0,1651,1652,5,76,0,0,1652,1653,3,262,131,0,1653,1654, + 5,77,0,0,1654,271,1,0,0,0,1655,1657,5,78,0,0,1656,1658,3,274,137, + 0,1657,1656,1,0,0,0,1657,1658,1,0,0,0,1658,1660,1,0,0,0,1659,1661, + 5,83,0,0,1660,1659,1,0,0,0,1660,1661,1,0,0,0,1661,1662,1,0,0,0,1662, + 1663,5,79,0,0,1663,273,1,0,0,0,1664,1669,3,126,63,0,1665,1666,5, + 83,0,0,1666,1668,3,126,63,0,1667,1665,1,0,0,0,1668,1671,1,0,0,0, + 1669,1667,1,0,0,0,1669,1670,1,0,0,0,1670,275,1,0,0,0,1671,1669,1, + 0,0,0,1672,1674,5,78,0,0,1673,1675,3,278,139,0,1674,1673,1,0,0,0, + 1674,1675,1,0,0,0,1675,1676,1,0,0,0,1676,1677,5,79,0,0,1677,277, + 1,0,0,0,1678,1682,3,280,140,0,1679,1681,3,280,140,0,1680,1679,1, + 0,0,0,1681,1684,1,0,0,0,1682,1680,1,0,0,0,1682,1683,1,0,0,0,1683, + 279,1,0,0,0,1684,1682,1,0,0,0,1685,1689,3,282,141,0,1686,1689,3, + 288,144,0,1687,1689,3,290,145,0,1688,1685,1,0,0,0,1688,1686,1,0, + 0,0,1688,1687,1,0,0,0,1689,281,1,0,0,0,1690,1693,3,92,46,0,1691, + 1693,3,222,111,0,1692,1690,1,0,0,0,1692,1691,1,0,0,0,1693,283,1, + 0,0,0,1694,1696,3,164,82,0,1695,1694,1,0,0,0,1696,1699,1,0,0,0,1697, + 1695,1,0,0,0,1697,1698,1,0,0,0,1698,1700,1,0,0,0,1699,1697,1,0,0, + 0,1700,1702,3,286,143,0,1701,1703,3,120,60,0,1702,1701,1,0,0,0,1702, + 1703,1,0,0,0,1703,285,1,0,0,0,1704,1707,3,128,64,0,1705,1707,5,15, + 0,0,1706,1704,1,0,0,0,1706,1705,1,0,0,0,1707,287,1,0,0,0,1708,1709, + 3,284,142,0,1709,1710,5,82,0,0,1710,289,1,0,0,0,1711,1718,3,294, + 147,0,1712,1718,3,298,149,0,1713,1718,3,306,153,0,1714,1718,3,308, + 154,0,1715,1718,3,326,163,0,1716,1718,3,332,166,0,1717,1711,1,0, + 0,0,1717,1712,1,0,0,0,1717,1713,1,0,0,0,1717,1714,1,0,0,0,1717,1715, + 1,0,0,0,1717,1716,1,0,0,0,1718,291,1,0,0,0,1719,1725,3,294,147,0, + 1720,1725,3,300,150,0,1721,1725,3,310,155,0,1722,1725,3,328,164, + 0,1723,1725,3,334,167,0,1724,1719,1,0,0,0,1724,1720,1,0,0,0,1724, + 1721,1,0,0,0,1724,1722,1,0,0,0,1724,1723,1,0,0,0,1725,293,1,0,0, + 0,1726,1740,3,276,138,0,1727,1740,3,296,148,0,1728,1740,3,302,151, + 0,1729,1740,3,312,156,0,1730,1740,3,314,157,0,1731,1740,3,330,165, + 0,1732,1740,3,350,175,0,1733,1740,3,352,176,0,1734,1740,3,354,177, + 0,1735,1740,3,358,179,0,1736,1740,3,356,178,0,1737,1740,3,360,180, + 0,1738,1740,3,382,191,0,1739,1726,1,0,0,0,1739,1727,1,0,0,0,1739, + 1728,1,0,0,0,1739,1729,1,0,0,0,1739,1730,1,0,0,0,1739,1731,1,0,0, + 0,1739,1732,1,0,0,0,1739,1733,1,0,0,0,1739,1734,1,0,0,0,1739,1735, + 1,0,0,0,1739,1736,1,0,0,0,1739,1737,1,0,0,0,1739,1738,1,0,0,0,1740, + 295,1,0,0,0,1741,1742,5,82,0,0,1742,297,1,0,0,0,1743,1744,5,123, + 0,0,1744,1745,5,94,0,0,1745,1746,3,290,145,0,1746,299,1,0,0,0,1747, + 1748,5,123,0,0,1748,1749,5,94,0,0,1749,1750,3,292,146,0,1750,301, + 1,0,0,0,1751,1752,3,304,152,0,1752,1753,5,82,0,0,1753,303,1,0,0, + 0,1754,1762,3,468,234,0,1755,1762,3,436,218,0,1756,1762,3,438,219, + 0,1757,1762,3,430,215,0,1758,1762,3,432,216,0,1759,1762,3,420,210, + 0,1760,1762,3,398,199,0,1761,1754,1,0,0,0,1761,1755,1,0,0,0,1761, + 1756,1,0,0,0,1761,1757,1,0,0,0,1761,1758,1,0,0,0,1761,1759,1,0,0, + 0,1761,1760,1,0,0,0,1762,305,1,0,0,0,1763,1764,5,39,0,0,1764,1765, + 5,76,0,0,1765,1766,3,388,194,0,1766,1767,5,77,0,0,1767,1768,3,290, + 145,0,1768,307,1,0,0,0,1769,1770,5,39,0,0,1770,1771,5,76,0,0,1771, + 1772,3,388,194,0,1772,1773,5,77,0,0,1773,1774,3,292,146,0,1774,1775, + 5,32,0,0,1775,1776,3,290,145,0,1776,309,1,0,0,0,1777,1778,5,39,0, + 0,1778,1779,5,76,0,0,1779,1780,3,388,194,0,1780,1781,5,77,0,0,1781, + 1782,3,292,146,0,1782,1783,5,32,0,0,1783,1784,3,292,146,0,1784,311, + 1,0,0,0,1785,1786,5,19,0,0,1786,1789,3,388,194,0,1787,1788,5,94, + 0,0,1788,1790,3,388,194,0,1789,1787,1,0,0,0,1789,1790,1,0,0,0,1790, + 1791,1,0,0,0,1791,1792,5,82,0,0,1792,313,1,0,0,0,1793,1794,5,58, + 0,0,1794,1795,5,76,0,0,1795,1796,3,388,194,0,1796,1797,5,77,0,0, + 1797,1798,3,316,158,0,1798,315,1,0,0,0,1799,1800,5,78,0,0,1800,1804, + 3,318,159,0,1801,1803,3,318,159,0,1802,1801,1,0,0,0,1803,1806,1, + 0,0,0,1804,1802,1,0,0,0,1804,1805,1,0,0,0,1805,1807,1,0,0,0,1806, + 1804,1,0,0,0,1807,1808,5,79,0,0,1808,1826,1,0,0,0,1809,1813,5,78, + 0,0,1810,1812,3,320,160,0,1811,1810,1,0,0,0,1812,1815,1,0,0,0,1813, + 1811,1,0,0,0,1813,1814,1,0,0,0,1814,1821,1,0,0,0,1815,1813,1,0,0, + 0,1816,1817,3,322,161,0,1817,1818,5,94,0,0,1818,1820,1,0,0,0,1819, + 1816,1,0,0,0,1820,1823,1,0,0,0,1821,1819,1,0,0,0,1821,1822,1,0,0, + 0,1822,1824,1,0,0,0,1823,1821,1,0,0,0,1824,1826,5,79,0,0,1825,1799, + 1,0,0,0,1825,1809,1,0,0,0,1826,317,1,0,0,0,1827,1828,3,322,161,0, + 1828,1834,5,95,0,0,1829,1830,3,388,194,0,1830,1831,5,82,0,0,1831, + 1835,1,0,0,0,1832,1835,3,276,138,0,1833,1835,3,356,178,0,1834,1829, + 1,0,0,0,1834,1832,1,0,0,0,1834,1833,1,0,0,0,1835,319,1,0,0,0,1836, + 1837,3,322,161,0,1837,1843,5,94,0,0,1838,1839,3,322,161,0,1839,1840, + 5,94,0,0,1840,1842,1,0,0,0,1841,1838,1,0,0,0,1842,1845,1,0,0,0,1843, + 1841,1,0,0,0,1843,1844,1,0,0,0,1844,1846,1,0,0,0,1845,1843,1,0,0, + 0,1846,1847,3,278,139,0,1847,321,1,0,0,0,1848,1849,5,23,0,0,1849, + 1854,3,324,162,0,1850,1851,5,83,0,0,1851,1853,3,324,162,0,1852,1850, + 1,0,0,0,1853,1856,1,0,0,0,1854,1852,1,0,0,0,1854,1855,1,0,0,0,1855, + 1859,1,0,0,0,1856,1854,1,0,0,0,1857,1859,5,29,0,0,1858,1848,1,0, + 0,0,1858,1857,1,0,0,0,1859,323,1,0,0,0,1860,1861,3,464,232,0,1861, + 325,1,0,0,0,1862,1863,5,67,0,0,1863,1864,5,76,0,0,1864,1865,3,388, + 194,0,1865,1866,5,77,0,0,1866,1867,3,290,145,0,1867,327,1,0,0,0, + 1868,1869,5,67,0,0,1869,1870,5,76,0,0,1870,1871,3,388,194,0,1871, + 1872,5,77,0,0,1872,1873,3,292,146,0,1873,329,1,0,0,0,1874,1875,5, + 30,0,0,1875,1876,3,290,145,0,1876,1877,5,67,0,0,1877,1878,5,76,0, + 0,1878,1879,3,388,194,0,1879,1880,5,77,0,0,1880,1881,5,82,0,0,1881, + 331,1,0,0,0,1882,1885,3,336,168,0,1883,1885,3,346,173,0,1884,1882, + 1,0,0,0,1884,1883,1,0,0,0,1885,333,1,0,0,0,1886,1889,3,338,169,0, + 1887,1889,3,348,174,0,1888,1886,1,0,0,0,1888,1887,1,0,0,0,1889,335, + 1,0,0,0,1890,1891,5,38,0,0,1891,1893,5,76,0,0,1892,1894,3,340,170, + 0,1893,1892,1,0,0,0,1893,1894,1,0,0,0,1894,1895,1,0,0,0,1895,1897, + 5,82,0,0,1896,1898,3,388,194,0,1897,1896,1,0,0,0,1897,1898,1,0,0, + 0,1898,1899,1,0,0,0,1899,1901,5,82,0,0,1900,1902,3,342,171,0,1901, + 1900,1,0,0,0,1901,1902,1,0,0,0,1902,1903,1,0,0,0,1903,1904,5,77, + 0,0,1904,1905,3,290,145,0,1905,337,1,0,0,0,1906,1907,5,38,0,0,1907, + 1909,5,76,0,0,1908,1910,3,340,170,0,1909,1908,1,0,0,0,1909,1910, + 1,0,0,0,1910,1911,1,0,0,0,1911,1913,5,82,0,0,1912,1914,3,388,194, + 0,1913,1912,1,0,0,0,1913,1914,1,0,0,0,1914,1915,1,0,0,0,1915,1917, + 5,82,0,0,1916,1918,3,342,171,0,1917,1916,1,0,0,0,1917,1918,1,0,0, + 0,1918,1919,1,0,0,0,1919,1920,5,77,0,0,1920,1921,3,292,146,0,1921, + 339,1,0,0,0,1922,1925,3,344,172,0,1923,1925,3,284,142,0,1924,1922, + 1,0,0,0,1924,1923,1,0,0,0,1925,341,1,0,0,0,1926,1927,3,344,172,0, + 1927,343,1,0,0,0,1928,1933,3,304,152,0,1929,1930,5,83,0,0,1930,1932, + 3,304,152,0,1931,1929,1,0,0,0,1932,1935,1,0,0,0,1933,1931,1,0,0, + 0,1933,1934,1,0,0,0,1934,345,1,0,0,0,1935,1933,1,0,0,0,1936,1937, + 5,38,0,0,1937,1938,5,76,0,0,1938,1939,3,284,142,0,1939,1940,5,94, + 0,0,1940,1941,3,388,194,0,1941,1942,5,77,0,0,1942,1943,3,290,145, + 0,1943,347,1,0,0,0,1944,1945,5,38,0,0,1945,1946,5,76,0,0,1946,1947, + 3,284,142,0,1947,1948,5,94,0,0,1948,1949,3,388,194,0,1949,1950,5, + 77,0,0,1950,1951,3,292,146,0,1951,349,1,0,0,0,1952,1954,5,21,0,0, + 1953,1955,5,123,0,0,1954,1953,1,0,0,0,1954,1955,1,0,0,0,1955,1956, + 1,0,0,0,1956,1957,5,82,0,0,1957,351,1,0,0,0,1958,1960,5,28,0,0,1959, + 1961,5,123,0,0,1960,1959,1,0,0,0,1960,1961,1,0,0,0,1961,1962,1,0, + 0,0,1962,1963,5,82,0,0,1963,353,1,0,0,0,1964,1966,5,53,0,0,1965, + 1967,3,388,194,0,1966,1965,1,0,0,0,1966,1967,1,0,0,0,1967,1968,1, + 0,0,0,1968,1969,5,82,0,0,1969,355,1,0,0,0,1970,1971,5,61,0,0,1971, + 1972,3,388,194,0,1972,1973,5,82,0,0,1973,357,1,0,0,0,1974,1975,5, + 59,0,0,1975,1976,5,76,0,0,1976,1977,3,388,194,0,1977,1978,5,77,0, + 0,1978,1979,3,276,138,0,1979,359,1,0,0,0,1980,1981,5,64,0,0,1981, + 1982,3,276,138,0,1982,1983,3,362,181,0,1983,1997,1,0,0,0,1984,1985, + 5,64,0,0,1985,1986,3,276,138,0,1986,1987,3,370,185,0,1987,1997,1, + 0,0,0,1988,1989,5,64,0,0,1989,1991,3,276,138,0,1990,1992,3,362,181, + 0,1991,1990,1,0,0,0,1991,1992,1,0,0,0,1992,1993,1,0,0,0,1993,1994, + 3,370,185,0,1994,1997,1,0,0,0,1995,1997,3,372,186,0,1996,1980,1, + 0,0,0,1996,1984,1,0,0,0,1996,1988,1,0,0,0,1996,1995,1,0,0,0,1997, + 361,1,0,0,0,1998,2002,3,364,182,0,1999,2001,3,364,182,0,2000,1999, + 1,0,0,0,2001,2004,1,0,0,0,2002,2000,1,0,0,0,2002,2003,1,0,0,0,2003, + 363,1,0,0,0,2004,2002,1,0,0,0,2005,2006,5,24,0,0,2006,2007,5,76, + 0,0,2007,2008,3,366,183,0,2008,2009,5,77,0,0,2009,2010,3,276,138, + 0,2010,365,1,0,0,0,2011,2013,3,164,82,0,2012,2011,1,0,0,0,2013,2016, + 1,0,0,0,2014,2012,1,0,0,0,2014,2015,1,0,0,0,2015,2017,1,0,0,0,2016, + 2014,1,0,0,0,2017,2018,3,368,184,0,2018,2019,3,124,62,0,2019,367, + 1,0,0,0,2020,2025,3,138,69,0,2021,2022,5,109,0,0,2022,2024,3,22, + 11,0,2023,2021,1,0,0,0,2024,2027,1,0,0,0,2025,2023,1,0,0,0,2025, + 2026,1,0,0,0,2026,369,1,0,0,0,2027,2025,1,0,0,0,2028,2029,5,36,0, + 0,2029,2030,3,276,138,0,2030,371,1,0,0,0,2031,2032,5,64,0,0,2032, + 2033,3,374,187,0,2033,2035,3,276,138,0,2034,2036,3,362,181,0,2035, + 2034,1,0,0,0,2035,2036,1,0,0,0,2036,2038,1,0,0,0,2037,2039,3,370, + 185,0,2038,2037,1,0,0,0,2038,2039,1,0,0,0,2039,373,1,0,0,0,2040, + 2041,5,76,0,0,2041,2043,3,376,188,0,2042,2044,5,82,0,0,2043,2042, + 1,0,0,0,2043,2044,1,0,0,0,2044,2045,1,0,0,0,2045,2046,5,77,0,0,2046, + 375,1,0,0,0,2047,2052,3,378,189,0,2048,2049,5,82,0,0,2049,2051,3, + 378,189,0,2050,2048,1,0,0,0,2051,2054,1,0,0,0,2052,2050,1,0,0,0, + 2052,2053,1,0,0,0,2053,377,1,0,0,0,2054,2052,1,0,0,0,2055,2058,3, + 284,142,0,2056,2058,3,380,190,0,2057,2055,1,0,0,0,2057,2056,1,0, + 0,0,2058,379,1,0,0,0,2059,2062,3,58,29,0,2060,2062,3,418,209,0,2061, + 2059,1,0,0,0,2061,2060,1,0,0,0,2062,381,1,0,0,0,2063,2064,5,17,0, + 0,2064,2065,3,388,194,0,2065,2066,5,82,0,0,2066,383,1,0,0,0,2067, + 2068,3,386,193,0,2068,385,1,0,0,0,2069,2070,3,284,142,0,2070,387, + 1,0,0,0,2071,2074,3,474,237,0,2072,2074,3,466,233,0,2073,2071,1, + 0,0,0,2073,2072,1,0,0,0,2074,389,1,0,0,0,2075,2078,3,392,196,0,2076, + 2078,3,406,203,0,2077,2075,1,0,0,0,2077,2076,1,0,0,0,2078,391,1, + 0,0,0,2079,2081,3,2,1,0,2080,2082,3,394,197,0,2081,2080,1,0,0,0, + 2081,2082,1,0,0,0,2082,2297,1,0,0,0,2083,2085,3,396,198,0,2084,2086, + 3,394,197,0,2085,2084,1,0,0,0,2085,2086,1,0,0,0,2086,2297,1,0,0, + 0,2087,2089,5,60,0,0,2088,2090,3,394,197,0,2089,2088,1,0,0,0,2089, + 2090,1,0,0,0,2090,2297,1,0,0,0,2091,2092,3,54,27,0,2092,2093,5,84, + 0,0,2093,2095,5,60,0,0,2094,2096,3,394,197,0,2095,2094,1,0,0,0,2095, + 2096,1,0,0,0,2096,2297,1,0,0,0,2097,2098,5,76,0,0,2098,2099,3,388, + 194,0,2099,2101,5,77,0,0,2100,2102,3,394,197,0,2101,2100,1,0,0,0, + 2101,2102,1,0,0,0,2102,2297,1,0,0,0,2103,2105,3,400,200,0,2104,2106, + 3,394,197,0,2105,2104,1,0,0,0,2105,2106,1,0,0,0,2106,2297,1,0,0, + 0,2107,2108,3,58,29,0,2108,2109,5,84,0,0,2109,2111,3,400,200,0,2110, + 2112,3,394,197,0,2111,2110,1,0,0,0,2111,2112,1,0,0,0,2112,2297,1, + 0,0,0,2113,2114,3,406,203,0,2114,2115,5,84,0,0,2115,2117,3,400,200, + 0,2116,2118,3,394,197,0,2117,2116,1,0,0,0,2117,2118,1,0,0,0,2118, + 2297,1,0,0,0,2119,2120,3,406,203,0,2120,2121,5,84,0,0,2121,2123, + 5,123,0,0,2122,2124,3,394,197,0,2123,2122,1,0,0,0,2123,2124,1,0, + 0,0,2124,2297,1,0,0,0,2125,2126,5,57,0,0,2126,2127,5,84,0,0,2127, + 2129,5,123,0,0,2128,2130,3,394,197,0,2129,2128,1,0,0,0,2129,2130, + 1,0,0,0,2130,2297,1,0,0,0,2131,2132,3,54,27,0,2132,2133,5,84,0,0, + 2133,2134,5,57,0,0,2134,2135,5,84,0,0,2135,2137,5,123,0,0,2136,2138, + 3,394,197,0,2137,2136,1,0,0,0,2137,2138,1,0,0,0,2138,2297,1,0,0, + 0,2139,2140,3,58,29,0,2140,2141,5,80,0,0,2141,2142,3,388,194,0,2142, + 2144,5,81,0,0,2143,2145,3,394,197,0,2144,2143,1,0,0,0,2144,2145, + 1,0,0,0,2145,2297,1,0,0,0,2146,2147,3,410,205,0,2147,2148,5,80,0, + 0,2148,2149,3,388,194,0,2149,2151,5,81,0,0,2150,2152,3,394,197,0, + 2151,2150,1,0,0,0,2151,2152,1,0,0,0,2152,2297,1,0,0,0,2153,2154, + 3,60,30,0,2154,2156,5,76,0,0,2155,2157,3,422,211,0,2156,2155,1,0, + 0,0,2156,2157,1,0,0,0,2157,2158,1,0,0,0,2158,2160,5,77,0,0,2159, + 2161,3,394,197,0,2160,2159,1,0,0,0,2160,2161,1,0,0,0,2161,2297,1, + 0,0,0,2162,2163,3,54,27,0,2163,2165,5,84,0,0,2164,2166,3,40,20,0, + 2165,2164,1,0,0,0,2165,2166,1,0,0,0,2166,2167,1,0,0,0,2167,2168, + 5,123,0,0,2168,2170,5,76,0,0,2169,2171,3,422,211,0,2170,2169,1,0, + 0,0,2170,2171,1,0,0,0,2171,2172,1,0,0,0,2172,2174,5,77,0,0,2173, + 2175,3,394,197,0,2174,2173,1,0,0,0,2174,2175,1,0,0,0,2175,2297,1, + 0,0,0,2176,2177,3,58,29,0,2177,2179,5,84,0,0,2178,2180,3,40,20,0, + 2179,2178,1,0,0,0,2179,2180,1,0,0,0,2180,2181,1,0,0,0,2181,2182, + 5,123,0,0,2182,2184,5,76,0,0,2183,2185,3,422,211,0,2184,2183,1,0, + 0,0,2184,2185,1,0,0,0,2185,2186,1,0,0,0,2186,2188,5,77,0,0,2187, + 2189,3,394,197,0,2188,2187,1,0,0,0,2188,2189,1,0,0,0,2189,2297,1, + 0,0,0,2190,2191,3,406,203,0,2191,2193,5,84,0,0,2192,2194,3,40,20, + 0,2193,2192,1,0,0,0,2193,2194,1,0,0,0,2194,2195,1,0,0,0,2195,2196, + 5,123,0,0,2196,2198,5,76,0,0,2197,2199,3,422,211,0,2198,2197,1,0, + 0,0,2198,2199,1,0,0,0,2199,2200,1,0,0,0,2200,2202,5,77,0,0,2201, + 2203,3,394,197,0,2202,2201,1,0,0,0,2202,2203,1,0,0,0,2203,2297,1, + 0,0,0,2204,2205,5,57,0,0,2205,2207,5,84,0,0,2206,2208,3,40,20,0, + 2207,2206,1,0,0,0,2207,2208,1,0,0,0,2208,2209,1,0,0,0,2209,2210, + 5,123,0,0,2210,2212,5,76,0,0,2211,2213,3,422,211,0,2212,2211,1,0, + 0,0,2212,2213,1,0,0,0,2213,2214,1,0,0,0,2214,2216,5,77,0,0,2215, + 2217,3,394,197,0,2216,2215,1,0,0,0,2216,2217,1,0,0,0,2217,2297,1, + 0,0,0,2218,2219,3,54,27,0,2219,2220,5,84,0,0,2220,2221,5,57,0,0, + 2221,2223,5,84,0,0,2222,2224,3,40,20,0,2223,2222,1,0,0,0,2223,2224, + 1,0,0,0,2224,2225,1,0,0,0,2225,2226,5,123,0,0,2226,2228,5,76,0,0, + 2227,2229,3,422,211,0,2228,2227,1,0,0,0,2228,2229,1,0,0,0,2229,2230, + 1,0,0,0,2230,2232,5,77,0,0,2231,2233,3,394,197,0,2232,2231,1,0,0, + 0,2232,2233,1,0,0,0,2233,2297,1,0,0,0,2234,2235,3,58,29,0,2235,2237, + 5,87,0,0,2236,2238,3,40,20,0,2237,2236,1,0,0,0,2237,2238,1,0,0,0, + 2238,2239,1,0,0,0,2239,2241,5,123,0,0,2240,2242,3,394,197,0,2241, + 2240,1,0,0,0,2241,2242,1,0,0,0,2242,2297,1,0,0,0,2243,2244,3,406, + 203,0,2244,2246,5,87,0,0,2245,2247,3,40,20,0,2246,2245,1,0,0,0,2246, + 2247,1,0,0,0,2247,2248,1,0,0,0,2248,2250,5,123,0,0,2249,2251,3,394, + 197,0,2250,2249,1,0,0,0,2250,2251,1,0,0,0,2251,2297,1,0,0,0,2252, + 2253,3,16,8,0,2253,2255,5,87,0,0,2254,2256,3,40,20,0,2255,2254,1, + 0,0,0,2255,2256,1,0,0,0,2256,2257,1,0,0,0,2257,2259,5,123,0,0,2258, + 2260,3,394,197,0,2259,2258,1,0,0,0,2259,2260,1,0,0,0,2260,2297,1, + 0,0,0,2261,2262,5,57,0,0,2262,2264,5,87,0,0,2263,2265,3,40,20,0, + 2264,2263,1,0,0,0,2264,2265,1,0,0,0,2265,2266,1,0,0,0,2266,2268, + 5,123,0,0,2267,2269,3,394,197,0,2268,2267,1,0,0,0,2268,2269,1,0, + 0,0,2269,2297,1,0,0,0,2270,2271,3,54,27,0,2271,2272,5,84,0,0,2272, + 2273,5,57,0,0,2273,2275,5,87,0,0,2274,2276,3,40,20,0,2275,2274,1, + 0,0,0,2275,2276,1,0,0,0,2276,2277,1,0,0,0,2277,2279,5,123,0,0,2278, + 2280,3,394,197,0,2279,2278,1,0,0,0,2279,2280,1,0,0,0,2280,2297,1, + 0,0,0,2281,2282,3,22,11,0,2282,2284,5,87,0,0,2283,2285,3,40,20,0, + 2284,2283,1,0,0,0,2284,2285,1,0,0,0,2285,2286,1,0,0,0,2286,2288, + 5,48,0,0,2287,2289,3,394,197,0,2288,2287,1,0,0,0,2288,2289,1,0,0, + 0,2289,2297,1,0,0,0,2290,2291,3,28,14,0,2291,2292,5,87,0,0,2292, + 2294,5,48,0,0,2293,2295,3,394,197,0,2294,2293,1,0,0,0,2294,2295, + 1,0,0,0,2295,2297,1,0,0,0,2296,2079,1,0,0,0,2296,2083,1,0,0,0,2296, + 2087,1,0,0,0,2296,2091,1,0,0,0,2296,2097,1,0,0,0,2296,2103,1,0,0, + 0,2296,2107,1,0,0,0,2296,2113,1,0,0,0,2296,2119,1,0,0,0,2296,2125, + 1,0,0,0,2296,2131,1,0,0,0,2296,2139,1,0,0,0,2296,2146,1,0,0,0,2296, + 2153,1,0,0,0,2296,2162,1,0,0,0,2296,2176,1,0,0,0,2296,2190,1,0,0, + 0,2296,2204,1,0,0,0,2296,2218,1,0,0,0,2296,2234,1,0,0,0,2296,2243, + 1,0,0,0,2296,2252,1,0,0,0,2296,2261,1,0,0,0,2296,2270,1,0,0,0,2296, + 2281,1,0,0,0,2296,2290,1,0,0,0,2297,393,1,0,0,0,2298,2299,5,84,0, + 0,2299,2301,3,400,200,0,2300,2302,3,394,197,0,2301,2300,1,0,0,0, + 2301,2302,1,0,0,0,2302,2336,1,0,0,0,2303,2304,5,84,0,0,2304,2306, + 5,123,0,0,2305,2307,3,394,197,0,2306,2305,1,0,0,0,2306,2307,1,0, + 0,0,2307,2336,1,0,0,0,2308,2309,5,80,0,0,2309,2310,3,388,194,0,2310, + 2312,5,81,0,0,2311,2313,3,394,197,0,2312,2311,1,0,0,0,2312,2313, + 1,0,0,0,2313,2336,1,0,0,0,2314,2316,5,84,0,0,2315,2317,3,40,20,0, + 2316,2315,1,0,0,0,2316,2317,1,0,0,0,2317,2318,1,0,0,0,2318,2319, + 5,123,0,0,2319,2321,5,76,0,0,2320,2322,3,422,211,0,2321,2320,1,0, + 0,0,2321,2322,1,0,0,0,2322,2323,1,0,0,0,2323,2325,5,77,0,0,2324, + 2326,3,394,197,0,2325,2324,1,0,0,0,2325,2326,1,0,0,0,2326,2336,1, + 0,0,0,2327,2329,5,87,0,0,2328,2330,3,40,20,0,2329,2328,1,0,0,0,2329, + 2330,1,0,0,0,2330,2331,1,0,0,0,2331,2333,5,123,0,0,2332,2334,3,394, + 197,0,2333,2332,1,0,0,0,2333,2334,1,0,0,0,2334,2336,1,0,0,0,2335, + 2298,1,0,0,0,2335,2303,1,0,0,0,2335,2308,1,0,0,0,2335,2314,1,0,0, + 0,2335,2327,1,0,0,0,2336,395,1,0,0,0,2337,2342,3,54,27,0,2338,2339, + 5,80,0,0,2339,2341,5,81,0,0,2340,2338,1,0,0,0,2341,2344,1,0,0,0, + 2342,2340,1,0,0,0,2342,2343,1,0,0,0,2343,2345,1,0,0,0,2344,2342, + 1,0,0,0,2345,2346,5,84,0,0,2346,2347,5,26,0,0,2347,2373,1,0,0,0, + 2348,2353,3,10,5,0,2349,2350,5,80,0,0,2350,2352,5,81,0,0,2351,2349, + 1,0,0,0,2352,2355,1,0,0,0,2353,2351,1,0,0,0,2353,2354,1,0,0,0,2354, + 2356,1,0,0,0,2355,2353,1,0,0,0,2356,2357,5,84,0,0,2357,2358,5,26, + 0,0,2358,2373,1,0,0,0,2359,2364,5,20,0,0,2360,2361,5,80,0,0,2361, + 2363,5,81,0,0,2362,2360,1,0,0,0,2363,2366,1,0,0,0,2364,2362,1,0, + 0,0,2364,2365,1,0,0,0,2365,2367,1,0,0,0,2366,2364,1,0,0,0,2367,2368, + 5,84,0,0,2368,2373,5,26,0,0,2369,2370,5,65,0,0,2370,2371,5,84,0, + 0,2371,2373,5,26,0,0,2372,2337,1,0,0,0,2372,2348,1,0,0,0,2372,2359, + 1,0,0,0,2372,2369,1,0,0,0,2373,397,1,0,0,0,2374,2384,3,400,200,0, + 2375,2376,3,58,29,0,2376,2377,5,84,0,0,2377,2378,3,400,200,0,2378, + 2384,1,0,0,0,2379,2380,3,390,195,0,2380,2381,5,84,0,0,2381,2382, + 3,400,200,0,2382,2384,1,0,0,0,2383,2374,1,0,0,0,2383,2375,1,0,0, + 0,2383,2379,1,0,0,0,2384,399,1,0,0,0,2385,2387,5,48,0,0,2386,2388, + 3,40,20,0,2387,2386,1,0,0,0,2387,2388,1,0,0,0,2388,2389,1,0,0,0, + 2389,2390,3,402,201,0,2390,2392,5,76,0,0,2391,2393,3,422,211,0,2392, + 2391,1,0,0,0,2392,2393,1,0,0,0,2393,2394,1,0,0,0,2394,2396,5,77, + 0,0,2395,2397,3,110,55,0,2396,2395,1,0,0,0,2396,2397,1,0,0,0,2397, + 401,1,0,0,0,2398,2400,3,254,127,0,2399,2398,1,0,0,0,2400,2403,1, + 0,0,0,2401,2399,1,0,0,0,2401,2402,1,0,0,0,2402,2404,1,0,0,0,2403, + 2401,1,0,0,0,2404,2415,5,123,0,0,2405,2409,5,84,0,0,2406,2408,3, + 254,127,0,2407,2406,1,0,0,0,2408,2411,1,0,0,0,2409,2407,1,0,0,0, + 2409,2410,1,0,0,0,2410,2412,1,0,0,0,2411,2409,1,0,0,0,2412,2414, + 5,123,0,0,2413,2405,1,0,0,0,2414,2417,1,0,0,0,2415,2413,1,0,0,0, + 2415,2416,1,0,0,0,2416,2419,1,0,0,0,2417,2415,1,0,0,0,2418,2420, + 3,404,202,0,2419,2418,1,0,0,0,2419,2420,1,0,0,0,2420,403,1,0,0,0, + 2421,2424,3,40,20,0,2422,2424,5,4,0,0,2423,2421,1,0,0,0,2423,2422, + 1,0,0,0,2424,405,1,0,0,0,2425,2428,3,408,204,0,2426,2428,3,410,205, + 0,2427,2425,1,0,0,0,2427,2426,1,0,0,0,2428,407,1,0,0,0,2429,2430, + 5,48,0,0,2430,2431,3,8,4,0,2431,2433,3,412,206,0,2432,2434,3,30, + 15,0,2433,2432,1,0,0,0,2433,2434,1,0,0,0,2434,2442,1,0,0,0,2435, + 2436,5,48,0,0,2436,2437,3,22,11,0,2437,2439,3,412,206,0,2438,2440, + 3,30,15,0,2439,2438,1,0,0,0,2439,2440,1,0,0,0,2440,2442,1,0,0,0, + 2441,2429,1,0,0,0,2441,2435,1,0,0,0,2442,409,1,0,0,0,2443,2444,5, + 48,0,0,2444,2445,3,8,4,0,2445,2446,3,30,15,0,2446,2447,3,272,136, + 0,2447,2454,1,0,0,0,2448,2449,5,48,0,0,2449,2450,3,20,10,0,2450, + 2451,3,30,15,0,2451,2452,3,272,136,0,2452,2454,1,0,0,0,2453,2443, + 1,0,0,0,2453,2448,1,0,0,0,2454,411,1,0,0,0,2455,2459,3,414,207,0, + 2456,2458,3,414,207,0,2457,2456,1,0,0,0,2458,2461,1,0,0,0,2459,2457, + 1,0,0,0,2459,2460,1,0,0,0,2460,413,1,0,0,0,2461,2459,1,0,0,0,2462, + 2464,3,254,127,0,2463,2462,1,0,0,0,2464,2467,1,0,0,0,2465,2463,1, + 0,0,0,2465,2466,1,0,0,0,2466,2468,1,0,0,0,2467,2465,1,0,0,0,2468, + 2469,5,80,0,0,2469,2470,3,388,194,0,2470,2471,5,81,0,0,2471,415, + 1,0,0,0,2472,2473,3,58,29,0,2473,2474,5,80,0,0,2474,2475,3,388,194, + 0,2475,2476,5,81,0,0,2476,2488,1,0,0,0,2477,2478,3,392,196,0,2478, + 2479,5,80,0,0,2479,2480,3,388,194,0,2480,2481,5,81,0,0,2481,2488, + 1,0,0,0,2482,2483,3,410,205,0,2483,2484,5,80,0,0,2484,2485,3,388, + 194,0,2485,2486,5,81,0,0,2486,2488,1,0,0,0,2487,2472,1,0,0,0,2487, + 2477,1,0,0,0,2487,2482,1,0,0,0,2488,417,1,0,0,0,2489,2490,3,390, + 195,0,2490,2491,5,84,0,0,2491,2492,5,123,0,0,2492,2503,1,0,0,0,2493, + 2494,5,57,0,0,2494,2495,5,84,0,0,2495,2503,5,123,0,0,2496,2497,3, + 54,27,0,2497,2498,5,84,0,0,2498,2499,5,57,0,0,2499,2500,5,84,0,0, + 2500,2501,5,123,0,0,2501,2503,1,0,0,0,2502,2489,1,0,0,0,2502,2493, + 1,0,0,0,2502,2496,1,0,0,0,2503,419,1,0,0,0,2504,2505,3,60,30,0,2505, + 2507,5,76,0,0,2506,2508,3,422,211,0,2507,2506,1,0,0,0,2507,2508, + 1,0,0,0,2508,2509,1,0,0,0,2509,2510,5,77,0,0,2510,2573,1,0,0,0,2511, + 2512,3,54,27,0,2512,2514,5,84,0,0,2513,2515,3,40,20,0,2514,2513, + 1,0,0,0,2514,2515,1,0,0,0,2515,2516,1,0,0,0,2516,2517,5,123,0,0, + 2517,2519,5,76,0,0,2518,2520,3,422,211,0,2519,2518,1,0,0,0,2519, + 2520,1,0,0,0,2520,2521,1,0,0,0,2521,2522,5,77,0,0,2522,2573,1,0, + 0,0,2523,2524,3,58,29,0,2524,2526,5,84,0,0,2525,2527,3,40,20,0,2526, + 2525,1,0,0,0,2526,2527,1,0,0,0,2527,2528,1,0,0,0,2528,2529,5,123, + 0,0,2529,2531,5,76,0,0,2530,2532,3,422,211,0,2531,2530,1,0,0,0,2531, + 2532,1,0,0,0,2532,2533,1,0,0,0,2533,2534,5,77,0,0,2534,2573,1,0, + 0,0,2535,2536,3,390,195,0,2536,2538,5,84,0,0,2537,2539,3,40,20,0, + 2538,2537,1,0,0,0,2538,2539,1,0,0,0,2539,2540,1,0,0,0,2540,2541, + 5,123,0,0,2541,2543,5,76,0,0,2542,2544,3,422,211,0,2543,2542,1,0, + 0,0,2543,2544,1,0,0,0,2544,2545,1,0,0,0,2545,2546,5,77,0,0,2546, + 2573,1,0,0,0,2547,2548,5,57,0,0,2548,2550,5,84,0,0,2549,2551,3,40, + 20,0,2550,2549,1,0,0,0,2550,2551,1,0,0,0,2551,2552,1,0,0,0,2552, + 2553,5,123,0,0,2553,2555,5,76,0,0,2554,2556,3,422,211,0,2555,2554, + 1,0,0,0,2555,2556,1,0,0,0,2556,2557,1,0,0,0,2557,2573,5,77,0,0,2558, + 2559,3,54,27,0,2559,2560,5,84,0,0,2560,2561,5,57,0,0,2561,2563,5, + 84,0,0,2562,2564,3,40,20,0,2563,2562,1,0,0,0,2563,2564,1,0,0,0,2564, + 2565,1,0,0,0,2565,2566,5,123,0,0,2566,2568,5,76,0,0,2567,2569,3, + 422,211,0,2568,2567,1,0,0,0,2568,2569,1,0,0,0,2569,2570,1,0,0,0, + 2570,2571,5,77,0,0,2571,2573,1,0,0,0,2572,2504,1,0,0,0,2572,2511, + 1,0,0,0,2572,2523,1,0,0,0,2572,2535,1,0,0,0,2572,2547,1,0,0,0,2572, + 2558,1,0,0,0,2573,421,1,0,0,0,2574,2579,3,388,194,0,2575,2576,5, + 83,0,0,2576,2578,3,388,194,0,2577,2575,1,0,0,0,2578,2581,1,0,0,0, + 2579,2577,1,0,0,0,2579,2580,1,0,0,0,2580,423,1,0,0,0,2581,2579,1, + 0,0,0,2582,2583,3,58,29,0,2583,2585,5,87,0,0,2584,2586,3,40,20,0, + 2585,2584,1,0,0,0,2585,2586,1,0,0,0,2586,2587,1,0,0,0,2587,2588, + 5,123,0,0,2588,2630,1,0,0,0,2589,2590,3,390,195,0,2590,2592,5,87, + 0,0,2591,2593,3,40,20,0,2592,2591,1,0,0,0,2592,2593,1,0,0,0,2593, + 2594,1,0,0,0,2594,2595,5,123,0,0,2595,2630,1,0,0,0,2596,2597,3,16, + 8,0,2597,2599,5,87,0,0,2598,2600,3,40,20,0,2599,2598,1,0,0,0,2599, + 2600,1,0,0,0,2600,2601,1,0,0,0,2601,2602,5,123,0,0,2602,2630,1,0, + 0,0,2603,2604,5,57,0,0,2604,2606,5,87,0,0,2605,2607,3,40,20,0,2606, + 2605,1,0,0,0,2606,2607,1,0,0,0,2607,2608,1,0,0,0,2608,2630,5,123, + 0,0,2609,2610,3,54,27,0,2610,2611,5,84,0,0,2611,2612,5,57,0,0,2612, + 2614,5,87,0,0,2613,2615,3,40,20,0,2614,2613,1,0,0,0,2614,2615,1, + 0,0,0,2615,2616,1,0,0,0,2616,2617,5,123,0,0,2617,2630,1,0,0,0,2618, + 2619,3,22,11,0,2619,2621,5,87,0,0,2620,2622,3,40,20,0,2621,2620, + 1,0,0,0,2621,2622,1,0,0,0,2622,2623,1,0,0,0,2623,2624,5,48,0,0,2624, + 2630,1,0,0,0,2625,2626,3,28,14,0,2626,2627,5,87,0,0,2627,2628,5, + 48,0,0,2628,2630,1,0,0,0,2629,2582,1,0,0,0,2629,2589,1,0,0,0,2629, + 2596,1,0,0,0,2629,2603,1,0,0,0,2629,2609,1,0,0,0,2629,2618,1,0,0, + 0,2629,2625,1,0,0,0,2630,425,1,0,0,0,2631,2633,3,390,195,0,2632, + 2634,3,428,214,0,2633,2632,1,0,0,0,2633,2634,1,0,0,0,2634,2640,1, + 0,0,0,2635,2637,3,58,29,0,2636,2638,3,428,214,0,2637,2636,1,0,0, + 0,2637,2638,1,0,0,0,2638,2640,1,0,0,0,2639,2631,1,0,0,0,2639,2635, + 1,0,0,0,2640,427,1,0,0,0,2641,2643,5,102,0,0,2642,2644,3,428,214, + 0,2643,2642,1,0,0,0,2643,2644,1,0,0,0,2644,2650,1,0,0,0,2645,2647, + 5,103,0,0,2646,2648,3,428,214,0,2647,2646,1,0,0,0,2647,2648,1,0, + 0,0,2648,2650,1,0,0,0,2649,2641,1,0,0,0,2649,2645,1,0,0,0,2650,429, + 1,0,0,0,2651,2652,3,426,213,0,2652,2653,5,102,0,0,2653,431,1,0,0, + 0,2654,2655,3,426,213,0,2655,2656,5,103,0,0,2656,433,1,0,0,0,2657, + 2665,3,436,218,0,2658,2665,3,438,219,0,2659,2660,5,104,0,0,2660, + 2665,3,434,217,0,2661,2662,5,105,0,0,2662,2665,3,434,217,0,2663, + 2665,3,440,220,0,2664,2657,1,0,0,0,2664,2658,1,0,0,0,2664,2659,1, + 0,0,0,2664,2661,1,0,0,0,2664,2663,1,0,0,0,2665,435,1,0,0,0,2666, + 2667,5,102,0,0,2667,2668,3,434,217,0,2668,437,1,0,0,0,2669,2670, + 5,103,0,0,2670,2671,3,434,217,0,2671,439,1,0,0,0,2672,2680,3,426, + 213,0,2673,2674,5,92,0,0,2674,2680,3,434,217,0,2675,2676,5,91,0, + 0,2676,2680,3,434,217,0,2677,2680,3,442,221,0,2678,2680,3,486,243, + 0,2679,2672,1,0,0,0,2679,2673,1,0,0,0,2679,2675,1,0,0,0,2679,2677, + 1,0,0,0,2679,2678,1,0,0,0,2680,441,1,0,0,0,2681,2682,5,76,0,0,2682, + 2683,3,8,4,0,2683,2684,5,77,0,0,2684,2685,3,434,217,0,2685,2709, + 1,0,0,0,2686,2687,5,76,0,0,2687,2691,3,16,8,0,2688,2690,3,38,19, + 0,2689,2688,1,0,0,0,2690,2693,1,0,0,0,2691,2689,1,0,0,0,2691,2692, + 1,0,0,0,2692,2694,1,0,0,0,2693,2691,1,0,0,0,2694,2695,5,77,0,0,2695, + 2696,3,440,220,0,2696,2709,1,0,0,0,2697,2698,5,76,0,0,2698,2702, + 3,16,8,0,2699,2701,3,38,19,0,2700,2699,1,0,0,0,2701,2704,1,0,0,0, + 2702,2700,1,0,0,0,2702,2703,1,0,0,0,2703,2705,1,0,0,0,2704,2702, + 1,0,0,0,2705,2706,5,77,0,0,2706,2707,3,474,237,0,2707,2709,1,0,0, + 0,2708,2681,1,0,0,0,2708,2686,1,0,0,0,2708,2697,1,0,0,0,2709,443, + 1,0,0,0,2710,2711,6,222,-1,0,2711,2712,3,434,217,0,2712,2724,1,0, + 0,0,2713,2714,10,3,0,0,2714,2715,5,106,0,0,2715,2723,3,434,217,0, + 2716,2717,10,2,0,0,2717,2718,5,107,0,0,2718,2723,3,434,217,0,2719, + 2720,10,1,0,0,2720,2721,5,111,0,0,2721,2723,3,434,217,0,2722,2713, + 1,0,0,0,2722,2716,1,0,0,0,2722,2719,1,0,0,0,2723,2726,1,0,0,0,2724, + 2722,1,0,0,0,2724,2725,1,0,0,0,2725,445,1,0,0,0,2726,2724,1,0,0, + 0,2727,2728,6,223,-1,0,2728,2729,3,444,222,0,2729,2738,1,0,0,0,2730, + 2731,10,2,0,0,2731,2732,5,104,0,0,2732,2737,3,444,222,0,2733,2734, + 10,1,0,0,2734,2735,5,105,0,0,2735,2737,3,444,222,0,2736,2730,1,0, + 0,0,2736,2733,1,0,0,0,2737,2740,1,0,0,0,2738,2736,1,0,0,0,2738,2739, + 1,0,0,0,2739,447,1,0,0,0,2740,2738,1,0,0,0,2741,2742,6,224,-1,0, + 2742,2743,3,446,223,0,2743,2759,1,0,0,0,2744,2745,10,3,0,0,2745, + 2746,5,90,0,0,2746,2747,5,90,0,0,2747,2758,3,446,223,0,2748,2749, + 10,2,0,0,2749,2750,5,89,0,0,2750,2751,5,89,0,0,2751,2758,3,446,223, + 0,2752,2753,10,1,0,0,2753,2754,5,89,0,0,2754,2755,5,89,0,0,2755, + 2756,5,89,0,0,2756,2758,3,446,223,0,2757,2744,1,0,0,0,2757,2748, + 1,0,0,0,2757,2752,1,0,0,0,2758,2761,1,0,0,0,2759,2757,1,0,0,0,2759, + 2760,1,0,0,0,2760,449,1,0,0,0,2761,2759,1,0,0,0,2762,2763,6,225, + -1,0,2763,2764,3,448,224,0,2764,2785,1,0,0,0,2765,2766,10,5,0,0, + 2766,2767,5,90,0,0,2767,2784,3,448,224,0,2768,2769,10,4,0,0,2769, + 2770,5,89,0,0,2770,2784,3,448,224,0,2771,2772,10,3,0,0,2772,2773, + 5,97,0,0,2773,2784,3,448,224,0,2774,2775,10,2,0,0,2775,2776,5,98, + 0,0,2776,2784,3,448,224,0,2777,2778,10,1,0,0,2778,2781,5,43,0,0, + 2779,2782,3,16,8,0,2780,2782,3,384,192,0,2781,2779,1,0,0,0,2781, + 2780,1,0,0,0,2782,2784,1,0,0,0,2783,2765,1,0,0,0,2783,2768,1,0,0, + 0,2783,2771,1,0,0,0,2783,2774,1,0,0,0,2783,2777,1,0,0,0,2784,2787, + 1,0,0,0,2785,2783,1,0,0,0,2785,2786,1,0,0,0,2786,451,1,0,0,0,2787, + 2785,1,0,0,0,2788,2789,6,226,-1,0,2789,2790,3,450,225,0,2790,2799, + 1,0,0,0,2791,2792,10,2,0,0,2792,2793,5,96,0,0,2793,2798,3,450,225, + 0,2794,2795,10,1,0,0,2795,2796,5,99,0,0,2796,2798,3,450,225,0,2797, + 2791,1,0,0,0,2797,2794,1,0,0,0,2798,2801,1,0,0,0,2799,2797,1,0,0, + 0,2799,2800,1,0,0,0,2800,453,1,0,0,0,2801,2799,1,0,0,0,2802,2803, + 6,227,-1,0,2803,2804,3,452,226,0,2804,2810,1,0,0,0,2805,2806,10, + 1,0,0,2806,2807,5,108,0,0,2807,2809,3,452,226,0,2808,2805,1,0,0, + 0,2809,2812,1,0,0,0,2810,2808,1,0,0,0,2810,2811,1,0,0,0,2811,455, + 1,0,0,0,2812,2810,1,0,0,0,2813,2814,6,228,-1,0,2814,2815,3,454,227, + 0,2815,2821,1,0,0,0,2816,2817,10,1,0,0,2817,2818,5,110,0,0,2818, + 2820,3,454,227,0,2819,2816,1,0,0,0,2820,2823,1,0,0,0,2821,2819,1, + 0,0,0,2821,2822,1,0,0,0,2822,457,1,0,0,0,2823,2821,1,0,0,0,2824, + 2825,6,229,-1,0,2825,2826,3,456,228,0,2826,2832,1,0,0,0,2827,2828, + 10,1,0,0,2828,2829,5,109,0,0,2829,2831,3,456,228,0,2830,2827,1,0, + 0,0,2831,2834,1,0,0,0,2832,2830,1,0,0,0,2832,2833,1,0,0,0,2833,459, + 1,0,0,0,2834,2832,1,0,0,0,2835,2836,6,230,-1,0,2836,2837,3,458,229, + 0,2837,2843,1,0,0,0,2838,2839,10,1,0,0,2839,2840,5,100,0,0,2840, + 2842,3,458,229,0,2841,2838,1,0,0,0,2842,2845,1,0,0,0,2843,2841,1, + 0,0,0,2843,2844,1,0,0,0,2844,461,1,0,0,0,2845,2843,1,0,0,0,2846, + 2847,6,231,-1,0,2847,2848,3,460,230,0,2848,2854,1,0,0,0,2849,2850, + 10,1,0,0,2850,2851,5,101,0,0,2851,2853,3,460,230,0,2852,2849,1,0, + 0,0,2853,2856,1,0,0,0,2854,2852,1,0,0,0,2854,2855,1,0,0,0,2855,463, + 1,0,0,0,2856,2854,1,0,0,0,2857,2871,3,462,231,0,2858,2859,3,462, + 231,0,2859,2860,5,93,0,0,2860,2861,3,388,194,0,2861,2862,5,94,0, + 0,2862,2863,3,464,232,0,2863,2871,1,0,0,0,2864,2865,3,462,231,0, + 2865,2866,5,93,0,0,2866,2867,3,388,194,0,2867,2868,5,94,0,0,2868, + 2869,3,474,237,0,2869,2871,1,0,0,0,2870,2857,1,0,0,0,2870,2858,1, + 0,0,0,2870,2864,1,0,0,0,2871,465,1,0,0,0,2872,2875,3,464,232,0,2873, + 2875,3,468,234,0,2874,2872,1,0,0,0,2874,2873,1,0,0,0,2875,467,1, + 0,0,0,2876,2877,3,470,235,0,2877,2878,3,472,236,0,2878,2879,3,388, + 194,0,2879,469,1,0,0,0,2880,2884,3,58,29,0,2881,2884,3,418,209,0, + 2882,2884,3,416,208,0,2883,2880,1,0,0,0,2883,2881,1,0,0,0,2883,2882, + 1,0,0,0,2884,471,1,0,0,0,2885,2886,7,5,0,0,2886,473,1,0,0,0,2887, + 2888,3,476,238,0,2888,2889,5,95,0,0,2889,2890,3,484,242,0,2890,475, + 1,0,0,0,2891,2893,5,76,0,0,2892,2894,3,478,239,0,2893,2892,1,0,0, + 0,2893,2894,1,0,0,0,2894,2895,1,0,0,0,2895,2898,5,77,0,0,2896,2898, + 5,123,0,0,2897,2891,1,0,0,0,2897,2896,1,0,0,0,2898,477,1,0,0,0,2899, + 2904,3,480,240,0,2900,2901,5,83,0,0,2901,2903,3,480,240,0,2902,2900, + 1,0,0,0,2903,2906,1,0,0,0,2904,2902,1,0,0,0,2904,2905,1,0,0,0,2905, + 2916,1,0,0,0,2906,2904,1,0,0,0,2907,2912,5,123,0,0,2908,2909,5,83, + 0,0,2909,2911,5,123,0,0,2910,2908,1,0,0,0,2911,2914,1,0,0,0,2912, + 2910,1,0,0,0,2912,2913,1,0,0,0,2913,2916,1,0,0,0,2914,2912,1,0,0, + 0,2915,2899,1,0,0,0,2915,2907,1,0,0,0,2916,479,1,0,0,0,2917,2919, + 3,164,82,0,2918,2917,1,0,0,0,2919,2922,1,0,0,0,2920,2918,1,0,0,0, + 2920,2921,1,0,0,0,2921,2923,1,0,0,0,2922,2920,1,0,0,0,2923,2924, + 3,482,241,0,2924,2925,3,124,62,0,2925,2928,1,0,0,0,2926,2928,3,162, + 81,0,2927,2920,1,0,0,0,2927,2926,1,0,0,0,2928,481,1,0,0,0,2929,2932, + 3,128,64,0,2930,2932,5,15,0,0,2931,2929,1,0,0,0,2931,2930,1,0,0, + 0,2932,483,1,0,0,0,2933,2936,3,388,194,0,2934,2936,3,276,138,0,2935, + 2933,1,0,0,0,2935,2934,1,0,0,0,2936,485,1,0,0,0,2937,2938,5,58,0, + 0,2938,2939,5,76,0,0,2939,2940,3,388,194,0,2940,2941,5,77,0,0,2941, + 2942,3,316,158,0,2942,487,1,0,0,0,2943,2944,3,388,194,0,2944,489, + 1,0,0,0,360,502,507,511,520,526,531,534,539,544,549,552,557,562, + 569,574,581,586,588,595,609,614,622,629,635,640,650,653,667,672, + 677,682,688,693,698,703,708,713,722,726,729,734,740,746,754,763, + 774,803,808,812,820,827,836,850,853,865,868,884,889,896,901,907, + 910,913,916,930,941,955,964,971,980,987,992,1007,1014,1020,1024, + 1028,1032,1036,1041,1048,1051,1055,1058,1064,1069,1072,1076,1080, + 1086,1091,1093,1102,1109,1125,1131,1134,1139,1143,1150,1153,1157, + 1162,1168,1177,1183,1190,1195,1202,1210,1220,1225,1229,1239,1244, + 1252,1255,1262,1265,1273,1276,1281,1286,1292,1296,1301,1306,1311, + 1317,1323,1326,1329,1338,1344,1350,1353,1356,1364,1370,1376,1380, + 1386,1395,1401,1408,1413,1420,1432,1439,1444,1452,1457,1463,1466, + 1469,1482,1493,1500,1510,1515,1526,1531,1544,1549,1561,1571,1576, + 1584,1587,1594,1602,1608,1617,1627,1631,1634,1643,1657,1660,1669, + 1674,1682,1688,1692,1697,1702,1706,1717,1724,1739,1761,1789,1804, + 1813,1821,1825,1834,1843,1854,1858,1884,1888,1893,1897,1901,1909, + 1913,1917,1924,1933,1954,1960,1966,1991,1996,2002,2014,2025,2035, + 2038,2043,2052,2057,2061,2073,2077,2081,2085,2089,2095,2101,2105, + 2111,2117,2123,2129,2137,2144,2151,2156,2160,2165,2170,2174,2179, + 2184,2188,2193,2198,2202,2207,2212,2216,2223,2228,2232,2237,2241, + 2246,2250,2255,2259,2264,2268,2275,2279,2284,2288,2294,2296,2301, + 2306,2312,2316,2321,2325,2329,2333,2335,2342,2353,2364,2372,2383, + 2387,2392,2396,2401,2409,2415,2419,2423,2427,2433,2439,2441,2453, + 2459,2465,2487,2502,2507,2514,2519,2526,2531,2538,2543,2550,2555, + 2563,2568,2572,2579,2585,2592,2599,2606,2614,2621,2629,2633,2637, + 2639,2643,2647,2649,2664,2679,2691,2702,2708,2722,2724,2736,2738, + 2757,2759,2781,2783,2785,2797,2799,2810,2821,2832,2843,2854,2870, + 2874,2883,2893,2897,2904,2912,2915,2920,2927,2931,2935 + ] + +class JavaParser ( Parser ): + + grammarFileName = "JavaParser.g4" + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + sharedContextCache = PredictionContextCache() + + literalNames = [ "", "'exports'", "'module'", "'non-sealed'", + "'<>'", "'open'", "'opens'", "'permits'", "'provides'", + "'record'", "'requires'", "'sealed'", "'to'", "'transitive'", + "'uses'", "'var'", "'with'", "'yield'", "'abstract'", + "'assert'", "'boolean'", "'break'", "'byte'", "'case'", + "'catch'", "'char'", "'class'", "'const'", "'continue'", + "'default'", "'do'", "'double'", "'else'", "'enum'", + "'extends'", "'final'", "'finally'", "'float'", "'for'", + "'if'", "'goto'", "'implements'", "'import'", "'instanceof'", + "'int'", "'interface'", "'long'", "'native'", "'new'", + "'package'", "'private'", "'protected'", "'public'", + "'return'", "'short'", "'static'", "'strictfp'", "'super'", + "'switch'", "'synchronized'", "'this'", "'throw'", + "'throws'", "'transient'", "'try'", "'void'", "'volatile'", + "'while'", "'_'", "", "", "", + "", "", "", "'null'", "'('", + "')'", "'{'", "'}'", "'['", "']'", "';'", "','", "'.'", + "'...'", "'@'", "'::'", "'='", "'>'", "'<'", "'!'", + "'~'", "'?'", "':'", "'->'", "'=='", "'<='", "'>='", + "'!='", "'&&'", "'||'", "'++'", "'--'", "'+'", "'-'", + "'*'", "'/'", "'&'", "'|'", "'^'", "'%'", "'+='", "'-='", + "'*='", "'/='", "'&='", "'|='", "'^='", "'%='", "'<<='", + "'>>='", "'>>>='" ] + + symbolicNames = [ "", "EXPORTS", "MODULE", "NONSEALED", "OACA", + "OPEN", "OPENS", "PERMITS", "PROVIDES", "RECORD", + "REQUIRES", "SEALED", "TO", "TRANSITIVE", "USES", + "VAR", "WITH", "YIELD", "ABSTRACT", "ASSERT", "BOOLEAN", + "BREAK", "BYTE", "CASE", "CATCH", "CHAR", "CLASS", + "CONST", "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", + "ENUM", "EXTENDS", "FINAL", "FINALLY", "FLOAT", "FOR", + "IF", "GOTO", "IMPLEMENTS", "IMPORT", "INSTANCEOF", + "INT", "INTERFACE", "LONG", "NATIVE", "NEW", "PACKAGE", + "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", "SHORT", + "STATIC", "STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", + "THIS", "THROW", "THROWS", "TRANSIENT", "TRY", "VOID", + "VOLATILE", "WHILE", "UNDER_SCORE", "IntegerLiteral", + "FloatingPointLiteral", "BooleanLiteral", "CharacterLiteral", + "StringLiteral", "TextBlock", "NullLiteral", "LPAREN", + "RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", + "SEMI", "COMMA", "DOT", "ELLIPSIS", "AT", "COLONCOLON", + "ASSIGN", "GT", "LT", "BANG", "TILDE", "QUESTION", + "COLON", "ARROW", "EQUAL", "LE", "GE", "NOTEQUAL", + "AND", "OR", "INC", "DEC", "ADD", "SUB", "MUL", "DIV", + "BITAND", "BITOR", "CARET", "MOD", "ADD_ASSIGN", "SUB_ASSIGN", + "MUL_ASSIGN", "DIV_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", + "XOR_ASSIGN", "MOD_ASSIGN", "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", + "URSHIFT_ASSIGN", "Identifier", "WS", "COMMENT", "LINE_COMMENT" ] + + RULE_start_ = 0 + RULE_literal = 1 + RULE_typeIdentifier = 2 + RULE_unqualifiedMethodIdentifier = 3 + RULE_primitiveType = 4 + RULE_numericType = 5 + RULE_integralType = 6 + RULE_floatingPointType = 7 + RULE_referenceType = 8 + RULE_coit = 9 + RULE_classOrInterfaceType = 10 + RULE_classType = 11 + RULE_interfaceType = 12 + RULE_typeVariable = 13 + RULE_arrayType = 14 + RULE_dims = 15 + RULE_typeParameter = 16 + RULE_typeParameterModifier = 17 + RULE_typeBound = 18 + RULE_additionalBound = 19 + RULE_typeArguments = 20 + RULE_typeArgumentList = 21 + RULE_typeArgument = 22 + RULE_wildcard = 23 + RULE_wildcardBounds = 24 + RULE_moduleName = 25 + RULE_packageName = 26 + RULE_typeName = 27 + RULE_packageOrTypeName = 28 + RULE_expressionName = 29 + RULE_methodName = 30 + RULE_ambiguousName = 31 + RULE_compilationUnit = 32 + RULE_ordinaryCompilationUnit = 33 + RULE_modularCompilationUnit = 34 + RULE_packageDeclaration = 35 + RULE_packageModifier = 36 + RULE_importDeclaration = 37 + RULE_singleTypeImportDeclaration = 38 + RULE_typeImportOnDemandDeclaration = 39 + RULE_singleStaticImportDeclaration = 40 + RULE_staticImportOnDemandDeclaration = 41 + RULE_topLevelClassOrInterfaceDeclaration = 42 + RULE_moduleDeclaration = 43 + RULE_moduleDirective = 44 + RULE_requiresModifier = 45 + RULE_classDeclaration = 46 + RULE_normalClassDeclaration = 47 + RULE_classModifier = 48 + RULE_typeParameters = 49 + RULE_typeParameterList = 50 + RULE_classExtends = 51 + RULE_classImplements = 52 + RULE_interfaceTypeList = 53 + RULE_classPermits = 54 + RULE_classBody = 55 + RULE_classBodyDeclaration = 56 + RULE_classMemberDeclaration = 57 + RULE_fieldDeclaration = 58 + RULE_fieldModifier = 59 + RULE_variableDeclaratorList = 60 + RULE_variableDeclarator = 61 + RULE_variableDeclaratorId = 62 + RULE_variableInitializer = 63 + RULE_unannType = 64 + RULE_unannPrimitiveType = 65 + RULE_unannReferenceType = 66 + RULE_unannClassOrInterfaceType = 67 + RULE_uCOIT = 68 + RULE_unannClassType = 69 + RULE_unannInterfaceType = 70 + RULE_unannTypeVariable = 71 + RULE_unannArrayType = 72 + RULE_methodDeclaration = 73 + RULE_methodModifier = 74 + RULE_methodHeader = 75 + RULE_result = 76 + RULE_methodDeclarator = 77 + RULE_receiverParameter = 78 + RULE_formalParameterList = 79 + RULE_formalParameter = 80 + RULE_variableArityParameter = 81 + RULE_variableModifier = 82 + RULE_throwsT = 83 + RULE_exceptionTypeList = 84 + RULE_exceptionType = 85 + RULE_methodBody = 86 + RULE_instanceInitializer = 87 + RULE_staticInitializer = 88 + RULE_constructorDeclaration = 89 + RULE_constructorModifier = 90 + RULE_constructorDeclarator = 91 + RULE_simpleTypeName = 92 + RULE_constructorBody = 93 + RULE_explicitConstructorInvocation = 94 + RULE_enumDeclaration = 95 + RULE_enumBody = 96 + RULE_enumConstantList = 97 + RULE_enumConstant = 98 + RULE_enumConstantModifier = 99 + RULE_enumBodyDeclarations = 100 + RULE_recordDeclaration = 101 + RULE_recordHeader = 102 + RULE_recordComponentList = 103 + RULE_recordComponent = 104 + RULE_variableArityRecordComponent = 105 + RULE_recordComponentModifier = 106 + RULE_recordBody = 107 + RULE_recordBodyDeclaration = 108 + RULE_compactConstructorDeclaration = 109 + RULE_interfaceDeclaration = 110 + RULE_normalInterfaceDeclaration = 111 + RULE_interfaceModifier = 112 + RULE_interfaceExtends = 113 + RULE_interfacePermits = 114 + RULE_interfaceBody = 115 + RULE_interfaceMemberDeclaration = 116 + RULE_constantDeclaration = 117 + RULE_constantModifier = 118 + RULE_interfaceMethodDeclaration = 119 + RULE_interfaceMethodModifier = 120 + RULE_annotationInterfaceDeclaration = 121 + RULE_annotationInterfaceBody = 122 + RULE_annotationInterfaceMemberDeclaration = 123 + RULE_annotationInterfaceElementDeclaration = 124 + RULE_annotationInterfaceElementModifier = 125 + RULE_defaultValue = 126 + RULE_annotation = 127 + RULE_normalAnnotation = 128 + RULE_elementValuePairList = 129 + RULE_elementValuePair = 130 + RULE_elementValue = 131 + RULE_elementValueArrayInitializer = 132 + RULE_elementValueList = 133 + RULE_markerAnnotation = 134 + RULE_singleElementAnnotation = 135 + RULE_arrayInitializer = 136 + RULE_variableInitializerList = 137 + RULE_block = 138 + RULE_blockStatements = 139 + RULE_blockStatement = 140 + RULE_localClassOrInterfaceDeclaration = 141 + RULE_localVariableDeclaration = 142 + RULE_localVariableType = 143 + RULE_localVariableDeclarationStatement = 144 + RULE_statement = 145 + RULE_statementNoShortIf = 146 + RULE_statementWithoutTrailingSubstatement = 147 + RULE_emptyStatement_ = 148 + RULE_labeledStatement = 149 + RULE_labeledStatementNoShortIf = 150 + RULE_expressionStatement = 151 + RULE_statementExpression = 152 + RULE_ifThenStatement = 153 + RULE_ifThenElseStatement = 154 + RULE_ifThenElseStatementNoShortIf = 155 + RULE_assertStatement = 156 + RULE_switchStatement = 157 + RULE_switchBlock = 158 + RULE_switchRule = 159 + RULE_switchBlockStatementGroup = 160 + RULE_switchLabel = 161 + RULE_caseConstant = 162 + RULE_whileStatement = 163 + RULE_whileStatementNoShortIf = 164 + RULE_doStatement = 165 + RULE_forStatement = 166 + RULE_forStatementNoShortIf = 167 + RULE_basicForStatement = 168 + RULE_basicForStatementNoShortIf = 169 + RULE_forInit = 170 + RULE_forUpdate = 171 + RULE_statementExpressionList = 172 + RULE_enhancedForStatement = 173 + RULE_enhancedForStatementNoShortIf = 174 + RULE_breakStatement = 175 + RULE_continueStatement = 176 + RULE_returnStatement = 177 + RULE_throwStatement = 178 + RULE_synchronizedStatement = 179 + RULE_tryStatement = 180 + RULE_catches = 181 + RULE_catchClause = 182 + RULE_catchFormalParameter = 183 + RULE_catchType = 184 + RULE_finallyBlock = 185 + RULE_tryWithResourcesStatement = 186 + RULE_resourceSpecification = 187 + RULE_resourceList = 188 + RULE_resource = 189 + RULE_variableAccess = 190 + RULE_yieldStatement = 191 + RULE_pattern = 192 + RULE_typePattern = 193 + RULE_expression = 194 + RULE_primary = 195 + RULE_primaryNoNewArray = 196 + RULE_pNNA = 197 + RULE_classLiteral = 198 + RULE_classInstanceCreationExpression = 199 + RULE_unqualifiedClassInstanceCreationExpression = 200 + RULE_classOrInterfaceTypeToInstantiate = 201 + RULE_typeArgumentsOrDiamond = 202 + RULE_arrayCreationExpression = 203 + RULE_arrayCreationExpressionWithoutInitializer = 204 + RULE_arrayCreationExpressionWithInitializer = 205 + RULE_dimExprs = 206 + RULE_dimExpr = 207 + RULE_arrayAccess = 208 + RULE_fieldAccess = 209 + RULE_methodInvocation = 210 + RULE_argumentList = 211 + RULE_methodReference = 212 + RULE_postfixExpression = 213 + RULE_pfE = 214 + RULE_postIncrementExpression = 215 + RULE_postDecrementExpression = 216 + RULE_unaryExpression = 217 + RULE_preIncrementExpression = 218 + RULE_preDecrementExpression = 219 + RULE_unaryExpressionNotPlusMinus = 220 + RULE_castExpression = 221 + RULE_multiplicativeExpression = 222 + RULE_additiveExpression = 223 + RULE_shiftExpression = 224 + RULE_relationalExpression = 225 + RULE_equalityExpression = 226 + RULE_andExpression = 227 + RULE_exclusiveOrExpression = 228 + RULE_inclusiveOrExpression = 229 + RULE_conditionalAndExpression = 230 + RULE_conditionalOrExpression = 231 + RULE_conditionalExpression = 232 + RULE_assignmentExpression = 233 + RULE_assignment = 234 + RULE_leftHandSide = 235 + RULE_assignmentOperator = 236 + RULE_lambdaExpression = 237 + RULE_lambdaParameters = 238 + RULE_lambdaParameterList = 239 + RULE_lambdaParameter = 240 + RULE_lambdaParameterType = 241 + RULE_lambdaBody = 242 + RULE_switchExpression = 243 + RULE_constantExpression = 244 + + ruleNames = [ "start_", "literal", "typeIdentifier", "unqualifiedMethodIdentifier", + "primitiveType", "numericType", "integralType", "floatingPointType", + "referenceType", "coit", "classOrInterfaceType", "classType", + "interfaceType", "typeVariable", "arrayType", "dims", + "typeParameter", "typeParameterModifier", "typeBound", + "additionalBound", "typeArguments", "typeArgumentList", + "typeArgument", "wildcard", "wildcardBounds", "moduleName", + "packageName", "typeName", "packageOrTypeName", "expressionName", + "methodName", "ambiguousName", "compilationUnit", "ordinaryCompilationUnit", + "modularCompilationUnit", "packageDeclaration", "packageModifier", + "importDeclaration", "singleTypeImportDeclaration", "typeImportOnDemandDeclaration", + "singleStaticImportDeclaration", "staticImportOnDemandDeclaration", + "topLevelClassOrInterfaceDeclaration", "moduleDeclaration", + "moduleDirective", "requiresModifier", "classDeclaration", + "normalClassDeclaration", "classModifier", "typeParameters", + "typeParameterList", "classExtends", "classImplements", + "interfaceTypeList", "classPermits", "classBody", "classBodyDeclaration", + "classMemberDeclaration", "fieldDeclaration", "fieldModifier", + "variableDeclaratorList", "variableDeclarator", "variableDeclaratorId", + "variableInitializer", "unannType", "unannPrimitiveType", + "unannReferenceType", "unannClassOrInterfaceType", "uCOIT", + "unannClassType", "unannInterfaceType", "unannTypeVariable", + "unannArrayType", "methodDeclaration", "methodModifier", + "methodHeader", "result", "methodDeclarator", "receiverParameter", + "formalParameterList", "formalParameter", "variableArityParameter", + "variableModifier", "throwsT", "exceptionTypeList", "exceptionType", + "methodBody", "instanceInitializer", "staticInitializer", + "constructorDeclaration", "constructorModifier", "constructorDeclarator", + "simpleTypeName", "constructorBody", "explicitConstructorInvocation", + "enumDeclaration", "enumBody", "enumConstantList", "enumConstant", + "enumConstantModifier", "enumBodyDeclarations", "recordDeclaration", + "recordHeader", "recordComponentList", "recordComponent", + "variableArityRecordComponent", "recordComponentModifier", + "recordBody", "recordBodyDeclaration", "compactConstructorDeclaration", + "interfaceDeclaration", "normalInterfaceDeclaration", + "interfaceModifier", "interfaceExtends", "interfacePermits", + "interfaceBody", "interfaceMemberDeclaration", "constantDeclaration", + "constantModifier", "interfaceMethodDeclaration", "interfaceMethodModifier", + "annotationInterfaceDeclaration", "annotationInterfaceBody", + "annotationInterfaceMemberDeclaration", "annotationInterfaceElementDeclaration", + "annotationInterfaceElementModifier", "defaultValue", + "annotation", "normalAnnotation", "elementValuePairList", + "elementValuePair", "elementValue", "elementValueArrayInitializer", + "elementValueList", "markerAnnotation", "singleElementAnnotation", + "arrayInitializer", "variableInitializerList", "block", + "blockStatements", "blockStatement", "localClassOrInterfaceDeclaration", + "localVariableDeclaration", "localVariableType", "localVariableDeclarationStatement", + "statement", "statementNoShortIf", "statementWithoutTrailingSubstatement", + "emptyStatement_", "labeledStatement", "labeledStatementNoShortIf", + "expressionStatement", "statementExpression", "ifThenStatement", + "ifThenElseStatement", "ifThenElseStatementNoShortIf", + "assertStatement", "switchStatement", "switchBlock", + "switchRule", "switchBlockStatementGroup", "switchLabel", + "caseConstant", "whileStatement", "whileStatementNoShortIf", + "doStatement", "forStatement", "forStatementNoShortIf", + "basicForStatement", "basicForStatementNoShortIf", "forInit", + "forUpdate", "statementExpressionList", "enhancedForStatement", + "enhancedForStatementNoShortIf", "breakStatement", "continueStatement", + "returnStatement", "throwStatement", "synchronizedStatement", + "tryStatement", "catches", "catchClause", "catchFormalParameter", + "catchType", "finallyBlock", "tryWithResourcesStatement", + "resourceSpecification", "resourceList", "resource", + "variableAccess", "yieldStatement", "pattern", "typePattern", + "expression", "primary", "primaryNoNewArray", "pNNA", + "classLiteral", "classInstanceCreationExpression", "unqualifiedClassInstanceCreationExpression", + "classOrInterfaceTypeToInstantiate", "typeArgumentsOrDiamond", + "arrayCreationExpression", "arrayCreationExpressionWithoutInitializer", + "arrayCreationExpressionWithInitializer", "dimExprs", + "dimExpr", "arrayAccess", "fieldAccess", "methodInvocation", + "argumentList", "methodReference", "postfixExpression", + "pfE", "postIncrementExpression", "postDecrementExpression", + "unaryExpression", "preIncrementExpression", "preDecrementExpression", + "unaryExpressionNotPlusMinus", "castExpression", "multiplicativeExpression", + "additiveExpression", "shiftExpression", "relationalExpression", + "equalityExpression", "andExpression", "exclusiveOrExpression", + "inclusiveOrExpression", "conditionalAndExpression", + "conditionalOrExpression", "conditionalExpression", "assignmentExpression", + "assignment", "leftHandSide", "assignmentOperator", "lambdaExpression", + "lambdaParameters", "lambdaParameterList", "lambdaParameter", + "lambdaParameterType", "lambdaBody", "switchExpression", + "constantExpression" ] + + EOF = Token.EOF + EXPORTS=1 + MODULE=2 + NONSEALED=3 + OACA=4 + OPEN=5 + OPENS=6 + PERMITS=7 + PROVIDES=8 + RECORD=9 + REQUIRES=10 + SEALED=11 + TO=12 + TRANSITIVE=13 + USES=14 + VAR=15 + WITH=16 + YIELD=17 + ABSTRACT=18 + ASSERT=19 + BOOLEAN=20 + BREAK=21 + BYTE=22 + CASE=23 + CATCH=24 + CHAR=25 + CLASS=26 + CONST=27 + CONTINUE=28 + DEFAULT=29 + DO=30 + DOUBLE=31 + ELSE=32 + ENUM=33 + EXTENDS=34 + FINAL=35 + FINALLY=36 + FLOAT=37 + FOR=38 + IF=39 + GOTO=40 + IMPLEMENTS=41 + IMPORT=42 + INSTANCEOF=43 + INT=44 + INTERFACE=45 + LONG=46 + NATIVE=47 + NEW=48 + PACKAGE=49 + PRIVATE=50 + PROTECTED=51 + PUBLIC=52 + RETURN=53 + SHORT=54 + STATIC=55 + STRICTFP=56 + SUPER=57 + SWITCH=58 + SYNCHRONIZED=59 + THIS=60 + THROW=61 + THROWS=62 + TRANSIENT=63 + TRY=64 + VOID=65 + VOLATILE=66 + WHILE=67 + UNDER_SCORE=68 + IntegerLiteral=69 + FloatingPointLiteral=70 + BooleanLiteral=71 + CharacterLiteral=72 + StringLiteral=73 + TextBlock=74 + NullLiteral=75 + LPAREN=76 + RPAREN=77 + LBRACE=78 + RBRACE=79 + LBRACK=80 + RBRACK=81 + SEMI=82 + COMMA=83 + DOT=84 + ELLIPSIS=85 + AT=86 + COLONCOLON=87 + ASSIGN=88 + GT=89 + LT=90 + BANG=91 + TILDE=92 + QUESTION=93 + COLON=94 + ARROW=95 + EQUAL=96 + LE=97 + GE=98 + NOTEQUAL=99 + AND=100 + OR=101 + INC=102 + DEC=103 + ADD=104 + SUB=105 + MUL=106 + DIV=107 + BITAND=108 + BITOR=109 + CARET=110 + MOD=111 + ADD_ASSIGN=112 + SUB_ASSIGN=113 + MUL_ASSIGN=114 + DIV_ASSIGN=115 + AND_ASSIGN=116 + OR_ASSIGN=117 + XOR_ASSIGN=118 + MOD_ASSIGN=119 + LSHIFT_ASSIGN=120 + RSHIFT_ASSIGN=121 + URSHIFT_ASSIGN=122 + Identifier=123 + WS=124 + COMMENT=125 + LINE_COMMENT=126 + + def __init__(self, input:TokenStream, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.1") + self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) + self._predicates = None + + + + + class Start_Context(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def compilationUnit(self): + return self.getTypedRuleContext(JavaParser.CompilationUnitContext,0) + + + def EOF(self): + return self.getToken(JavaParser.EOF, 0) + + def getRuleIndex(self): + return JavaParser.RULE_start_ + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterStart_" ): + listener.enterStart_(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitStart_" ): + listener.exitStart_(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStart_" ): + return visitor.visitStart_(self) + else: + return visitor.visitChildren(self) + + + + + def start_(self): + + localctx = JavaParser.Start_Context(self, self._ctx, self.state) + self.enterRule(localctx, 0, self.RULE_start_) + try: + self.enterOuterAlt(localctx, 1) + self.state = 490 + self.compilationUnit() + self.state = 491 + self.match(JavaParser.EOF) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IntegerLiteral(self): + return self.getToken(JavaParser.IntegerLiteral, 0) + + def FloatingPointLiteral(self): + return self.getToken(JavaParser.FloatingPointLiteral, 0) + + def BooleanLiteral(self): + return self.getToken(JavaParser.BooleanLiteral, 0) + + def CharacterLiteral(self): + return self.getToken(JavaParser.CharacterLiteral, 0) + + def StringLiteral(self): + return self.getToken(JavaParser.StringLiteral, 0) + + def TextBlock(self): + return self.getToken(JavaParser.TextBlock, 0) + + def NullLiteral(self): + return self.getToken(JavaParser.NullLiteral, 0) + + def getRuleIndex(self): + return JavaParser.RULE_literal + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLiteral" ): + listener.enterLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLiteral" ): + listener.exitLiteral(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLiteral" ): + return visitor.visitLiteral(self) + else: + return visitor.visitChildren(self) + + + + + def literal(self): + + localctx = JavaParser.LiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 2, self.RULE_literal) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 493 + _la = self._input.LA(1) + if not(((((_la - 69)) & ~0x3f) == 0 and ((1 << (_la - 69)) & 127) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeIdentifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def getRuleIndex(self): + return JavaParser.RULE_typeIdentifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeIdentifier" ): + listener.enterTypeIdentifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeIdentifier" ): + listener.exitTypeIdentifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeIdentifier" ): + return visitor.visitTypeIdentifier(self) + else: + return visitor.visitChildren(self) + + + + + def typeIdentifier(self): + + localctx = JavaParser.TypeIdentifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 4, self.RULE_typeIdentifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 495 + self.match(JavaParser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnqualifiedMethodIdentifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def getRuleIndex(self): + return JavaParser.RULE_unqualifiedMethodIdentifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnqualifiedMethodIdentifier" ): + listener.enterUnqualifiedMethodIdentifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnqualifiedMethodIdentifier" ): + listener.exitUnqualifiedMethodIdentifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnqualifiedMethodIdentifier" ): + return visitor.visitUnqualifiedMethodIdentifier(self) + else: + return visitor.visitChildren(self) + + + + + def unqualifiedMethodIdentifier(self): + + localctx = JavaParser.UnqualifiedMethodIdentifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_unqualifiedMethodIdentifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 497 + self.match(JavaParser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PrimitiveTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def numericType(self): + return self.getTypedRuleContext(JavaParser.NumericTypeContext,0) + + + def BOOLEAN(self): + return self.getToken(JavaParser.BOOLEAN, 0) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_primitiveType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPrimitiveType" ): + listener.enterPrimitiveType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPrimitiveType" ): + listener.exitPrimitiveType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPrimitiveType" ): + return visitor.visitPrimitiveType(self) + else: + return visitor.visitChildren(self) + + + + + def primitiveType(self): + + localctx = JavaParser.PrimitiveTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 8, self.RULE_primitiveType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 502 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 499 + self.annotation() + self.state = 504 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 507 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [22, 25, 31, 37, 44, 46, 54]: + self.state = 505 + self.numericType() + pass + elif token in [20]: + self.state = 506 + self.match(JavaParser.BOOLEAN) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NumericTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def integralType(self): + return self.getTypedRuleContext(JavaParser.IntegralTypeContext,0) + + + def floatingPointType(self): + return self.getTypedRuleContext(JavaParser.FloatingPointTypeContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_numericType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterNumericType" ): + listener.enterNumericType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitNumericType" ): + listener.exitNumericType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNumericType" ): + return visitor.visitNumericType(self) + else: + return visitor.visitChildren(self) + + + + + def numericType(self): + + localctx = JavaParser.NumericTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 10, self.RULE_numericType) + try: + self.state = 511 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [22, 25, 44, 46, 54]: + self.enterOuterAlt(localctx, 1) + self.state = 509 + self.integralType() + pass + elif token in [31, 37]: + self.enterOuterAlt(localctx, 2) + self.state = 510 + self.floatingPointType() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class IntegralTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def BYTE(self): + return self.getToken(JavaParser.BYTE, 0) + + def SHORT(self): + return self.getToken(JavaParser.SHORT, 0) + + def INT(self): + return self.getToken(JavaParser.INT, 0) + + def LONG(self): + return self.getToken(JavaParser.LONG, 0) + + def CHAR(self): + return self.getToken(JavaParser.CHAR, 0) + + def getRuleIndex(self): + return JavaParser.RULE_integralType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterIntegralType" ): + listener.enterIntegralType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitIntegralType" ): + listener.exitIntegralType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIntegralType" ): + return visitor.visitIntegralType(self) + else: + return visitor.visitChildren(self) + + + + + def integralType(self): + + localctx = JavaParser.IntegralTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_integralType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 513 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 18102359477452800) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FloatingPointTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def FLOAT(self): + return self.getToken(JavaParser.FLOAT, 0) + + def DOUBLE(self): + return self.getToken(JavaParser.DOUBLE, 0) + + def getRuleIndex(self): + return JavaParser.RULE_floatingPointType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFloatingPointType" ): + listener.enterFloatingPointType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFloatingPointType" ): + listener.exitFloatingPointType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFloatingPointType" ): + return visitor.visitFloatingPointType(self) + else: + return visitor.visitChildren(self) + + + + + def floatingPointType(self): + + localctx = JavaParser.FloatingPointTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 14, self.RULE_floatingPointType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 515 + _la = self._input.LA(1) + if not(_la==31 or _la==37): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ReferenceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classOrInterfaceType(self): + return self.getTypedRuleContext(JavaParser.ClassOrInterfaceTypeContext,0) + + + def typeVariable(self): + return self.getTypedRuleContext(JavaParser.TypeVariableContext,0) + + + def arrayType(self): + return self.getTypedRuleContext(JavaParser.ArrayTypeContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_referenceType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterReferenceType" ): + listener.enterReferenceType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitReferenceType" ): + listener.exitReferenceType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitReferenceType" ): + return visitor.visitReferenceType(self) + else: + return visitor.visitChildren(self) + + + + + def referenceType(self): + + localctx = JavaParser.ReferenceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 16, self.RULE_referenceType) + try: + self.state = 520 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,3,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 517 + self.classOrInterfaceType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 518 + self.typeVariable() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 519 + self.arrayType() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CoitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def typeArguments(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentsContext,0) + + + def coit(self): + return self.getTypedRuleContext(JavaParser.CoitContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_coit + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCoit" ): + listener.enterCoit(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCoit" ): + listener.exitCoit(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCoit" ): + return visitor.visitCoit(self) + else: + return visitor.visitChildren(self) + + + + + def coit(self): + + localctx = JavaParser.CoitContext(self, self._ctx, self.state) + self.enterRule(localctx, 18, self.RULE_coit) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 522 + self.match(JavaParser.DOT) + self.state = 526 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 523 + self.annotation() + self.state = 528 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 529 + self.typeIdentifier() + self.state = 531 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,5,self._ctx) + if la_ == 1: + self.state = 530 + self.typeArguments() + + + self.state = 534 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,6,self._ctx) + if la_ == 1: + self.state = 533 + self.coit() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassOrInterfaceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def packageName(self): + return self.getTypedRuleContext(JavaParser.PackageNameContext,0) + + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def typeArguments(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentsContext,0) + + + def coit(self): + return self.getTypedRuleContext(JavaParser.CoitContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_classOrInterfaceType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassOrInterfaceType" ): + listener.enterClassOrInterfaceType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassOrInterfaceType" ): + listener.exitClassOrInterfaceType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassOrInterfaceType" ): + return visitor.visitClassOrInterfaceType(self) + else: + return visitor.visitChildren(self) + + + + + def classOrInterfaceType(self): + + localctx = JavaParser.ClassOrInterfaceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 20, self.RULE_classOrInterfaceType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 539 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,7,self._ctx) + if la_ == 1: + self.state = 536 + self.packageName() + self.state = 537 + self.match(JavaParser.DOT) + + + self.state = 544 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 541 + self.annotation() + self.state = 546 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 547 + self.typeIdentifier() + self.state = 549 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,9,self._ctx) + if la_ == 1: + self.state = 548 + self.typeArguments() + + + self.state = 552 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,10,self._ctx) + if la_ == 1: + self.state = 551 + self.coit() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def typeArguments(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentsContext,0) + + + def packageName(self): + return self.getTypedRuleContext(JavaParser.PackageNameContext,0) + + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def classOrInterfaceType(self): + return self.getTypedRuleContext(JavaParser.ClassOrInterfaceTypeContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_classType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassType" ): + listener.enterClassType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassType" ): + listener.exitClassType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassType" ): + return visitor.visitClassType(self) + else: + return visitor.visitChildren(self) + + + + + def classType(self): + + localctx = JavaParser.ClassTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 22, self.RULE_classType) + self._la = 0 # Token type + try: + self.state = 588 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,17,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 557 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 554 + self.annotation() + self.state = 559 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 560 + self.typeIdentifier() + self.state = 562 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 561 + self.typeArguments() + + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 564 + self.packageName() + self.state = 565 + self.match(JavaParser.DOT) + self.state = 569 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 566 + self.annotation() + self.state = 571 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 572 + self.typeIdentifier() + self.state = 574 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 573 + self.typeArguments() + + + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 576 + self.classOrInterfaceType() + self.state = 577 + self.match(JavaParser.DOT) + self.state = 581 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 578 + self.annotation() + self.state = 583 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 584 + self.typeIdentifier() + self.state = 586 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 585 + self.typeArguments() + + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classType(self): + return self.getTypedRuleContext(JavaParser.ClassTypeContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_interfaceType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInterfaceType" ): + listener.enterInterfaceType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInterfaceType" ): + listener.exitInterfaceType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceType" ): + return visitor.visitInterfaceType(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceType(self): + + localctx = JavaParser.InterfaceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 24, self.RULE_interfaceType) + try: + self.enterOuterAlt(localctx, 1) + self.state = 590 + self.classType() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeVariableContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_typeVariable + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeVariable" ): + listener.enterTypeVariable(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeVariable" ): + listener.exitTypeVariable(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeVariable" ): + return visitor.visitTypeVariable(self) + else: + return visitor.visitChildren(self) + + + + + def typeVariable(self): + + localctx = JavaParser.TypeVariableContext(self, self._ctx, self.state) + self.enterRule(localctx, 26, self.RULE_typeVariable) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 595 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 592 + self.annotation() + self.state = 597 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 598 + self.typeIdentifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrayTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def primitiveType(self): + return self.getTypedRuleContext(JavaParser.PrimitiveTypeContext,0) + + + def dims(self): + return self.getTypedRuleContext(JavaParser.DimsContext,0) + + + def classType(self): + return self.getTypedRuleContext(JavaParser.ClassTypeContext,0) + + + def typeVariable(self): + return self.getTypedRuleContext(JavaParser.TypeVariableContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_arrayType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArrayType" ): + listener.enterArrayType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArrayType" ): + listener.exitArrayType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArrayType" ): + return visitor.visitArrayType(self) + else: + return visitor.visitChildren(self) + + + + + def arrayType(self): + + localctx = JavaParser.ArrayTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 28, self.RULE_arrayType) + try: + self.state = 609 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,19,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 600 + self.primitiveType() + self.state = 601 + self.dims() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 603 + self.classType() + self.state = 604 + self.dims() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 606 + self.typeVariable() + self.state = 607 + self.dims() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DimsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACK(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.LBRACK) + else: + return self.getToken(JavaParser.LBRACK, i) + + def RBRACK(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.RBRACK) + else: + return self.getToken(JavaParser.RBRACK, i) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_dims + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterDims" ): + listener.enterDims(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitDims" ): + listener.exitDims(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDims" ): + return visitor.visitDims(self) + else: + return visitor.visitChildren(self) + + + + + def dims(self): + + localctx = JavaParser.DimsContext(self, self._ctx, self.state) + self.enterRule(localctx, 30, self.RULE_dims) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 614 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 611 + self.annotation() + self.state = 616 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 617 + self.match(JavaParser.LBRACK) + self.state = 618 + self.match(JavaParser.RBRACK) + self.state = 629 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,22,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 622 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 619 + self.annotation() + self.state = 624 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 625 + self.match(JavaParser.LBRACK) + self.state = 626 + self.match(JavaParser.RBRACK) + self.state = 631 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,22,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def typeParameterModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.TypeParameterModifierContext) + else: + return self.getTypedRuleContext(JavaParser.TypeParameterModifierContext,i) + + + def typeBound(self): + return self.getTypedRuleContext(JavaParser.TypeBoundContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_typeParameter + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeParameter" ): + listener.enterTypeParameter(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeParameter" ): + listener.exitTypeParameter(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeParameter" ): + return visitor.visitTypeParameter(self) + else: + return visitor.visitChildren(self) + + + + + def typeParameter(self): + + localctx = JavaParser.TypeParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 32, self.RULE_typeParameter) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 635 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 632 + self.typeParameterModifier() + self.state = 637 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 638 + self.typeIdentifier() + self.state = 640 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==34: + self.state = 639 + self.typeBound() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeParameterModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(JavaParser.AnnotationContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_typeParameterModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeParameterModifier" ): + listener.enterTypeParameterModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeParameterModifier" ): + listener.exitTypeParameterModifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeParameterModifier" ): + return visitor.visitTypeParameterModifier(self) + else: + return visitor.visitChildren(self) + + + + + def typeParameterModifier(self): + + localctx = JavaParser.TypeParameterModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 34, self.RULE_typeParameterModifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 642 + self.annotation() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeBoundContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXTENDS(self): + return self.getToken(JavaParser.EXTENDS, 0) + + def typeVariable(self): + return self.getTypedRuleContext(JavaParser.TypeVariableContext,0) + + + def classOrInterfaceType(self): + return self.getTypedRuleContext(JavaParser.ClassOrInterfaceTypeContext,0) + + + def additionalBound(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AdditionalBoundContext) + else: + return self.getTypedRuleContext(JavaParser.AdditionalBoundContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_typeBound + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeBound" ): + listener.enterTypeBound(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeBound" ): + listener.exitTypeBound(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeBound" ): + return visitor.visitTypeBound(self) + else: + return visitor.visitChildren(self) + + + + + def typeBound(self): + + localctx = JavaParser.TypeBoundContext(self, self._ctx, self.state) + self.enterRule(localctx, 36, self.RULE_typeBound) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 644 + self.match(JavaParser.EXTENDS) + self.state = 653 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,26,self._ctx) + if la_ == 1: + self.state = 645 + self.typeVariable() + pass + + elif la_ == 2: + self.state = 646 + self.classOrInterfaceType() + self.state = 650 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==108: + self.state = 647 + self.additionalBound() + self.state = 652 + self._errHandler.sync(self) + _la = self._input.LA(1) + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AdditionalBoundContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def BITAND(self): + return self.getToken(JavaParser.BITAND, 0) + + def interfaceType(self): + return self.getTypedRuleContext(JavaParser.InterfaceTypeContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_additionalBound + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAdditionalBound" ): + listener.enterAdditionalBound(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAdditionalBound" ): + listener.exitAdditionalBound(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAdditionalBound" ): + return visitor.visitAdditionalBound(self) + else: + return visitor.visitChildren(self) + + + + + def additionalBound(self): + + localctx = JavaParser.AdditionalBoundContext(self, self._ctx, self.state) + self.enterRule(localctx, 38, self.RULE_additionalBound) + try: + self.enterOuterAlt(localctx, 1) + self.state = 655 + self.match(JavaParser.BITAND) + self.state = 656 + self.interfaceType() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeArgumentsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LT(self): + return self.getToken(JavaParser.LT, 0) + + def typeArgumentList(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentListContext,0) + + + def GT(self): + return self.getToken(JavaParser.GT, 0) + + def getRuleIndex(self): + return JavaParser.RULE_typeArguments + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeArguments" ): + listener.enterTypeArguments(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeArguments" ): + listener.exitTypeArguments(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeArguments" ): + return visitor.visitTypeArguments(self) + else: + return visitor.visitChildren(self) + + + + + def typeArguments(self): + + localctx = JavaParser.TypeArgumentsContext(self, self._ctx, self.state) + self.enterRule(localctx, 40, self.RULE_typeArguments) + try: + self.enterOuterAlt(localctx, 1) + self.state = 658 + self.match(JavaParser.LT) + self.state = 659 + self.typeArgumentList() + self.state = 660 + self.match(JavaParser.GT) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeArgumentListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeArgument(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.TypeArgumentContext) + else: + return self.getTypedRuleContext(JavaParser.TypeArgumentContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_typeArgumentList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeArgumentList" ): + listener.enterTypeArgumentList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeArgumentList" ): + listener.exitTypeArgumentList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeArgumentList" ): + return visitor.visitTypeArgumentList(self) + else: + return visitor.visitChildren(self) + + + + + def typeArgumentList(self): + + localctx = JavaParser.TypeArgumentListContext(self, self._ctx, self.state) + self.enterRule(localctx, 42, self.RULE_typeArgumentList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 662 + self.typeArgument() + self.state = 667 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 663 + self.match(JavaParser.COMMA) + self.state = 664 + self.typeArgument() + self.state = 669 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeArgumentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def referenceType(self): + return self.getTypedRuleContext(JavaParser.ReferenceTypeContext,0) + + + def wildcard(self): + return self.getTypedRuleContext(JavaParser.WildcardContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_typeArgument + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeArgument" ): + listener.enterTypeArgument(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeArgument" ): + listener.exitTypeArgument(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeArgument" ): + return visitor.visitTypeArgument(self) + else: + return visitor.visitChildren(self) + + + + + def typeArgument(self): + + localctx = JavaParser.TypeArgumentContext(self, self._ctx, self.state) + self.enterRule(localctx, 44, self.RULE_typeArgument) + try: + self.state = 672 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,28,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 670 + self.referenceType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 671 + self.wildcard() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class WildcardContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def QUESTION(self): + return self.getToken(JavaParser.QUESTION, 0) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def wildcardBounds(self): + return self.getTypedRuleContext(JavaParser.WildcardBoundsContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_wildcard + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterWildcard" ): + listener.enterWildcard(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitWildcard" ): + listener.exitWildcard(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitWildcard" ): + return visitor.visitWildcard(self) + else: + return visitor.visitChildren(self) + + + + + def wildcard(self): + + localctx = JavaParser.WildcardContext(self, self._ctx, self.state) + self.enterRule(localctx, 46, self.RULE_wildcard) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 677 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 674 + self.annotation() + self.state = 679 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 680 + self.match(JavaParser.QUESTION) + self.state = 682 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==34 or _la==57: + self.state = 681 + self.wildcardBounds() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class WildcardBoundsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXTENDS(self): + return self.getToken(JavaParser.EXTENDS, 0) + + def referenceType(self): + return self.getTypedRuleContext(JavaParser.ReferenceTypeContext,0) + + + def SUPER(self): + return self.getToken(JavaParser.SUPER, 0) + + def getRuleIndex(self): + return JavaParser.RULE_wildcardBounds + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterWildcardBounds" ): + listener.enterWildcardBounds(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitWildcardBounds" ): + listener.exitWildcardBounds(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitWildcardBounds" ): + return visitor.visitWildcardBounds(self) + else: + return visitor.visitChildren(self) + + + + + def wildcardBounds(self): + + localctx = JavaParser.WildcardBoundsContext(self, self._ctx, self.state) + self.enterRule(localctx, 48, self.RULE_wildcardBounds) + try: + self.state = 688 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [34]: + self.enterOuterAlt(localctx, 1) + self.state = 684 + self.match(JavaParser.EXTENDS) + self.state = 685 + self.referenceType() + pass + elif token in [57]: + self.enterOuterAlt(localctx, 2) + self.state = 686 + self.match(JavaParser.SUPER) + self.state = 687 + self.referenceType() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ModuleNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def moduleName(self): + return self.getTypedRuleContext(JavaParser.ModuleNameContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_moduleName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterModuleName" ): + listener.enterModuleName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitModuleName" ): + listener.exitModuleName(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitModuleName" ): + return visitor.visitModuleName(self) + else: + return visitor.visitChildren(self) + + + + + def moduleName(self): + + localctx = JavaParser.ModuleNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 50, self.RULE_moduleName) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 690 + self.match(JavaParser.Identifier) + self.state = 693 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==84: + self.state = 691 + self.match(JavaParser.DOT) + self.state = 692 + self.moduleName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PackageNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def packageName(self): + return self.getTypedRuleContext(JavaParser.PackageNameContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_packageName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPackageName" ): + listener.enterPackageName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPackageName" ): + listener.exitPackageName(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPackageName" ): + return visitor.visitPackageName(self) + else: + return visitor.visitChildren(self) + + + + + def packageName(self): + + localctx = JavaParser.PackageNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 52, self.RULE_packageName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 695 + self.match(JavaParser.Identifier) + self.state = 698 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,33,self._ctx) + if la_ == 1: + self.state = 696 + self.match(JavaParser.DOT) + self.state = 697 + self.packageName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def packageName(self): + return self.getTypedRuleContext(JavaParser.PackageNameContext,0) + + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_typeName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeName" ): + listener.enterTypeName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeName" ): + listener.exitTypeName(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeName" ): + return visitor.visitTypeName(self) + else: + return visitor.visitChildren(self) + + + + + def typeName(self): + + localctx = JavaParser.TypeNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 54, self.RULE_typeName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 700 + self.packageName() + self.state = 703 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,34,self._ctx) + if la_ == 1: + self.state = 701 + self.match(JavaParser.DOT) + self.state = 702 + self.typeIdentifier() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PackageOrTypeNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def packageOrTypeName(self): + return self.getTypedRuleContext(JavaParser.PackageOrTypeNameContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_packageOrTypeName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPackageOrTypeName" ): + listener.enterPackageOrTypeName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPackageOrTypeName" ): + listener.exitPackageOrTypeName(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPackageOrTypeName" ): + return visitor.visitPackageOrTypeName(self) + else: + return visitor.visitChildren(self) + + + + + def packageOrTypeName(self): + + localctx = JavaParser.PackageOrTypeNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 56, self.RULE_packageOrTypeName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 705 + self.match(JavaParser.Identifier) + self.state = 708 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,35,self._ctx) + if la_ == 1: + self.state = 706 + self.match(JavaParser.DOT) + self.state = 707 + self.packageOrTypeName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExpressionNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def ambiguousName(self): + return self.getTypedRuleContext(JavaParser.AmbiguousNameContext,0) + + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def getRuleIndex(self): + return JavaParser.RULE_expressionName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExpressionName" ): + listener.enterExpressionName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExpressionName" ): + listener.exitExpressionName(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpressionName" ): + return visitor.visitExpressionName(self) + else: + return visitor.visitChildren(self) + + + + + def expressionName(self): + + localctx = JavaParser.ExpressionNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 58, self.RULE_expressionName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 713 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,36,self._ctx) + if la_ == 1: + self.state = 710 + self.ambiguousName() + self.state = 711 + self.match(JavaParser.DOT) + + + self.state = 715 + self.match(JavaParser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unqualifiedMethodIdentifier(self): + return self.getTypedRuleContext(JavaParser.UnqualifiedMethodIdentifierContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_methodName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMethodName" ): + listener.enterMethodName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMethodName" ): + listener.exitMethodName(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodName" ): + return visitor.visitMethodName(self) + else: + return visitor.visitChildren(self) + + + + + def methodName(self): + + localctx = JavaParser.MethodNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 60, self.RULE_methodName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 717 + self.unqualifiedMethodIdentifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AmbiguousNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def ambiguousName(self): + return self.getTypedRuleContext(JavaParser.AmbiguousNameContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_ambiguousName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAmbiguousName" ): + listener.enterAmbiguousName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAmbiguousName" ): + listener.exitAmbiguousName(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAmbiguousName" ): + return visitor.visitAmbiguousName(self) + else: + return visitor.visitChildren(self) + + + + + def ambiguousName(self): + + localctx = JavaParser.AmbiguousNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 62, self.RULE_ambiguousName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 719 + self.match(JavaParser.Identifier) + self.state = 722 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,37,self._ctx) + if la_ == 1: + self.state = 720 + self.match(JavaParser.DOT) + self.state = 721 + self.ambiguousName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CompilationUnitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ordinaryCompilationUnit(self): + return self.getTypedRuleContext(JavaParser.OrdinaryCompilationUnitContext,0) + + + def modularCompilationUnit(self): + return self.getTypedRuleContext(JavaParser.ModularCompilationUnitContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_compilationUnit + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCompilationUnit" ): + listener.enterCompilationUnit(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCompilationUnit" ): + listener.exitCompilationUnit(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCompilationUnit" ): + return visitor.visitCompilationUnit(self) + else: + return visitor.visitChildren(self) + + + + + def compilationUnit(self): + + localctx = JavaParser.CompilationUnitContext(self, self._ctx, self.state) + self.enterRule(localctx, 64, self.RULE_compilationUnit) + try: + self.state = 726 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,38,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 724 + self.ordinaryCompilationUnit() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 725 + self.modularCompilationUnit() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OrdinaryCompilationUnitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def packageDeclaration(self): + return self.getTypedRuleContext(JavaParser.PackageDeclarationContext,0) + + + def importDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ImportDeclarationContext) + else: + return self.getTypedRuleContext(JavaParser.ImportDeclarationContext,i) + + + def topLevelClassOrInterfaceDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.TopLevelClassOrInterfaceDeclarationContext) + else: + return self.getTypedRuleContext(JavaParser.TopLevelClassOrInterfaceDeclarationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_ordinaryCompilationUnit + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOrdinaryCompilationUnit" ): + listener.enterOrdinaryCompilationUnit(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOrdinaryCompilationUnit" ): + listener.exitOrdinaryCompilationUnit(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitOrdinaryCompilationUnit" ): + return visitor.visitOrdinaryCompilationUnit(self) + else: + return visitor.visitChildren(self) + + + + + def ordinaryCompilationUnit(self): + + localctx = JavaParser.OrdinaryCompilationUnitContext(self, self._ctx, self.state) + self.enterRule(localctx, 66, self.RULE_ordinaryCompilationUnit) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 729 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,39,self._ctx) + if la_ == 1: + self.state = 728 + self.packageDeclaration() + + + self.state = 734 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==42: + self.state = 731 + self.importDeclaration() + self.state = 736 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 740 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 116002917793925640) != 0) or _la==82 or _la==86: + self.state = 737 + self.topLevelClassOrInterfaceDeclaration() + self.state = 742 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ModularCompilationUnitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def moduleDeclaration(self): + return self.getTypedRuleContext(JavaParser.ModuleDeclarationContext,0) + + + def importDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ImportDeclarationContext) + else: + return self.getTypedRuleContext(JavaParser.ImportDeclarationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_modularCompilationUnit + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterModularCompilationUnit" ): + listener.enterModularCompilationUnit(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitModularCompilationUnit" ): + listener.exitModularCompilationUnit(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitModularCompilationUnit" ): + return visitor.visitModularCompilationUnit(self) + else: + return visitor.visitChildren(self) + + + + + def modularCompilationUnit(self): + + localctx = JavaParser.ModularCompilationUnitContext(self, self._ctx, self.state) + self.enterRule(localctx, 68, self.RULE_modularCompilationUnit) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 746 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==42: + self.state = 743 + self.importDeclaration() + self.state = 748 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 749 + self.moduleDeclaration() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PackageDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def PACKAGE(self): + return self.getToken(JavaParser.PACKAGE, 0) + + def Identifier(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.Identifier) + else: + return self.getToken(JavaParser.Identifier, i) + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def packageModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.PackageModifierContext) + else: + return self.getTypedRuleContext(JavaParser.PackageModifierContext,i) + + + def DOT(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.DOT) + else: + return self.getToken(JavaParser.DOT, i) + + def getRuleIndex(self): + return JavaParser.RULE_packageDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPackageDeclaration" ): + listener.enterPackageDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPackageDeclaration" ): + listener.exitPackageDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPackageDeclaration" ): + return visitor.visitPackageDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def packageDeclaration(self): + + localctx = JavaParser.PackageDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 70, self.RULE_packageDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 754 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 751 + self.packageModifier() + self.state = 756 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 757 + self.match(JavaParser.PACKAGE) + self.state = 758 + self.match(JavaParser.Identifier) + self.state = 763 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==84: + self.state = 759 + self.match(JavaParser.DOT) + self.state = 760 + self.match(JavaParser.Identifier) + self.state = 765 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 766 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PackageModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(JavaParser.AnnotationContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_packageModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPackageModifier" ): + listener.enterPackageModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPackageModifier" ): + listener.exitPackageModifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPackageModifier" ): + return visitor.visitPackageModifier(self) + else: + return visitor.visitChildren(self) + + + + + def packageModifier(self): + + localctx = JavaParser.PackageModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 72, self.RULE_packageModifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 768 + self.annotation() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ImportDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def singleTypeImportDeclaration(self): + return self.getTypedRuleContext(JavaParser.SingleTypeImportDeclarationContext,0) + + + def typeImportOnDemandDeclaration(self): + return self.getTypedRuleContext(JavaParser.TypeImportOnDemandDeclarationContext,0) + + + def singleStaticImportDeclaration(self): + return self.getTypedRuleContext(JavaParser.SingleStaticImportDeclarationContext,0) + + + def staticImportOnDemandDeclaration(self): + return self.getTypedRuleContext(JavaParser.StaticImportOnDemandDeclarationContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_importDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterImportDeclaration" ): + listener.enterImportDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitImportDeclaration" ): + listener.exitImportDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitImportDeclaration" ): + return visitor.visitImportDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def importDeclaration(self): + + localctx = JavaParser.ImportDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 74, self.RULE_importDeclaration) + try: + self.state = 774 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,45,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 770 + self.singleTypeImportDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 771 + self.typeImportOnDemandDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 772 + self.singleStaticImportDeclaration() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 773 + self.staticImportOnDemandDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SingleTypeImportDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPORT(self): + return self.getToken(JavaParser.IMPORT, 0) + + def typeName(self): + return self.getTypedRuleContext(JavaParser.TypeNameContext,0) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_singleTypeImportDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSingleTypeImportDeclaration" ): + listener.enterSingleTypeImportDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSingleTypeImportDeclaration" ): + listener.exitSingleTypeImportDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSingleTypeImportDeclaration" ): + return visitor.visitSingleTypeImportDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def singleTypeImportDeclaration(self): + + localctx = JavaParser.SingleTypeImportDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 76, self.RULE_singleTypeImportDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 776 + self.match(JavaParser.IMPORT) + self.state = 777 + self.typeName() + self.state = 778 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeImportOnDemandDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPORT(self): + return self.getToken(JavaParser.IMPORT, 0) + + def packageOrTypeName(self): + return self.getTypedRuleContext(JavaParser.PackageOrTypeNameContext,0) + + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def MUL(self): + return self.getToken(JavaParser.MUL, 0) + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_typeImportOnDemandDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeImportOnDemandDeclaration" ): + listener.enterTypeImportOnDemandDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeImportOnDemandDeclaration" ): + listener.exitTypeImportOnDemandDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeImportOnDemandDeclaration" ): + return visitor.visitTypeImportOnDemandDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def typeImportOnDemandDeclaration(self): + + localctx = JavaParser.TypeImportOnDemandDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 78, self.RULE_typeImportOnDemandDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 780 + self.match(JavaParser.IMPORT) + self.state = 781 + self.packageOrTypeName() + self.state = 782 + self.match(JavaParser.DOT) + self.state = 783 + self.match(JavaParser.MUL) + self.state = 784 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SingleStaticImportDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPORT(self): + return self.getToken(JavaParser.IMPORT, 0) + + def STATIC(self): + return self.getToken(JavaParser.STATIC, 0) + + def typeName(self): + return self.getTypedRuleContext(JavaParser.TypeNameContext,0) + + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_singleStaticImportDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSingleStaticImportDeclaration" ): + listener.enterSingleStaticImportDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSingleStaticImportDeclaration" ): + listener.exitSingleStaticImportDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSingleStaticImportDeclaration" ): + return visitor.visitSingleStaticImportDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def singleStaticImportDeclaration(self): + + localctx = JavaParser.SingleStaticImportDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 80, self.RULE_singleStaticImportDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 786 + self.match(JavaParser.IMPORT) + self.state = 787 + self.match(JavaParser.STATIC) + self.state = 788 + self.typeName() + self.state = 789 + self.match(JavaParser.DOT) + self.state = 790 + self.match(JavaParser.Identifier) + self.state = 791 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StaticImportOnDemandDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPORT(self): + return self.getToken(JavaParser.IMPORT, 0) + + def STATIC(self): + return self.getToken(JavaParser.STATIC, 0) + + def typeName(self): + return self.getTypedRuleContext(JavaParser.TypeNameContext,0) + + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def MUL(self): + return self.getToken(JavaParser.MUL, 0) + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_staticImportOnDemandDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterStaticImportOnDemandDeclaration" ): + listener.enterStaticImportOnDemandDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitStaticImportOnDemandDeclaration" ): + listener.exitStaticImportOnDemandDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStaticImportOnDemandDeclaration" ): + return visitor.visitStaticImportOnDemandDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def staticImportOnDemandDeclaration(self): + + localctx = JavaParser.StaticImportOnDemandDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 82, self.RULE_staticImportOnDemandDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 793 + self.match(JavaParser.IMPORT) + self.state = 794 + self.match(JavaParser.STATIC) + self.state = 795 + self.typeName() + self.state = 796 + self.match(JavaParser.DOT) + self.state = 797 + self.match(JavaParser.MUL) + self.state = 798 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TopLevelClassOrInterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classDeclaration(self): + return self.getTypedRuleContext(JavaParser.ClassDeclarationContext,0) + + + def interfaceDeclaration(self): + return self.getTypedRuleContext(JavaParser.InterfaceDeclarationContext,0) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_topLevelClassOrInterfaceDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTopLevelClassOrInterfaceDeclaration" ): + listener.enterTopLevelClassOrInterfaceDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTopLevelClassOrInterfaceDeclaration" ): + listener.exitTopLevelClassOrInterfaceDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTopLevelClassOrInterfaceDeclaration" ): + return visitor.visitTopLevelClassOrInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def topLevelClassOrInterfaceDeclaration(self): + + localctx = JavaParser.TopLevelClassOrInterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 84, self.RULE_topLevelClassOrInterfaceDeclaration) + try: + self.state = 803 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,46,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 800 + self.classDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 801 + self.interfaceDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 802 + self.match(JavaParser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ModuleDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def MODULE(self): + return self.getToken(JavaParser.MODULE, 0) + + def Identifier(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.Identifier) + else: + return self.getToken(JavaParser.Identifier, i) + + def LBRACE(self): + return self.getToken(JavaParser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(JavaParser.RBRACE, 0) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def OPEN(self): + return self.getToken(JavaParser.OPEN, 0) + + def DOT(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.DOT) + else: + return self.getToken(JavaParser.DOT, i) + + def moduleDirective(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ModuleDirectiveContext) + else: + return self.getTypedRuleContext(JavaParser.ModuleDirectiveContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_moduleDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterModuleDeclaration" ): + listener.enterModuleDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitModuleDeclaration" ): + listener.exitModuleDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitModuleDeclaration" ): + return visitor.visitModuleDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def moduleDeclaration(self): + + localctx = JavaParser.ModuleDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 86, self.RULE_moduleDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 808 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 805 + self.annotation() + self.state = 810 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 812 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==5: + self.state = 811 + self.match(JavaParser.OPEN) + + + self.state = 814 + self.match(JavaParser.MODULE) + self.state = 815 + self.match(JavaParser.Identifier) + self.state = 820 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==84: + self.state = 816 + self.match(JavaParser.DOT) + self.state = 817 + self.match(JavaParser.Identifier) + self.state = 822 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 823 + self.match(JavaParser.LBRACE) + self.state = 827 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 17730) != 0): + self.state = 824 + self.moduleDirective() + self.state = 829 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 830 + self.match(JavaParser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ModuleDirectiveContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def REQUIRES(self): + return self.getToken(JavaParser.REQUIRES, 0) + + def moduleName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ModuleNameContext) + else: + return self.getTypedRuleContext(JavaParser.ModuleNameContext,i) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def requiresModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.RequiresModifierContext) + else: + return self.getTypedRuleContext(JavaParser.RequiresModifierContext,i) + + + def EXPORTS(self): + return self.getToken(JavaParser.EXPORTS, 0) + + def packageName(self): + return self.getTypedRuleContext(JavaParser.PackageNameContext,0) + + + def TO(self): + return self.getToken(JavaParser.TO, 0) + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def OPENS(self): + return self.getToken(JavaParser.OPENS, 0) + + def USES(self): + return self.getToken(JavaParser.USES, 0) + + def typeName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.TypeNameContext) + else: + return self.getTypedRuleContext(JavaParser.TypeNameContext,i) + + + def PROVIDES(self): + return self.getToken(JavaParser.PROVIDES, 0) + + def WITH(self): + return self.getToken(JavaParser.WITH, 0) + + def getRuleIndex(self): + return JavaParser.RULE_moduleDirective + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterModuleDirective" ): + listener.enterModuleDirective(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitModuleDirective" ): + listener.exitModuleDirective(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitModuleDirective" ): + return visitor.visitModuleDirective(self) + else: + return visitor.visitChildren(self) + + + + + def moduleDirective(self): + + localctx = JavaParser.ModuleDirectiveContext(self, self._ctx, self.state) + self.enterRule(localctx, 88, self.RULE_moduleDirective) + self._la = 0 # Token type + try: + self.state = 889 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [10]: + self.enterOuterAlt(localctx, 1) + self.state = 832 + self.match(JavaParser.REQUIRES) + self.state = 836 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==13 or _la==55: + self.state = 833 + self.requiresModifier() + self.state = 838 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 839 + self.moduleName() + self.state = 840 + self.match(JavaParser.SEMI) + pass + elif token in [1]: + self.enterOuterAlt(localctx, 2) + self.state = 842 + self.match(JavaParser.EXPORTS) + self.state = 843 + self.packageName() + self.state = 853 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==12: + self.state = 844 + self.match(JavaParser.TO) + self.state = 845 + self.moduleName() + self.state = 850 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 846 + self.match(JavaParser.COMMA) + self.state = 847 + self.moduleName() + self.state = 852 + self._errHandler.sync(self) + _la = self._input.LA(1) + + + + self.state = 855 + self.match(JavaParser.SEMI) + pass + elif token in [6]: + self.enterOuterAlt(localctx, 3) + self.state = 857 + self.match(JavaParser.OPENS) + self.state = 858 + self.packageName() + self.state = 868 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==12: + self.state = 859 + self.match(JavaParser.TO) + self.state = 860 + self.moduleName() + self.state = 865 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 861 + self.match(JavaParser.COMMA) + self.state = 862 + self.moduleName() + self.state = 867 + self._errHandler.sync(self) + _la = self._input.LA(1) + + + + self.state = 870 + self.match(JavaParser.SEMI) + pass + elif token in [14]: + self.enterOuterAlt(localctx, 4) + self.state = 872 + self.match(JavaParser.USES) + self.state = 873 + self.typeName() + self.state = 874 + self.match(JavaParser.SEMI) + pass + elif token in [8]: + self.enterOuterAlt(localctx, 5) + self.state = 876 + self.match(JavaParser.PROVIDES) + self.state = 877 + self.typeName() + self.state = 878 + self.match(JavaParser.WITH) + self.state = 879 + self.typeName() + self.state = 884 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 880 + self.match(JavaParser.COMMA) + self.state = 881 + self.typeName() + self.state = 886 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 887 + self.match(JavaParser.SEMI) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RequiresModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def TRANSITIVE(self): + return self.getToken(JavaParser.TRANSITIVE, 0) + + def STATIC(self): + return self.getToken(JavaParser.STATIC, 0) + + def getRuleIndex(self): + return JavaParser.RULE_requiresModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterRequiresModifier" ): + listener.enterRequiresModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitRequiresModifier" ): + listener.exitRequiresModifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRequiresModifier" ): + return visitor.visitRequiresModifier(self) + else: + return visitor.visitChildren(self) + + + + + def requiresModifier(self): + + localctx = JavaParser.RequiresModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 90, self.RULE_requiresModifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 891 + _la = self._input.LA(1) + if not(_la==13 or _la==55): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def normalClassDeclaration(self): + return self.getTypedRuleContext(JavaParser.NormalClassDeclarationContext,0) + + + def enumDeclaration(self): + return self.getTypedRuleContext(JavaParser.EnumDeclarationContext,0) + + + def recordDeclaration(self): + return self.getTypedRuleContext(JavaParser.RecordDeclarationContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_classDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassDeclaration" ): + listener.enterClassDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassDeclaration" ): + listener.exitClassDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassDeclaration" ): + return visitor.visitClassDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def classDeclaration(self): + + localctx = JavaParser.ClassDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 92, self.RULE_classDeclaration) + try: + self.state = 896 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,58,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 893 + self.normalClassDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 894 + self.enumDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 895 + self.recordDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NormalClassDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def CLASS(self): + return self.getToken(JavaParser.CLASS, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def classBody(self): + return self.getTypedRuleContext(JavaParser.ClassBodyContext,0) + + + def classModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ClassModifierContext) + else: + return self.getTypedRuleContext(JavaParser.ClassModifierContext,i) + + + def typeParameters(self): + return self.getTypedRuleContext(JavaParser.TypeParametersContext,0) + + + def classExtends(self): + return self.getTypedRuleContext(JavaParser.ClassExtendsContext,0) + + + def classImplements(self): + return self.getTypedRuleContext(JavaParser.ClassImplementsContext,0) + + + def classPermits(self): + return self.getTypedRuleContext(JavaParser.ClassPermitsContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_normalClassDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterNormalClassDeclaration" ): + listener.enterNormalClassDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitNormalClassDeclaration" ): + listener.exitNormalClassDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNormalClassDeclaration" ): + return visitor.visitNormalClassDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def normalClassDeclaration(self): + + localctx = JavaParser.NormalClassDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 94, self.RULE_normalClassDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 901 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 115967724764792840) != 0) or _la==86: + self.state = 898 + self.classModifier() + self.state = 903 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 904 + self.match(JavaParser.CLASS) + self.state = 905 + self.typeIdentifier() + self.state = 907 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 906 + self.typeParameters() + + + self.state = 910 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==34: + self.state = 909 + self.classExtends() + + + self.state = 913 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==41: + self.state = 912 + self.classImplements() + + + self.state = 916 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==7: + self.state = 915 + self.classPermits() + + + self.state = 918 + self.classBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(JavaParser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(JavaParser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(JavaParser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(JavaParser.PRIVATE, 0) + + def ABSTRACT(self): + return self.getToken(JavaParser.ABSTRACT, 0) + + def STATIC(self): + return self.getToken(JavaParser.STATIC, 0) + + def FINAL(self): + return self.getToken(JavaParser.FINAL, 0) + + def SEALED(self): + return self.getToken(JavaParser.SEALED, 0) + + def NONSEALED(self): + return self.getToken(JavaParser.NONSEALED, 0) + + def STRICTFP(self): + return self.getToken(JavaParser.STRICTFP, 0) + + def getRuleIndex(self): + return JavaParser.RULE_classModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassModifier" ): + listener.enterClassModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassModifier" ): + listener.exitClassModifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassModifier" ): + return visitor.visitClassModifier(self) + else: + return visitor.visitChildren(self) + + + + + def classModifier(self): + + localctx = JavaParser.ClassModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 96, self.RULE_classModifier) + try: + self.state = 930 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 920 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 921 + self.match(JavaParser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 922 + self.match(JavaParser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 923 + self.match(JavaParser.PRIVATE) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 5) + self.state = 924 + self.match(JavaParser.ABSTRACT) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 6) + self.state = 925 + self.match(JavaParser.STATIC) + pass + elif token in [35]: + self.enterOuterAlt(localctx, 7) + self.state = 926 + self.match(JavaParser.FINAL) + pass + elif token in [11]: + self.enterOuterAlt(localctx, 8) + self.state = 927 + self.match(JavaParser.SEALED) + pass + elif token in [3]: + self.enterOuterAlt(localctx, 9) + self.state = 928 + self.match(JavaParser.NONSEALED) + pass + elif token in [56]: + self.enterOuterAlt(localctx, 10) + self.state = 929 + self.match(JavaParser.STRICTFP) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeParametersContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LT(self): + return self.getToken(JavaParser.LT, 0) + + def typeParameterList(self): + return self.getTypedRuleContext(JavaParser.TypeParameterListContext,0) + + + def GT(self): + return self.getToken(JavaParser.GT, 0) + + def getRuleIndex(self): + return JavaParser.RULE_typeParameters + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeParameters" ): + listener.enterTypeParameters(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeParameters" ): + listener.exitTypeParameters(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeParameters" ): + return visitor.visitTypeParameters(self) + else: + return visitor.visitChildren(self) + + + + + def typeParameters(self): + + localctx = JavaParser.TypeParametersContext(self, self._ctx, self.state) + self.enterRule(localctx, 98, self.RULE_typeParameters) + try: + self.enterOuterAlt(localctx, 1) + self.state = 932 + self.match(JavaParser.LT) + self.state = 933 + self.typeParameterList() + self.state = 934 + self.match(JavaParser.GT) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeParameterListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeParameter(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.TypeParameterContext) + else: + return self.getTypedRuleContext(JavaParser.TypeParameterContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_typeParameterList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeParameterList" ): + listener.enterTypeParameterList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeParameterList" ): + listener.exitTypeParameterList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeParameterList" ): + return visitor.visitTypeParameterList(self) + else: + return visitor.visitChildren(self) + + + + + def typeParameterList(self): + + localctx = JavaParser.TypeParameterListContext(self, self._ctx, self.state) + self.enterRule(localctx, 100, self.RULE_typeParameterList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 936 + self.typeParameter() + self.state = 941 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 937 + self.match(JavaParser.COMMA) + self.state = 938 + self.typeParameter() + self.state = 943 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassExtendsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXTENDS(self): + return self.getToken(JavaParser.EXTENDS, 0) + + def classType(self): + return self.getTypedRuleContext(JavaParser.ClassTypeContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_classExtends + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassExtends" ): + listener.enterClassExtends(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassExtends" ): + listener.exitClassExtends(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassExtends" ): + return visitor.visitClassExtends(self) + else: + return visitor.visitChildren(self) + + + + + def classExtends(self): + + localctx = JavaParser.ClassExtendsContext(self, self._ctx, self.state) + self.enterRule(localctx, 102, self.RULE_classExtends) + try: + self.enterOuterAlt(localctx, 1) + self.state = 944 + self.match(JavaParser.EXTENDS) + self.state = 945 + self.classType() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassImplementsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPLEMENTS(self): + return self.getToken(JavaParser.IMPLEMENTS, 0) + + def interfaceTypeList(self): + return self.getTypedRuleContext(JavaParser.InterfaceTypeListContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_classImplements + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassImplements" ): + listener.enterClassImplements(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassImplements" ): + listener.exitClassImplements(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassImplements" ): + return visitor.visitClassImplements(self) + else: + return visitor.visitChildren(self) + + + + + def classImplements(self): + + localctx = JavaParser.ClassImplementsContext(self, self._ctx, self.state) + self.enterRule(localctx, 104, self.RULE_classImplements) + try: + self.enterOuterAlt(localctx, 1) + self.state = 947 + self.match(JavaParser.IMPLEMENTS) + self.state = 948 + self.interfaceTypeList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceTypeListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def interfaceType(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.InterfaceTypeContext) + else: + return self.getTypedRuleContext(JavaParser.InterfaceTypeContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_interfaceTypeList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInterfaceTypeList" ): + listener.enterInterfaceTypeList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInterfaceTypeList" ): + listener.exitInterfaceTypeList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceTypeList" ): + return visitor.visitInterfaceTypeList(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceTypeList(self): + + localctx = JavaParser.InterfaceTypeListContext(self, self._ctx, self.state) + self.enterRule(localctx, 106, self.RULE_interfaceTypeList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 950 + self.interfaceType() + self.state = 955 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 951 + self.match(JavaParser.COMMA) + self.state = 952 + self.interfaceType() + self.state = 957 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassPermitsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def PERMITS(self): + return self.getToken(JavaParser.PERMITS, 0) + + def typeName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.TypeNameContext) + else: + return self.getTypedRuleContext(JavaParser.TypeNameContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_classPermits + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassPermits" ): + listener.enterClassPermits(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassPermits" ): + listener.exitClassPermits(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassPermits" ): + return visitor.visitClassPermits(self) + else: + return visitor.visitChildren(self) + + + + + def classPermits(self): + + localctx = JavaParser.ClassPermitsContext(self, self._ctx, self.state) + self.enterRule(localctx, 108, self.RULE_classPermits) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 958 + self.match(JavaParser.PERMITS) + self.state = 959 + self.typeName() + self.state = 964 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 960 + self.match(JavaParser.COMMA) + self.state = 961 + self.typeName() + self.state = 966 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(JavaParser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(JavaParser.RBRACE, 0) + + def classBodyDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ClassBodyDeclarationContext) + else: + return self.getTypedRuleContext(JavaParser.ClassBodyDeclarationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_classBody + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassBody" ): + listener.enterClassBody(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassBody" ): + listener.exitClassBody(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassBody" ): + return visitor.visitClassBody(self) + else: + return visitor.visitChildren(self) + + + + + def classBody(self): + + localctx = JavaParser.ClassBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 110, self.RULE_classBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 967 + self.match(JavaParser.LBRACE) + self.state = 971 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & -8512665130204132856) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230376187502595) != 0): + self.state = 968 + self.classBodyDeclaration() + self.state = 973 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 974 + self.match(JavaParser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassBodyDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classMemberDeclaration(self): + return self.getTypedRuleContext(JavaParser.ClassMemberDeclarationContext,0) + + + def instanceInitializer(self): + return self.getTypedRuleContext(JavaParser.InstanceInitializerContext,0) + + + def staticInitializer(self): + return self.getTypedRuleContext(JavaParser.StaticInitializerContext,0) + + + def constructorDeclaration(self): + return self.getTypedRuleContext(JavaParser.ConstructorDeclarationContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_classBodyDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassBodyDeclaration" ): + listener.enterClassBodyDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassBodyDeclaration" ): + listener.exitClassBodyDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassBodyDeclaration" ): + return visitor.visitClassBodyDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def classBodyDeclaration(self): + + localctx = JavaParser.ClassBodyDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 112, self.RULE_classBodyDeclaration) + try: + self.state = 980 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,69,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 976 + self.classMemberDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 977 + self.instanceInitializer() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 978 + self.staticInitializer() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 979 + self.constructorDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassMemberDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def fieldDeclaration(self): + return self.getTypedRuleContext(JavaParser.FieldDeclarationContext,0) + + + def methodDeclaration(self): + return self.getTypedRuleContext(JavaParser.MethodDeclarationContext,0) + + + def classDeclaration(self): + return self.getTypedRuleContext(JavaParser.ClassDeclarationContext,0) + + + def interfaceDeclaration(self): + return self.getTypedRuleContext(JavaParser.InterfaceDeclarationContext,0) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_classMemberDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassMemberDeclaration" ): + listener.enterClassMemberDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassMemberDeclaration" ): + listener.exitClassMemberDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassMemberDeclaration" ): + return visitor.visitClassMemberDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def classMemberDeclaration(self): + + localctx = JavaParser.ClassMemberDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 114, self.RULE_classMemberDeclaration) + try: + self.state = 987 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,70,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 982 + self.fieldDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 983 + self.methodDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 984 + self.classDeclaration() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 985 + self.interfaceDeclaration() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 986 + self.match(JavaParser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FieldDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(JavaParser.UnannTypeContext,0) + + + def variableDeclaratorList(self): + return self.getTypedRuleContext(JavaParser.VariableDeclaratorListContext,0) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def fieldModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.FieldModifierContext) + else: + return self.getTypedRuleContext(JavaParser.FieldModifierContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_fieldDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFieldDeclaration" ): + listener.enterFieldDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFieldDeclaration" ): + listener.exitFieldDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFieldDeclaration" ): + return visitor.visitFieldDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def fieldDeclaration(self): + + localctx = JavaParser.FieldDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 116, self.RULE_fieldDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 992 + self._errHandler.sync(self) + _la = self._input.LA(1) + while ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & 2251802230882305) != 0): + self.state = 989 + self.fieldModifier() + self.state = 994 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 995 + self.unannType() + self.state = 996 + self.variableDeclaratorList() + self.state = 997 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FieldModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(JavaParser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(JavaParser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(JavaParser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(JavaParser.PRIVATE, 0) + + def STATIC(self): + return self.getToken(JavaParser.STATIC, 0) + + def FINAL(self): + return self.getToken(JavaParser.FINAL, 0) + + def TRANSIENT(self): + return self.getToken(JavaParser.TRANSIENT, 0) + + def VOLATILE(self): + return self.getToken(JavaParser.VOLATILE, 0) + + def getRuleIndex(self): + return JavaParser.RULE_fieldModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFieldModifier" ): + listener.enterFieldModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFieldModifier" ): + listener.exitFieldModifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFieldModifier" ): + return visitor.visitFieldModifier(self) + else: + return visitor.visitChildren(self) + + + + + def fieldModifier(self): + + localctx = JavaParser.FieldModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 118, self.RULE_fieldModifier) + try: + self.state = 1007 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 999 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1000 + self.match(JavaParser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 1001 + self.match(JavaParser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 1002 + self.match(JavaParser.PRIVATE) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 5) + self.state = 1003 + self.match(JavaParser.STATIC) + pass + elif token in [35]: + self.enterOuterAlt(localctx, 6) + self.state = 1004 + self.match(JavaParser.FINAL) + pass + elif token in [63]: + self.enterOuterAlt(localctx, 7) + self.state = 1005 + self.match(JavaParser.TRANSIENT) + pass + elif token in [66]: + self.enterOuterAlt(localctx, 8) + self.state = 1006 + self.match(JavaParser.VOLATILE) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableDeclaratorListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def variableDeclarator(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.VariableDeclaratorContext) + else: + return self.getTypedRuleContext(JavaParser.VariableDeclaratorContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_variableDeclaratorList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVariableDeclaratorList" ): + listener.enterVariableDeclaratorList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVariableDeclaratorList" ): + listener.exitVariableDeclaratorList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableDeclaratorList" ): + return visitor.visitVariableDeclaratorList(self) + else: + return visitor.visitChildren(self) + + + + + def variableDeclaratorList(self): + + localctx = JavaParser.VariableDeclaratorListContext(self, self._ctx, self.state) + self.enterRule(localctx, 120, self.RULE_variableDeclaratorList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1009 + self.variableDeclarator() + self.state = 1014 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,73,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1010 + self.match(JavaParser.COMMA) + self.state = 1011 + self.variableDeclarator() + self.state = 1016 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,73,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def variableDeclaratorId(self): + return self.getTypedRuleContext(JavaParser.VariableDeclaratorIdContext,0) + + + def ASSIGN(self): + return self.getToken(JavaParser.ASSIGN, 0) + + def variableInitializer(self): + return self.getTypedRuleContext(JavaParser.VariableInitializerContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_variableDeclarator + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVariableDeclarator" ): + listener.enterVariableDeclarator(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVariableDeclarator" ): + listener.exitVariableDeclarator(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableDeclarator" ): + return visitor.visitVariableDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def variableDeclarator(self): + + localctx = JavaParser.VariableDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 122, self.RULE_variableDeclarator) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1017 + self.variableDeclaratorId() + self.state = 1020 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,74,self._ctx) + if la_ == 1: + self.state = 1018 + self.match(JavaParser.ASSIGN) + self.state = 1019 + self.variableInitializer() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableDeclaratorIdContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def dims(self): + return self.getTypedRuleContext(JavaParser.DimsContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_variableDeclaratorId + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVariableDeclaratorId" ): + listener.enterVariableDeclaratorId(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVariableDeclaratorId" ): + listener.exitVariableDeclaratorId(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableDeclaratorId" ): + return visitor.visitVariableDeclaratorId(self) + else: + return visitor.visitChildren(self) + + + + + def variableDeclaratorId(self): + + localctx = JavaParser.VariableDeclaratorIdContext(self, self._ctx, self.state) + self.enterRule(localctx, 124, self.RULE_variableDeclaratorId) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1022 + self.match(JavaParser.Identifier) + self.state = 1024 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,75,self._ctx) + if la_ == 1: + self.state = 1023 + self.dims() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def arrayInitializer(self): + return self.getTypedRuleContext(JavaParser.ArrayInitializerContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_variableInitializer + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVariableInitializer" ): + listener.enterVariableInitializer(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVariableInitializer" ): + listener.exitVariableInitializer(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableInitializer" ): + return visitor.visitVariableInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def variableInitializer(self): + + localctx = JavaParser.VariableInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 126, self.RULE_variableInitializer) + try: + self.state = 1028 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [20, 22, 25, 31, 37, 44, 46, 48, 54, 57, 58, 60, 65, 69, 70, 71, 72, 73, 74, 75, 76, 86, 91, 92, 102, 103, 104, 105, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 1026 + self.expression() + pass + elif token in [78]: + self.enterOuterAlt(localctx, 2) + self.state = 1027 + self.arrayInitializer() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannPrimitiveType(self): + return self.getTypedRuleContext(JavaParser.UnannPrimitiveTypeContext,0) + + + def unannReferenceType(self): + return self.getTypedRuleContext(JavaParser.UnannReferenceTypeContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_unannType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnannType" ): + listener.enterUnannType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnannType" ): + listener.exitUnannType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannType" ): + return visitor.visitUnannType(self) + else: + return visitor.visitChildren(self) + + + + + def unannType(self): + + localctx = JavaParser.UnannTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 128, self.RULE_unannType) + try: + self.state = 1032 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,77,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1030 + self.unannPrimitiveType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1031 + self.unannReferenceType() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannPrimitiveTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def numericType(self): + return self.getTypedRuleContext(JavaParser.NumericTypeContext,0) + + + def BOOLEAN(self): + return self.getToken(JavaParser.BOOLEAN, 0) + + def getRuleIndex(self): + return JavaParser.RULE_unannPrimitiveType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnannPrimitiveType" ): + listener.enterUnannPrimitiveType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnannPrimitiveType" ): + listener.exitUnannPrimitiveType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannPrimitiveType" ): + return visitor.visitUnannPrimitiveType(self) + else: + return visitor.visitChildren(self) + + + + + def unannPrimitiveType(self): + + localctx = JavaParser.UnannPrimitiveTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 130, self.RULE_unannPrimitiveType) + try: + self.state = 1036 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [22, 25, 31, 37, 44, 46, 54]: + self.enterOuterAlt(localctx, 1) + self.state = 1034 + self.numericType() + pass + elif token in [20]: + self.enterOuterAlt(localctx, 2) + self.state = 1035 + self.match(JavaParser.BOOLEAN) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannReferenceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannClassOrInterfaceType(self): + return self.getTypedRuleContext(JavaParser.UnannClassOrInterfaceTypeContext,0) + + + def unannTypeVariable(self): + return self.getTypedRuleContext(JavaParser.UnannTypeVariableContext,0) + + + def unannArrayType(self): + return self.getTypedRuleContext(JavaParser.UnannArrayTypeContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_unannReferenceType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnannReferenceType" ): + listener.enterUnannReferenceType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnannReferenceType" ): + listener.exitUnannReferenceType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannReferenceType" ): + return visitor.visitUnannReferenceType(self) + else: + return visitor.visitChildren(self) + + + + + def unannReferenceType(self): + + localctx = JavaParser.UnannReferenceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 132, self.RULE_unannReferenceType) + try: + self.state = 1041 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,79,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1038 + self.unannClassOrInterfaceType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1039 + self.unannTypeVariable() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1040 + self.unannArrayType() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannClassOrInterfaceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def packageName(self): + return self.getTypedRuleContext(JavaParser.PackageNameContext,0) + + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def typeArguments(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentsContext,0) + + + def uCOIT(self): + return self.getTypedRuleContext(JavaParser.UCOITContext,0) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_unannClassOrInterfaceType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnannClassOrInterfaceType" ): + listener.enterUnannClassOrInterfaceType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnannClassOrInterfaceType" ): + listener.exitUnannClassOrInterfaceType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannClassOrInterfaceType" ): + return visitor.visitUnannClassOrInterfaceType(self) + else: + return visitor.visitChildren(self) + + + + + def unannClassOrInterfaceType(self): + + localctx = JavaParser.UnannClassOrInterfaceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 134, self.RULE_unannClassOrInterfaceType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1051 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,81,self._ctx) + if la_ == 1: + self.state = 1043 + self.packageName() + self.state = 1044 + self.match(JavaParser.DOT) + self.state = 1048 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1045 + self.annotation() + self.state = 1050 + self._errHandler.sync(self) + _la = self._input.LA(1) + + + + self.state = 1053 + self.typeIdentifier() + self.state = 1055 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,82,self._ctx) + if la_ == 1: + self.state = 1054 + self.typeArguments() + + + self.state = 1058 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,83,self._ctx) + if la_ == 1: + self.state = 1057 + self.uCOIT() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UCOITContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def typeArguments(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentsContext,0) + + + def uCOIT(self): + return self.getTypedRuleContext(JavaParser.UCOITContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_uCOIT + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUCOIT" ): + listener.enterUCOIT(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUCOIT" ): + listener.exitUCOIT(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUCOIT" ): + return visitor.visitUCOIT(self) + else: + return visitor.visitChildren(self) + + + + + def uCOIT(self): + + localctx = JavaParser.UCOITContext(self, self._ctx, self.state) + self.enterRule(localctx, 136, self.RULE_uCOIT) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1060 + self.match(JavaParser.DOT) + self.state = 1064 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1061 + self.annotation() + self.state = 1066 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1067 + self.typeIdentifier() + self.state = 1069 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,85,self._ctx) + if la_ == 1: + self.state = 1068 + self.typeArguments() + + + self.state = 1072 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,86,self._ctx) + if la_ == 1: + self.state = 1071 + self.uCOIT() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannClassTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def typeArguments(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentsContext,0) + + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def packageName(self): + return self.getTypedRuleContext(JavaParser.PackageNameContext,0) + + + def unannClassOrInterfaceType(self): + return self.getTypedRuleContext(JavaParser.UnannClassOrInterfaceTypeContext,0) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_unannClassType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnannClassType" ): + listener.enterUnannClassType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnannClassType" ): + listener.exitUnannClassType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannClassType" ): + return visitor.visitUnannClassType(self) + else: + return visitor.visitChildren(self) + + + + + def unannClassType(self): + + localctx = JavaParser.UnannClassTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 138, self.RULE_unannClassType) + self._la = 0 # Token type + try: + self.state = 1093 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,91,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1074 + self.typeIdentifier() + self.state = 1076 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1075 + self.typeArguments() + + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1080 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,88,self._ctx) + if la_ == 1: + self.state = 1078 + self.packageName() + pass + + elif la_ == 2: + self.state = 1079 + self.unannClassOrInterfaceType() + pass + + + self.state = 1082 + self.match(JavaParser.DOT) + self.state = 1086 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1083 + self.annotation() + self.state = 1088 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1089 + self.typeIdentifier() + self.state = 1091 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1090 + self.typeArguments() + + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannInterfaceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannClassType(self): + return self.getTypedRuleContext(JavaParser.UnannClassTypeContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_unannInterfaceType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnannInterfaceType" ): + listener.enterUnannInterfaceType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnannInterfaceType" ): + listener.exitUnannInterfaceType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannInterfaceType" ): + return visitor.visitUnannInterfaceType(self) + else: + return visitor.visitChildren(self) + + + + + def unannInterfaceType(self): + + localctx = JavaParser.UnannInterfaceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 140, self.RULE_unannInterfaceType) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1095 + self.unannClassType() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannTypeVariableContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_unannTypeVariable + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnannTypeVariable" ): + listener.enterUnannTypeVariable(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnannTypeVariable" ): + listener.exitUnannTypeVariable(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannTypeVariable" ): + return visitor.visitUnannTypeVariable(self) + else: + return visitor.visitChildren(self) + + + + + def unannTypeVariable(self): + + localctx = JavaParser.UnannTypeVariableContext(self, self._ctx, self.state) + self.enterRule(localctx, 142, self.RULE_unannTypeVariable) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1097 + self.typeIdentifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannArrayTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def dims(self): + return self.getTypedRuleContext(JavaParser.DimsContext,0) + + + def unannPrimitiveType(self): + return self.getTypedRuleContext(JavaParser.UnannPrimitiveTypeContext,0) + + + def unannClassOrInterfaceType(self): + return self.getTypedRuleContext(JavaParser.UnannClassOrInterfaceTypeContext,0) + + + def unannTypeVariable(self): + return self.getTypedRuleContext(JavaParser.UnannTypeVariableContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_unannArrayType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnannArrayType" ): + listener.enterUnannArrayType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnannArrayType" ): + listener.exitUnannArrayType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannArrayType" ): + return visitor.visitUnannArrayType(self) + else: + return visitor.visitChildren(self) + + + + + def unannArrayType(self): + + localctx = JavaParser.UnannArrayTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 144, self.RULE_unannArrayType) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1102 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,92,self._ctx) + if la_ == 1: + self.state = 1099 + self.unannPrimitiveType() + pass + + elif la_ == 2: + self.state = 1100 + self.unannClassOrInterfaceType() + pass + + elif la_ == 3: + self.state = 1101 + self.unannTypeVariable() + pass + + + self.state = 1104 + self.dims() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def methodHeader(self): + return self.getTypedRuleContext(JavaParser.MethodHeaderContext,0) + + + def methodBody(self): + return self.getTypedRuleContext(JavaParser.MethodBodyContext,0) + + + def methodModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.MethodModifierContext) + else: + return self.getTypedRuleContext(JavaParser.MethodModifierContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_methodDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMethodDeclaration" ): + listener.enterMethodDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMethodDeclaration" ): + listener.exitMethodDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodDeclaration" ): + return visitor.visitMethodDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def methodDeclaration(self): + + localctx = JavaParser.MethodDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 146, self.RULE_methodDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1109 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 692569214556569600) != 0) or _la==86: + self.state = 1106 + self.methodModifier() + self.state = 1111 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1112 + self.methodHeader() + self.state = 1113 + self.methodBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(JavaParser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(JavaParser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(JavaParser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(JavaParser.PRIVATE, 0) + + def ABSTRACT(self): + return self.getToken(JavaParser.ABSTRACT, 0) + + def STATIC(self): + return self.getToken(JavaParser.STATIC, 0) + + def FINAL(self): + return self.getToken(JavaParser.FINAL, 0) + + def SYNCHRONIZED(self): + return self.getToken(JavaParser.SYNCHRONIZED, 0) + + def NATIVE(self): + return self.getToken(JavaParser.NATIVE, 0) + + def STRICTFP(self): + return self.getToken(JavaParser.STRICTFP, 0) + + def getRuleIndex(self): + return JavaParser.RULE_methodModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMethodModifier" ): + listener.enterMethodModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMethodModifier" ): + listener.exitMethodModifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodModifier" ): + return visitor.visitMethodModifier(self) + else: + return visitor.visitChildren(self) + + + + + def methodModifier(self): + + localctx = JavaParser.MethodModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 148, self.RULE_methodModifier) + try: + self.state = 1125 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1115 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1116 + self.match(JavaParser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 1117 + self.match(JavaParser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 1118 + self.match(JavaParser.PRIVATE) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 5) + self.state = 1119 + self.match(JavaParser.ABSTRACT) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 6) + self.state = 1120 + self.match(JavaParser.STATIC) + pass + elif token in [35]: + self.enterOuterAlt(localctx, 7) + self.state = 1121 + self.match(JavaParser.FINAL) + pass + elif token in [59]: + self.enterOuterAlt(localctx, 8) + self.state = 1122 + self.match(JavaParser.SYNCHRONIZED) + pass + elif token in [47]: + self.enterOuterAlt(localctx, 9) + self.state = 1123 + self.match(JavaParser.NATIVE) + pass + elif token in [56]: + self.enterOuterAlt(localctx, 10) + self.state = 1124 + self.match(JavaParser.STRICTFP) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodHeaderContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def result(self): + return self.getTypedRuleContext(JavaParser.ResultContext,0) + + + def methodDeclarator(self): + return self.getTypedRuleContext(JavaParser.MethodDeclaratorContext,0) + + + def typeParameters(self): + return self.getTypedRuleContext(JavaParser.TypeParametersContext,0) + + + def throwsT(self): + return self.getTypedRuleContext(JavaParser.ThrowsTContext,0) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_methodHeader + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMethodHeader" ): + listener.enterMethodHeader(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMethodHeader" ): + listener.exitMethodHeader(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodHeader" ): + return visitor.visitMethodHeader(self) + else: + return visitor.visitChildren(self) + + + + + def methodHeader(self): + + localctx = JavaParser.MethodHeaderContext(self, self._ctx, self.state) + self.enterRule(localctx, 150, self.RULE_methodHeader) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1134 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1127 + self.typeParameters() + self.state = 1131 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1128 + self.annotation() + self.state = 1133 + self._errHandler.sync(self) + _la = self._input.LA(1) + + + + self.state = 1136 + self.result() + self.state = 1137 + self.methodDeclarator() + self.state = 1139 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==62: + self.state = 1138 + self.throwsT() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ResultContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(JavaParser.UnannTypeContext,0) + + + def VOID(self): + return self.getToken(JavaParser.VOID, 0) + + def getRuleIndex(self): + return JavaParser.RULE_result + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterResult" ): + listener.enterResult(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitResult" ): + listener.exitResult(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitResult" ): + return visitor.visitResult(self) + else: + return visitor.visitChildren(self) + + + + + def result(self): + + localctx = JavaParser.ResultContext(self, self._ctx, self.state) + self.enterRule(localctx, 152, self.RULE_result) + try: + self.state = 1143 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [20, 22, 25, 31, 37, 44, 46, 54, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 1141 + self.unannType() + pass + elif token in [65]: + self.enterOuterAlt(localctx, 2) + self.state = 1142 + self.match(JavaParser.VOID) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def receiverParameter(self): + return self.getTypedRuleContext(JavaParser.ReceiverParameterContext,0) + + + def COMMA(self): + return self.getToken(JavaParser.COMMA, 0) + + def formalParameterList(self): + return self.getTypedRuleContext(JavaParser.FormalParameterListContext,0) + + + def dims(self): + return self.getTypedRuleContext(JavaParser.DimsContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_methodDeclarator + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMethodDeclarator" ): + listener.enterMethodDeclarator(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMethodDeclarator" ): + listener.exitMethodDeclarator(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodDeclarator" ): + return visitor.visitMethodDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def methodDeclarator(self): + + localctx = JavaParser.MethodDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 154, self.RULE_methodDeclarator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1145 + self.match(JavaParser.Identifier) + self.state = 1146 + self.match(JavaParser.LPAREN) + self.state = 1150 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,99,self._ctx) + if la_ == 1: + self.state = 1147 + self.receiverParameter() + self.state = 1148 + self.match(JavaParser.COMMA) + + + self.state = 1153 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 18102533424676864) != 0) or _la==86 or _la==123: + self.state = 1152 + self.formalParameterList() + + + self.state = 1155 + self.match(JavaParser.RPAREN) + self.state = 1157 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==80 or _la==86: + self.state = 1156 + self.dims() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ReceiverParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(JavaParser.UnannTypeContext,0) + + + def THIS(self): + return self.getToken(JavaParser.THIS, 0) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def getRuleIndex(self): + return JavaParser.RULE_receiverParameter + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterReceiverParameter" ): + listener.enterReceiverParameter(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitReceiverParameter" ): + listener.exitReceiverParameter(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitReceiverParameter" ): + return visitor.visitReceiverParameter(self) + else: + return visitor.visitChildren(self) + + + + + def receiverParameter(self): + + localctx = JavaParser.ReceiverParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 156, self.RULE_receiverParameter) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1162 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1159 + self.annotation() + self.state = 1164 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1165 + self.unannType() + self.state = 1168 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==123: + self.state = 1166 + self.match(JavaParser.Identifier) + self.state = 1167 + self.match(JavaParser.DOT) + + + self.state = 1170 + self.match(JavaParser.THIS) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FormalParameterListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def formalParameter(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.FormalParameterContext) + else: + return self.getTypedRuleContext(JavaParser.FormalParameterContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_formalParameterList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFormalParameterList" ): + listener.enterFormalParameterList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFormalParameterList" ): + listener.exitFormalParameterList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFormalParameterList" ): + return visitor.visitFormalParameterList(self) + else: + return visitor.visitChildren(self) + + + + + def formalParameterList(self): + + localctx = JavaParser.FormalParameterListContext(self, self._ctx, self.state) + self.enterRule(localctx, 158, self.RULE_formalParameterList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1172 + self.formalParameter() + self.state = 1177 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 1173 + self.match(JavaParser.COMMA) + self.state = 1174 + self.formalParameter() + self.state = 1179 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FormalParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(JavaParser.UnannTypeContext,0) + + + def variableDeclaratorId(self): + return self.getTypedRuleContext(JavaParser.VariableDeclaratorIdContext,0) + + + def variableModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.VariableModifierContext) + else: + return self.getTypedRuleContext(JavaParser.VariableModifierContext,i) + + + def variableArityParameter(self): + return self.getTypedRuleContext(JavaParser.VariableArityParameterContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_formalParameter + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFormalParameter" ): + listener.enterFormalParameter(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFormalParameter" ): + listener.exitFormalParameter(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFormalParameter" ): + return visitor.visitFormalParameter(self) + else: + return visitor.visitChildren(self) + + + + + def formalParameter(self): + + localctx = JavaParser.FormalParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 160, self.RULE_formalParameter) + self._la = 0 # Token type + try: + self.state = 1190 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,106,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1183 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==35 or _la==86: + self.state = 1180 + self.variableModifier() + self.state = 1185 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1186 + self.unannType() + self.state = 1187 + self.variableDeclaratorId() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1189 + self.variableArityParameter() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableArityParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(JavaParser.UnannTypeContext,0) + + + def ELLIPSIS(self): + return self.getToken(JavaParser.ELLIPSIS, 0) + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def variableModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.VariableModifierContext) + else: + return self.getTypedRuleContext(JavaParser.VariableModifierContext,i) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_variableArityParameter + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVariableArityParameter" ): + listener.enterVariableArityParameter(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVariableArityParameter" ): + listener.exitVariableArityParameter(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableArityParameter" ): + return visitor.visitVariableArityParameter(self) + else: + return visitor.visitChildren(self) + + + + + def variableArityParameter(self): + + localctx = JavaParser.VariableArityParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 162, self.RULE_variableArityParameter) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1195 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==35 or _la==86: + self.state = 1192 + self.variableModifier() + self.state = 1197 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1198 + self.unannType() + self.state = 1202 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1199 + self.annotation() + self.state = 1204 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1205 + self.match(JavaParser.ELLIPSIS) + self.state = 1206 + self.match(JavaParser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(JavaParser.AnnotationContext,0) + + + def FINAL(self): + return self.getToken(JavaParser.FINAL, 0) + + def getRuleIndex(self): + return JavaParser.RULE_variableModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVariableModifier" ): + listener.enterVariableModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVariableModifier" ): + listener.exitVariableModifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableModifier" ): + return visitor.visitVariableModifier(self) + else: + return visitor.visitChildren(self) + + + + + def variableModifier(self): + + localctx = JavaParser.VariableModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 164, self.RULE_variableModifier) + try: + self.state = 1210 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1208 + self.annotation() + pass + elif token in [35]: + self.enterOuterAlt(localctx, 2) + self.state = 1209 + self.match(JavaParser.FINAL) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ThrowsTContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def THROWS(self): + return self.getToken(JavaParser.THROWS, 0) + + def exceptionTypeList(self): + return self.getTypedRuleContext(JavaParser.ExceptionTypeListContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_throwsT + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterThrowsT" ): + listener.enterThrowsT(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitThrowsT" ): + listener.exitThrowsT(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitThrowsT" ): + return visitor.visitThrowsT(self) + else: + return visitor.visitChildren(self) + + + + + def throwsT(self): + + localctx = JavaParser.ThrowsTContext(self, self._ctx, self.state) + self.enterRule(localctx, 166, self.RULE_throwsT) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1212 + self.match(JavaParser.THROWS) + self.state = 1213 + self.exceptionTypeList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExceptionTypeListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def exceptionType(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ExceptionTypeContext) + else: + return self.getTypedRuleContext(JavaParser.ExceptionTypeContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_exceptionTypeList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExceptionTypeList" ): + listener.enterExceptionTypeList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExceptionTypeList" ): + listener.exitExceptionTypeList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExceptionTypeList" ): + return visitor.visitExceptionTypeList(self) + else: + return visitor.visitChildren(self) + + + + + def exceptionTypeList(self): + + localctx = JavaParser.ExceptionTypeListContext(self, self._ctx, self.state) + self.enterRule(localctx, 168, self.RULE_exceptionTypeList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1215 + self.exceptionType() + self.state = 1220 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 1216 + self.match(JavaParser.COMMA) + self.state = 1217 + self.exceptionType() + self.state = 1222 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExceptionTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classType(self): + return self.getTypedRuleContext(JavaParser.ClassTypeContext,0) + + + def typeVariable(self): + return self.getTypedRuleContext(JavaParser.TypeVariableContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_exceptionType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExceptionType" ): + listener.enterExceptionType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExceptionType" ): + listener.exitExceptionType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExceptionType" ): + return visitor.visitExceptionType(self) + else: + return visitor.visitChildren(self) + + + + + def exceptionType(self): + + localctx = JavaParser.ExceptionTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 170, self.RULE_exceptionType) + try: + self.state = 1225 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,111,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1223 + self.classType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1224 + self.typeVariable() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def block(self): + return self.getTypedRuleContext(JavaParser.BlockContext,0) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_methodBody + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMethodBody" ): + listener.enterMethodBody(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMethodBody" ): + listener.exitMethodBody(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodBody" ): + return visitor.visitMethodBody(self) + else: + return visitor.visitChildren(self) + + + + + def methodBody(self): + + localctx = JavaParser.MethodBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 172, self.RULE_methodBody) + try: + self.state = 1229 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [78]: + self.enterOuterAlt(localctx, 1) + self.state = 1227 + self.block() + pass + elif token in [82]: + self.enterOuterAlt(localctx, 2) + self.state = 1228 + self.match(JavaParser.SEMI) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InstanceInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def block(self): + return self.getTypedRuleContext(JavaParser.BlockContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_instanceInitializer + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInstanceInitializer" ): + listener.enterInstanceInitializer(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInstanceInitializer" ): + listener.exitInstanceInitializer(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInstanceInitializer" ): + return visitor.visitInstanceInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def instanceInitializer(self): + + localctx = JavaParser.InstanceInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 174, self.RULE_instanceInitializer) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1231 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StaticInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def STATIC(self): + return self.getToken(JavaParser.STATIC, 0) + + def block(self): + return self.getTypedRuleContext(JavaParser.BlockContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_staticInitializer + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterStaticInitializer" ): + listener.enterStaticInitializer(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitStaticInitializer" ): + listener.exitStaticInitializer(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStaticInitializer" ): + return visitor.visitStaticInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def staticInitializer(self): + + localctx = JavaParser.StaticInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 176, self.RULE_staticInitializer) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1233 + self.match(JavaParser.STATIC) + self.state = 1234 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstructorDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def constructorDeclarator(self): + return self.getTypedRuleContext(JavaParser.ConstructorDeclaratorContext,0) + + + def constructorBody(self): + return self.getTypedRuleContext(JavaParser.ConstructorBodyContext,0) + + + def constructorModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ConstructorModifierContext) + else: + return self.getTypedRuleContext(JavaParser.ConstructorModifierContext,i) + + + def throwsT(self): + return self.getTypedRuleContext(JavaParser.ThrowsTContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_constructorDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterConstructorDeclaration" ): + listener.enterConstructorDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitConstructorDeclaration" ): + listener.exitConstructorDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstructorDeclaration" ): + return visitor.visitConstructorDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def constructorDeclaration(self): + + localctx = JavaParser.ConstructorDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 178, self.RULE_constructorDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1239 + self._errHandler.sync(self) + _la = self._input.LA(1) + while ((((_la - 50)) & ~0x3f) == 0 and ((1 << (_la - 50)) & 68719476743) != 0): + self.state = 1236 + self.constructorModifier() + self.state = 1241 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1242 + self.constructorDeclarator() + self.state = 1244 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==62: + self.state = 1243 + self.throwsT() + + + self.state = 1246 + self.constructorBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstructorModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(JavaParser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(JavaParser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(JavaParser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(JavaParser.PRIVATE, 0) + + def getRuleIndex(self): + return JavaParser.RULE_constructorModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterConstructorModifier" ): + listener.enterConstructorModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitConstructorModifier" ): + listener.exitConstructorModifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstructorModifier" ): + return visitor.visitConstructorModifier(self) + else: + return visitor.visitChildren(self) + + + + + def constructorModifier(self): + + localctx = JavaParser.ConstructorModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 180, self.RULE_constructorModifier) + try: + self.state = 1252 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1248 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1249 + self.match(JavaParser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 1250 + self.match(JavaParser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 1251 + self.match(JavaParser.PRIVATE) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstructorDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def simpleTypeName(self): + return self.getTypedRuleContext(JavaParser.SimpleTypeNameContext,0) + + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def typeParameters(self): + return self.getTypedRuleContext(JavaParser.TypeParametersContext,0) + + + def receiverParameter(self): + return self.getTypedRuleContext(JavaParser.ReceiverParameterContext,0) + + + def COMMA(self): + return self.getToken(JavaParser.COMMA, 0) + + def formalParameterList(self): + return self.getTypedRuleContext(JavaParser.FormalParameterListContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_constructorDeclarator + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterConstructorDeclarator" ): + listener.enterConstructorDeclarator(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitConstructorDeclarator" ): + listener.exitConstructorDeclarator(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstructorDeclarator" ): + return visitor.visitConstructorDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def constructorDeclarator(self): + + localctx = JavaParser.ConstructorDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 182, self.RULE_constructorDeclarator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1255 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1254 + self.typeParameters() + + + self.state = 1257 + self.simpleTypeName() + self.state = 1258 + self.match(JavaParser.LPAREN) + self.state = 1262 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,117,self._ctx) + if la_ == 1: + self.state = 1259 + self.receiverParameter() + self.state = 1260 + self.match(JavaParser.COMMA) + + + self.state = 1265 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 18102533424676864) != 0) or _la==86 or _la==123: + self.state = 1264 + self.formalParameterList() + + + self.state = 1267 + self.match(JavaParser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SimpleTypeNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_simpleTypeName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSimpleTypeName" ): + listener.enterSimpleTypeName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSimpleTypeName" ): + listener.exitSimpleTypeName(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSimpleTypeName" ): + return visitor.visitSimpleTypeName(self) + else: + return visitor.visitChildren(self) + + + + + def simpleTypeName(self): + + localctx = JavaParser.SimpleTypeNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 184, self.RULE_simpleTypeName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1269 + self.typeIdentifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstructorBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(JavaParser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(JavaParser.RBRACE, 0) + + def explicitConstructorInvocation(self): + return self.getTypedRuleContext(JavaParser.ExplicitConstructorInvocationContext,0) + + + def blockStatements(self): + return self.getTypedRuleContext(JavaParser.BlockStatementsContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_constructorBody + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterConstructorBody" ): + listener.enterConstructorBody(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitConstructorBody" ): + listener.exitConstructorBody(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstructorBody" ): + return visitor.visitConstructorBody(self) + else: + return visitor.visitChildren(self) + + + + + def constructorBody(self): + + localctx = JavaParser.ConstructorBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 186, self.RULE_constructorBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1271 + self.match(JavaParser.LBRACE) + self.state = 1273 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,119,self._ctx) + if la_ == 1: + self.state = 1272 + self.explicitConstructorInvocation() + + + self.state = 1276 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4610965747420531208) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 576461576941625323) != 0): + self.state = 1275 + self.blockStatements() + + + self.state = 1278 + self.match(JavaParser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExplicitConstructorInvocationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def THIS(self): + return self.getToken(JavaParser.THIS, 0) + + def SUPER(self): + return self.getToken(JavaParser.SUPER, 0) + + def typeArguments(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentsContext,0) + + + def argumentList(self): + return self.getTypedRuleContext(JavaParser.ArgumentListContext,0) + + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def expressionName(self): + return self.getTypedRuleContext(JavaParser.ExpressionNameContext,0) + + + def primary(self): + return self.getTypedRuleContext(JavaParser.PrimaryContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_explicitConstructorInvocation + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExplicitConstructorInvocation" ): + listener.enterExplicitConstructorInvocation(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExplicitConstructorInvocation" ): + listener.exitExplicitConstructorInvocation(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExplicitConstructorInvocation" ): + return visitor.visitExplicitConstructorInvocation(self) + else: + return visitor.visitChildren(self) + + + + + def explicitConstructorInvocation(self): + + localctx = JavaParser.ExplicitConstructorInvocationContext(self, self._ctx, self.state) + self.enterRule(localctx, 188, self.RULE_explicitConstructorInvocation) + self._la = 0 # Token type + try: + self.state = 1306 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,126,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1281 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1280 + self.typeArguments() + + + self.state = 1283 + _la = self._input.LA(1) + if not(_la==57 or _la==60): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 1284 + self.match(JavaParser.LPAREN) + self.state = 1286 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1285 + self.argumentList() + + + self.state = 1288 + self.match(JavaParser.RPAREN) + self.state = 1289 + self.match(JavaParser.SEMI) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1292 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,123,self._ctx) + if la_ == 1: + self.state = 1290 + self.expressionName() + pass + + elif la_ == 2: + self.state = 1291 + self.primary() + pass + + + self.state = 1294 + self.match(JavaParser.DOT) + self.state = 1296 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1295 + self.typeArguments() + + + self.state = 1298 + self.match(JavaParser.SUPER) + self.state = 1299 + self.match(JavaParser.LPAREN) + self.state = 1301 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1300 + self.argumentList() + + + self.state = 1303 + self.match(JavaParser.RPAREN) + self.state = 1304 + self.match(JavaParser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ENUM(self): + return self.getToken(JavaParser.ENUM, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def enumBody(self): + return self.getTypedRuleContext(JavaParser.EnumBodyContext,0) + + + def classModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ClassModifierContext) + else: + return self.getTypedRuleContext(JavaParser.ClassModifierContext,i) + + + def classImplements(self): + return self.getTypedRuleContext(JavaParser.ClassImplementsContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_enumDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEnumDeclaration" ): + listener.enterEnumDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEnumDeclaration" ): + listener.exitEnumDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumDeclaration" ): + return visitor.visitEnumDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def enumDeclaration(self): + + localctx = JavaParser.EnumDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 190, self.RULE_enumDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1311 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 115967724764792840) != 0) or _la==86: + self.state = 1308 + self.classModifier() + self.state = 1313 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1314 + self.match(JavaParser.ENUM) + self.state = 1315 + self.typeIdentifier() + self.state = 1317 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==41: + self.state = 1316 + self.classImplements() + + + self.state = 1319 + self.enumBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(JavaParser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(JavaParser.RBRACE, 0) + + def enumConstantList(self): + return self.getTypedRuleContext(JavaParser.EnumConstantListContext,0) + + + def COMMA(self): + return self.getToken(JavaParser.COMMA, 0) + + def enumBodyDeclarations(self): + return self.getTypedRuleContext(JavaParser.EnumBodyDeclarationsContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_enumBody + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEnumBody" ): + listener.enterEnumBody(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEnumBody" ): + listener.exitEnumBody(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumBody" ): + return visitor.visitEnumBody(self) + else: + return visitor.visitChildren(self) + + + + + def enumBody(self): + + localctx = JavaParser.EnumBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 192, self.RULE_enumBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1321 + self.match(JavaParser.LBRACE) + self.state = 1323 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==86 or _la==123: + self.state = 1322 + self.enumConstantList() + + + self.state = 1326 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==83: + self.state = 1325 + self.match(JavaParser.COMMA) + + + self.state = 1329 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==82: + self.state = 1328 + self.enumBodyDeclarations() + + + self.state = 1331 + self.match(JavaParser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumConstantListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def enumConstant(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.EnumConstantContext) + else: + return self.getTypedRuleContext(JavaParser.EnumConstantContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_enumConstantList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEnumConstantList" ): + listener.enterEnumConstantList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEnumConstantList" ): + listener.exitEnumConstantList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumConstantList" ): + return visitor.visitEnumConstantList(self) + else: + return visitor.visitChildren(self) + + + + + def enumConstantList(self): + + localctx = JavaParser.EnumConstantListContext(self, self._ctx, self.state) + self.enterRule(localctx, 194, self.RULE_enumConstantList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1333 + self.enumConstant() + self.state = 1338 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,132,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1334 + self.match(JavaParser.COMMA) + self.state = 1335 + self.enumConstant() + self.state = 1340 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,132,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumConstantContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def enumConstantModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.EnumConstantModifierContext) + else: + return self.getTypedRuleContext(JavaParser.EnumConstantModifierContext,i) + + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def classBody(self): + return self.getTypedRuleContext(JavaParser.ClassBodyContext,0) + + + def argumentList(self): + return self.getTypedRuleContext(JavaParser.ArgumentListContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_enumConstant + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEnumConstant" ): + listener.enterEnumConstant(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEnumConstant" ): + listener.exitEnumConstant(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumConstant" ): + return visitor.visitEnumConstant(self) + else: + return visitor.visitChildren(self) + + + + + def enumConstant(self): + + localctx = JavaParser.EnumConstantContext(self, self._ctx, self.state) + self.enterRule(localctx, 196, self.RULE_enumConstant) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1344 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1341 + self.enumConstantModifier() + self.state = 1346 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1347 + self.match(JavaParser.Identifier) + self.state = 1353 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==76: + self.state = 1348 + self.match(JavaParser.LPAREN) + self.state = 1350 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1349 + self.argumentList() + + + self.state = 1352 + self.match(JavaParser.RPAREN) + + + self.state = 1356 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==78: + self.state = 1355 + self.classBody() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumConstantModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(JavaParser.AnnotationContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_enumConstantModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEnumConstantModifier" ): + listener.enterEnumConstantModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEnumConstantModifier" ): + listener.exitEnumConstantModifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumConstantModifier" ): + return visitor.visitEnumConstantModifier(self) + else: + return visitor.visitChildren(self) + + + + + def enumConstantModifier(self): + + localctx = JavaParser.EnumConstantModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 198, self.RULE_enumConstantModifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1358 + self.annotation() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumBodyDeclarationsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def classBodyDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ClassBodyDeclarationContext) + else: + return self.getTypedRuleContext(JavaParser.ClassBodyDeclarationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_enumBodyDeclarations + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEnumBodyDeclarations" ): + listener.enterEnumBodyDeclarations(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEnumBodyDeclarations" ): + listener.exitEnumBodyDeclarations(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumBodyDeclarations" ): + return visitor.visitEnumBodyDeclarations(self) + else: + return visitor.visitChildren(self) + + + + + def enumBodyDeclarations(self): + + localctx = JavaParser.EnumBodyDeclarationsContext(self, self._ctx, self.state) + self.enterRule(localctx, 200, self.RULE_enumBodyDeclarations) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1360 + self.match(JavaParser.SEMI) + self.state = 1364 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & -8512665130204132856) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230376187502595) != 0): + self.state = 1361 + self.classBodyDeclaration() + self.state = 1366 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RecordDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def RECORD(self): + return self.getToken(JavaParser.RECORD, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def recordHeader(self): + return self.getTypedRuleContext(JavaParser.RecordHeaderContext,0) + + + def recordBody(self): + return self.getTypedRuleContext(JavaParser.RecordBodyContext,0) + + + def classModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ClassModifierContext) + else: + return self.getTypedRuleContext(JavaParser.ClassModifierContext,i) + + + def typeParameters(self): + return self.getTypedRuleContext(JavaParser.TypeParametersContext,0) + + + def classImplements(self): + return self.getTypedRuleContext(JavaParser.ClassImplementsContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_recordDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterRecordDeclaration" ): + listener.enterRecordDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitRecordDeclaration" ): + listener.exitRecordDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRecordDeclaration" ): + return visitor.visitRecordDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def recordDeclaration(self): + + localctx = JavaParser.RecordDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 202, self.RULE_recordDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1370 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 115967724764792840) != 0) or _la==86: + self.state = 1367 + self.classModifier() + self.state = 1372 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1373 + self.match(JavaParser.RECORD) + self.state = 1374 + self.typeIdentifier() + self.state = 1376 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1375 + self.typeParameters() + + + self.state = 1378 + self.recordHeader() + self.state = 1380 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==41: + self.state = 1379 + self.classImplements() + + + self.state = 1382 + self.recordBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RecordHeaderContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def recordComponentList(self): + return self.getTypedRuleContext(JavaParser.RecordComponentListContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_recordHeader + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterRecordHeader" ): + listener.enterRecordHeader(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitRecordHeader" ): + listener.exitRecordHeader(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRecordHeader" ): + return visitor.visitRecordHeader(self) + else: + return visitor.visitChildren(self) + + + + + def recordHeader(self): + + localctx = JavaParser.RecordHeaderContext(self, self._ctx, self.state) + self.enterRule(localctx, 204, self.RULE_recordHeader) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1384 + self.match(JavaParser.LPAREN) + self.state = 1386 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 18102499064938496) != 0) or _la==86 or _la==123: + self.state = 1385 + self.recordComponentList() + + + self.state = 1388 + self.match(JavaParser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RecordComponentListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def recordComponent(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.RecordComponentContext) + else: + return self.getTypedRuleContext(JavaParser.RecordComponentContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_recordComponentList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterRecordComponentList" ): + listener.enterRecordComponentList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitRecordComponentList" ): + listener.exitRecordComponentList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRecordComponentList" ): + return visitor.visitRecordComponentList(self) + else: + return visitor.visitChildren(self) + + + + + def recordComponentList(self): + + localctx = JavaParser.RecordComponentListContext(self, self._ctx, self.state) + self.enterRule(localctx, 206, self.RULE_recordComponentList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1390 + self.recordComponent() + self.state = 1395 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 1391 + self.match(JavaParser.COMMA) + self.state = 1392 + self.recordComponent() + self.state = 1397 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RecordComponentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(JavaParser.UnannTypeContext,0) + + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def recordComponentModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.RecordComponentModifierContext) + else: + return self.getTypedRuleContext(JavaParser.RecordComponentModifierContext,i) + + + def variableArityRecordComponent(self): + return self.getTypedRuleContext(JavaParser.VariableArityRecordComponentContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_recordComponent + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterRecordComponent" ): + listener.enterRecordComponent(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitRecordComponent" ): + listener.exitRecordComponent(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRecordComponent" ): + return visitor.visitRecordComponent(self) + else: + return visitor.visitChildren(self) + + + + + def recordComponent(self): + + localctx = JavaParser.RecordComponentContext(self, self._ctx, self.state) + self.enterRule(localctx, 208, self.RULE_recordComponent) + self._la = 0 # Token type + try: + self.state = 1408 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,144,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1401 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1398 + self.recordComponentModifier() + self.state = 1403 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1404 + self.unannType() + self.state = 1405 + self.match(JavaParser.Identifier) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1407 + self.variableArityRecordComponent() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableArityRecordComponentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(JavaParser.UnannTypeContext,0) + + + def ELLIPSIS(self): + return self.getToken(JavaParser.ELLIPSIS, 0) + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def recordComponentModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.RecordComponentModifierContext) + else: + return self.getTypedRuleContext(JavaParser.RecordComponentModifierContext,i) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_variableArityRecordComponent + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVariableArityRecordComponent" ): + listener.enterVariableArityRecordComponent(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVariableArityRecordComponent" ): + listener.exitVariableArityRecordComponent(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableArityRecordComponent" ): + return visitor.visitVariableArityRecordComponent(self) + else: + return visitor.visitChildren(self) + + + + + def variableArityRecordComponent(self): + + localctx = JavaParser.VariableArityRecordComponentContext(self, self._ctx, self.state) + self.enterRule(localctx, 210, self.RULE_variableArityRecordComponent) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1413 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1410 + self.recordComponentModifier() + self.state = 1415 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1416 + self.unannType() + self.state = 1420 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1417 + self.annotation() + self.state = 1422 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1423 + self.match(JavaParser.ELLIPSIS) + self.state = 1424 + self.match(JavaParser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RecordComponentModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(JavaParser.AnnotationContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_recordComponentModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterRecordComponentModifier" ): + listener.enterRecordComponentModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitRecordComponentModifier" ): + listener.exitRecordComponentModifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRecordComponentModifier" ): + return visitor.visitRecordComponentModifier(self) + else: + return visitor.visitChildren(self) + + + + + def recordComponentModifier(self): + + localctx = JavaParser.RecordComponentModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 212, self.RULE_recordComponentModifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1426 + self.annotation() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RecordBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(JavaParser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(JavaParser.RBRACE, 0) + + def recordBodyDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.RecordBodyDeclarationContext) + else: + return self.getTypedRuleContext(JavaParser.RecordBodyDeclarationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_recordBody + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterRecordBody" ): + listener.enterRecordBody(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitRecordBody" ): + listener.exitRecordBody(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRecordBody" ): + return visitor.visitRecordBody(self) + else: + return visitor.visitChildren(self) + + + + + def recordBody(self): + + localctx = JavaParser.RecordBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 214, self.RULE_recordBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1428 + self.match(JavaParser.LBRACE) + self.state = 1432 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & -8512665130204132856) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230376187502595) != 0): + self.state = 1429 + self.recordBodyDeclaration() + self.state = 1434 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1435 + self.match(JavaParser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RecordBodyDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classBodyDeclaration(self): + return self.getTypedRuleContext(JavaParser.ClassBodyDeclarationContext,0) + + + def compactConstructorDeclaration(self): + return self.getTypedRuleContext(JavaParser.CompactConstructorDeclarationContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_recordBodyDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterRecordBodyDeclaration" ): + listener.enterRecordBodyDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitRecordBodyDeclaration" ): + listener.exitRecordBodyDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRecordBodyDeclaration" ): + return visitor.visitRecordBodyDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def recordBodyDeclaration(self): + + localctx = JavaParser.RecordBodyDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 216, self.RULE_recordBodyDeclaration) + try: + self.state = 1439 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,148,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1437 + self.classBodyDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1438 + self.compactConstructorDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CompactConstructorDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def simpleTypeName(self): + return self.getTypedRuleContext(JavaParser.SimpleTypeNameContext,0) + + + def constructorBody(self): + return self.getTypedRuleContext(JavaParser.ConstructorBodyContext,0) + + + def constructorModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ConstructorModifierContext) + else: + return self.getTypedRuleContext(JavaParser.ConstructorModifierContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_compactConstructorDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCompactConstructorDeclaration" ): + listener.enterCompactConstructorDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCompactConstructorDeclaration" ): + listener.exitCompactConstructorDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCompactConstructorDeclaration" ): + return visitor.visitCompactConstructorDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def compactConstructorDeclaration(self): + + localctx = JavaParser.CompactConstructorDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 218, self.RULE_compactConstructorDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1444 + self._errHandler.sync(self) + _la = self._input.LA(1) + while ((((_la - 50)) & ~0x3f) == 0 and ((1 << (_la - 50)) & 68719476743) != 0): + self.state = 1441 + self.constructorModifier() + self.state = 1446 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1447 + self.simpleTypeName() + self.state = 1448 + self.constructorBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def normalInterfaceDeclaration(self): + return self.getTypedRuleContext(JavaParser.NormalInterfaceDeclarationContext,0) + + + def annotationInterfaceDeclaration(self): + return self.getTypedRuleContext(JavaParser.AnnotationInterfaceDeclarationContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_interfaceDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInterfaceDeclaration" ): + listener.enterInterfaceDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInterfaceDeclaration" ): + listener.exitInterfaceDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceDeclaration" ): + return visitor.visitInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceDeclaration(self): + + localctx = JavaParser.InterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 220, self.RULE_interfaceDeclaration) + try: + self.state = 1452 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,150,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1450 + self.normalInterfaceDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1451 + self.annotationInterfaceDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NormalInterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def INTERFACE(self): + return self.getToken(JavaParser.INTERFACE, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def interfaceBody(self): + return self.getTypedRuleContext(JavaParser.InterfaceBodyContext,0) + + + def interfaceModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.InterfaceModifierContext) + else: + return self.getTypedRuleContext(JavaParser.InterfaceModifierContext,i) + + + def typeParameters(self): + return self.getTypedRuleContext(JavaParser.TypeParametersContext,0) + + + def interfaceExtends(self): + return self.getTypedRuleContext(JavaParser.InterfaceExtendsContext,0) + + + def interfacePermits(self): + return self.getTypedRuleContext(JavaParser.InterfacePermitsContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_normalInterfaceDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterNormalInterfaceDeclaration" ): + listener.enterNormalInterfaceDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitNormalInterfaceDeclaration" ): + listener.exitNormalInterfaceDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNormalInterfaceDeclaration" ): + return visitor.visitNormalInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def normalInterfaceDeclaration(self): + + localctx = JavaParser.NormalInterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 222, self.RULE_normalInterfaceDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1457 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 115967690405054472) != 0) or _la==86: + self.state = 1454 + self.interfaceModifier() + self.state = 1459 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1460 + self.match(JavaParser.INTERFACE) + self.state = 1461 + self.typeIdentifier() + self.state = 1463 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1462 + self.typeParameters() + + + self.state = 1466 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==34: + self.state = 1465 + self.interfaceExtends() + + + self.state = 1469 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==7: + self.state = 1468 + self.interfacePermits() + + + self.state = 1471 + self.interfaceBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(JavaParser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(JavaParser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(JavaParser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(JavaParser.PRIVATE, 0) + + def ABSTRACT(self): + return self.getToken(JavaParser.ABSTRACT, 0) + + def STATIC(self): + return self.getToken(JavaParser.STATIC, 0) + + def SEALED(self): + return self.getToken(JavaParser.SEALED, 0) + + def NONSEALED(self): + return self.getToken(JavaParser.NONSEALED, 0) + + def STRICTFP(self): + return self.getToken(JavaParser.STRICTFP, 0) + + def getRuleIndex(self): + return JavaParser.RULE_interfaceModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInterfaceModifier" ): + listener.enterInterfaceModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInterfaceModifier" ): + listener.exitInterfaceModifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceModifier" ): + return visitor.visitInterfaceModifier(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceModifier(self): + + localctx = JavaParser.InterfaceModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 224, self.RULE_interfaceModifier) + try: + self.state = 1482 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1473 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1474 + self.match(JavaParser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 1475 + self.match(JavaParser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 1476 + self.match(JavaParser.PRIVATE) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 5) + self.state = 1477 + self.match(JavaParser.ABSTRACT) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 6) + self.state = 1478 + self.match(JavaParser.STATIC) + pass + elif token in [11]: + self.enterOuterAlt(localctx, 7) + self.state = 1479 + self.match(JavaParser.SEALED) + pass + elif token in [3]: + self.enterOuterAlt(localctx, 8) + self.state = 1480 + self.match(JavaParser.NONSEALED) + pass + elif token in [56]: + self.enterOuterAlt(localctx, 9) + self.state = 1481 + self.match(JavaParser.STRICTFP) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceExtendsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXTENDS(self): + return self.getToken(JavaParser.EXTENDS, 0) + + def interfaceTypeList(self): + return self.getTypedRuleContext(JavaParser.InterfaceTypeListContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_interfaceExtends + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInterfaceExtends" ): + listener.enterInterfaceExtends(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInterfaceExtends" ): + listener.exitInterfaceExtends(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceExtends" ): + return visitor.visitInterfaceExtends(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceExtends(self): + + localctx = JavaParser.InterfaceExtendsContext(self, self._ctx, self.state) + self.enterRule(localctx, 226, self.RULE_interfaceExtends) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1484 + self.match(JavaParser.EXTENDS) + self.state = 1485 + self.interfaceTypeList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfacePermitsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def PERMITS(self): + return self.getToken(JavaParser.PERMITS, 0) + + def typeName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.TypeNameContext) + else: + return self.getTypedRuleContext(JavaParser.TypeNameContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_interfacePermits + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInterfacePermits" ): + listener.enterInterfacePermits(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInterfacePermits" ): + listener.exitInterfacePermits(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfacePermits" ): + return visitor.visitInterfacePermits(self) + else: + return visitor.visitChildren(self) + + + + + def interfacePermits(self): + + localctx = JavaParser.InterfacePermitsContext(self, self._ctx, self.state) + self.enterRule(localctx, 228, self.RULE_interfacePermits) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1487 + self.match(JavaParser.PERMITS) + self.state = 1488 + self.typeName() + self.state = 1493 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 1489 + self.match(JavaParser.COMMA) + self.state = 1490 + self.typeName() + self.state = 1495 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(JavaParser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(JavaParser.RBRACE, 0) + + def interfaceMemberDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.InterfaceMemberDeclarationContext) + else: + return self.getTypedRuleContext(JavaParser.InterfaceMemberDeclarationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_interfaceBody + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInterfaceBody" ): + listener.enterInterfaceBody(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInterfaceBody" ): + listener.exitInterfaceBody(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceBody" ): + return visitor.visitInterfaceBody(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceBody(self): + + localctx = JavaParser.InterfaceBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 230, self.RULE_interfaceBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1496 + self.match(JavaParser.LBRACE) + self.state = 1500 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 134105417395735048) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230376187494401) != 0): + self.state = 1497 + self.interfaceMemberDeclaration() + self.state = 1502 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1503 + self.match(JavaParser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceMemberDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def constantDeclaration(self): + return self.getTypedRuleContext(JavaParser.ConstantDeclarationContext,0) + + + def interfaceMethodDeclaration(self): + return self.getTypedRuleContext(JavaParser.InterfaceMethodDeclarationContext,0) + + + def classDeclaration(self): + return self.getTypedRuleContext(JavaParser.ClassDeclarationContext,0) + + + def interfaceDeclaration(self): + return self.getTypedRuleContext(JavaParser.InterfaceDeclarationContext,0) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_interfaceMemberDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInterfaceMemberDeclaration" ): + listener.enterInterfaceMemberDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInterfaceMemberDeclaration" ): + listener.exitInterfaceMemberDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceMemberDeclaration" ): + return visitor.visitInterfaceMemberDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceMemberDeclaration(self): + + localctx = JavaParser.InterfaceMemberDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 232, self.RULE_interfaceMemberDeclaration) + try: + self.state = 1510 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,158,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1505 + self.constantDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1506 + self.interfaceMethodDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1507 + self.classDeclaration() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1508 + self.interfaceDeclaration() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1509 + self.match(JavaParser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstantDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(JavaParser.UnannTypeContext,0) + + + def variableDeclaratorList(self): + return self.getTypedRuleContext(JavaParser.VariableDeclaratorListContext,0) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def constantModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ConstantModifierContext) + else: + return self.getTypedRuleContext(JavaParser.ConstantModifierContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_constantDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterConstantDeclaration" ): + listener.enterConstantDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitConstantDeclaration" ): + listener.exitConstantDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstantDeclaration" ): + return visitor.visitConstantDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def constantDeclaration(self): + + localctx = JavaParser.ConstantDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 234, self.RULE_constantDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1515 + self._errHandler.sync(self) + _la = self._input.LA(1) + while ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & 2251799814864897) != 0): + self.state = 1512 + self.constantModifier() + self.state = 1517 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1518 + self.unannType() + self.state = 1519 + self.variableDeclaratorList() + self.state = 1520 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstantModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(JavaParser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(JavaParser.PUBLIC, 0) + + def STATIC(self): + return self.getToken(JavaParser.STATIC, 0) + + def FINAL(self): + return self.getToken(JavaParser.FINAL, 0) + + def getRuleIndex(self): + return JavaParser.RULE_constantModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterConstantModifier" ): + listener.enterConstantModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitConstantModifier" ): + listener.exitConstantModifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstantModifier" ): + return visitor.visitConstantModifier(self) + else: + return visitor.visitChildren(self) + + + + + def constantModifier(self): + + localctx = JavaParser.ConstantModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 236, self.RULE_constantModifier) + try: + self.state = 1526 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1522 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1523 + self.match(JavaParser.PUBLIC) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 3) + self.state = 1524 + self.match(JavaParser.STATIC) + pass + elif token in [35]: + self.enterOuterAlt(localctx, 4) + self.state = 1525 + self.match(JavaParser.FINAL) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceMethodDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def methodHeader(self): + return self.getTypedRuleContext(JavaParser.MethodHeaderContext,0) + + + def methodBody(self): + return self.getTypedRuleContext(JavaParser.MethodBodyContext,0) + + + def interfaceMethodModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.InterfaceMethodModifierContext) + else: + return self.getTypedRuleContext(JavaParser.InterfaceMethodModifierContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_interfaceMethodDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInterfaceMethodDeclaration" ): + listener.enterInterfaceMethodDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInterfaceMethodDeclaration" ): + listener.exitInterfaceMethodDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceMethodDeclaration" ): + return visitor.visitInterfaceMethodDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceMethodDeclaration(self): + + localctx = JavaParser.InterfaceMethodDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 238, self.RULE_interfaceMethodDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1531 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 113715891128238080) != 0) or _la==86: + self.state = 1528 + self.interfaceMethodModifier() + self.state = 1533 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1534 + self.methodHeader() + self.state = 1535 + self.methodBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceMethodModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(JavaParser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(JavaParser.PUBLIC, 0) + + def PRIVATE(self): + return self.getToken(JavaParser.PRIVATE, 0) + + def ABSTRACT(self): + return self.getToken(JavaParser.ABSTRACT, 0) + + def DEFAULT(self): + return self.getToken(JavaParser.DEFAULT, 0) + + def STATIC(self): + return self.getToken(JavaParser.STATIC, 0) + + def STRICTFP(self): + return self.getToken(JavaParser.STRICTFP, 0) + + def getRuleIndex(self): + return JavaParser.RULE_interfaceMethodModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInterfaceMethodModifier" ): + listener.enterInterfaceMethodModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInterfaceMethodModifier" ): + listener.exitInterfaceMethodModifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceMethodModifier" ): + return visitor.visitInterfaceMethodModifier(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceMethodModifier(self): + + localctx = JavaParser.InterfaceMethodModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 240, self.RULE_interfaceMethodModifier) + try: + self.state = 1544 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1537 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1538 + self.match(JavaParser.PUBLIC) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 3) + self.state = 1539 + self.match(JavaParser.PRIVATE) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 4) + self.state = 1540 + self.match(JavaParser.ABSTRACT) + pass + elif token in [29]: + self.enterOuterAlt(localctx, 5) + self.state = 1541 + self.match(JavaParser.DEFAULT) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 6) + self.state = 1542 + self.match(JavaParser.STATIC) + pass + elif token in [56]: + self.enterOuterAlt(localctx, 7) + self.state = 1543 + self.match(JavaParser.STRICTFP) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AnnotationInterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def AT(self): + return self.getToken(JavaParser.AT, 0) + + def INTERFACE(self): + return self.getToken(JavaParser.INTERFACE, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(JavaParser.TypeIdentifierContext,0) + + + def annotationInterfaceBody(self): + return self.getTypedRuleContext(JavaParser.AnnotationInterfaceBodyContext,0) + + + def interfaceModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.InterfaceModifierContext) + else: + return self.getTypedRuleContext(JavaParser.InterfaceModifierContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_annotationInterfaceDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAnnotationInterfaceDeclaration" ): + listener.enterAnnotationInterfaceDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAnnotationInterfaceDeclaration" ): + listener.exitAnnotationInterfaceDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAnnotationInterfaceDeclaration" ): + return visitor.visitAnnotationInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def annotationInterfaceDeclaration(self): + + localctx = JavaParser.AnnotationInterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 242, self.RULE_annotationInterfaceDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1549 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,163,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1546 + self.interfaceModifier() + self.state = 1551 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,163,self._ctx) + + self.state = 1552 + self.match(JavaParser.AT) + self.state = 1553 + self.match(JavaParser.INTERFACE) + self.state = 1554 + self.typeIdentifier() + self.state = 1555 + self.annotationInterfaceBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AnnotationInterfaceBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(JavaParser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(JavaParser.RBRACE, 0) + + def annotationInterfaceMemberDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationInterfaceMemberDeclarationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationInterfaceMemberDeclarationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_annotationInterfaceBody + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAnnotationInterfaceBody" ): + listener.enterAnnotationInterfaceBody(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAnnotationInterfaceBody" ): + listener.exitAnnotationInterfaceBody(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAnnotationInterfaceBody" ): + return visitor.visitAnnotationInterfaceBody(self) + else: + return visitor.visitChildren(self) + + + + + def annotationInterfaceBody(self): + + localctx = JavaParser.AnnotationInterfaceBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 244, self.RULE_annotationInterfaceBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1557 + self.match(JavaParser.LBRACE) + self.state = 1561 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 134105416858864136) != 0) or ((((_la - 82)) & ~0x3f) == 0 and ((1 << (_la - 82)) & 2199023255569) != 0): + self.state = 1558 + self.annotationInterfaceMemberDeclaration() + self.state = 1563 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1564 + self.match(JavaParser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AnnotationInterfaceMemberDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotationInterfaceElementDeclaration(self): + return self.getTypedRuleContext(JavaParser.AnnotationInterfaceElementDeclarationContext,0) + + + def constantDeclaration(self): + return self.getTypedRuleContext(JavaParser.ConstantDeclarationContext,0) + + + def classDeclaration(self): + return self.getTypedRuleContext(JavaParser.ClassDeclarationContext,0) + + + def interfaceDeclaration(self): + return self.getTypedRuleContext(JavaParser.InterfaceDeclarationContext,0) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_annotationInterfaceMemberDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAnnotationInterfaceMemberDeclaration" ): + listener.enterAnnotationInterfaceMemberDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAnnotationInterfaceMemberDeclaration" ): + listener.exitAnnotationInterfaceMemberDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAnnotationInterfaceMemberDeclaration" ): + return visitor.visitAnnotationInterfaceMemberDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def annotationInterfaceMemberDeclaration(self): + + localctx = JavaParser.AnnotationInterfaceMemberDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 246, self.RULE_annotationInterfaceMemberDeclaration) + try: + self.state = 1571 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,165,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1566 + self.annotationInterfaceElementDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1567 + self.constantDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1568 + self.classDeclaration() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1569 + self.interfaceDeclaration() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1570 + self.match(JavaParser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AnnotationInterfaceElementDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(JavaParser.UnannTypeContext,0) + + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def annotationInterfaceElementModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationInterfaceElementModifierContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationInterfaceElementModifierContext,i) + + + def dims(self): + return self.getTypedRuleContext(JavaParser.DimsContext,0) + + + def defaultValue(self): + return self.getTypedRuleContext(JavaParser.DefaultValueContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_annotationInterfaceElementDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAnnotationInterfaceElementDeclaration" ): + listener.enterAnnotationInterfaceElementDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAnnotationInterfaceElementDeclaration" ): + listener.exitAnnotationInterfaceElementDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAnnotationInterfaceElementDeclaration" ): + return visitor.visitAnnotationInterfaceElementDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def annotationInterfaceElementDeclaration(self): + + localctx = JavaParser.AnnotationInterfaceElementDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 248, self.RULE_annotationInterfaceElementDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1576 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==18 or _la==52 or _la==86: + self.state = 1573 + self.annotationInterfaceElementModifier() + self.state = 1578 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1579 + self.unannType() + self.state = 1580 + self.match(JavaParser.Identifier) + self.state = 1581 + self.match(JavaParser.LPAREN) + self.state = 1582 + self.match(JavaParser.RPAREN) + self.state = 1584 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==80 or _la==86: + self.state = 1583 + self.dims() + + + self.state = 1587 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==29: + self.state = 1586 + self.defaultValue() + + + self.state = 1589 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AnnotationInterfaceElementModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(JavaParser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(JavaParser.PUBLIC, 0) + + def ABSTRACT(self): + return self.getToken(JavaParser.ABSTRACT, 0) + + def getRuleIndex(self): + return JavaParser.RULE_annotationInterfaceElementModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAnnotationInterfaceElementModifier" ): + listener.enterAnnotationInterfaceElementModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAnnotationInterfaceElementModifier" ): + listener.exitAnnotationInterfaceElementModifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAnnotationInterfaceElementModifier" ): + return visitor.visitAnnotationInterfaceElementModifier(self) + else: + return visitor.visitChildren(self) + + + + + def annotationInterfaceElementModifier(self): + + localctx = JavaParser.AnnotationInterfaceElementModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 250, self.RULE_annotationInterfaceElementModifier) + try: + self.state = 1594 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1591 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1592 + self.match(JavaParser.PUBLIC) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 3) + self.state = 1593 + self.match(JavaParser.ABSTRACT) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DefaultValueContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def DEFAULT(self): + return self.getToken(JavaParser.DEFAULT, 0) + + def elementValue(self): + return self.getTypedRuleContext(JavaParser.ElementValueContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_defaultValue + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterDefaultValue" ): + listener.enterDefaultValue(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitDefaultValue" ): + listener.exitDefaultValue(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDefaultValue" ): + return visitor.visitDefaultValue(self) + else: + return visitor.visitChildren(self) + + + + + def defaultValue(self): + + localctx = JavaParser.DefaultValueContext(self, self._ctx, self.state) + self.enterRule(localctx, 252, self.RULE_defaultValue) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1596 + self.match(JavaParser.DEFAULT) + self.state = 1597 + self.elementValue() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AnnotationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def normalAnnotation(self): + return self.getTypedRuleContext(JavaParser.NormalAnnotationContext,0) + + + def markerAnnotation(self): + return self.getTypedRuleContext(JavaParser.MarkerAnnotationContext,0) + + + def singleElementAnnotation(self): + return self.getTypedRuleContext(JavaParser.SingleElementAnnotationContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_annotation + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAnnotation" ): + listener.enterAnnotation(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAnnotation" ): + listener.exitAnnotation(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAnnotation" ): + return visitor.visitAnnotation(self) + else: + return visitor.visitChildren(self) + + + + + def annotation(self): + + localctx = JavaParser.AnnotationContext(self, self._ctx, self.state) + self.enterRule(localctx, 254, self.RULE_annotation) + try: + self.state = 1602 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,170,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1599 + self.normalAnnotation() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1600 + self.markerAnnotation() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1601 + self.singleElementAnnotation() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NormalAnnotationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def AT(self): + return self.getToken(JavaParser.AT, 0) + + def typeName(self): + return self.getTypedRuleContext(JavaParser.TypeNameContext,0) + + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def elementValuePairList(self): + return self.getTypedRuleContext(JavaParser.ElementValuePairListContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_normalAnnotation + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterNormalAnnotation" ): + listener.enterNormalAnnotation(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitNormalAnnotation" ): + listener.exitNormalAnnotation(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNormalAnnotation" ): + return visitor.visitNormalAnnotation(self) + else: + return visitor.visitChildren(self) + + + + + def normalAnnotation(self): + + localctx = JavaParser.NormalAnnotationContext(self, self._ctx, self.state) + self.enterRule(localctx, 256, self.RULE_normalAnnotation) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1604 + self.match(JavaParser.AT) + self.state = 1605 + self.typeName() + self.state = 1606 + self.match(JavaParser.LPAREN) + self.state = 1608 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==123: + self.state = 1607 + self.elementValuePairList() + + + self.state = 1610 + self.match(JavaParser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ElementValuePairListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def elementValuePair(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ElementValuePairContext) + else: + return self.getTypedRuleContext(JavaParser.ElementValuePairContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_elementValuePairList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterElementValuePairList" ): + listener.enterElementValuePairList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitElementValuePairList" ): + listener.exitElementValuePairList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitElementValuePairList" ): + return visitor.visitElementValuePairList(self) + else: + return visitor.visitChildren(self) + + + + + def elementValuePairList(self): + + localctx = JavaParser.ElementValuePairListContext(self, self._ctx, self.state) + self.enterRule(localctx, 258, self.RULE_elementValuePairList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1612 + self.elementValuePair() + self.state = 1617 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 1613 + self.match(JavaParser.COMMA) + self.state = 1614 + self.elementValuePair() + self.state = 1619 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ElementValuePairContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def ASSIGN(self): + return self.getToken(JavaParser.ASSIGN, 0) + + def elementValue(self): + return self.getTypedRuleContext(JavaParser.ElementValueContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_elementValuePair + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterElementValuePair" ): + listener.enterElementValuePair(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitElementValuePair" ): + listener.exitElementValuePair(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitElementValuePair" ): + return visitor.visitElementValuePair(self) + else: + return visitor.visitChildren(self) + + + + + def elementValuePair(self): + + localctx = JavaParser.ElementValuePairContext(self, self._ctx, self.state) + self.enterRule(localctx, 260, self.RULE_elementValuePair) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1620 + self.match(JavaParser.Identifier) + self.state = 1621 + self.match(JavaParser.ASSIGN) + self.state = 1622 + self.elementValue() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ElementValueContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalExpression(self): + return self.getTypedRuleContext(JavaParser.ConditionalExpressionContext,0) + + + def elementValueArrayInitializer(self): + return self.getTypedRuleContext(JavaParser.ElementValueArrayInitializerContext,0) + + + def annotation(self): + return self.getTypedRuleContext(JavaParser.AnnotationContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_elementValue + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterElementValue" ): + listener.enterElementValue(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitElementValue" ): + listener.exitElementValue(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitElementValue" ): + return visitor.visitElementValue(self) + else: + return visitor.visitChildren(self) + + + + + def elementValue(self): + + localctx = JavaParser.ElementValueContext(self, self._ctx, self.state) + self.enterRule(localctx, 262, self.RULE_elementValue) + try: + self.state = 1627 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,173,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1624 + self.conditionalExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1625 + self.elementValueArrayInitializer() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1626 + self.annotation() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ElementValueArrayInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(JavaParser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(JavaParser.RBRACE, 0) + + def elementValueList(self): + return self.getTypedRuleContext(JavaParser.ElementValueListContext,0) + + + def COMMA(self): + return self.getToken(JavaParser.COMMA, 0) + + def getRuleIndex(self): + return JavaParser.RULE_elementValueArrayInitializer + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterElementValueArrayInitializer" ): + listener.enterElementValueArrayInitializer(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitElementValueArrayInitializer" ): + listener.exitElementValueArrayInitializer(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitElementValueArrayInitializer" ): + return visitor.visitElementValueArrayInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def elementValueArrayInitializer(self): + + localctx = JavaParser.ElementValueArrayInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 264, self.RULE_elementValueArrayInitializer) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1629 + self.match(JavaParser.LBRACE) + self.state = 1631 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939449841) != 0): + self.state = 1630 + self.elementValueList() + + + self.state = 1634 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==83: + self.state = 1633 + self.match(JavaParser.COMMA) + + + self.state = 1636 + self.match(JavaParser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ElementValueListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def elementValue(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ElementValueContext) + else: + return self.getTypedRuleContext(JavaParser.ElementValueContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_elementValueList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterElementValueList" ): + listener.enterElementValueList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitElementValueList" ): + listener.exitElementValueList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitElementValueList" ): + return visitor.visitElementValueList(self) + else: + return visitor.visitChildren(self) + + + + + def elementValueList(self): + + localctx = JavaParser.ElementValueListContext(self, self._ctx, self.state) + self.enterRule(localctx, 266, self.RULE_elementValueList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1638 + self.elementValue() + self.state = 1643 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,176,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1639 + self.match(JavaParser.COMMA) + self.state = 1640 + self.elementValue() + self.state = 1645 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,176,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MarkerAnnotationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def AT(self): + return self.getToken(JavaParser.AT, 0) + + def typeName(self): + return self.getTypedRuleContext(JavaParser.TypeNameContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_markerAnnotation + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMarkerAnnotation" ): + listener.enterMarkerAnnotation(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMarkerAnnotation" ): + listener.exitMarkerAnnotation(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMarkerAnnotation" ): + return visitor.visitMarkerAnnotation(self) + else: + return visitor.visitChildren(self) + + + + + def markerAnnotation(self): + + localctx = JavaParser.MarkerAnnotationContext(self, self._ctx, self.state) + self.enterRule(localctx, 268, self.RULE_markerAnnotation) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1646 + self.match(JavaParser.AT) + self.state = 1647 + self.typeName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SingleElementAnnotationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def AT(self): + return self.getToken(JavaParser.AT, 0) + + def typeName(self): + return self.getTypedRuleContext(JavaParser.TypeNameContext,0) + + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def elementValue(self): + return self.getTypedRuleContext(JavaParser.ElementValueContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def getRuleIndex(self): + return JavaParser.RULE_singleElementAnnotation + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSingleElementAnnotation" ): + listener.enterSingleElementAnnotation(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSingleElementAnnotation" ): + listener.exitSingleElementAnnotation(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSingleElementAnnotation" ): + return visitor.visitSingleElementAnnotation(self) + else: + return visitor.visitChildren(self) + + + + + def singleElementAnnotation(self): + + localctx = JavaParser.SingleElementAnnotationContext(self, self._ctx, self.state) + self.enterRule(localctx, 270, self.RULE_singleElementAnnotation) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1649 + self.match(JavaParser.AT) + self.state = 1650 + self.typeName() + self.state = 1651 + self.match(JavaParser.LPAREN) + self.state = 1652 + self.elementValue() + self.state = 1653 + self.match(JavaParser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrayInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(JavaParser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(JavaParser.RBRACE, 0) + + def variableInitializerList(self): + return self.getTypedRuleContext(JavaParser.VariableInitializerListContext,0) + + + def COMMA(self): + return self.getToken(JavaParser.COMMA, 0) + + def getRuleIndex(self): + return JavaParser.RULE_arrayInitializer + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArrayInitializer" ): + listener.enterArrayInitializer(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArrayInitializer" ): + listener.exitArrayInitializer(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArrayInitializer" ): + return visitor.visitArrayInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def arrayInitializer(self): + + localctx = JavaParser.ArrayInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 272, self.RULE_arrayInitializer) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1655 + self.match(JavaParser.LBRACE) + self.state = 1657 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939449841) != 0): + self.state = 1656 + self.variableInitializerList() + + + self.state = 1660 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==83: + self.state = 1659 + self.match(JavaParser.COMMA) + + + self.state = 1662 + self.match(JavaParser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableInitializerListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def variableInitializer(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.VariableInitializerContext) + else: + return self.getTypedRuleContext(JavaParser.VariableInitializerContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_variableInitializerList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVariableInitializerList" ): + listener.enterVariableInitializerList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVariableInitializerList" ): + listener.exitVariableInitializerList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableInitializerList" ): + return visitor.visitVariableInitializerList(self) + else: + return visitor.visitChildren(self) + + + + + def variableInitializerList(self): + + localctx = JavaParser.VariableInitializerListContext(self, self._ctx, self.state) + self.enterRule(localctx, 274, self.RULE_variableInitializerList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1664 + self.variableInitializer() + self.state = 1669 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,179,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1665 + self.match(JavaParser.COMMA) + self.state = 1666 + self.variableInitializer() + self.state = 1671 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,179,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(JavaParser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(JavaParser.RBRACE, 0) + + def blockStatements(self): + return self.getTypedRuleContext(JavaParser.BlockStatementsContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_block + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBlock" ): + listener.enterBlock(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBlock" ): + listener.exitBlock(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBlock" ): + return visitor.visitBlock(self) + else: + return visitor.visitChildren(self) + + + + + def block(self): + + localctx = JavaParser.BlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 276, self.RULE_block) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1672 + self.match(JavaParser.LBRACE) + self.state = 1674 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4610965747420531208) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 576461576941625323) != 0): + self.state = 1673 + self.blockStatements() + + + self.state = 1676 + self.match(JavaParser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BlockStatementsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def blockStatement(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.BlockStatementContext) + else: + return self.getTypedRuleContext(JavaParser.BlockStatementContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_blockStatements + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBlockStatements" ): + listener.enterBlockStatements(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBlockStatements" ): + listener.exitBlockStatements(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBlockStatements" ): + return visitor.visitBlockStatements(self) + else: + return visitor.visitChildren(self) + + + + + def blockStatements(self): + + localctx = JavaParser.BlockStatementsContext(self, self._ctx, self.state) + self.enterRule(localctx, 278, self.RULE_blockStatements) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1678 + self.blockStatement() + self.state = 1682 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 4610965747420531208) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 576461576941625323) != 0): + self.state = 1679 + self.blockStatement() + self.state = 1684 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BlockStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def localClassOrInterfaceDeclaration(self): + return self.getTypedRuleContext(JavaParser.LocalClassOrInterfaceDeclarationContext,0) + + + def localVariableDeclarationStatement(self): + return self.getTypedRuleContext(JavaParser.LocalVariableDeclarationStatementContext,0) + + + def statement(self): + return self.getTypedRuleContext(JavaParser.StatementContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_blockStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBlockStatement" ): + listener.enterBlockStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBlockStatement" ): + listener.exitBlockStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBlockStatement" ): + return visitor.visitBlockStatement(self) + else: + return visitor.visitChildren(self) + + + + + def blockStatement(self): + + localctx = JavaParser.BlockStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 280, self.RULE_blockStatement) + try: + self.state = 1688 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,182,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1685 + self.localClassOrInterfaceDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1686 + self.localVariableDeclarationStatement() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1687 + self.statement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LocalClassOrInterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classDeclaration(self): + return self.getTypedRuleContext(JavaParser.ClassDeclarationContext,0) + + + def normalInterfaceDeclaration(self): + return self.getTypedRuleContext(JavaParser.NormalInterfaceDeclarationContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_localClassOrInterfaceDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLocalClassOrInterfaceDeclaration" ): + listener.enterLocalClassOrInterfaceDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLocalClassOrInterfaceDeclaration" ): + listener.exitLocalClassOrInterfaceDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLocalClassOrInterfaceDeclaration" ): + return visitor.visitLocalClassOrInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def localClassOrInterfaceDeclaration(self): + + localctx = JavaParser.LocalClassOrInterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 282, self.RULE_localClassOrInterfaceDeclaration) + try: + self.state = 1692 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,183,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1690 + self.classDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1691 + self.normalInterfaceDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LocalVariableDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def localVariableType(self): + return self.getTypedRuleContext(JavaParser.LocalVariableTypeContext,0) + + + def variableModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.VariableModifierContext) + else: + return self.getTypedRuleContext(JavaParser.VariableModifierContext,i) + + + def variableDeclaratorList(self): + return self.getTypedRuleContext(JavaParser.VariableDeclaratorListContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_localVariableDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLocalVariableDeclaration" ): + listener.enterLocalVariableDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLocalVariableDeclaration" ): + listener.exitLocalVariableDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLocalVariableDeclaration" ): + return visitor.visitLocalVariableDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def localVariableDeclaration(self): + + localctx = JavaParser.LocalVariableDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 284, self.RULE_localVariableDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1697 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==35 or _la==86: + self.state = 1694 + self.variableModifier() + self.state = 1699 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1700 + self.localVariableType() + self.state = 1702 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,185,self._ctx) + if la_ == 1: + self.state = 1701 + self.variableDeclaratorList() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LocalVariableTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(JavaParser.UnannTypeContext,0) + + + def VAR(self): + return self.getToken(JavaParser.VAR, 0) + + def getRuleIndex(self): + return JavaParser.RULE_localVariableType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLocalVariableType" ): + listener.enterLocalVariableType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLocalVariableType" ): + listener.exitLocalVariableType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLocalVariableType" ): + return visitor.visitLocalVariableType(self) + else: + return visitor.visitChildren(self) + + + + + def localVariableType(self): + + localctx = JavaParser.LocalVariableTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 286, self.RULE_localVariableType) + try: + self.state = 1706 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [20, 22, 25, 31, 37, 44, 46, 54, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 1704 + self.unannType() + pass + elif token in [15]: + self.enterOuterAlt(localctx, 2) + self.state = 1705 + self.match(JavaParser.VAR) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LocalVariableDeclarationStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def localVariableDeclaration(self): + return self.getTypedRuleContext(JavaParser.LocalVariableDeclarationContext,0) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_localVariableDeclarationStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLocalVariableDeclarationStatement" ): + listener.enterLocalVariableDeclarationStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLocalVariableDeclarationStatement" ): + listener.exitLocalVariableDeclarationStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLocalVariableDeclarationStatement" ): + return visitor.visitLocalVariableDeclarationStatement(self) + else: + return visitor.visitChildren(self) + + + + + def localVariableDeclarationStatement(self): + + localctx = JavaParser.LocalVariableDeclarationStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 288, self.RULE_localVariableDeclarationStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1708 + self.localVariableDeclaration() + self.state = 1709 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementWithoutTrailingSubstatement(self): + return self.getTypedRuleContext(JavaParser.StatementWithoutTrailingSubstatementContext,0) + + + def labeledStatement(self): + return self.getTypedRuleContext(JavaParser.LabeledStatementContext,0) + + + def ifThenStatement(self): + return self.getTypedRuleContext(JavaParser.IfThenStatementContext,0) + + + def ifThenElseStatement(self): + return self.getTypedRuleContext(JavaParser.IfThenElseStatementContext,0) + + + def whileStatement(self): + return self.getTypedRuleContext(JavaParser.WhileStatementContext,0) + + + def forStatement(self): + return self.getTypedRuleContext(JavaParser.ForStatementContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_statement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterStatement" ): + listener.enterStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitStatement" ): + listener.exitStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStatement" ): + return visitor.visitStatement(self) + else: + return visitor.visitChildren(self) + + + + + def statement(self): + + localctx = JavaParser.StatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 290, self.RULE_statement) + try: + self.state = 1717 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,187,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1711 + self.statementWithoutTrailingSubstatement() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1712 + self.labeledStatement() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1713 + self.ifThenStatement() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1714 + self.ifThenElseStatement() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1715 + self.whileStatement() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 1716 + self.forStatement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementWithoutTrailingSubstatement(self): + return self.getTypedRuleContext(JavaParser.StatementWithoutTrailingSubstatementContext,0) + + + def labeledStatementNoShortIf(self): + return self.getTypedRuleContext(JavaParser.LabeledStatementNoShortIfContext,0) + + + def ifThenElseStatementNoShortIf(self): + return self.getTypedRuleContext(JavaParser.IfThenElseStatementNoShortIfContext,0) + + + def whileStatementNoShortIf(self): + return self.getTypedRuleContext(JavaParser.WhileStatementNoShortIfContext,0) + + + def forStatementNoShortIf(self): + return self.getTypedRuleContext(JavaParser.ForStatementNoShortIfContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_statementNoShortIf + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterStatementNoShortIf" ): + listener.enterStatementNoShortIf(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitStatementNoShortIf" ): + listener.exitStatementNoShortIf(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStatementNoShortIf" ): + return visitor.visitStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + + + + def statementNoShortIf(self): + + localctx = JavaParser.StatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 292, self.RULE_statementNoShortIf) + try: + self.state = 1724 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,188,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1719 + self.statementWithoutTrailingSubstatement() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1720 + self.labeledStatementNoShortIf() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1721 + self.ifThenElseStatementNoShortIf() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1722 + self.whileStatementNoShortIf() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1723 + self.forStatementNoShortIf() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementWithoutTrailingSubstatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def block(self): + return self.getTypedRuleContext(JavaParser.BlockContext,0) + + + def emptyStatement_(self): + return self.getTypedRuleContext(JavaParser.EmptyStatement_Context,0) + + + def expressionStatement(self): + return self.getTypedRuleContext(JavaParser.ExpressionStatementContext,0) + + + def assertStatement(self): + return self.getTypedRuleContext(JavaParser.AssertStatementContext,0) + + + def switchStatement(self): + return self.getTypedRuleContext(JavaParser.SwitchStatementContext,0) + + + def doStatement(self): + return self.getTypedRuleContext(JavaParser.DoStatementContext,0) + + + def breakStatement(self): + return self.getTypedRuleContext(JavaParser.BreakStatementContext,0) + + + def continueStatement(self): + return self.getTypedRuleContext(JavaParser.ContinueStatementContext,0) + + + def returnStatement(self): + return self.getTypedRuleContext(JavaParser.ReturnStatementContext,0) + + + def synchronizedStatement(self): + return self.getTypedRuleContext(JavaParser.SynchronizedStatementContext,0) + + + def throwStatement(self): + return self.getTypedRuleContext(JavaParser.ThrowStatementContext,0) + + + def tryStatement(self): + return self.getTypedRuleContext(JavaParser.TryStatementContext,0) + + + def yieldStatement(self): + return self.getTypedRuleContext(JavaParser.YieldStatementContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_statementWithoutTrailingSubstatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterStatementWithoutTrailingSubstatement" ): + listener.enterStatementWithoutTrailingSubstatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitStatementWithoutTrailingSubstatement" ): + listener.exitStatementWithoutTrailingSubstatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStatementWithoutTrailingSubstatement" ): + return visitor.visitStatementWithoutTrailingSubstatement(self) + else: + return visitor.visitChildren(self) + + + + + def statementWithoutTrailingSubstatement(self): + + localctx = JavaParser.StatementWithoutTrailingSubstatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 294, self.RULE_statementWithoutTrailingSubstatement) + try: + self.state = 1739 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [78]: + self.enterOuterAlt(localctx, 1) + self.state = 1726 + self.block() + pass + elif token in [82]: + self.enterOuterAlt(localctx, 2) + self.state = 1727 + self.emptyStatement_() + pass + elif token in [20, 22, 25, 31, 37, 44, 46, 48, 54, 57, 60, 65, 69, 70, 71, 72, 73, 74, 75, 76, 86, 102, 103, 123]: + self.enterOuterAlt(localctx, 3) + self.state = 1728 + self.expressionStatement() + pass + elif token in [19]: + self.enterOuterAlt(localctx, 4) + self.state = 1729 + self.assertStatement() + pass + elif token in [58]: + self.enterOuterAlt(localctx, 5) + self.state = 1730 + self.switchStatement() + pass + elif token in [30]: + self.enterOuterAlt(localctx, 6) + self.state = 1731 + self.doStatement() + pass + elif token in [21]: + self.enterOuterAlt(localctx, 7) + self.state = 1732 + self.breakStatement() + pass + elif token in [28]: + self.enterOuterAlt(localctx, 8) + self.state = 1733 + self.continueStatement() + pass + elif token in [53]: + self.enterOuterAlt(localctx, 9) + self.state = 1734 + self.returnStatement() + pass + elif token in [59]: + self.enterOuterAlt(localctx, 10) + self.state = 1735 + self.synchronizedStatement() + pass + elif token in [61]: + self.enterOuterAlt(localctx, 11) + self.state = 1736 + self.throwStatement() + pass + elif token in [64]: + self.enterOuterAlt(localctx, 12) + self.state = 1737 + self.tryStatement() + pass + elif token in [17]: + self.enterOuterAlt(localctx, 13) + self.state = 1738 + self.yieldStatement() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EmptyStatement_Context(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_emptyStatement_ + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEmptyStatement_" ): + listener.enterEmptyStatement_(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEmptyStatement_" ): + listener.exitEmptyStatement_(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEmptyStatement_" ): + return visitor.visitEmptyStatement_(self) + else: + return visitor.visitChildren(self) + + + + + def emptyStatement_(self): + + localctx = JavaParser.EmptyStatement_Context(self, self._ctx, self.state) + self.enterRule(localctx, 296, self.RULE_emptyStatement_) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1741 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LabeledStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def COLON(self): + return self.getToken(JavaParser.COLON, 0) + + def statement(self): + return self.getTypedRuleContext(JavaParser.StatementContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_labeledStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLabeledStatement" ): + listener.enterLabeledStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLabeledStatement" ): + listener.exitLabeledStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLabeledStatement" ): + return visitor.visitLabeledStatement(self) + else: + return visitor.visitChildren(self) + + + + + def labeledStatement(self): + + localctx = JavaParser.LabeledStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 298, self.RULE_labeledStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1743 + self.match(JavaParser.Identifier) + self.state = 1744 + self.match(JavaParser.COLON) + self.state = 1745 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LabeledStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def COLON(self): + return self.getToken(JavaParser.COLON, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(JavaParser.StatementNoShortIfContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_labeledStatementNoShortIf + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLabeledStatementNoShortIf" ): + listener.enterLabeledStatementNoShortIf(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLabeledStatementNoShortIf" ): + listener.exitLabeledStatementNoShortIf(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLabeledStatementNoShortIf" ): + return visitor.visitLabeledStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + + + + def labeledStatementNoShortIf(self): + + localctx = JavaParser.LabeledStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 300, self.RULE_labeledStatementNoShortIf) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1747 + self.match(JavaParser.Identifier) + self.state = 1748 + self.match(JavaParser.COLON) + self.state = 1749 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExpressionStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementExpression(self): + return self.getTypedRuleContext(JavaParser.StatementExpressionContext,0) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_expressionStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExpressionStatement" ): + listener.enterExpressionStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExpressionStatement" ): + listener.exitExpressionStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpressionStatement" ): + return visitor.visitExpressionStatement(self) + else: + return visitor.visitChildren(self) + + + + + def expressionStatement(self): + + localctx = JavaParser.ExpressionStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 302, self.RULE_expressionStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1751 + self.statementExpression() + self.state = 1752 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def assignment(self): + return self.getTypedRuleContext(JavaParser.AssignmentContext,0) + + + def preIncrementExpression(self): + return self.getTypedRuleContext(JavaParser.PreIncrementExpressionContext,0) + + + def preDecrementExpression(self): + return self.getTypedRuleContext(JavaParser.PreDecrementExpressionContext,0) + + + def postIncrementExpression(self): + return self.getTypedRuleContext(JavaParser.PostIncrementExpressionContext,0) + + + def postDecrementExpression(self): + return self.getTypedRuleContext(JavaParser.PostDecrementExpressionContext,0) + + + def methodInvocation(self): + return self.getTypedRuleContext(JavaParser.MethodInvocationContext,0) + + + def classInstanceCreationExpression(self): + return self.getTypedRuleContext(JavaParser.ClassInstanceCreationExpressionContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_statementExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterStatementExpression" ): + listener.enterStatementExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitStatementExpression" ): + listener.exitStatementExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStatementExpression" ): + return visitor.visitStatementExpression(self) + else: + return visitor.visitChildren(self) + + + + + def statementExpression(self): + + localctx = JavaParser.StatementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 304, self.RULE_statementExpression) + try: + self.state = 1761 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,190,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1754 + self.assignment() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1755 + self.preIncrementExpression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1756 + self.preDecrementExpression() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1757 + self.postIncrementExpression() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1758 + self.postDecrementExpression() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 1759 + self.methodInvocation() + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 1760 + self.classInstanceCreationExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class IfThenStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IF(self): + return self.getToken(JavaParser.IF, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def statement(self): + return self.getTypedRuleContext(JavaParser.StatementContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_ifThenStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterIfThenStatement" ): + listener.enterIfThenStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitIfThenStatement" ): + listener.exitIfThenStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIfThenStatement" ): + return visitor.visitIfThenStatement(self) + else: + return visitor.visitChildren(self) + + + + + def ifThenStatement(self): + + localctx = JavaParser.IfThenStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 306, self.RULE_ifThenStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1763 + self.match(JavaParser.IF) + self.state = 1764 + self.match(JavaParser.LPAREN) + self.state = 1765 + self.expression() + self.state = 1766 + self.match(JavaParser.RPAREN) + self.state = 1767 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class IfThenElseStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IF(self): + return self.getToken(JavaParser.IF, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(JavaParser.StatementNoShortIfContext,0) + + + def ELSE(self): + return self.getToken(JavaParser.ELSE, 0) + + def statement(self): + return self.getTypedRuleContext(JavaParser.StatementContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_ifThenElseStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterIfThenElseStatement" ): + listener.enterIfThenElseStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitIfThenElseStatement" ): + listener.exitIfThenElseStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIfThenElseStatement" ): + return visitor.visitIfThenElseStatement(self) + else: + return visitor.visitChildren(self) + + + + + def ifThenElseStatement(self): + + localctx = JavaParser.IfThenElseStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 308, self.RULE_ifThenElseStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1769 + self.match(JavaParser.IF) + self.state = 1770 + self.match(JavaParser.LPAREN) + self.state = 1771 + self.expression() + self.state = 1772 + self.match(JavaParser.RPAREN) + self.state = 1773 + self.statementNoShortIf() + self.state = 1774 + self.match(JavaParser.ELSE) + self.state = 1775 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class IfThenElseStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IF(self): + return self.getToken(JavaParser.IF, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def statementNoShortIf(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.StatementNoShortIfContext) + else: + return self.getTypedRuleContext(JavaParser.StatementNoShortIfContext,i) + + + def ELSE(self): + return self.getToken(JavaParser.ELSE, 0) + + def getRuleIndex(self): + return JavaParser.RULE_ifThenElseStatementNoShortIf + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterIfThenElseStatementNoShortIf" ): + listener.enterIfThenElseStatementNoShortIf(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitIfThenElseStatementNoShortIf" ): + listener.exitIfThenElseStatementNoShortIf(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIfThenElseStatementNoShortIf" ): + return visitor.visitIfThenElseStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + + + + def ifThenElseStatementNoShortIf(self): + + localctx = JavaParser.IfThenElseStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 310, self.RULE_ifThenElseStatementNoShortIf) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1777 + self.match(JavaParser.IF) + self.state = 1778 + self.match(JavaParser.LPAREN) + self.state = 1779 + self.expression() + self.state = 1780 + self.match(JavaParser.RPAREN) + self.state = 1781 + self.statementNoShortIf() + self.state = 1782 + self.match(JavaParser.ELSE) + self.state = 1783 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AssertStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ASSERT(self): + return self.getToken(JavaParser.ASSERT, 0) + + def expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ExpressionContext) + else: + return self.getTypedRuleContext(JavaParser.ExpressionContext,i) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def COLON(self): + return self.getToken(JavaParser.COLON, 0) + + def getRuleIndex(self): + return JavaParser.RULE_assertStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAssertStatement" ): + listener.enterAssertStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAssertStatement" ): + listener.exitAssertStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAssertStatement" ): + return visitor.visitAssertStatement(self) + else: + return visitor.visitChildren(self) + + + + + def assertStatement(self): + + localctx = JavaParser.AssertStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 312, self.RULE_assertStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1785 + self.match(JavaParser.ASSERT) + self.state = 1786 + self.expression() + self.state = 1789 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==94: + self.state = 1787 + self.match(JavaParser.COLON) + self.state = 1788 + self.expression() + + + self.state = 1791 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SwitchStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SWITCH(self): + return self.getToken(JavaParser.SWITCH, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def switchBlock(self): + return self.getTypedRuleContext(JavaParser.SwitchBlockContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_switchStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSwitchStatement" ): + listener.enterSwitchStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSwitchStatement" ): + listener.exitSwitchStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSwitchStatement" ): + return visitor.visitSwitchStatement(self) + else: + return visitor.visitChildren(self) + + + + + def switchStatement(self): + + localctx = JavaParser.SwitchStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 314, self.RULE_switchStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1793 + self.match(JavaParser.SWITCH) + self.state = 1794 + self.match(JavaParser.LPAREN) + self.state = 1795 + self.expression() + self.state = 1796 + self.match(JavaParser.RPAREN) + self.state = 1797 + self.switchBlock() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SwitchBlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(JavaParser.LBRACE, 0) + + def switchRule(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.SwitchRuleContext) + else: + return self.getTypedRuleContext(JavaParser.SwitchRuleContext,i) + + + def RBRACE(self): + return self.getToken(JavaParser.RBRACE, 0) + + def switchBlockStatementGroup(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.SwitchBlockStatementGroupContext) + else: + return self.getTypedRuleContext(JavaParser.SwitchBlockStatementGroupContext,i) + + + def switchLabel(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.SwitchLabelContext) + else: + return self.getTypedRuleContext(JavaParser.SwitchLabelContext,i) + + + def COLON(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COLON) + else: + return self.getToken(JavaParser.COLON, i) + + def getRuleIndex(self): + return JavaParser.RULE_switchBlock + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSwitchBlock" ): + listener.enterSwitchBlock(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSwitchBlock" ): + listener.exitSwitchBlock(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSwitchBlock" ): + return visitor.visitSwitchBlock(self) + else: + return visitor.visitChildren(self) + + + + + def switchBlock(self): + + localctx = JavaParser.SwitchBlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 316, self.RULE_switchBlock) + self._la = 0 # Token type + try: + self.state = 1825 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,195,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1799 + self.match(JavaParser.LBRACE) + self.state = 1800 + self.switchRule() + self.state = 1804 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==23 or _la==29: + self.state = 1801 + self.switchRule() + self.state = 1806 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1807 + self.match(JavaParser.RBRACE) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1809 + self.match(JavaParser.LBRACE) + self.state = 1813 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,193,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1810 + self.switchBlockStatementGroup() + self.state = 1815 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,193,self._ctx) + + self.state = 1821 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==23 or _la==29: + self.state = 1816 + self.switchLabel() + self.state = 1817 + self.match(JavaParser.COLON) + self.state = 1823 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1824 + self.match(JavaParser.RBRACE) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SwitchRuleContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def switchLabel(self): + return self.getTypedRuleContext(JavaParser.SwitchLabelContext,0) + + + def ARROW(self): + return self.getToken(JavaParser.ARROW, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def block(self): + return self.getTypedRuleContext(JavaParser.BlockContext,0) + + + def throwStatement(self): + return self.getTypedRuleContext(JavaParser.ThrowStatementContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_switchRule + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSwitchRule" ): + listener.enterSwitchRule(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSwitchRule" ): + listener.exitSwitchRule(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSwitchRule" ): + return visitor.visitSwitchRule(self) + else: + return visitor.visitChildren(self) + + + + + def switchRule(self): + + localctx = JavaParser.SwitchRuleContext(self, self._ctx, self.state) + self.enterRule(localctx, 318, self.RULE_switchRule) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1827 + self.switchLabel() + self.state = 1828 + self.match(JavaParser.ARROW) + self.state = 1834 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [20, 22, 25, 31, 37, 44, 46, 48, 54, 57, 58, 60, 65, 69, 70, 71, 72, 73, 74, 75, 76, 86, 91, 92, 102, 103, 104, 105, 123]: + self.state = 1829 + self.expression() + self.state = 1830 + self.match(JavaParser.SEMI) + pass + elif token in [78]: + self.state = 1832 + self.block() + pass + elif token in [61]: + self.state = 1833 + self.throwStatement() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SwitchBlockStatementGroupContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def switchLabel(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.SwitchLabelContext) + else: + return self.getTypedRuleContext(JavaParser.SwitchLabelContext,i) + + + def COLON(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COLON) + else: + return self.getToken(JavaParser.COLON, i) + + def blockStatements(self): + return self.getTypedRuleContext(JavaParser.BlockStatementsContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_switchBlockStatementGroup + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSwitchBlockStatementGroup" ): + listener.enterSwitchBlockStatementGroup(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSwitchBlockStatementGroup" ): + listener.exitSwitchBlockStatementGroup(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSwitchBlockStatementGroup" ): + return visitor.visitSwitchBlockStatementGroup(self) + else: + return visitor.visitChildren(self) + + + + + def switchBlockStatementGroup(self): + + localctx = JavaParser.SwitchBlockStatementGroupContext(self, self._ctx, self.state) + self.enterRule(localctx, 320, self.RULE_switchBlockStatementGroup) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1836 + self.switchLabel() + self.state = 1837 + self.match(JavaParser.COLON) + self.state = 1843 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==23 or _la==29: + self.state = 1838 + self.switchLabel() + self.state = 1839 + self.match(JavaParser.COLON) + self.state = 1845 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1846 + self.blockStatements() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SwitchLabelContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def CASE(self): + return self.getToken(JavaParser.CASE, 0) + + def caseConstant(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.CaseConstantContext) + else: + return self.getTypedRuleContext(JavaParser.CaseConstantContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def DEFAULT(self): + return self.getToken(JavaParser.DEFAULT, 0) + + def getRuleIndex(self): + return JavaParser.RULE_switchLabel + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSwitchLabel" ): + listener.enterSwitchLabel(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSwitchLabel" ): + listener.exitSwitchLabel(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSwitchLabel" ): + return visitor.visitSwitchLabel(self) + else: + return visitor.visitChildren(self) + + + + + def switchLabel(self): + + localctx = JavaParser.SwitchLabelContext(self, self._ctx, self.state) + self.enterRule(localctx, 322, self.RULE_switchLabel) + self._la = 0 # Token type + try: + self.state = 1858 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [23]: + self.enterOuterAlt(localctx, 1) + self.state = 1848 + self.match(JavaParser.CASE) + self.state = 1849 + self.caseConstant() + self.state = 1854 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 1850 + self.match(JavaParser.COMMA) + self.state = 1851 + self.caseConstant() + self.state = 1856 + self._errHandler.sync(self) + _la = self._input.LA(1) + + pass + elif token in [29]: + self.enterOuterAlt(localctx, 2) + self.state = 1857 + self.match(JavaParser.DEFAULT) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CaseConstantContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalExpression(self): + return self.getTypedRuleContext(JavaParser.ConditionalExpressionContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_caseConstant + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCaseConstant" ): + listener.enterCaseConstant(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCaseConstant" ): + listener.exitCaseConstant(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCaseConstant" ): + return visitor.visitCaseConstant(self) + else: + return visitor.visitChildren(self) + + + + + def caseConstant(self): + + localctx = JavaParser.CaseConstantContext(self, self._ctx, self.state) + self.enterRule(localctx, 324, self.RULE_caseConstant) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1860 + self.conditionalExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class WhileStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def WHILE(self): + return self.getToken(JavaParser.WHILE, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def statement(self): + return self.getTypedRuleContext(JavaParser.StatementContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_whileStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterWhileStatement" ): + listener.enterWhileStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitWhileStatement" ): + listener.exitWhileStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitWhileStatement" ): + return visitor.visitWhileStatement(self) + else: + return visitor.visitChildren(self) + + + + + def whileStatement(self): + + localctx = JavaParser.WhileStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 326, self.RULE_whileStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1862 + self.match(JavaParser.WHILE) + self.state = 1863 + self.match(JavaParser.LPAREN) + self.state = 1864 + self.expression() + self.state = 1865 + self.match(JavaParser.RPAREN) + self.state = 1866 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class WhileStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def WHILE(self): + return self.getToken(JavaParser.WHILE, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(JavaParser.StatementNoShortIfContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_whileStatementNoShortIf + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterWhileStatementNoShortIf" ): + listener.enterWhileStatementNoShortIf(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitWhileStatementNoShortIf" ): + listener.exitWhileStatementNoShortIf(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitWhileStatementNoShortIf" ): + return visitor.visitWhileStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + + + + def whileStatementNoShortIf(self): + + localctx = JavaParser.WhileStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 328, self.RULE_whileStatementNoShortIf) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1868 + self.match(JavaParser.WHILE) + self.state = 1869 + self.match(JavaParser.LPAREN) + self.state = 1870 + self.expression() + self.state = 1871 + self.match(JavaParser.RPAREN) + self.state = 1872 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DoStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def DO(self): + return self.getToken(JavaParser.DO, 0) + + def statement(self): + return self.getTypedRuleContext(JavaParser.StatementContext,0) + + + def WHILE(self): + return self.getToken(JavaParser.WHILE, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_doStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterDoStatement" ): + listener.enterDoStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitDoStatement" ): + listener.exitDoStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDoStatement" ): + return visitor.visitDoStatement(self) + else: + return visitor.visitChildren(self) + + + + + def doStatement(self): + + localctx = JavaParser.DoStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 330, self.RULE_doStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1874 + self.match(JavaParser.DO) + self.state = 1875 + self.statement() + self.state = 1876 + self.match(JavaParser.WHILE) + self.state = 1877 + self.match(JavaParser.LPAREN) + self.state = 1878 + self.expression() + self.state = 1879 + self.match(JavaParser.RPAREN) + self.state = 1880 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ForStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def basicForStatement(self): + return self.getTypedRuleContext(JavaParser.BasicForStatementContext,0) + + + def enhancedForStatement(self): + return self.getTypedRuleContext(JavaParser.EnhancedForStatementContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_forStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterForStatement" ): + listener.enterForStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitForStatement" ): + listener.exitForStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitForStatement" ): + return visitor.visitForStatement(self) + else: + return visitor.visitChildren(self) + + + + + def forStatement(self): + + localctx = JavaParser.ForStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 332, self.RULE_forStatement) + try: + self.state = 1884 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,200,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1882 + self.basicForStatement() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1883 + self.enhancedForStatement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ForStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def basicForStatementNoShortIf(self): + return self.getTypedRuleContext(JavaParser.BasicForStatementNoShortIfContext,0) + + + def enhancedForStatementNoShortIf(self): + return self.getTypedRuleContext(JavaParser.EnhancedForStatementNoShortIfContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_forStatementNoShortIf + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterForStatementNoShortIf" ): + listener.enterForStatementNoShortIf(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitForStatementNoShortIf" ): + listener.exitForStatementNoShortIf(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitForStatementNoShortIf" ): + return visitor.visitForStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + + + + def forStatementNoShortIf(self): + + localctx = JavaParser.ForStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 334, self.RULE_forStatementNoShortIf) + try: + self.state = 1888 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,201,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1886 + self.basicForStatementNoShortIf() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1887 + self.enhancedForStatementNoShortIf() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BasicForStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(JavaParser.FOR, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def SEMI(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.SEMI) + else: + return self.getToken(JavaParser.SEMI, i) + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def statement(self): + return self.getTypedRuleContext(JavaParser.StatementContext,0) + + + def forInit(self): + return self.getTypedRuleContext(JavaParser.ForInitContext,0) + + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def forUpdate(self): + return self.getTypedRuleContext(JavaParser.ForUpdateContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_basicForStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBasicForStatement" ): + listener.enterBasicForStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBasicForStatement" ): + listener.exitBasicForStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBasicForStatement" ): + return visitor.visitBasicForStatement(self) + else: + return visitor.visitChildren(self) + + + + + def basicForStatement(self): + + localctx = JavaParser.BasicForStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 336, self.RULE_basicForStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1890 + self.match(JavaParser.FOR) + self.state = 1891 + self.match(JavaParser.LPAREN) + self.state = 1893 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1315420701084123136) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230788470673393) != 0): + self.state = 1892 + self.forInit() + + + self.state = 1895 + self.match(JavaParser.SEMI) + self.state = 1897 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1896 + self.expression() + + + self.state = 1899 + self.match(JavaParser.SEMI) + self.state = 1901 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1315420666724352000) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230788470673393) != 0): + self.state = 1900 + self.forUpdate() + + + self.state = 1903 + self.match(JavaParser.RPAREN) + self.state = 1904 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BasicForStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(JavaParser.FOR, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def SEMI(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.SEMI) + else: + return self.getToken(JavaParser.SEMI, i) + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(JavaParser.StatementNoShortIfContext,0) + + + def forInit(self): + return self.getTypedRuleContext(JavaParser.ForInitContext,0) + + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def forUpdate(self): + return self.getTypedRuleContext(JavaParser.ForUpdateContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_basicForStatementNoShortIf + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBasicForStatementNoShortIf" ): + listener.enterBasicForStatementNoShortIf(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBasicForStatementNoShortIf" ): + listener.exitBasicForStatementNoShortIf(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBasicForStatementNoShortIf" ): + return visitor.visitBasicForStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + + + + def basicForStatementNoShortIf(self): + + localctx = JavaParser.BasicForStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 338, self.RULE_basicForStatementNoShortIf) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1906 + self.match(JavaParser.FOR) + self.state = 1907 + self.match(JavaParser.LPAREN) + self.state = 1909 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1315420701084123136) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230788470673393) != 0): + self.state = 1908 + self.forInit() + + + self.state = 1911 + self.match(JavaParser.SEMI) + self.state = 1913 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1912 + self.expression() + + + self.state = 1915 + self.match(JavaParser.SEMI) + self.state = 1917 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1315420666724352000) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230788470673393) != 0): + self.state = 1916 + self.forUpdate() + + + self.state = 1919 + self.match(JavaParser.RPAREN) + self.state = 1920 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ForInitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementExpressionList(self): + return self.getTypedRuleContext(JavaParser.StatementExpressionListContext,0) + + + def localVariableDeclaration(self): + return self.getTypedRuleContext(JavaParser.LocalVariableDeclarationContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_forInit + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterForInit" ): + listener.enterForInit(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitForInit" ): + listener.exitForInit(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitForInit" ): + return visitor.visitForInit(self) + else: + return visitor.visitChildren(self) + + + + + def forInit(self): + + localctx = JavaParser.ForInitContext(self, self._ctx, self.state) + self.enterRule(localctx, 340, self.RULE_forInit) + try: + self.state = 1924 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,208,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1922 + self.statementExpressionList() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1923 + self.localVariableDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ForUpdateContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementExpressionList(self): + return self.getTypedRuleContext(JavaParser.StatementExpressionListContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_forUpdate + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterForUpdate" ): + listener.enterForUpdate(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitForUpdate" ): + listener.exitForUpdate(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitForUpdate" ): + return visitor.visitForUpdate(self) + else: + return visitor.visitChildren(self) + + + + + def forUpdate(self): + + localctx = JavaParser.ForUpdateContext(self, self._ctx, self.state) + self.enterRule(localctx, 342, self.RULE_forUpdate) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1926 + self.statementExpressionList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementExpressionListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.StatementExpressionContext) + else: + return self.getTypedRuleContext(JavaParser.StatementExpressionContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_statementExpressionList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterStatementExpressionList" ): + listener.enterStatementExpressionList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitStatementExpressionList" ): + listener.exitStatementExpressionList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStatementExpressionList" ): + return visitor.visitStatementExpressionList(self) + else: + return visitor.visitChildren(self) + + + + + def statementExpressionList(self): + + localctx = JavaParser.StatementExpressionListContext(self, self._ctx, self.state) + self.enterRule(localctx, 344, self.RULE_statementExpressionList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1928 + self.statementExpression() + self.state = 1933 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 1929 + self.match(JavaParser.COMMA) + self.state = 1930 + self.statementExpression() + self.state = 1935 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnhancedForStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(JavaParser.FOR, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def localVariableDeclaration(self): + return self.getTypedRuleContext(JavaParser.LocalVariableDeclarationContext,0) + + + def COLON(self): + return self.getToken(JavaParser.COLON, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def statement(self): + return self.getTypedRuleContext(JavaParser.StatementContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_enhancedForStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEnhancedForStatement" ): + listener.enterEnhancedForStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEnhancedForStatement" ): + listener.exitEnhancedForStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnhancedForStatement" ): + return visitor.visitEnhancedForStatement(self) + else: + return visitor.visitChildren(self) + + + + + def enhancedForStatement(self): + + localctx = JavaParser.EnhancedForStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 346, self.RULE_enhancedForStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1936 + self.match(JavaParser.FOR) + self.state = 1937 + self.match(JavaParser.LPAREN) + self.state = 1938 + self.localVariableDeclaration() + self.state = 1939 + self.match(JavaParser.COLON) + self.state = 1940 + self.expression() + self.state = 1941 + self.match(JavaParser.RPAREN) + self.state = 1942 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnhancedForStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(JavaParser.FOR, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def localVariableDeclaration(self): + return self.getTypedRuleContext(JavaParser.LocalVariableDeclarationContext,0) + + + def COLON(self): + return self.getToken(JavaParser.COLON, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(JavaParser.StatementNoShortIfContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_enhancedForStatementNoShortIf + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEnhancedForStatementNoShortIf" ): + listener.enterEnhancedForStatementNoShortIf(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEnhancedForStatementNoShortIf" ): + listener.exitEnhancedForStatementNoShortIf(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnhancedForStatementNoShortIf" ): + return visitor.visitEnhancedForStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + + + + def enhancedForStatementNoShortIf(self): + + localctx = JavaParser.EnhancedForStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 348, self.RULE_enhancedForStatementNoShortIf) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1944 + self.match(JavaParser.FOR) + self.state = 1945 + self.match(JavaParser.LPAREN) + self.state = 1946 + self.localVariableDeclaration() + self.state = 1947 + self.match(JavaParser.COLON) + self.state = 1948 + self.expression() + self.state = 1949 + self.match(JavaParser.RPAREN) + self.state = 1950 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BreakStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def BREAK(self): + return self.getToken(JavaParser.BREAK, 0) + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def getRuleIndex(self): + return JavaParser.RULE_breakStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBreakStatement" ): + listener.enterBreakStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBreakStatement" ): + listener.exitBreakStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBreakStatement" ): + return visitor.visitBreakStatement(self) + else: + return visitor.visitChildren(self) + + + + + def breakStatement(self): + + localctx = JavaParser.BreakStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 350, self.RULE_breakStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1952 + self.match(JavaParser.BREAK) + self.state = 1954 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==123: + self.state = 1953 + self.match(JavaParser.Identifier) + + + self.state = 1956 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ContinueStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def CONTINUE(self): + return self.getToken(JavaParser.CONTINUE, 0) + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def getRuleIndex(self): + return JavaParser.RULE_continueStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterContinueStatement" ): + listener.enterContinueStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitContinueStatement" ): + listener.exitContinueStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitContinueStatement" ): + return visitor.visitContinueStatement(self) + else: + return visitor.visitChildren(self) + + + + + def continueStatement(self): + + localctx = JavaParser.ContinueStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 352, self.RULE_continueStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1958 + self.match(JavaParser.CONTINUE) + self.state = 1960 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==123: + self.state = 1959 + self.match(JavaParser.Identifier) + + + self.state = 1962 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ReturnStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def RETURN(self): + return self.getToken(JavaParser.RETURN, 0) + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_returnStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterReturnStatement" ): + listener.enterReturnStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitReturnStatement" ): + listener.exitReturnStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitReturnStatement" ): + return visitor.visitReturnStatement(self) + else: + return visitor.visitChildren(self) + + + + + def returnStatement(self): + + localctx = JavaParser.ReturnStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 354, self.RULE_returnStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1964 + self.match(JavaParser.RETURN) + self.state = 1966 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1965 + self.expression() + + + self.state = 1968 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ThrowStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def THROW(self): + return self.getToken(JavaParser.THROW, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_throwStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterThrowStatement" ): + listener.enterThrowStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitThrowStatement" ): + listener.exitThrowStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitThrowStatement" ): + return visitor.visitThrowStatement(self) + else: + return visitor.visitChildren(self) + + + + + def throwStatement(self): + + localctx = JavaParser.ThrowStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 356, self.RULE_throwStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1970 + self.match(JavaParser.THROW) + self.state = 1971 + self.expression() + self.state = 1972 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SynchronizedStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SYNCHRONIZED(self): + return self.getToken(JavaParser.SYNCHRONIZED, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def block(self): + return self.getTypedRuleContext(JavaParser.BlockContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_synchronizedStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSynchronizedStatement" ): + listener.enterSynchronizedStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSynchronizedStatement" ): + listener.exitSynchronizedStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSynchronizedStatement" ): + return visitor.visitSynchronizedStatement(self) + else: + return visitor.visitChildren(self) + + + + + def synchronizedStatement(self): + + localctx = JavaParser.SynchronizedStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 358, self.RULE_synchronizedStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1974 + self.match(JavaParser.SYNCHRONIZED) + self.state = 1975 + self.match(JavaParser.LPAREN) + self.state = 1976 + self.expression() + self.state = 1977 + self.match(JavaParser.RPAREN) + self.state = 1978 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TryStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def TRY(self): + return self.getToken(JavaParser.TRY, 0) + + def block(self): + return self.getTypedRuleContext(JavaParser.BlockContext,0) + + + def catches(self): + return self.getTypedRuleContext(JavaParser.CatchesContext,0) + + + def finallyBlock(self): + return self.getTypedRuleContext(JavaParser.FinallyBlockContext,0) + + + def tryWithResourcesStatement(self): + return self.getTypedRuleContext(JavaParser.TryWithResourcesStatementContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_tryStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTryStatement" ): + listener.enterTryStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTryStatement" ): + listener.exitTryStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTryStatement" ): + return visitor.visitTryStatement(self) + else: + return visitor.visitChildren(self) + + + + + def tryStatement(self): + + localctx = JavaParser.TryStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 360, self.RULE_tryStatement) + self._la = 0 # Token type + try: + self.state = 1996 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,214,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1980 + self.match(JavaParser.TRY) + self.state = 1981 + self.block() + self.state = 1982 + self.catches() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1984 + self.match(JavaParser.TRY) + self.state = 1985 + self.block() + self.state = 1986 + self.finallyBlock() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1988 + self.match(JavaParser.TRY) + self.state = 1989 + self.block() + self.state = 1991 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==24: + self.state = 1990 + self.catches() + + + self.state = 1993 + self.finallyBlock() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1995 + self.tryWithResourcesStatement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CatchesContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def catchClause(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.CatchClauseContext) + else: + return self.getTypedRuleContext(JavaParser.CatchClauseContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_catches + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCatches" ): + listener.enterCatches(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCatches" ): + listener.exitCatches(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCatches" ): + return visitor.visitCatches(self) + else: + return visitor.visitChildren(self) + + + + + def catches(self): + + localctx = JavaParser.CatchesContext(self, self._ctx, self.state) + self.enterRule(localctx, 362, self.RULE_catches) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1998 + self.catchClause() + self.state = 2002 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==24: + self.state = 1999 + self.catchClause() + self.state = 2004 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CatchClauseContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def CATCH(self): + return self.getToken(JavaParser.CATCH, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def catchFormalParameter(self): + return self.getTypedRuleContext(JavaParser.CatchFormalParameterContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def block(self): + return self.getTypedRuleContext(JavaParser.BlockContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_catchClause + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCatchClause" ): + listener.enterCatchClause(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCatchClause" ): + listener.exitCatchClause(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCatchClause" ): + return visitor.visitCatchClause(self) + else: + return visitor.visitChildren(self) + + + + + def catchClause(self): + + localctx = JavaParser.CatchClauseContext(self, self._ctx, self.state) + self.enterRule(localctx, 364, self.RULE_catchClause) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2005 + self.match(JavaParser.CATCH) + self.state = 2006 + self.match(JavaParser.LPAREN) + self.state = 2007 + self.catchFormalParameter() + self.state = 2008 + self.match(JavaParser.RPAREN) + self.state = 2009 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CatchFormalParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def catchType(self): + return self.getTypedRuleContext(JavaParser.CatchTypeContext,0) + + + def variableDeclaratorId(self): + return self.getTypedRuleContext(JavaParser.VariableDeclaratorIdContext,0) + + + def variableModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.VariableModifierContext) + else: + return self.getTypedRuleContext(JavaParser.VariableModifierContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_catchFormalParameter + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCatchFormalParameter" ): + listener.enterCatchFormalParameter(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCatchFormalParameter" ): + listener.exitCatchFormalParameter(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCatchFormalParameter" ): + return visitor.visitCatchFormalParameter(self) + else: + return visitor.visitChildren(self) + + + + + def catchFormalParameter(self): + + localctx = JavaParser.CatchFormalParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 366, self.RULE_catchFormalParameter) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2014 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==35 or _la==86: + self.state = 2011 + self.variableModifier() + self.state = 2016 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2017 + self.catchType() + self.state = 2018 + self.variableDeclaratorId() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CatchTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannClassType(self): + return self.getTypedRuleContext(JavaParser.UnannClassTypeContext,0) + + + def BITOR(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.BITOR) + else: + return self.getToken(JavaParser.BITOR, i) + + def classType(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ClassTypeContext) + else: + return self.getTypedRuleContext(JavaParser.ClassTypeContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_catchType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCatchType" ): + listener.enterCatchType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCatchType" ): + listener.exitCatchType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCatchType" ): + return visitor.visitCatchType(self) + else: + return visitor.visitChildren(self) + + + + + def catchType(self): + + localctx = JavaParser.CatchTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 368, self.RULE_catchType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2020 + self.unannClassType() + self.state = 2025 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==109: + self.state = 2021 + self.match(JavaParser.BITOR) + self.state = 2022 + self.classType() + self.state = 2027 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FinallyBlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def FINALLY(self): + return self.getToken(JavaParser.FINALLY, 0) + + def block(self): + return self.getTypedRuleContext(JavaParser.BlockContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_finallyBlock + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFinallyBlock" ): + listener.enterFinallyBlock(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFinallyBlock" ): + listener.exitFinallyBlock(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFinallyBlock" ): + return visitor.visitFinallyBlock(self) + else: + return visitor.visitChildren(self) + + + + + def finallyBlock(self): + + localctx = JavaParser.FinallyBlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 370, self.RULE_finallyBlock) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2028 + self.match(JavaParser.FINALLY) + self.state = 2029 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TryWithResourcesStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def TRY(self): + return self.getToken(JavaParser.TRY, 0) + + def resourceSpecification(self): + return self.getTypedRuleContext(JavaParser.ResourceSpecificationContext,0) + + + def block(self): + return self.getTypedRuleContext(JavaParser.BlockContext,0) + + + def catches(self): + return self.getTypedRuleContext(JavaParser.CatchesContext,0) + + + def finallyBlock(self): + return self.getTypedRuleContext(JavaParser.FinallyBlockContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_tryWithResourcesStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTryWithResourcesStatement" ): + listener.enterTryWithResourcesStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTryWithResourcesStatement" ): + listener.exitTryWithResourcesStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTryWithResourcesStatement" ): + return visitor.visitTryWithResourcesStatement(self) + else: + return visitor.visitChildren(self) + + + + + def tryWithResourcesStatement(self): + + localctx = JavaParser.TryWithResourcesStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 372, self.RULE_tryWithResourcesStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2031 + self.match(JavaParser.TRY) + self.state = 2032 + self.resourceSpecification() + self.state = 2033 + self.block() + self.state = 2035 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==24: + self.state = 2034 + self.catches() + + + self.state = 2038 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==36: + self.state = 2037 + self.finallyBlock() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ResourceSpecificationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def resourceList(self): + return self.getTypedRuleContext(JavaParser.ResourceListContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_resourceSpecification + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterResourceSpecification" ): + listener.enterResourceSpecification(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitResourceSpecification" ): + listener.exitResourceSpecification(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitResourceSpecification" ): + return visitor.visitResourceSpecification(self) + else: + return visitor.visitChildren(self) + + + + + def resourceSpecification(self): + + localctx = JavaParser.ResourceSpecificationContext(self, self._ctx, self.state) + self.enterRule(localctx, 374, self.RULE_resourceSpecification) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2040 + self.match(JavaParser.LPAREN) + self.state = 2041 + self.resourceList() + self.state = 2043 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==82: + self.state = 2042 + self.match(JavaParser.SEMI) + + + self.state = 2045 + self.match(JavaParser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ResourceListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def resource(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ResourceContext) + else: + return self.getTypedRuleContext(JavaParser.ResourceContext,i) + + + def SEMI(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.SEMI) + else: + return self.getToken(JavaParser.SEMI, i) + + def getRuleIndex(self): + return JavaParser.RULE_resourceList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterResourceList" ): + listener.enterResourceList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitResourceList" ): + listener.exitResourceList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitResourceList" ): + return visitor.visitResourceList(self) + else: + return visitor.visitChildren(self) + + + + + def resourceList(self): + + localctx = JavaParser.ResourceListContext(self, self._ctx, self.state) + self.enterRule(localctx, 376, self.RULE_resourceList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2047 + self.resource() + self.state = 2052 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,221,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 2048 + self.match(JavaParser.SEMI) + self.state = 2049 + self.resource() + self.state = 2054 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,221,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ResourceContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def localVariableDeclaration(self): + return self.getTypedRuleContext(JavaParser.LocalVariableDeclarationContext,0) + + + def variableAccess(self): + return self.getTypedRuleContext(JavaParser.VariableAccessContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_resource + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterResource" ): + listener.enterResource(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitResource" ): + listener.exitResource(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitResource" ): + return visitor.visitResource(self) + else: + return visitor.visitChildren(self) + + + + + def resource(self): + + localctx = JavaParser.ResourceContext(self, self._ctx, self.state) + self.enterRule(localctx, 378, self.RULE_resource) + try: + self.state = 2057 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,222,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2055 + self.localVariableDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2056 + self.variableAccess() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableAccessContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expressionName(self): + return self.getTypedRuleContext(JavaParser.ExpressionNameContext,0) + + + def fieldAccess(self): + return self.getTypedRuleContext(JavaParser.FieldAccessContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_variableAccess + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVariableAccess" ): + listener.enterVariableAccess(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVariableAccess" ): + listener.exitVariableAccess(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableAccess" ): + return visitor.visitVariableAccess(self) + else: + return visitor.visitChildren(self) + + + + + def variableAccess(self): + + localctx = JavaParser.VariableAccessContext(self, self._ctx, self.state) + self.enterRule(localctx, 380, self.RULE_variableAccess) + try: + self.state = 2061 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,223,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2059 + self.expressionName() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2060 + self.fieldAccess() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class YieldStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def YIELD(self): + return self.getToken(JavaParser.YIELD, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def SEMI(self): + return self.getToken(JavaParser.SEMI, 0) + + def getRuleIndex(self): + return JavaParser.RULE_yieldStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterYieldStatement" ): + listener.enterYieldStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitYieldStatement" ): + listener.exitYieldStatement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitYieldStatement" ): + return visitor.visitYieldStatement(self) + else: + return visitor.visitChildren(self) + + + + + def yieldStatement(self): + + localctx = JavaParser.YieldStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 382, self.RULE_yieldStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2063 + self.match(JavaParser.YIELD) + self.state = 2064 + self.expression() + self.state = 2065 + self.match(JavaParser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PatternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typePattern(self): + return self.getTypedRuleContext(JavaParser.TypePatternContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_pattern + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPattern" ): + listener.enterPattern(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPattern" ): + listener.exitPattern(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPattern" ): + return visitor.visitPattern(self) + else: + return visitor.visitChildren(self) + + + + + def pattern(self): + + localctx = JavaParser.PatternContext(self, self._ctx, self.state) + self.enterRule(localctx, 384, self.RULE_pattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2067 + self.typePattern() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypePatternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def localVariableDeclaration(self): + return self.getTypedRuleContext(JavaParser.LocalVariableDeclarationContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_typePattern + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypePattern" ): + listener.enterTypePattern(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypePattern" ): + listener.exitTypePattern(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypePattern" ): + return visitor.visitTypePattern(self) + else: + return visitor.visitChildren(self) + + + + + def typePattern(self): + + localctx = JavaParser.TypePatternContext(self, self._ctx, self.state) + self.enterRule(localctx, 386, self.RULE_typePattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2069 + self.localVariableDeclaration() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def lambdaExpression(self): + return self.getTypedRuleContext(JavaParser.LambdaExpressionContext,0) + + + def assignmentExpression(self): + return self.getTypedRuleContext(JavaParser.AssignmentExpressionContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_expression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExpression" ): + listener.enterExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExpression" ): + listener.exitExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpression" ): + return visitor.visitExpression(self) + else: + return visitor.visitChildren(self) + + + + + def expression(self): + + localctx = JavaParser.ExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 388, self.RULE_expression) + try: + self.state = 2073 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,224,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2071 + self.lambdaExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2072 + self.assignmentExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PrimaryContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def primaryNoNewArray(self): + return self.getTypedRuleContext(JavaParser.PrimaryNoNewArrayContext,0) + + + def arrayCreationExpression(self): + return self.getTypedRuleContext(JavaParser.ArrayCreationExpressionContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_primary + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPrimary" ): + listener.enterPrimary(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPrimary" ): + listener.exitPrimary(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPrimary" ): + return visitor.visitPrimary(self) + else: + return visitor.visitChildren(self) + + + + + def primary(self): + + localctx = JavaParser.PrimaryContext(self, self._ctx, self.state) + self.enterRule(localctx, 390, self.RULE_primary) + try: + self.state = 2077 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,225,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2075 + self.primaryNoNewArray() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2076 + self.arrayCreationExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PrimaryNoNewArrayContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def literal(self): + return self.getTypedRuleContext(JavaParser.LiteralContext,0) + + + def pNNA(self): + return self.getTypedRuleContext(JavaParser.PNNAContext,0) + + + def classLiteral(self): + return self.getTypedRuleContext(JavaParser.ClassLiteralContext,0) + + + def THIS(self): + return self.getToken(JavaParser.THIS, 0) + + def typeName(self): + return self.getTypedRuleContext(JavaParser.TypeNameContext,0) + + + def DOT(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.DOT) + else: + return self.getToken(JavaParser.DOT, i) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def unqualifiedClassInstanceCreationExpression(self): + return self.getTypedRuleContext(JavaParser.UnqualifiedClassInstanceCreationExpressionContext,0) + + + def expressionName(self): + return self.getTypedRuleContext(JavaParser.ExpressionNameContext,0) + + + def arrayCreationExpression(self): + return self.getTypedRuleContext(JavaParser.ArrayCreationExpressionContext,0) + + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def SUPER(self): + return self.getToken(JavaParser.SUPER, 0) + + def LBRACK(self): + return self.getToken(JavaParser.LBRACK, 0) + + def RBRACK(self): + return self.getToken(JavaParser.RBRACK, 0) + + def arrayCreationExpressionWithInitializer(self): + return self.getTypedRuleContext(JavaParser.ArrayCreationExpressionWithInitializerContext,0) + + + def methodName(self): + return self.getTypedRuleContext(JavaParser.MethodNameContext,0) + + + def argumentList(self): + return self.getTypedRuleContext(JavaParser.ArgumentListContext,0) + + + def typeArguments(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentsContext,0) + + + def COLONCOLON(self): + return self.getToken(JavaParser.COLONCOLON, 0) + + def referenceType(self): + return self.getTypedRuleContext(JavaParser.ReferenceTypeContext,0) + + + def classType(self): + return self.getTypedRuleContext(JavaParser.ClassTypeContext,0) + + + def NEW(self): + return self.getToken(JavaParser.NEW, 0) + + def arrayType(self): + return self.getTypedRuleContext(JavaParser.ArrayTypeContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_primaryNoNewArray + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPrimaryNoNewArray" ): + listener.enterPrimaryNoNewArray(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPrimaryNoNewArray" ): + listener.exitPrimaryNoNewArray(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPrimaryNoNewArray" ): + return visitor.visitPrimaryNoNewArray(self) + else: + return visitor.visitChildren(self) + + + + + def primaryNoNewArray(self): + + localctx = JavaParser.PrimaryNoNewArrayContext(self, self._ctx, self.state) + self.enterRule(localctx, 392, self.RULE_primaryNoNewArray) + self._la = 0 # Token type + try: + self.state = 2296 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,269,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2079 + self.literal() + self.state = 2081 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,226,self._ctx) + if la_ == 1: + self.state = 2080 + self.pNNA() + + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2083 + self.classLiteral() + self.state = 2085 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,227,self._ctx) + if la_ == 1: + self.state = 2084 + self.pNNA() + + + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2087 + self.match(JavaParser.THIS) + self.state = 2089 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,228,self._ctx) + if la_ == 1: + self.state = 2088 + self.pNNA() + + + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2091 + self.typeName() + self.state = 2092 + self.match(JavaParser.DOT) + self.state = 2093 + self.match(JavaParser.THIS) + self.state = 2095 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,229,self._ctx) + if la_ == 1: + self.state = 2094 + self.pNNA() + + + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2097 + self.match(JavaParser.LPAREN) + self.state = 2098 + self.expression() + self.state = 2099 + self.match(JavaParser.RPAREN) + self.state = 2101 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,230,self._ctx) + if la_ == 1: + self.state = 2100 + self.pNNA() + + + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 2103 + self.unqualifiedClassInstanceCreationExpression() + self.state = 2105 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,231,self._ctx) + if la_ == 1: + self.state = 2104 + self.pNNA() + + + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 2107 + self.expressionName() + self.state = 2108 + self.match(JavaParser.DOT) + self.state = 2109 + self.unqualifiedClassInstanceCreationExpression() + self.state = 2111 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,232,self._ctx) + if la_ == 1: + self.state = 2110 + self.pNNA() + + + pass + + elif la_ == 8: + self.enterOuterAlt(localctx, 8) + self.state = 2113 + self.arrayCreationExpression() + self.state = 2114 + self.match(JavaParser.DOT) + self.state = 2115 + self.unqualifiedClassInstanceCreationExpression() + self.state = 2117 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,233,self._ctx) + if la_ == 1: + self.state = 2116 + self.pNNA() + + + pass + + elif la_ == 9: + self.enterOuterAlt(localctx, 9) + self.state = 2119 + self.arrayCreationExpression() + self.state = 2120 + self.match(JavaParser.DOT) + self.state = 2121 + self.match(JavaParser.Identifier) + self.state = 2123 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,234,self._ctx) + if la_ == 1: + self.state = 2122 + self.pNNA() + + + pass + + elif la_ == 10: + self.enterOuterAlt(localctx, 10) + self.state = 2125 + self.match(JavaParser.SUPER) + self.state = 2126 + self.match(JavaParser.DOT) + self.state = 2127 + self.match(JavaParser.Identifier) + self.state = 2129 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,235,self._ctx) + if la_ == 1: + self.state = 2128 + self.pNNA() + + + pass + + elif la_ == 11: + self.enterOuterAlt(localctx, 11) + self.state = 2131 + self.typeName() + self.state = 2132 + self.match(JavaParser.DOT) + self.state = 2133 + self.match(JavaParser.SUPER) + self.state = 2134 + self.match(JavaParser.DOT) + self.state = 2135 + self.match(JavaParser.Identifier) + self.state = 2137 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,236,self._ctx) + if la_ == 1: + self.state = 2136 + self.pNNA() + + + pass + + elif la_ == 12: + self.enterOuterAlt(localctx, 12) + self.state = 2139 + self.expressionName() + self.state = 2140 + self.match(JavaParser.LBRACK) + self.state = 2141 + self.expression() + self.state = 2142 + self.match(JavaParser.RBRACK) + self.state = 2144 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,237,self._ctx) + if la_ == 1: + self.state = 2143 + self.pNNA() + + + pass + + elif la_ == 13: + self.enterOuterAlt(localctx, 13) + self.state = 2146 + self.arrayCreationExpressionWithInitializer() + self.state = 2147 + self.match(JavaParser.LBRACK) + self.state = 2148 + self.expression() + self.state = 2149 + self.match(JavaParser.RBRACK) + self.state = 2151 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,238,self._ctx) + if la_ == 1: + self.state = 2150 + self.pNNA() + + + pass + + elif la_ == 14: + self.enterOuterAlt(localctx, 14) + self.state = 2153 + self.methodName() + self.state = 2154 + self.match(JavaParser.LPAREN) + self.state = 2156 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2155 + self.argumentList() + + + self.state = 2158 + self.match(JavaParser.RPAREN) + self.state = 2160 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,240,self._ctx) + if la_ == 1: + self.state = 2159 + self.pNNA() + + + pass + + elif la_ == 15: + self.enterOuterAlt(localctx, 15) + self.state = 2162 + self.typeName() + self.state = 2163 + self.match(JavaParser.DOT) + self.state = 2165 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2164 + self.typeArguments() + + + self.state = 2167 + self.match(JavaParser.Identifier) + self.state = 2168 + self.match(JavaParser.LPAREN) + self.state = 2170 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2169 + self.argumentList() + + + self.state = 2172 + self.match(JavaParser.RPAREN) + self.state = 2174 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,243,self._ctx) + if la_ == 1: + self.state = 2173 + self.pNNA() + + + pass + + elif la_ == 16: + self.enterOuterAlt(localctx, 16) + self.state = 2176 + self.expressionName() + self.state = 2177 + self.match(JavaParser.DOT) + self.state = 2179 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2178 + self.typeArguments() + + + self.state = 2181 + self.match(JavaParser.Identifier) + self.state = 2182 + self.match(JavaParser.LPAREN) + self.state = 2184 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2183 + self.argumentList() + + + self.state = 2186 + self.match(JavaParser.RPAREN) + self.state = 2188 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,246,self._ctx) + if la_ == 1: + self.state = 2187 + self.pNNA() + + + pass + + elif la_ == 17: + self.enterOuterAlt(localctx, 17) + self.state = 2190 + self.arrayCreationExpression() + self.state = 2191 + self.match(JavaParser.DOT) + self.state = 2193 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2192 + self.typeArguments() + + + self.state = 2195 + self.match(JavaParser.Identifier) + self.state = 2196 + self.match(JavaParser.LPAREN) + self.state = 2198 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2197 + self.argumentList() + + + self.state = 2200 + self.match(JavaParser.RPAREN) + self.state = 2202 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,249,self._ctx) + if la_ == 1: + self.state = 2201 + self.pNNA() + + + pass + + elif la_ == 18: + self.enterOuterAlt(localctx, 18) + self.state = 2204 + self.match(JavaParser.SUPER) + self.state = 2205 + self.match(JavaParser.DOT) + self.state = 2207 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2206 + self.typeArguments() + + + self.state = 2209 + self.match(JavaParser.Identifier) + self.state = 2210 + self.match(JavaParser.LPAREN) + self.state = 2212 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2211 + self.argumentList() + + + self.state = 2214 + self.match(JavaParser.RPAREN) + self.state = 2216 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,252,self._ctx) + if la_ == 1: + self.state = 2215 + self.pNNA() + + + pass + + elif la_ == 19: + self.enterOuterAlt(localctx, 19) + self.state = 2218 + self.typeName() + self.state = 2219 + self.match(JavaParser.DOT) + self.state = 2220 + self.match(JavaParser.SUPER) + self.state = 2221 + self.match(JavaParser.DOT) + self.state = 2223 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2222 + self.typeArguments() + + + self.state = 2225 + self.match(JavaParser.Identifier) + self.state = 2226 + self.match(JavaParser.LPAREN) + self.state = 2228 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2227 + self.argumentList() + + + self.state = 2230 + self.match(JavaParser.RPAREN) + self.state = 2232 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,255,self._ctx) + if la_ == 1: + self.state = 2231 + self.pNNA() + + + pass + + elif la_ == 20: + self.enterOuterAlt(localctx, 20) + self.state = 2234 + self.expressionName() + self.state = 2235 + self.match(JavaParser.COLONCOLON) + self.state = 2237 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2236 + self.typeArguments() + + + self.state = 2239 + self.match(JavaParser.Identifier) + self.state = 2241 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,257,self._ctx) + if la_ == 1: + self.state = 2240 + self.pNNA() + + + pass + + elif la_ == 21: + self.enterOuterAlt(localctx, 21) + self.state = 2243 + self.arrayCreationExpression() + self.state = 2244 + self.match(JavaParser.COLONCOLON) + self.state = 2246 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2245 + self.typeArguments() + + + self.state = 2248 + self.match(JavaParser.Identifier) + self.state = 2250 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,259,self._ctx) + if la_ == 1: + self.state = 2249 + self.pNNA() + + + pass + + elif la_ == 22: + self.enterOuterAlt(localctx, 22) + self.state = 2252 + self.referenceType() + self.state = 2253 + self.match(JavaParser.COLONCOLON) + self.state = 2255 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2254 + self.typeArguments() + + + self.state = 2257 + self.match(JavaParser.Identifier) + self.state = 2259 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,261,self._ctx) + if la_ == 1: + self.state = 2258 + self.pNNA() + + + pass + + elif la_ == 23: + self.enterOuterAlt(localctx, 23) + self.state = 2261 + self.match(JavaParser.SUPER) + self.state = 2262 + self.match(JavaParser.COLONCOLON) + self.state = 2264 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2263 + self.typeArguments() + + + self.state = 2266 + self.match(JavaParser.Identifier) + self.state = 2268 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,263,self._ctx) + if la_ == 1: + self.state = 2267 + self.pNNA() + + + pass + + elif la_ == 24: + self.enterOuterAlt(localctx, 24) + self.state = 2270 + self.typeName() + self.state = 2271 + self.match(JavaParser.DOT) + self.state = 2272 + self.match(JavaParser.SUPER) + self.state = 2273 + self.match(JavaParser.COLONCOLON) + self.state = 2275 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2274 + self.typeArguments() + + + self.state = 2277 + self.match(JavaParser.Identifier) + self.state = 2279 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,265,self._ctx) + if la_ == 1: + self.state = 2278 + self.pNNA() + + + pass + + elif la_ == 25: + self.enterOuterAlt(localctx, 25) + self.state = 2281 + self.classType() + self.state = 2282 + self.match(JavaParser.COLONCOLON) + self.state = 2284 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2283 + self.typeArguments() + + + self.state = 2286 + self.match(JavaParser.NEW) + self.state = 2288 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,267,self._ctx) + if la_ == 1: + self.state = 2287 + self.pNNA() + + + pass + + elif la_ == 26: + self.enterOuterAlt(localctx, 26) + self.state = 2290 + self.arrayType() + self.state = 2291 + self.match(JavaParser.COLONCOLON) + self.state = 2292 + self.match(JavaParser.NEW) + self.state = 2294 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,268,self._ctx) + if la_ == 1: + self.state = 2293 + self.pNNA() + + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PNNAContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def unqualifiedClassInstanceCreationExpression(self): + return self.getTypedRuleContext(JavaParser.UnqualifiedClassInstanceCreationExpressionContext,0) + + + def pNNA(self): + return self.getTypedRuleContext(JavaParser.PNNAContext,0) + + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def LBRACK(self): + return self.getToken(JavaParser.LBRACK, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RBRACK(self): + return self.getToken(JavaParser.RBRACK, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def typeArguments(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentsContext,0) + + + def argumentList(self): + return self.getTypedRuleContext(JavaParser.ArgumentListContext,0) + + + def COLONCOLON(self): + return self.getToken(JavaParser.COLONCOLON, 0) + + def getRuleIndex(self): + return JavaParser.RULE_pNNA + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPNNA" ): + listener.enterPNNA(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPNNA" ): + listener.exitPNNA(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPNNA" ): + return visitor.visitPNNA(self) + else: + return visitor.visitChildren(self) + + + + + def pNNA(self): + + localctx = JavaParser.PNNAContext(self, self._ctx, self.state) + self.enterRule(localctx, 394, self.RULE_pNNA) + self._la = 0 # Token type + try: + self.state = 2335 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,278,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2298 + self.match(JavaParser.DOT) + self.state = 2299 + self.unqualifiedClassInstanceCreationExpression() + self.state = 2301 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,270,self._ctx) + if la_ == 1: + self.state = 2300 + self.pNNA() + + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2303 + self.match(JavaParser.DOT) + self.state = 2304 + self.match(JavaParser.Identifier) + self.state = 2306 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,271,self._ctx) + if la_ == 1: + self.state = 2305 + self.pNNA() + + + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2308 + self.match(JavaParser.LBRACK) + self.state = 2309 + self.expression() + self.state = 2310 + self.match(JavaParser.RBRACK) + self.state = 2312 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,272,self._ctx) + if la_ == 1: + self.state = 2311 + self.pNNA() + + + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2314 + self.match(JavaParser.DOT) + self.state = 2316 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2315 + self.typeArguments() + + + self.state = 2318 + self.match(JavaParser.Identifier) + self.state = 2319 + self.match(JavaParser.LPAREN) + self.state = 2321 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2320 + self.argumentList() + + + self.state = 2323 + self.match(JavaParser.RPAREN) + self.state = 2325 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,275,self._ctx) + if la_ == 1: + self.state = 2324 + self.pNNA() + + + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2327 + self.match(JavaParser.COLONCOLON) + self.state = 2329 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2328 + self.typeArguments() + + + self.state = 2331 + self.match(JavaParser.Identifier) + self.state = 2333 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,277,self._ctx) + if la_ == 1: + self.state = 2332 + self.pNNA() + + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeName(self): + return self.getTypedRuleContext(JavaParser.TypeNameContext,0) + + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def CLASS(self): + return self.getToken(JavaParser.CLASS, 0) + + def LBRACK(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.LBRACK) + else: + return self.getToken(JavaParser.LBRACK, i) + + def RBRACK(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.RBRACK) + else: + return self.getToken(JavaParser.RBRACK, i) + + def numericType(self): + return self.getTypedRuleContext(JavaParser.NumericTypeContext,0) + + + def BOOLEAN(self): + return self.getToken(JavaParser.BOOLEAN, 0) + + def VOID(self): + return self.getToken(JavaParser.VOID, 0) + + def getRuleIndex(self): + return JavaParser.RULE_classLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassLiteral" ): + listener.enterClassLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassLiteral" ): + listener.exitClassLiteral(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassLiteral" ): + return visitor.visitClassLiteral(self) + else: + return visitor.visitChildren(self) + + + + + def classLiteral(self): + + localctx = JavaParser.ClassLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 396, self.RULE_classLiteral) + self._la = 0 # Token type + try: + self.state = 2372 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [123]: + self.enterOuterAlt(localctx, 1) + self.state = 2337 + self.typeName() + self.state = 2342 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==80: + self.state = 2338 + self.match(JavaParser.LBRACK) + self.state = 2339 + self.match(JavaParser.RBRACK) + self.state = 2344 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2345 + self.match(JavaParser.DOT) + self.state = 2346 + self.match(JavaParser.CLASS) + pass + elif token in [22, 25, 31, 37, 44, 46, 54]: + self.enterOuterAlt(localctx, 2) + self.state = 2348 + self.numericType() + self.state = 2353 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==80: + self.state = 2349 + self.match(JavaParser.LBRACK) + self.state = 2350 + self.match(JavaParser.RBRACK) + self.state = 2355 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2356 + self.match(JavaParser.DOT) + self.state = 2357 + self.match(JavaParser.CLASS) + pass + elif token in [20]: + self.enterOuterAlt(localctx, 3) + self.state = 2359 + self.match(JavaParser.BOOLEAN) + self.state = 2364 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==80: + self.state = 2360 + self.match(JavaParser.LBRACK) + self.state = 2361 + self.match(JavaParser.RBRACK) + self.state = 2366 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2367 + self.match(JavaParser.DOT) + self.state = 2368 + self.match(JavaParser.CLASS) + pass + elif token in [65]: + self.enterOuterAlt(localctx, 4) + self.state = 2369 + self.match(JavaParser.VOID) + self.state = 2370 + self.match(JavaParser.DOT) + self.state = 2371 + self.match(JavaParser.CLASS) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassInstanceCreationExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unqualifiedClassInstanceCreationExpression(self): + return self.getTypedRuleContext(JavaParser.UnqualifiedClassInstanceCreationExpressionContext,0) + + + def expressionName(self): + return self.getTypedRuleContext(JavaParser.ExpressionNameContext,0) + + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def primary(self): + return self.getTypedRuleContext(JavaParser.PrimaryContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_classInstanceCreationExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassInstanceCreationExpression" ): + listener.enterClassInstanceCreationExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassInstanceCreationExpression" ): + listener.exitClassInstanceCreationExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassInstanceCreationExpression" ): + return visitor.visitClassInstanceCreationExpression(self) + else: + return visitor.visitChildren(self) + + + + + def classInstanceCreationExpression(self): + + localctx = JavaParser.ClassInstanceCreationExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 398, self.RULE_classInstanceCreationExpression) + try: + self.state = 2383 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,283,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2374 + self.unqualifiedClassInstanceCreationExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2375 + self.expressionName() + self.state = 2376 + self.match(JavaParser.DOT) + self.state = 2377 + self.unqualifiedClassInstanceCreationExpression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2379 + self.primary() + self.state = 2380 + self.match(JavaParser.DOT) + self.state = 2381 + self.unqualifiedClassInstanceCreationExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnqualifiedClassInstanceCreationExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def NEW(self): + return self.getToken(JavaParser.NEW, 0) + + def classOrInterfaceTypeToInstantiate(self): + return self.getTypedRuleContext(JavaParser.ClassOrInterfaceTypeToInstantiateContext,0) + + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def typeArguments(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentsContext,0) + + + def argumentList(self): + return self.getTypedRuleContext(JavaParser.ArgumentListContext,0) + + + def classBody(self): + return self.getTypedRuleContext(JavaParser.ClassBodyContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_unqualifiedClassInstanceCreationExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnqualifiedClassInstanceCreationExpression" ): + listener.enterUnqualifiedClassInstanceCreationExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnqualifiedClassInstanceCreationExpression" ): + listener.exitUnqualifiedClassInstanceCreationExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnqualifiedClassInstanceCreationExpression" ): + return visitor.visitUnqualifiedClassInstanceCreationExpression(self) + else: + return visitor.visitChildren(self) + + + + + def unqualifiedClassInstanceCreationExpression(self): + + localctx = JavaParser.UnqualifiedClassInstanceCreationExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 400, self.RULE_unqualifiedClassInstanceCreationExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2385 + self.match(JavaParser.NEW) + self.state = 2387 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2386 + self.typeArguments() + + + self.state = 2389 + self.classOrInterfaceTypeToInstantiate() + self.state = 2390 + self.match(JavaParser.LPAREN) + self.state = 2392 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2391 + self.argumentList() + + + self.state = 2394 + self.match(JavaParser.RPAREN) + self.state = 2396 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,286,self._ctx) + if la_ == 1: + self.state = 2395 + self.classBody() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassOrInterfaceTypeToInstantiateContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.Identifier) + else: + return self.getToken(JavaParser.Identifier, i) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def DOT(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.DOT) + else: + return self.getToken(JavaParser.DOT, i) + + def typeArgumentsOrDiamond(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentsOrDiamondContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_classOrInterfaceTypeToInstantiate + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassOrInterfaceTypeToInstantiate" ): + listener.enterClassOrInterfaceTypeToInstantiate(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassOrInterfaceTypeToInstantiate" ): + listener.exitClassOrInterfaceTypeToInstantiate(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassOrInterfaceTypeToInstantiate" ): + return visitor.visitClassOrInterfaceTypeToInstantiate(self) + else: + return visitor.visitChildren(self) + + + + + def classOrInterfaceTypeToInstantiate(self): + + localctx = JavaParser.ClassOrInterfaceTypeToInstantiateContext(self, self._ctx, self.state) + self.enterRule(localctx, 402, self.RULE_classOrInterfaceTypeToInstantiate) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2401 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 2398 + self.annotation() + self.state = 2403 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2404 + self.match(JavaParser.Identifier) + self.state = 2415 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==84: + self.state = 2405 + self.match(JavaParser.DOT) + self.state = 2409 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 2406 + self.annotation() + self.state = 2411 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2412 + self.match(JavaParser.Identifier) + self.state = 2417 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2419 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==4 or _la==90: + self.state = 2418 + self.typeArgumentsOrDiamond() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeArgumentsOrDiamondContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeArguments(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentsContext,0) + + + def OACA(self): + return self.getToken(JavaParser.OACA, 0) + + def getRuleIndex(self): + return JavaParser.RULE_typeArgumentsOrDiamond + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeArgumentsOrDiamond" ): + listener.enterTypeArgumentsOrDiamond(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeArgumentsOrDiamond" ): + listener.exitTypeArgumentsOrDiamond(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeArgumentsOrDiamond" ): + return visitor.visitTypeArgumentsOrDiamond(self) + else: + return visitor.visitChildren(self) + + + + + def typeArgumentsOrDiamond(self): + + localctx = JavaParser.TypeArgumentsOrDiamondContext(self, self._ctx, self.state) + self.enterRule(localctx, 404, self.RULE_typeArgumentsOrDiamond) + try: + self.state = 2423 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [90]: + self.enterOuterAlt(localctx, 1) + self.state = 2421 + self.typeArguments() + pass + elif token in [4]: + self.enterOuterAlt(localctx, 2) + self.state = 2422 + self.match(JavaParser.OACA) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrayCreationExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def arrayCreationExpressionWithoutInitializer(self): + return self.getTypedRuleContext(JavaParser.ArrayCreationExpressionWithoutInitializerContext,0) + + + def arrayCreationExpressionWithInitializer(self): + return self.getTypedRuleContext(JavaParser.ArrayCreationExpressionWithInitializerContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_arrayCreationExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArrayCreationExpression" ): + listener.enterArrayCreationExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArrayCreationExpression" ): + listener.exitArrayCreationExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArrayCreationExpression" ): + return visitor.visitArrayCreationExpression(self) + else: + return visitor.visitChildren(self) + + + + + def arrayCreationExpression(self): + + localctx = JavaParser.ArrayCreationExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 406, self.RULE_arrayCreationExpression) + try: + self.state = 2427 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,292,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2425 + self.arrayCreationExpressionWithoutInitializer() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2426 + self.arrayCreationExpressionWithInitializer() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrayCreationExpressionWithoutInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def NEW(self): + return self.getToken(JavaParser.NEW, 0) + + def primitiveType(self): + return self.getTypedRuleContext(JavaParser.PrimitiveTypeContext,0) + + + def dimExprs(self): + return self.getTypedRuleContext(JavaParser.DimExprsContext,0) + + + def dims(self): + return self.getTypedRuleContext(JavaParser.DimsContext,0) + + + def classType(self): + return self.getTypedRuleContext(JavaParser.ClassTypeContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_arrayCreationExpressionWithoutInitializer + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArrayCreationExpressionWithoutInitializer" ): + listener.enterArrayCreationExpressionWithoutInitializer(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArrayCreationExpressionWithoutInitializer" ): + listener.exitArrayCreationExpressionWithoutInitializer(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArrayCreationExpressionWithoutInitializer" ): + return visitor.visitArrayCreationExpressionWithoutInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def arrayCreationExpressionWithoutInitializer(self): + + localctx = JavaParser.ArrayCreationExpressionWithoutInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 408, self.RULE_arrayCreationExpressionWithoutInitializer) + try: + self.state = 2441 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,295,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2429 + self.match(JavaParser.NEW) + self.state = 2430 + self.primitiveType() + self.state = 2431 + self.dimExprs() + self.state = 2433 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,293,self._ctx) + if la_ == 1: + self.state = 2432 + self.dims() + + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2435 + self.match(JavaParser.NEW) + self.state = 2436 + self.classType() + self.state = 2437 + self.dimExprs() + self.state = 2439 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,294,self._ctx) + if la_ == 1: + self.state = 2438 + self.dims() + + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrayCreationExpressionWithInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def NEW(self): + return self.getToken(JavaParser.NEW, 0) + + def primitiveType(self): + return self.getTypedRuleContext(JavaParser.PrimitiveTypeContext,0) + + + def dims(self): + return self.getTypedRuleContext(JavaParser.DimsContext,0) + + + def arrayInitializer(self): + return self.getTypedRuleContext(JavaParser.ArrayInitializerContext,0) + + + def classOrInterfaceType(self): + return self.getTypedRuleContext(JavaParser.ClassOrInterfaceTypeContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_arrayCreationExpressionWithInitializer + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArrayCreationExpressionWithInitializer" ): + listener.enterArrayCreationExpressionWithInitializer(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArrayCreationExpressionWithInitializer" ): + listener.exitArrayCreationExpressionWithInitializer(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArrayCreationExpressionWithInitializer" ): + return visitor.visitArrayCreationExpressionWithInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def arrayCreationExpressionWithInitializer(self): + + localctx = JavaParser.ArrayCreationExpressionWithInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 410, self.RULE_arrayCreationExpressionWithInitializer) + try: + self.state = 2453 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,296,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2443 + self.match(JavaParser.NEW) + self.state = 2444 + self.primitiveType() + self.state = 2445 + self.dims() + self.state = 2446 + self.arrayInitializer() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2448 + self.match(JavaParser.NEW) + self.state = 2449 + self.classOrInterfaceType() + self.state = 2450 + self.dims() + self.state = 2451 + self.arrayInitializer() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DimExprsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def dimExpr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.DimExprContext) + else: + return self.getTypedRuleContext(JavaParser.DimExprContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_dimExprs + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterDimExprs" ): + listener.enterDimExprs(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitDimExprs" ): + listener.exitDimExprs(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDimExprs" ): + return visitor.visitDimExprs(self) + else: + return visitor.visitChildren(self) + + + + + def dimExprs(self): + + localctx = JavaParser.DimExprsContext(self, self._ctx, self.state) + self.enterRule(localctx, 412, self.RULE_dimExprs) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2455 + self.dimExpr() + self.state = 2459 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,297,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 2456 + self.dimExpr() + self.state = 2461 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,297,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DimExprContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACK(self): + return self.getToken(JavaParser.LBRACK, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RBRACK(self): + return self.getToken(JavaParser.RBRACK, 0) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AnnotationContext) + else: + return self.getTypedRuleContext(JavaParser.AnnotationContext,i) + + + def getRuleIndex(self): + return JavaParser.RULE_dimExpr + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterDimExpr" ): + listener.enterDimExpr(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitDimExpr" ): + listener.exitDimExpr(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDimExpr" ): + return visitor.visitDimExpr(self) + else: + return visitor.visitChildren(self) + + + + + def dimExpr(self): + + localctx = JavaParser.DimExprContext(self, self._ctx, self.state) + self.enterRule(localctx, 414, self.RULE_dimExpr) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2465 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 2462 + self.annotation() + self.state = 2467 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2468 + self.match(JavaParser.LBRACK) + self.state = 2469 + self.expression() + self.state = 2470 + self.match(JavaParser.RBRACK) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrayAccessContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expressionName(self): + return self.getTypedRuleContext(JavaParser.ExpressionNameContext,0) + + + def LBRACK(self): + return self.getToken(JavaParser.LBRACK, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RBRACK(self): + return self.getToken(JavaParser.RBRACK, 0) + + def primaryNoNewArray(self): + return self.getTypedRuleContext(JavaParser.PrimaryNoNewArrayContext,0) + + + def arrayCreationExpressionWithInitializer(self): + return self.getTypedRuleContext(JavaParser.ArrayCreationExpressionWithInitializerContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_arrayAccess + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArrayAccess" ): + listener.enterArrayAccess(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArrayAccess" ): + listener.exitArrayAccess(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArrayAccess" ): + return visitor.visitArrayAccess(self) + else: + return visitor.visitChildren(self) + + + + + def arrayAccess(self): + + localctx = JavaParser.ArrayAccessContext(self, self._ctx, self.state) + self.enterRule(localctx, 416, self.RULE_arrayAccess) + try: + self.state = 2487 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,299,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2472 + self.expressionName() + self.state = 2473 + self.match(JavaParser.LBRACK) + self.state = 2474 + self.expression() + self.state = 2475 + self.match(JavaParser.RBRACK) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2477 + self.primaryNoNewArray() + self.state = 2478 + self.match(JavaParser.LBRACK) + self.state = 2479 + self.expression() + self.state = 2480 + self.match(JavaParser.RBRACK) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2482 + self.arrayCreationExpressionWithInitializer() + self.state = 2483 + self.match(JavaParser.LBRACK) + self.state = 2484 + self.expression() + self.state = 2485 + self.match(JavaParser.RBRACK) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FieldAccessContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def primary(self): + return self.getTypedRuleContext(JavaParser.PrimaryContext,0) + + + def DOT(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.DOT) + else: + return self.getToken(JavaParser.DOT, i) + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def SUPER(self): + return self.getToken(JavaParser.SUPER, 0) + + def typeName(self): + return self.getTypedRuleContext(JavaParser.TypeNameContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_fieldAccess + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFieldAccess" ): + listener.enterFieldAccess(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFieldAccess" ): + listener.exitFieldAccess(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFieldAccess" ): + return visitor.visitFieldAccess(self) + else: + return visitor.visitChildren(self) + + + + + def fieldAccess(self): + + localctx = JavaParser.FieldAccessContext(self, self._ctx, self.state) + self.enterRule(localctx, 418, self.RULE_fieldAccess) + try: + self.state = 2502 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,300,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2489 + self.primary() + self.state = 2490 + self.match(JavaParser.DOT) + self.state = 2491 + self.match(JavaParser.Identifier) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2493 + self.match(JavaParser.SUPER) + self.state = 2494 + self.match(JavaParser.DOT) + self.state = 2495 + self.match(JavaParser.Identifier) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2496 + self.typeName() + self.state = 2497 + self.match(JavaParser.DOT) + self.state = 2498 + self.match(JavaParser.SUPER) + self.state = 2499 + self.match(JavaParser.DOT) + self.state = 2500 + self.match(JavaParser.Identifier) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodInvocationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def methodName(self): + return self.getTypedRuleContext(JavaParser.MethodNameContext,0) + + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def argumentList(self): + return self.getTypedRuleContext(JavaParser.ArgumentListContext,0) + + + def typeName(self): + return self.getTypedRuleContext(JavaParser.TypeNameContext,0) + + + def DOT(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.DOT) + else: + return self.getToken(JavaParser.DOT, i) + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def typeArguments(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentsContext,0) + + + def expressionName(self): + return self.getTypedRuleContext(JavaParser.ExpressionNameContext,0) + + + def primary(self): + return self.getTypedRuleContext(JavaParser.PrimaryContext,0) + + + def SUPER(self): + return self.getToken(JavaParser.SUPER, 0) + + def getRuleIndex(self): + return JavaParser.RULE_methodInvocation + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMethodInvocation" ): + listener.enterMethodInvocation(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMethodInvocation" ): + listener.exitMethodInvocation(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodInvocation" ): + return visitor.visitMethodInvocation(self) + else: + return visitor.visitChildren(self) + + + + + def methodInvocation(self): + + localctx = JavaParser.MethodInvocationContext(self, self._ctx, self.state) + self.enterRule(localctx, 420, self.RULE_methodInvocation) + self._la = 0 # Token type + try: + self.state = 2572 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,312,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2504 + self.methodName() + self.state = 2505 + self.match(JavaParser.LPAREN) + self.state = 2507 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2506 + self.argumentList() + + + self.state = 2509 + self.match(JavaParser.RPAREN) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2511 + self.typeName() + self.state = 2512 + self.match(JavaParser.DOT) + self.state = 2514 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2513 + self.typeArguments() + + + self.state = 2516 + self.match(JavaParser.Identifier) + self.state = 2517 + self.match(JavaParser.LPAREN) + self.state = 2519 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2518 + self.argumentList() + + + self.state = 2521 + self.match(JavaParser.RPAREN) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2523 + self.expressionName() + self.state = 2524 + self.match(JavaParser.DOT) + self.state = 2526 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2525 + self.typeArguments() + + + self.state = 2528 + self.match(JavaParser.Identifier) + self.state = 2529 + self.match(JavaParser.LPAREN) + self.state = 2531 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2530 + self.argumentList() + + + self.state = 2533 + self.match(JavaParser.RPAREN) + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2535 + self.primary() + self.state = 2536 + self.match(JavaParser.DOT) + self.state = 2538 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2537 + self.typeArguments() + + + self.state = 2540 + self.match(JavaParser.Identifier) + self.state = 2541 + self.match(JavaParser.LPAREN) + self.state = 2543 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2542 + self.argumentList() + + + self.state = 2545 + self.match(JavaParser.RPAREN) + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2547 + self.match(JavaParser.SUPER) + self.state = 2548 + self.match(JavaParser.DOT) + self.state = 2550 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2549 + self.typeArguments() + + + self.state = 2552 + self.match(JavaParser.Identifier) + self.state = 2553 + self.match(JavaParser.LPAREN) + self.state = 2555 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2554 + self.argumentList() + + + self.state = 2557 + self.match(JavaParser.RPAREN) + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 2558 + self.typeName() + self.state = 2559 + self.match(JavaParser.DOT) + self.state = 2560 + self.match(JavaParser.SUPER) + self.state = 2561 + self.match(JavaParser.DOT) + self.state = 2563 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2562 + self.typeArguments() + + + self.state = 2565 + self.match(JavaParser.Identifier) + self.state = 2566 + self.match(JavaParser.LPAREN) + self.state = 2568 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2567 + self.argumentList() + + + self.state = 2570 + self.match(JavaParser.RPAREN) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArgumentListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.ExpressionContext) + else: + return self.getTypedRuleContext(JavaParser.ExpressionContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def getRuleIndex(self): + return JavaParser.RULE_argumentList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArgumentList" ): + listener.enterArgumentList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArgumentList" ): + listener.exitArgumentList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArgumentList" ): + return visitor.visitArgumentList(self) + else: + return visitor.visitChildren(self) + + + + + def argumentList(self): + + localctx = JavaParser.ArgumentListContext(self, self._ctx, self.state) + self.enterRule(localctx, 422, self.RULE_argumentList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2574 + self.expression() + self.state = 2579 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 2575 + self.match(JavaParser.COMMA) + self.state = 2576 + self.expression() + self.state = 2581 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodReferenceContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expressionName(self): + return self.getTypedRuleContext(JavaParser.ExpressionNameContext,0) + + + def COLONCOLON(self): + return self.getToken(JavaParser.COLONCOLON, 0) + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def typeArguments(self): + return self.getTypedRuleContext(JavaParser.TypeArgumentsContext,0) + + + def primary(self): + return self.getTypedRuleContext(JavaParser.PrimaryContext,0) + + + def referenceType(self): + return self.getTypedRuleContext(JavaParser.ReferenceTypeContext,0) + + + def SUPER(self): + return self.getToken(JavaParser.SUPER, 0) + + def typeName(self): + return self.getTypedRuleContext(JavaParser.TypeNameContext,0) + + + def DOT(self): + return self.getToken(JavaParser.DOT, 0) + + def classType(self): + return self.getTypedRuleContext(JavaParser.ClassTypeContext,0) + + + def NEW(self): + return self.getToken(JavaParser.NEW, 0) + + def arrayType(self): + return self.getTypedRuleContext(JavaParser.ArrayTypeContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_methodReference + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMethodReference" ): + listener.enterMethodReference(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMethodReference" ): + listener.exitMethodReference(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodReference" ): + return visitor.visitMethodReference(self) + else: + return visitor.visitChildren(self) + + + + + def methodReference(self): + + localctx = JavaParser.MethodReferenceContext(self, self._ctx, self.state) + self.enterRule(localctx, 424, self.RULE_methodReference) + self._la = 0 # Token type + try: + self.state = 2629 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,320,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2582 + self.expressionName() + self.state = 2583 + self.match(JavaParser.COLONCOLON) + self.state = 2585 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2584 + self.typeArguments() + + + self.state = 2587 + self.match(JavaParser.Identifier) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2589 + self.primary() + self.state = 2590 + self.match(JavaParser.COLONCOLON) + self.state = 2592 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2591 + self.typeArguments() + + + self.state = 2594 + self.match(JavaParser.Identifier) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2596 + self.referenceType() + self.state = 2597 + self.match(JavaParser.COLONCOLON) + self.state = 2599 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2598 + self.typeArguments() + + + self.state = 2601 + self.match(JavaParser.Identifier) + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2603 + self.match(JavaParser.SUPER) + self.state = 2604 + self.match(JavaParser.COLONCOLON) + self.state = 2606 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2605 + self.typeArguments() + + + self.state = 2608 + self.match(JavaParser.Identifier) + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2609 + self.typeName() + self.state = 2610 + self.match(JavaParser.DOT) + self.state = 2611 + self.match(JavaParser.SUPER) + self.state = 2612 + self.match(JavaParser.COLONCOLON) + self.state = 2614 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2613 + self.typeArguments() + + + self.state = 2616 + self.match(JavaParser.Identifier) + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 2618 + self.classType() + self.state = 2619 + self.match(JavaParser.COLONCOLON) + self.state = 2621 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2620 + self.typeArguments() + + + self.state = 2623 + self.match(JavaParser.NEW) + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 2625 + self.arrayType() + self.state = 2626 + self.match(JavaParser.COLONCOLON) + self.state = 2627 + self.match(JavaParser.NEW) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PostfixExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def primary(self): + return self.getTypedRuleContext(JavaParser.PrimaryContext,0) + + + def pfE(self): + return self.getTypedRuleContext(JavaParser.PfEContext,0) + + + def expressionName(self): + return self.getTypedRuleContext(JavaParser.ExpressionNameContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_postfixExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPostfixExpression" ): + listener.enterPostfixExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPostfixExpression" ): + listener.exitPostfixExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPostfixExpression" ): + return visitor.visitPostfixExpression(self) + else: + return visitor.visitChildren(self) + + + + + def postfixExpression(self): + + localctx = JavaParser.PostfixExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 426, self.RULE_postfixExpression) + try: + self.state = 2639 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,323,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2631 + self.primary() + self.state = 2633 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,321,self._ctx) + if la_ == 1: + self.state = 2632 + self.pfE() + + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2635 + self.expressionName() + self.state = 2637 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,322,self._ctx) + if la_ == 1: + self.state = 2636 + self.pfE() + + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PfEContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def INC(self): + return self.getToken(JavaParser.INC, 0) + + def pfE(self): + return self.getTypedRuleContext(JavaParser.PfEContext,0) + + + def DEC(self): + return self.getToken(JavaParser.DEC, 0) + + def getRuleIndex(self): + return JavaParser.RULE_pfE + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPfE" ): + listener.enterPfE(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPfE" ): + listener.exitPfE(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPfE" ): + return visitor.visitPfE(self) + else: + return visitor.visitChildren(self) + + + + + def pfE(self): + + localctx = JavaParser.PfEContext(self, self._ctx, self.state) + self.enterRule(localctx, 428, self.RULE_pfE) + try: + self.state = 2649 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [102]: + self.enterOuterAlt(localctx, 1) + self.state = 2641 + self.match(JavaParser.INC) + self.state = 2643 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,324,self._ctx) + if la_ == 1: + self.state = 2642 + self.pfE() + + + pass + elif token in [103]: + self.enterOuterAlt(localctx, 2) + self.state = 2645 + self.match(JavaParser.DEC) + self.state = 2647 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,325,self._ctx) + if la_ == 1: + self.state = 2646 + self.pfE() + + + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PostIncrementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def postfixExpression(self): + return self.getTypedRuleContext(JavaParser.PostfixExpressionContext,0) + + + def INC(self): + return self.getToken(JavaParser.INC, 0) + + def getRuleIndex(self): + return JavaParser.RULE_postIncrementExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPostIncrementExpression" ): + listener.enterPostIncrementExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPostIncrementExpression" ): + listener.exitPostIncrementExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPostIncrementExpression" ): + return visitor.visitPostIncrementExpression(self) + else: + return visitor.visitChildren(self) + + + + + def postIncrementExpression(self): + + localctx = JavaParser.PostIncrementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 430, self.RULE_postIncrementExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2651 + self.postfixExpression() + self.state = 2652 + self.match(JavaParser.INC) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PostDecrementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def postfixExpression(self): + return self.getTypedRuleContext(JavaParser.PostfixExpressionContext,0) + + + def DEC(self): + return self.getToken(JavaParser.DEC, 0) + + def getRuleIndex(self): + return JavaParser.RULE_postDecrementExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPostDecrementExpression" ): + listener.enterPostDecrementExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPostDecrementExpression" ): + listener.exitPostDecrementExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPostDecrementExpression" ): + return visitor.visitPostDecrementExpression(self) + else: + return visitor.visitChildren(self) + + + + + def postDecrementExpression(self): + + localctx = JavaParser.PostDecrementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 432, self.RULE_postDecrementExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2654 + self.postfixExpression() + self.state = 2655 + self.match(JavaParser.DEC) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnaryExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def preIncrementExpression(self): + return self.getTypedRuleContext(JavaParser.PreIncrementExpressionContext,0) + + + def preDecrementExpression(self): + return self.getTypedRuleContext(JavaParser.PreDecrementExpressionContext,0) + + + def ADD(self): + return self.getToken(JavaParser.ADD, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(JavaParser.UnaryExpressionContext,0) + + + def SUB(self): + return self.getToken(JavaParser.SUB, 0) + + def unaryExpressionNotPlusMinus(self): + return self.getTypedRuleContext(JavaParser.UnaryExpressionNotPlusMinusContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_unaryExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnaryExpression" ): + listener.enterUnaryExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnaryExpression" ): + listener.exitUnaryExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnaryExpression" ): + return visitor.visitUnaryExpression(self) + else: + return visitor.visitChildren(self) + + + + + def unaryExpression(self): + + localctx = JavaParser.UnaryExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 434, self.RULE_unaryExpression) + try: + self.state = 2664 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [102]: + self.enterOuterAlt(localctx, 1) + self.state = 2657 + self.preIncrementExpression() + pass + elif token in [103]: + self.enterOuterAlt(localctx, 2) + self.state = 2658 + self.preDecrementExpression() + pass + elif token in [104]: + self.enterOuterAlt(localctx, 3) + self.state = 2659 + self.match(JavaParser.ADD) + self.state = 2660 + self.unaryExpression() + pass + elif token in [105]: + self.enterOuterAlt(localctx, 4) + self.state = 2661 + self.match(JavaParser.SUB) + self.state = 2662 + self.unaryExpression() + pass + elif token in [20, 22, 25, 31, 37, 44, 46, 48, 54, 57, 58, 60, 65, 69, 70, 71, 72, 73, 74, 75, 76, 86, 91, 92, 123]: + self.enterOuterAlt(localctx, 5) + self.state = 2663 + self.unaryExpressionNotPlusMinus() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PreIncrementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def INC(self): + return self.getToken(JavaParser.INC, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(JavaParser.UnaryExpressionContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_preIncrementExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPreIncrementExpression" ): + listener.enterPreIncrementExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPreIncrementExpression" ): + listener.exitPreIncrementExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPreIncrementExpression" ): + return visitor.visitPreIncrementExpression(self) + else: + return visitor.visitChildren(self) + + + + + def preIncrementExpression(self): + + localctx = JavaParser.PreIncrementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 436, self.RULE_preIncrementExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2666 + self.match(JavaParser.INC) + self.state = 2667 + self.unaryExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PreDecrementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def DEC(self): + return self.getToken(JavaParser.DEC, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(JavaParser.UnaryExpressionContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_preDecrementExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPreDecrementExpression" ): + listener.enterPreDecrementExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPreDecrementExpression" ): + listener.exitPreDecrementExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPreDecrementExpression" ): + return visitor.visitPreDecrementExpression(self) + else: + return visitor.visitChildren(self) + + + + + def preDecrementExpression(self): + + localctx = JavaParser.PreDecrementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 438, self.RULE_preDecrementExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2669 + self.match(JavaParser.DEC) + self.state = 2670 + self.unaryExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnaryExpressionNotPlusMinusContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def postfixExpression(self): + return self.getTypedRuleContext(JavaParser.PostfixExpressionContext,0) + + + def TILDE(self): + return self.getToken(JavaParser.TILDE, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(JavaParser.UnaryExpressionContext,0) + + + def BANG(self): + return self.getToken(JavaParser.BANG, 0) + + def castExpression(self): + return self.getTypedRuleContext(JavaParser.CastExpressionContext,0) + + + def switchExpression(self): + return self.getTypedRuleContext(JavaParser.SwitchExpressionContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_unaryExpressionNotPlusMinus + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnaryExpressionNotPlusMinus" ): + listener.enterUnaryExpressionNotPlusMinus(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnaryExpressionNotPlusMinus" ): + listener.exitUnaryExpressionNotPlusMinus(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnaryExpressionNotPlusMinus" ): + return visitor.visitUnaryExpressionNotPlusMinus(self) + else: + return visitor.visitChildren(self) + + + + + def unaryExpressionNotPlusMinus(self): + + localctx = JavaParser.UnaryExpressionNotPlusMinusContext(self, self._ctx, self.state) + self.enterRule(localctx, 440, self.RULE_unaryExpressionNotPlusMinus) + try: + self.state = 2679 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,328,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2672 + self.postfixExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2673 + self.match(JavaParser.TILDE) + self.state = 2674 + self.unaryExpression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2675 + self.match(JavaParser.BANG) + self.state = 2676 + self.unaryExpression() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2677 + self.castExpression() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2678 + self.switchExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CastExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def primitiveType(self): + return self.getTypedRuleContext(JavaParser.PrimitiveTypeContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(JavaParser.UnaryExpressionContext,0) + + + def referenceType(self): + return self.getTypedRuleContext(JavaParser.ReferenceTypeContext,0) + + + def unaryExpressionNotPlusMinus(self): + return self.getTypedRuleContext(JavaParser.UnaryExpressionNotPlusMinusContext,0) + + + def additionalBound(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.AdditionalBoundContext) + else: + return self.getTypedRuleContext(JavaParser.AdditionalBoundContext,i) + + + def lambdaExpression(self): + return self.getTypedRuleContext(JavaParser.LambdaExpressionContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_castExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCastExpression" ): + listener.enterCastExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCastExpression" ): + listener.exitCastExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCastExpression" ): + return visitor.visitCastExpression(self) + else: + return visitor.visitChildren(self) + + + + + def castExpression(self): + + localctx = JavaParser.CastExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 442, self.RULE_castExpression) + self._la = 0 # Token type + try: + self.state = 2708 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,331,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2681 + self.match(JavaParser.LPAREN) + self.state = 2682 + self.primitiveType() + self.state = 2683 + self.match(JavaParser.RPAREN) + self.state = 2684 + self.unaryExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2686 + self.match(JavaParser.LPAREN) + self.state = 2687 + self.referenceType() + self.state = 2691 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==108: + self.state = 2688 + self.additionalBound() + self.state = 2693 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2694 + self.match(JavaParser.RPAREN) + self.state = 2695 + self.unaryExpressionNotPlusMinus() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2697 + self.match(JavaParser.LPAREN) + self.state = 2698 + self.referenceType() + self.state = 2702 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==108: + self.state = 2699 + self.additionalBound() + self.state = 2704 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2705 + self.match(JavaParser.RPAREN) + self.state = 2706 + self.lambdaExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MultiplicativeExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unaryExpression(self): + return self.getTypedRuleContext(JavaParser.UnaryExpressionContext,0) + + + def multiplicativeExpression(self): + return self.getTypedRuleContext(JavaParser.MultiplicativeExpressionContext,0) + + + def MUL(self): + return self.getToken(JavaParser.MUL, 0) + + def DIV(self): + return self.getToken(JavaParser.DIV, 0) + + def MOD(self): + return self.getToken(JavaParser.MOD, 0) + + def getRuleIndex(self): + return JavaParser.RULE_multiplicativeExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMultiplicativeExpression" ): + listener.enterMultiplicativeExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMultiplicativeExpression" ): + listener.exitMultiplicativeExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMultiplicativeExpression" ): + return visitor.visitMultiplicativeExpression(self) + else: + return visitor.visitChildren(self) + + + + def multiplicativeExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = JavaParser.MultiplicativeExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 444 + self.enterRecursionRule(localctx, 444, self.RULE_multiplicativeExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2711 + self.unaryExpression() + self._ctx.stop = self._input.LT(-1) + self.state = 2724 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,333,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 2722 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,332,self._ctx) + if la_ == 1: + localctx = JavaParser.MultiplicativeExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_multiplicativeExpression) + self.state = 2713 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 2714 + self.match(JavaParser.MUL) + self.state = 2715 + self.unaryExpression() + pass + + elif la_ == 2: + localctx = JavaParser.MultiplicativeExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_multiplicativeExpression) + self.state = 2716 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2717 + self.match(JavaParser.DIV) + self.state = 2718 + self.unaryExpression() + pass + + elif la_ == 3: + localctx = JavaParser.MultiplicativeExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_multiplicativeExpression) + self.state = 2719 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2720 + self.match(JavaParser.MOD) + self.state = 2721 + self.unaryExpression() + pass + + + self.state = 2726 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,333,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class AdditiveExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def multiplicativeExpression(self): + return self.getTypedRuleContext(JavaParser.MultiplicativeExpressionContext,0) + + + def additiveExpression(self): + return self.getTypedRuleContext(JavaParser.AdditiveExpressionContext,0) + + + def ADD(self): + return self.getToken(JavaParser.ADD, 0) + + def SUB(self): + return self.getToken(JavaParser.SUB, 0) + + def getRuleIndex(self): + return JavaParser.RULE_additiveExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAdditiveExpression" ): + listener.enterAdditiveExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAdditiveExpression" ): + listener.exitAdditiveExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAdditiveExpression" ): + return visitor.visitAdditiveExpression(self) + else: + return visitor.visitChildren(self) + + + + def additiveExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = JavaParser.AdditiveExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 446 + self.enterRecursionRule(localctx, 446, self.RULE_additiveExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2728 + self.multiplicativeExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2738 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,335,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 2736 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,334,self._ctx) + if la_ == 1: + localctx = JavaParser.AdditiveExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_additiveExpression) + self.state = 2730 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2731 + self.match(JavaParser.ADD) + self.state = 2732 + self.multiplicativeExpression(0) + pass + + elif la_ == 2: + localctx = JavaParser.AdditiveExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_additiveExpression) + self.state = 2733 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2734 + self.match(JavaParser.SUB) + self.state = 2735 + self.multiplicativeExpression(0) + pass + + + self.state = 2740 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,335,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class ShiftExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def additiveExpression(self): + return self.getTypedRuleContext(JavaParser.AdditiveExpressionContext,0) + + + def shiftExpression(self): + return self.getTypedRuleContext(JavaParser.ShiftExpressionContext,0) + + + def LT(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.LT) + else: + return self.getToken(JavaParser.LT, i) + + def GT(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.GT) + else: + return self.getToken(JavaParser.GT, i) + + def getRuleIndex(self): + return JavaParser.RULE_shiftExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterShiftExpression" ): + listener.enterShiftExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitShiftExpression" ): + listener.exitShiftExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitShiftExpression" ): + return visitor.visitShiftExpression(self) + else: + return visitor.visitChildren(self) + + + + def shiftExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = JavaParser.ShiftExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 448 + self.enterRecursionRule(localctx, 448, self.RULE_shiftExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2742 + self.additiveExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2759 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,337,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 2757 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,336,self._ctx) + if la_ == 1: + localctx = JavaParser.ShiftExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_shiftExpression) + self.state = 2744 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 2745 + self.match(JavaParser.LT) + self.state = 2746 + self.match(JavaParser.LT) + self.state = 2747 + self.additiveExpression(0) + pass + + elif la_ == 2: + localctx = JavaParser.ShiftExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_shiftExpression) + self.state = 2748 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2749 + self.match(JavaParser.GT) + self.state = 2750 + self.match(JavaParser.GT) + self.state = 2751 + self.additiveExpression(0) + pass + + elif la_ == 3: + localctx = JavaParser.ShiftExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_shiftExpression) + self.state = 2752 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2753 + self.match(JavaParser.GT) + self.state = 2754 + self.match(JavaParser.GT) + self.state = 2755 + self.match(JavaParser.GT) + self.state = 2756 + self.additiveExpression(0) + pass + + + self.state = 2761 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,337,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class RelationalExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def shiftExpression(self): + return self.getTypedRuleContext(JavaParser.ShiftExpressionContext,0) + + + def relationalExpression(self): + return self.getTypedRuleContext(JavaParser.RelationalExpressionContext,0) + + + def LT(self): + return self.getToken(JavaParser.LT, 0) + + def GT(self): + return self.getToken(JavaParser.GT, 0) + + def LE(self): + return self.getToken(JavaParser.LE, 0) + + def GE(self): + return self.getToken(JavaParser.GE, 0) + + def INSTANCEOF(self): + return self.getToken(JavaParser.INSTANCEOF, 0) + + def referenceType(self): + return self.getTypedRuleContext(JavaParser.ReferenceTypeContext,0) + + + def pattern(self): + return self.getTypedRuleContext(JavaParser.PatternContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_relationalExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterRelationalExpression" ): + listener.enterRelationalExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitRelationalExpression" ): + listener.exitRelationalExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRelationalExpression" ): + return visitor.visitRelationalExpression(self) + else: + return visitor.visitChildren(self) + + + + def relationalExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = JavaParser.RelationalExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 450 + self.enterRecursionRule(localctx, 450, self.RULE_relationalExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2763 + self.shiftExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2785 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,340,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 2783 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,339,self._ctx) + if la_ == 1: + localctx = JavaParser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2765 + if not self.precpred(self._ctx, 5): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") + self.state = 2766 + self.match(JavaParser.LT) + self.state = 2767 + self.shiftExpression(0) + pass + + elif la_ == 2: + localctx = JavaParser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2768 + if not self.precpred(self._ctx, 4): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") + self.state = 2769 + self.match(JavaParser.GT) + self.state = 2770 + self.shiftExpression(0) + pass + + elif la_ == 3: + localctx = JavaParser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2771 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 2772 + self.match(JavaParser.LE) + self.state = 2773 + self.shiftExpression(0) + pass + + elif la_ == 4: + localctx = JavaParser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2774 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2775 + self.match(JavaParser.GE) + self.state = 2776 + self.shiftExpression(0) + pass + + elif la_ == 5: + localctx = JavaParser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2777 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2778 + self.match(JavaParser.INSTANCEOF) + self.state = 2781 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,338,self._ctx) + if la_ == 1: + self.state = 2779 + self.referenceType() + pass + + elif la_ == 2: + self.state = 2780 + self.pattern() + pass + + + pass + + + self.state = 2787 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,340,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class EqualityExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def relationalExpression(self): + return self.getTypedRuleContext(JavaParser.RelationalExpressionContext,0) + + + def equalityExpression(self): + return self.getTypedRuleContext(JavaParser.EqualityExpressionContext,0) + + + def EQUAL(self): + return self.getToken(JavaParser.EQUAL, 0) + + def NOTEQUAL(self): + return self.getToken(JavaParser.NOTEQUAL, 0) + + def getRuleIndex(self): + return JavaParser.RULE_equalityExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEqualityExpression" ): + listener.enterEqualityExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEqualityExpression" ): + listener.exitEqualityExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEqualityExpression" ): + return visitor.visitEqualityExpression(self) + else: + return visitor.visitChildren(self) + + + + def equalityExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = JavaParser.EqualityExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 452 + self.enterRecursionRule(localctx, 452, self.RULE_equalityExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2789 + self.relationalExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2799 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,342,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 2797 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,341,self._ctx) + if la_ == 1: + localctx = JavaParser.EqualityExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_equalityExpression) + self.state = 2791 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2792 + self.match(JavaParser.EQUAL) + self.state = 2793 + self.relationalExpression(0) + pass + + elif la_ == 2: + localctx = JavaParser.EqualityExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_equalityExpression) + self.state = 2794 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2795 + self.match(JavaParser.NOTEQUAL) + self.state = 2796 + self.relationalExpression(0) + pass + + + self.state = 2801 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,342,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class AndExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def equalityExpression(self): + return self.getTypedRuleContext(JavaParser.EqualityExpressionContext,0) + + + def andExpression(self): + return self.getTypedRuleContext(JavaParser.AndExpressionContext,0) + + + def BITAND(self): + return self.getToken(JavaParser.BITAND, 0) + + def getRuleIndex(self): + return JavaParser.RULE_andExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAndExpression" ): + listener.enterAndExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAndExpression" ): + listener.exitAndExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAndExpression" ): + return visitor.visitAndExpression(self) + else: + return visitor.visitChildren(self) + + + + def andExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = JavaParser.AndExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 454 + self.enterRecursionRule(localctx, 454, self.RULE_andExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2803 + self.equalityExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2810 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,343,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = JavaParser.AndExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_andExpression) + self.state = 2805 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2806 + self.match(JavaParser.BITAND) + self.state = 2807 + self.equalityExpression(0) + self.state = 2812 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,343,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class ExclusiveOrExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def andExpression(self): + return self.getTypedRuleContext(JavaParser.AndExpressionContext,0) + + + def exclusiveOrExpression(self): + return self.getTypedRuleContext(JavaParser.ExclusiveOrExpressionContext,0) + + + def CARET(self): + return self.getToken(JavaParser.CARET, 0) + + def getRuleIndex(self): + return JavaParser.RULE_exclusiveOrExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExclusiveOrExpression" ): + listener.enterExclusiveOrExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExclusiveOrExpression" ): + listener.exitExclusiveOrExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExclusiveOrExpression" ): + return visitor.visitExclusiveOrExpression(self) + else: + return visitor.visitChildren(self) + + + + def exclusiveOrExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = JavaParser.ExclusiveOrExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 456 + self.enterRecursionRule(localctx, 456, self.RULE_exclusiveOrExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2814 + self.andExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2821 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,344,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = JavaParser.ExclusiveOrExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_exclusiveOrExpression) + self.state = 2816 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2817 + self.match(JavaParser.CARET) + self.state = 2818 + self.andExpression(0) + self.state = 2823 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,344,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class InclusiveOrExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def exclusiveOrExpression(self): + return self.getTypedRuleContext(JavaParser.ExclusiveOrExpressionContext,0) + + + def inclusiveOrExpression(self): + return self.getTypedRuleContext(JavaParser.InclusiveOrExpressionContext,0) + + + def BITOR(self): + return self.getToken(JavaParser.BITOR, 0) + + def getRuleIndex(self): + return JavaParser.RULE_inclusiveOrExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInclusiveOrExpression" ): + listener.enterInclusiveOrExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInclusiveOrExpression" ): + listener.exitInclusiveOrExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInclusiveOrExpression" ): + return visitor.visitInclusiveOrExpression(self) + else: + return visitor.visitChildren(self) + + + + def inclusiveOrExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = JavaParser.InclusiveOrExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 458 + self.enterRecursionRule(localctx, 458, self.RULE_inclusiveOrExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2825 + self.exclusiveOrExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2832 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,345,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = JavaParser.InclusiveOrExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_inclusiveOrExpression) + self.state = 2827 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2828 + self.match(JavaParser.BITOR) + self.state = 2829 + self.exclusiveOrExpression(0) + self.state = 2834 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,345,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class ConditionalAndExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def inclusiveOrExpression(self): + return self.getTypedRuleContext(JavaParser.InclusiveOrExpressionContext,0) + + + def conditionalAndExpression(self): + return self.getTypedRuleContext(JavaParser.ConditionalAndExpressionContext,0) + + + def AND(self): + return self.getToken(JavaParser.AND, 0) + + def getRuleIndex(self): + return JavaParser.RULE_conditionalAndExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterConditionalAndExpression" ): + listener.enterConditionalAndExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitConditionalAndExpression" ): + listener.exitConditionalAndExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConditionalAndExpression" ): + return visitor.visitConditionalAndExpression(self) + else: + return visitor.visitChildren(self) + + + + def conditionalAndExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = JavaParser.ConditionalAndExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 460 + self.enterRecursionRule(localctx, 460, self.RULE_conditionalAndExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2836 + self.inclusiveOrExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2843 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,346,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = JavaParser.ConditionalAndExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_conditionalAndExpression) + self.state = 2838 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2839 + self.match(JavaParser.AND) + self.state = 2840 + self.inclusiveOrExpression(0) + self.state = 2845 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,346,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class ConditionalOrExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalAndExpression(self): + return self.getTypedRuleContext(JavaParser.ConditionalAndExpressionContext,0) + + + def conditionalOrExpression(self): + return self.getTypedRuleContext(JavaParser.ConditionalOrExpressionContext,0) + + + def OR(self): + return self.getToken(JavaParser.OR, 0) + + def getRuleIndex(self): + return JavaParser.RULE_conditionalOrExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterConditionalOrExpression" ): + listener.enterConditionalOrExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitConditionalOrExpression" ): + listener.exitConditionalOrExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConditionalOrExpression" ): + return visitor.visitConditionalOrExpression(self) + else: + return visitor.visitChildren(self) + + + + def conditionalOrExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = JavaParser.ConditionalOrExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 462 + self.enterRecursionRule(localctx, 462, self.RULE_conditionalOrExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2847 + self.conditionalAndExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2854 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,347,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = JavaParser.ConditionalOrExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_conditionalOrExpression) + self.state = 2849 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2850 + self.match(JavaParser.OR) + self.state = 2851 + self.conditionalAndExpression(0) + self.state = 2856 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,347,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class ConditionalExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalOrExpression(self): + return self.getTypedRuleContext(JavaParser.ConditionalOrExpressionContext,0) + + + def QUESTION(self): + return self.getToken(JavaParser.QUESTION, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def COLON(self): + return self.getToken(JavaParser.COLON, 0) + + def conditionalExpression(self): + return self.getTypedRuleContext(JavaParser.ConditionalExpressionContext,0) + + + def lambdaExpression(self): + return self.getTypedRuleContext(JavaParser.LambdaExpressionContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_conditionalExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterConditionalExpression" ): + listener.enterConditionalExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitConditionalExpression" ): + listener.exitConditionalExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConditionalExpression" ): + return visitor.visitConditionalExpression(self) + else: + return visitor.visitChildren(self) + + + + + def conditionalExpression(self): + + localctx = JavaParser.ConditionalExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 464, self.RULE_conditionalExpression) + try: + self.state = 2870 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,348,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2857 + self.conditionalOrExpression(0) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2858 + self.conditionalOrExpression(0) + self.state = 2859 + self.match(JavaParser.QUESTION) + self.state = 2860 + self.expression() + self.state = 2861 + self.match(JavaParser.COLON) + self.state = 2862 + self.conditionalExpression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2864 + self.conditionalOrExpression(0) + self.state = 2865 + self.match(JavaParser.QUESTION) + self.state = 2866 + self.expression() + self.state = 2867 + self.match(JavaParser.COLON) + self.state = 2868 + self.lambdaExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AssignmentExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalExpression(self): + return self.getTypedRuleContext(JavaParser.ConditionalExpressionContext,0) + + + def assignment(self): + return self.getTypedRuleContext(JavaParser.AssignmentContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_assignmentExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAssignmentExpression" ): + listener.enterAssignmentExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAssignmentExpression" ): + listener.exitAssignmentExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAssignmentExpression" ): + return visitor.visitAssignmentExpression(self) + else: + return visitor.visitChildren(self) + + + + + def assignmentExpression(self): + + localctx = JavaParser.AssignmentExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 466, self.RULE_assignmentExpression) + try: + self.state = 2874 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,349,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2872 + self.conditionalExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2873 + self.assignment() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AssignmentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def leftHandSide(self): + return self.getTypedRuleContext(JavaParser.LeftHandSideContext,0) + + + def assignmentOperator(self): + return self.getTypedRuleContext(JavaParser.AssignmentOperatorContext,0) + + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_assignment + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAssignment" ): + listener.enterAssignment(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAssignment" ): + listener.exitAssignment(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAssignment" ): + return visitor.visitAssignment(self) + else: + return visitor.visitChildren(self) + + + + + def assignment(self): + + localctx = JavaParser.AssignmentContext(self, self._ctx, self.state) + self.enterRule(localctx, 468, self.RULE_assignment) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2876 + self.leftHandSide() + self.state = 2877 + self.assignmentOperator() + self.state = 2878 + self.expression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LeftHandSideContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expressionName(self): + return self.getTypedRuleContext(JavaParser.ExpressionNameContext,0) + + + def fieldAccess(self): + return self.getTypedRuleContext(JavaParser.FieldAccessContext,0) + + + def arrayAccess(self): + return self.getTypedRuleContext(JavaParser.ArrayAccessContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_leftHandSide + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLeftHandSide" ): + listener.enterLeftHandSide(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLeftHandSide" ): + listener.exitLeftHandSide(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLeftHandSide" ): + return visitor.visitLeftHandSide(self) + else: + return visitor.visitChildren(self) + + + + + def leftHandSide(self): + + localctx = JavaParser.LeftHandSideContext(self, self._ctx, self.state) + self.enterRule(localctx, 470, self.RULE_leftHandSide) + try: + self.state = 2883 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,350,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2880 + self.expressionName() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2881 + self.fieldAccess() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2882 + self.arrayAccess() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AssignmentOperatorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ASSIGN(self): + return self.getToken(JavaParser.ASSIGN, 0) + + def MUL_ASSIGN(self): + return self.getToken(JavaParser.MUL_ASSIGN, 0) + + def DIV_ASSIGN(self): + return self.getToken(JavaParser.DIV_ASSIGN, 0) + + def MOD_ASSIGN(self): + return self.getToken(JavaParser.MOD_ASSIGN, 0) + + def ADD_ASSIGN(self): + return self.getToken(JavaParser.ADD_ASSIGN, 0) + + def SUB_ASSIGN(self): + return self.getToken(JavaParser.SUB_ASSIGN, 0) + + def LSHIFT_ASSIGN(self): + return self.getToken(JavaParser.LSHIFT_ASSIGN, 0) + + def RSHIFT_ASSIGN(self): + return self.getToken(JavaParser.RSHIFT_ASSIGN, 0) + + def URSHIFT_ASSIGN(self): + return self.getToken(JavaParser.URSHIFT_ASSIGN, 0) + + def AND_ASSIGN(self): + return self.getToken(JavaParser.AND_ASSIGN, 0) + + def XOR_ASSIGN(self): + return self.getToken(JavaParser.XOR_ASSIGN, 0) + + def OR_ASSIGN(self): + return self.getToken(JavaParser.OR_ASSIGN, 0) + + def getRuleIndex(self): + return JavaParser.RULE_assignmentOperator + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAssignmentOperator" ): + listener.enterAssignmentOperator(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAssignmentOperator" ): + listener.exitAssignmentOperator(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAssignmentOperator" ): + return visitor.visitAssignmentOperator(self) + else: + return visitor.visitChildren(self) + + + + + def assignmentOperator(self): + + localctx = JavaParser.AssignmentOperatorContext(self, self._ctx, self.state) + self.enterRule(localctx, 472, self.RULE_assignmentOperator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2885 + _la = self._input.LA(1) + if not(((((_la - 88)) & ~0x3f) == 0 and ((1 << (_la - 88)) & 34342961153) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def lambdaParameters(self): + return self.getTypedRuleContext(JavaParser.LambdaParametersContext,0) + + + def ARROW(self): + return self.getToken(JavaParser.ARROW, 0) + + def lambdaBody(self): + return self.getTypedRuleContext(JavaParser.LambdaBodyContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_lambdaExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLambdaExpression" ): + listener.enterLambdaExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLambdaExpression" ): + listener.exitLambdaExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaExpression" ): + return visitor.visitLambdaExpression(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaExpression(self): + + localctx = JavaParser.LambdaExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 474, self.RULE_lambdaExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2887 + self.lambdaParameters() + self.state = 2888 + self.match(JavaParser.ARROW) + self.state = 2889 + self.lambdaBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaParametersContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def lambdaParameterList(self): + return self.getTypedRuleContext(JavaParser.LambdaParameterListContext,0) + + + def Identifier(self): + return self.getToken(JavaParser.Identifier, 0) + + def getRuleIndex(self): + return JavaParser.RULE_lambdaParameters + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLambdaParameters" ): + listener.enterLambdaParameters(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLambdaParameters" ): + listener.exitLambdaParameters(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaParameters" ): + return visitor.visitLambdaParameters(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaParameters(self): + + localctx = JavaParser.LambdaParametersContext(self, self._ctx, self.state) + self.enterRule(localctx, 476, self.RULE_lambdaParameters) + self._la = 0 # Token type + try: + self.state = 2897 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [76]: + self.enterOuterAlt(localctx, 1) + self.state = 2891 + self.match(JavaParser.LPAREN) + self.state = 2893 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 18102533424709632) != 0) or _la==86 or _la==123: + self.state = 2892 + self.lambdaParameterList() + + + self.state = 2895 + self.match(JavaParser.RPAREN) + pass + elif token in [123]: + self.enterOuterAlt(localctx, 2) + self.state = 2896 + self.match(JavaParser.Identifier) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaParameterListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def lambdaParameter(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.LambdaParameterContext) + else: + return self.getTypedRuleContext(JavaParser.LambdaParameterContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.COMMA) + else: + return self.getToken(JavaParser.COMMA, i) + + def Identifier(self, i:int=None): + if i is None: + return self.getTokens(JavaParser.Identifier) + else: + return self.getToken(JavaParser.Identifier, i) + + def getRuleIndex(self): + return JavaParser.RULE_lambdaParameterList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLambdaParameterList" ): + listener.enterLambdaParameterList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLambdaParameterList" ): + listener.exitLambdaParameterList(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaParameterList" ): + return visitor.visitLambdaParameterList(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaParameterList(self): + + localctx = JavaParser.LambdaParameterListContext(self, self._ctx, self.state) + self.enterRule(localctx, 478, self.RULE_lambdaParameterList) + self._la = 0 # Token type + try: + self.state = 2915 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,355,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2899 + self.lambdaParameter() + self.state = 2904 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 2900 + self.match(JavaParser.COMMA) + self.state = 2901 + self.lambdaParameter() + self.state = 2906 + self._errHandler.sync(self) + _la = self._input.LA(1) + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2907 + self.match(JavaParser.Identifier) + self.state = 2912 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 2908 + self.match(JavaParser.COMMA) + self.state = 2909 + self.match(JavaParser.Identifier) + self.state = 2914 + self._errHandler.sync(self) + _la = self._input.LA(1) + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def lambdaParameterType(self): + return self.getTypedRuleContext(JavaParser.LambdaParameterTypeContext,0) + + + def variableDeclaratorId(self): + return self.getTypedRuleContext(JavaParser.VariableDeclaratorIdContext,0) + + + def variableModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaParser.VariableModifierContext) + else: + return self.getTypedRuleContext(JavaParser.VariableModifierContext,i) + + + def variableArityParameter(self): + return self.getTypedRuleContext(JavaParser.VariableArityParameterContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_lambdaParameter + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLambdaParameter" ): + listener.enterLambdaParameter(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLambdaParameter" ): + listener.exitLambdaParameter(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaParameter" ): + return visitor.visitLambdaParameter(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaParameter(self): + + localctx = JavaParser.LambdaParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 480, self.RULE_lambdaParameter) + self._la = 0 # Token type + try: + self.state = 2927 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,357,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2920 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==35 or _la==86: + self.state = 2917 + self.variableModifier() + self.state = 2922 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2923 + self.lambdaParameterType() + self.state = 2924 + self.variableDeclaratorId() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2926 + self.variableArityParameter() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaParameterTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(JavaParser.UnannTypeContext,0) + + + def VAR(self): + return self.getToken(JavaParser.VAR, 0) + + def getRuleIndex(self): + return JavaParser.RULE_lambdaParameterType + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLambdaParameterType" ): + listener.enterLambdaParameterType(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLambdaParameterType" ): + listener.exitLambdaParameterType(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaParameterType" ): + return visitor.visitLambdaParameterType(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaParameterType(self): + + localctx = JavaParser.LambdaParameterTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 482, self.RULE_lambdaParameterType) + try: + self.state = 2931 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [20, 22, 25, 31, 37, 44, 46, 54, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 2929 + self.unannType() + pass + elif token in [15]: + self.enterOuterAlt(localctx, 2) + self.state = 2930 + self.match(JavaParser.VAR) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def block(self): + return self.getTypedRuleContext(JavaParser.BlockContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_lambdaBody + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLambdaBody" ): + listener.enterLambdaBody(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLambdaBody" ): + listener.exitLambdaBody(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaBody" ): + return visitor.visitLambdaBody(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaBody(self): + + localctx = JavaParser.LambdaBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 484, self.RULE_lambdaBody) + try: + self.state = 2935 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [20, 22, 25, 31, 37, 44, 46, 48, 54, 57, 58, 60, 65, 69, 70, 71, 72, 73, 74, 75, 76, 86, 91, 92, 102, 103, 104, 105, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 2933 + self.expression() + pass + elif token in [78]: + self.enterOuterAlt(localctx, 2) + self.state = 2934 + self.block() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SwitchExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SWITCH(self): + return self.getToken(JavaParser.SWITCH, 0) + + def LPAREN(self): + return self.getToken(JavaParser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(JavaParser.RPAREN, 0) + + def switchBlock(self): + return self.getTypedRuleContext(JavaParser.SwitchBlockContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_switchExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSwitchExpression" ): + listener.enterSwitchExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSwitchExpression" ): + listener.exitSwitchExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSwitchExpression" ): + return visitor.visitSwitchExpression(self) + else: + return visitor.visitChildren(self) + + + + + def switchExpression(self): + + localctx = JavaParser.SwitchExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 486, self.RULE_switchExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2937 + self.match(JavaParser.SWITCH) + self.state = 2938 + self.match(JavaParser.LPAREN) + self.state = 2939 + self.expression() + self.state = 2940 + self.match(JavaParser.RPAREN) + self.state = 2941 + self.switchBlock() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstantExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self): + return self.getTypedRuleContext(JavaParser.ExpressionContext,0) + + + def getRuleIndex(self): + return JavaParser.RULE_constantExpression + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterConstantExpression" ): + listener.enterConstantExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitConstantExpression" ): + listener.exitConstantExpression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstantExpression" ): + return visitor.visitConstantExpression(self) + else: + return visitor.visitChildren(self) + + + + + def constantExpression(self): + + localctx = JavaParser.ConstantExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 488, self.RULE_constantExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2943 + self.expression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + + def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): + if self._predicates == None: + self._predicates = dict() + self._predicates[222] = self.multiplicativeExpression_sempred + self._predicates[223] = self.additiveExpression_sempred + self._predicates[224] = self.shiftExpression_sempred + self._predicates[225] = self.relationalExpression_sempred + self._predicates[226] = self.equalityExpression_sempred + self._predicates[227] = self.andExpression_sempred + self._predicates[228] = self.exclusiveOrExpression_sempred + self._predicates[229] = self.inclusiveOrExpression_sempred + self._predicates[230] = self.conditionalAndExpression_sempred + self._predicates[231] = self.conditionalOrExpression_sempred + pred = self._predicates.get(ruleIndex, None) + if pred is None: + raise Exception("No predicate with index:" + str(ruleIndex)) + else: + return pred(localctx, predIndex) + + def multiplicativeExpression_sempred(self, localctx:MultiplicativeExpressionContext, predIndex:int): + if predIndex == 0: + return self.precpred(self._ctx, 3) + + + if predIndex == 1: + return self.precpred(self._ctx, 2) + + + if predIndex == 2: + return self.precpred(self._ctx, 1) + + + def additiveExpression_sempred(self, localctx:AdditiveExpressionContext, predIndex:int): + if predIndex == 3: + return self.precpred(self._ctx, 2) + + + if predIndex == 4: + return self.precpred(self._ctx, 1) + + + def shiftExpression_sempred(self, localctx:ShiftExpressionContext, predIndex:int): + if predIndex == 5: + return self.precpred(self._ctx, 3) + + + if predIndex == 6: + return self.precpred(self._ctx, 2) + + + if predIndex == 7: + return self.precpred(self._ctx, 1) + + + def relationalExpression_sempred(self, localctx:RelationalExpressionContext, predIndex:int): + if predIndex == 8: + return self.precpred(self._ctx, 5) + + + if predIndex == 9: + return self.precpred(self._ctx, 4) + + + if predIndex == 10: + return self.precpred(self._ctx, 3) + + + if predIndex == 11: + return self.precpred(self._ctx, 2) + + + if predIndex == 12: + return self.precpred(self._ctx, 1) + + + def equalityExpression_sempred(self, localctx:EqualityExpressionContext, predIndex:int): + if predIndex == 13: + return self.precpred(self._ctx, 2) + + + if predIndex == 14: + return self.precpred(self._ctx, 1) + + + def andExpression_sempred(self, localctx:AndExpressionContext, predIndex:int): + if predIndex == 15: + return self.precpred(self._ctx, 1) + + + def exclusiveOrExpression_sempred(self, localctx:ExclusiveOrExpressionContext, predIndex:int): + if predIndex == 16: + return self.precpred(self._ctx, 1) + + + def inclusiveOrExpression_sempred(self, localctx:InclusiveOrExpressionContext, predIndex:int): + if predIndex == 17: + return self.precpred(self._ctx, 1) + + + def conditionalAndExpression_sempred(self, localctx:ConditionalAndExpressionContext, predIndex:int): + if predIndex == 18: + return self.precpred(self._ctx, 1) + + + def conditionalOrExpression_sempred(self, localctx:ConditionalOrExpressionContext, predIndex:int): + if predIndex == 19: + return self.precpred(self._ctx, 1) + + + + + diff --git a/cfg_generator/src/antlr/gen/JavaParser.tokens b/cfg_generator/src/antlr/gen/JavaParser.tokens new file mode 100644 index 00000000..891a5f22 --- /dev/null +++ b/cfg_generator/src/antlr/gen/JavaParser.tokens @@ -0,0 +1,242 @@ +EXPORTS=1 +MODULE=2 +NONSEALED=3 +OACA=4 +OPEN=5 +OPENS=6 +PERMITS=7 +PROVIDES=8 +RECORD=9 +REQUIRES=10 +SEALED=11 +TO=12 +TRANSITIVE=13 +USES=14 +VAR=15 +WITH=16 +YIELD=17 +ABSTRACT=18 +ASSERT=19 +BOOLEAN=20 +BREAK=21 +BYTE=22 +CASE=23 +CATCH=24 +CHAR=25 +CLASS=26 +CONST=27 +CONTINUE=28 +DEFAULT=29 +DO=30 +DOUBLE=31 +ELSE=32 +ENUM=33 +EXTENDS=34 +FINAL=35 +FINALLY=36 +FLOAT=37 +FOR=38 +IF=39 +GOTO=40 +IMPLEMENTS=41 +IMPORT=42 +INSTANCEOF=43 +INT=44 +INTERFACE=45 +LONG=46 +NATIVE=47 +NEW=48 +PACKAGE=49 +PRIVATE=50 +PROTECTED=51 +PUBLIC=52 +RETURN=53 +SHORT=54 +STATIC=55 +STRICTFP=56 +SUPER=57 +SWITCH=58 +SYNCHRONIZED=59 +THIS=60 +THROW=61 +THROWS=62 +TRANSIENT=63 +TRY=64 +VOID=65 +VOLATILE=66 +WHILE=67 +UNDER_SCORE=68 +IntegerLiteral=69 +FloatingPointLiteral=70 +BooleanLiteral=71 +CharacterLiteral=72 +StringLiteral=73 +TextBlock=74 +NullLiteral=75 +LPAREN=76 +RPAREN=77 +LBRACE=78 +RBRACE=79 +LBRACK=80 +RBRACK=81 +SEMI=82 +COMMA=83 +DOT=84 +ELLIPSIS=85 +AT=86 +COLONCOLON=87 +ASSIGN=88 +GT=89 +LT=90 +BANG=91 +TILDE=92 +QUESTION=93 +COLON=94 +ARROW=95 +EQUAL=96 +LE=97 +GE=98 +NOTEQUAL=99 +AND=100 +OR=101 +INC=102 +DEC=103 +ADD=104 +SUB=105 +MUL=106 +DIV=107 +BITAND=108 +BITOR=109 +CARET=110 +MOD=111 +ADD_ASSIGN=112 +SUB_ASSIGN=113 +MUL_ASSIGN=114 +DIV_ASSIGN=115 +AND_ASSIGN=116 +OR_ASSIGN=117 +XOR_ASSIGN=118 +MOD_ASSIGN=119 +LSHIFT_ASSIGN=120 +RSHIFT_ASSIGN=121 +URSHIFT_ASSIGN=122 +Identifier=123 +WS=124 +COMMENT=125 +LINE_COMMENT=126 +'exports'=1 +'module'=2 +'non-sealed'=3 +'<>'=4 +'open'=5 +'opens'=6 +'permits'=7 +'provides'=8 +'record'=9 +'requires'=10 +'sealed'=11 +'to'=12 +'transitive'=13 +'uses'=14 +'var'=15 +'with'=16 +'yield'=17 +'abstract'=18 +'assert'=19 +'boolean'=20 +'break'=21 +'byte'=22 +'case'=23 +'catch'=24 +'char'=25 +'class'=26 +'const'=27 +'continue'=28 +'default'=29 +'do'=30 +'double'=31 +'else'=32 +'enum'=33 +'extends'=34 +'final'=35 +'finally'=36 +'float'=37 +'for'=38 +'if'=39 +'goto'=40 +'implements'=41 +'import'=42 +'instanceof'=43 +'int'=44 +'interface'=45 +'long'=46 +'native'=47 +'new'=48 +'package'=49 +'private'=50 +'protected'=51 +'public'=52 +'return'=53 +'short'=54 +'static'=55 +'strictfp'=56 +'super'=57 +'switch'=58 +'synchronized'=59 +'this'=60 +'throw'=61 +'throws'=62 +'transient'=63 +'try'=64 +'void'=65 +'volatile'=66 +'while'=67 +'_'=68 +'null'=75 +'('=76 +')'=77 +'{'=78 +'}'=79 +'['=80 +']'=81 +';'=82 +','=83 +'.'=84 +'...'=85 +'@'=86 +'::'=87 +'='=88 +'>'=89 +'<'=90 +'!'=91 +'~'=92 +'?'=93 +':'=94 +'->'=95 +'=='=96 +'<='=97 +'>='=98 +'!='=99 +'&&'=100 +'||'=101 +'++'=102 +'--'=103 +'+'=104 +'-'=105 +'*'=106 +'/'=107 +'&'=108 +'|'=109 +'^'=110 +'%'=111 +'+='=112 +'-='=113 +'*='=114 +'/='=115 +'&='=116 +'|='=117 +'^='=118 +'%='=119 +'<<='=120 +'>>='=121 +'>>>='=122 diff --git a/cfg_generator/src/antlr/gen/JavaParserListener.py b/cfg_generator/src/antlr/gen/JavaParserListener.py new file mode 100644 index 00000000..e2ec9c9b --- /dev/null +++ b/cfg_generator/src/antlr/gen/JavaParserListener.py @@ -0,0 +1,2217 @@ +# Generated from F:/cfg-generator/grammar/JavaParser.g4 by ANTLR 4.13.1 +from antlr4 import * +if "." in __name__: + from .JavaParser import JavaParser +else: + from JavaParser import JavaParser + +# This class defines a complete listener for a parse tree produced by JavaParser. +class JavaParserListener(ParseTreeListener): + + # Enter a parse tree produced by JavaParser#start_. + def enterStart_(self, ctx:JavaParser.Start_Context): + pass + + # Exit a parse tree produced by JavaParser#start_. + def exitStart_(self, ctx:JavaParser.Start_Context): + pass + + + # Enter a parse tree produced by JavaParser#literal. + def enterLiteral(self, ctx:JavaParser.LiteralContext): + pass + + # Exit a parse tree produced by JavaParser#literal. + def exitLiteral(self, ctx:JavaParser.LiteralContext): + pass + + + # Enter a parse tree produced by JavaParser#typeIdentifier. + def enterTypeIdentifier(self, ctx:JavaParser.TypeIdentifierContext): + pass + + # Exit a parse tree produced by JavaParser#typeIdentifier. + def exitTypeIdentifier(self, ctx:JavaParser.TypeIdentifierContext): + pass + + + # Enter a parse tree produced by JavaParser#unqualifiedMethodIdentifier. + def enterUnqualifiedMethodIdentifier(self, ctx:JavaParser.UnqualifiedMethodIdentifierContext): + pass + + # Exit a parse tree produced by JavaParser#unqualifiedMethodIdentifier. + def exitUnqualifiedMethodIdentifier(self, ctx:JavaParser.UnqualifiedMethodIdentifierContext): + pass + + + # Enter a parse tree produced by JavaParser#primitiveType. + def enterPrimitiveType(self, ctx:JavaParser.PrimitiveTypeContext): + pass + + # Exit a parse tree produced by JavaParser#primitiveType. + def exitPrimitiveType(self, ctx:JavaParser.PrimitiveTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#numericType. + def enterNumericType(self, ctx:JavaParser.NumericTypeContext): + pass + + # Exit a parse tree produced by JavaParser#numericType. + def exitNumericType(self, ctx:JavaParser.NumericTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#integralType. + def enterIntegralType(self, ctx:JavaParser.IntegralTypeContext): + pass + + # Exit a parse tree produced by JavaParser#integralType. + def exitIntegralType(self, ctx:JavaParser.IntegralTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#floatingPointType. + def enterFloatingPointType(self, ctx:JavaParser.FloatingPointTypeContext): + pass + + # Exit a parse tree produced by JavaParser#floatingPointType. + def exitFloatingPointType(self, ctx:JavaParser.FloatingPointTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#referenceType. + def enterReferenceType(self, ctx:JavaParser.ReferenceTypeContext): + pass + + # Exit a parse tree produced by JavaParser#referenceType. + def exitReferenceType(self, ctx:JavaParser.ReferenceTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#coit. + def enterCoit(self, ctx:JavaParser.CoitContext): + pass + + # Exit a parse tree produced by JavaParser#coit. + def exitCoit(self, ctx:JavaParser.CoitContext): + pass + + + # Enter a parse tree produced by JavaParser#classOrInterfaceType. + def enterClassOrInterfaceType(self, ctx:JavaParser.ClassOrInterfaceTypeContext): + pass + + # Exit a parse tree produced by JavaParser#classOrInterfaceType. + def exitClassOrInterfaceType(self, ctx:JavaParser.ClassOrInterfaceTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#classType. + def enterClassType(self, ctx:JavaParser.ClassTypeContext): + pass + + # Exit a parse tree produced by JavaParser#classType. + def exitClassType(self, ctx:JavaParser.ClassTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#interfaceType. + def enterInterfaceType(self, ctx:JavaParser.InterfaceTypeContext): + pass + + # Exit a parse tree produced by JavaParser#interfaceType. + def exitInterfaceType(self, ctx:JavaParser.InterfaceTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#typeVariable. + def enterTypeVariable(self, ctx:JavaParser.TypeVariableContext): + pass + + # Exit a parse tree produced by JavaParser#typeVariable. + def exitTypeVariable(self, ctx:JavaParser.TypeVariableContext): + pass + + + # Enter a parse tree produced by JavaParser#arrayType. + def enterArrayType(self, ctx:JavaParser.ArrayTypeContext): + pass + + # Exit a parse tree produced by JavaParser#arrayType. + def exitArrayType(self, ctx:JavaParser.ArrayTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#dims. + def enterDims(self, ctx:JavaParser.DimsContext): + pass + + # Exit a parse tree produced by JavaParser#dims. + def exitDims(self, ctx:JavaParser.DimsContext): + pass + + + # Enter a parse tree produced by JavaParser#typeParameter. + def enterTypeParameter(self, ctx:JavaParser.TypeParameterContext): + pass + + # Exit a parse tree produced by JavaParser#typeParameter. + def exitTypeParameter(self, ctx:JavaParser.TypeParameterContext): + pass + + + # Enter a parse tree produced by JavaParser#typeParameterModifier. + def enterTypeParameterModifier(self, ctx:JavaParser.TypeParameterModifierContext): + pass + + # Exit a parse tree produced by JavaParser#typeParameterModifier. + def exitTypeParameterModifier(self, ctx:JavaParser.TypeParameterModifierContext): + pass + + + # Enter a parse tree produced by JavaParser#typeBound. + def enterTypeBound(self, ctx:JavaParser.TypeBoundContext): + pass + + # Exit a parse tree produced by JavaParser#typeBound. + def exitTypeBound(self, ctx:JavaParser.TypeBoundContext): + pass + + + # Enter a parse tree produced by JavaParser#additionalBound. + def enterAdditionalBound(self, ctx:JavaParser.AdditionalBoundContext): + pass + + # Exit a parse tree produced by JavaParser#additionalBound. + def exitAdditionalBound(self, ctx:JavaParser.AdditionalBoundContext): + pass + + + # Enter a parse tree produced by JavaParser#typeArguments. + def enterTypeArguments(self, ctx:JavaParser.TypeArgumentsContext): + pass + + # Exit a parse tree produced by JavaParser#typeArguments. + def exitTypeArguments(self, ctx:JavaParser.TypeArgumentsContext): + pass + + + # Enter a parse tree produced by JavaParser#typeArgumentList. + def enterTypeArgumentList(self, ctx:JavaParser.TypeArgumentListContext): + pass + + # Exit a parse tree produced by JavaParser#typeArgumentList. + def exitTypeArgumentList(self, ctx:JavaParser.TypeArgumentListContext): + pass + + + # Enter a parse tree produced by JavaParser#typeArgument. + def enterTypeArgument(self, ctx:JavaParser.TypeArgumentContext): + pass + + # Exit a parse tree produced by JavaParser#typeArgument. + def exitTypeArgument(self, ctx:JavaParser.TypeArgumentContext): + pass + + + # Enter a parse tree produced by JavaParser#wildcard. + def enterWildcard(self, ctx:JavaParser.WildcardContext): + pass + + # Exit a parse tree produced by JavaParser#wildcard. + def exitWildcard(self, ctx:JavaParser.WildcardContext): + pass + + + # Enter a parse tree produced by JavaParser#wildcardBounds. + def enterWildcardBounds(self, ctx:JavaParser.WildcardBoundsContext): + pass + + # Exit a parse tree produced by JavaParser#wildcardBounds. + def exitWildcardBounds(self, ctx:JavaParser.WildcardBoundsContext): + pass + + + # Enter a parse tree produced by JavaParser#moduleName. + def enterModuleName(self, ctx:JavaParser.ModuleNameContext): + pass + + # Exit a parse tree produced by JavaParser#moduleName. + def exitModuleName(self, ctx:JavaParser.ModuleNameContext): + pass + + + # Enter a parse tree produced by JavaParser#packageName. + def enterPackageName(self, ctx:JavaParser.PackageNameContext): + pass + + # Exit a parse tree produced by JavaParser#packageName. + def exitPackageName(self, ctx:JavaParser.PackageNameContext): + pass + + + # Enter a parse tree produced by JavaParser#typeName. + def enterTypeName(self, ctx:JavaParser.TypeNameContext): + pass + + # Exit a parse tree produced by JavaParser#typeName. + def exitTypeName(self, ctx:JavaParser.TypeNameContext): + pass + + + # Enter a parse tree produced by JavaParser#packageOrTypeName. + def enterPackageOrTypeName(self, ctx:JavaParser.PackageOrTypeNameContext): + pass + + # Exit a parse tree produced by JavaParser#packageOrTypeName. + def exitPackageOrTypeName(self, ctx:JavaParser.PackageOrTypeNameContext): + pass + + + # Enter a parse tree produced by JavaParser#expressionName. + def enterExpressionName(self, ctx:JavaParser.ExpressionNameContext): + pass + + # Exit a parse tree produced by JavaParser#expressionName. + def exitExpressionName(self, ctx:JavaParser.ExpressionNameContext): + pass + + + # Enter a parse tree produced by JavaParser#methodName. + def enterMethodName(self, ctx:JavaParser.MethodNameContext): + pass + + # Exit a parse tree produced by JavaParser#methodName. + def exitMethodName(self, ctx:JavaParser.MethodNameContext): + pass + + + # Enter a parse tree produced by JavaParser#ambiguousName. + def enterAmbiguousName(self, ctx:JavaParser.AmbiguousNameContext): + pass + + # Exit a parse tree produced by JavaParser#ambiguousName. + def exitAmbiguousName(self, ctx:JavaParser.AmbiguousNameContext): + pass + + + # Enter a parse tree produced by JavaParser#compilationUnit. + def enterCompilationUnit(self, ctx:JavaParser.CompilationUnitContext): + pass + + # Exit a parse tree produced by JavaParser#compilationUnit. + def exitCompilationUnit(self, ctx:JavaParser.CompilationUnitContext): + pass + + + # Enter a parse tree produced by JavaParser#ordinaryCompilationUnit. + def enterOrdinaryCompilationUnit(self, ctx:JavaParser.OrdinaryCompilationUnitContext): + pass + + # Exit a parse tree produced by JavaParser#ordinaryCompilationUnit. + def exitOrdinaryCompilationUnit(self, ctx:JavaParser.OrdinaryCompilationUnitContext): + pass + + + # Enter a parse tree produced by JavaParser#modularCompilationUnit. + def enterModularCompilationUnit(self, ctx:JavaParser.ModularCompilationUnitContext): + pass + + # Exit a parse tree produced by JavaParser#modularCompilationUnit. + def exitModularCompilationUnit(self, ctx:JavaParser.ModularCompilationUnitContext): + pass + + + # Enter a parse tree produced by JavaParser#packageDeclaration. + def enterPackageDeclaration(self, ctx:JavaParser.PackageDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#packageDeclaration. + def exitPackageDeclaration(self, ctx:JavaParser.PackageDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#packageModifier. + def enterPackageModifier(self, ctx:JavaParser.PackageModifierContext): + pass + + # Exit a parse tree produced by JavaParser#packageModifier. + def exitPackageModifier(self, ctx:JavaParser.PackageModifierContext): + pass + + + # Enter a parse tree produced by JavaParser#importDeclaration. + def enterImportDeclaration(self, ctx:JavaParser.ImportDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#importDeclaration. + def exitImportDeclaration(self, ctx:JavaParser.ImportDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#singleTypeImportDeclaration. + def enterSingleTypeImportDeclaration(self, ctx:JavaParser.SingleTypeImportDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#singleTypeImportDeclaration. + def exitSingleTypeImportDeclaration(self, ctx:JavaParser.SingleTypeImportDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#typeImportOnDemandDeclaration. + def enterTypeImportOnDemandDeclaration(self, ctx:JavaParser.TypeImportOnDemandDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#typeImportOnDemandDeclaration. + def exitTypeImportOnDemandDeclaration(self, ctx:JavaParser.TypeImportOnDemandDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#singleStaticImportDeclaration. + def enterSingleStaticImportDeclaration(self, ctx:JavaParser.SingleStaticImportDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#singleStaticImportDeclaration. + def exitSingleStaticImportDeclaration(self, ctx:JavaParser.SingleStaticImportDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#staticImportOnDemandDeclaration. + def enterStaticImportOnDemandDeclaration(self, ctx:JavaParser.StaticImportOnDemandDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#staticImportOnDemandDeclaration. + def exitStaticImportOnDemandDeclaration(self, ctx:JavaParser.StaticImportOnDemandDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#topLevelClassOrInterfaceDeclaration. + def enterTopLevelClassOrInterfaceDeclaration(self, ctx:JavaParser.TopLevelClassOrInterfaceDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#topLevelClassOrInterfaceDeclaration. + def exitTopLevelClassOrInterfaceDeclaration(self, ctx:JavaParser.TopLevelClassOrInterfaceDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#moduleDeclaration. + def enterModuleDeclaration(self, ctx:JavaParser.ModuleDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#moduleDeclaration. + def exitModuleDeclaration(self, ctx:JavaParser.ModuleDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#moduleDirective. + def enterModuleDirective(self, ctx:JavaParser.ModuleDirectiveContext): + pass + + # Exit a parse tree produced by JavaParser#moduleDirective. + def exitModuleDirective(self, ctx:JavaParser.ModuleDirectiveContext): + pass + + + # Enter a parse tree produced by JavaParser#requiresModifier. + def enterRequiresModifier(self, ctx:JavaParser.RequiresModifierContext): + pass + + # Exit a parse tree produced by JavaParser#requiresModifier. + def exitRequiresModifier(self, ctx:JavaParser.RequiresModifierContext): + pass + + + # Enter a parse tree produced by JavaParser#classDeclaration. + def enterClassDeclaration(self, ctx:JavaParser.ClassDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#classDeclaration. + def exitClassDeclaration(self, ctx:JavaParser.ClassDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#normalClassDeclaration. + def enterNormalClassDeclaration(self, ctx:JavaParser.NormalClassDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#normalClassDeclaration. + def exitNormalClassDeclaration(self, ctx:JavaParser.NormalClassDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#classModifier. + def enterClassModifier(self, ctx:JavaParser.ClassModifierContext): + pass + + # Exit a parse tree produced by JavaParser#classModifier. + def exitClassModifier(self, ctx:JavaParser.ClassModifierContext): + pass + + + # Enter a parse tree produced by JavaParser#typeParameters. + def enterTypeParameters(self, ctx:JavaParser.TypeParametersContext): + pass + + # Exit a parse tree produced by JavaParser#typeParameters. + def exitTypeParameters(self, ctx:JavaParser.TypeParametersContext): + pass + + + # Enter a parse tree produced by JavaParser#typeParameterList. + def enterTypeParameterList(self, ctx:JavaParser.TypeParameterListContext): + pass + + # Exit a parse tree produced by JavaParser#typeParameterList. + def exitTypeParameterList(self, ctx:JavaParser.TypeParameterListContext): + pass + + + # Enter a parse tree produced by JavaParser#classExtends. + def enterClassExtends(self, ctx:JavaParser.ClassExtendsContext): + pass + + # Exit a parse tree produced by JavaParser#classExtends. + def exitClassExtends(self, ctx:JavaParser.ClassExtendsContext): + pass + + + # Enter a parse tree produced by JavaParser#classImplements. + def enterClassImplements(self, ctx:JavaParser.ClassImplementsContext): + pass + + # Exit a parse tree produced by JavaParser#classImplements. + def exitClassImplements(self, ctx:JavaParser.ClassImplementsContext): + pass + + + # Enter a parse tree produced by JavaParser#interfaceTypeList. + def enterInterfaceTypeList(self, ctx:JavaParser.InterfaceTypeListContext): + pass + + # Exit a parse tree produced by JavaParser#interfaceTypeList. + def exitInterfaceTypeList(self, ctx:JavaParser.InterfaceTypeListContext): + pass + + + # Enter a parse tree produced by JavaParser#classPermits. + def enterClassPermits(self, ctx:JavaParser.ClassPermitsContext): + pass + + # Exit a parse tree produced by JavaParser#classPermits. + def exitClassPermits(self, ctx:JavaParser.ClassPermitsContext): + pass + + + # Enter a parse tree produced by JavaParser#classBody. + def enterClassBody(self, ctx:JavaParser.ClassBodyContext): + pass + + # Exit a parse tree produced by JavaParser#classBody. + def exitClassBody(self, ctx:JavaParser.ClassBodyContext): + pass + + + # Enter a parse tree produced by JavaParser#classBodyDeclaration. + def enterClassBodyDeclaration(self, ctx:JavaParser.ClassBodyDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#classBodyDeclaration. + def exitClassBodyDeclaration(self, ctx:JavaParser.ClassBodyDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#classMemberDeclaration. + def enterClassMemberDeclaration(self, ctx:JavaParser.ClassMemberDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#classMemberDeclaration. + def exitClassMemberDeclaration(self, ctx:JavaParser.ClassMemberDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#fieldDeclaration. + def enterFieldDeclaration(self, ctx:JavaParser.FieldDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#fieldDeclaration. + def exitFieldDeclaration(self, ctx:JavaParser.FieldDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#fieldModifier. + def enterFieldModifier(self, ctx:JavaParser.FieldModifierContext): + pass + + # Exit a parse tree produced by JavaParser#fieldModifier. + def exitFieldModifier(self, ctx:JavaParser.FieldModifierContext): + pass + + + # Enter a parse tree produced by JavaParser#variableDeclaratorList. + def enterVariableDeclaratorList(self, ctx:JavaParser.VariableDeclaratorListContext): + pass + + # Exit a parse tree produced by JavaParser#variableDeclaratorList. + def exitVariableDeclaratorList(self, ctx:JavaParser.VariableDeclaratorListContext): + pass + + + # Enter a parse tree produced by JavaParser#variableDeclarator. + def enterVariableDeclarator(self, ctx:JavaParser.VariableDeclaratorContext): + pass + + # Exit a parse tree produced by JavaParser#variableDeclarator. + def exitVariableDeclarator(self, ctx:JavaParser.VariableDeclaratorContext): + pass + + + # Enter a parse tree produced by JavaParser#variableDeclaratorId. + def enterVariableDeclaratorId(self, ctx:JavaParser.VariableDeclaratorIdContext): + pass + + # Exit a parse tree produced by JavaParser#variableDeclaratorId. + def exitVariableDeclaratorId(self, ctx:JavaParser.VariableDeclaratorIdContext): + pass + + + # Enter a parse tree produced by JavaParser#variableInitializer. + def enterVariableInitializer(self, ctx:JavaParser.VariableInitializerContext): + pass + + # Exit a parse tree produced by JavaParser#variableInitializer. + def exitVariableInitializer(self, ctx:JavaParser.VariableInitializerContext): + pass + + + # Enter a parse tree produced by JavaParser#unannType. + def enterUnannType(self, ctx:JavaParser.UnannTypeContext): + pass + + # Exit a parse tree produced by JavaParser#unannType. + def exitUnannType(self, ctx:JavaParser.UnannTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#unannPrimitiveType. + def enterUnannPrimitiveType(self, ctx:JavaParser.UnannPrimitiveTypeContext): + pass + + # Exit a parse tree produced by JavaParser#unannPrimitiveType. + def exitUnannPrimitiveType(self, ctx:JavaParser.UnannPrimitiveTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#unannReferenceType. + def enterUnannReferenceType(self, ctx:JavaParser.UnannReferenceTypeContext): + pass + + # Exit a parse tree produced by JavaParser#unannReferenceType. + def exitUnannReferenceType(self, ctx:JavaParser.UnannReferenceTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#unannClassOrInterfaceType. + def enterUnannClassOrInterfaceType(self, ctx:JavaParser.UnannClassOrInterfaceTypeContext): + pass + + # Exit a parse tree produced by JavaParser#unannClassOrInterfaceType. + def exitUnannClassOrInterfaceType(self, ctx:JavaParser.UnannClassOrInterfaceTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#uCOIT. + def enterUCOIT(self, ctx:JavaParser.UCOITContext): + pass + + # Exit a parse tree produced by JavaParser#uCOIT. + def exitUCOIT(self, ctx:JavaParser.UCOITContext): + pass + + + # Enter a parse tree produced by JavaParser#unannClassType. + def enterUnannClassType(self, ctx:JavaParser.UnannClassTypeContext): + pass + + # Exit a parse tree produced by JavaParser#unannClassType. + def exitUnannClassType(self, ctx:JavaParser.UnannClassTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#unannInterfaceType. + def enterUnannInterfaceType(self, ctx:JavaParser.UnannInterfaceTypeContext): + pass + + # Exit a parse tree produced by JavaParser#unannInterfaceType. + def exitUnannInterfaceType(self, ctx:JavaParser.UnannInterfaceTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#unannTypeVariable. + def enterUnannTypeVariable(self, ctx:JavaParser.UnannTypeVariableContext): + pass + + # Exit a parse tree produced by JavaParser#unannTypeVariable. + def exitUnannTypeVariable(self, ctx:JavaParser.UnannTypeVariableContext): + pass + + + # Enter a parse tree produced by JavaParser#unannArrayType. + def enterUnannArrayType(self, ctx:JavaParser.UnannArrayTypeContext): + pass + + # Exit a parse tree produced by JavaParser#unannArrayType. + def exitUnannArrayType(self, ctx:JavaParser.UnannArrayTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#methodDeclaration. + def enterMethodDeclaration(self, ctx:JavaParser.MethodDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#methodDeclaration. + def exitMethodDeclaration(self, ctx:JavaParser.MethodDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#methodModifier. + def enterMethodModifier(self, ctx:JavaParser.MethodModifierContext): + pass + + # Exit a parse tree produced by JavaParser#methodModifier. + def exitMethodModifier(self, ctx:JavaParser.MethodModifierContext): + pass + + + # Enter a parse tree produced by JavaParser#methodHeader. + def enterMethodHeader(self, ctx:JavaParser.MethodHeaderContext): + pass + + # Exit a parse tree produced by JavaParser#methodHeader. + def exitMethodHeader(self, ctx:JavaParser.MethodHeaderContext): + pass + + + # Enter a parse tree produced by JavaParser#result. + def enterResult(self, ctx:JavaParser.ResultContext): + pass + + # Exit a parse tree produced by JavaParser#result. + def exitResult(self, ctx:JavaParser.ResultContext): + pass + + + # Enter a parse tree produced by JavaParser#methodDeclarator. + def enterMethodDeclarator(self, ctx:JavaParser.MethodDeclaratorContext): + pass + + # Exit a parse tree produced by JavaParser#methodDeclarator. + def exitMethodDeclarator(self, ctx:JavaParser.MethodDeclaratorContext): + pass + + + # Enter a parse tree produced by JavaParser#receiverParameter. + def enterReceiverParameter(self, ctx:JavaParser.ReceiverParameterContext): + pass + + # Exit a parse tree produced by JavaParser#receiverParameter. + def exitReceiverParameter(self, ctx:JavaParser.ReceiverParameterContext): + pass + + + # Enter a parse tree produced by JavaParser#formalParameterList. + def enterFormalParameterList(self, ctx:JavaParser.FormalParameterListContext): + pass + + # Exit a parse tree produced by JavaParser#formalParameterList. + def exitFormalParameterList(self, ctx:JavaParser.FormalParameterListContext): + pass + + + # Enter a parse tree produced by JavaParser#formalParameter. + def enterFormalParameter(self, ctx:JavaParser.FormalParameterContext): + pass + + # Exit a parse tree produced by JavaParser#formalParameter. + def exitFormalParameter(self, ctx:JavaParser.FormalParameterContext): + pass + + + # Enter a parse tree produced by JavaParser#variableArityParameter. + def enterVariableArityParameter(self, ctx:JavaParser.VariableArityParameterContext): + pass + + # Exit a parse tree produced by JavaParser#variableArityParameter. + def exitVariableArityParameter(self, ctx:JavaParser.VariableArityParameterContext): + pass + + + # Enter a parse tree produced by JavaParser#variableModifier. + def enterVariableModifier(self, ctx:JavaParser.VariableModifierContext): + pass + + # Exit a parse tree produced by JavaParser#variableModifier. + def exitVariableModifier(self, ctx:JavaParser.VariableModifierContext): + pass + + + # Enter a parse tree produced by JavaParser#throwsT. + def enterThrowsT(self, ctx:JavaParser.ThrowsTContext): + pass + + # Exit a parse tree produced by JavaParser#throwsT. + def exitThrowsT(self, ctx:JavaParser.ThrowsTContext): + pass + + + # Enter a parse tree produced by JavaParser#exceptionTypeList. + def enterExceptionTypeList(self, ctx:JavaParser.ExceptionTypeListContext): + pass + + # Exit a parse tree produced by JavaParser#exceptionTypeList. + def exitExceptionTypeList(self, ctx:JavaParser.ExceptionTypeListContext): + pass + + + # Enter a parse tree produced by JavaParser#exceptionType. + def enterExceptionType(self, ctx:JavaParser.ExceptionTypeContext): + pass + + # Exit a parse tree produced by JavaParser#exceptionType. + def exitExceptionType(self, ctx:JavaParser.ExceptionTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#methodBody. + def enterMethodBody(self, ctx:JavaParser.MethodBodyContext): + pass + + # Exit a parse tree produced by JavaParser#methodBody. + def exitMethodBody(self, ctx:JavaParser.MethodBodyContext): + pass + + + # Enter a parse tree produced by JavaParser#instanceInitializer. + def enterInstanceInitializer(self, ctx:JavaParser.InstanceInitializerContext): + pass + + # Exit a parse tree produced by JavaParser#instanceInitializer. + def exitInstanceInitializer(self, ctx:JavaParser.InstanceInitializerContext): + pass + + + # Enter a parse tree produced by JavaParser#staticInitializer. + def enterStaticInitializer(self, ctx:JavaParser.StaticInitializerContext): + pass + + # Exit a parse tree produced by JavaParser#staticInitializer. + def exitStaticInitializer(self, ctx:JavaParser.StaticInitializerContext): + pass + + + # Enter a parse tree produced by JavaParser#constructorDeclaration. + def enterConstructorDeclaration(self, ctx:JavaParser.ConstructorDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#constructorDeclaration. + def exitConstructorDeclaration(self, ctx:JavaParser.ConstructorDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#constructorModifier. + def enterConstructorModifier(self, ctx:JavaParser.ConstructorModifierContext): + pass + + # Exit a parse tree produced by JavaParser#constructorModifier. + def exitConstructorModifier(self, ctx:JavaParser.ConstructorModifierContext): + pass + + + # Enter a parse tree produced by JavaParser#constructorDeclarator. + def enterConstructorDeclarator(self, ctx:JavaParser.ConstructorDeclaratorContext): + pass + + # Exit a parse tree produced by JavaParser#constructorDeclarator. + def exitConstructorDeclarator(self, ctx:JavaParser.ConstructorDeclaratorContext): + pass + + + # Enter a parse tree produced by JavaParser#simpleTypeName. + def enterSimpleTypeName(self, ctx:JavaParser.SimpleTypeNameContext): + pass + + # Exit a parse tree produced by JavaParser#simpleTypeName. + def exitSimpleTypeName(self, ctx:JavaParser.SimpleTypeNameContext): + pass + + + # Enter a parse tree produced by JavaParser#constructorBody. + def enterConstructorBody(self, ctx:JavaParser.ConstructorBodyContext): + pass + + # Exit a parse tree produced by JavaParser#constructorBody. + def exitConstructorBody(self, ctx:JavaParser.ConstructorBodyContext): + pass + + + # Enter a parse tree produced by JavaParser#explicitConstructorInvocation. + def enterExplicitConstructorInvocation(self, ctx:JavaParser.ExplicitConstructorInvocationContext): + pass + + # Exit a parse tree produced by JavaParser#explicitConstructorInvocation. + def exitExplicitConstructorInvocation(self, ctx:JavaParser.ExplicitConstructorInvocationContext): + pass + + + # Enter a parse tree produced by JavaParser#enumDeclaration. + def enterEnumDeclaration(self, ctx:JavaParser.EnumDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#enumDeclaration. + def exitEnumDeclaration(self, ctx:JavaParser.EnumDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#enumBody. + def enterEnumBody(self, ctx:JavaParser.EnumBodyContext): + pass + + # Exit a parse tree produced by JavaParser#enumBody. + def exitEnumBody(self, ctx:JavaParser.EnumBodyContext): + pass + + + # Enter a parse tree produced by JavaParser#enumConstantList. + def enterEnumConstantList(self, ctx:JavaParser.EnumConstantListContext): + pass + + # Exit a parse tree produced by JavaParser#enumConstantList. + def exitEnumConstantList(self, ctx:JavaParser.EnumConstantListContext): + pass + + + # Enter a parse tree produced by JavaParser#enumConstant. + def enterEnumConstant(self, ctx:JavaParser.EnumConstantContext): + pass + + # Exit a parse tree produced by JavaParser#enumConstant. + def exitEnumConstant(self, ctx:JavaParser.EnumConstantContext): + pass + + + # Enter a parse tree produced by JavaParser#enumConstantModifier. + def enterEnumConstantModifier(self, ctx:JavaParser.EnumConstantModifierContext): + pass + + # Exit a parse tree produced by JavaParser#enumConstantModifier. + def exitEnumConstantModifier(self, ctx:JavaParser.EnumConstantModifierContext): + pass + + + # Enter a parse tree produced by JavaParser#enumBodyDeclarations. + def enterEnumBodyDeclarations(self, ctx:JavaParser.EnumBodyDeclarationsContext): + pass + + # Exit a parse tree produced by JavaParser#enumBodyDeclarations. + def exitEnumBodyDeclarations(self, ctx:JavaParser.EnumBodyDeclarationsContext): + pass + + + # Enter a parse tree produced by JavaParser#recordDeclaration. + def enterRecordDeclaration(self, ctx:JavaParser.RecordDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#recordDeclaration. + def exitRecordDeclaration(self, ctx:JavaParser.RecordDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#recordHeader. + def enterRecordHeader(self, ctx:JavaParser.RecordHeaderContext): + pass + + # Exit a parse tree produced by JavaParser#recordHeader. + def exitRecordHeader(self, ctx:JavaParser.RecordHeaderContext): + pass + + + # Enter a parse tree produced by JavaParser#recordComponentList. + def enterRecordComponentList(self, ctx:JavaParser.RecordComponentListContext): + pass + + # Exit a parse tree produced by JavaParser#recordComponentList. + def exitRecordComponentList(self, ctx:JavaParser.RecordComponentListContext): + pass + + + # Enter a parse tree produced by JavaParser#recordComponent. + def enterRecordComponent(self, ctx:JavaParser.RecordComponentContext): + pass + + # Exit a parse tree produced by JavaParser#recordComponent. + def exitRecordComponent(self, ctx:JavaParser.RecordComponentContext): + pass + + + # Enter a parse tree produced by JavaParser#variableArityRecordComponent. + def enterVariableArityRecordComponent(self, ctx:JavaParser.VariableArityRecordComponentContext): + pass + + # Exit a parse tree produced by JavaParser#variableArityRecordComponent. + def exitVariableArityRecordComponent(self, ctx:JavaParser.VariableArityRecordComponentContext): + pass + + + # Enter a parse tree produced by JavaParser#recordComponentModifier. + def enterRecordComponentModifier(self, ctx:JavaParser.RecordComponentModifierContext): + pass + + # Exit a parse tree produced by JavaParser#recordComponentModifier. + def exitRecordComponentModifier(self, ctx:JavaParser.RecordComponentModifierContext): + pass + + + # Enter a parse tree produced by JavaParser#recordBody. + def enterRecordBody(self, ctx:JavaParser.RecordBodyContext): + pass + + # Exit a parse tree produced by JavaParser#recordBody. + def exitRecordBody(self, ctx:JavaParser.RecordBodyContext): + pass + + + # Enter a parse tree produced by JavaParser#recordBodyDeclaration. + def enterRecordBodyDeclaration(self, ctx:JavaParser.RecordBodyDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#recordBodyDeclaration. + def exitRecordBodyDeclaration(self, ctx:JavaParser.RecordBodyDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#compactConstructorDeclaration. + def enterCompactConstructorDeclaration(self, ctx:JavaParser.CompactConstructorDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#compactConstructorDeclaration. + def exitCompactConstructorDeclaration(self, ctx:JavaParser.CompactConstructorDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#interfaceDeclaration. + def enterInterfaceDeclaration(self, ctx:JavaParser.InterfaceDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#interfaceDeclaration. + def exitInterfaceDeclaration(self, ctx:JavaParser.InterfaceDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#normalInterfaceDeclaration. + def enterNormalInterfaceDeclaration(self, ctx:JavaParser.NormalInterfaceDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#normalInterfaceDeclaration. + def exitNormalInterfaceDeclaration(self, ctx:JavaParser.NormalInterfaceDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#interfaceModifier. + def enterInterfaceModifier(self, ctx:JavaParser.InterfaceModifierContext): + pass + + # Exit a parse tree produced by JavaParser#interfaceModifier. + def exitInterfaceModifier(self, ctx:JavaParser.InterfaceModifierContext): + pass + + + # Enter a parse tree produced by JavaParser#interfaceExtends. + def enterInterfaceExtends(self, ctx:JavaParser.InterfaceExtendsContext): + pass + + # Exit a parse tree produced by JavaParser#interfaceExtends. + def exitInterfaceExtends(self, ctx:JavaParser.InterfaceExtendsContext): + pass + + + # Enter a parse tree produced by JavaParser#interfacePermits. + def enterInterfacePermits(self, ctx:JavaParser.InterfacePermitsContext): + pass + + # Exit a parse tree produced by JavaParser#interfacePermits. + def exitInterfacePermits(self, ctx:JavaParser.InterfacePermitsContext): + pass + + + # Enter a parse tree produced by JavaParser#interfaceBody. + def enterInterfaceBody(self, ctx:JavaParser.InterfaceBodyContext): + pass + + # Exit a parse tree produced by JavaParser#interfaceBody. + def exitInterfaceBody(self, ctx:JavaParser.InterfaceBodyContext): + pass + + + # Enter a parse tree produced by JavaParser#interfaceMemberDeclaration. + def enterInterfaceMemberDeclaration(self, ctx:JavaParser.InterfaceMemberDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#interfaceMemberDeclaration. + def exitInterfaceMemberDeclaration(self, ctx:JavaParser.InterfaceMemberDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#constantDeclaration. + def enterConstantDeclaration(self, ctx:JavaParser.ConstantDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#constantDeclaration. + def exitConstantDeclaration(self, ctx:JavaParser.ConstantDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#constantModifier. + def enterConstantModifier(self, ctx:JavaParser.ConstantModifierContext): + pass + + # Exit a parse tree produced by JavaParser#constantModifier. + def exitConstantModifier(self, ctx:JavaParser.ConstantModifierContext): + pass + + + # Enter a parse tree produced by JavaParser#interfaceMethodDeclaration. + def enterInterfaceMethodDeclaration(self, ctx:JavaParser.InterfaceMethodDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#interfaceMethodDeclaration. + def exitInterfaceMethodDeclaration(self, ctx:JavaParser.InterfaceMethodDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#interfaceMethodModifier. + def enterInterfaceMethodModifier(self, ctx:JavaParser.InterfaceMethodModifierContext): + pass + + # Exit a parse tree produced by JavaParser#interfaceMethodModifier. + def exitInterfaceMethodModifier(self, ctx:JavaParser.InterfaceMethodModifierContext): + pass + + + # Enter a parse tree produced by JavaParser#annotationInterfaceDeclaration. + def enterAnnotationInterfaceDeclaration(self, ctx:JavaParser.AnnotationInterfaceDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#annotationInterfaceDeclaration. + def exitAnnotationInterfaceDeclaration(self, ctx:JavaParser.AnnotationInterfaceDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#annotationInterfaceBody. + def enterAnnotationInterfaceBody(self, ctx:JavaParser.AnnotationInterfaceBodyContext): + pass + + # Exit a parse tree produced by JavaParser#annotationInterfaceBody. + def exitAnnotationInterfaceBody(self, ctx:JavaParser.AnnotationInterfaceBodyContext): + pass + + + # Enter a parse tree produced by JavaParser#annotationInterfaceMemberDeclaration. + def enterAnnotationInterfaceMemberDeclaration(self, ctx:JavaParser.AnnotationInterfaceMemberDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#annotationInterfaceMemberDeclaration. + def exitAnnotationInterfaceMemberDeclaration(self, ctx:JavaParser.AnnotationInterfaceMemberDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#annotationInterfaceElementDeclaration. + def enterAnnotationInterfaceElementDeclaration(self, ctx:JavaParser.AnnotationInterfaceElementDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#annotationInterfaceElementDeclaration. + def exitAnnotationInterfaceElementDeclaration(self, ctx:JavaParser.AnnotationInterfaceElementDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#annotationInterfaceElementModifier. + def enterAnnotationInterfaceElementModifier(self, ctx:JavaParser.AnnotationInterfaceElementModifierContext): + pass + + # Exit a parse tree produced by JavaParser#annotationInterfaceElementModifier. + def exitAnnotationInterfaceElementModifier(self, ctx:JavaParser.AnnotationInterfaceElementModifierContext): + pass + + + # Enter a parse tree produced by JavaParser#defaultValue. + def enterDefaultValue(self, ctx:JavaParser.DefaultValueContext): + pass + + # Exit a parse tree produced by JavaParser#defaultValue. + def exitDefaultValue(self, ctx:JavaParser.DefaultValueContext): + pass + + + # Enter a parse tree produced by JavaParser#annotation. + def enterAnnotation(self, ctx:JavaParser.AnnotationContext): + pass + + # Exit a parse tree produced by JavaParser#annotation. + def exitAnnotation(self, ctx:JavaParser.AnnotationContext): + pass + + + # Enter a parse tree produced by JavaParser#normalAnnotation. + def enterNormalAnnotation(self, ctx:JavaParser.NormalAnnotationContext): + pass + + # Exit a parse tree produced by JavaParser#normalAnnotation. + def exitNormalAnnotation(self, ctx:JavaParser.NormalAnnotationContext): + pass + + + # Enter a parse tree produced by JavaParser#elementValuePairList. + def enterElementValuePairList(self, ctx:JavaParser.ElementValuePairListContext): + pass + + # Exit a parse tree produced by JavaParser#elementValuePairList. + def exitElementValuePairList(self, ctx:JavaParser.ElementValuePairListContext): + pass + + + # Enter a parse tree produced by JavaParser#elementValuePair. + def enterElementValuePair(self, ctx:JavaParser.ElementValuePairContext): + pass + + # Exit a parse tree produced by JavaParser#elementValuePair. + def exitElementValuePair(self, ctx:JavaParser.ElementValuePairContext): + pass + + + # Enter a parse tree produced by JavaParser#elementValue. + def enterElementValue(self, ctx:JavaParser.ElementValueContext): + pass + + # Exit a parse tree produced by JavaParser#elementValue. + def exitElementValue(self, ctx:JavaParser.ElementValueContext): + pass + + + # Enter a parse tree produced by JavaParser#elementValueArrayInitializer. + def enterElementValueArrayInitializer(self, ctx:JavaParser.ElementValueArrayInitializerContext): + pass + + # Exit a parse tree produced by JavaParser#elementValueArrayInitializer. + def exitElementValueArrayInitializer(self, ctx:JavaParser.ElementValueArrayInitializerContext): + pass + + + # Enter a parse tree produced by JavaParser#elementValueList. + def enterElementValueList(self, ctx:JavaParser.ElementValueListContext): + pass + + # Exit a parse tree produced by JavaParser#elementValueList. + def exitElementValueList(self, ctx:JavaParser.ElementValueListContext): + pass + + + # Enter a parse tree produced by JavaParser#markerAnnotation. + def enterMarkerAnnotation(self, ctx:JavaParser.MarkerAnnotationContext): + pass + + # Exit a parse tree produced by JavaParser#markerAnnotation. + def exitMarkerAnnotation(self, ctx:JavaParser.MarkerAnnotationContext): + pass + + + # Enter a parse tree produced by JavaParser#singleElementAnnotation. + def enterSingleElementAnnotation(self, ctx:JavaParser.SingleElementAnnotationContext): + pass + + # Exit a parse tree produced by JavaParser#singleElementAnnotation. + def exitSingleElementAnnotation(self, ctx:JavaParser.SingleElementAnnotationContext): + pass + + + # Enter a parse tree produced by JavaParser#arrayInitializer. + def enterArrayInitializer(self, ctx:JavaParser.ArrayInitializerContext): + pass + + # Exit a parse tree produced by JavaParser#arrayInitializer. + def exitArrayInitializer(self, ctx:JavaParser.ArrayInitializerContext): + pass + + + # Enter a parse tree produced by JavaParser#variableInitializerList. + def enterVariableInitializerList(self, ctx:JavaParser.VariableInitializerListContext): + pass + + # Exit a parse tree produced by JavaParser#variableInitializerList. + def exitVariableInitializerList(self, ctx:JavaParser.VariableInitializerListContext): + pass + + + # Enter a parse tree produced by JavaParser#block. + def enterBlock(self, ctx:JavaParser.BlockContext): + pass + + # Exit a parse tree produced by JavaParser#block. + def exitBlock(self, ctx:JavaParser.BlockContext): + pass + + + # Enter a parse tree produced by JavaParser#blockStatements. + def enterBlockStatements(self, ctx:JavaParser.BlockStatementsContext): + pass + + # Exit a parse tree produced by JavaParser#blockStatements. + def exitBlockStatements(self, ctx:JavaParser.BlockStatementsContext): + pass + + + # Enter a parse tree produced by JavaParser#blockStatement. + def enterBlockStatement(self, ctx:JavaParser.BlockStatementContext): + pass + + # Exit a parse tree produced by JavaParser#blockStatement. + def exitBlockStatement(self, ctx:JavaParser.BlockStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#localClassOrInterfaceDeclaration. + def enterLocalClassOrInterfaceDeclaration(self, ctx:JavaParser.LocalClassOrInterfaceDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#localClassOrInterfaceDeclaration. + def exitLocalClassOrInterfaceDeclaration(self, ctx:JavaParser.LocalClassOrInterfaceDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#localVariableDeclaration. + def enterLocalVariableDeclaration(self, ctx:JavaParser.LocalVariableDeclarationContext): + pass + + # Exit a parse tree produced by JavaParser#localVariableDeclaration. + def exitLocalVariableDeclaration(self, ctx:JavaParser.LocalVariableDeclarationContext): + pass + + + # Enter a parse tree produced by JavaParser#localVariableType. + def enterLocalVariableType(self, ctx:JavaParser.LocalVariableTypeContext): + pass + + # Exit a parse tree produced by JavaParser#localVariableType. + def exitLocalVariableType(self, ctx:JavaParser.LocalVariableTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#localVariableDeclarationStatement. + def enterLocalVariableDeclarationStatement(self, ctx:JavaParser.LocalVariableDeclarationStatementContext): + pass + + # Exit a parse tree produced by JavaParser#localVariableDeclarationStatement. + def exitLocalVariableDeclarationStatement(self, ctx:JavaParser.LocalVariableDeclarationStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#statement. + def enterStatement(self, ctx:JavaParser.StatementContext): + pass + + # Exit a parse tree produced by JavaParser#statement. + def exitStatement(self, ctx:JavaParser.StatementContext): + pass + + + # Enter a parse tree produced by JavaParser#statementNoShortIf. + def enterStatementNoShortIf(self, ctx:JavaParser.StatementNoShortIfContext): + pass + + # Exit a parse tree produced by JavaParser#statementNoShortIf. + def exitStatementNoShortIf(self, ctx:JavaParser.StatementNoShortIfContext): + pass + + + # Enter a parse tree produced by JavaParser#statementWithoutTrailingSubstatement. + def enterStatementWithoutTrailingSubstatement(self, ctx:JavaParser.StatementWithoutTrailingSubstatementContext): + pass + + # Exit a parse tree produced by JavaParser#statementWithoutTrailingSubstatement. + def exitStatementWithoutTrailingSubstatement(self, ctx:JavaParser.StatementWithoutTrailingSubstatementContext): + pass + + + # Enter a parse tree produced by JavaParser#emptyStatement_. + def enterEmptyStatement_(self, ctx:JavaParser.EmptyStatement_Context): + pass + + # Exit a parse tree produced by JavaParser#emptyStatement_. + def exitEmptyStatement_(self, ctx:JavaParser.EmptyStatement_Context): + pass + + + # Enter a parse tree produced by JavaParser#labeledStatement. + def enterLabeledStatement(self, ctx:JavaParser.LabeledStatementContext): + pass + + # Exit a parse tree produced by JavaParser#labeledStatement. + def exitLabeledStatement(self, ctx:JavaParser.LabeledStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#labeledStatementNoShortIf. + def enterLabeledStatementNoShortIf(self, ctx:JavaParser.LabeledStatementNoShortIfContext): + pass + + # Exit a parse tree produced by JavaParser#labeledStatementNoShortIf. + def exitLabeledStatementNoShortIf(self, ctx:JavaParser.LabeledStatementNoShortIfContext): + pass + + + # Enter a parse tree produced by JavaParser#expressionStatement. + def enterExpressionStatement(self, ctx:JavaParser.ExpressionStatementContext): + pass + + # Exit a parse tree produced by JavaParser#expressionStatement. + def exitExpressionStatement(self, ctx:JavaParser.ExpressionStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#statementExpression. + def enterStatementExpression(self, ctx:JavaParser.StatementExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#statementExpression. + def exitStatementExpression(self, ctx:JavaParser.StatementExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#ifThenStatement. + def enterIfThenStatement(self, ctx:JavaParser.IfThenStatementContext): + pass + + # Exit a parse tree produced by JavaParser#ifThenStatement. + def exitIfThenStatement(self, ctx:JavaParser.IfThenStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#ifThenElseStatement. + def enterIfThenElseStatement(self, ctx:JavaParser.IfThenElseStatementContext): + pass + + # Exit a parse tree produced by JavaParser#ifThenElseStatement. + def exitIfThenElseStatement(self, ctx:JavaParser.IfThenElseStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#ifThenElseStatementNoShortIf. + def enterIfThenElseStatementNoShortIf(self, ctx:JavaParser.IfThenElseStatementNoShortIfContext): + pass + + # Exit a parse tree produced by JavaParser#ifThenElseStatementNoShortIf. + def exitIfThenElseStatementNoShortIf(self, ctx:JavaParser.IfThenElseStatementNoShortIfContext): + pass + + + # Enter a parse tree produced by JavaParser#assertStatement. + def enterAssertStatement(self, ctx:JavaParser.AssertStatementContext): + pass + + # Exit a parse tree produced by JavaParser#assertStatement. + def exitAssertStatement(self, ctx:JavaParser.AssertStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#switchStatement. + def enterSwitchStatement(self, ctx:JavaParser.SwitchStatementContext): + pass + + # Exit a parse tree produced by JavaParser#switchStatement. + def exitSwitchStatement(self, ctx:JavaParser.SwitchStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#switchBlock. + def enterSwitchBlock(self, ctx:JavaParser.SwitchBlockContext): + pass + + # Exit a parse tree produced by JavaParser#switchBlock. + def exitSwitchBlock(self, ctx:JavaParser.SwitchBlockContext): + pass + + + # Enter a parse tree produced by JavaParser#switchRule. + def enterSwitchRule(self, ctx:JavaParser.SwitchRuleContext): + pass + + # Exit a parse tree produced by JavaParser#switchRule. + def exitSwitchRule(self, ctx:JavaParser.SwitchRuleContext): + pass + + + # Enter a parse tree produced by JavaParser#switchBlockStatementGroup. + def enterSwitchBlockStatementGroup(self, ctx:JavaParser.SwitchBlockStatementGroupContext): + pass + + # Exit a parse tree produced by JavaParser#switchBlockStatementGroup. + def exitSwitchBlockStatementGroup(self, ctx:JavaParser.SwitchBlockStatementGroupContext): + pass + + + # Enter a parse tree produced by JavaParser#switchLabel. + def enterSwitchLabel(self, ctx:JavaParser.SwitchLabelContext): + pass + + # Exit a parse tree produced by JavaParser#switchLabel. + def exitSwitchLabel(self, ctx:JavaParser.SwitchLabelContext): + pass + + + # Enter a parse tree produced by JavaParser#caseConstant. + def enterCaseConstant(self, ctx:JavaParser.CaseConstantContext): + pass + + # Exit a parse tree produced by JavaParser#caseConstant. + def exitCaseConstant(self, ctx:JavaParser.CaseConstantContext): + pass + + + # Enter a parse tree produced by JavaParser#whileStatement. + def enterWhileStatement(self, ctx:JavaParser.WhileStatementContext): + pass + + # Exit a parse tree produced by JavaParser#whileStatement. + def exitWhileStatement(self, ctx:JavaParser.WhileStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#whileStatementNoShortIf. + def enterWhileStatementNoShortIf(self, ctx:JavaParser.WhileStatementNoShortIfContext): + pass + + # Exit a parse tree produced by JavaParser#whileStatementNoShortIf. + def exitWhileStatementNoShortIf(self, ctx:JavaParser.WhileStatementNoShortIfContext): + pass + + + # Enter a parse tree produced by JavaParser#doStatement. + def enterDoStatement(self, ctx:JavaParser.DoStatementContext): + pass + + # Exit a parse tree produced by JavaParser#doStatement. + def exitDoStatement(self, ctx:JavaParser.DoStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#forStatement. + def enterForStatement(self, ctx:JavaParser.ForStatementContext): + pass + + # Exit a parse tree produced by JavaParser#forStatement. + def exitForStatement(self, ctx:JavaParser.ForStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#forStatementNoShortIf. + def enterForStatementNoShortIf(self, ctx:JavaParser.ForStatementNoShortIfContext): + pass + + # Exit a parse tree produced by JavaParser#forStatementNoShortIf. + def exitForStatementNoShortIf(self, ctx:JavaParser.ForStatementNoShortIfContext): + pass + + + # Enter a parse tree produced by JavaParser#basicForStatement. + def enterBasicForStatement(self, ctx:JavaParser.BasicForStatementContext): + pass + + # Exit a parse tree produced by JavaParser#basicForStatement. + def exitBasicForStatement(self, ctx:JavaParser.BasicForStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#basicForStatementNoShortIf. + def enterBasicForStatementNoShortIf(self, ctx:JavaParser.BasicForStatementNoShortIfContext): + pass + + # Exit a parse tree produced by JavaParser#basicForStatementNoShortIf. + def exitBasicForStatementNoShortIf(self, ctx:JavaParser.BasicForStatementNoShortIfContext): + pass + + + # Enter a parse tree produced by JavaParser#forInit. + def enterForInit(self, ctx:JavaParser.ForInitContext): + pass + + # Exit a parse tree produced by JavaParser#forInit. + def exitForInit(self, ctx:JavaParser.ForInitContext): + pass + + + # Enter a parse tree produced by JavaParser#forUpdate. + def enterForUpdate(self, ctx:JavaParser.ForUpdateContext): + pass + + # Exit a parse tree produced by JavaParser#forUpdate. + def exitForUpdate(self, ctx:JavaParser.ForUpdateContext): + pass + + + # Enter a parse tree produced by JavaParser#statementExpressionList. + def enterStatementExpressionList(self, ctx:JavaParser.StatementExpressionListContext): + pass + + # Exit a parse tree produced by JavaParser#statementExpressionList. + def exitStatementExpressionList(self, ctx:JavaParser.StatementExpressionListContext): + pass + + + # Enter a parse tree produced by JavaParser#enhancedForStatement. + def enterEnhancedForStatement(self, ctx:JavaParser.EnhancedForStatementContext): + pass + + # Exit a parse tree produced by JavaParser#enhancedForStatement. + def exitEnhancedForStatement(self, ctx:JavaParser.EnhancedForStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#enhancedForStatementNoShortIf. + def enterEnhancedForStatementNoShortIf(self, ctx:JavaParser.EnhancedForStatementNoShortIfContext): + pass + + # Exit a parse tree produced by JavaParser#enhancedForStatementNoShortIf. + def exitEnhancedForStatementNoShortIf(self, ctx:JavaParser.EnhancedForStatementNoShortIfContext): + pass + + + # Enter a parse tree produced by JavaParser#breakStatement. + def enterBreakStatement(self, ctx:JavaParser.BreakStatementContext): + pass + + # Exit a parse tree produced by JavaParser#breakStatement. + def exitBreakStatement(self, ctx:JavaParser.BreakStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#continueStatement. + def enterContinueStatement(self, ctx:JavaParser.ContinueStatementContext): + pass + + # Exit a parse tree produced by JavaParser#continueStatement. + def exitContinueStatement(self, ctx:JavaParser.ContinueStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#returnStatement. + def enterReturnStatement(self, ctx:JavaParser.ReturnStatementContext): + pass + + # Exit a parse tree produced by JavaParser#returnStatement. + def exitReturnStatement(self, ctx:JavaParser.ReturnStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#throwStatement. + def enterThrowStatement(self, ctx:JavaParser.ThrowStatementContext): + pass + + # Exit a parse tree produced by JavaParser#throwStatement. + def exitThrowStatement(self, ctx:JavaParser.ThrowStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#synchronizedStatement. + def enterSynchronizedStatement(self, ctx:JavaParser.SynchronizedStatementContext): + pass + + # Exit a parse tree produced by JavaParser#synchronizedStatement. + def exitSynchronizedStatement(self, ctx:JavaParser.SynchronizedStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#tryStatement. + def enterTryStatement(self, ctx:JavaParser.TryStatementContext): + pass + + # Exit a parse tree produced by JavaParser#tryStatement. + def exitTryStatement(self, ctx:JavaParser.TryStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#catches. + def enterCatches(self, ctx:JavaParser.CatchesContext): + pass + + # Exit a parse tree produced by JavaParser#catches. + def exitCatches(self, ctx:JavaParser.CatchesContext): + pass + + + # Enter a parse tree produced by JavaParser#catchClause. + def enterCatchClause(self, ctx:JavaParser.CatchClauseContext): + pass + + # Exit a parse tree produced by JavaParser#catchClause. + def exitCatchClause(self, ctx:JavaParser.CatchClauseContext): + pass + + + # Enter a parse tree produced by JavaParser#catchFormalParameter. + def enterCatchFormalParameter(self, ctx:JavaParser.CatchFormalParameterContext): + pass + + # Exit a parse tree produced by JavaParser#catchFormalParameter. + def exitCatchFormalParameter(self, ctx:JavaParser.CatchFormalParameterContext): + pass + + + # Enter a parse tree produced by JavaParser#catchType. + def enterCatchType(self, ctx:JavaParser.CatchTypeContext): + pass + + # Exit a parse tree produced by JavaParser#catchType. + def exitCatchType(self, ctx:JavaParser.CatchTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#finallyBlock. + def enterFinallyBlock(self, ctx:JavaParser.FinallyBlockContext): + pass + + # Exit a parse tree produced by JavaParser#finallyBlock. + def exitFinallyBlock(self, ctx:JavaParser.FinallyBlockContext): + pass + + + # Enter a parse tree produced by JavaParser#tryWithResourcesStatement. + def enterTryWithResourcesStatement(self, ctx:JavaParser.TryWithResourcesStatementContext): + pass + + # Exit a parse tree produced by JavaParser#tryWithResourcesStatement. + def exitTryWithResourcesStatement(self, ctx:JavaParser.TryWithResourcesStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#resourceSpecification. + def enterResourceSpecification(self, ctx:JavaParser.ResourceSpecificationContext): + pass + + # Exit a parse tree produced by JavaParser#resourceSpecification. + def exitResourceSpecification(self, ctx:JavaParser.ResourceSpecificationContext): + pass + + + # Enter a parse tree produced by JavaParser#resourceList. + def enterResourceList(self, ctx:JavaParser.ResourceListContext): + pass + + # Exit a parse tree produced by JavaParser#resourceList. + def exitResourceList(self, ctx:JavaParser.ResourceListContext): + pass + + + # Enter a parse tree produced by JavaParser#resource. + def enterResource(self, ctx:JavaParser.ResourceContext): + pass + + # Exit a parse tree produced by JavaParser#resource. + def exitResource(self, ctx:JavaParser.ResourceContext): + pass + + + # Enter a parse tree produced by JavaParser#variableAccess. + def enterVariableAccess(self, ctx:JavaParser.VariableAccessContext): + pass + + # Exit a parse tree produced by JavaParser#variableAccess. + def exitVariableAccess(self, ctx:JavaParser.VariableAccessContext): + pass + + + # Enter a parse tree produced by JavaParser#yieldStatement. + def enterYieldStatement(self, ctx:JavaParser.YieldStatementContext): + pass + + # Exit a parse tree produced by JavaParser#yieldStatement. + def exitYieldStatement(self, ctx:JavaParser.YieldStatementContext): + pass + + + # Enter a parse tree produced by JavaParser#pattern. + def enterPattern(self, ctx:JavaParser.PatternContext): + pass + + # Exit a parse tree produced by JavaParser#pattern. + def exitPattern(self, ctx:JavaParser.PatternContext): + pass + + + # Enter a parse tree produced by JavaParser#typePattern. + def enterTypePattern(self, ctx:JavaParser.TypePatternContext): + pass + + # Exit a parse tree produced by JavaParser#typePattern. + def exitTypePattern(self, ctx:JavaParser.TypePatternContext): + pass + + + # Enter a parse tree produced by JavaParser#expression. + def enterExpression(self, ctx:JavaParser.ExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#expression. + def exitExpression(self, ctx:JavaParser.ExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#primary. + def enterPrimary(self, ctx:JavaParser.PrimaryContext): + pass + + # Exit a parse tree produced by JavaParser#primary. + def exitPrimary(self, ctx:JavaParser.PrimaryContext): + pass + + + # Enter a parse tree produced by JavaParser#primaryNoNewArray. + def enterPrimaryNoNewArray(self, ctx:JavaParser.PrimaryNoNewArrayContext): + pass + + # Exit a parse tree produced by JavaParser#primaryNoNewArray. + def exitPrimaryNoNewArray(self, ctx:JavaParser.PrimaryNoNewArrayContext): + pass + + + # Enter a parse tree produced by JavaParser#pNNA. + def enterPNNA(self, ctx:JavaParser.PNNAContext): + pass + + # Exit a parse tree produced by JavaParser#pNNA. + def exitPNNA(self, ctx:JavaParser.PNNAContext): + pass + + + # Enter a parse tree produced by JavaParser#classLiteral. + def enterClassLiteral(self, ctx:JavaParser.ClassLiteralContext): + pass + + # Exit a parse tree produced by JavaParser#classLiteral. + def exitClassLiteral(self, ctx:JavaParser.ClassLiteralContext): + pass + + + # Enter a parse tree produced by JavaParser#classInstanceCreationExpression. + def enterClassInstanceCreationExpression(self, ctx:JavaParser.ClassInstanceCreationExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#classInstanceCreationExpression. + def exitClassInstanceCreationExpression(self, ctx:JavaParser.ClassInstanceCreationExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#unqualifiedClassInstanceCreationExpression. + def enterUnqualifiedClassInstanceCreationExpression(self, ctx:JavaParser.UnqualifiedClassInstanceCreationExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#unqualifiedClassInstanceCreationExpression. + def exitUnqualifiedClassInstanceCreationExpression(self, ctx:JavaParser.UnqualifiedClassInstanceCreationExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#classOrInterfaceTypeToInstantiate. + def enterClassOrInterfaceTypeToInstantiate(self, ctx:JavaParser.ClassOrInterfaceTypeToInstantiateContext): + pass + + # Exit a parse tree produced by JavaParser#classOrInterfaceTypeToInstantiate. + def exitClassOrInterfaceTypeToInstantiate(self, ctx:JavaParser.ClassOrInterfaceTypeToInstantiateContext): + pass + + + # Enter a parse tree produced by JavaParser#typeArgumentsOrDiamond. + def enterTypeArgumentsOrDiamond(self, ctx:JavaParser.TypeArgumentsOrDiamondContext): + pass + + # Exit a parse tree produced by JavaParser#typeArgumentsOrDiamond. + def exitTypeArgumentsOrDiamond(self, ctx:JavaParser.TypeArgumentsOrDiamondContext): + pass + + + # Enter a parse tree produced by JavaParser#arrayCreationExpression. + def enterArrayCreationExpression(self, ctx:JavaParser.ArrayCreationExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#arrayCreationExpression. + def exitArrayCreationExpression(self, ctx:JavaParser.ArrayCreationExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#arrayCreationExpressionWithoutInitializer. + def enterArrayCreationExpressionWithoutInitializer(self, ctx:JavaParser.ArrayCreationExpressionWithoutInitializerContext): + pass + + # Exit a parse tree produced by JavaParser#arrayCreationExpressionWithoutInitializer. + def exitArrayCreationExpressionWithoutInitializer(self, ctx:JavaParser.ArrayCreationExpressionWithoutInitializerContext): + pass + + + # Enter a parse tree produced by JavaParser#arrayCreationExpressionWithInitializer. + def enterArrayCreationExpressionWithInitializer(self, ctx:JavaParser.ArrayCreationExpressionWithInitializerContext): + pass + + # Exit a parse tree produced by JavaParser#arrayCreationExpressionWithInitializer. + def exitArrayCreationExpressionWithInitializer(self, ctx:JavaParser.ArrayCreationExpressionWithInitializerContext): + pass + + + # Enter a parse tree produced by JavaParser#dimExprs. + def enterDimExprs(self, ctx:JavaParser.DimExprsContext): + pass + + # Exit a parse tree produced by JavaParser#dimExprs. + def exitDimExprs(self, ctx:JavaParser.DimExprsContext): + pass + + + # Enter a parse tree produced by JavaParser#dimExpr. + def enterDimExpr(self, ctx:JavaParser.DimExprContext): + pass + + # Exit a parse tree produced by JavaParser#dimExpr. + def exitDimExpr(self, ctx:JavaParser.DimExprContext): + pass + + + # Enter a parse tree produced by JavaParser#arrayAccess. + def enterArrayAccess(self, ctx:JavaParser.ArrayAccessContext): + pass + + # Exit a parse tree produced by JavaParser#arrayAccess. + def exitArrayAccess(self, ctx:JavaParser.ArrayAccessContext): + pass + + + # Enter a parse tree produced by JavaParser#fieldAccess. + def enterFieldAccess(self, ctx:JavaParser.FieldAccessContext): + pass + + # Exit a parse tree produced by JavaParser#fieldAccess. + def exitFieldAccess(self, ctx:JavaParser.FieldAccessContext): + pass + + + # Enter a parse tree produced by JavaParser#methodInvocation. + def enterMethodInvocation(self, ctx:JavaParser.MethodInvocationContext): + pass + + # Exit a parse tree produced by JavaParser#methodInvocation. + def exitMethodInvocation(self, ctx:JavaParser.MethodInvocationContext): + pass + + + # Enter a parse tree produced by JavaParser#argumentList. + def enterArgumentList(self, ctx:JavaParser.ArgumentListContext): + pass + + # Exit a parse tree produced by JavaParser#argumentList. + def exitArgumentList(self, ctx:JavaParser.ArgumentListContext): + pass + + + # Enter a parse tree produced by JavaParser#methodReference. + def enterMethodReference(self, ctx:JavaParser.MethodReferenceContext): + pass + + # Exit a parse tree produced by JavaParser#methodReference. + def exitMethodReference(self, ctx:JavaParser.MethodReferenceContext): + pass + + + # Enter a parse tree produced by JavaParser#postfixExpression. + def enterPostfixExpression(self, ctx:JavaParser.PostfixExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#postfixExpression. + def exitPostfixExpression(self, ctx:JavaParser.PostfixExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#pfE. + def enterPfE(self, ctx:JavaParser.PfEContext): + pass + + # Exit a parse tree produced by JavaParser#pfE. + def exitPfE(self, ctx:JavaParser.PfEContext): + pass + + + # Enter a parse tree produced by JavaParser#postIncrementExpression. + def enterPostIncrementExpression(self, ctx:JavaParser.PostIncrementExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#postIncrementExpression. + def exitPostIncrementExpression(self, ctx:JavaParser.PostIncrementExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#postDecrementExpression. + def enterPostDecrementExpression(self, ctx:JavaParser.PostDecrementExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#postDecrementExpression. + def exitPostDecrementExpression(self, ctx:JavaParser.PostDecrementExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#unaryExpression. + def enterUnaryExpression(self, ctx:JavaParser.UnaryExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#unaryExpression. + def exitUnaryExpression(self, ctx:JavaParser.UnaryExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#preIncrementExpression. + def enterPreIncrementExpression(self, ctx:JavaParser.PreIncrementExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#preIncrementExpression. + def exitPreIncrementExpression(self, ctx:JavaParser.PreIncrementExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#preDecrementExpression. + def enterPreDecrementExpression(self, ctx:JavaParser.PreDecrementExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#preDecrementExpression. + def exitPreDecrementExpression(self, ctx:JavaParser.PreDecrementExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#unaryExpressionNotPlusMinus. + def enterUnaryExpressionNotPlusMinus(self, ctx:JavaParser.UnaryExpressionNotPlusMinusContext): + pass + + # Exit a parse tree produced by JavaParser#unaryExpressionNotPlusMinus. + def exitUnaryExpressionNotPlusMinus(self, ctx:JavaParser.UnaryExpressionNotPlusMinusContext): + pass + + + # Enter a parse tree produced by JavaParser#castExpression. + def enterCastExpression(self, ctx:JavaParser.CastExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#castExpression. + def exitCastExpression(self, ctx:JavaParser.CastExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#multiplicativeExpression. + def enterMultiplicativeExpression(self, ctx:JavaParser.MultiplicativeExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#multiplicativeExpression. + def exitMultiplicativeExpression(self, ctx:JavaParser.MultiplicativeExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#additiveExpression. + def enterAdditiveExpression(self, ctx:JavaParser.AdditiveExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#additiveExpression. + def exitAdditiveExpression(self, ctx:JavaParser.AdditiveExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#shiftExpression. + def enterShiftExpression(self, ctx:JavaParser.ShiftExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#shiftExpression. + def exitShiftExpression(self, ctx:JavaParser.ShiftExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#relationalExpression. + def enterRelationalExpression(self, ctx:JavaParser.RelationalExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#relationalExpression. + def exitRelationalExpression(self, ctx:JavaParser.RelationalExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#equalityExpression. + def enterEqualityExpression(self, ctx:JavaParser.EqualityExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#equalityExpression. + def exitEqualityExpression(self, ctx:JavaParser.EqualityExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#andExpression. + def enterAndExpression(self, ctx:JavaParser.AndExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#andExpression. + def exitAndExpression(self, ctx:JavaParser.AndExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#exclusiveOrExpression. + def enterExclusiveOrExpression(self, ctx:JavaParser.ExclusiveOrExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#exclusiveOrExpression. + def exitExclusiveOrExpression(self, ctx:JavaParser.ExclusiveOrExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#inclusiveOrExpression. + def enterInclusiveOrExpression(self, ctx:JavaParser.InclusiveOrExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#inclusiveOrExpression. + def exitInclusiveOrExpression(self, ctx:JavaParser.InclusiveOrExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#conditionalAndExpression. + def enterConditionalAndExpression(self, ctx:JavaParser.ConditionalAndExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#conditionalAndExpression. + def exitConditionalAndExpression(self, ctx:JavaParser.ConditionalAndExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#conditionalOrExpression. + def enterConditionalOrExpression(self, ctx:JavaParser.ConditionalOrExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#conditionalOrExpression. + def exitConditionalOrExpression(self, ctx:JavaParser.ConditionalOrExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#conditionalExpression. + def enterConditionalExpression(self, ctx:JavaParser.ConditionalExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#conditionalExpression. + def exitConditionalExpression(self, ctx:JavaParser.ConditionalExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#assignmentExpression. + def enterAssignmentExpression(self, ctx:JavaParser.AssignmentExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#assignmentExpression. + def exitAssignmentExpression(self, ctx:JavaParser.AssignmentExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#assignment. + def enterAssignment(self, ctx:JavaParser.AssignmentContext): + pass + + # Exit a parse tree produced by JavaParser#assignment. + def exitAssignment(self, ctx:JavaParser.AssignmentContext): + pass + + + # Enter a parse tree produced by JavaParser#leftHandSide. + def enterLeftHandSide(self, ctx:JavaParser.LeftHandSideContext): + pass + + # Exit a parse tree produced by JavaParser#leftHandSide. + def exitLeftHandSide(self, ctx:JavaParser.LeftHandSideContext): + pass + + + # Enter a parse tree produced by JavaParser#assignmentOperator. + def enterAssignmentOperator(self, ctx:JavaParser.AssignmentOperatorContext): + pass + + # Exit a parse tree produced by JavaParser#assignmentOperator. + def exitAssignmentOperator(self, ctx:JavaParser.AssignmentOperatorContext): + pass + + + # Enter a parse tree produced by JavaParser#lambdaExpression. + def enterLambdaExpression(self, ctx:JavaParser.LambdaExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#lambdaExpression. + def exitLambdaExpression(self, ctx:JavaParser.LambdaExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#lambdaParameters. + def enterLambdaParameters(self, ctx:JavaParser.LambdaParametersContext): + pass + + # Exit a parse tree produced by JavaParser#lambdaParameters. + def exitLambdaParameters(self, ctx:JavaParser.LambdaParametersContext): + pass + + + # Enter a parse tree produced by JavaParser#lambdaParameterList. + def enterLambdaParameterList(self, ctx:JavaParser.LambdaParameterListContext): + pass + + # Exit a parse tree produced by JavaParser#lambdaParameterList. + def exitLambdaParameterList(self, ctx:JavaParser.LambdaParameterListContext): + pass + + + # Enter a parse tree produced by JavaParser#lambdaParameter. + def enterLambdaParameter(self, ctx:JavaParser.LambdaParameterContext): + pass + + # Exit a parse tree produced by JavaParser#lambdaParameter. + def exitLambdaParameter(self, ctx:JavaParser.LambdaParameterContext): + pass + + + # Enter a parse tree produced by JavaParser#lambdaParameterType. + def enterLambdaParameterType(self, ctx:JavaParser.LambdaParameterTypeContext): + pass + + # Exit a parse tree produced by JavaParser#lambdaParameterType. + def exitLambdaParameterType(self, ctx:JavaParser.LambdaParameterTypeContext): + pass + + + # Enter a parse tree produced by JavaParser#lambdaBody. + def enterLambdaBody(self, ctx:JavaParser.LambdaBodyContext): + pass + + # Exit a parse tree produced by JavaParser#lambdaBody. + def exitLambdaBody(self, ctx:JavaParser.LambdaBodyContext): + pass + + + # Enter a parse tree produced by JavaParser#switchExpression. + def enterSwitchExpression(self, ctx:JavaParser.SwitchExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#switchExpression. + def exitSwitchExpression(self, ctx:JavaParser.SwitchExpressionContext): + pass + + + # Enter a parse tree produced by JavaParser#constantExpression. + def enterConstantExpression(self, ctx:JavaParser.ConstantExpressionContext): + pass + + # Exit a parse tree produced by JavaParser#constantExpression. + def exitConstantExpression(self, ctx:JavaParser.ConstantExpressionContext): + pass + + + +del JavaParser \ No newline at end of file diff --git a/cfg_generator/src/antlr/gen/JavaParserVisitor.py b/cfg_generator/src/antlr/gen/JavaParserVisitor.py new file mode 100644 index 00000000..b7cba429 --- /dev/null +++ b/cfg_generator/src/antlr/gen/JavaParserVisitor.py @@ -0,0 +1,1238 @@ +# Generated from F:/cfg-generator/grammar/JavaParser.g4 by ANTLR 4.13.1 +from antlr4 import * +if "." in __name__: + from .JavaParser import JavaParser +else: + from JavaParser import JavaParser + +# This class defines a complete generic visitor for a parse tree produced by JavaParser. + +class JavaParserVisitor(ParseTreeVisitor): + + # Visit a parse tree produced by JavaParser#start_. + def visitStart_(self, ctx:JavaParser.Start_Context): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#literal. + def visitLiteral(self, ctx:JavaParser.LiteralContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#typeIdentifier. + def visitTypeIdentifier(self, ctx:JavaParser.TypeIdentifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#unqualifiedMethodIdentifier. + def visitUnqualifiedMethodIdentifier(self, ctx:JavaParser.UnqualifiedMethodIdentifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#primitiveType. + def visitPrimitiveType(self, ctx:JavaParser.PrimitiveTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#numericType. + def visitNumericType(self, ctx:JavaParser.NumericTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#integralType. + def visitIntegralType(self, ctx:JavaParser.IntegralTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#floatingPointType. + def visitFloatingPointType(self, ctx:JavaParser.FloatingPointTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#referenceType. + def visitReferenceType(self, ctx:JavaParser.ReferenceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#coit. + def visitCoit(self, ctx:JavaParser.CoitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#classOrInterfaceType. + def visitClassOrInterfaceType(self, ctx:JavaParser.ClassOrInterfaceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#classType. + def visitClassType(self, ctx:JavaParser.ClassTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#interfaceType. + def visitInterfaceType(self, ctx:JavaParser.InterfaceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#typeVariable. + def visitTypeVariable(self, ctx:JavaParser.TypeVariableContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#arrayType. + def visitArrayType(self, ctx:JavaParser.ArrayTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#dims. + def visitDims(self, ctx:JavaParser.DimsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#typeParameter. + def visitTypeParameter(self, ctx:JavaParser.TypeParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#typeParameterModifier. + def visitTypeParameterModifier(self, ctx:JavaParser.TypeParameterModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#typeBound. + def visitTypeBound(self, ctx:JavaParser.TypeBoundContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#additionalBound. + def visitAdditionalBound(self, ctx:JavaParser.AdditionalBoundContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#typeArguments. + def visitTypeArguments(self, ctx:JavaParser.TypeArgumentsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#typeArgumentList. + def visitTypeArgumentList(self, ctx:JavaParser.TypeArgumentListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#typeArgument. + def visitTypeArgument(self, ctx:JavaParser.TypeArgumentContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#wildcard. + def visitWildcard(self, ctx:JavaParser.WildcardContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#wildcardBounds. + def visitWildcardBounds(self, ctx:JavaParser.WildcardBoundsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#moduleName. + def visitModuleName(self, ctx:JavaParser.ModuleNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#packageName. + def visitPackageName(self, ctx:JavaParser.PackageNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#typeName. + def visitTypeName(self, ctx:JavaParser.TypeNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#packageOrTypeName. + def visitPackageOrTypeName(self, ctx:JavaParser.PackageOrTypeNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#expressionName. + def visitExpressionName(self, ctx:JavaParser.ExpressionNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#methodName. + def visitMethodName(self, ctx:JavaParser.MethodNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#ambiguousName. + def visitAmbiguousName(self, ctx:JavaParser.AmbiguousNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#compilationUnit. + def visitCompilationUnit(self, ctx:JavaParser.CompilationUnitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#ordinaryCompilationUnit. + def visitOrdinaryCompilationUnit(self, ctx:JavaParser.OrdinaryCompilationUnitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#modularCompilationUnit. + def visitModularCompilationUnit(self, ctx:JavaParser.ModularCompilationUnitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#packageDeclaration. + def visitPackageDeclaration(self, ctx:JavaParser.PackageDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#packageModifier. + def visitPackageModifier(self, ctx:JavaParser.PackageModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#importDeclaration. + def visitImportDeclaration(self, ctx:JavaParser.ImportDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#singleTypeImportDeclaration. + def visitSingleTypeImportDeclaration(self, ctx:JavaParser.SingleTypeImportDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#typeImportOnDemandDeclaration. + def visitTypeImportOnDemandDeclaration(self, ctx:JavaParser.TypeImportOnDemandDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#singleStaticImportDeclaration. + def visitSingleStaticImportDeclaration(self, ctx:JavaParser.SingleStaticImportDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#staticImportOnDemandDeclaration. + def visitStaticImportOnDemandDeclaration(self, ctx:JavaParser.StaticImportOnDemandDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#topLevelClassOrInterfaceDeclaration. + def visitTopLevelClassOrInterfaceDeclaration(self, ctx:JavaParser.TopLevelClassOrInterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#moduleDeclaration. + def visitModuleDeclaration(self, ctx:JavaParser.ModuleDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#moduleDirective. + def visitModuleDirective(self, ctx:JavaParser.ModuleDirectiveContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#requiresModifier. + def visitRequiresModifier(self, ctx:JavaParser.RequiresModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#classDeclaration. + def visitClassDeclaration(self, ctx:JavaParser.ClassDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#normalClassDeclaration. + def visitNormalClassDeclaration(self, ctx:JavaParser.NormalClassDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#classModifier. + def visitClassModifier(self, ctx:JavaParser.ClassModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#typeParameters. + def visitTypeParameters(self, ctx:JavaParser.TypeParametersContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#typeParameterList. + def visitTypeParameterList(self, ctx:JavaParser.TypeParameterListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#classExtends. + def visitClassExtends(self, ctx:JavaParser.ClassExtendsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#classImplements. + def visitClassImplements(self, ctx:JavaParser.ClassImplementsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#interfaceTypeList. + def visitInterfaceTypeList(self, ctx:JavaParser.InterfaceTypeListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#classPermits. + def visitClassPermits(self, ctx:JavaParser.ClassPermitsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#classBody. + def visitClassBody(self, ctx:JavaParser.ClassBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#classBodyDeclaration. + def visitClassBodyDeclaration(self, ctx:JavaParser.ClassBodyDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#classMemberDeclaration. + def visitClassMemberDeclaration(self, ctx:JavaParser.ClassMemberDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#fieldDeclaration. + def visitFieldDeclaration(self, ctx:JavaParser.FieldDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#fieldModifier. + def visitFieldModifier(self, ctx:JavaParser.FieldModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#variableDeclaratorList. + def visitVariableDeclaratorList(self, ctx:JavaParser.VariableDeclaratorListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#variableDeclarator. + def visitVariableDeclarator(self, ctx:JavaParser.VariableDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#variableDeclaratorId. + def visitVariableDeclaratorId(self, ctx:JavaParser.VariableDeclaratorIdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#variableInitializer. + def visitVariableInitializer(self, ctx:JavaParser.VariableInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#unannType. + def visitUnannType(self, ctx:JavaParser.UnannTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#unannPrimitiveType. + def visitUnannPrimitiveType(self, ctx:JavaParser.UnannPrimitiveTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#unannReferenceType. + def visitUnannReferenceType(self, ctx:JavaParser.UnannReferenceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#unannClassOrInterfaceType. + def visitUnannClassOrInterfaceType(self, ctx:JavaParser.UnannClassOrInterfaceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#uCOIT. + def visitUCOIT(self, ctx:JavaParser.UCOITContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#unannClassType. + def visitUnannClassType(self, ctx:JavaParser.UnannClassTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#unannInterfaceType. + def visitUnannInterfaceType(self, ctx:JavaParser.UnannInterfaceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#unannTypeVariable. + def visitUnannTypeVariable(self, ctx:JavaParser.UnannTypeVariableContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#unannArrayType. + def visitUnannArrayType(self, ctx:JavaParser.UnannArrayTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#methodDeclaration. + def visitMethodDeclaration(self, ctx:JavaParser.MethodDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#methodModifier. + def visitMethodModifier(self, ctx:JavaParser.MethodModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#methodHeader. + def visitMethodHeader(self, ctx:JavaParser.MethodHeaderContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#result. + def visitResult(self, ctx:JavaParser.ResultContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#methodDeclarator. + def visitMethodDeclarator(self, ctx:JavaParser.MethodDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#receiverParameter. + def visitReceiverParameter(self, ctx:JavaParser.ReceiverParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#formalParameterList. + def visitFormalParameterList(self, ctx:JavaParser.FormalParameterListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#formalParameter. + def visitFormalParameter(self, ctx:JavaParser.FormalParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#variableArityParameter. + def visitVariableArityParameter(self, ctx:JavaParser.VariableArityParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#variableModifier. + def visitVariableModifier(self, ctx:JavaParser.VariableModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#throwsT. + def visitThrowsT(self, ctx:JavaParser.ThrowsTContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#exceptionTypeList. + def visitExceptionTypeList(self, ctx:JavaParser.ExceptionTypeListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#exceptionType. + def visitExceptionType(self, ctx:JavaParser.ExceptionTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#methodBody. + def visitMethodBody(self, ctx:JavaParser.MethodBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#instanceInitializer. + def visitInstanceInitializer(self, ctx:JavaParser.InstanceInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#staticInitializer. + def visitStaticInitializer(self, ctx:JavaParser.StaticInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#constructorDeclaration. + def visitConstructorDeclaration(self, ctx:JavaParser.ConstructorDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#constructorModifier. + def visitConstructorModifier(self, ctx:JavaParser.ConstructorModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#constructorDeclarator. + def visitConstructorDeclarator(self, ctx:JavaParser.ConstructorDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#simpleTypeName. + def visitSimpleTypeName(self, ctx:JavaParser.SimpleTypeNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#constructorBody. + def visitConstructorBody(self, ctx:JavaParser.ConstructorBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#explicitConstructorInvocation. + def visitExplicitConstructorInvocation(self, ctx:JavaParser.ExplicitConstructorInvocationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#enumDeclaration. + def visitEnumDeclaration(self, ctx:JavaParser.EnumDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#enumBody. + def visitEnumBody(self, ctx:JavaParser.EnumBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#enumConstantList. + def visitEnumConstantList(self, ctx:JavaParser.EnumConstantListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#enumConstant. + def visitEnumConstant(self, ctx:JavaParser.EnumConstantContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#enumConstantModifier. + def visitEnumConstantModifier(self, ctx:JavaParser.EnumConstantModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#enumBodyDeclarations. + def visitEnumBodyDeclarations(self, ctx:JavaParser.EnumBodyDeclarationsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#recordDeclaration. + def visitRecordDeclaration(self, ctx:JavaParser.RecordDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#recordHeader. + def visitRecordHeader(self, ctx:JavaParser.RecordHeaderContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#recordComponentList. + def visitRecordComponentList(self, ctx:JavaParser.RecordComponentListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#recordComponent. + def visitRecordComponent(self, ctx:JavaParser.RecordComponentContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#variableArityRecordComponent. + def visitVariableArityRecordComponent(self, ctx:JavaParser.VariableArityRecordComponentContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#recordComponentModifier. + def visitRecordComponentModifier(self, ctx:JavaParser.RecordComponentModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#recordBody. + def visitRecordBody(self, ctx:JavaParser.RecordBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#recordBodyDeclaration. + def visitRecordBodyDeclaration(self, ctx:JavaParser.RecordBodyDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#compactConstructorDeclaration. + def visitCompactConstructorDeclaration(self, ctx:JavaParser.CompactConstructorDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#interfaceDeclaration. + def visitInterfaceDeclaration(self, ctx:JavaParser.InterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#normalInterfaceDeclaration. + def visitNormalInterfaceDeclaration(self, ctx:JavaParser.NormalInterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#interfaceModifier. + def visitInterfaceModifier(self, ctx:JavaParser.InterfaceModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#interfaceExtends. + def visitInterfaceExtends(self, ctx:JavaParser.InterfaceExtendsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#interfacePermits. + def visitInterfacePermits(self, ctx:JavaParser.InterfacePermitsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#interfaceBody. + def visitInterfaceBody(self, ctx:JavaParser.InterfaceBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#interfaceMemberDeclaration. + def visitInterfaceMemberDeclaration(self, ctx:JavaParser.InterfaceMemberDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#constantDeclaration. + def visitConstantDeclaration(self, ctx:JavaParser.ConstantDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#constantModifier. + def visitConstantModifier(self, ctx:JavaParser.ConstantModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#interfaceMethodDeclaration. + def visitInterfaceMethodDeclaration(self, ctx:JavaParser.InterfaceMethodDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#interfaceMethodModifier. + def visitInterfaceMethodModifier(self, ctx:JavaParser.InterfaceMethodModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#annotationInterfaceDeclaration. + def visitAnnotationInterfaceDeclaration(self, ctx:JavaParser.AnnotationInterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#annotationInterfaceBody. + def visitAnnotationInterfaceBody(self, ctx:JavaParser.AnnotationInterfaceBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#annotationInterfaceMemberDeclaration. + def visitAnnotationInterfaceMemberDeclaration(self, ctx:JavaParser.AnnotationInterfaceMemberDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#annotationInterfaceElementDeclaration. + def visitAnnotationInterfaceElementDeclaration(self, ctx:JavaParser.AnnotationInterfaceElementDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#annotationInterfaceElementModifier. + def visitAnnotationInterfaceElementModifier(self, ctx:JavaParser.AnnotationInterfaceElementModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#defaultValue. + def visitDefaultValue(self, ctx:JavaParser.DefaultValueContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#annotation. + def visitAnnotation(self, ctx:JavaParser.AnnotationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#normalAnnotation. + def visitNormalAnnotation(self, ctx:JavaParser.NormalAnnotationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#elementValuePairList. + def visitElementValuePairList(self, ctx:JavaParser.ElementValuePairListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#elementValuePair. + def visitElementValuePair(self, ctx:JavaParser.ElementValuePairContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#elementValue. + def visitElementValue(self, ctx:JavaParser.ElementValueContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#elementValueArrayInitializer. + def visitElementValueArrayInitializer(self, ctx:JavaParser.ElementValueArrayInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#elementValueList. + def visitElementValueList(self, ctx:JavaParser.ElementValueListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#markerAnnotation. + def visitMarkerAnnotation(self, ctx:JavaParser.MarkerAnnotationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#singleElementAnnotation. + def visitSingleElementAnnotation(self, ctx:JavaParser.SingleElementAnnotationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#arrayInitializer. + def visitArrayInitializer(self, ctx:JavaParser.ArrayInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#variableInitializerList. + def visitVariableInitializerList(self, ctx:JavaParser.VariableInitializerListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#block. + def visitBlock(self, ctx:JavaParser.BlockContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#blockStatements. + def visitBlockStatements(self, ctx:JavaParser.BlockStatementsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#blockStatement. + def visitBlockStatement(self, ctx:JavaParser.BlockStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#localClassOrInterfaceDeclaration. + def visitLocalClassOrInterfaceDeclaration(self, ctx:JavaParser.LocalClassOrInterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#localVariableDeclaration. + def visitLocalVariableDeclaration(self, ctx:JavaParser.LocalVariableDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#localVariableType. + def visitLocalVariableType(self, ctx:JavaParser.LocalVariableTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#localVariableDeclarationStatement. + def visitLocalVariableDeclarationStatement(self, ctx:JavaParser.LocalVariableDeclarationStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#statement. + def visitStatement(self, ctx:JavaParser.StatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#statementNoShortIf. + def visitStatementNoShortIf(self, ctx:JavaParser.StatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#statementWithoutTrailingSubstatement. + def visitStatementWithoutTrailingSubstatement(self, ctx:JavaParser.StatementWithoutTrailingSubstatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#emptyStatement_. + def visitEmptyStatement_(self, ctx:JavaParser.EmptyStatement_Context): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#labeledStatement. + def visitLabeledStatement(self, ctx:JavaParser.LabeledStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#labeledStatementNoShortIf. + def visitLabeledStatementNoShortIf(self, ctx:JavaParser.LabeledStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#expressionStatement. + def visitExpressionStatement(self, ctx:JavaParser.ExpressionStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#statementExpression. + def visitStatementExpression(self, ctx:JavaParser.StatementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#ifThenStatement. + def visitIfThenStatement(self, ctx:JavaParser.IfThenStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#ifThenElseStatement. + def visitIfThenElseStatement(self, ctx:JavaParser.IfThenElseStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#ifThenElseStatementNoShortIf. + def visitIfThenElseStatementNoShortIf(self, ctx:JavaParser.IfThenElseStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#assertStatement. + def visitAssertStatement(self, ctx:JavaParser.AssertStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#switchStatement. + def visitSwitchStatement(self, ctx:JavaParser.SwitchStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#switchBlock. + def visitSwitchBlock(self, ctx:JavaParser.SwitchBlockContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#switchRule. + def visitSwitchRule(self, ctx:JavaParser.SwitchRuleContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#switchBlockStatementGroup. + def visitSwitchBlockStatementGroup(self, ctx:JavaParser.SwitchBlockStatementGroupContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#switchLabel. + def visitSwitchLabel(self, ctx:JavaParser.SwitchLabelContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#caseConstant. + def visitCaseConstant(self, ctx:JavaParser.CaseConstantContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#whileStatement. + def visitWhileStatement(self, ctx:JavaParser.WhileStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#whileStatementNoShortIf. + def visitWhileStatementNoShortIf(self, ctx:JavaParser.WhileStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#doStatement. + def visitDoStatement(self, ctx:JavaParser.DoStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#forStatement. + def visitForStatement(self, ctx:JavaParser.ForStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#forStatementNoShortIf. + def visitForStatementNoShortIf(self, ctx:JavaParser.ForStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#basicForStatement. + def visitBasicForStatement(self, ctx:JavaParser.BasicForStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#basicForStatementNoShortIf. + def visitBasicForStatementNoShortIf(self, ctx:JavaParser.BasicForStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#forInit. + def visitForInit(self, ctx:JavaParser.ForInitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#forUpdate. + def visitForUpdate(self, ctx:JavaParser.ForUpdateContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#statementExpressionList. + def visitStatementExpressionList(self, ctx:JavaParser.StatementExpressionListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#enhancedForStatement. + def visitEnhancedForStatement(self, ctx:JavaParser.EnhancedForStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#enhancedForStatementNoShortIf. + def visitEnhancedForStatementNoShortIf(self, ctx:JavaParser.EnhancedForStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#breakStatement. + def visitBreakStatement(self, ctx:JavaParser.BreakStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#continueStatement. + def visitContinueStatement(self, ctx:JavaParser.ContinueStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#returnStatement. + def visitReturnStatement(self, ctx:JavaParser.ReturnStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#throwStatement. + def visitThrowStatement(self, ctx:JavaParser.ThrowStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#synchronizedStatement. + def visitSynchronizedStatement(self, ctx:JavaParser.SynchronizedStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#tryStatement. + def visitTryStatement(self, ctx:JavaParser.TryStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#catches. + def visitCatches(self, ctx:JavaParser.CatchesContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#catchClause. + def visitCatchClause(self, ctx:JavaParser.CatchClauseContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#catchFormalParameter. + def visitCatchFormalParameter(self, ctx:JavaParser.CatchFormalParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#catchType. + def visitCatchType(self, ctx:JavaParser.CatchTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#finallyBlock. + def visitFinallyBlock(self, ctx:JavaParser.FinallyBlockContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#tryWithResourcesStatement. + def visitTryWithResourcesStatement(self, ctx:JavaParser.TryWithResourcesStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#resourceSpecification. + def visitResourceSpecification(self, ctx:JavaParser.ResourceSpecificationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#resourceList. + def visitResourceList(self, ctx:JavaParser.ResourceListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#resource. + def visitResource(self, ctx:JavaParser.ResourceContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#variableAccess. + def visitVariableAccess(self, ctx:JavaParser.VariableAccessContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#yieldStatement. + def visitYieldStatement(self, ctx:JavaParser.YieldStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#pattern. + def visitPattern(self, ctx:JavaParser.PatternContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#typePattern. + def visitTypePattern(self, ctx:JavaParser.TypePatternContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#expression. + def visitExpression(self, ctx:JavaParser.ExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#primary. + def visitPrimary(self, ctx:JavaParser.PrimaryContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#primaryNoNewArray. + def visitPrimaryNoNewArray(self, ctx:JavaParser.PrimaryNoNewArrayContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#pNNA. + def visitPNNA(self, ctx:JavaParser.PNNAContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#classLiteral. + def visitClassLiteral(self, ctx:JavaParser.ClassLiteralContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#classInstanceCreationExpression. + def visitClassInstanceCreationExpression(self, ctx:JavaParser.ClassInstanceCreationExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#unqualifiedClassInstanceCreationExpression. + def visitUnqualifiedClassInstanceCreationExpression(self, ctx:JavaParser.UnqualifiedClassInstanceCreationExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#classOrInterfaceTypeToInstantiate. + def visitClassOrInterfaceTypeToInstantiate(self, ctx:JavaParser.ClassOrInterfaceTypeToInstantiateContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#typeArgumentsOrDiamond. + def visitTypeArgumentsOrDiamond(self, ctx:JavaParser.TypeArgumentsOrDiamondContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#arrayCreationExpression. + def visitArrayCreationExpression(self, ctx:JavaParser.ArrayCreationExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#arrayCreationExpressionWithoutInitializer. + def visitArrayCreationExpressionWithoutInitializer(self, ctx:JavaParser.ArrayCreationExpressionWithoutInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#arrayCreationExpressionWithInitializer. + def visitArrayCreationExpressionWithInitializer(self, ctx:JavaParser.ArrayCreationExpressionWithInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#dimExprs. + def visitDimExprs(self, ctx:JavaParser.DimExprsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#dimExpr. + def visitDimExpr(self, ctx:JavaParser.DimExprContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#arrayAccess. + def visitArrayAccess(self, ctx:JavaParser.ArrayAccessContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#fieldAccess. + def visitFieldAccess(self, ctx:JavaParser.FieldAccessContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#methodInvocation. + def visitMethodInvocation(self, ctx:JavaParser.MethodInvocationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#argumentList. + def visitArgumentList(self, ctx:JavaParser.ArgumentListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#methodReference. + def visitMethodReference(self, ctx:JavaParser.MethodReferenceContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#postfixExpression. + def visitPostfixExpression(self, ctx:JavaParser.PostfixExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#pfE. + def visitPfE(self, ctx:JavaParser.PfEContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#postIncrementExpression. + def visitPostIncrementExpression(self, ctx:JavaParser.PostIncrementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#postDecrementExpression. + def visitPostDecrementExpression(self, ctx:JavaParser.PostDecrementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#unaryExpression. + def visitUnaryExpression(self, ctx:JavaParser.UnaryExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#preIncrementExpression. + def visitPreIncrementExpression(self, ctx:JavaParser.PreIncrementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#preDecrementExpression. + def visitPreDecrementExpression(self, ctx:JavaParser.PreDecrementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#unaryExpressionNotPlusMinus. + def visitUnaryExpressionNotPlusMinus(self, ctx:JavaParser.UnaryExpressionNotPlusMinusContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#castExpression. + def visitCastExpression(self, ctx:JavaParser.CastExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#multiplicativeExpression. + def visitMultiplicativeExpression(self, ctx:JavaParser.MultiplicativeExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#additiveExpression. + def visitAdditiveExpression(self, ctx:JavaParser.AdditiveExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#shiftExpression. + def visitShiftExpression(self, ctx:JavaParser.ShiftExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#relationalExpression. + def visitRelationalExpression(self, ctx:JavaParser.RelationalExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#equalityExpression. + def visitEqualityExpression(self, ctx:JavaParser.EqualityExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#andExpression. + def visitAndExpression(self, ctx:JavaParser.AndExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#exclusiveOrExpression. + def visitExclusiveOrExpression(self, ctx:JavaParser.ExclusiveOrExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#inclusiveOrExpression. + def visitInclusiveOrExpression(self, ctx:JavaParser.InclusiveOrExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#conditionalAndExpression. + def visitConditionalAndExpression(self, ctx:JavaParser.ConditionalAndExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#conditionalOrExpression. + def visitConditionalOrExpression(self, ctx:JavaParser.ConditionalOrExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#conditionalExpression. + def visitConditionalExpression(self, ctx:JavaParser.ConditionalExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#assignmentExpression. + def visitAssignmentExpression(self, ctx:JavaParser.AssignmentExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#assignment. + def visitAssignment(self, ctx:JavaParser.AssignmentContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#leftHandSide. + def visitLeftHandSide(self, ctx:JavaParser.LeftHandSideContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#assignmentOperator. + def visitAssignmentOperator(self, ctx:JavaParser.AssignmentOperatorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#lambdaExpression. + def visitLambdaExpression(self, ctx:JavaParser.LambdaExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#lambdaParameters. + def visitLambdaParameters(self, ctx:JavaParser.LambdaParametersContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#lambdaParameterList. + def visitLambdaParameterList(self, ctx:JavaParser.LambdaParameterListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#lambdaParameter. + def visitLambdaParameter(self, ctx:JavaParser.LambdaParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#lambdaParameterType. + def visitLambdaParameterType(self, ctx:JavaParser.LambdaParameterTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#lambdaBody. + def visitLambdaBody(self, ctx:JavaParser.LambdaBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#switchExpression. + def visitSwitchExpression(self, ctx:JavaParser.SwitchExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by JavaParser#constantExpression. + def visitConstantExpression(self, ctx:JavaParser.ConstantExpressionContext): + return self.visitChildren(ctx) + + + +del JavaParser \ No newline at end of file diff --git a/cfg_generator/src/antlr/rule_utils.py b/cfg_generator/src/antlr/rule_utils.py new file mode 100644 index 00000000..1c6fc744 --- /dev/null +++ b/cfg_generator/src/antlr/rule_utils.py @@ -0,0 +1,23 @@ +from antlr4 import CommonTokenStream, ParserRuleContext + +from antlr.gen.JavaLexer import JavaLexer + + +def extract_exact_text(token_stream: CommonTokenStream, rule: ParserRuleContext) -> str: + return token_stream.getText(rule.start.tokenIndex, rule.stop.tokenIndex) + + +def is_break(rule: ParserRuleContext) -> bool: + return rule.start.type == JavaLexer.BREAK + + +def is_return(rule: ParserRuleContext) -> bool: + return rule.start.type == JavaLexer.RETURN + + +def is_continue(rule: ParserRuleContext) -> bool: + return rule.start.type == JavaLexer.CONTINUE + + +def is_throw(rule: ParserRuleContext) -> bool: + return rule.start.type == JavaLexer.THROW diff --git a/cfg_generator/src/cfg_extractor/__init__.py b/cfg_generator/src/cfg_extractor/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/cfg_generator/src/cfg_extractor/cfg_extractor_visitor.py b/cfg_generator/src/cfg_extractor/cfg_extractor_visitor.py new file mode 100644 index 00000000..759a0e33 --- /dev/null +++ b/cfg_generator/src/cfg_extractor/cfg_extractor_visitor.py @@ -0,0 +1,128 @@ +from functools import reduce +from cfg_generator.src.antlr.gen.JavaParser import JavaParser +from cfg_generator.src.antlr.gen.JavaParserVisitor import JavaParserVisitor +from cfg_generator.src.data_structures.graph.networkx_builder import NxDiGraphBuilder as DiGraphBuilder +from cfg_generator.src.cfg_extractor.language_structure.digraph_embedder import DiGraphEmbedder + + +class CFGExtractorVisitor(JavaParserVisitor): + """ + The class includes a method for each non-terminal (i.e., selection, iteration, jump and try-catch statements) + Each method builds a part of a CFG rooted at its corresponding non-terminal. + The extracted sub-graph is saved using the `networkx` library. + visit() is the first method of the class which is invoked initially by the main. + """ + + def __init__(self): + """ + `functions` is a dictionary to keep each function signature and its CFG reference. + Each CFG is kept as a `networkx.DiGraph`. + """ + self.Class = {} + self.functions = {} + self.functionLastNode = {} + self.catches = [] + + def visitMethodDeclaration(self, ctx: JavaParser.MethodDeclarationContext): + gin = self.visit(ctx.methodBody()) + name = self.visit(ctx.methodHeader()) + graph, self.functionLastNode[name] = DiGraphEmbedder.embed_in_function(gin, self.catches) + self.functions[name] = graph.build() + self.catches = [] + + def visitMethodHeader(self, ctx: JavaParser.MethodHeaderContext): + return self.visit(ctx.methodDeclarator()) + + def visitMethodDeclarator(self, ctx: JavaParser.MethodDeclaratorContext): + return ctx.Identifier().getText() + + def visitBlock(self, ctx: JavaParser.BlockContext): + if ctx.blockStatements() is not None: + return self.visit(ctx.blockStatements()) + + def visitBlockStatements(self, ctx: JavaParser.BlockStatementsContext): + gins = (self.visit(block) for block in ctx.blockStatement()) + return reduce(DiGraphEmbedder.merge, gins) + + def visitIfThenStatement(self, ctx: JavaParser.IfThenStatementContext): + condition = ctx.expression() + then_part = ctx.statement() + then_part_graph = self.visit(then_part) + return DiGraphEmbedder.embed_in_if(condition, then_part_graph) + + def visitIfThenElseStatement(self, ctx: JavaParser.IfThenElseStatementContext): + condition = ctx.expression() + then_part = ctx.statementNoShortIf() + else_part = ctx.statement() + then_part_graph = self.visit(then_part) + else_part_graph = self.visit(else_part) + return DiGraphEmbedder.embed_in_if_else(condition, then_part_graph, else_part_graph) + + def visitSwitchStatement(self, ctx: JavaParser.SwitchStatementContext): + switcher = ctx.expression() + case_labels, case_bodies = zip(*self.visit(ctx.switchBlock())) + return DiGraphEmbedder.embed_in_switch_case(switcher, case_labels, case_bodies) + + def visitSwitchBlock(self, ctx: JavaParser.SwitchBlockContext): + return [self.visit(switch_group) for switch_group in ctx.switchBlockStatementGroup()] + + def visitSwitchBlockStatementGroup(self, ctx: JavaParser.SwitchBlockStatementGroupContext): + case = ctx.switchLabel() + block_graph = self.visit(ctx.blockStatements()) + return case, block_graph + + def visitBasicForStatement(self, ctx: JavaParser.BasicForStatementContext): + initializer = ctx.forInit() + condition = ctx.expression() + successor = ctx.forUpdate() + body_graph = self.visit(ctx.statement()) + return DiGraphEmbedder.embed_in_for(condition, initializer, successor, body_graph) + + def visitWhileStatement(self, ctx: JavaParser.WhileStatementContext): + condition = ctx.expression() + body_graph = self.visit(ctx.statement()) + return DiGraphEmbedder.embed_in_while(condition, body_graph) + + def visitDoStatement(self, ctx: JavaParser.DoStatementContext): + condition = ctx.expression() + do_body = ctx.statement() + do_body_graph = self.visit(do_body) + return DiGraphEmbedder.embed_in_do_while(condition, do_body_graph) + + def visitTryStatement(self, ctx: JavaParser.TryStatementContext): + try_body = self.visit(ctx.block()) + catch_exceptions, catch_bodies = zip(*self.visit(ctx.catches())) + embeded_graph, self.catches = DiGraphEmbedder.embed_in_try_catch(try_body, catch_exceptions, catch_bodies) + return embeded_graph + + def visitCatches(self, ctx: JavaParser.CatchesContext): + return [self.visit(catches) for catches in ctx.catchClause()] + + def visitCatchClause(self, ctx: JavaParser.CatchClauseContext): + catch_body = self.visit(ctx.block()) + exception = ctx.catchFormalParameter() + return exception, catch_body + + def visitExpressionStatement(self, ctx: JavaParser.ExpressionStatementContext): + return DiGraphBuilder().add_node(value=[ctx]) + + def visitLocalVariableDeclarationStatement(self, ctx: JavaParser.LocalVariableDeclarationStatementContext): + return DiGraphBuilder().add_node(value=[ctx]) + + def visitBreakStatement(self, ctx: JavaParser.BreakStatementContext): + return DiGraphBuilder().add_node(value=[ctx]) + + def visitLocalVariableDeclaration(self, ctx: JavaParser.LocalVariableDeclarationContext): + return DiGraphBuilder().add_node(value=[ctx]) + + def visitContinueStatement(self, ctx: JavaParser.ContinueStatementContext): + return DiGraphBuilder().add_node(value=[ctx]) + + def visitThrowStatement(self, ctx: JavaParser.ThrowStatementContext): + return DiGraphBuilder().add_node(value=[ctx]) + + def visitReturnStatement(self, ctx: JavaParser.ReturnStatementContext): + return DiGraphBuilder().add_node(value=[ctx]) + + def visitEmptyStatement_(self, ctx: JavaParser.EmptyStatement_Context): + return DiGraphBuilder().add_node(value=[ctx]) diff --git a/cfg_generator/src/cfg_extractor/lang_structures.py b/cfg_generator/src/cfg_extractor/lang_structures.py new file mode 100644 index 00000000..ef322ba1 --- /dev/null +++ b/cfg_generator/src/cfg_extractor/lang_structures.py @@ -0,0 +1,261 @@ +import networkx as nx + +from cfg_generator.src.antlr.gen.JavaParser import JavaParser +from cfg_generator.src.antlr.rule_utils import is_break +from cfg_generator.src.graph.utils import (shift_node_labels, + head_node, last_node, + split_on_break, split_on_continue, split_on_return, split_on_throw, + compose, solve_null_nodes) + + +def embed_in_conditional_for(gin, initializer, condition, successor): + g = nx.DiGraph() + g_head, g_cond = 0, 1 + g.add_nodes_from([(g_head, {"data": [initializer] if initializer else []}), + (g_cond, {"data": [condition]})]) + + gin = shift_node_labels(gin, len(g)) + gin_head, gin_last = get_graph_label_range(gin) + g_succ = gin_last + 1 + g_last = g_succ + 1 + + g.add_edges_from([(g_head, g_cond), + (g_cond, gin_head, {"state": "True"}), + (g_cond, g_last, {"state": "False"}), + (gin_last, g_succ), + (g_succ, g_cond)]) + + g.nodes[g_succ]["data"] = [successor] if successor else [] + g.nodes[g_last]["data"] = [] + g = compose(g, gin) + g = split_on_continue(g, g_succ) + return g + + +def embed_in_unconditional_for(gin, initializer, successor): + g = nx.DiGraph() + g_head = 0 + g.add_nodes_from([(g_head, {"data": [initializer] if initializer else []})]) + + gin = shift_node_labels(gin, len(g)) + gin_head, gin_last = get_graph_label_range(gin) + g_succ = gin_last + 1 + g_last = g_succ + 1 + + g.add_node(g_last) + g.add_edges_from([(g_head, gin_head), (gin_last, g_succ), (g_succ, gin_head)]) + + g.nodes[g_succ]["data"] = [successor] if successor else [] + g.nodes[g_last]["data"] = [] + g = compose(g, gin) + g = split_on_continue(g, g_succ) + return g + + +def embed_in_for_structure(gin, initializer, condition, successor): + if condition: + g = embed_in_conditional_for(gin, initializer, condition, successor) + else: + g = embed_in_unconditional_for(gin, initializer, successor) + + g = split_on_break(g) + return g + + +def embed_in_do_while_structure(gin, condition): + g, g_head = build_simple_initial_graph() + gin = shift_node_labels(gin, len(g)) + gin_head, gin_last = get_graph_label_range(gin) + g_cond = gin_last + 1 + g_last = g_cond + 1 + + g.add_edges_from([(g_head, gin_head), + (gin_last, g_cond), + (g_cond, gin_head, {"state": "True"}), + (g_cond, g_last, {"state": "False"})]) + + g.nodes[g_cond]["data"] = [condition] + g.nodes[g_last]["data"] = [] + g = compose(g, gin) + g = split_on_continue(g, g_cond) + g = split_on_break(g) + return g + + +def build_simple_initial_graph(): + g = nx.DiGraph() + g_head = 0 + g.add_node(g_head, data=[]) + return g, g_head + + +def embed_in_while_structure(gin, condition): + g, g_cond, g_head = build_initial_while_graph(condition) + + gin = shift_node_labels(gin, len(g)) + gin_head, gin_last = get_graph_label_range(gin) + g_last = gin_last + 1 + + g.add_edges_from([(g_head, g_cond), + (g_cond, gin_head, {"state": "True"}), + (g_cond, g_last, {"state": "False"}), + (gin_last, g_cond)]) + + g.nodes[g_last]["data"] = [] + g = compose(g, gin) + g = split_on_continue(g, g_cond) + g = split_on_break(g) + return g + + +def build_initial_while_graph(condition): + g = nx.DiGraph() + g_head, g_cond = 0, 1 + g.add_nodes_from([(g_head, {"data": []}), + (g_cond, {"data": [condition]})]) + return g, g_cond, g_head + + +def embed_in_if_else_structure(gin_true, gin_false, condition): + g, g_head = build_initial_conditional_graph(condition) + # shift both then and else parts to rearrange the basic block's label numbers + gin_false, gin_true = shift_if_else_graphs(len(g), gin_true, gin_false) + + # retrieve then and else part head and ending node labels + gin_true_head, gin_true_last = get_graph_label_range(gin_true) + gin_false_head, gin_false_last = get_graph_label_range(gin_false) + + # calculate the last node label of the final if-else structure graph + g_last = gin_false_last + len(g) + + # set if-else structure nodes, as well as the decision flows + g.add_edges_from([(g_head, gin_false_head, {"state": "False"}), + (g_head, gin_true_head, {"state": "True"}), + (gin_true_last, g_last), + (gin_false_last, g_last)]) + # set the junction basic block as an empty block + g.nodes[g_last]["data"] = [] + + # compose then part, else part, and the new graph into a graph as the final result + g = compose(g, gin_true, gin_false) + return g + + +def get_graph_label_range(gin): return head_node(gin), last_node(gin) + + +def build_initial_conditional_graph(condition): + g = nx.DiGraph() + g_head = 0 + g.add_node(g_head, data=[condition]) + return g, g_head + + +def shift_if_else_graphs(n, gin_true, gin_false): + gin_true = shift_node_labels(gin_true, n) + gin_false = shift_node_labels(gin_false, len(gin_true) + n) + return gin_false, gin_true + + +def embed_in_if_structure(gin, condition) -> nx.DiGraph: + g, g_head = build_initial_conditional_graph(condition) + gin = shift_node_labels(gin, len(g)) + + gin_head, gin_last = get_graph_label_range(gin) + + g_last = gin_last + len(g) + + g.add_edges_from([(g_head, g_last, {"state": "False"}), + (g_head, gin_head, {"state": "True"}), + (gin_last, g_last)]) + + g.nodes[g_last]["data"] = [] + g = compose(g, gin) + return g + + +def embed_in_switch_structure(gin_by_case: nx.DiGraph, condition): + g, g_head = build_initial_conditional_graph(condition) + g_last = len(gin_by_case) + 1 + cases, gins = zip(*gin_by_case) + hs = shift_case_graphs(gins, len(g)) + g.add_edges_from([(g_head, head_node(h), {"state": case.getText()}) for h, case in zip(hs, cases)]) + with_breaks, trails = partition_graphs_on_break(hs) + g.add_edges_from([(last_node(h), g_last) for h in with_breaks]) + g.add_edges_from([(last_node(h), head_node(hs[hs.index(h) + 1])) for h in trails]) + + g.nodes[g_last]["data"] = [] + g = compose(g, *hs) + g = split_on_break(g) + return g + + +def shift_case_graphs(sub_graphs, n): + lengths = [len(h) for h in sub_graphs] + hs = [shift_node_labels(sub_graphs[i], sum(lengths[:i]) + n) for i in range(len(sub_graphs))] + return hs + + +def partition_graphs_on_break(gs): + contains_break = lambda g: any(is_break(ctx) for ctx in g.nodes[last_node(g)]["data"]) + with_breaks, trails = partition(contains_break, gs[:-1]) + with_breaks.append(gs[-1]) + return with_breaks, trails + + +def partition(predicate, iterator): + yes, no = [], [] + for e in iterator: + if predicate(e): + yes.append(e) + else: + no.append(e) + return yes, no + + +def case_indices(gin): + return zip(*[(l, d[0]) for l, d in gin.nodes(data="data") if + d and (isinstance(d[0], JavaParser.ConstantExpressionContext) + or d[0].getText() == "default")]) + + +def extract_case_sub_graphs(gin): + indices, cases = case_indices(gin) + # case_ranges = pair_case_indices(indices, last_node(gin)) + # sub_graphs = [reorder_node_labels(gin.subgraph(range(f, t))) for f, t in case_ranges] + return cases + + +def pair_case_indices(iterator, ending): + start_indices = map(lambda x: x + 1, iterator) + end_indices = list(iterator) + end_indices = end_indices[1:] + end_indices.append(ending + 1) + return list(zip(start_indices, end_indices)) + + +def embed_in_function_structure(gin): + g = gin.copy() + g_last = last_node(gin) + 1 + g.add_node(g_last, data=[]) + g.add_edge(last_node(gin), g_last) + g = split_on_return(g) + return solve_null_nodes(g) + + +def embed_in_try_catch_structure(try_body, catch_bodies): + g = nx.DiGraph() + exceptions, catch_bodies = zip(*catch_bodies) + catch_bodies = shift_case_graphs(catch_bodies, len(try_body)) + catch_bodies_ranges = [get_graph_label_range(catch_body) for catch_body in catch_bodies] + g_body_last = last_node(try_body) + + g_last = catch_bodies_ranges[-1][-1] + 1 + g.add_edge(g_body_last, g_last) + g.add_edges_from([(last, g_last) for _, last in catch_bodies_ranges]) + g = compose(g, try_body, *catch_bodies) + + g.nodes[g_last]["data"] = [] + + g = split_on_throw(g, catch_bodies_ranges[0][0]) + return g diff --git a/cfg_generator/src/cfg_extractor/language_structure/__init__.py b/cfg_generator/src/cfg_extractor/language_structure/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/cfg_generator/src/cfg_extractor/language_structure/digraph_embedder.py b/cfg_generator/src/cfg_extractor/language_structure/digraph_embedder.py new file mode 100644 index 00000000..5aec6932 --- /dev/null +++ b/cfg_generator/src/cfg_extractor/language_structure/digraph_embedder.py @@ -0,0 +1,336 @@ +from typing import List, Tuple, Any, Union +from antlr4 import RuleContext +from cfg_generator.src.data_structures.graph.builder_interface import IDiGraphBuilder +from cfg_generator.src.cfg_extractor.language_structure.structure_pattern_interface import ILanguagePattern +from cfg_generator.src.data_structures.graph.builder_interface import IDiGraphBuilder +from cfg_generator.src.data_structures.graph.networkx_builder import NxDiGraphBuilder as DiGraphBuilder +from enum import Enum, auto +from cfg_generator.src.antlr.rule_utils import is_break, is_return, is_continue, is_throw, extract_exact_text +from cfg_generator.src.antlr.gen.JavaParser import JavaParser +from antlr4.xpath.XPath import XPath +from functools import reduce +import operator + + +class EdgeLabel(Enum): + false = auto() + true = auto() + + +class DiGraphEmbedder(ILanguagePattern): + + @classmethod + def concat(cls, left: IDiGraphBuilder, right: IDiGraphBuilder) -> IDiGraphBuilder: + right = right >> len(left) + + g = (DiGraphBuilder() + .add_nodes_from([(left.last, []), (right.head, [])]) + .add_edge(left.last, right.head)) + return g | left | right + + @classmethod + def merge(cls, left: IDiGraphBuilder, right: IDiGraphBuilder) -> IDiGraphBuilder: + if right is not None: + right = right >> len(left) - 1 + return left | right + else: + return left + + @classmethod + def embed_in_if(cls, condition: RuleContext, then_part: "IDiGraphBuilder"): + g_head = 0 + g = DiGraphBuilder().add_node(g_head, value=[condition]) + then_part = then_part >> len(g) + g_last = then_part.last + 1 + g.add_node(g_last, value=[]) + g = g | then_part + return g.add_edges_from([(g_head, g_last, EdgeLabel.false.name), + (g_head, then_part.head, EdgeLabel.true.name), + (then_part.last, g_last)]) + + @classmethod + def embed_in_if_else(cls, condition: RuleContext, then_part: "IDiGraphBuilder", else_part: "IDiGraphBuilder"): + g_head = 0 + g = DiGraphBuilder().add_node(g_head, value=[condition]) + then_part = then_part >> len(g) + else_part = else_part >> len(g) + len(then_part) + g = g | then_part | else_part + g_last = g.last + 1 + g.add_node(g_last, value=[]) + return g.add_edges_from([(g_head, else_part.head, EdgeLabel.false.name), + (g_head, then_part.head, EdgeLabel.true.name), + (then_part.last, g_last), + (else_part.last, g_last)]) + + @classmethod + def embed_in_switch_case(cls, switcher: RuleContext, labels: List[RuleContext], bodies: List["IDiGraphBuilder"]): + g_head = 0 + start = 1 + shifted_bodies = [] + g = DiGraphBuilder().add_node(g_head, value=[switcher] if switcher else []) + for i in range(len(bodies)): + shifted_bodies.append(bodies[i] >> start) + start = shifted_bodies[i].last + 1 + g_last = shifted_bodies[-1].last + 1 + for bodies_object in shifted_bodies: + g = g | bodies_object + g.add_node(g_last, value=[]) + g.add_edges_from( + [(g_head, body.head, label.getText() if label else "") for label, body in + zip(reduce(operator.concat, list(labels)), shifted_bodies)]) + g.add_edges_from([(body.last, body.last + 1) for label, body in zip(labels, shifted_bodies)]) + return cls.__split_on_break(g, g.last) + + @classmethod + def embed_in_while(cls, condition: RuleContext, body: "IDiGraphBuilder"): + g_head, g_condition = 0, 1 + g = DiGraphBuilder().add_nodes_from([(g_head, []), + (g_condition, [condition])]) + body = body >> len(g) + g_last = body.last + 1 + g.add_node(g_last, value=[]) + g = g | body + g.add_edges_from([(g_head, g_condition), + (g_condition, body.head, EdgeLabel.true.name), + (g_condition, g_last, EdgeLabel.false.name), + (body.last, g_condition)]) + g = cls.__split_on_continue(g, g_condition) + return cls.__split_on_break(g, g.last) + + @classmethod + def embed_in_do_while(cls, condition: RuleContext, body: "IDiGraphBuilder"): + g_head = 0 + g = DiGraphBuilder().add_node(g_head, []) + body = body >> len(g) + g_condition = body.last + 1 + g_last = g_condition + 1 + g.add_nodes_from([(g_condition, [condition]), + (g_last, [])]) + g = g | body + g.add_edges_from([(g_head, body.head), + (body.last, g_condition), + (g_condition, body.head, EdgeLabel.true.name), + (g_condition, g_last, EdgeLabel.false.name)]) + g = cls.__split_on_continue(g, g_condition) + return cls.__split_on_break(g, g.last) + + @classmethod + def embed_in_for(cls, + condition, + initializer: RuleContext, + successor: IDiGraphBuilder, + body: RuleContext) -> IDiGraphBuilder: + g, ref = (cls.__embed_in_conditional_for(condition, initializer, successor, body) if condition + else cls.__embed_in_unconditional_for(initializer, successor, body)) + return cls.__split_on_break(g, ref) + + @classmethod + def __embed_in_conditional_for(cls, + condition: RuleContext, + initializer: RuleContext, + successor: RuleContext, + body: IDiGraphBuilder) -> tuple[ + Union[tuple[IDiGraphBuilder, list[tuple[Any, Any]]], IDiGraphBuilder], int]: + + g_head, g_condition = 0, 1 + g = DiGraphBuilder().add_nodes_from([(g_head, [initializer]) if initializer else (g_head, []), + (g_condition, [condition])]) + body = body >> len(g) + g_successor = body.last + 1 + g_last = g_successor + 1 + g.add_nodes_from([(g_last, []), (g_successor, [successor] if successor else [])]) + g = g | body + g.add_edges_from([(g_head, g_condition), (g_condition, body.head, EdgeLabel.true.name), + (g_condition, g_last, EdgeLabel.false.name), (body.last, g_successor), + (g_successor, g_condition)]) + return cls.__split_on_continue(g, g_successor), g_last + + @classmethod + def __embed_in_unconditional_for(cls, + initializer: RuleContext, + successor: RuleContext, + body: IDiGraphBuilder) -> tuple[ + Union[tuple[IDiGraphBuilder, list[tuple[Any, Any]]], IDiGraphBuilder], int]: + g_head = 0 + g = DiGraphBuilder().add_node(g_head, [initializer] if initializer else []) + body = body >> len(g) + g_successor = body.last + 1 + g_last = g_successor + 1 + g.add_nodes_from([(g_last, []), (g_successor, [successor] if successor else [])]) + g = g | body + g.add_edges_from([(g_head, body.head), + (body.last, g_successor), + (g_successor, body.head)]) + return cls.__split_on_continue(g, g_successor), g_last + + @classmethod + def embed_in_try_catch(cls, + try_body: "IDiGraphBuilder", + exceptions: List[RuleContext], + catch_bodies: List["IDiGraphBuilder"]): + catches = [] + g = DiGraphBuilder() + g = g | try_body + for catch, exception in zip(catch_bodies, exceptions): + catches.extend([(catch, exception)]) + return cls.__split_on_throw(g, catches) + + @classmethod + def __resolve_null_node(cls, graph: IDiGraphBuilder, catches, lastNodes): + # this is a list to store end nodes for graphviz + newLastNodes = lastNodes + + # remove null nodes + h = graph.copy() + for node, data in graph.node_items: + if not data: + # get previous, next, and edges for null node + predecessors = list(h.predecessors(node)) + successors = list(h.successors(node)) + edges = sorted(h.edge_items) + if successors: + for pred in predecessors: + for s in successors: + # connect previous node to next node + h.add_edges_from([(pred, s, edge_label) for edge_nodes, edge_label in edges if edge_nodes == (pred, node)]) + if (node, s) in edges: + h.remove_edge(node, s) + + h.remove_edge(pred, node) + else: + # if node doesn't have next node, recognize it as end node + for pred in predecessors: + newLastNodes.extend([(pred, [h[pred], edge_label]) for edge_nodes, edge_label in edges if edge_nodes == (pred, node)]) + h.remove_edge(pred, node) + + h.remove_node(node) + + h.reset_node_order() + newLastNodes = h.reset_list_order(newLastNodes) + h_length = len(h) + for catch in catches: + tmp = catch[0] >> h_length + h = h | tmp + h_length += len(tmp) + h = cls.__resolve_catch_null_nodes(h) + + return h, newLastNodes + + @classmethod + def __resolve_catch_null_nodes(cls, graph: IDiGraphBuilder): + h = graph.copy() + for node, data in graph.node_items: + if not data: + # get previous, next, and edges for null node + sucss = list(graph.successors(node)) + edges = sorted([edge for edge in graph.edge_items if node in edge[0]], key=lambda d: d[0][0]) + for edge in edges: + if edge[0][1] == node: + if sucss: + # connect previous node to next node + h.add_edges_from([(edge[0][0], s, edge[1].getText()) for s in sucss]) + h.remove_edge(edge[0][0], node) + h.remove_edges_from([(node, s) for s in sucss]) + + else: + # if node doesn't have next node, recognize it as end node + h.remove_edge(edge[0][0], node) + + h.remove_node(node) + + h.reset_node_order() + return h + + @classmethod + def embed_in_function(cls, body: "IDiGraphBuilder", catches): + g = DiGraphBuilder() + g = g | body if body is not None else g.add_node(0, []) + g, catches = cls.__split_on_throw(g, []) + g, lastNodes = cls.__split_on_return(g) + return cls.__resolve_null_node(g, catches, lastNodes) + + @classmethod + def __split_on_return(cls, graph: IDiGraphBuilder): + return cls.__direct_nodes_to_if(graph, None, is_return) + + @classmethod + def __split_on_continue(cls, graph: "IDiGraphBuilder", direction_reference): + return cls.__direct_nodes_to_if(graph, direction_reference, is_continue) + + @classmethod + def __split_on_break(cls, graph: "IDiGraphBuilder", direction_reference): + return cls.__direct_nodes_to_if(graph, direction_reference, is_break) + + @classmethod + def __split_on_throw(cls, graph: "IDiGraphBuilder", catches): + free_catches = [] + throwFlag = False + h = graph.copy() + for label, data in graph.node_items: + for ctx in data: + if is_throw(ctx): + throwFlag = True + catch_matched = False + h.remove_nodes_from(graph.descendants(label)) + if catches: + for catch in catches: + if XPath.findAll(catch[1], "//catchType", JavaParser)[0].getText() == \ + XPath.findAll(ctx, "//classOrInterfaceTypeToInstantiate", JavaParser)[0].getText(): + tmp = catch[0] >> len(h) + h = h | tmp + h.add_edge(label, tmp.head, catch[1].getText()) + catch_matched = True + else: + free_catches.extend([(catch[0], None)]) + + if not catch_matched: + h_last_node = len(h) + h.add_node(h_last_node, []) + h.add_edge(label, h_last_node, + XPath.findAll(ctx, "//classOrInterfaceTypeToInstantiate", JavaParser)[ + 0].getText()) + + + else: + h_last_node = len(h) + h.add_node(h_last_node, []) + h.add_edge(label, h_last_node, + XPath.findAll(ctx, "//classOrInterfaceTypeToInstantiate", JavaParser)[0].getText()) + + h[label] = data[:data.index(ctx) + 1] + + if not throwFlag and catches: + free_catches.extend(catches) + + h.reset_node_order() + return h, free_catches + + @classmethod + def __direct_nodes_to_if(cls, + graph: "IDiGraphBuilder", + target_node, + jump_statement): + lastNodes = [] + h = graph.copy() + for label, data in graph.node_items: + for ctx in data: + if ctx: + if jump_statement(ctx): + if list(graph.successors(label)): + h.remove_edges_from([(label, successor) for successor in graph.successors(label)]) + if target_node is None: + lastNodes.extend([(label, [data, None])]) + else: + h.add_edge(label, target_node) + h[label] = data[:data.index(ctx)] + + else: + if target_node is None: + lastNodes.extend([(label, [data, None])]) + h[label] = data[:data.index(ctx) + 1] + + h.reset_node_order() + if target_node is None: + return h, lastNodes + else: + return h diff --git a/cfg_generator/src/cfg_extractor/language_structure/structure_pattern_interface.py b/cfg_generator/src/cfg_extractor/language_structure/structure_pattern_interface.py new file mode 100644 index 00000000..79ba60c6 --- /dev/null +++ b/cfg_generator/src/cfg_extractor/language_structure/structure_pattern_interface.py @@ -0,0 +1,83 @@ +import abc +from typing import List + +from cfg_generator.src.antlr.gen.JavaParser import RuleContext +from cfg_generator.src.data_structures.graph.builder_interface import IDiGraphBuilder + + +class ILanguagePattern(metaclass=abc.ABCMeta): + + @classmethod + @abc.abstractmethod + def concat(cls, + left: IDiGraphBuilder, + right: IDiGraphBuilder) -> IDiGraphBuilder: + """concatenate two graphs sequentially""" + + @classmethod + @abc.abstractmethod + def merge(cls, + left: IDiGraphBuilder, + right: IDiGraphBuilder) -> IDiGraphBuilder: + """merge two graphs affront nodes""" + + @classmethod + @abc.abstractmethod + def embed_in_if(cls, + condition: RuleContext, + then_part: IDiGraphBuilder) -> IDiGraphBuilder: + """embed the then part graph into an if graph pattern""" + + @classmethod + @abc.abstractmethod + def embed_in_if_else(cls, + condition: RuleContext, + then_part: IDiGraphBuilder, + else_part: IDiGraphBuilder) -> IDiGraphBuilder: + """embed the then part and else part graphs into an if-else graph pattern""" + + @classmethod + @abc.abstractmethod + def embed_in_switch_case(cls, + switcher: RuleContext, + labels: List[RuleContext], + bodies: List[IDiGraphBuilder]) -> IDiGraphBuilder: + """embed the body graphs into a switch-case graph pattern""" + + @classmethod + @abc.abstractmethod + def embed_in_while(cls, + condition: RuleContext, + body: IDiGraphBuilder) -> IDiGraphBuilder: + """embed the body graph into a while graph pattern""" + + @classmethod + @abc.abstractmethod + def embed_in_do_while(cls, + condition: RuleContext, + body: IDiGraphBuilder) -> IDiGraphBuilder: + """embed the body graph into a do-while graph pattern""" + + @classmethod + @abc.abstractmethod + def embed_in_for(cls, + condition: RuleContext, + initializer: RuleContext, + successor: RuleContext, + body: IDiGraphBuilder) -> IDiGraphBuilder: + """embed the body graph into a for graph pattern""" + + @classmethod + @abc.abstractmethod + def embed_in_try_catch(cls, + try_body: IDiGraphBuilder, + exceptions: List[RuleContext], + catch_bodies: List[IDiGraphBuilder]) -> IDiGraphBuilder: + """embed the body and catch graphs into a try-catch graph pattern""" + + @classmethod + @abc.abstractmethod + def embed_in_function(cls, + body: IDiGraphBuilder, + catchLastNodes: List) -> IDiGraphBuilder: + """embed the body graph into a function graph pattern""" diff --git a/cfg_generator/src/cfg_from_stdin.py b/cfg_generator/src/cfg_from_stdin.py new file mode 100644 index 00000000..45888242 --- /dev/null +++ b/cfg_generator/src/cfg_from_stdin.py @@ -0,0 +1,81 @@ +from antlr4 import * +from antlr4 import CommonTokenStream, StdinStream, FileStream +from graphviz import Graph +import graphviz as gv +from cfg_generator.src.antlr.gen.JavaLexer import JavaLexer +from cfg_generator.src.antlr.gen.JavaParser import JavaParser +from typing import List +import re + +from data_structures import graph +from cfg_generator.src.cfg_extractor.cfg_extractor_visitor import CFGExtractorVisitor +from cfg_generator.src.graph.visual import draw_CFG +import os +from networkx import to_dict_of_dicts +from pathlib import Path + +ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) + + +def find_java_files(directory): + """ + Recursively finds Java files in the given directory and yields project number and Java file number. + + :param directory: Root directory to start searching from. + :yield: Tuples containing the project number and the Java file number within each project. + """ + return [str(filename) for filename in Path(directory).rglob('*.java')] + + +def prompt(): + # project_name = input("Enter your Project Name[1_tulibee]: ") + is_verbose = input("Verbose graph draw (y/n)? ").startswith(("y", "Y")) + test_source_directory = "F:\\OpenUnderstand\\cfg_generator\\test_source\\dowhile.java" + # file_path = "1_tullibee" + # test_source_directory = test_source_directory + project_name + "/src/main/" if project_name else test_source_directory + file_path + # return is_verbose, test_source_directory, project_name if project_name else file_path + return is_verbose, test_source_directory + +def extract(stream): + lexer = JavaLexer(stream) + token_stream = CommonTokenStream(lexer) + parser = JavaParser(token_stream) + parse_tree = parser.compilationUnit() + cfg_extractor = CFGExtractorVisitor() + cfg_extractor.visit(parse_tree) + funcs = cfg_extractor.functions + LastNodes = cfg_extractor.functionLastNode + return funcs, token_stream, LastNodes + + +def makedir(directory): + try: + os.makedirs(directory) + + except OSError as error: + print(error) + + +def main(): + is_verbose, project_path = prompt() + # files = find_java_files(project_path) + # print(ROOT_DIR) + # makedir(f"test_output/{project_name}") + # for file in files: + # makedir(ROOT_DIR + f"\\..\\test_output\\{Path(file).stem}") + + stream = FileStream(project_path, encoding="utf8") + funcs, token_stream, end_nodes = extract(stream) + output_list = [] + for g in funcs.items(): + makedir(ROOT_DIR + f"\\..\\test_output\\{Path(project_path).stem}\\{g[0]}") + draw_CFG(g[1], end_nodes[g[0]], ROOT_DIR + f"\\..\\test_output\\{Path(project_path).stem}\\{g[0]}\\{g[0]}", + token_stream, + verbose=is_verbose, function_name=g[0], output_list=output_list) + + + print(output_list) + + +if __name__ == '__main__': + main() diff --git a/cfg_generator/src/code_coverage/__init__.py b/cfg_generator/src/code_coverage/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/cfg_generator/src/code_coverage/path_finder.py b/cfg_generator/src/code_coverage/path_finder.py new file mode 100644 index 00000000..45055c08 --- /dev/null +++ b/cfg_generator/src/code_coverage/path_finder.py @@ -0,0 +1,129 @@ +import networkx as nx +from collections import deque + + +def change_str_list(lis): + return list(map(int, lis)) + + +def change_str_listoflist(lis): + end_res = list() + for i in lis: + end_res.append(list(map(int, list(i)))) + return end_res + + +def change_str_listoflistoflist(lis): + end_res = list() + for i in lis: + list1 = [] + for j in i: + list1.append(list(map(int, list(j)))) + end_res.append(list1) + return end_res + + +def read_graph(g, firs, last): + edges = {} + nodes = list(nx.nodes(g)) + initNodes = [firs] + endNodes = [last] + for i in nx.nodes(g): + edges[i] = [j[1] for j in list(g.edges(i))] + graph = {'nodes': nodes, 'init': initNodes, 'end': endNodes, 'edges': edges} + return graph + + +def isPrimePath(path, graph): + """Whether a path is a prime path.""" + if len(path) >= 2 and path[0] == path[-1]: + return True + elif reachHead(path, graph) and reachEnd(path, graph): + return True + else: + return False + + +def reachHead(path, graph): + """ + Whether the path can be extended at head, and the extended path is still + a simple path. + """ + former_nodes = filter(lambda n: path[0] in graph[ + 'edges'][n], graph['nodes']) + for n in former_nodes: + if n not in path or n == path[-1]: + return False + return True + + +def reachEnd(path, graph): + """ + Whether the path can be extended at tail, and the extended path is still + a simple path. + """ + later_nodes = graph['edges'][path[-1]] + for n in later_nodes: + if n not in path or n == path[0]: + return False + return True + + +def extendable(path, graph): + """Whether a path is extendable.""" + if isPrimePath(path, graph) or reachEnd(path, graph): + return False + else: + return True + + +def findSimplePath(graph, exPaths, paths=[]): + """Find the simple paths of a graph.""" + paths.extend(filter(lambda p: isPrimePath(p, graph), exPaths)) + exPaths = filter(lambda p: extendable(p, graph), exPaths) + newExPaths = list() + for p in exPaths: + for nxx in graph['edges'][p[-1]]: + if nxx not in p or nxx == p[0]: + newExPaths.append(p + (nxx, )) + if len(newExPaths) > 0: + findSimplePath(graph, newExPaths, paths) + + +def findPrimePaths(graph): + """Find the prime paths of a graph.""" + last_prime = list() + exPaths = [(n, ) for n in graph['nodes']] + simplePaths = list() + # recursively finding the simple paths of the graph + findSimplePath(graph, exPaths, simplePaths) + primePaths = sorted(simplePaths, key=lambda a: (len(a), a), reverse=True) + + for i in primePaths: + if len(i) != 1: + last_prime.append(list(i)) + + return last_prime + + +def simple_paths(g): + sims = [] + for i in g.nodes(): + for j in g.nodes(): + sim = list(nx.all_simple_paths(g, i, j)) + for k in sim: + if k not in sims and k != []: + sims.append(k) + for i in list(nx.simple_cycles(g)): + item = deque(i) + for j in range(len(i)): + item.rotate(1) + x = list(item) + sims.append([*x, x[0]]) + return sims + + +def prime_paths(g, first, last): + graph = read_graph(g, first, last) + primes = findPrimePaths(graph) + return primes diff --git a/cfg_generator/src/code_coverage/prime_path_coverage.py b/cfg_generator/src/code_coverage/prime_path_coverage.py new file mode 100644 index 00000000..f8cec2e5 --- /dev/null +++ b/cfg_generator/src/code_coverage/prime_path_coverage.py @@ -0,0 +1,293 @@ +import networkx as nx +import math +from collections import defaultdict +from .path_finder import prime_paths + + +def check(l1, l2): + # return True if list2 is sublist of list1 but order of l2 is same in l1. + index_list = [i for i, v in enumerate(l1) if v == l2[0]] + for ii in index_list: + l1_slice = l1[ii:ii + len(l2)] + if l1_slice == l2: + return True + else: + return False + + +def checkSubset(list1, list2): + # return True if list2 is sublist of list1. + exist = True + for i in list2: + if i not in list1: + exist = False + return exist + + +def overlap(a, b): + # return continiusly overlap of two list + flag = False + for i in range(len(b), 0, -1): + if a[-i:] == b[0:i]: + flag = True + result = i + if flag is True: + return a[:] + b[result:] + else: + return [] + + +def path_request(test_path, primes): + # map each test path with test requirement + tr_tp = defaultdict(list) + tp_tr = defaultdict(list) + for i in test_path: + for j in primes: + if check(i, j) is True: + tp_tr[str(i)].append(j) + tr_tp[str(j)].append(i) + return tp_tr + + +def prime_path(g, first, last): + # return prime path of graph + primes = prime_paths(g, first, last) + return primes + + +def compute_P(g, first): + # first algorithm use BFS to create small set of path's + P = list() + ll = nx.bfs_tree(g, first) + for i in nx.nodes(g): + ss = nx.all_simple_paths(ll, first, i) + for j in list(ss): + P.append(j) + return P + + +def compute_TP(g, P, first, last): + """ + The heuristic algorithm for generating a small + set of test paths + """ + # if the last node of pi ∈ F then + TP = list() + new_P = P + for path in P: + if first == path[0] and last == path[-1]: + TP.append(path) + if path not in TP: + new_P.remove(path) + + # if pi includes fj chop the sub-path pij from the beginning tothe position where fj is in pi + neww_p = new_P + for path in new_P: + if first == path[0] and last in path: + path[:path.index(last)] + neww_p.remove(path) + if path not in TP: + TP.append(path) + + # the last node of not pi ∈ F + for path in neww_p: + if first == path[0]: + aa = list() + paths = nx.single_source_shortest_path(g, path[-1]) + destination_node = last + if destination_node in paths: + aa = paths[destination_node] + if path + aa[1:] not in TP: + TP.append(path + aa[1:]) + return TP + + +def super_request(g, first, last): + # use set coverage greedy algorithm to find minimum super test requirement list. + tp_tr = defaultdict(list) + super_req = list() + + # put the super-test requirement sk of tri and trj intoa set S where k>0 + S = list() + tr = prime_path(g, first, last) + for i in range(0, len(tr)): + for j in range(0, len(tr)): + if i != j: + a = overlap(tr[i], tr[j]) + if a != [] and a not in S: + S.append(a) + + # compute the cost-effectiveness of g + test_req = tr + S + new = tr.copy() + covered = list() + while new != []: + cost_efftectivness = {} + tp_tr = path_request(test_req, new) + for key, val in tp_tr.items(): + effectiveness = 0 + for j in val: + if j not in covered: + effectiveness += 1 + cost = len(eval(key)) + div = cost / effectiveness + cost_efftectivness[key] = div + # find gi with the minimum cost-effectiveness and extend the super-test requirement Π with g + min_list = list() + minn = math.inf + for num, i in enumerate(list(cost_efftectivness.values())): + if i < minn: + minn = i + min_list = list() + min_list.append(num) + elif i == minn: + min_list.append(num) + minimum = math.inf + for i in min_list: + if len(eval(list(tp_tr.keys())[i])) < minimum: + minimum = len(eval(list(tp_tr.keys())[i])) + min_index = i + super_req += eval(list(tp_tr.keys())[min_index]) + for i in tp_tr[list(tp_tr.keys())[min_index]]: + if i not in covered: + covered.append(i) + if i in new: + new.remove(i) + return super_req + + +def spliting_super(g, super_req, TP, first, last): + # cut the super requrement list to exe cution path's. + TR = prime_path(g, first, last) + edgg = list() + edg = nx.edges(g) + ans_tp = list() + ans_tr = list() + go_to_brute = list() + for i in edg: + edgg.append(list(i)) + end_res = list() + a = 0 + while a < len(super_req) - 1: + p = [] + a += 1 + p.append(super_req[a - 1]) + while a < len(super_req) and [super_req[a - 1], super_req[a]] in edgg: + p.append(super_req[a]) + a += 1 + end_res.append(p) + complete_tp_tr = path_request(end_res, TR) + for i in end_res: + if i[0] == first and i[-1] == last: + ans_tp.append(i) + ans_tr.append(complete_tp_tr[str(i)]) + else: + go_to_brute.append(i) + + ctp = brute_force(TP, go_to_brute, first, last) + last_tp, last_tr = minimize(ctp, TR) + result_tp = last_tp + ans_tp + result_tr = last_tr + ans_tr + return result_tp, result_tr + + +def brute_force(TP, TR, first, last): + # you can find method definition and functionality in article. + + # each test requirement tri ∈ T R that is not covered by T P + not_covered = list() + res = list() + for tr in TR: + for tp in TP: + if check(tp, tr) is False: + if tr not in not_covered: + not_covered.append(tr) + for path in not_covered: + new_path = [] + new_path = path.copy() + while new_path[0] != first or new_path[-1] != last: + for tp in TP: + if new_path[0] != first and new_path[0] in tp: + new_path = tp[:tp.index(new_path[0])] + new_path[:] + elif new_path[-1] != last and new_path[-1] in tp: + new_path = new_path[:] + tp[tp.index(new_path[-1]) + 1:] + if new_path not in res: + res.append(new_path) + return res + + +def minimizing(CTP, TR): + # delete redundant path + tp_tr = path_request(CTP, TR) + new = list() + for i in tp_tr.values(): + for j in i: + if j not in new: + new.append(j) + + dele = list() + for p1, r1 in tp_tr.items(): + for p2, r2 in tp_tr.items(): + if p1 != p2: + if checkSubset(list(r1), list(r2)) is True: + if p2 not in dele and (p1 not in dele and len(r2) != len(r1)): + dele.append(p2) + for i in dele: + del tp_tr[i] + + new = list() + for i in tp_tr.values(): + for j in i: + if j not in new: + new.append(j) + return list(tp_tr.keys()) + + +def minimize(CTP, TR): + # other algorithm for delete redundant path + result_tr = list() + result_tp = list() + tp_tr = path_request(CTP, TR) + for p1, r1 in tp_tr.copy().items(): + duplicate = [] + for p2, r2 in tp_tr.copy().items(): + if p1 != p2: + for k in r1: + if k in r2 and k not in duplicate: + duplicate.append(k) + flag = True + for o in duplicate: + if o in r1: + pass + else: + flag = False + if flag is True and len(duplicate) == len(r1): + del tp_tr[p1] + + for i in tp_tr.keys(): + result_tp.append(eval(i)) + + for j in tp_tr.values(): + result_tr.append(j) + + return result_tp, result_tr + + +def prime_path_coverage_superset(g, first, last): + # firs method for prime path coverage. + P = compute_P(g, first) + TP = compute_TP(g, P, first, last) + super_req = super_request(g, first, last) + end_tp, end_tr = spliting_super(g, super_req, TP, first, last) + return end_tp, end_tr + + +def prime_path_coverage_bruteforce(g, first, last): + # second method for prime path coverage. + + TR = prime_path(g, first, last) + P = compute_P(g, first) + TP = compute_TP(g, P, first, last) + ctp = brute_force(TP, TR, first, last) + end_tp, end_tr = minimize(ctp, TR) + return end_tp, end_tr diff --git a/cfg_generator/src/data_structures/__init__.py b/cfg_generator/src/data_structures/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/cfg_generator/src/data_structures/graph/__init__.py b/cfg_generator/src/data_structures/graph/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/cfg_generator/src/data_structures/graph/builder_interface.py b/cfg_generator/src/data_structures/graph/builder_interface.py new file mode 100644 index 00000000..c7428409 --- /dev/null +++ b/cfg_generator/src/data_structures/graph/builder_interface.py @@ -0,0 +1,134 @@ +import abc +from typing import List, Tuple, Any, Dict, Union, Iterable + + +class IDiGraphBuilder(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def node_keys(self) -> Iterable[int]: + """get nodes""" + + @property + @abc.abstractmethod + def node_values(self) -> Iterable: + """get nodes content""" + + @property + @abc.abstractmethod + def node_items(self) -> Iterable: + """get graph node items""" + + @property + @abc.abstractmethod + def edge_keys(self) -> Iterable[Tuple[int, int]]: + """get edges""" + + @property + @abc.abstractmethod + def edge_values(self) -> Iterable: + """get edges content""" + + @abc.abstractmethod + def get_last_nodes(self) -> List: + """get last nodes""" + + @property + @abc.abstractmethod + def edge_items(self) -> Iterable: + """get graph edge items""" + + @property + @abc.abstractmethod + def head(self) -> int: + """get the head node""" + + @property + @abc.abstractmethod + def last(self) -> int: + """get the last node""" + + @abc.abstractmethod + def descendants(self, node): + """get graph node descendants""" + + @abc.abstractmethod + def successors(self, node: int): + """successors of a given node""" + + @abc.abstractmethod + def predecessors(self, node: int) -> Iterable: + """predecessors of a given node""" + + @abc.abstractmethod + def add_node(self, node: int, value: Any = None) -> "IDiGraphBuilder": + """add a node""" + + @abc.abstractmethod + def remove_node(self, node: int) -> "IDiGraphBuilder": + """remove a node""" + + @abc.abstractmethod + def add_nodes_from(self, nodes: List) -> "IDiGraphBuilder": + """add a set of nodes""" + + @abc.abstractmethod + def remove_nodes_from(self, nodes: List) -> "IDiGraphBuilder": + """remove a set of nodes""" + + @abc.abstractmethod + def add_edge(self, f: int, t: int, value: Any = None) -> "IDiGraphBuilder": + """add an edge""" + + @abc.abstractmethod + def remove_edge(self, f: int, t: int) -> "IDiGraphBuilder": + """remove an edge""" + + @abc.abstractmethod + def add_edges_from(self, edges: List) -> "IDiGraphBuilder": + """add a set of edges""" + + @abc.abstractmethod + def remove_edges_from(self, edges: List) -> "IDiGraphBuilder": + """remove a set of edges""" + + @abc.abstractmethod + def compose(self, graph: "IDiGraphBuilder") -> None: + """compose (union) with a graph""" + + @abc.abstractmethod + def reset_node_order(self) -> None: + """reset node labels from zero""" + + @abc.abstractmethod + def build(self): + """build graph""" + + @abc.abstractmethod + def as_dict(self) -> Dict: + """get a dictionary presentation of graph""" + + @abc.abstractmethod + def copy(self) -> "IDiGraphBuilder": + """return a deep copy of object""" + + def __or__(self, other: "IDiGraphBuilder") -> "IDiGraphBuilder": + """compose graphs and merge graph data""" + + @abc.abstractmethod + def __rshift__(self, n: int) -> "IDiGraphBuilder": + """shift right the nodes""" + + @abc.abstractmethod + def __getitem__(self, item: Union[int, Tuple]): + """get content of a node""" + + @abc.abstractmethod + def __setitem__(self, item: Union[int, Tuple], content: Any): + """set content of a node""" + + @abc.abstractmethod + def __len__(self): + """number of nodes""" + + def reset_list_order(self, diff) -> List: + """reset node labels base on new graph node order""" diff --git a/cfg_generator/src/data_structures/graph/networkx_builder.py b/cfg_generator/src/data_structures/graph/networkx_builder.py new file mode 100644 index 00000000..75bdedc4 --- /dev/null +++ b/cfg_generator/src/data_structures/graph/networkx_builder.py @@ -0,0 +1,166 @@ +from typing import List, Any + +import networkx as nx +from networkx import DiGraph + +from cfg_generator.src.data_structures.graph.builder_interface import IDiGraphBuilder + + +class NxDiGraphBuilder(IDiGraphBuilder): + VALUE = "value" + + def __init__(self): + self.__graph = DiGraph() + + @property + def node_keys(self): + for node in self.__graph.nodes: + yield node + + @property + def node_values(self): + for _, content in self.__graph.nodes.data(self.VALUE): + yield content + + @property + def node_items(self): + return zip(self.node_keys, self.node_values) + + @property + def edge_keys(self): + for edge in self.__graph.edges: + yield edge + + @property + def edge_values(self): + for _, _, content in self.__graph.edges.data(self.VALUE): + yield content + + @property + def edge_items(self): + return zip(self.edge_keys, self.edge_values) + + @property + def head(self): + return min(self.node_keys) + + @property + def last(self): + return max(self.node_keys) + + def descendants(self, node): + return nx.descendants(self.__graph, node) + + def add_node(self, node=0, value=None): + self.__graph.add_node(node, value=value) + return self + + def successors(self, node: int): + for successor in self.__graph.successors(node): + yield successor + + def get_last_nodes(self): + last_nodes = [] + for node in self.node_keys: + if not dict(self.node_items)[node]: + last_nodes.extend(list(self.predecessors(node))) + elif not self.__graph.out_degree(node): + last_nodes.extend([node]) + return last_nodes + + def predecessors(self, node: int): + for predecessor in self.__graph.predecessors(node): + yield predecessor + + def remove_node(self, node): + self.__graph.remove_node(node) + return self + + def add_nodes_from(self, nodes): + mapper = lambda node: (node if isinstance(node, int) else + (node[0], {self.VALUE: node[1]})) + ns = [mapper(node) for node in nodes] + self.__graph.add_nodes_from(ns) + return self + + def remove_nodes_from(self, nodes): + self.__graph.remove_nodes_from(nodes) + + def add_edge(self, f, t, value=None): + self.__graph.add_edge(f, t, value=value) + return self + + def remove_edge(self, f, t): + self.__graph.remove_edge(f, t) + return self + + def add_edges_from(self, edges): + mapper = lambda edge: ((edge[0], edge[1]) if len(edge) == 2 else + (edge[0], edge[1], {self.VALUE: edge[2]})) + es = [mapper(edge) for edge in edges] + self.__graph.add_edges_from(es) + return self + + def remove_edges_from(self, edges): + self.__graph.remove_edges_from(edges) + return self + + def compose(self, other): + self.__graph = nx.compose(other.__graph, self.__graph) + + def reset_node_order(self): + self.__graph = nx.relabel_nodes(self.__graph, {old: new for new, old in enumerate(sorted(self.__graph.nodes))}) + + def reset_list_order(self, diffs): + end_list = [] + for diff in diffs: + data = diff[1][0] + edge_label = diff[1][1] + for v in self.node_items: + if data == v[1]: + end_list.extend([(v[0], edge_label)] if (v[0], diff[1]) not in end_list else []) + break + + return end_list + + def build(self): + return self.__graph + + def as_dict(self): + return {"nodes": list(self.node_items), "edges": list(self.edge_items)} + + def copy(self) -> "IDiGraphBuilder": + g = NxDiGraphBuilder() + g.__graph = self.__graph.copy() + return g + + def __or__(self, other): + common_nodes = set(self.node_keys) & set(other.node_keys) + common_data_by_nodes = [(node, self[node] + other[node]) for node in common_nodes] + + g = NxDiGraphBuilder() + g.__graph = nx.compose(other.__graph, self.__graph) + for node, data in common_data_by_nodes: + g[node] = data + return g + + def __rshift__(self, n): + g = NxDiGraphBuilder() + g.__graph = nx.relabel_nodes(self.__graph, {i: i + n for i in self.__graph.nodes}) + return g + + def __getitem__(self, item): + return (self.__graph.edges[item][self.VALUE] if isinstance(item, tuple) else + self.__graph.nodes[item][self.VALUE]) + + def __setitem__(self, item, content): + if isinstance(item, tuple): + self.__graph.edges[item][self.VALUE] = content + else: + self.__graph.nodes[item][self.VALUE] = content + + def __len__(self): + return len(self.__graph) + + def __str__(self): + return str(self.as_dict()) diff --git a/cfg_generator/src/graph/__init__.py b/cfg_generator/src/graph/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/cfg_generator/src/graph/utils.py b/cfg_generator/src/graph/utils.py new file mode 100644 index 00000000..eb8b9b99 --- /dev/null +++ b/cfg_generator/src/graph/utils.py @@ -0,0 +1,138 @@ +from functools import reduce, partial + +import networkx as nx + +from cfg_generator.src.antlr.rule_utils import is_break, is_return, is_continue, is_throw + + +def split_on_continue(gin: nx.DiGraph, continue_return) -> nx.DiGraph: + return direct_node_to_if(gin, continue_return, is_continue) + + +def split_on_break(gin: nx.DiGraph) -> nx.DiGraph: + return direct_node_to_if(gin, last_node(gin), is_break) + + +def split_on_throw(gin: nx.DiGraph, throw_return) -> nx.DiGraph: + return direct_node_to_if(gin, throw_return, is_throw) + + +def direct_node_to_if(gin: nx.DiGraph, direction_reference, predicate) -> nx.DiGraph: + g = gin.copy() + for label, data in gin.nodes(data="data"): + for ctx in data: + if predicate(ctx): + g.remove_edges_from([(label, adj) for adj in gin.adj[label]]) + g.add_edge(label, direction_reference) + g.nodes[label]["data"] = data[:data.index(ctx)] + break + return g + + +def split_on_return(gin: nx.DiGraph) -> nx.DiGraph: + g = gin.copy() + for label, data in gin.nodes(data="data"): + for ctx in data: + if is_return(ctx): + g.remove_edges_from([(label, adj) for adj in gin.adj[label]]) + g.add_edge(label, last_node(gin)) + d = data[:data.index(ctx)] + if ctx.expression(): + d += [ctx.expression()] + g.nodes[label]["data"] = d + break + return g + + +def solve_null_nodes(gin: nx.DiGraph) -> nx.DiGraph: + g = remove_null_nodes(gin) + g = reorder_node_labels(g) + return g + + +def remove_null_nodes(gin: nx.DiGraph) -> nx.DiGraph: + null_nodes_but_ending = get_null_nodes(gin)[:-1] + g = direct_predecessors_nodes_to_grandchildren(gin, null_nodes_but_ending) + g.remove_nodes_from(null_nodes_but_ending) + return g + + +def get_last_null_chain(gin, node): + grand_children = list(gin.adj[node]) + if len(grand_children) != 1: + return node + + grand_child = grand_children[0] + if is_null_node(gin, grand_child): + return get_last_null_chain(gin, grand_child) + + return grand_child + + +def direct_predecessors_nodes_to_grandchildren(gin, null_nodes_but_ending): + g = gin.copy() + null_nodes_pres = get_predecessors_of_nodes(gin, null_nodes_but_ending) + for null_node, pres in zip(null_nodes_but_ending, null_nodes_pres): + g.add_edges_from([(pre, + get_last_null_chain(gin, null_node), + g.edges[(pre, null_node)]) for pre in pres]) + return g + + +def reorder_node_labels(gin: nx.DiGraph) -> nx.DiGraph: + return nx.relabel_nodes(gin, {old: new for new, old in enumerate(sorted(gin.nodes))}) + + +def shift_node_labels(gin: nx.DiGraph, n: int) -> nx.DiGraph: + return nx.relabel_nodes(gin, {i: i + n for i in gin.nodes}) + + +def get_null_nodes(gin): return list(sorted(filter(partial(is_null_node, gin), gin.nodes))) + + +def get_predecessors(gin, node): return list(gin.predecessors(node)) + + +def get_predecessors_of_nodes(gin, nodes): return list(map(partial(get_predecessors, gin), nodes)) + + +def is_node_unreachable(gin: nx.DiGraph, n: int) -> bool: return gin.in_degree[n] == 0 + + +def is_null_node(gin: nx.DiGraph, n: int) -> bool: return gin.nodes[n]["data"] == [] + + +def compose(*graphs) -> nx.DiGraph: return reduce(lambda acc, x: nx.compose(acc, x), graphs) + + +def head_node(gin: nx.DiGraph) -> int: return min(gin.nodes) + + +def last_node(gin: nx.DiGraph) -> int: return max(gin.nodes) + + +def build_single_node_graph(data=None): + g = nx.DiGraph() + g.add_node(0, data=[data] if data else []) + return g + + +def concat_graphs(gin1: nx.DiGraph, gin2: nx.DiGraph): + gin2 = shift_node_labels(gin2, len(gin1) - 1) + + gin1_last = last_node(gin1) + gin2_head = head_node(gin2) + data = gin1.nodes[gin1_last]["data"] + gin2.nodes[gin2_head]["data"] + + g = compose(gin1, gin2) + g.nodes[gin1_last]["data"] = data + return g + + +def build_isolated_node_graph(to_isolate, body): + g = nx.DiGraph() + g.add_nodes_from([(0, {"data": []}), + (1, {"data": [to_isolate]}), + (2, {"data": [body]})]) + g.add_edges_from([(0, 1), (1, 2)]) + return g diff --git a/cfg_generator/src/graph/visual.py b/cfg_generator/src/graph/visual.py new file mode 100644 index 00000000..68e2cf14 --- /dev/null +++ b/cfg_generator/src/graph/visual.py @@ -0,0 +1,135 @@ +import html + +import graphviz as gv +import re +from cfg_generator.src.data_structures.graph.builder_interface import IDiGraphBuilder +from cfg_generator.src.antlr.rule_utils import extract_exact_text +from cfg_generator.src.graph.utils import head_node, last_node + +FONT_SIZE = "22" +PEN_WIDTH = "2" + + +def draw_CFG(graph, end_nodes, filename, token_stream=None, format="png", verbose=True, function_name=None, output_list=None): + if output_list is None: + output_list = [] # Initialize the output list if not provided + + if graph.nodes: + gr = gv.Digraph(comment=filename, format=format, node_attr={"shape": "none"}) + gr.node("start", style="filled", fillcolor="#aaffaa", shape="oval", fontsize=FONT_SIZE) + + # Create a dictionary to store the aggregated information for each basic node + output_dict = {} + + # Loop through each node in the graph + for node, data in graph.nodes.data(): + # Initialize or update the dictionary for the current node + if node not in output_dict: + output_dict[node] = { + "basic node id": node, # Store the node id + "text": [], # Store the text as a list + "node id": [], # Store the integer ids as a list + "type": "Unknown", + "previous node": [], # Store previous nodes (incoming edges) + "next node": [], + "function name": function_name # Store the function name + } + + # Check if 'value' exists in the data and is a non-empty list + if 'value' in data and isinstance(data['value'], list) and data['value']: + last_value = data['value'][-1] # Get the last value + # Extract the class name using type() and __name__ + output_dict[node]["type"] = type(last_value).__name__ # Get the class name without the memory address + else: + output_dict[node]["type"] = "Unknown" # If 'value' is missing or empty + + # Get block contents (stringified) using the appropriate method + block_contents = (stringify_block(data, token_stream) if verbose else stringify_block_lineno_only(data)) + + # Use regex to find integer ids and associated text from block contents + matches = re.findall(r'(\d+):\s*([^<]+)', block_contents) + + # Loop through the matches (integer id and text) + for integer_id, text in matches: + # Append the text and node id to the lists if not already present + if integer_id not in output_dict[node]["node id"]: + output_dict[node]["node id"].append(integer_id) + + if text.strip() not in output_dict[node]["text"]: + output_dict[node]["text"].append(text.strip()) + + # Assuming you're using the node for graph visualization as well + gr.node(str(node), label=build_node_template(node, block_contents)) + + gr.node("end", style="filled", fillcolor="#aaffaa", shape="oval", fontsize=FONT_SIZE) + for f, t, data in graph.edges.data(): + # Add the "next node" (successor) to the current node f + if t not in output_dict[f]["next node"]: + output_dict[f]["next node"].append(t) + + # Add the "previous node" (predecessor) to the target node t + if f not in output_dict[t]["previous node"]: + output_dict[t]["previous node"].append(f) + gr.edge(f"{str(f)}", f"{str(t)}", label=data["value"] if data else '', fontsize=FONT_SIZE, + penwidth=PEN_WIDTH) + + # Convert the dictionary to a list of dictionaries and append to the output_list + output_list.extend(output_dict.values()) + + gr.edge("start", str(head_node(graph)) if len(graph.nodes) > 0 else "end", penwidth=PEN_WIDTH) + + if end_nodes: + for end in end_nodes: + gr.edge(str(end[0]), "end", penwidth=PEN_WIDTH, label=end[1]) + else: + gr.edge(str(last_node(graph)), "end", penwidth=PEN_WIDTH) + + gr.render(f"{filename}-cfg.gv", view=False) + +def build_node_template(node_label, contents): + b_len = len(contents.splitlines()) + line_height = 40 + s = f"""< + + + + + + + + + + + +
{node_label + 1}
{contents}
+
>""" + return strip_lines(s) + + +def strip_lines(x: str): return "\n".join(line.strip() for line in x.splitlines()) + + +def node_content_to_html(node_contents): + delimiter = '
\n' + content_list_string = delimiter.join([html.escape(f"{l}: {content}") for l, content in node_contents]) + # print(content_list_string + delimiter) + return content_list_string + delimiter + + +def stringify_block(node_args, token_stream): + if node_args == {}: + return "" + else: + cs = [(rule.start.line, extract_exact_text(token_stream, rule)) for rule in node_args["value"]] + b = node_content_to_html(cs) + # print(b) + return b + + +def stringify_block_lineno_only(node_args): + data = node_args["value"] + left, right = data[0].start.line, data[-1].stop.line + if left == right: + return f"{left}" + + return f"{left}..{right}" diff --git a/cfg_generator/test_output/4/distributionForInstance/distributionForInstance-cfg.gv b/cfg_generator/test_output/4/distributionForInstance/distributionForInstance-cfg.gv new file mode 100644 index 00000000..740ae892 --- /dev/null +++ b/cfg_generator/test_output/4/distributionForInstance/distributionForInstance-cfg.gv @@ -0,0 +1,184 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\4\distributionForInstance\distributionForInstance +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 9 [label=< + + + + + + + + + + + +
10
32: c++;
+33: return result;
+
+
>] + 8 [label=< + + + + + + + + + + + +
9
29: result[1] = 1;
+
+
>] + 7 [label=< + + + + + + + + + + + +
8
26: result[1] = 1.0 / (1.0 + Math.exp(-z));
+27: result[0] = 1.0 - result[1];
+
+
>] + 6 [label=< + + + + + + + + + + + +
7
25: m_loss == LOGLOSS
+
+
>] + 5 [label=< + + + + + + + + + + + +
6
21: result[0] = 1;
+
+
>] + 4 [label=< + + + + + + + + + + + +
5
18: result[0] = 1.0 / (1.0 + Math.exp(z));
+19: result[1] = 1.0 - result[0];
+
+
>] + 3 [label=< + + + + + + + + + + + +
4
17: m_loss == LOGLOSS
+
+
>] + 2 [label=< + + + + + + + + + + + +
3
16: z <= 0
+
+
>] + 1 [label=< + + + + + + + + + + + +
2
8: double pred = z;
+9: double[] vals = new double[2];
+10: vals[0] = pred;
+11: vals[1] = Utils.missingValue();
+12: DenseInstance metaI = new DenseInstance(inst.weight(), vals);
+13: metaI.setDataset(m_fitLogisticStructure);
+14: return m_svmProbs.distributionForInstance(metaI);
+
+
>] + 0 [label=< + + + + + + + + + + + +
1
3: double[] result = new double[2];
+4: tokenizeInstance(inst, false);
+5: double wx = dotProd(m_inputVector);
+6: double z = (wx + m_bias);
+7: m_loss == HINGE && m_fitLogistic
+
+
>] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 8 -> 9 [fontsize=22 penwidth=2] + 7 -> 9 [fontsize=22 penwidth=2] + 6 -> 8 [label=false fontsize=22 penwidth=2] + 6 -> 7 [label=true fontsize=22 penwidth=2] + 5 -> 9 [fontsize=22 penwidth=2] + 4 -> 9 [fontsize=22 penwidth=2] + 3 -> 5 [label=false fontsize=22 penwidth=2] + 3 -> 4 [label=true fontsize=22 penwidth=2] + 2 -> 6 [label=false fontsize=22 penwidth=2] + 2 -> 3 [label=true fontsize=22 penwidth=2] + 0 -> 2 [label=false fontsize=22 penwidth=2] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 9 -> end [penwidth=2] + 1 -> end [penwidth=2] +} diff --git a/cfg_generator/test_output/4/distributionForInstance/distributionForInstance-cfg.gv.png b/cfg_generator/test_output/4/distributionForInstance/distributionForInstance-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..7baca1102da6c937fcf8aad34f903307db2c8cf2 GIT binary patch literal 145160 zcmd?RcTiO8*EQHixPpp-pb`WXl&l~*s30IHAW)?P(+f5fJhP$kPMPz0|q2Z z&NR7+O{R(6vm3a-dB3TtnW?wtkNLhiw+j0<-RGPq?6ucgdmsGeWhGCax_k)HbefaMA=b8r}xGHN^ zu`Hpne=vrmN$t5gI$jqNFtxjddK8!O;2+gbACD5CoQ z!MXUZ8{CPCh=|ZCcNE^52$K`pny~WRi8jWH4D|PJ*V=JR@YR<5_)R0Y-g`loZ`Ah% zQ>b6;qA6d$ict^~x zU90FK{1A2;u5cOu%|CM#;oW;MQmK!}h|UPD{S~_lhiID1SRT_EYCh|+7fe-VxN@VG zc$cwDOmWV?{lkLeK1QB4JYx`N=4siQE!;ZqK9xokZ`$9swnD-|cYE~hYOAQ%Q`e^g zu`pXqozHrtx)M9A@$~6(m>0f&wN+SjA+}@6(;O2;(jv4l*uh9A z=t6ZACf(RcxZG?f`;FUW&-Hwr%8eB><0@qLHt5;L42~*Slm&Kgrx;h6lr`Q!uBz=cT!V9DA2 z&0A%&yIfaCa|+=t{uFTxM#U*0wA#egv)AR|G;D*8IoqtJR%H9z&FE*WiT53%J7<-I zsO~HiZa2 zrLD+Y3@XRtFkXAnUc#8(aUQ(MstY=n(uo0q_;BwCVcS=~?QU;h>1*|H94NAg-<)N_ z?YfFg2u7dSYweAbXd3Tj|P2Gk7mjQqnp0>e(166D z*_)eVXOYgcc)q(BJ~4){`rUaq(Vb@nl&>qL&- z0WG}ao?Ldk$MSs1IBD^1{W^DyVEh$Po86VkMy{x)_GFoZ;T>+)<6Di$-9|dN7ae7M z7kw|zD67QfSC#692TWJ6@J4R{M-?B24}l0|WIuA6uoP0ua`-j5c-&fQPFC4Q%rErM z*c(PskEbFGi-kP!9r&$3Ub68b!u#L3e7N?$b+m5t$I$L0AMQrF&ql|;6Ks6Dw4ISd z>GfrEv%U^rSA=)26C6J0L=ExiciV=DFedM%ZVfB)?3+ScnPHLmg_V;0z>9uz0=u8n z%{35AsLkKJXQG{Z$$NCpIlT`hTtpQ&)Zn#+_S*Wz;dyTV>_-j)&ZfWE3MGmgq2s9B zZvVkVL+ccAZZg?h+O<9rFjAl;a)(cw$(BzAlC*wnP|7NE=(@5q zyxH`z)qw6v&J$I`^u(NuJIZZdeUfw;Zu4cOJ%l(@PMIy*7+|F1+JZM6Fy3D7dm)QE zqaG-oy*;wpjfMr@CgkYwY3v)aBFjP7zcoaQfAoW?xr`nIL!hlYj=1V_xJ*-}lyQP9 zt-(#>-q^jRDzaLa*XW0+s+|}oujFkOei1BF@$Pk3X=1$xHNLMiDBh6GE@rl7=gxL3 zs}8#xuB~J0oV;?j+@3Z@?=YU!2b>Q}dF+ZQMZeM0fbFP#I9e{t`I2K+bbrRZ+isP% z77N8|*}~$YHwP7`Vpi(M<`+8N)#0%zdCFnj_`}KXjF_HXDhlW*^L$99S z=~am%2r8|A@48n%*kf`_b%k%Fp*8xo|C>#<~D~0(!6im(1kQi#|q=M zTBxcmxY4UWeg@+2Ee|_}usspfWdy{C4Vj05&lJv()lNA?)1|pgh&`k$n@$f%lo7x- z4yRNiUDkNz%-tA5YEE*PHjq~%5Nl5kH=->6x?9R<@IDG|&0`BM4605~6+5n8!btna@c1*b{#5_k2m;h&oI= zx+-PtGg)mb&u->oc(JOb*Vn1ga|5_HWR63~xkM87cY-Gnh--(0rZgtntDYnHCly4qxlP0sLNWTg76;*NXNQOcqSsb8SXzU)vBtviN$C*2q#@ z@xRbcICC^i>egjz$*y1wiKyCcJ-bX?x)<{{KH>u#y>ECjix{!+Z)Z65LioT=cml+a zYI&OD*iU~|O`C_>62}l%YyQQTl|~NHnTasi-=A}iAd%ZU5T7&_G;PHLEXDD$B0E3u zt3Ue4tK@O7$!brpT0Q%$?)qc*3PrX$)q@h<$rHw@tyNyDd-T3N0@`kwn7sa=!nW=B zsFf(dtG1qyE@29fHVyruafslNg=3z%P+-w7`!gC0nm${6ZC|D>=EIkyRsCSie5O-I^Jz2XuhmQj?!_tfIaPun)X=wW@rwotWB zOGNi|$Fh782p%Ol`DxFa0FfNw^#)@tgxy_DZ-J`v$Zz?y-a>-f`ZZ8R1(0rxYTU^d zUg!^RR2jByWV11b<+*5ma({!|794wft)WV-XhCuyQ3Kts)`eFjA3nu9?5w|!>NJP5 zZnZr2E7E=X!(#R>W^ura4o*9vip9-htWbMF(MX%lr;@*7Pk?f%x$%XdQK-)K_xDe= zL<@Qhugzh~*u$lN(J*;(>|$QewN~MNkceukJ-xJ_i%uIKunLC9u>ytZ-%ZhSPPj(Y zuFRm?STP>EgST8p#d5CudiAcI-M@40|L_SP;NkdzV)q@$N`L^P*YK;?Z0h`*2{1ZU zhumtn(&@)lZ}?we`b|RwwSSCotc7u`Nk9aJ{&0s@%i;&vxFyj)tt+*CZgy7b1+1_-uU_YM?bugqBadgu*! z3{17eUfE|B$x4i2{(=NLi&z^;72TWpUTeryh5ni0<-UHKE7)JK<*(}+Q-~+F0~NcD zQFGdx)9Ofh5+Ha6fk^85RI>lYd#xh7qh}YLt?LFjDm;eVat1b%ENtp7G3Ow+UAHJ3 ztZ==}@lsyT2U?3?cmcYS9xg%R!a(t24t_fak6Xm!j>T_Q8zWcyl2T~Mof6$$pATHP zB2qjW6p7lzWubH`oNWeeV4>F!c1Yk+2M34vtwG~BuhA`*D%W3i*?R!rA=~9gi}#8a z>b%y+X`C=6yZVt<{UtM-;~^n}=MacTU-oH>uDvrTi-v{0bRck`(o&k{+w&Zejr)@zoho8~s|?G^mum7YvByI#E{Mj@EDR|m|YEj2A|CK|On z6~cp`{v#^5(w@Ol2{|EHKu;WXWfQV|QG}JpNZna#P{V~i*;t7#*jh#7xxOeo{ zzBH%Giu2g$)37Wx><~4dou1~K`(doL8AZ}68!wzFOYHe#Q3h*Og~ttG@Izt9=)Jf; zvm7nA$#B)Gahk=qf|Lk^{~r^G zsq80*+DG|vpWWvt?puyk4-oZx4ixS954pt+cI;+Mr7S$LXto&t9TdGc+!v|o{s=@h zes{Glm?k=M=m^4l@L*o0z7Lf~osedfN^J#+#wBA>cH@DZ}_PK(3f z7CeVtASb$Kuc0xpxUrj^m9>D}z^N*cVvT@>);$)UDj5%s_N-kSPoZ@h^Ji*_;a^?r zkc+=-7V(=B;eGDmJ|ZFLeV0JeR;+hxz@^rSM{2J2OSFqTh7K9Mh-?2*hM2B6=k=E7Cn2graIe@5!SP;PRm^f z800(*=K@OmvDkJ4*0EjJU?Uz5f$g2^5OMPMY+=& zw1h7o0I>BpL7-~{XH7)KdYc1~>Gi>4)P6T?Jh=<0K9KrA;UY$Rkht}7)ETcs=ZJnyscBtPWHB)I?l=OmH+e7y_{@ur6fNtT6Iv8y zI4-!wfP-7aeUTY*1Hfm~uHefCYQc#(;Ix}QzXB*>7mMsHBu8qyHr=lK`3a=+w#>mU z^s)x#pyk+S*k`4MzXWPi^6>o+Y#zY5mX<@jgofdCe{~K|7xplK;t7PK?|a$QB$y)I ziwEXUb-aPxu2$ajhl6Se#23`TNS9EoI#m^o&4A6i1qWNa+RJVxInr~KM2AY$)1AO^ zzM%e#b@_cBh17vts5be!AL%eHQp5*KyZ`ck-~E9Bf`mzio$CsriQFj6iS^u`0YRJzNTve=CXDA_1i0-C;4l`<`7B+B@a7-k z{bT}XKmR{nWF0IMjN<<}q`b8`FjH2N;3zCC%*)G5OM5X?=0I?i#bFjmdH3Vv-UIXg zg0#H6neSBw$_ygQmGxhL-vaQ^*8XD|8GsBxA=<}FJ@K% zTo8WX4(|I%D~#dNhDd^)EJh5Yt^zX)M!mn;uKSe%Ef^s~pZ`l33LO8dqOo7Zn>TOB zYGHM0o!-~Dt~T>BL8L=SmG~h3isl8`7!%7O!gGL z`9KjH<|=~oowBkru#GR0m;(s<|8;`=Z-nvx8qDCoJ#bED2YdU@o*t{glH1|ZLDkKt zMYPkSHEAzDe6vN&*qgAc{nn5gz}@noa<`8HrRX>}l^ksv0&cOWWN!YE6j6|ue~&#K z9uYyH!B=?9|Lpv6=^F$p7zgR2rmoT8jt2*I?_LROa zJ{7@9b-+d@B*9&L^ym?I)oyNX`(?TLP=~u&#CMU20&QdWgW8IF*5aLj zfI!TbJ`TTmw}hl5eav9#Cwi z+njb&P3v<#kr5GZ$TW4S5q#YHlEQm;da%YI)~b>ajr%wtEd#YZ>_M)&Fk+ewb;hTlRXd<6LaJ(N7{bh{*+ByJS>^+*{ran z{ipdIIm>pTrx#xQD1s_#e}=2&Au;vk>iy`c+9<3DR8dm{ymVq$`+hyF9txI9in z=_y~oP8{an{e?zujs;M%YxWxMJ!b3x&u6bR>TybGX=%uH*bOj)O&cFGRC5TK&CV(d zeh;UeBlhel8Q=8yr^gywo(=*Lt*edwZK*j(^&|u(()NNy(S2ea0Rw{0{Su=7EWY#X^2< zWIZs6{a%0==FgSy-o2|zGP>Z(vBox=&?<}_ybp#DC-Wq(80r!T-6bf9*xuX~8t(0- zD%25lod474-PP6g@Zm!(itg_2jm@2)m6etD_I7rXq_M1$l9I-iVNbF4@f8z28=K{p zSiz(lK|w)%g4D&u#ppXyHa0deV`##AZJ%RPS?Y9#CQ8&Ho_O5t?Ch}QwvWgcUZ5S) zGcw9qXL{T>irhE7EW%^s;V$9$7Tauar>(JMr;)MFhf3>JNh3*8K>@e#-@TjmDCv+2 zO53MTpSF3_o&D_BHc7T6bi(_{(vg2)7(Zs^H(xt+S{WvH%$Psq=6uTEiRP7N(Vbe7 zk$H*o3L#hbph-_Mw_Rg0K_?6;{l~~iC$-+a^^REV1NOweKSi6u?n1@{+d`%EO6x6eQQo_lhrHzU(xd71`7!)|+aI8lqDN1BzI0 zt~=|PY%I}Yv?>=IKmGeXnE2v}7TclYTS z=XIl&7`125dItxowN5y#PBkB+Wo8a@%`7P^hq9=fn+ag*J|vyydt{aPfW6Gj9F>>_ zcH#PJ92+Hnih8-D1;knBbdFkn%1*3}pAL3Am)B*`1VeN?J*>Q90#mWtGTq)6BD5mq zsQ2W_laMDCl*1%MU4Q@nZEydsTl4CrFb(4B5ruztBtOFfa@GR0vuPB~zu$JLNJ!8F zJf-(Nvgpt`yuP`HIlG=`i|k&saY23{y{a8NaJkylBPVL-D!p$?O3LTYpTAYgq;|~p z(n0Ol7n)Yn6TRnhS$s|Q09+8TRh^-#JZ1A(B2#Q>^&-OdK>X^OI3P6_stXDWCk-d3 z&lif(V?&AT?$0NL>8C@pL$+3VQE4f^8;|wIyT5)PsZ-~K7hU9tM*(SqtA=1{U!5R1 zb?Q_@W22d=X=0k&TAL&ad>M4ri^bQ&gU;hYIy?P6D|}b~qubu7*q8Q0_#Fu$3x5EzuFOnVWV<)r3sS~-h~i4QUlh&75W7jW``_{5`77hI^|EPH5k z@lFOZwLs#vW@Mv3GYQKyuql-?*#PC@YouZ=((ib$4t z()d;3ACHUJ`)&X2?LC3-{&I$3IIX*upf ze*Ey^LjvD5F3QqWxbiG+?b}Eosi#PO;%s(RRTbn#q#O6wZ8x%{6gwDmUx(K(i;!$=Y&UM)Xcbz0i~+~}x;UX=P9>pHWc~H#oxZ&EDw2_JAF&5v%6cu$3Wj8HMx#Uq@47_c#fs5Cfk)1kgjzE zq-MLt#s+8}L^y#s5kt8wA+~PK+SV*hO-=b=My{?$7`!LCU2aQEA1mwRb@TGq%1UAE zw_y@3dmNT%XnkXB#-?d@cGe_S0QvP&-uYdZQ(z+{w==$d`zC|EG?Nvu5RHAHf?BYOWZ(UwFOgGL760c?=t!#~ zg6gYMN-EM9WI96ZD}ZX>cSBEF^cP@5#G_w0!l_k#+RSchPk4kxNpEG%+#CVea2=pmBme2B8E0Cr~p@iFwC?F>I!a?94ggD$0{WM-lg49oWngi6YF|FAH@zr6=c3 zECwAzP&54gNwa?+;ArgrzhRPI*8!gA;j#BS=!#;RQpF=c3^>M`?>WJC2L2Zt8JK;o ztGgT6SE)%`q7ri<{DjH~;D}}%U#C^j_wV0}ii#4bz$_cyuQ7Qi0PCZ0TPOo#?vOnN z^Zw?PT4%s$UQ>Vaq!}(1$*OkV>HQH?6O)p;?DA72BpDeQPV>D_6&3S=F3#m3MIzB> z);08@X@^kygFQtSbQW>XDeW=i1t&sW@%btpWSPHPE*06?mJo>azP(PRK;Rob-nvF# z&-pDUCtlRclQ^NM$g$?t2`D$UF|$Bf7X$;iUSFnP5B2vGx(`hr0V93%s2-SH2`u2C zB(d05_e~a-Xc3R?=~x4a6tM+D+CcC7jk@2s@7~?p?m@OR%0q(o5eh2&^5rVWBZ=2Q z+?lqYe;Yv6&_z1`8o*5%ZeXf*Fk}yk_D<77@h-KjOrUOqm$Xqsf1$rHL=@-DJpfzf z-y{x96gad>mU?((Tb#>OR7IeeXVC0;``^F0kk+W=WSSf2;f2ML52+8R2bAZ|0wf7S zWm`(*kOvTKS7_C94=Muv;ePrdEqq@A4ke|F`rZ{y!*5PsIVt*Q3ApZFnZw+eEcBVV z@2ktJcpl5aPqL|kIuVYXFh}bW*ZzJJVF!Ss_vN>n`bn;<)H+-(o=?*Z#VN4^Lv%t7 z)&wkF0Z=nO*=mIAD70e*V8b*#&P)O^9pJm3=Rh}y8asd=<4Yw6g+gJE}|8{nM)JlM3RoLvT ztEK?m$LSd#(hd)7V?%>$`PZfU#xoHbmTF+P24A?FTkR87=`*{MsX2UkDC7ZZ`wvPD zsr?@0D12t7;(DYg7|7G{geE!8Kp@Q@=Hu%Cf*|V&a?FgYk^w%!QA#?1y$VWjVPOFj zL}g`VQ4x>t-|<}GGYXoTn(FHPy}iALE`a4gWC2>&7Jxy6Ok~*kIe)^JE9xRmc<_A);-XUzeftnXtX+dgXfL z?w;#?#};|mJ!p~pvLE&ci6pdPciGArZnm29TY9>Bk-3_J7cB=1i$V&lEoh6TfHM0jU;PbqCD4AZns;^(urTi1FDt9t9m8Q7_ysCMxM1NQIsp z9hA$X$kSkkJdV1P>^3s&__h3iOO`>J&CSh4hHekbV_qiRg*{;0^r_9I5HklF#r`R( zCDc`u3(I+EP}pV)3J9oVYw{bn#LU03jY$UNgGgKVxOnoCGiQDehX>@{r_(lD_gAsl z6PI3?nSl#GE-fPiHMxQKN?+RRJA`HVv2Uh(?|#e7BycX*c}2fJK4(R!9!xJA{Rp7s zI74qfR90BWR8&}~<+Zn7S%{?fg*v!joMrPBVb_i)ybfweI~uA7H*emYM#b$q0T%`; z$PPrJ2zl&nXR+qdeQO~bDtGf*TEJ3m=heGm67=!BBb;ps^R}7r9;h}!tDALd>R?+3 z_noAM`;X+<6F8+s&5f_te%~f&`F<7f78P?~Ofsh#vv&3Lh++rr+HM$^QmWxWUSkqT*__MX1Bfcbuo!E zclX$t_{hpP?*|F#TWBBgNHf0TY6aY;Q1?%pqjtJ}uWy(XdvBi@t>*joYs=y-`;1(xcHoG6>*39v%bfGji1= z-v^8WcBt}HRJeDgD|?t{*Oil?&zmC}ubFjcf}0^0snN8-+b)0H?8S@H@nFG3hFrUf z;W$ECC3^rujA!BMPN!0_M*9Y=&*h?{eC?>dxk!(!X~NBLK=%18W=c5sqL&6(nvx=0^AY&JS{b~zVTBK==8oIv1sYEpidr| zKlSD7SA!pKP6O2%8bFmW7&d>pO~_4Ps?qyS->LP09hwOp2!n!Wv}hU|y2 z)W)}5CkeudMH{t!*KO-VUD98DTusH*q%9(Z?%M+n&^G%)hW(%Yt-K=!OoHAQn&81# zprD|D?ta4j)SUsR26lU=crTc1kiTkvVxGcM5Hy0e_VBpJM}7Z~(#eo01UPQ7 zvXb&EeS-9ImVP2{@3hz89)z)@zde2r>$HDY4IA5YIq2JZl*i&K-7if%7Pm`*uM7F)a1|!yk3OLLQsCL*Cv)`w{RDq)FFn0141g(aq=Ab@N z1t{EaZ(|R%LeW2FCMGv;-I`hWId%kIzO|GY9KVs4Br|o!?yD3CU+n9)wD?#De)hJl z*rBu1#Na3<73XK~P%L=bOPeV%NJKv?FljT4)ao`Yw9Zu%SSaXtKnxZ8HN=MrOI-*; zAJJ1DXu4jKl|JM6)AXdjkg8B@k=ri0cVL@>n&9vBq+R?kX-WZZc#HCKb8~Yn(LeMA zC4hn?0)CP`9V8kaS4=RCV3`3iJy3spH6+xt>cVUUbE0Ut%GZyuT3J|}rvJLHJTQW^ zT28!JDUU^SLmzwX_ME-fEoW+A z2mc8@D+RDmrQ$cjk(ng>tk)aS;^Zx#@L}1*^-xf1&Tftx% z7FK?O76J60P5?>Wa#zDjf5XYes>dC}rc4*=IwW4`BpX7eO{guxU)8ZQc$gJ`4cB6@@fW;7?|u-b9AiVXD6pYo4R!64CqBT2VK|RVsG~m)LU$*GflA&DOQtt6hSKb ze_Gc*=v#w1{`MGgpKW*u~ z)gNc>CN%N1C%mRGW3@j|A1>*3rk%J1{Zs0s>=H$qqpW0dhhyJ!^2oyO+RxJO+trv} zKl?~w_WIE+i*`EyDlg6WVVwk>svC_FtfF*YYrR;Hp`N`euZM*?RoPeIe!iVMUJd^o z9`e_S33cDYpP*mQ z*(1&L(i`e5iw71q8oIsB*&|tKLsZM)aWVOz!*k!;D%E8FLC5U&cG6zpER6t^cT|Th z8w<-vM@L_?=A3Loowz$;ocBzKR_^-wTRXBO9WJ>q?^Ta46ME3~($g>X;c--?Z*)07 zwXsr>8Ws5edQN_;gd4o#-eN1A4I3B$6{z53v;F(l{pS)5%@EW$E$~9L0l$FyMCDn# zx|RVAuMm`G3JZ>>^4B zj*Y!3uDP0Rcad{5^YfayA50(JiE>}5XX+w%Dj$OA=Dr-%*F3hoIWjU*U48E*k8;bT zZPv5A=P!ntWJZBFdAD;Obao&<_VxBYDMii=+q|K;$R?-70-QpWn{tGA$m^VpqL+5tb`F zn^-2G70tqSQn3Sn^5{!jRiy%5&YKK@2|Z%1lU1W{t{i=N@A~=rQl85}o)g#TqWs#W zk>oN-mQ)U_F!I93G)vR_8>puf zW+}0)wRO=}PFvGL|4deXVUGlmW=T?t4Zq14_DK9gy}`|kE6zfutMWGu@}7~N6x(PP zGJAA`dj91xBFDwy*h--!=5ziMNv4Yw0XOz=|D5zm*A4h}r%s&HEtQ{Af+5u1t;uqJ zbqmNu=cUF^g?uQskBi-1cBQ;l!>n6GBS9ccB?-@PA`q-!b{3JyA}>O;b#!!iB6XsFbQ|SQnwjVKoyu$; zS$DPI8CY8@*miVxAB6XJ_TDrb*_99Zi$4hG77>Zd{}2@w6(jsuP7aJ+ik7CPZ(ljJ z_^4ahuNgCOad8>tySTe+dR#ftLuAQU0 zp4Js%!+OHB!)|rD;_Th@3l3LI+}iMG=btOBLfr)MF>pVbBM=mwAGTi?p1OYO>+|h2 zaef{ArAF8u9WzbOzKylcORv1$4np7H*?K-e3G5~+vlhDBccO5+b=&7ry$X;CJ8TB(;vl2IAS>Mq0k;<&qh9p006N9)Iy# zgFA-ypYn_D47XnD9GRInDSg9M2wV%XHcnH$zioAC@AB}J4OyOZnNIMN#!Nux=DARi zJ~P_75cM@2b$eueE|aZO^WR5W0Q)wpn8xotNecvfN2m_si1MtVeQs z7^#PcN4dL{Tx!v7d;D z2%1SJVe8{?xEQzAv~PsLW^|>edI!p+IE3eab?NHu{gnS9=6ho~2qbZo50|86u^<`o zS7bBq*#QlSKrmIhvp``yeldWr*WVg_Bv{`vL!iHEfn0k3Y-JRcL@p8^ zU&&(TL3dcuj|<;TRKLKS(eA!tOpS><8pjr|? zi~RDMT)F+|*XV$rS6VgDWB`o|79ZX3Lx@J316Q{n?TZF07C&yONm8scH?%b7ku07E`>tEi^&!N5hT;7NGeqt#;=U0?~Q? zsP6ve<6MOLWuakX#0Oqg|3A_Jz@hje{ILJ)?GFbW7rhI%|ZQ zn|#g@%-r0C&}XcUP&mz)1gqde=rzgUw|_=|_>nX%2=Vdt0{H&@OLoTZ*vo3551E2& zIfpm*4^eq%`&bM|275V3p>vSB6!Al#!6lBxwx*ay-~{w;L_MB$@kH-Ecx_;(4RXEl!enV=_=jU<#+Y9jb<78-) zijIyIPqg2gH|`>+yFHp=!WQKa5_eafg)Whcz*AJ2N5CjFEMZt zX9%6|Q-pn6H%@ryQPUNAV)7e&U0q#Y)qGKhO(!WKQBY|T1eT5kPjr`QGyBwZTM|Uz z_^)`=ilL>Y+}Z22Av^9>!0#E$(e5AWCm;pydLrXg-+^nDrvJj!^wdcob$qDQPoM?V zyQvJ{LPO74Z03A7Zlyg(_@e;4`21G%K$(Ntc80_g#;~3_8Y-%#Eq7N(Es9mw`{D98 zzv2Yx`W&C$Aa}?GcZ(uaF;zCaa?12QO(reB?avwemc7tUm(s3d?Ok2T3caKP@lU!~ z$%y%4Wi1${O}L>)B{b9kotagzqZWdW_tK^?<+}@v-4OsBj$CgH5|2~gbI~+pvMhEp zHDwN$zH#2az8;#E__?^ktS&@18|C+{*^Au08-6>z%ivBkbi;n zY3J6b275X?m3~{vRA@s7bGxf7O8QBTDNpo|QEOK{(=gKU@$vKvS)_(WMvQ3Up_tf- zuV)4UpK}z1na=wMPQp1B90Q~_CgnMfwPf3AH=|A{`=v$2#i=x|Y6Zs>{GK&xN&DvZ z7+>@GF(WX!lJr2an~p9|Z5acBktS%TmZvqRJ0Kwr)B{_kMpeSifDyyS~O~^it+qEY^kb|j5|~$ zbZNMV?Zw-WyzhwaDU+91+~gO$r57@*;c&j7L-}e%H(ts}2U8m(i_Y|Vk$~=N;){rh ztg^Pq9~SzheLt-Jqm6VS_K5K=|HI~Qql64M_2+#9UbJR^SYPHPBqf~|`hT^KBUWan zr>*&@!LkTv|7uQp(r4nIkf#);ai(`Cc%y6Nqmjp_2m-_1`QRZ%2$qL%QTK{6s=MYU zCezvFn1)hjihvhlFQK9R{QW~IfKUnru!TN^Xi_SHE%z$W5l~E>S6+5@H#g5jBE3d4 zpzWGm{68O$1T6xML1miR(v+`E(W_hHU-R?1+?219@wu#ApMmCa8L}hLTTVFS9Rvgg zMK^2C0tP-~Rhdzrx((ptwU%)cr!x= z)%ktPol?a81}0XtX#rHvir%UHcKm}=|94a`;hWx<|1)od|GoR_5NHYigD^dQIPPa3 z|E2jSeG*PN6<1Fx%d=A0m1>4(Keu67u*@3(P2nLjYg4KT(=6f&rNHW={~5TqIz^C# zTnyhb__t?CN#9B_hcm0T%BHUVqST?je3@C*Z*mCWYbi}Jl_Il3`k&)R>q6)j7Z$SY z=>rCiqMGvi^YrVgJa#}1L;izFhg*~97Q5tyfrW%4|MI>b?orru5uyli5sG{H@<>ik zxl!}y$;QZ@o}Nf2%6fzE+1auUpIIVpoJcf>Ygf128QS~$)Mg%--X|Ys1C9Ud9l55C zQdaURR6g$IeL8x1|I{CKZeCP}atG8R8A7M$=grN{S>3i-7$lPN<~<_z&vjITb!PE- z)T{DSixI$_QsX_9?0f@6N4<_vQ#8TA>zF4HV~a=6CLqlXK0 zGul~bcz77I?)u2f4D|lRbL`9K6W9yNrr}f1F8-Ti`T_$3KRssL<2puIu%T=uUh4Xo zZ7GCajqZ}OP(Dx5z(RW7kY%fEF6oOkR=LQ>j2G4Jp^j3mda_`2nb47W1c}9ke$3Ra{vF)UE>_6H4gU|EczWp&O zm8>vo&3E1(${<_rBEr#bmBXEM0KB)O9y8n#5{j|P_-OeWOB*Bs%tl#NE4-39RLZ$h z`yBjUT@)^0YpdWP3>j+}nXXAAE77=Sw70i68?d~*tk%dvlG@=i{Wk&3?)9uzv<5sK zSY7S?mh|*#C>fU{|b^o13`Z!Vr{_E>bqWCxz=IN?(RJvLXYDxMB)!E;|O zpwfO%CCHmVQyR3z!UJg|H9lY`W`R1FZ|_pop&>r*d;xH)`uV>h-XQk+@r4T);6p>e zzEO*E$qJAOPpmxkgT%+SC5;pgY)1 z@3g(Z!>=&ka<4uKSG!tUbCMDJ{up)lQM$+kOg;cX`K^Yh$Mk6+%qx~Ig= z%bRgb$O)tQn-MNBk-bN_Fv+)Kn6p zj4kMY1$|}B7qdL9R;Y=yt~Oz%fLiG!^f!ZSvsL-j7V>$Er+hx9arJJ|GgiP9?Ht}~ zvCWorr(Q#c&dNfIQ9gNe1^^f|H_dCcUWjZ={;iBQgIx~iWn^MfKAHB7zQwXwV=}bA zcAw>$clkJq(}oxW`*y{|Br?8@Tfd}KX*gKW&lc(7Gg;2N7QHicgJD*Vx_vQm-l)$n zC74BLdD(gQ9ZR;gKy1H>`IpO`O9TOJ_mfz6f1L8Pron^e87f%{$L@vD3ahKPLW|+s zw+3>8nI|`m2u~n&%I5D&Py*#vQNMKJo8D*GRry8k@C4Hhe6-DK><@SFtaNnZn~gL+ zt*MGS!XmFSGPx&h1bCs!h^xG$5$T)6w)y<6riKqm9QyL&3uRm|cl z8PIBSkI6u{d>SzGQ0b5Y8h0n2F~_Ln_^>@*sGLw;N(m5WfU>kvzFO;-(fL38bbBWz zzDlSX$4r2J`S$2dy!*-{3%#pke<+g#sL$m04Ys%2?rtsz>Y-%b=RUBzCd^LDol?1rnSf$(akS?y(b8&rtKv=9I&+MYyHomuC6Wj|#9%RkhX<|h(yx-*rhonv z-wynHsWY>U;SM-Zk;k~Hq<7a8Y&&~%xed}_&t|zE`}ZG&E_w^k3_Q4hD0XkeU^6;nO@|- z9Moc?1LiBq@uO$_^yxcvVhK9*96w;|w&U~XiO@7=!d*6mxp(zT3XRDBs7HB(h1nQ{ zg@qq#L0GP02#+|sZ{~K)2stn5LYwkSn^o9gvx|%IadF)e$IQ4Mz>MiW{g30Ckh1DA z6=l3~_a;9=rLAXQj;iplk#JPJ&$$o19WM+oemO5KEIeS&Q!jeOvE?7P{JsSOW+G9@ zrH*SE9U6S0%Kw)F^`hwiQJ?B=1?w)ic{u@PymxiPUSJ)WSOS(h5{a5yZ!ph)oUy;# zW+nf1ob{pOkiiy!d|uhKI->zEZT;gk?^`LLauS$NTyF-;95UWg3p%p8DYH^s2z?UG zlgy!%XaBo;^10uGbZdbmG~qAhFfgcO+;yW2l``1dUeDivNI!YvD|EFk*%jgWDpqx)7hQ{N_y}0f08Tbn;+rZQ2HroRSf+rU8FBR0+mjH-Tfo{X-~!p$pfNs{@E^2b>G{QQ)e zmYoODt1resku;fPJz@+aIzzp*v*&sy7w(%z27r~5s&hL;oB_yU_tUsgDM$y6V8FV& zWxGC|t5C0WEqogTF1|HaxLrtKpve!faACKN{W-1LiuVvffsfOHF64=Ntepd1S2cRI zIdAjVw{PV#r`wzPYn<;yJr;clmEArICG+@&Ep$BPIbp9@h)HkLd;cz53T)fC^`e3T zliLppSu**qRG78JfHSYF8L-6)Q{TaU> zM)_HQ_$*?{I(g4n%Sp-W)U&#wh0LeM`WLzCpXg%@%B?fx>E6xH^GwE_lG;q1oPe^F z=ld0yy7g4azkxX#-`H?0RP?EV-l+oklR~xnyyMHx;K0=zltE*7eh>R&kuuXR=CJxT z=%c2vEV3LDIOi|U(7&XUTw1C|vqRt;c~GQTa~6WM40ZR`XUQj#jt&lnF^`0yN|YBZ zg)>u~UrB7*!^~nZFj=!_uK|4rwE-@@GJMB1a~SfrZE3;nHIaA@l*bK*RJnNg+zc;Z z84Q{t;B^ld1f&wZ*bDrHg93{*mw-SS6gK;DE<)%1srhXUban5EoAVGlxuM5BCO^4B zh2{)&!;CL)653{nk9TUw0>7G@n>&5dXJDafqu&gkNl9Wn-F@7r2A;%IV$la|+0quc z5+s4#YPLFa`g9aQ$!C6^oa3hmpaFj-Tn`qMu>;CA-zANW&i-yLnSOb11bV$y!Z3h4 zAneqPF$>evf3Pbf?ru?MAs(O)wVOtbH3FKb431YbjIC}Fo`;$bi1Yki&;q_!LpTeU zdJFdURJr3Xc8;3C#cXGxD)@r|03E3vrNATKyg3&5~r!4QxP7!oQ?$s{%I z%Lke#s*;(EI7Z0j!x}s<`bFRn0}x*>#>U3d?T!$!QOK}TWZ1LaOnt^`R6M{@KL0&t zCg<&^$0^XZa3Y&fViC~Nguj@$f8;)c&V?-KPd6~|t@&~ZlmzZK5MUhhts1BXT3J~E zsQhp2y?I#8>)SrO%-d{{G8QXCG9?W(+g3%YZZLReg?)$p0;k?f4x8R$nObYUaH@8`paowrv_Z1y1}F|1t5lPP1%*&e)Q5*o5@!_~_4S*xkBuA2uf{^f{1ZbVfwy}XWUWxV1+joV<;o|k z@M$S_=^q$1nf1)-?a}gh2nhm=Fwq#_@W2Ao_{izJuIY{4iVS*5Y+j7jFIBfaYl0S^ zh_8T(2$2d8+_R?Z$F=#^*49I#V_8{Q3ah@9l*HL|92=GO=nujw6bp0LL_-2h!|Thz z&M`eM>=TTD^GZije4&oEHx&WFNi2y6BxHPZOk(NzjEs!9I7A-U5M$%)W=mujQ4Y0u z%L#jXnP6v2_>JfS1YaTg@bifGW23`3tnJpri*=8>`|+LT@yb4hZ=Dof>{QNVwpkB< z`J#dSM4Yu|AtT1Fx5cQoBF0i{7eZ^Wk)HaRYE?@}N;;<2>K?>6nU@zszBY`o>IJ9mDS$3?C~u5R6ZXv3uLJZW99ZKH+x-3%_J zFFqYRh^S_9_;WGg4bQS%#rf>iRDVj?eZ}!dxceb7v+P=>sR4>G&YS_u1u<|@(IVjW z?MWAp!@8j2v2=L#fxyWjx;Gr|p&B*xJ$}+|m|)V$)BR&Aij* zEwK9^&M=BXN^!hniwx+4=y|i1UIsAYFTU%FS*K%BYZxiwNa~Xa&_SyH(*#K|pOP4J>{6kInJUpk;{iLnn{Oj8859JkrWo+P{*gzSO zg&&!fq|KM##6VH!p;YsiY`y0P?`IVk7Ha)K-s-RS$ik6ryuVY?5;FCMfZ_+E=<_l!SiG~w%9WXHpK*}Vsw`Q7G&>wDp~ z{an@@rQl9bq8GWt9UVQga>vEg*4{ijU!3dQ@HdQb$r+Kme!DEoyF!ZmF0OY)t~&Pc za{xd5B_os2H+2?cB7w1S$sCtV*n8SxGVth~K%&zglu;;DJbMfvSn>;LrD zk&VM@Ia~HJk8aV$PxAhTKO67+7R03P&D2ZL`q8}QB5RtIHgJi94|3{Vl!6ugAeb-L zJR#Bv2rFTHY}mUzzg9RALSGhnK>`5u#&>UXPZu@3MYLPi-LJNPfBjK8#KRfc-J@Md zm%gnuwPFHxK#G_dGatEKEha$dq4?&NdF6pp%^PAa`s#f%Hh_YmFBK5j`W-~1oql=t z@ji}&vwVGgHVh{Gop!wBdG6^&^w6U4#o^s`O%SkyOcI?(j%!gCJXWWSc_J#7z;NaG>0) zZe16y%-VBL+vR@p$BzEctv+$PtP1ZZEjHcWTHa$;qT}!HzvcVBQNLY3BTjopiC8In zehsyo>TxR=I}*{>^X$@?R6)6Jevyafy|Mi&f3SMx-wOZA-Qm+BQ#W$t??=6@wh7%U z6_Xbk#g>WA+of|#)F(z-ZOhb!nw4{J zNXg1pe)$r(8DSG4!HAMH0pAN_`Hb#ImB6qFZ@KRm6Uh&tkWU28S?5L=K2OtIuDyQr zerJR9-4D7Mh6C3O4yD&#>RtE4-QB&XfB3YRZ?8+^M(M=+_AW_VvQC;?TK0fCLQ3IU zTkjv0jL4~f_~5}3e*PDzYe-QO)y^ssYb~Gb%X36aQ~gD{5l($}6V$+el$l*iLANEJ z6}k&RKW(U80N2dM#^%I{;IyA#E-f?8)f$$WMpKZl;&vBkaJS2^Ur}VR-|pC2#^Du* z+I%%s`;ZE*tElX2uTZQ5gQ$F=_=ZlC_{yhAhfB_iJw3BHRwC^5^^6rBmz1HQ)Izr} z_#>=HM^xv5gm;vL$997p%d!KEeBp&R+fe96>Wt^}x3#zHT(bm5>t3~v-;HmcX-?r@ zxy4QodGQv%p!lt~TiIE>$PRB)kB<)Bj$(IyG+{Sny!MMg-(qJU8Qn^NwZ<*w}Lik$%WTF_Ftumo|*iux>{ab93(9y=zzGu-oN_E zl3ISUXuKur?FB6p2u@LRTT>HTDR}4dSFc}Z`#M=@SSzMSMjs-S+l>Z;DnlQTvGiOy z{n{@2&5T-J*O0_SX@mSz%~Kx+`G1Gond!S;FW6MZ^L?xKhaz;D)!^kScf;hK-d>a} zl>2H*G=5P~yuET?JW9i1!I7si*eWla&YpVrQTie<^UQIpwb$X_Tfq}q0XCQHK+WN|2ygvp%3>6mVC*Tyle*B&`(pt%Wly9>Jm4j+Sh56hc$r1%7Gqov zrolMwbjr;>Zcg^H#q`U@YXb77XMQOy4SU*{dklseG4lR(2h`QolXa)%yXQA9hfe^~ z_f-jCdQ4QELs9T5W*BXQLt0c6eB&yjI_lUwxo(Rj;_C|21FH?*N`=og-f|VWSozXB zOa_oQP>jp(LHeMv6johC+oHT^b3gU?yeZmdta(!>gR|rNht#s$)|Qs&VPbM81V;Pt z{mH}@&}KJ{4R;vKl6S+8D;pT-_s=AoD&d!OGjm{I;HVd0h{Af|4+UNn$H~`Wm9Yht ziw*Vy+>KPVgY@}p!cY9X;IkH%H|a^YUO(WysxboTPx0!gqUJfyX)rIF!NdA_@z8Vg z#LBYeYHDf`AI$y7A@qy08@@~EGu%ad_LZev-|m|Wz5wN_3ZJ>wb0ln&U!Asl=w9h~ z;08mgTI-Jn&y&&l%?lV_^L)}Vv%Wi)a&LF4KQn@*$lskeRC4cwdjGQ-52B;s_O;zJ z=WkvZ&6HE0L=&3yPfB%d*X;ALWt(jOdSz)h`A1u7@T+=7pSb&-otI430IZztoVHV1 z^KtOk!glM>fcvlvo^2NQ98S-Q-*DU{*+^UNa9}x}JEc0R=2-ekQP^$drZ+G2k868m zeysJn#Q6skTmVAMlAXo~>hmoy1ifpNH+yN6SIGSj%7@F%N4xw!>8Yxa}32A)W3?2js3F(A8z{h^?qI~Jt+#O4O|`1jk?PUpB+mYLh0Q+ z=iowdh~ej&8Wn`1Adi7QP@F>7{MaV_JURm zoWV_kg*muxxjs4KV6Oar_0zWA!DTQ&kvd3Q=0`XkjpZ^^XnEd+xEF(%?=>OeF zmAb`0DcJx2hP3}PE;m`I|4;8B+jXNpwVO26f+BT!{brPFs}?Krp{9FeP(^o}F7W@O zA*v8;6)rfVF$q-#k(M(-go;4PA$Ln=*88D@6X*@~)%uA9%1eb~AOKdQVS?w2$zcpMnKUL}r-g}gT^QQz z)t)L2eX#+Rug(=U7lm%rpRHjVuASX(ZD5fr{*D(V(1GtJU>@GTDoq7et{g4PcLeuP zulX=5dw8rrW&CZv1Nwjaw>CHL4bk%4LJqL?l7W~HbPQw-P)s9y}HbRB`2PEolg?BD6T$*vrw%!xz z%hA@9vGYh)<6{vY(Bmuic-jrLfF%t{K{9BZFNoV_|Dzik3Xo#Bh+@8^uI!Brb8N)j zvB@ZX{rVj!3&R{eGk{0G1C$BUHlCYzVqHIb`Xy9F(s) z;=x@r(HEyTF3RC~VLfhHJozb$)JxN75BQL|JrFSD@vU{SJ2WJ;XwPOdTh$QP$q{*^ zbMe*r_CLr{pts{+?+uaspx*e<_a)o_L1ZfmnoT{&$O|K*xq5V(c>+&`j zso~qGk6xmwHJ^CCP!CKy#XHYg9&IX;N4j!A9BAxr|Nb_%aPg#)Ek66;=ljVy9A<*Z z<>(Iz1?%26ZgoK5BgbyvYS@f-_!`5!ztZOZiAi=#ZhwN;;<_ba4^wV@FhAw@huPH9 z8b(i`3PQeU&On}Npd`w1Eu$jdY~0ytz*$9i>ZWA^qfN@g!^4VoAd-BKJu`nh;ZS(o zn9%guPq7gJXr`%1vMcgqoo>~Auj6$R7>3(yu_clwwK;`QLsg?4OzSrG94$x`DVsf7?^2>NJohaBpmKi0$}r^>}ZTlRgtLPCRn)-;P~*j^)Ft6`eR| z7QNj8jBVc=X;7Ksy544Oz zdnJSMUW4%_W%-5fWUL1u#~iP1waYZ7&zJd~nk!koi9x1>eE9iWx~lUIwgUQR$L}dK zDfv)nHcf1o@En6EjQ*G*ziM<^cK!W;k-AX1-VO9Y(%%|D(!m6b$G}bLsT`SFYtF&a zt44p>2!Oqj)Zt);M>bXw^#SGPk-tB$dqF_~!Yggg(@q4Pfjr7?{7Idkmgl3X06bqg z6s^J?h75)6A{!2#t~s=74rU#lksmH2olvRA)o6d0b-n`3&qkw+9T)2_{`6PpAK3NWMg4)r|bINlE;b&t@u=?$|M4Aq9)Q#N)Os+sD<5s-7Nzo)!q%yifwmJavj3W0f#3fd2)Q!{yBkpy z&hI#IoL+|X5t$cMpvb3_AY|AKAP>=6^r3xBFo(?1Jd(Rg6Ar6JCSUUJY2vMI1|#VP z`_$CFmXr{U5q_mDI)ilbLPramq*i@&TvvxM*>Jus{9)qA+dANQ>o#`;jAR82j5-z? z1TI5wyFpijks$U6x}|qKkFUyJ0C$&Vd5gxe0GaI>5LKi$4X(7uQENQbUX6M|NE2(k z5k#KKH^&G#){R_vcI|3nq7WVLt6+i5@W8=ZEA8KggP5V8=I9p(M!y3kl#P0C+2 z*Ja&jm{*v@hwBAy=MY>_A%Fx<95Q3TY>|Wmz$1G_Q`c73fNh;Snaz{vLjigZYoiVp|2A-xpW@N* z;reW3Ivmi)NwMxcnm2(3NGVx``iZlUDlpLHo${=(T7EcIzS}N|pzuBq9vmu7pq)g^ zg0lIJzpvROcl$9!MMM_Nx;`r&>F0e3uxQ5oTs@yU-Z4Xd;A&3&LU)^YwJRM{#?duC z|C{;Qvu7u@PQF`lrK;PXcpHqaPs`0nuOcXXt*f8Frauyv09_z_gR44!jN5`8gD{?1 zhfx?nXpt{{j(0z8le0PA(%RZ3GZs48#;M&J?rH< zZ|WL2=rG4{Oq*{kH_a^j{QK#nYGVN9m8QCpn|M{%EG#hCE4D1|(5CVm;Mp}kiFD$uUlL3hQ#-FR*GJ=!mUjMVD`GDV& z!YBP+W^Zp~EW%?P;uux{k z#)UpKq(Mp|b>m;ZhTnE=#(aO-E3ZL52;MKlAAe{QqvqlcB&K()09*lT81j~3!PAYE z&}+gbWmtc42E=`=9o#&nYXHL@xq-TS1x1ukZj6D`;^oCFo|u?XtGPKgQ7b1jG}PkY zhgujK;k>(@-5i6Hs)bI6pyk5LQ>+VyPXORTV6;FWH^I~8q4}6`NN}*=fC7XYmx18?!)Wk&1%@c*@}X+tm zE-@DO*@tjDI(l2;#*)C)F{EB&F4tE~ zE$l_njVY8EOp6{lQBDK90sS}~k)3o=Y#Av;`S|f~yU4J-(!Du%kqpP?i#FWaEPQ#o zS0LQxexRl9ds!ZM66U5x(T5t|90;8L zu0N?`v_Udu0|UbvKW&cx-UUz5@pxYj5%`EnTrF|Pysx9W11$BE_1T`pA3IXji#RD7{#WA% z3T8F#*k*G6{DDg-TPIAPKg0K|F^aE1yEoMrE5f#c3DDutaYeBX8QuA^J$GNr@XQJy zM@~?7G%UmT^5sLarWAch7Ss8RP3%NI|JT?4(;pr6$krj?G!(Ii3#(&Rvia()yK8j6 zR8&@)i28u^$wcZ9&^%P!LG;f+Z&JulO> zE~%-ix(->xxih}`H4tUamoE<>j1gNh2k_gsqZa!?xOMRxadbjC^jCH8k%kgL2TpQk zGNRGl298rnHzE%)kdggYfQCCfih4U#9+fPNuaFfN4_T{4^GF$rOc_F?vXueCr$xZ< zcLW?IOB`a$WT-sZ-LW+h89Nj2qgn!5IXolxf&{Yn?Ruz$g?u1)bNB>DpWVt|8EMW5eO*Fj8LuZNlIDg*v!Gi_vP9qsk?{Ks!CnMEa=ol4k58ZR~-dHoDsTG3g~XCGRg1^MU?isj*wf977jGLL8jQB+hP$$~S|DP?5+WFfZ#Rl*EM#(SxGMm3XH^9f z?VKtkVsO3sd^K8K!pOLMt&Yu;IuDZ2%|e#w4>a>YczTQAL<$jnK_ zcNNNFakSB~t`QO0FdlNO_Xlgz6oB=7bmf&+#Xul7>U3GmH@rfg32jZ3J_6CQfOGjI z4`~j5?#{@?`GT!K3L>Y>?f zfe5gA05siZgXY@XR@Mzzb3fkeWg@3hmB%*h!3_S(Kb(Gv`FuVjU$aEo`a*!5Lt)6I zQ(Ew&JFx%kH;6beP^7PTCykbvPQ|Pq+W=#HlhCaqngYtvvem%wj04^$V}-?M65j7y z*PSvxoI?8ew=ifd{l-NAU}zejZUIB^b;Eq)95m+}Z3=c%c{4+(wXfP~9HO~cUp4Sw zLe?h55i&1=s-R2gXWf;4J1tJba#o{1*1dg`v#%mX>2I%)WK=oyR|X;Hoh`)u3Z}gs zAC`QD9>bj^&d@z(8}jiUtBV5Nx-ta?YcPlCk=Qw{7PS4=KS{-V*|#o8NW*7pmk))% zMP>~HvQS+&Q%DkySQMDfpg)N-9EXYm61?y#N=qr36s<*5zr)c+>DKreC#6~Bb;B)aH0#5shi!6k5@w0Y7O z27dpfM+1pP%{b_pp`5QwA|<{;%hzF?OMsIM=FMTyYV^p+2rND`!MQS2V;GE0D?eQtyejRAhCeASa`pgytw4+d|@Z;4hr+FNKfH^|JjAKj; z`m{oc6ILj7S2pKCMGc`J6kE+eN%h{MZ-*&khn=ptmBQE$|u*S+RAQ6VclvWIo zQ2OK2R6MN0(l23}!Dx2{b(BKfmILv$#e2Z1>+b4e)Brt9!f7K~(_WS%Fy)&MzdDQV zxw~)73D*o(YT*qu(!+j5XYePYzb5;EjIBAcdF1rj&!xUWOVx!WjKNxsp2hq&^u^Re zKWl8C7Cv*q?Ft8Bu@6B~{THPmF;WQN2y)kJt?0DWKJJts!z&<`*~9%N(*o$*;81UT z@rFS@p)1P0#O-eePD#kBk(d?vIUvu~Pxjs?FI#b%2=1y70RCIiq zVKPhhR8LdE=y1OqJNS-N3v@&Tc`uwr6A^OZyX1JE$$e;*x!U>3yfS^9szg9+dD0#4 zidWOxc40qBa4%Q`r*es${bh1c{`E~kqoJPW@ZHwB>+Wx(P4T!w6veiT6|v~2sp2V| z>n|(4e*Jp#8hkn`NIu|4Lt@3n)JZ2k-MYyJD;3FjqRjU}7yVY8Zb&}BT3G^T0UfIq zKjI;}F$Hat6-FTNQAY)m`+<;qF%q5m5%amFvEW1>1)ShuHKjA5^p;7Q9);^I800iQ zHf`E8B1U7m9E|Oyg(J3V?o!b;3^cGW!k8pH#M3R4X#=+?>Bf;H%>zjRDZ>bE3SfOR zNxHQzP?o^I`glv)wLFk@9UN7BHN=y`(5+e;QeS!xoEx+tSvt)X-mFH6a*EloOjDXg!NGkmfc9T;f zi_ODb>>8WCvNQcn1%iw!`|jLHQ>GIeEoSSrqi@6TaU9DK^4qD@Z|gO7 z?b>zh7~CshKWGf-D`jO2z27246Mh7ly;AsOFVgIH*p8z^NvJ4*bg;VeiF_&8#-geB z^tsD=(73Y6ZE$cejTb~V zV9<3z0YR@OMiBl4agt;^nLK{1X|%P^z=tA*Veng+M12EYHXtip??YCYWgem)AO{a= z^usln9D8O@>$k0nblOKvI7i6YDSjO4ZAIkr7B-%U?b}mi;{t=AtxmK|r3t?vnVMVM z^Vn=MH4n0MiagwRNRAdp|xUnU7Jq7goWD& z8Zoq&Miu3`3I)7)Q{!?$Vi=ADnR&tJ>h1=KECHsaSRW4wW#)r?0?}PHP!qQBnW=|# zp&qj984NNqua1b^FePC*ebIU~qBslCH!rAFo`hSN^tKDtmH0;w0ZNRsQ?TT~>ckkP zKrD(k(-zP#0nV2=SGb1Zk5WO@28BX!v*%N*w)g`9VvA?eew#tSQXs0}o-d_C;)ube z9_4T9QD!}cXwbKz-W!Yi+Xt27AspAG9$!DWaT{^7bCO z&SsrN8$;f$$By=pwmbMc8RKV#2EZoEY4&CCY>rww{{;n4y8OY5xqdW8)bh&0cRS&3oyxW-u^;wM2i2VSE z9Os9~=BayRb8w=x!{8u5(;Nv_y3NL;|3J|0MYiP1#Mjf|9mrZXePItEipfK~LCW9A z@mWF%0*XOIFaAh<^ym@$GMTc693|0j|M{&}xK>DKZAJ%t1q2%X<|D^WY9y>M z&sTnZQwc{d-zt?giQWnPgG2`84F2=m zD4e5}7N57#JCXe*!-&Ym3-h=ax6_F_=J4U~nW*D&W#?>3ya3feUQLVZLTE&YBQH&~ z6B9)qzec+ANhC=mqlarrJ**LD)bCyI$3q7i7GRn@*g))5Go|j}LAMjxhCW8HBFS(Z z%rPKNA9agt?lVj$t4GKaOp=?zEl33gxrNxoE#}JF^)#UeB$EV1WTpa9mH+&9X|S>z zae4K7(qYyfBIp*f;%@z^PjbU;7BKz**-#yZCNZ!@#EPhR?}O^7g#0L^myqE>a5tgu z;oN;gt?Rs*1HQ?_%lq_2slKZB7UGSMKAT=j2YY+`JpwkY z@>&LI2M+>*5ZU3w)DG_nM1arhdc(+WI% zC&Cn>xI+Hoy5b(P$kq3g2}SHf@TTA_y#xz|oXv1Ut{-uK`h0%44&yr*AjOsel-fze zN0=*I*-zlvjskrs1$Hi2gEX$w&+B~T9?e`wDLaCM+i>{VY?NpABizO)4FV&q;reMp zX_zRUZTNxx7O;dGD$4LN9B-CSK2P+`d^3W|HL+75} z3O@|U4mrH{xPFv}Eha1-9v>SOG=dN#KYj_qv1%#zWZQ}uePlx_q!?%_N}LxWo6ERb zrz;RH7~q631g^{x%mW^+s2(G#V^1nqG}Trh=mT$$PNp`@-txu}5d)FkdlT;_|G&aM zR338QZ6r)PybyXTx$`!VEX?nA#q(_=TN}iEz549O&ir;rXexe$rw8a~5X~eh0lmY$ z#=B-%CqOq0BMhKGq_)>@3e95$_w{y)85f5U1d&cWG~~NU^q}!4b@7*>kTvvBmXVit zg8c^Q6q;yB@H?tzfT^sCN~t!Su6sls1xsy@rxKL-n@^!(jTQp}AL%dtIN+ zCvo;mAS@=#bTh_p0Vitt`aH35mdydUKWw^S-^Y!7yu5wCDu+qqo2;x2b_f~Q!3D(I zTJejdsx94S#4OmlSQd~S@g}g4ZI>uf5Ze4y&959s7h_s`Vc}r!!!2Hio*e>v$POW6 z|HoE!Uy03(vA8kbbA?Z`U`Q_{(MmTUL;ejJX%vqyql3?pPkd)ARH{Fv{8(CKtPz}A zy;o;7@w8g;7xJCdQgn}AQiQH|9o>wky3imMK;O0sv>=GZT0WXO=j8ze9M-t962VVU zuM5@)!B0xBQQLZ#Y?B%Wif=gZ)T5y{e(KX|2BgxJ4Ow;={DOK^emZzsBm8#fSzRq? z;&u*=yO=US;I1^ajKbDwuC*d|a{-os5U^pCY<>??GA?Mtmv>UMVkenO1$PfA?k9nP zhKPCT1t{KXZ%eLliW>LGJsoe+Lx$F|q0;+voLyerN`gBX4i~B@w5a@^2tW*5kdQ`+V+=zJsd9 zgGewyYk3i6QqdXf7%P2Y7{yD#LC40w4o_2@F9%@0!f6^Ux$R}zyp2-*HgK!Ji5mfa zM9l9MX2W@TOJGN-{zZ5Lwvbffs}&oi#QP%Ut~E9`#sgh|lZ`K2C=Sys_(Z0z9Z=i3 zmSNrfBGu=!gxqjrLj$3jR5;bIlxek5FCCNr*5~F$oVQk(qqifGlR}hnHi0ExWxr{Q z$pP2sHPJAg7Sjn-yrvJ{H}fM<8KS41{Q4f=zuygaSdob<*fh%g*cx>c5gI8C_*P~1 z27WYA*L_V%j+2CJ;m&|Rk-V4=1Rw*DqZctVj+DIaX(PG+hFXM==n;FF2|zmXP1Qzu z`4oUsAaJ$gY6GBl5DTGnYl-G2@5j>vJ$C$HO~ITxc^-X%AcQWM8g`sm*$0#&59|?6 zIA8`aF8WqZ5tn!gNXjUI6%|4@OIKibu&w9GWPqSSWh4Fm%* z1=b$}3M&0ZtMqp)zieZVWQHpnexm*07lZ@jy;Et{dYJh23kDs}q4W{i(s44ioak{Q z3Q1vobjf>9*crOA$NOje`2PJnA_aLMrWoW}R?oK~dg%Z$OM*4vehzm%4w~UBe*U#{ z)v~~vvuM^&dfU+9_M>{KI_4A=<6ovU*s5p>6bDY8Vt*Ejmx>E2ZAZ~qiU<{~`ev`~ zH&qR%zkp|jmXl}&K3KmSSOVEogrqK``zHwp;%Ufy9C|cbYFC)0PyrSPpuc+vAM!{1 zi>KWR4$Exkb!v}xAWXq)cXYXKMFy+8Ck+n$@xRycE(if)RS1h{tO1_z}}<% zplN|1QGn2`%nKH8h-t~q9W9SP7H6yjDaWP{1J!EFQHEAc5FD-06r0k~;CkTzykty= zutcOhdVY#OT06tXe|5fJWcrUtl1)vj_d3Eb!r%cs%I1U;DVoMpN=^;u12&qwOiXAf z0mr3cXYFecGBE?@p`;lHf*`2R&%YPln71-Px}yqZMeNM{{3zY1V-2c+7h_p4b^9M`CtA0&-wd@xl9U($00vXo~aP<-Bwh3OALBQ(QBBV8N-i2^xV${xjCiI>AFGit;^J4kba|8^oO4 z+cK49G61TF*yZ0pd`%P11NN>B*HHl1aBFibk6&HgJ_`2r+#xRV4r*Lsu!wQbu zxRH!Kg$5WyE_v_D$+WfL+11sP!6%ONPG3NcZcZa7pcD+3b3R{$8Rj_U74S#MltC(1 zdQ@ozhNA;0)<7mxe59tb3V#J&n}@-Bu3R8|Vh6WUF$aoBde=J0Acnsf~skoiu% z0o*)1m=?&a1kOPU7nvjvhdGzzJm*u)gU4xmIBLLvVqTJDAbc-2axl4Y4EjKF6vP9sIf!%sv;Z2LY-hZ9*Oi?z)*Cf0 z^$OyGW!!w|%sObTRh_D$CgL{v3QCUKJ+5@G=N0@(HhX7(vwMe8I$36czD z;#oGr!<;gG&JK(+8AIMy`D3k{yg!JK!a=txh^v$;Aqx!xgH{faWga!pS_?(~Ogr3u zjA4aChv10U^y?p~TWk@`FGtG5GVa#6N7l(IC_^ZXwc(Rlvm)&sFHQq6TPcQ=#k`eL zJkL{*l}tu>nbSHno0b?3@Ptg`^%lrK9jh+W$;|4fDNJjO1ujRkFTiU9WQYd3$tDbA z3dc~SX{cam?~%|)<}h~$UfUL%uqFl8QHtY-1%LwUthL@G%XdHPJ6iRER=gDfl)?sa z#H&ck%fmZ0=>2=W|79ao%&hg9N~6r^k7^Q-uikxw$prX`{L?Q&ok3LSp@mgE3vnU5 z@phTUQJ53}QYxEf(*B@ME)R?lL5t@~eqTUGv)a3@B zfRlkYaALLrIKxyDRAug6IgNH|A2bqJDCyW!$H6bqg3$K5U3+O7$Ek%4dqWfo6cA8# z8AeM5P)0654CNYbV#?4{&bgAP=!>&bn!!*4DgXRg2kk!d@y z817iw>}y48((Onl!b>Pg;U5GIE*VJB-+1E3oZDVR*a8Hz6SSP23?v@Iz)B)@4{CVb z`V7>z?0`l)V)`}&mPXNS$IK-(6)FSAayfAgK5ZblGb9V~erq|lo@@^c(|lHJ7#>~73A zzyL33%diEU&E+9x1zNlosG=kT8nGL}8sPUTqAnjr>cuu7>$nYgbh;~FsOcoutj8)X zI3qNnnYfl&#p`xd1@X|4wMl{SM(9TQT<$x}a8^BkJPk^H?q{_Lr zI+k>~=*c}yq~OuXuN?$)q!K*t!o0)p^SV|&_yzzS8KGE=-liVgD7nsljH#1j&<<=i zFpkFhdVN@GP;u@Z>=C#sY63?g9Nc9t^6as(?1D80LQv4AcH}{muDYz1QkHul6g1je z3OiO9jK;am6@7M=SKv{f(!&`gevt5%LzF}I+Mda}tw=kWB+&bQkj#Xl#JpB9PeQEc0g0n=d7$_0ZJvP`~UQfT>A>9|{QS1DDX^ z>{uD8qC&20CndP>YMlU|>qKZ1)rQ--QnwTR0mB5{X@S9l0z`7hVA2i3@43CgXMQWn zZ6=ai4#`bGtqz>NJ8U9XNTjO)IK@>wTu))OH6jq;U&y?>n(oe-9uI(i6YK;w{TL+} zDp5|)Q?M2M;KiY0lO&>$4-lsoFGN$q7u|Dyz;ENHYz5dH2$i*{Z9I2|gd~B*fD}~` za&*A;=9mTm8DLAva)f3Q=O*6&P5PE@KMi}hf!c(?3mj$Sg8GWbh{WJUun8_?1CN31 z1804=bJmv^Yb)LQEEd08M281|1zs}f3y+{az+$?m5>A4ZRSYBe&ci`hldAFC@j&I`&qB>=hm%J$TpGZw7)}t?9ReAErKq>8B=r;w^JWM8hJ>nfg6+sG1 zZ;%R9DC_aATEGod9y8=7C2?Y;h7`7xxI6SqpO&7HL7)NW$fiYzWzt#{nlB-+RciGc zlZvRL(+Piu;sU&0>x(5f;ArH@piO3GWeoy%VFV%S2CA=toj9O8sVxZB_^BGsKtAVa zpTka@Kt)h?07R=X*i#Lt6S%&KK_m%CcqbwACjIjTO(eC*oG*CP6j6nM?ph%#cs6~~ zS8$$y+&gF*q(b2%%bg&H!<^tXprV4`xRZet1&~!qM4Y8oKw1c-iYOa(#Iym)GgLPJ zPbD}0N?;n;J>)3j$0na5MZp9dfyR4Eo`kcw8VgC?Cvh)flYoK8S6WvfCx&3tFn$vN z6FfXotT;#ZcPI+w%Z!OLsEOXWkb`5W-GUXi&LLnDJQ)D+$n{PTdinw{NL)eh#qZV? zCUi|mF%W30w$g1@JgL7DfLEE46g}+8%emCq>hnP1<5BoRB)`Yhjyg69%}qc6tW2e+ zuWtn=#Kn)H&4Q&l^0YKsAE7i_A^m=K^tn#tS0px!QP6l57!e#gF~AzL-GBs%>_u}B z`>T{()WidWgG`vg%+sR@*$Ju|^Z}^qmzZ8Z#*1^+(12Lc_ht}Q-{L4~HO?}Ea!(*k zQA|FhYr-Ris&p9C-pLYOFDcm%!9;$2dAw~8Fh=2@{K#vsqfS6N34c+hWs6vzL2L*7 zQB%aA%bOobk@_Z%phh}@sC%C<1 z9P(%(^DqZHpTdq=HJ#9_h;oeKv(kyn4nwvAG#8F8GP*>euIYwws^I(x9d-gxC*d?^ z-wKu_%|nKI#>DebdiX6VdlUqjfETh{=`=nHIfs2yq-c?b@g!r9t+7V{#;5^HgZL7- zwI8LbggGWR(e&Ro<@~o_NDE*#6vw87y`gko8=*_Y0Wf~~QiPFU-9D5$Wj?TG60RYo zewGpfYem4WP)~4sm(vkx`hpb!yoIBw6)8<^7+Q(5Oeh+_RRoQG|9B7lAVNE9#y(tT zPktkKk~Hf)Oy*3m=}0Ca%o4P=MP=+G$|7*+UM#=g2*;m-Ciai$`x1|grn0#I3=Ev1 z^8Z@W$+4%R<=?$AWo^h&m?9)%BWG5Q^a`*r5`Ewxa-b*!l;&tfV7!4}edi zcgD|?`cUa~Y6~i2@rX!ro&_NRfXk$D0c21=Vttzo4tf945Y6cpS#V*@`3V_h%>>t zS=4c22!FVeJQXwr#6j^RTmva!v0#R7qPFRGFSV8SdDwz)IQ0Oqm`tocacDq8;XIM` zo{(Y)5Y2-DTK{PPlAv1S#<>CVpd{npPjRT71C(-)GwucFkjccy_(3?NQq4T6YQsod z2-YByQd=35NZ7qlmwcmIaFnDY!BeB?*_v}&io-3yUu+xbo|}pbGbwfnDbz*UPJj*{ z2b8>vP!U9Ny96D15McFHFMPL4hSPYzQz(?U(0!7OKsxQ|3!&-oM;~CG?H&1Q$}1;n zA{39SBQqr!1U4i9+(^Qpgq|*jK4n9~lv?f@{RZL?jA%L>{&e<}E)3y?pKa53gj%P? zmB1PasEU*+n?Qj8z$3Lg&(Vd_z=d5(;s$lVO0>lDe7|zFDDB{UA!AsvHba(1-+ zTU0e_$)Bf?f3~I~Lg5z#Te|Y=E&KsDicAOEokNI<+tPCZU8Y9$d*Q2v@ zYaY%=S?n2QCPMT8xby%y5#8g7`Y7B$!S?mP&j5_|MeyNZye+9mGE}FIx5p8jL}M_< zpcEN3@aFw+tO!gFs}6jIpVEv%0nma;BpxQEaZIG2&*D;qw8ObneuM`h9ID%B*Wty#t60T%-nWFFzgH_yH0CNc0C#+a)xU=tY)!J*jUfi>U|A zXc3)6$!ODqyc=gvg;rA^>Z%0*au$I(CH)Xt!j|VqKb~W41`%rwwGmLQWq`&I#xy09 zXfbgJN0@pwg_{%x;4uT}OViRbk2+B{qx=yBe=-^i>=n*Za+3OipM6D7Wuqn~7M6_t z28EPB6?EX(!=ORF25;g&3S|;V!u)SUaZlQ`_xMcqOH!^4KrHirh~lcXL~kkRi9>)V zK%$IWON$Ve0p`VTjHnlnS?`-m>U0E^Zn4>TO41zyKA}1lhCHFHhR_LwOeofIvOiE? zIo_%Mu{!0j6|dispXw#`O2g%#wRBVA&HI(PrkB6F)wQ;lJI^mI zblzv#qb4nR$yQU^$h37omh@S_;_yuH!Yf*)PPCO#I+{n!o>5s{aWP_hvWa~!XZiuexXYsC^s z=nb;?B~I#HxipAcCxn#k?C*Vyf@lB&XCram(LY{m@k_1S$Bm4f2eH1J< zB=@CZv;TSHu;5!;sIQ2Gfiraq2S<3+4;ochmyh%=#LpgXM>o-8((VLDnzZIv?2cg+ zg^k^QXgl@KO_y};s@JxtJMFn`JlA;Uj=Hl4d?2a%!wiO3Zckc|w`1mNUs z^Ua-*fEeyHq$lb-Rvg2$aF77kG9V0ns8*Ide4DrGO%l2OMeTW8uUaPj8a%OA)jiTcNMuo$Y+?T zK2TIp0RDUEgnVWm=6>$rzvZ|KnHu0Hm4N46CIs{XcQ;Pdpp0eX=FJXB+bBMXiRmI< z9YW&U6Y6ItSN%8uPdkidfmvJ6K#}f$6XR9GbdFXLg8p*l+d2k8VV(qdfwmpWE7P|c zP)o6D<-i>3)s;|dTm*RjH~6;fOn5=y2LoW7PyzdRxbI<1!dr4`uwj@TV=mNgTEV$p3m4!e>ACNN=#Jpz&kvunBvt_a`Ug%uD9gQ2tR2PB@{iO)iL^H( zgiJ&S?0@db2*m=KoS1-{f}QyU`5Jf~Th^DV}B{hD7J= zR@BXia0N=_F?ZoE+JoAGl|wE*iv0*`2=kBNcfFn1v76k|WGysu0wbUY!RgIRI6FzG zibIf)$vr+au6!zzJjP$sW>fX5$XlV~{sReTXCxoWt>7v005ldW0T5793J2qPye~tY_2qw zgR6T)Te}Ce*H2vHb&-p>E$2T3S{RxG5?uBz9j4I4Hr?G4`Hmj@bBBouJ*6@Je&aY@M(6jq+w zxYe&vrVE$Oc_0QAM6%w^U3mjR*@nd+r>aF1J>} z8h;573(Kr&E&F+KU~~+Vh(3Jyla3*6pejO5l_B;B6WF+79++Dy3BTrt^KZ$m4>`aa z090cSKm%3glejpY@hvi(c4gy)VFFZgkvn1a<0%0}5HpcFj&X?SR*asqK(35cK`?|q z+e2%3->xL z?lrNpirXd*0b6ySBdaVn`{_9(h%j-1VNUw`yn6NQQ1k~P_w4#!J4MX&`;>Ar?r_mD zM1nNYc^u1+f+J;;q=cC~!URapjQVy3<*AhMni-a&qm@5N+0w=)r?E8+_cHv8GtEY% z0CR}m1O?T6OBst}*VWav!DoceLbSVrk&ccIS_mg6SN**B_n)ijGq3-NqM6W&_AMJW z+%)Sz|NME*V`HO^PUz=?VjrJ<+qPMJ_%zRXx489=6`0-e^y&r||Mr3pKVN3l-qgPL z`*C9(df{5yVsf(W@Wmb9D=RCDi+RGcYdbwWJ;N(8H}~Er{2K<1p?SD$knAl{t!0B} z*HtQ&>gehD7<;uSVnGXUQ65L?-+c&-G3OAmh6a=5m4Nm+wjQY#B`0CJCuoGmz>tAo^;Lw5F8} zVZnqdE_mqXX zW4^wT5&B?(0o~fCD@9&8!z0V%N3D@_nx=t4HChT+L7?xRHuiDD9L3Q@&S`iMSOvZY z_#33}51%^{&A*_z5#5L<2&FEWnwlxPXf=)39Z>}mm;x<>#qQ1)!a27(*5A9N+&1sylsDMnmJ9-qIok$nNo9q42Nse}l&)DcV zW>Po&MH<0AbF!=Z8~r;JiFdWF;sk%Z4ry(7bB{enG}hPGGYSg|w%s#Y7<2eJ0~2Y* zPpXQ?XBck$5i!Hona9Z*8lXT=LFLpFv95FIn~kyd=yXrwg4)^CiD%6Wjfyfu(12|F zBQ}AsNix7Yxo0hL^%SCj4Cg-B77U;A2KcC^Xqya?ZJ`5p8e!>xXBu^4D* ze?vdZP@5UC?k_d9l@5Qa{`{2K6y$2jdsl1ehTHakb}sEU)N1+K(eLf)srUSA-TZyX zOw3_Y&Viv3j5mP=kaAnYAk|IE${C;npCdkhQ+@YfOKU4a{itM}r7wr<0JNq3I_UIb z1H-tg`EL{~-O%4{enXxvtrY52n7Q6#%?W<%u9dT{L#w14kw)A~hX5t-k>{AmMVTlx z4#m+NLF$Z;OdgMjjqL_PMwvdXKrg49{Cu|ySvfgq!Oi226G^w`pLJac1H)d}ZoFMdny(O?WA?NZhXY%gDzvtib^6o%YeAG9T<}!r9vD`PPa0)1CIcefsqDnp3DS*nLLTkL+MG zrj0=4D$2_NrQLo3JvN8a7nn8kF?JSRTR=GqWuqs=1w^~3H2sUX5_d&C`EI2B9Prkz z*&#EVZwrq*O#cIA%|&uP$W|StV?r(4Y47vh_6Qf4X4;WF8O3e=!v`WX6rXI9T`z_+ zPmeCU(CLgRS3`@w4>%~U5gqJ1>*-#Y8G1FN7X9ilV5&tQnx&Q#v$EO<1sZ4V9ZWAH z26z@}ivSWM<%Zli0fWgf2iV+n+t~jnHt@I&e48heNy>4^K6wwx>+2XOXT&2XgZZ7O zW7G4^-XYlb&RHzGJI;Qr)D)8pTh@@loBn*qF0W2*e2)=}$R=X`b9&DsjlFwsO7Wpk zpnH%pijFbPX^*>`>jsLg!MI01AN5Ha$dkK?r&Js0>79$OfbY9_JR<9)%8|7&Xlpo* z&&jvI6A_LLe0jW^fo^E=BmDq6HI+Lf7tjpf32)edA+U&N3ywcV>%+v#nd{rEh#5PP zX=-6^4v#tA2$minpvqU#?*j_I#1JrA!Tt5$N=h)s4GBBt>_42-_}wsd?9&-%;UBNc zE`ZFm?*2LC^C_QfPkzDTh`|tO83z5rss&*Y5r>fi9N8Z39;}?K@zB>-rxpWKtTaG! zl<@W5YH&L6JMA>nLLOgtxc%{MSb#vk#){P><#ES=ULMLNb2C z4zmQ|4;(w@kMQK}QG)5CeCY1|``h1%PQIF|Z&O)PT6#9_@biO_#uA6}-y2@Ud5@Um znojyhbYQQF~&>! ztB@K4XY62Z*=5W(Bh^4?IVQo4K4??8AFKW^HXCR?I@1xregZTwoWptK+ESR&ZDv*P z(4JI{NlG!n5p!r(HK4pWBFt$kPH{qCk$rH!6%`eQN0Z=N@S~u$kP~Z*yypa#OT6u_ zTtUOyQ9O`K<|%J|64@ZpQ#27U&f!1-h9iUMS)r|^)rG8qKGVh372T5Zcht_AKuAP5 ztruCB8b~j>OP4zFzUvrpyNu1u6q-1r_pv##P@;U&>kZv zCkI8#YZy3fAWl>lD0i#Qr5Q512JHzQ(7_>zbcAzF*Min)QAUtpmedPJvNo(=M%ekh zsi`9`&6#Y3sp8V{c|0IPb^6SC9 z5mj_6h!|+Xdr@2fyr55TNJu@ByCWbmFzdXIn3ladw@5&7Qg8^6nUE00dydEE+!EZp zdGq4Mi}mbfrB~cR;u$XTyLa!2gbK< zt4o&h{lD0H6L>1yy?cCXP)Z6Bl7z^RBr3B?rZPsxP-YoQh!RR=R%D1m=9!Qrm4=5< zk|`vqOd$y=L-?(0dphs=zwh7YbDrm%({69~y|4SazTdUhcdf7piOS{7&y=3zz#*)| zF}yqR5ABI>*RY?Hv!?0&`yAg58GfW66l3^+r3XEizq&6L_IXr2aKEPT6Qg~6EF4K6 zJ(6XFrVx#0N2RZ?wRJiYEGA#{_4bCIOG+jEt8HM=sc`$<#|wu}?ZxmJg6DjFD>Lll zGZ1SIqc_Ivyu6>YbCzzV6vdgvHC5wAG@M8C4975r7k@YdgA2BQftgUomCNuhRVRWv zJa#Ohd2l_W4aW*U$3-(&?o=nt zT;r}zFK$-QUBUgak%fk0aTD&8jA{=)jDmVmB8GH>1$0mM60W=cw$v`4^ZNSHSbB;c zi)G98a`?sl!j>OY0|pkg{1Y-DLfTfph(~6l7CSCrf|(@(Sm5rkKH%%%Hlt5foa5f> zfe2b**>1ILPRx6?K+*ipUlBbsesfW7I*n*?gpRwl37RX`3@{>f%DtnrVowm zf!%2Ma*AGj4m7{qzW!jtFFS-P;EWQYqxGL@*pFzx#=fvFrpyS&kU*|r)S>Ou%4;p~ z7u8u1`i9cICLHxqt%VSOSEL&fvXIPpD?Xm59-opH$+ucZz)OaSOHNH+`cT-XoOhO( zoe?b6n*6wgqAIYskFXD*{Ux(f#4;$P2IctI$#baU&XH&Ospk;m z8X09j$uB5K6t@nZ&l6t1sejhb&iuTv{5u919B@oXapm-Pa_M zpO(fq?%?C|B*Pw6(TK;%c-D^Z6Vvdb#Mj$GAqJ*MYLRXzs;D>*MIY+V_zWjZKBIy` zU2))h`d~~NGx8tNz77pJOyr-`gHOfIiG&hf3^_HO~vz7%S@S>(sQlqod zw{qqox>pR>9;*r+uy~LYkmf9iS;MN8vosW|b#n_t)Q*ya#3G{^8QKto(L9i9O(+z; zmAMV-0$thN@#Mn!`(_QIv4@oOzO%SoR;Y1uazZAojU^K8o;$<5vw1MIBkPMa(%MVz zUhZsFuINI@UFv<95TX(&y?_`_Edh^;$0a4Z&K-hhphG$I23uA)8~M_+%%jHH>MiN> zK=1bElJkGQZWU2nqxv%jH}BrDU+6D$_{vBQyuNgskc^YwkW# zgmDF49#@>MNC_h&6I239Tontb?gjMBo8s&Y@@sSYuRewWUO?L!m@g6*O48;$tR=jA zsPq-ihII>(@zqG1we+;+OHL^UY`DdQj7N%3tttkRm1<^kS^9$H%|5WmZ7}Ney*b%ehw! zV>nx0_2j(6VUb=^a%4LX1Eq#z5n>j94ytw+I+dgb0UiJ*#DEw^+$YFW$=!o-CnqN%-fVcDPzU4%&=7enNJ4e@{ zuWE@w?33?#&{5?dJ!utTaByp^TJ`RAD?MeoSUwNynV1Z_Nk29#>~Ji|&JHs7*poap zbxLeTm_2g7>_AoR&J7J1Vr=>L4gq7Kjz7;mrn~W;&9wEv`0N~fsn69qP!v7H(icXb zlcmJ1?CZOLDr|o0r9yBGa2ya9zlpix*Azdxw8i64X)21+k&L^Ll5!&DSOW@IJjz(( zFFKD|`_Qe}KA+APcElm+)Oq!2`c&D3mmJEw5V{#16N6w)<^7V^UYBXoZ*N>k%#b*TtrU!oL&3BGoYyU*aoQt` z&H~{5ohKtmyA%|}362&G0YwR99`DR_U+l1ggu$c*Ipbh-Y`I=$8O4fWaoblO8W|y3 z80bX~GL~cB7KK;~(UK_&ph-M>6v-ZOV%9Bc2ekql#pjWJgu0@-1JTYC3O!@wc7Q7>68^gc-2K5Tv46u6a>Q-0?N>xCP1 znMUd^0mifs9zHZyLh2<@#Fk%}pb4qLl2Wq5mnXg1tv^TeISH0J8Z*D#&vEgXeJVyw zF-WlpG%G~)^y$+G!G*?vN?L~sP!ExcuJ4QmU$SG?iEiH>=Cwrp^U??~hb$4{;o(!U z2!s4*`$5Md!`_MXQ>nsQ+51^~290_>ApOy{F&(Ei8 zRxj23aktt0M(z4tiI8O72&MNsa!$t8)m5*FedRK20?g$(6B847kWgSY3>=BQ!DZU& zkJAxn!smY^cP{KTk0zb7YfYPP&Q|+H6`ad6mdzGx*%C zx}Jq4Tk#}%nW08~0?9AJ11paG2OiK;tyqKyCPa$QJ%zD?kvl+ES*`{wx^>+X7Km^_ zRRqxFr)*yy|8WAU{SP>>leOV=H3X`sE4skFA>q`&{#AbB9*w=JE_*rg1RdZynBT>9 zAU%_PYirqotqJ(_FxmNBKgT4xA!!pQLtoR;# zZvtS}p|Z%};9#h7Hy&dYOWuC$VHDt14RjWXRc#Z<2E>upIdb1n1V7$|*0udP$S12( zS~cjVEJ|@#qxX^v4Ssg@!etkgw4#Tg~4h?Ul~{ zY3fc9ivU)RpUiuQ-pv=1(JQ}D0vRxC?%j9cI?A3&P?v1D`bI_y?<=d*6wcb156)+C z;fcq7u6T;#`SpE#e{JnY7@qTbMRqw~yKFLswygD1UL$+Eh1~DS z$%A!w4Mp&49~WiWY+fY+Yuk{#%3;^?FDi#|nVx4=Gn?bYK8BE>zdor1P4`PeOP%o= zDYrjT!8N#g#M4>*LFsQd1I(;L6-#UsRl7U~MCBYknG`$~fmdE2xG3}%^|nH4m3B;Zlw2gQRS$B6kQiZ+XMo>)KGCaE>NI0o-< z0uZN-MWKVm6fzGR0hQ4%ZbcUK_VK@nAw2+(@<3v2f^Dk;hC0-~|I-2@wQJhqGpbyc zRVQ3Fn7oT^HB@HtT(7PJ*@QL%eZ`zQA)EdI4QYo#VQPQ>qcU=t<%?IZDKEm_rN2Ti z7kcvFzxEHTiHRv0s_?)X;y{Jrl-Q`Kze)$in14yB8F~B(nSh8;;bM${x-1`TC=sjv z8uq#a0w>2Fz4b zc`ougF`a*Vc}YBUI2LE&fU}JU1|;3^I0ndL{TCd#src_3hNF#vKLl_v9VJm1pO7~M zp#B%(0B8R%a8djW`7YjY4$S`fdt>+1f2n)^cA0G13UE{*wn=!U2oDY?`J_>ZjH%SQ zSRyb|6!`%9Zq!B%J;~VnBKP>c8TLx$afpZfUN4HFER_B~d-AEz&;PS0`)vU)ioZSS ze)eqHOjITKs)i@nEZC7LoqCepPyMjUG5! z7kO=aSoYO0g9 zft)&kp%ZE&@@ovU5B{EQ*0xoz{`pBg&;??d+<|UFI3gx-?d1_8BdO=+0j<1ejV5H=fhNJ_+^UiN_@$Fn8u{kRwu$S% zQxHt7uV0F0I5IM_M!B*ZOea8FxTZGgSPNY}dsgE~+Yj0;uf9(R#?=fkP!ws6i>-nJ z7q+7;a;z;Xn6| zdAXPwR`6;bSCpFnRHhx3TL8zB^gX^Qd>{TE^J4Ud-+D+-J|m0d8IS}U@i+{TPc6)M zFYJ2Aqqw7afXQcL^3f}LJJ1v(S!OO^<+3GMVG)~Vmv^?>dG6-t+@$DnCE{ zXGKpsVNFV_6t->b67N5}qLV9P+Mi-|F*ETTwiR@2Q?aN}l#qh)kK=$ojN|KC1+Cke>V&GM9Jzvl7S?G#i_OOQ?;goFjFM$9QN-#YG zgAn|NAb(@x513q8Mm;|Tz9knH?l?ZsW4+E#&`{)lK7$?3K;VWy6F2IFweC7?O|1y3;4qC|jmZ|FV?%lkR7bzjx0kBj@!c6_q^2y$JnhxL@@ZvU(0paPR& z_Xerl_dAPY;CR0FWEfF5heN$4as#;oty3d$vMX!&7okq(&qoSB&p8fxxvL_z1lb4{ z7To=x-&=@%{XMJyWn-6N^|$Zwe@w5+t>ooQIk)xtFv-cS{#VGaBBU2?X(3bZ{J4!OM zvbNdu-28Z~JXf6;?%x+@HogTb2Y%BMVzPL9?*!m z&n?)CeotcjF)z=>79Ab&&+1cqMbw!8DSA-BzbC_=JIM9jGy2(eNSBNV%(~(;`PM5_ zKS=yE=oh0PYO|quf(%^(D5J(@#mRb&lgYVy7azd-eme)oJRzJUhEUK2faQ`;zkmqB z^XJcltO6vC@elklPeU$^;taT^5Y=t#gM9@_t{Da#Wg_QW9WR4VDNcX<_yUR-x{Vv% z&u$vtr+Rhrhv0ywD#RH&uLOqZZ{@?}i3y+r1P;7;1I=+mgD((`CtzyG`O=Ti z0nJfWjE;mPrqxnoj)C$VyeNYXB9VP@HDIf0!cyp=MXX#b<&>QjgE=} zdIvgG`M#UG`@y3_VKG-LhApbkt!v_M6^M5KXwR(N17!TsVwJQmx3Y2}C$~WNhzOjR z=1@+_V)6jw1lt*|YcGcm>|<8A=d-AwMxeCM&XtPN z+1dWMT|MTy8_5tjBi9Llt0WzG85%97t5KF0&T5FR@xRW6LC&`wx&sME9~%)jF+05# zcn1Ha-Fz9TV8I;b@^!#VmKIKXKOsU-ocwA2#5` z_&U^&{vKYiQdpY3b+@Ia!si!WMzSjvX<-X;Mmhn~mT+HtFz}k0XL^S#MGfyN5{RPJ z7nV;wouQLmlI0Tg&kc|4dHt;aT{s@6ic_EWGYXQPdF4&pOW53&EH35w29#B@nBbw- zYQ%ew%tDgvNL0G2Kvo6)U&paC1junUT$e+D%0Di8S|@4;&ZGwib~yf;_KuK!G5TAE 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 + + + + + + + + + + + +
2
69: throw new UnassignedDatasetException( +"DenseInstance doesn't have access to a dataset!");
+
+>] + 0 [label=< + + + + + + + + + + + +
1
68: m_Dataset == null
+
+
>] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=UnassignedDatasetException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/attribute/attribute-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/attribute/attribute-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..749881314200da58a1215403edfe6132ad8db735 GIT binary patch literal 23648 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 R*$;y{b;9=eOX5$r{tF^o>HYu! literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/attributeSparse/attributeSparse-cfg.gv b/cfg_generator/test_output/AbstractInstance/attributeSparse/attributeSparse-cfg.gv new file mode 100644 index 00000000..6664a772 --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/attributeSparse/attributeSparse-cfg.gv @@ -0,0 +1,40 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\attributeSparse\attributeSparse +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 1 [label=< + + + + + + + + + + + +
2
88: throw new UnassignedDatasetException( +"DenseInstance doesn't have access to a dataset!");
+
+
>] + 0 [label=< + + + + + + + + + + + +
1
87: m_Dataset == null
+
+
>] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=UnassignedDatasetException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/attributeSparse/attributeSparse-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/attributeSparse/attributeSparse-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..6d30f35a820055317cecfbdd7f61745a12b5c5f5 GIT binary patch literal 23506 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 fbRL1(ox5YwbF!x@m!{_IJvpQR5?)u<=1oH5M literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/classAttribute/classAttribute-cfg.gv b/cfg_generator/test_output/AbstractInstance/classAttribute/classAttribute-cfg.gv new file mode 100644 index 00000000..9629ad58 --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/classAttribute/classAttribute-cfg.gv @@ -0,0 +1,40 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\classAttribute\classAttribute +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 1 [label=< + + + + + + + + + + + +
2
106: throw new UnassignedDatasetException( +"DenseInstance doesn't have access to a dataset!");
+
+
>] + 0 [label=< + + + + + + + + + + + +
1
105: m_Dataset == null
+
+
>] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=UnassignedDatasetException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/classAttribute/classAttribute-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/classAttribute/classAttribute-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..9f92c2d9bb27a14cc585ea97f42552b6887672ed GIT binary patch literal 23768 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 kVOXw13R literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/classIndex/classIndex-cfg.gv b/cfg_generator/test_output/AbstractInstance/classIndex/classIndex-cfg.gv new file mode 100644 index 00000000..cf270796 --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/classIndex/classIndex-cfg.gv @@ -0,0 +1,40 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\classIndex\classIndex +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 1 [label=< + + + + + + + + + + + +
2
125: throw new UnassignedDatasetException( +"DenseInstance doesn't have access to a dataset!");
+
+
>] + 0 [label=< + + + + + + + + + + + +
1
124: m_Dataset == null
+
+
>] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=UnassignedDatasetException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/classIndex/classIndex-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/classIndex/classIndex-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..d9a31cdc5bf4028dff03849a3fcdf2bfebf938eb GIT binary patch literal 23634 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 G%D(}y+kYbf literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/classIsMissing/classIsMissing-cfg.gv b/cfg_generator/test_output/AbstractInstance/classIsMissing/classIsMissing-cfg.gv new file mode 100644 index 00000000..102329e8 --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/classIsMissing/classIsMissing-cfg.gv @@ -0,0 +1,39 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\classIsMissing\classIsMissing +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 1 [label=< + + + + + + + + + + + +
2
143: throw new UnassignedClassException("Class is not set!");
+
+
>] + 0 [label=< + + + + + + + + + + + +
1
142: classIndex() < 0
+
+
>] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=UnassignedClassException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/classIsMissing/classIsMissing-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/classIsMissing/classIsMissing-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..2103abea135c8a197f625cbc29671b14dfc39bde GIT binary patch literal 24256 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

t6b`HazOr<>8f-9fThyJN{?>J~ZGvN*(vQW%J zNSpWszxh|QkwZP_(H<89@q4m%E6eSG6wLJ(QuWb+@eKvHdFs0WtG@=y(6b#}K>b%& z)tYBu?ob56y^gBcM~&r|#%wfm$73pdE9&j)(IQ64v3C~@Q_Z5B0fulj+*C3SW6Qlt(H zCWlPk7zyE_^dn)c@ODSMwDZgW>EKztad-|Qpwk6DrhkMeVOe13shBF(DH~<{bZw1! zcJIRckNA7{N}z|Vj|JY?hjm@nLx+~s%Odz;fNhzb`tXeO2w13h9Ilzdq?CNEcg|HmJB#qx!&D#~Z%eNH7# zvRBgan$|k$cjWrWGlVK41%V3?FluCuq7p{rl@2{cE0aVqWW4%Yas%YFYoQ6P0~+eK zG!y?vsj1YOIk^$YGSADTQU0}K%Zx7yVOWzn1NO?PF&wMF(B5BE@EZM!an5s)l*3f7 z77T5DD)o$>WP&PI3!KoEbL&=qMA6M=A-`dXUgp$j4&S!SeH;WAOFbt6?q4D)> z4G{a28&P(Hh@{{!ph5N=30Tal5vg z9pBn*C43oW8ygc_h?734EPjXcThnZHZ0qp&7dKZoYMMlc82u$GgN~#LavkB8H!o0n z9~DiXq@GGR4XVl=1Rv%S{<83~K7XjoN1~3&DUh^l^T0mVNP-sQ$*OnFpl28z2$tZ7 zgOB#!{FVr6GuxC~UxR4@Q$PVN6oAgmZHO|I{G#u{MYZM23xT=@Xf4@R*4A3>dXAv3 zBWa^QkNp0X`scD0Mc%y3()P4}+zSBq+z-WBa4~%@K}RD1#I`_?A6);P5AEH7bA>OS cfi=&lELFWm=#)X;WoQh_=In8X)y3QY0}X$SKL7v# literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/classValue/classValue-cfg.gv b/cfg_generator/test_output/AbstractInstance/classValue/classValue-cfg.gv new file mode 100644 index 00000000..02b42016 --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/classValue/classValue-cfg.gv @@ -0,0 +1,39 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\classValue\classValue +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 1 [label=< + + + + + + + + + + + +
2
163: throw new UnassignedClassException("Class is not set!");
+
+
>] + 0 [label=< + + + + + + + + + + + +
1
162: classIndex() < 0
+
+
>] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=UnassignedClassException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/classValue/classValue-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/classValue/classValue-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..eef9b5b5a7cc57163da9de65b6da293c630e4168 GIT binary patch literal 24541 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 D!uSN9 literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/dataset/dataset-cfg.gv b/cfg_generator/test_output/AbstractInstance/dataset/dataset-cfg.gv new file mode 100644 index 00000000..f0a25bfa --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/dataset/dataset-cfg.gv @@ -0,0 +1,23 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\dataset\dataset +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 [label=< + + + + + + + + + + + +
1
179: return m_Dataset;
+
+
>] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + start -> 0 [penwidth=2] + 0 -> end [penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/dataset/dataset-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/dataset/dataset-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..6247634818d44dff6b5a2d52b5d338bbff44c987 GIT binary patch literal 12798 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 W)1<2 + + + + + + + + + + + +
2
195: throw new RuntimeException("DenseInstance has access to a dataset!");
+
+>] + 0 [label=< + + + + + + + + + + + +
1
194: m_Dataset != null
+
+
>] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=RuntimeException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/deleteAttributeAt/deleteAttributeAt-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/deleteAttributeAt/deleteAttributeAt-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..c4fc31a8c00f65a045d7a3e19c6d409f62f085b8 GIT binary patch literal 24365 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
  • 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 + + + + + + + + + + + +
    2
    212: throw new UnassignedDatasetException( +"DenseInstance doesn't have access to a dataset!");
    +
    +>] + 0 [label=< + + + + + + + + + + + +
    1
    211: m_Dataset == null
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=UnassignedDatasetException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/enumerateAttributes/enumerateAttributes-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/enumerateAttributes/enumerateAttributes-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..56d1c0de3103095ff4eacd1a8202b0f04ede6d4e GIT binary patch literal 23468 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 z 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 + + + + + + + + + + + +
    2
    232: throw new UnassignedDatasetException( +"DenseInstance doesn't have access to a dataset!");
    +
    +>] + 0 [label=< + + + + + + + + + + + +
    1
    231: m_Dataset == null
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=UnassignedDatasetException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/equalHeaders/equalHeaders-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/equalHeaders/equalHeaders-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..36d264ca01da520ceac01a54ce17d9de6b51a284 GIT binary patch literal 23729 zcmdqJXH-;Kv@W`BTWLk56%fhVDmf@fP9~(uIY%WaIcKV{6>W>8ARt*mas~m3g-DKq zp?d#<_W{N^{mU9Z$su2KxeM2?)v7WitM2QaGw-522VdupyM}* zSX|6<>?7#*Z7pQwDOd``{04)&RQ#lb58jcq-{=|Pt?qT8g*YxU$A7Jtrd??4_JiTN> zs-RX8o%k4`B0lk)dbTS`CeQLXlKOE}mkD8OPn7aKJir|tY>zk|wWy+tihbwI!z3@t zcGr*y5`^d8a`8^}SL9d(NX^qg2rXGKq+l6!HwZzg1! zVF6oxgkSN*xqmmlhh-6W!+%)tOw-NLTk9{Y(H=Y*uy)z}_-(UFPr`VSW!u2v&VUDg zP;72qEd8)AGd)dJYOS5xdfB*bQOxZBjy?Nqg)fDUaTGS49 zCg9$=40rXJs?AA7DUqGgUYGAuGBtBuDx_lce!UEzaYgTmY2?NO7)o%R^xG ze?igp$O2!^D!mhr6|>IwXa6pkjrJeNKiV2bAGDOAiXL|-+vb;V2Mcy)xXU6pUbPG& zYN>OHzW7+%yxlqU?%V;@5PF7|Th-KguYR<}PV&rtQ|(#S>Iu3LbfMjD5w{F_=4KO< z<`M=m(+CGIXYd?#ZX)raaQCRB-0-+WQexW9vhRm>=T?glgTI9edkxVQ>C(`~(>Sv5VhyeP-;a zgcNr~5W($sdiGZ^A@6R1zy7%xDuEXz>~Cx*R__cG@}wp|U$rsrB>GGY(ba5!$Uh)5 z%G4}oWgkwk9)9SbL29STPVx@AsysM1p5H&C^tv;u(-Acp$4XqH z@|$Thjk#(5Ah+#UfY0353&?|k?(Vgkood1;Rf6wYADwF4Ay);po{#Zf^HkV=T`NCC z6G7bPLq>=r`7jS^1My8K1JwO?Dsjf8enTTN``e0nvGP|lWnt(4KGL@f3Y zJ7&j(w65Mfh0KilEalSWeO`@kbmgnrn=}~E5InMPL6hb^rH9AIYdltl4F-Ne+&jGO z5RL_~7ix;rQ4-a%hTh4=#$}cLuIeDy6na#?h(>M1;f%^%EOTv-1&CjVJ9hTnUKXpI zSbmB-}Z@m6!mB%)UDJ(sjYI5oSCnS|hm`5Aq-;iEr2qWwMyKSbZmE-|FzmYlvI*s&g ziN{#i!z5Q>fBWy`<+o&jysv2;kJ z*vLWCWbNBMDp_^6L0c+H(T=7)R$IgGrIIC8_R1r-3AKV(yDa#}@uS~%10zlUJ~Bx( zU^$8=jl=jlI^w1#)<#@S{jH{BC@NUzZI&>&t=l`t*Md>wyBpW2Su4xY0z2SJ=OmPo zcfByBUJVd=r0s`49k*t^Wb+r5o6PE)DH)d@eRlg6JN<*mK7L739m%>{hGgSo@1tm? zxW5zC9!111XL~wgN#;S)9<36pL*YX%W2^2ItUjwv7yWretk4?~xc%-enY~2{EQ4$} z+-;JG+6@wLn6;$43@g5wr^|205fnQR`(L*f)gr?}Jbrdd*$OvRy` zI*lbk12y`j$^X#^`-Pev(f~>ZrAQ-7>KaA2EM8ZqaYt85NYpLn=b#9*gpeZ?G4Ul< za&<=ZPxhpSOU#mUKR)2jD7RNZoP%usgBF%5dLcFX7nK{*h5N)GQ$ttS6TKhR?XXm? z4({BlW+!#sn`4FHdh#8q;6>poGKW)jTXcG&Cd?yxg6zAo_rU&Yq^9NxkUm1Tc`}057pdoIrpM>(kMPR)JntP+tqhtivmGG~L zVkT<`jcr5-#P`*;%8p53k|nU7*7xpx-CX$oa|!=*xbOHz;&Cd`)t9D64>L~TM~jM^ zja*n-X?@?5o)VAZ;zZ>5aj*9a51UToNbSvn65<|OTKC55oAB7f4eVjcl8laNg?Mu> zV%AFbps;0FrqM=zExe}XGduhT(#^kO_rBzNILtE*30*jHg>WpAird`A`ulo3$38iT z>1pc(UUK>r7fPPFPD>&C_H`+^_o>JvgaVy6 z!M78V(|N!Q`il*{cJI?yVq5 zjdF>o$pwDn&D634QmH4FG**�$F@x+i>jt#~{9%$0Jw=QgqT$TfF&fZ$;E_n}vWb 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

    q6byx5wU0^Oj!dr+ON7gmpw@ zC?HDD+kuWJE*FCXE + + + + + + + + + + + +
    2
    250: throw new UnassignedDatasetException( +"DenseInstance doesn't have access to a dataset!");
    +
    +>] + 0 [label=< + + + + + + + + + + + +
    1
    249: m_Dataset == null
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=UnassignedDatasetException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/equalHeadersMsg/equalHeadersMsg-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/equalHeadersMsg/equalHeadersMsg-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..dfc2e6db4f552bbce1fcd251e73b875bf4a23a20 GIT binary patch literal 24129 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%0AnDZG=00<$=21@TCBe?n0WgeBdut8pC*X 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 literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/getRevision/getRevision-cfg.gv b/cfg_generator/test_output/AbstractInstance/getRevision/getRevision-cfg.gv new file mode 100644 index 00000000..b811c2e7 --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/getRevision/getRevision-cfg.gv @@ -0,0 +1,23 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\getRevision\getRevision +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 [label=< + + + + + + + + + + + +
    1
    843: return RevisionUtils.extract("$Revision: 9134 $");
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + start -> 0 [penwidth=2] + 0 -> end [penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/getRevision/getRevision-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/getRevision/getRevision-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..bd2575720697c68800949dee5df109cd6acd0e83 GIT binary patch literal 15626 zcmdVBcT^MI+cr9i0u~fSL}@k<0V#@rbOk{H>AeI*1f&E|2qjcSK}7)(jPy=`(5r;1 z2uPO_LPtPa0)!TN`S$SszIUCq&Ohh;an5(_@lWYD^bii*uG zEnm3mfBni(iR8;NDa%bxNzuzQlPP)LDPLkwEdBlx@*idd*EoGB3 zM}mgjZfbUwQFBw1*4itF$x9vU_SGeJMD3OHZG>W5of71*{&0o60WlXr$T1N|k$RK~ zS$Zdyr4B)TaRFKb5H#6e?t<;jF~Oq9y|!(5(ScG_%<<#Lb-A-XM8|bM7N{uGO)33! zuKSJ>gRz+A<1ZKLOW*0Wp+%VyqQ;`6p0Jb;3MEhNl*5--maWcRlzcJw=D0e`4LKq6 zb_Z;%g!&}sZ#^^hc;Eir;8Q!U_vqX?bhRu#gU2JJnXoW$-Z2cIW#~%0AK=<9F>P3B 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 literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/hasMissingValue/hasMissingValue-cfg.gv b/cfg_generator/test_output/AbstractInstance/hasMissingValue/hasMissingValue-cfg.gv new file mode 100644 index 00000000..f16d977e --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/hasMissingValue/hasMissingValue-cfg.gv @@ -0,0 +1,40 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\hasMissingValue\hasMissingValue +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 1 [label=< + + + + + + + + + + + +
    2
    269: throw new UnassignedDatasetException( +"DenseInstance doesn't have access to a dataset!");
    +
    +
    >] + 0 [label=< + + + + + + + + + + + +
    1
    268: m_Dataset == null
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=UnassignedDatasetException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/hasMissingValue/hasMissingValue-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/hasMissingValue/hasMissingValue-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..1725f0267ddc172f25aafac0ddf35edb97db548e GIT binary patch literal 24164 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 literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/insertAttributeAt/insertAttributeAt-cfg.gv b/cfg_generator/test_output/AbstractInstance/insertAttributeAt/insertAttributeAt-cfg.gv new file mode 100644 index 00000000..6b900fdb --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/insertAttributeAt/insertAttributeAt-cfg.gv @@ -0,0 +1,39 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\insertAttributeAt\insertAttributeAt +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 1 [label=< + + + + + + + + + + + +
    2
    297: throw new RuntimeException("DenseInstance has accesss to a dataset!");
    +
    +
    >] + 0 [label=< + + + + + + + + + + + +
    1
    296: m_Dataset != null
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=RuntimeException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/insertAttributeAt/insertAttributeAt-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/insertAttributeAt/insertAttributeAt-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..2dc0694fa999eba6b2818d2106515b268aac410d GIT binary patch literal 24999 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 + + + + + + + + + + + +
    1
    347: return isMissing(att.index());
    +
    +>] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + start -> 0 [penwidth=2] + 0 -> end [penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/isMissing/isMissing-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/isMissing/isMissing-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..833a0c9ba5dc4ed2fa43c7c0dde2fb9754275ad8 GIT binary patch literal 14206 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 + + + + + + + + + + + +
    3
    334: return false;
    +
    +>] + 1 [label=< + + + + + + + + + + + +
    2
    332: return true;
    +
    +
    >] + 0 [label=< + + + + + + + + + + + +
    1
    331: Utils.isMissingValue(valueSparse(indexOfIndex))
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 2 [label=false fontsize=22 penwidth=2] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 2 -> end [penwidth=2] + 1 -> end [penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/isMissingSparse/isMissingSparse-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/isMissingSparse/isMissingSparse-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..798601b9dd13f93805d949094e0a22955eb0da68 GIT binary patch literal 28795 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 literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/numClasses/numClasses-cfg.gv b/cfg_generator/test_output/AbstractInstance/numClasses/numClasses-cfg.gv new file mode 100644 index 00000000..ab7ad8cc --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/numClasses/numClasses-cfg.gv @@ -0,0 +1,40 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\numClasses\numClasses +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 1 [label=< + + + + + + + + + + + +
    2
    363: throw new UnassignedDatasetException( +"DenseInstance doesn't have access to a dataset!");
    +
    +
    >] + 0 [label=< + + + + + + + + + + + +
    1
    362: m_Dataset == null
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=UnassignedDatasetException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/numClasses/numClasses-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/numClasses/numClasses-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..8cc35533ab3e998f30fadba89ca5e77f40ec16ff GIT binary patch literal 23902 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%0Di4JQxqb+ih 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

  • $xZE(fx{!dsKRJTgZ`*%+ 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 s1-Gli>A + + + + + + + + + + + +
    5
    614: throw new IllegalArgumentException("Attribute isn't relation-valued!");
    +
    +>] + 3 [label=< + + + + + + + + + + + +
    4
    612: return att.relation((int) value(attIndex));
    +
    +
    >] + 2 [label=< + + + + + + + + + + + +
    3
    610: return null;
    +
    +
    >] + 1 [label=< + + + + + + + + + + + +
    2
    609: isMissing(attIndex)
    +
    +
    >] + 0 [label=< + + + + + + + + + + + +
    1
    607: int attIndex = att.index();
    +608: att.isRelationValued()
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 1 -> 3 [label=false fontsize=22 penwidth=2] + 1 -> 2 [label=true fontsize=22 penwidth=2] + 0 -> 4 [label=false fontsize=22 penwidth=2] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 3 -> end [penwidth=2] + 2 -> end [penwidth=2] + 4 -> end [label=IllegalArgumentException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/relationalValue/relationalValue-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/relationalValue/relationalValue-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..48ab0ab6b237075a24615fe6d262d299b9089c11 GIT binary patch literal 71370 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≥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
    PjE#rV!e66X3`4k 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 + + + + + + + + + + + +
    2
    383: throw new UnassignedClassException("Class is not set!");
    +
    +>] + 0 [label=< + + + + + + + + + + + +
    1
    382: classIndex() < 0
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=UnassignedClassException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/setClassMissing/setClassMissing-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/setClassMissing/setClassMissing-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..5589de0dfaecd9406e3801686cada40e114b44c3 GIT binary patch literal 24445 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 Fe*yJrE4lyx literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/setClassValue/setClassValue-cfg.gv b/cfg_generator/test_output/AbstractInstance/setClassValue/setClassValue-cfg.gv new file mode 100644 index 00000000..3bf681f4 --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/setClassValue/setClassValue-cfg.gv @@ -0,0 +1,39 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\setClassValue\setClassValue +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 1 [label=< + + + + + + + + + + + +
    2
    426: throw new UnassignedClassException("Class is not set!");
    +
    +
    >] + 0 [label=< + + + + + + + + + + + +
    1
    425: classIndex() < 0
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=UnassignedClassException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/setClassValue/setClassValue-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/setClassValue/setClassValue-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1bb92203f272576164564bbedfc0391820b261 GIT binary patch literal 24570 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 Q4f(*x!0bxdWw*Qk0iMYVvj6}9 literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/setDataset/setDataset-cfg.gv b/cfg_generator/test_output/AbstractInstance/setDataset/setDataset-cfg.gv new file mode 100644 index 00000000..56d76fb6 --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/setDataset/setDataset-cfg.gv @@ -0,0 +1,23 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\setDataset\setDataset +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 [label=< + + + + + + + + + + + +
    1
    442: m_Dataset = instances;
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + start -> 0 [penwidth=2] + 0 -> end [penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/setDataset/setDataset-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/setDataset/setDataset-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..8f69d8929766113adfb87bf2e3f02e120e6bb49f GIT binary patch literal 12876 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 literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/setMissing/setMissing-cfg.gv b/cfg_generator/test_output/AbstractInstance/setMissing/setMissing-cfg.gv new file mode 100644 index 00000000..613478a3 --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/setMissing/setMissing-cfg.gv @@ -0,0 +1,23 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\setMissing\setMissing +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 [label=< + + + + + + + + + + + +
    1
    467: setMissing(att.index());
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + start -> 0 [penwidth=2] + 0 -> end [penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/setMissing/setMissing-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/setMissing/setMissing-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..4bdf4bea5a40ac77cd9947eb63e14c7f0504f07f GIT binary patch literal 13729 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 + + + + + + + + + + + +
    2
    546: throw new IllegalArgumentException( +"Attribute neither nominal nor string!");
    +
    +>] + 0 [label=< + + + + + + + + + + + +
    1
    545: !att.isNominal() && !att.isString()
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=IllegalArgumentException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/setValue/setValue-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/setValue/setValue-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..a5dfe418e118f131d59717bb5ab8faf8fed5dbbc GIT binary patch literal 24235 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

    YRB(FSB*Y#9c_&mWU62+NaUQB*Y(XMzR46fy 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 E4*}99lK=n! literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/toString/toString-cfg.gv b/cfg_generator/test_output/AbstractInstance/toString/toString-cfg.gv new file mode 100644 index 00000000..5e03f9e7 --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/toString/toString-cfg.gv @@ -0,0 +1,23 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\toString\toString +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 [label=< + + + + + + + + + + + +
    1
    792: return toString(att.index(), afterDecimalPoint);
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + start -> 0 [penwidth=2] + 0 -> end [penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/toString/toString-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/toString/toString-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..4376246eb139b3000ebf1fb7fa599bcef7efc5f5 GIT binary patch literal 15621 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 + + + + + + + + + + + +
    3
    692: return text.toString();
    +
    +>] + 1 [label=< + + + + + + + + + + + +
    2
    688: text.append(",{" + Utils.doubleToString(m_Weight, afterDecimalPoint) ++ "}");
    +
    +
    >] + 0 [label=< + + + + + + + + + + + +
    1
    685: StringBuffer text = new StringBuffer(toStringNoWeight(afterDecimalPoint));
    +687: m_Weight != 1.0
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 1 -> 2 [label="" fontsize=22 penwidth=2] + 0 -> 2 [label=false fontsize=22 penwidth=2] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 2 -> end [penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/toStringMaxDecimalDigits/toStringMaxDecimalDigits-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/toStringMaxDecimalDigits/toStringMaxDecimalDigits-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..d269cdbc18dd37b7619a7d3312c6f8579be7f971 GIT binary patch literal 50421 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�o3Qa^x>9 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

    =@Dfj$V)nwyRxS@@kH zj)WoY)_W%`JT>?=uPMSD1sr7D?9HXahe9Pa5z!bGqRDRqRjUz26rhca6+I0c)udxV zBZOXRI#E(Y1BCzQ+6>cO`dV6F)*iCSZG%OeKG-H8B|-~%-$6Pek9;*PymYi>wLvdH zK%JJ|-7E83`1=adxC0Whw3q2DK7d&zs?<#|>^X18rS((EuG6uDQq~#T)aPmi+T1pC$i2}qzG&KA4WqDm zj~_l%X8iA~$8Dk=y=gb7)gGI319Sm=xmm@W(Z*~A0l5OSBey{ZfuRJeOk3r9a6l`F zp;ZOkoRiEC;-PKTEP~qW0HQ*Ze-#}c3_Za4Rad|Oyq=JOfn)mwNrIQs`c-gKEAf<= zpH#H&SRQ2o(5%zW{;w z8lYev*f@A}B)&!e8{;6nZT|BV6`Zq@`hU4B+%Z+LPPsWhGHGt*>R_}%<|*QvAa26ba^s;~i7xWZuX zb8UzJWOA0c`lN#up57fDYyeAVH8(THIQA%-?3{ilYzC9YO@!MPY7u6nFa2s@Zgzma z$&5Nn>3HARViTK5vYta-Df#e7~5mras zWqLed2OUX7yB~=WA-E)*FQNgb%;ZM`dK#hdP2*kAki1--fL3H`>^8vWwK=w?Obbm*XYaDRo;ik-8N3Og$xuXKLd=_xE$yO@ab1Q?%yA^f&muf*9G6xOMB+d3bnG z2(~vr8`+->8JX|)a2(A6GSP3q-C0kb9F~SOWDu(#f5eGF>HNtb{eSUQ;4`kIM)D%* zSvrqm5PW$qIw(R!W5IAfM!C&$ZqyQZIlEPVbH>LaAm|c2@~#LZ+L~HtFCYW8A1dZ; z!#Uc9_tM}zNlYCAAUK+!;Bh^*;LO`zMZ}bIEEHd6L-QemV-BsVtN^wJ)HPLSCa0#_ z(B0sLikr983=|1ShQ6@PM~(xJLNN`COBBwr_%Hr8*sF?Gzb<8R_xW|K3f2r3tGI~F zQYEsc4R&#h`d-x;6i5aNAeqw!5-i`lPLC!BMpIRXL=y|?Y-VK9yozDQ5Th7`4gw?4!}+%p zTaHk2vt_d#o|T}YPom)yWnbq&TYPY%cGn2hZzdDQzq-pw$Nf|2({zU!d59%L_=rBF zM3Ib*LQay0fE^DHKoO^(E{xyf%T3icY8$2wz&l}cXd~<_V}V;|x>3ql&uLa|g}^$z zNG`NPZ~=b{bo{B#n+WV-i;FX8 zKYY-K0zA|huj6)6PNhsi9Jx7t9h$4Q8HJ(9?0*tT9n*(TZ7@BIm+FK0gb)AVzYDX* zc=6vwPifh$RlJ8@L2Of_Uxa@jkQEYR=%6lN#5C~;O^jYs&q+FPF{FA0>9DC>!Ef$m z&FcWiqeUU$BuP7EC~eNl8~4iFY=>YGuVLsL>R)>g@%9eE2ffsAV$EpHWfB&epE`Qe zb5h-7yi_0j|L7;pr+}8wx4O|!aWDKC)Su-Y9UYf0TjrNFuQ42LN@=(L7ZlA6z#Wd@ zDDALD4U1w~@ORlLorz~OB)N5qh^)A;xNPZCI(-KTV&VM!qq;zrleue8&igDo{|w5T z(AA41Mm36(Gkf4z5vUHIIdg`K>tS>>4>m2GFvP_L@a{@`;-x z{>Hh5Z{G?Z?V!Ig2`_;^4k&_0%%HAt>>f7E(6A~Bn*clI5d>v0x>mpcURh614=q{( zxkG*lce9}3hgWnlWL-KvA*;z~1$>w7U_*HoJY$9u;z4|65M5&tD0i%c)RDL&Ou^&h zt3cHC0EJZKC_D;Qi7obR=cOknsF+XG1AGHBGscU?jy$r+QL+f=bi{J)ybauRKY&9h zTW^8qla~h~msO_8cw)-d+#F1xLYIh?5M@#H?*u+#{7FBa9W*b{Geve=b_-qQDC;*_=IH=Lx<9QJr@>hK2x`6$JJbE$SQL!c z|8+mb{$sxn$4xL9=o}sm{xxwL@%l{^LYzqhCqw+=x6gm{kPE{aL<8a;1U~d1I*&Ia2fw7js_A| z(zs#TtQ@dt*Ksfv=%6NT9CnJSLIGUf)zy_-LBwJTUpo#m&+720<}NM;UqrAsNZtKu z-s~g}+7U{}#lz@)GU;z`_mD08H0?R#&T(-wK(HgWy0NDwe(h`HoU@-l{siRzU+HPd zHCZ8WEmvS~O0)C<@3W#fGa6(YnHC%s^)A;LG{#KZ@j*J4t3G!$h3=qToaRr1L=sMu zf*D;D@7libK5xc9|Kb8HS`-1vHp1;;jN4LMaZ-CWxZXElgqEkFx5N_}4grObPV$k; zG(u)Yhk&A7o&WpEc_W3=FgO#CdclSd%()r50LPrzhm(kzJ2>P))ZoC^02-I7|wkQuF?@L7_9xE(855X zS{8IdERA$xt^I}1{(XaJFaaUs#^RxUI8@#T>B8mVqgrwm*DzDWG(WNZbt#>h$q=yb z{xgS$)dtEn&qJiJD#)7C?RAv+ZF)0I)FZC)Mdz+MO}BC4)F@Qu%-(X?vQ zz&`YWm%3Z4FWXFgI+v?)XV@EY?Wa-LDL~^?1UMw)VW+^1_NHUCU`$^0QL8Pq6UY@{ zha%cC?C+r63Ew#Ub*`(avtD#)t|*IBE3rGOPDVG&W7vOtSsL-Bc-cLalg(N9qw)ls zTbB5z;6srba=Py)0F^#&w1C*ImGe$f=PkcV&J3&S+fXAhuszBTv%Y+D4Y^ z2ZMWEtWUPy&9t0B|Bzv2{rTUzZ7+_mjNW)~l(8>_H?CwddKD()xYE7$6O_*Gfw=-% zE^t(MvAT(e!o}t30S?P139!)8hdZ0r1cmwQ)oFa;PwgezNn&DR`)N9e9>b77f_~6t zbL`Cc97k<#UY;B^iJ}Vc&WZL9j+TC)cH4S3r#=C3VsA`W+Qdsd_Ip&;<8ex&VPoeU zoSR>>Wt7(l{R6{ySUcQ_iwRKcG>3FK+8upS^#(L?YMxo4%w_O$MzED- zV|dcEb+lH~snOQK(W?g4JXztmnN7g$y8HUrUADCDWSLzbhcj(UrjS%@tPgArE8eh3 z@B;H~;LI`2r)kP-ZR%L{ui=!HI*7AlAkbfkJ#=&NhJ9fn19$*Y=ng8qP(2$N_lF=> z9dSe=JNXJeeE4uq2K#^2wX1Cl6ee~VWUCrHG!OmqO|6Hc;VIN_&@`=tB+osjYfo_8 zADpXdW&LJL1`OL|>RGPsz4Ig{z_SxVqovo~9ZN6O+-kq;e)v`GB2?n3RXk+eJJw zzWzM@`u3@UL**(vq)Qep+n9efP($$_cUPG4Xcb;<5<78HH}1TT*-l-i6I(v;ozG|s zJmb2l*z(7)+YinqGCzo_5xotj;aHEs?*_ByMRhrSj8Db-g9ziT9NaIfai%G*pLgQ0 zb6c^GtU1mkv%84FxQjXX(|BWhUI6wE;yt5uGyvNe!RYOc5yEj&V9R57LK1F+m^p$n zI=qpYnNGFfz^>s4yO$?a56RgL%*<4mE*9&9tUN8AfwZH`NrgiGhO1@T?J?Hi*trr@ z*cn5PM{#k1e&-Ly8C}C zT1Hr2Xvm`T9>3R-QMOjed&er=FhlKe3t~F-lCCx?kF*4C^p^>x1;SLe8ir@hrqDzC z<>dwa*Nd9tE{G|L#B$Kib<7TkD;+GJ2(jt$C#{oD(xIz0fAW=}sSen9*rOD{iKhLa zerv^2-{Fm&UbBXiGbxBpp^W5#oYRT39#<>y!=$^e-9yS~?k>iYe7h8FIBXbc6^y4fyoDPWl zJoq$y@hu?tIC$;F6~kzDsDFV23BF{xDWjfj1Buq>A;o&TZSX`dQ}3{wqv+4&U%D)O zI{bC(^qbaKN0BrrJTXk|$p1xAw04#a7!EaF_-HwTZClFrx#Mim0a>@~xAHSz8T42F zDUl~v0buUMOu@@IXxy*IFcSR&OZ`uu#|!Y}0VDy?sq9ko9`bcNPc{ME$8aY?eE~PV z#Z*HV9us-Y-4R)bjdXV9t5*@pLt{T@zdM+g#{n@fBKo=yOaMR34gYAF>L?3)H6$$=ldgMrXBqCB7uJYDZ zPu@DeLC*LI+Grml?**@rFIxZ0@tb2RrNM_>`V_Z z3+QAA#A9eIzHE;6GOmYTbN-3Z^Ln~*ZaOVFSvl&}pET^G00AY4l~^ULxh$VRc;$7< z>2j6+3hY7UV$OuDD@Y(aCmvG9WE3F0!c79hxC&H8VuD|O&;W8m1lWy{%opaF%xkcv zKr4|uIc4y>E;2;iO#!sy#6MaaY3b;^Kle2iP#!|a53x*7=gB#Xy~|3*I^aF`FHoBp zrSqV^4$af2oohb7Rugp85^OVX(wKUL5D(|DdT-k(Qr&F}!(ISig}BeTYDC%i1jTKz zzll(zyX;?z`X;YeE)M|TN-d&hcx>jlrDB|ARE^uEA{69DB)c6F5QriWAzgl%0q9Pz zWZu@z#Eu8mKf=va=7Gu+_wq+kWVyMxh`{IanA{nJav@f?qa5gq#kr7`r#t5I zzzeKN_0t-AePLsGsagz+Xl3fb=sXk*-2IQ5xWe@wtJLBJL2Y(hW%k5`koFjG0r=@7 zwt4F_$`GkVLTa~cnt9uoLAA5NWwR%GGs4PU)Osb#=agcq7mOuLy}Ih!l8t_B z?KnDowNBxwm)W~}0_Y?uI7#8=T&#i*smqry=Rxk8pW?$JkGy2L(7?-Qym{034*2SG zYUfpIEaIEw0?h?d@~+nki@Xx3vv_#%dLL($g_5yxS3te|gI_J$Q9 z;`sDr9ezLS?C@O(+o%GGL;Fe?dPN#yq%(K_6QG>}04ty9G_cAG$QUB}BkUi*q$<2$ zbPleALi{+BU@-L2c_8QzNCu&r63_deh{!})Rdlq`%T%;o-hdF0WwR*-==doia#sRY zI<;U>sr_B%!zWI`3)Z#&xTTJMvn*^~%?tj8u??(+oTaX2+I-X!3Ay{P_8K9GK z2`MC-ppB-le-X15F9baekuM+VjctGJMX2iGqepl4nNwOAaAR)=B*Zt>x7O0&XIRu;(P)P4*?B?!e2p^fB(TboCm^2YMh;q_tDJ< zFw~j-bOCG-Vf7QZDVtLCa2Oe#nuha>?A};2B0^ys!rx*Q>7av8kV)H;F%xRn!uOhH z_dY1e#0CQ>;LD(KCe2GJmMv$Lp6XC!Zlg1&Ns@1G(^jZuBS|m>MaV{j!Hp_gN;8jx z?r?xI1oC;zP?gyCJA)_1;M{4Xs0pS>1eRJ+PP}WA6_tVFLvdEe)66gN_H;UF=q#OM z0_i^v5PHJeO6bY-CmEI3#!dd(D;aS|H3&oj{EW=%$Z@6FQVGGdO?oK}jc= zo@WcUbZpl#ScSK`o$116eV%QF^Dtl0`4wme%W0j;u}5!Fi8j=RfS~$-756-w%4i?+ zin4ln=$9Jn8M~m3s$(Qp%f$t2PRDAWehQWqz-LmwD-)o44Pf{JY8(SbNPnqLo!?-Q zz;5<~8#T{66W+)eg>sq$hFeqW zA*sHG#z6Z*!|Bs4jEii(iF@8vAPE7S>G2{tZ#p?}kPdOG9F~)@>Mbzbwq1OC{CnS^ zO?1@qF|{OawI$^~B}(O+20PydTlM#5*bl!7j%cjUPU2~qo6C`#{ZJ_9vBK%YPZY3^ zUy&QXLYlQwM}rCLWZJ~2Hm#$>c<3yE!EeFL1R;Wp?TWOT;F>~ZO!w!g@eXkn=dQc|5EU?nwetdmH~f_vMpKS2iKYC z9*T=<2<+V+7stBL^N?6*#GSncL9zRP@8)XzEFY=AkjI3-?ey1|xgF**@( zRGH)Vtqs$o(G^n(Z?w)P3?z-_t;lO-yMOD}uO*P{q}RIrB*k|FCvtiK=Xo?PHdxXa zwka*s;!J%`Xrp`bQTHF%SKA-G&n9Nx{&s2Cq44UDkMkS-Q&k*y_Gy;aOYo=pJyJ>& zT;Vv7-Y!y-RqY&A7PF{2ro-76-|ut&=+taq zN9EgmliVeHS(102PspA9eAayKRMzz&ubQY6EH^o&bR+iN^!4}muXLLK((%6gj4$Qk z<=qcei>LRt=sc|YQ*C7NK$L9$)Mk7AXU)y;m5UzT?R$98QEk+uC;o||$^n0OclSaW zu|s!w4yviD-s-lW|FYPQ&2aQ?`5m2|{1+{f?>Rk_-#O6|c}ZnO%};X^Zfs&Uy`zD( zPtxxniz`)2`RKaiv%971Tf+xFd>0QT1K=~3WSjq@Gkhi3i64ZKgjeJ2h3FM>)2dsq zXz|-#h`lJ&qI6GkZFQx^fs7~G-M@5eNjW|_#32!vsB%+NUjC2i>1pNt^KNR_);%;A z@j4C;8Q2Q3tfI!RAI16a-nhHg(pIk4>XD(OR?43`fAVb=Jm`7bQ!?CDx6heaPpF ztsZan?U0vGU3;sfB3f>{3b;C_4vK;R{L+?t{*&qdqzU-?2+7^CEB)&ul}3b23+0Sr zO?#rFH%j<%K9)1-pRv)bIHJN=%(r;y((UZ?6;&p|&a{lVH7LfPM0&0sp6lFR_v&C$ zwUK(e=0k^FHhUxY9=I9V;_TQ1mPPc&`5}5<@C^XvNs=1Q$RNYScq&)?+-u4D9oF1LMsSI*2wYp{;EuxpMwP+CP(^^7!6;-fVGuS~;q2R2aot4HrhYrQg_h zaJ^~cq^aa|-$@ys{0O+MilALs-*NkakIC4__d&s8NBc+KA1tymWf9V@`6gIho1tUuJXsv`_a!_N zaiS4ZdbCj9w3@5ZWbnQ`nINtNwsgnzv+cnfQ~ImVE2^mMWXJH(>(C896tO=9E&OBY z+qfb1>j!QMvqv5AT?`!K&{L^lH@$(F5Ybek5&5UHp=83WweEeiw(9;{2r0A`1k9*U*RU0G| zoaaU}J4R0=n>C1>$6+TAk{EY{n_)~|yvC6u(Xf(V#!ksqA3h^*uaUm5eEsnV(E(N) zpChvaihlR*)qU2U|4jNqT9&F&P(kOLv(259t*p1b%huN2cRXTv^5&PAY0(KqrM8^! z_4@Rc^enMz7cXW`U!Jas)LexNJc)i19AEHc>)o(03rQjx;T7`h_c!j#ynJzCp!eaP z1tUw<3R9O>Z<~L^hd*cq?DD(N+x%dMPE!Ehk>Bsh0kH1`P^ou%vI&ODdC@VVhnY;w6greuc!vUKfe@Z{^ubEg; z$X~WH`kk?%-^|`ou`ayN@0)+*bqBsgzS>#k`uw7b{V}fMPlkr9HxAFw)Q4=wEkz9t z4{Pe`KD~C3P15Pe$FZx|op&7ZUCjZpK*!51)13!9`b%o>ma8Y9AE~>3_D+jpRp;s8 zky+7!qZ^tsFFuO44SU!ga7sbVTKP||ftwnK_8syQO?%oBeA+jL|%8D|@iX)7OVHl-mmu%{_a)!`?!D)nd-lDDWeM`P z;OgoXOKjoN18`&ja4JefM1)irXPTtBqPvAJfcSLVu4qJ($gmt$%RezyrR$JZYyRKj z$zlVq!jut}yt0`)CUUO!3|luHXHu=_*Cgv{j4H<4f7UJ5DwdW>tV!U25A+=_H2Y*a zj9*+{BB|Un2rPc#CFJf;pV&jJ(K;+N^bZn4gKQ9V?wn=PK6ksOidQ^j$B+v;Vk=B* z8qmhlM!FHsK5v{bL8u97f7BQ^tctXbFj-3YD}8_Z4AYEX(IzG8lvQGzkwvunlf7|> z=xJxi^bsC=fJKgFH55ZbPWJ-i4T*m$DnshNeBg6q^VqW2RO zwYJ>%ZwyYcvm2a9nQtrM7G4Px+{rSKxS5?KP}yLx-~Q1B`7%^%zrp&RM}(JWUzVa@ zYrQU3zBs<#!ojlYr|6#{B^Zd|6#-9ioE@p5OJWqtQ=P;33|gweDYea(hnCZqy4qHw zXIZpluB_m7Sil(p8m)ozptr3v8puThU&|T9eNtg(VJFQ^hUe>B*V*X*fj}xOU|Z29 zZ|X6Edy37R<9mU@%(54Lr>HKfej4# zSg-=BbdHfXIftik%!F;v1&DfPqp7o27mK4;452{lG;iB z&HlXU0CF#;Y<7fB2hIv~JW~kL$hk5f=m=5(&MqkorP;I|Wi4hi!Cl~{$VtiAIdrbe z0ba`mQP$7}&rx}0B*U74LZi^_Pc)K) zdY-pS)om6{k_suBRb&;DucIuzWC!`WtDccbK!Q$ny^%xlNdhiv1)Q#XxD z{eA1Zt?pC_zu%w&2QP1?5>Nu$b${g*;#6k!)Pj#fF zrORxGbZ527<6mrI?sE0(o>j|ac=O5^3?mjFHZ?Wvh`6+JPXUx~LWSlXu8?)r-%)e! zDzL6!9KBT~dF`Jli7Y9dcqPbT1e#Mj#OVVr%?CFg3|~LIFx+~~tK;!y(^e^iB^5GT45T>~~6q#APCN{hd+H2u7*er>J-gI9qLrHyXO{8J5JmN4yJCDXCq$ zm-r=MIX=sDA7dN_`@sWge%j##CP7JA`TwH|Oodi(eKKoeYO1(Q)7G&qL`42)lQTFx zQ0H%m)!XPk$f-xo@&9Tby~*=~3W@HhVLWqGM14O9l27h?9WgG@9T}Y2aAbCr z6eV;2u$;_$HLy9pLTOZX0#NpOe*5R0&K3f$j0MiFgRzq0ecYN7o$Fk4{7q^N=r_N~ zJJ)_U(Y_`-i(624NKIcKEJ%p(#}5r5E*m*`A4H58!?|TV(b1}z!#ysG&%c+>Ro7Oe zz1Sb&MBPxH^7)@xpw5*yKVkfs`2v>(phF1(+Dn5$((FLt^bs|_Z%drj-hrprcTG;Y z8I2W%l+BY+9v8^R5vNT@O%uZOEY0G6)KY{p5J9UGsDuHxKYZ}8FgL%}<}Op}Ja<(r z@jrbg${$mUlG=l6vGzE`K)SRmdEF(yJ4e6ZHPa3atPP03cdU&w&>m8N>*+bArluyi z9xOrA>)xjDS_ob&yU-C zs50~9)pBqlPH};7OH&UB*uTy!IO{Y3?is0DY>qX=nw0l1xYDLMCU|D)U%g7DvE0xM z1Hx);J)zcisNa{hRkcR5=r|BQ#r0YRMU~2c7pR!C&5ZRTp?S$(u3?jNaw=kCejseV zehF7U>TrJGSNvmov|&upn*{>SiBOd_l2B9o*n!tNTs3dY{^G?rg+Dr%f?IxqB!;f; z6%!X{QBOw$x + + + + + + + + + + + +
    1
    807: return value(att.index());
    +
    +>] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + start -> 0 [penwidth=2] + 0 -> end [penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/value/value-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/value/value-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..8e7c5862af6f59225acc5f22956d8e3664354c78 GIT binary patch literal 13748 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 dg{(CSq + + + + + + + + + + + +
    1
    822: return m_AttValues[indexOfIndex];
    +
    +>] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + start -> 0 [penwidth=2] + 0 -> end [penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/valueSparse/valueSparse-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/valueSparse/valueSparse-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..f77c3f3ed2109b10fd218272bd1a44326d4656c5 GIT binary patch literal 14420 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 + + + + + + + + + + + +
    1
    833: return m_Weight;
    +
    +>] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + start -> 0 [penwidth=2] + 0 -> end [penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/weight/weight-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/weight/weight-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..7c7f17acd09ac0bac0294ec46ba926597d91c4e8 GIT binary patch literal 12971 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 + + + + + + + + + + + +
    4
    11: a++;
    +12: b--;
    +13: System.out.println(i);
    +
    +>] + 2 [label=< + + + + + + + + + + + +
    3
    8: a>6
    +
    +
    >] + 0 [label=< + + + + + + + + + + + +
    1
    4: int a=0;
    +5: int b=10;
    +6: int i =0
    +
    +
    >] + 1 [label=< + + + + + + + + + + + +
    2
    6: i<10
    +
    +
    >] + 4 [label=< + + + + + + + + + + + +
    5
    6: i++
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 3 -> 4 [label="" fontsize=22 penwidth=2] + 2 -> 3 [label=false fontsize=22 penwidth=2] + 0 -> 1 [label="" fontsize=22 penwidth=2] + 1 -> 2 [label=true fontsize=22 penwidth=2] + 4 -> 1 [label="" fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 1 -> end [label=false penwidth=2] + 2 -> end [label=true penwidth=2] +} diff --git a/cfg_generator/test_output/break/main/main-cfg.gv.png b/cfg_generator/test_output/break/main/main-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..61e988db32d97501f238ef32d7ab05c752d5d8e9 GIT binary patch literal 49463 zcmdSB2UJySvn{w$f`EXCh@uD*L_k0#XH<}!lVl78$r;HAA|e7xl$=3w&RJ9>Ne0O% zIp>_Z*4FcP-`oG_`+B^7qwgDsage?D+UpBdvu4ezZ~4m0iV@(Ea<`KiV7tma!>h1^x}x~i;&)g#)C28_nEZu zA}o=4ST9j_!o%X0Op!OgfAclJt>&vC)n!>^EYq@uXM^8Sa=nIaAsjRASS!bYIcjLh z9v_BuTZBIIH2g-@h}2`DP#y|5VbrMGl5cu3;4hx}`FUkEwX~;=0duRr8hGs&KL%VA z$e4Q%zbv5%8qnfTbTPiPv9-nLHk4 zR*R83SlC|B&HWW{zk&m^8ko7~E+Slu*pwaGrZ>r8YZwQlUyhFRN^8TLd%C zI_#wSu3(9Q^5|F7bxq+Kb5UxM3O8ws;nw1aQn*~X);5DZK^(W%X|c1L&Jkt|FnkWm9wXNQ zC)f39`oW_qbL~rR30J$XN=iz05pWF)4`5-Dp*#X+>t3E_WMS#UcYkruq@_P&jPA&G z>O?D@i9(HWe(>i6fyx_?{js(0iaU(il`dB-uxLBYrKmP~ zi6X{gOI2K4?6g0ZRy^rV$LsdH?0BQ^q{mLEN;Z7VvfMPr^J!Q~w!QgidM)!&)TsNK z>(bGTj!gOUw{F|3?d;FHXfua?UcvmzkmOJRMT-!9(LpQ&sYKHkeHZk!#G#f zUnj&l3_G%&{z5eh+7)*1Tn%dvC#AAq7CUwxNTK24taw7wk~!ll{S z&LoXIy_eHMg1Q3xoAT=NsWJT}vL zruD)Xv{0zCR)@P*0^2{II{o&gXP@6!Xnt}10hyNd%ies?AHFNHv%QYF^KyYF68+ll zF=5AU=`1z7Phh-0=<(_`22i}MpKgtav~IsJvbISv-xJ}JGT8iKs-y1L>8+^Au~|SB zC#wO!`Qh@y-u#Y-t;qNYtB>~=kR_Jc8BOLR8-8wg^{GqAJe$DW3q@aC-~EP_lR85D zr3w1gW*qnu{90z+zqf$USNE#GnDd9pRiCtKW%jaloaX50=;<{naIz5~jE~`VJ1olyEY}&T z8A#PVI#Qc=6C?`R>+Zq{o41fUPPL=V>HegUlojBms^@zOg<2A^w=WS)KNKOV*`}J} zL@CBes=N}oFTo(eYxVn8uT=*gve|<#S!;Ih%L#5JpD!S>T@#lb!F%;Xn|C3WY()WF ze0_cW|NO!_=F-tbITOL&U=_Ix8?usIyyS4V?I2ZFoor?fP1|4IWEvDW%ynl0AMWKO zCf;uudz8Z$Tkd6T@^Y^BV~*?yFS3UPym%UKJYn+hotMjJZ09~o>BpIt@=E&j933uK zteuoANa;LEOcD!3zDyWqPW8t1V5yXmg`scK8I~jEfnN-1=4l+lPszz&=5HEdAb50d zaVlI_^}FNs3f?*6%p_Z*$43peQ_O1fJ5ufzb{C3J2+B~YZuj5yuQE@r*j_ZY3&Ac? zF;ntnPI%xiuwC0|yo6(-p4vf(c+Qz8Ce8guUpQ#80<2!UXB~?9T;T&0qTq9qrgYu> zKsS*zg%}`adb`kxR;9xdVTGrrj&hD?mM0Hx8wXUem4-4|;gU2ir?Q zvZR^9KUE5)_6j#b^`zvF7hTLU2U8nz8VJHphfIgfb2Zhjxy9;9t-3{orLW6Xs`udYXe67#kIQsBDRI@wwaf=mv2yM@UFqtBx*{j{-J1^lXrJpJ zH>>(D$yM)fbwRu#$y@8-M2yO_2QaUPDJz`UZu{g!`^0Quj5fXAoFH7LOqz(*y-a3h zr;p9TaqK~m)2nTHQ;jUz^xvUxv3F9LCA*j8hL?|AAl5mV57~^a5B8ls?x@tYSUNT+ z?Y+}+7QLDo5bAjy*PjW0TW<|pP9NzWUr^|OSUh)xJ%nTOZTK=ljs4><=}*mdV|L~* z@9dme`gLUU#6EFnRL|!3F0LK!+!MRA>|SUaobS(#BP=JJ`{F=In?XD0?W}8* z_bOh@D3FsGL%da187^&K$MW-XCSbtFY z5MBY^rqx_y#hr?b{9KZcTe~kqUBG z)$3DhU44_x)qUN$HekzT ze}l1&IW+Uf)RBgxLisnIZ*!?}!#(4pl&r`3v~y&gwep_K_mExKq4F_N%I)QD-K;z1dZhi>fq|XB=U{KYU~5!}OXXeEl_A|x$88Gjt5*4`(hBIDYrQ+WUj_}<*DO+zQ;C|Bj%Y8ziM%?9%%Mk?$Ic?mT<5R)2w*?7%ax`d>p@R|+&N&0cThRJc+!*aPPMe`wI z#37f2$7)=+zD&r?W@A~*6{^IkQ=~oMF4}n?E90sfoF?73IoF;2uec;WPm!)s^Q8RR z$*$Fw-=ZPJ(((~=0fC9vKHKi_rxo(~X8e||C_}d-2!f6C;@o2B5tZlG z9%~>x$hhWHrvTQD(PB?N+=Q!UVB6m;@w%5z z7F*60Q?(YIB;B#{ZVzh$uJIe&WyO~|4HyeNa~B_^&py&)p6a7Q*o@x$prG^mtv}@Z z^KzPZU0)~W_!sahb_`USux)OBaS*HNj*_cQ=Zbyt;D}{0Eu~gBVq(vmS8xMYJZpXfh3jqz~ zMIq#-)h>9Db*;rsTCA2YKcD*`OX3`%DZHvMoyxQ^mt6yj(m6~(SK$3}pPSVfKN80wi`Ur=2Upfp&zQf^S zO_J9M@2AS;Dk+=k*3OQE2iXCyQD}nt(q(7Ff$`?ej_!8;Z2tu=#wX8S-8ixg%879F z|Ge*`PLbOdK*^UAIJzsI8J?p$RT+whkKdg|+17QMh`;Wg84jAld1;iI$AqzHXCUbW z4$(E`9(U0>yhhTByUWe?R(f9`{ZrnvPZ88O{*ZC3l|q9PV6-06RB_!%Z$vqDUho~yqXzm0KlfKzDuCbox zf>4cE)t(z7ms}bQK5NZWKk?b<1!u+{!v)$@XwZEJ`?u@EZRoBB4Y1si`Rq z&3x4>oaPu!JWK{l&wwm!{`*TBUO=4ft*T_>$Od^{Sb4#NP`$yw%}`9#7^~{ulC5To!%b{I94eDJ8}5IT$;Pm@geVrP;5H zW((Lk+k)3!tX4C6^l6`HHrJ1(LOlFzg~+d8zsT=Cdy|-$$ZkC;zO_PmX!4TS1)+y^ zGXWHQsSQ3v3qSLpMsk>hjXEtbODLL|Wjk%nr@ViEF2?E0u|MeoeFY_>>x~rEjU*4Zh3M6+~@?))8J>F|($~CoYGbo%JaTrsH6LdWl zL_~2K8R>58_YX8%ha2r&PDc}gLguS`9Q|4k%Dvn30q0P=()aIs@;WRJ|2_x~4nF#b zO+kvjNc!aXh?In+JJI>U{rl`sznvALzb}TCjs$zV)CZb^>6!TXhufcb5TnHrxwemY z9*k5vSZoW1(bwssH!96(XE{4vDUH)nF7TRw?Lu}b_Dy15a%4qU%cl(tDF}UF%Shwd zXN~@Bta;6zf%ogzoK7)QxU2MkK4(5s!BK&E{njmMt`S=$50V5L^k&r>nTFYadv|$$ zu-L?-JO1yBZ~XmxMai^nzx69AD&7+J3V4O=`nA7 zEo605-+%o0Gb736WeLJ(P_@1R0ewIntK;bD=+w!uDX`JY;ooMk5jJ@J!E2+#-L;Fb z6i5_BxlO630_;;qwHa8E+hQX2Gp-h{>sJ0S@LKklFCv*q@m_flg-d&{12q^xELA3o zvu*y;EERHl)NMSe3-IedSsB`Jjp8^>f5t;d$$X0GuaNXG#_AR`$^o$J>@k14qCEZ3NInd%mA|o>Z zY#|#~`4rL;&=Q%wN4vu}m^z4961D5cXT(sX|dvk-VB-P*6u*UA^@; zxhELEu*c-g3=pcD5EkIuRh5+|cZwToN}hM$kWf@sR!-VEOTnugwE4@25}TIf&=0u; z6%rcy{QLXs&pD5uIq-6$Q(c0Jgh`;5=p^YPBp9~#yRft`_o z`z7WhjB{gj+ot^es<}ENzgMv8Tc*w1#w1awWB0FLze-9=o2r!0y@9D(TU-CA&<;0D z?W7cX0A`YxmseQheq`e9?Hwd5;4-DotDvl$JURKSErzdurhMY}Z)FXQ!Ew;xi{HL` zXKGtz)7w>beCQfK^?PE1P6C8mGdCgxI#-kEq{3$Dh4v)s8qJzaQ*4d3jbYEc?CO=$ zWJ77&qPW^;$`|b`r+>r@jhhe?6T4j@qEJHDf^MrQD10z4`}I2B?Nh6HY1~?IYV%t8 z?{QqrQ%EEf`t<3Oe0!`wy9Sk&q>PL|WMjcM`m0N}gnjp0&R!+-k(83s+^l%_?j5JU z&o~+j52<*0HLR?xn4P+6vnz><)I>!^!RWd@vGCbntm+{tq5tTDpHJ%znMhg*nPn?Y zO--h`u_5mS*QZGQ!j#t1icVIl!lsAsYaLQGIH020JU}Y7qs9<#u{cje~%Xo zdUn<*B_)L;ih+Yeh0x~#78X{JZ0JBi!Ck-y=M`Lh{Ee0pW8lCUSy?@YdmC3mhT*-o zI3eAEfdT&jO%08C0mZU(oZfT%2#>h*&7hEhle6!@(bP1{q1r;JU&C5E==}NfRfYLL z69-GoqIU9Lr@r#>F=+~-8!R*o1c(Z|rJk7Zzy|>X&B$<8-Q`jm|0Vm%i!557*4M28 zs=!p!b8=*1Y%=CE(-BrbT3Whk0{MT3o31hk%wwU7aK*L~X$l5R4`X)NkQY#A-h+3o zv~qY}K`bTyvYnkBBLjnifk7&$UZ)m8nn!iK>grP5S{w+r9tuD+?8tFT?yLY0)hCF! z{y$H&G5-MY&}GW<@^ZJ!?SD{ss#>#U&enK)abR?1K$0a~3eXcKzI80Caj*~Ays{G% z7ncj@D3l_qiH1rKm;iTc`9ApZYOn z%^)D4&A`CmKT1MLnVXe$%fQMDQT0(m>si%yyfMuHxT2!oVDY{AgIVDFy$h-`dH){M z$;FVn1j1ctCBV9yo0}E?)KC%7O6)Jyr^f`0d;1n|CHR=RToqPjWJ(YAgprAfZ^G5a z#wIj6dhw|0SoWORFY9s$89jPjo`Zvfg`>_TBlH^UznH++f|3PY_t~8S4gIZTWZEwG zdp;NQ3qZ1L4@!Ll17pAi#N5Ncp0zX1k&(@meulIrNxvlwCR#1p4}QyT(0U2JNFoTT zFc+>|$%L2KYRF25mf+T2*4a}7{_$>)W##15o;{mXcc9@OYH(!UTMdO;nxygmJ)ZXB z-b}RvQ>`NZwxyOaK~#LhO%@i_Cr=XPq(sDk!lwTG`ADK`xZLKbAT%7J<)cR*X=B#- zGTgKCzE{Ym{L>4NC*PHhlLoAcE{3tHsj11|V59Y2$&|y2;}TqJH)K}oNLiJcp56&4 zSw-gz^THUgOGp{>%UyXe!9O(Zc)TEnHdV9x^#WWfDk?}+qJ6$JSR8r#v1fauQHH5w zj*6;kY<}efrKz&=9f5G^Aa>_%Q)XO9!B(mMyb!XQ4U5%ny@mP>VB+p~SydM-D zIth#Ft*{gxS;Hx};#j(?hlXy^_-MK!Auj$N9X)>2)<0bxuMe8k&KQ5Z^}vA8C+X`> zWD%W~vnXN&)Cma*Aqm~=oX)23X7CM}pyV4nWm}7=Ujr;>`;ZJyF9E>EczL*7webvZ zz3L&FcLVx5tgePlf?~IzHTM{_(?nb4MMC3fSck6~?bzSH%I1KpCHmC1k{W z=bGPwCHLQM18|akv*GU2#`WmPY5U5ks=i?p0SFaE?k8>lcnmZ&4}?zk+BNwnA|oQw zcXwY@Z~Wl1=8Zwar4~eoOL-AP-L>uCzl%$>QFiE+4i#Jex*r-6aub3)gfbW}2zo}= z&pl^!E%}Gym^F%KwSFgEj(&!XG9r<^dwLLp)mpm@33t<3h!GU&+1Xnx-5w|CU~noP z0uHbkH|#Ti)4FL6!{tCQ?NFs~%6DJgL$Jtb#2M z>z;ddqaTI-l6YXRot>RP7XWJ`?>_*EwZ}l$bt|-&crdH1>`@STh$azy?>#T<^!RwH zj{Nbb$aRNVSy|EmK5!k_Nh$9S9!+#$82s|@0>cox=<0^_2?55DUc5-IVD9(!EpT{! zyLX%eMbCq285kKeI-Oq=QZP#FuQm{!4#GV~hn_%4B)|Y+c0H*O2pTc|1_BlgbRb9p zg5P3L`27DC42BC&-;?T};0(>=*=jUy6LbAn1mF!YoD-Lkk;z=YUWR7&!G9t)109_x z_;ho7yPB4kmREMVv5ASRpt-DUKp3-T>gML=MQtWV#x5Z2A>rZl65z>7K$^e?$g4Qn z*b3{-iDD_vXjGgQQ7VsAa?k2>=_$2aP?a#YJ}R6UobS!lj3KUXnBH!zp+%u4NXf{U z?%e5Q9ny?QEGkk4j@$hGdq<4JX!@s5H!WU5U_-u~c2D0d=RZaQ1pR$-_$zrXkdiX+ z@Tf!ORbathCpMz9@T=~n@|M}En){MtX5Uq|Z5Q0AGTDAiD5{SfP@1<9X5bSreUMlXF41!(j z1EfEV1tq`p@1-f!{|#Gz(UB9Aghq1+I~v8tp%B@BaI@DZ#m5T+=~fjH5%K7b;cMSf zR#51i@9xVAii{kbT}cAZ<8xS6Ha5<{Y8sb9JH*W!Hy%Rv^)?{D-15*2{MXvXhEC%7 z^XL9GHOyjLlE%0D<{Fnd?Xv0m$yjx6Nx%og+6{jX^|LQCCmj+nC|H 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%0DBNbP==^Oow4ZQNMm)sJ+HO*f}jGMkNaW z1Q0KQ`i0wH*c8lNEX!B(LdcS8bvW5!(wOgJoJ?VN;s$MB<+L=a+FE%bAwbMqo}R&i z9WkwJ?YRMODD@kOi*#ycj%!maEX_X}4dilRsyzMt!m6wsv~r8#7xx6t0f6DA%8d{2 z9j(u;y``lp%dVV}ZxNI)xx2n}flGu2;1ZZw4NCoN_ilmGkB`RFd`&%Q(4&qOl*1Uv zHjW+2o!b@Ml0^@)LUf}q0$i2gcwI&=+)Q%ErzCCmePqdAC0DDeR?hhOEs_#=WFXh! zgj7W`cIqSMWEvT#nYaFibP#>PR7N;y=g%*qLdKo^d?X?EnB|O!sg9*5ZXWB(^`6~b z_acEkUyw}>Ht|<`d;3^wV=5CwpGP4oI&i21Un)^_FC?9H_iW;^a6QRPwujb@W3Kfk zu+y^`U2^EPYm+)@Rdevck;7X#`c7ELAgjZdn@}D%cEs`SvVvv7m(x2TTn{vey^}zT zSuc%LgERw`gM;PuX2VB-#gK%ux$fe{@<+po5n?G*h359?u0)w16Mj|sdK)KsvnU7d z|A0OK(&{w*_0I!iiif<{9(9z1W+kaV59oN&ghgzATU-irdeqIp#%SBsu+k=|`;A5Oxnx}>2=!C8E* zNHb|d%qzGjv(F#4pR{_hC+Sw5oJ^$Ixx3f=Lt`ASE2y>qxXsCtEkDXttW{edbCT^9 oe&9E^xnz*3pYctuphP{%nrBFi{k}Z+SNX3dBy!T>iSgP00;cXZdjJ3c literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/dowhile/main/main-cfg.gv b/cfg_generator/test_output/dowhile/main/main-cfg.gv new file mode 100644 index 00000000..dd31278c --- /dev/null +++ b/cfg_generator/test_output/dowhile/main/main-cfg.gv @@ -0,0 +1,73 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\dowhile\main\main +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 3 [label=< + + + + + + + + + + + +
    4
    9: c++;
    +
    +
    >] + 1 [label=< + + + + + + + + + + + +
    2
    5: System.out.println(i);
    +6: i++;
    +
    +
    >] + 0 [label=< + + + + + + + + + + + +
    1
    3: int i = 0;
    +
    +
    >] + 2 [label=< + + + + + + + + + + + +
    3
    8: i < 5
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 1 -> 2 [label="" fontsize=22 penwidth=2] + 0 -> 1 [label="" fontsize=22 penwidth=2] + 2 -> 1 [label=true fontsize=22 penwidth=2] + 2 -> 3 [label=false fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 3 -> end [penwidth=2] +} diff --git a/cfg_generator/test_output/dowhile/main/main-cfg.gv.png b/cfg_generator/test_output/dowhile/main/main-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..74f501eb5058c9349de8a4a503f1d48dfc1ce866 GIT binary patch literal 22647 zcmc$`1zePE+b2AvBZv%2C?GImpp+n?AR!?Vf`Bx`peP+mH%JR2DheVU(jna-Dj?n6 zCCJd->@hy?y}#XWzu$iQ?!NDSJoj_oIL=&gUgvon|2pT@Lq!=1GI}xu0zn~rUrGgm zAoztq5ECE?;T1Gvup#`1^ohKT6yg~FzqrbjPy~VnAuDzFkz>@th=;4{=E(8!_Cz>R zg6s)7HThcN!}bi4s3KmeKpkm?o`JBiU~-3+ysf>~mH|aUi{Y=82MP}=hkx^z(H6hR z9q6>S@MiN$jArS7Lt&D9U`+C5BK(#4mAHV1zqUgXbFY|uE?Az9N($L;i7cL;j@ov* ze5tLfO?cTRp=8980P)tyvzG)Ro{82Z5a;!xL0n=;vLoeGi@M!4FyQpN zIYK_1t5lZ@?Ng(F?uP!i04i2e3VJ^4>0j_BN@h`A+!F#TV)g>tql4Y8tu3Mxry1`! zu6%n*bU{XV!G6Et?A11RTY+D+eiY0CmIoz1K0dEBl%j6i{C<7@rizM6@`Ff$r@!8Q zRXO^*%vS`6QKB{Ji10D?YbyLb$4F(d~)SR`O^gj8XK}XvOk%@3YJ$3)$Nt z6&{n{UTu%MEqB(+dy`Upj^TAXs@Prs-4ZEiHOk+oo46Tz?^xpN#WSr@x7Qolb1HTw zgSf5S2HZPE9e<5q>r;vd*RBW}pun-j^ zDq5 zCVnjSRiX+WPvzcxM%(e;uGql@rR7A7O?}jDhvo>I{U|Dfd&ZhQf3}sDM=Bgbp0$m( zxSU`kvR-P~{ViDS)WliL7MSo@EkKr-{i%?{(y*1s{!mJ@Ql-nz$TUMJovTev#eviO zN~*i-^ugR_Szqz7q09c#*0rwWJCF9-18LZ~$`^REa1skFnrQ#7Kf0C9oB3icy??B^ zG;{S=9q5!k-M))UaDHw())DS;w6;|^Boj=(IZi}LOGg*Ncv}URfFeh#Z>Yf|&ha?J z$uu(U?hMzHSCx*p`Y$m?-_ph$q1vd&@gF;m>q*v|Ziyh;xIgCQx)B z?^)9}^TCnuaz*}*OVG0Wv}NUm%@fP4voan#Ib!C!yJ6Q0hf-TRsl z9;G;YI97S=fOB^^ywI29XfOT!192An`|%Hp-FtbPLwy!)4J~Qf7`vH|8m1VkgflgP zqmH{X;m1=t#~ruhY-T=xG%5aKf_d{aOGn$oZY+ni{KWC^-LYZ&Aq(wr@3|k+nyAmM zt*s}R9Q7OCU+&^f5jp(bl^dQe5l}GH*=+SWh3k{^{$jD%&bT)nw_bPIMXB@7naGz- zGmSc*i>C@NjJY2Tt*_0RU=;foT_4ZpEbaGv*P+eM(P{G`AP&)&{yOTmJ#yKBL) zL65`novpT%CCB*$+@#qMR$fl7vy4%Sz>7vi*!^JVfMk8-$4K&(t^oGJJDh6l%(unT zH6KlgF1lOnn@!b+^p!ErU8o6Ux)t5Z&}p^vwEb$x;Y{v3jm@za_riZ{?r?@sp8at& zc%Z>G?)B{xji>mq<#u(>&Nij!!FY$5*kG)x8uD>~;0FtKm$BWW%CU;@B_tuMCe<%h zC6Pj>_22tu%gp?iA9@Rot-5!VDUZgyxvO@bJbU(~w@|$A9GQ6W*3!uS7lx{h&8yY! z_1+G~n4mZ2&d#bMtadPe$2vQoJU`8y#G*M7JG7|xyvb`@cnn);L!-g5*tlqaJpDWN zwROng?x3RH`JLK_h=cvZWshpJ*=(A&Y!=}Pwm|FUwj~P_ORZ}6N;qN4T<-UfAUbZv z7@^y{><#Q0FeQQ%)!Z`Xqcz5EA8bt!5Y0t@V^}`9lM9!gctIxk%e^e}j+}CLTaEhi z3pz#S9c8FFsv0se_tL#^6YK+q@H>h)i4C)b?%cj-dfQDs)!qMkgVl27_9(j!wm~-{ z%?|DCVAhePqc=MF{8j-Mahc@T??Z1c2!9}Gtah6jyI9(F+Dsj05$?gM;DD1kufm6ZH*AIS*YZ2b={(=8vxn`o5YD`Sdw}bing5Mp7QqSa+cymb^9RqXTNPJiEg6SAQ@Rnn zt^9r32d+%k9F_Z0zm`t7%(h{dJ7pM`RWY)*wVmu?_1i0Ab7}8;kMFFQsE5^XWsFSl zvE4j2oD1{5|H>0YO&~WcJxVUU3byTpjGSyY zHRQzZwQ!R^T}-1J&)*JJZ7j&oUy%rS?Dsf`jP4{_TcE&EolO_Bvl;7-sdO_R%f;Fs zs61#Jcj%yFt$SVKxH@@)*%kHD4IPNe-0^xzbb<`cW#4$Pd#8}xsnNbM|I*Cw4=lye zAB6tIX>(et(I2Pv+|+`6<#L z<7n@;C?VF|mYLr(5&^T->lL#o_fL;C-}+C>H-&R?Vz1|(D^;xaa9(*^!+LL{9;+sf z@Gjs&>?N=@&aulhQK%cdQby)x+m0|b#pF=C&4keur}}T9Zx6VyMGKA&RJ&FG{Jyue zk=CVAi>pq5@3o|_u+4hY`qgB`Q-(tr zyK?)guQs-mb2{q7ye_NecKUa(Di%bKr|3)s!BHZsUDx+o*0=)%xtyYMe|~xw*)iOn zxuq9t=~h;6?#8<>i~d<1d5nprHgL7#9u~+sO2kF)_D=@mzSX83t+V4`+m5DND_NjR_n*Q1^C{ z8`bI?$d>O;(-2|m&am0vjDP}MefY;JoTAcvw8BZ7j&KC6InknjWBT`W)tWBlNW)vc zKEZvi1)&hRO_;><$9<8#L2b!rqs+zrlrO^3;FcxQYcf`=hSUo!{&ap}mD$2E=lEiY z*$>#bxZG1Vqb18J8%$R;*gc-56_hY?Z7#v(!k}4|9}BdRjb$Gdp(Zkh#gE zrbJxgwA%uI?T|Ty#v_+~^)4O!(%IXt8!-zIOf4QWb(XK35cDcHs|Xp?vl2e2n>gk; zYO50T?f;>a|E+q!#)y(paAkt-a#Zz)loe5`hM?D_#$)l*k# zKPxO*R9?3~dCYm_L3DI`e7XF1bUPX4f>hrrwwY~>w5r;D-1NgHthu9%c4T)yxmwI_ zRyC(;Z{CZ9ydayzS?X(oj+6Ylo|W5Sn#Udf9bUzOgJA$n2jhdx&DHMi7>j6pkv(T1 zUEHh`sZ{N-=fQk{g#sEr=Du9aTy;Frr6iJNhi>Qgq8X8slhfX=#_4GtHUg9=%$DZH zPe7f`BCOakE+eN(8>bxy&w{XYy;ZpS_;6Y5_*mq4Y19GU>EeIvUQ+h8te{{c#--wF zAOVJ_E|5vLF(DiY+3wW-kks5=v_MUj6o){5rA}&<-q3`ZguIt8TLJX_FN{9To$); zL}GS#4mNh7_DiH+yid&T#sB1IK(NQ)PW16XYg_fvI-UE*_gZpZk1A<@p*Dx3qlq!G z;)BxVk>g6S!&M~>-50*SG-%Ts)Shn-0p;zs9*&(CbQ|_KTK3QrVHc=w6)IbvJLWi! z-5wm0B#Fa65Vy&ojMtMwn}+7cp%8g4D*iIMQ|CTk=MGK4QSzTXTqOZ z-6NkCNdtiGw(HIcCDUFF^YKdkKyi!S)^y&hW7_UE%|Gq$dRe*e97y2Uv#{l}W=dk4 z8`BM;h1p2u*ZRK1fRjDOYffakWaZPfRjvCwBsVK{lqH}T`(Nl!DG4r(Gy~AaR6}+fa0eiJkG*LnhpM8R&-CPa54Esm>+;_I^V@lvbgh{F!;}#nkE%`m z^_pG5w&RH(V!9QMJYr8Nt|8U$7Xb%JiE%ewmyhITezE(2L~vxSMJE}Lwi2qw+m|GB zj<$OG%&=m>HH2R~+}ZH<=jG)s;3DJk)tAR%FW)^XyM4n$ZhTIs*$5D-*r0DQ|C}(JnjmepGtn- zlB_^m>go>nm&E_@KYjDm*}!v5+q<%R05Z>5zUZ~v8kU)jTE6|4wskoT@3ti#7cl3R zk1W+ll3rC(iisB5PmZ+w40J71EC17*KqRYXd@g`(hfyb^u`0I{luUQ*7y4Jv)-Rsk ze|7fi!t#LF?QL043T_5xt?&Ilz*(>UysB_N>g}gbpWeUcwfWuL5PH?7@{uvLEcen8 z%apD^_T_@+{VVN~lqbmpI^UzeY)}3 z%V^i*pxy(|QRur*5Cd@xIn6A3$6~PHo0X!pGJaNEQ%#o2yv}m}6p469vO2Yy!A?yh4$7~3pndi68oINWnEPN;`^nCmqK)c`z!UEsb2x{W$ z$)W>8LaJxNbjn=#Zr%)i#dUdk4swtd9OCnvO4XHl&c}&v1jv&qkF0D`WXlDvkgqudK zj$yCQ@qD)|#=7s$(5sUW-wUBBvj?I!2J{FM?z(7(WmSu}A!grb#eIu?ftX{KBxo;( zxpMOCmHtJ0^iMSnjNRnVS9iThO)%6bq=@?52#{=RYioeEPEJYJH-KwVuP`2Q>l7&r z$$9ESNo5Yq;{Ls_gq}}boo4El+}F-#$-li47DJBW+*xa+lvakZlzGDlu;0ykZ{rVC z&Glt+DW;lv{{%K%Urt+7Q&-tr(X^Z#Y?p@5X%U zj~*Fg$USc))c+q|BE5+~WDAbe^W2Y3O;$N&>b6B#*ktIP3j{1%s7xy9*Mx@ze~0=% zZ7d?bFZ=DOP(NE4uOT9p+QvqM=7K4C{usnDK#^jG&7WSZjNi@5cxwP9NIN`Em^gzu zFrgV#uI5iX+H{>7lK!V3C@J-ok?lObaZZ;jyjN|b=jd=B>WsMG&PC0`ht$sw_cmeD z!Qtk#-P{g4zsNVBupMp%kadJy1QZS zvdP)o+hZ`8Q@V|!-{Goe`7_hfUfg2T)*z04@xveW1g=S2gNimQE30amAhE-^c&Lzz z(-hWDVn=^}f9j}(g#|x-F#PqP`j=OmxV})ddxycI4C874hNq_H=C(r7mc>JVYy|`a z$j}_LO=Whtf^0=38cvnK1_usknkieZ+Glbcf7#ruU?*#8YU<=v+VC`CjEvH&ka?iw z#nfkhGv1pwDM-Ch-}P@iH8d0u6eLH>$;%hwkMoA{c7okWk<^?VItfP=wU3`afBy6- zHB?Nood`aDjf3NLNXWK!>d|X6W#xCYG)_ZB7LmP|i6^Z~)w6X=%?EhL{H<+l6Bux!RgOrIxgGA}d{8`8@9W@COm06OR7Z+9LVRVlv=k@Dr zLPeWMYthiA8B-Gz_~+=GaBeeg4Q6bv3m@)1GwEA_IX)P(aJAXBrXYxcT|c z&d&7obRU$OnpzMoC!B3HQ&&Z0@@Qf9j|eu)udIHF`1qOSxc%u1LYG9F9&*orUmPkv zp-TBAcEgF3NBrlKEqe$o;K4y{w3Lla{s+=%#gt{?#{94FVo_1=%{2KDJ1wmU4OVpJ z)x#y8Ov2@CX7{*HmOU4oGY^%YJ)7D1)72xn{QC9lg$47Bp22znqKzpZ)U|8Zc6WDU za$0G*^*DS|Q&Zno$%s=TdynpmEN$6pbJEIdYk%(BiPKF>OT#R`e+7WX?D%6;R8(y2 zSVzZWK6+mi&m9WY-f)e1avD!X!>qeD#AY7hA3i+N)8pE6)z3Dnp$sOmG^+6;kw8|5 zs#yp`?wEJdh<}w(_{=AZJCpEZVIbcZ6~o<92J&T;5s9aMZ3=5lPfw3FU4lcOo=X-g zAuFq88*PVgHmsPlwy*SkA96E%`uOn+NGx>B%vJ(;<#%Df9e`qs;Z1DgU6=^neSLks zy;m+@Ho^Q#={|cxTU*=KajdwvOQ=g*(__4SQk;u)Tt zn$pqHiFKSjsZ=Du&o8q2^X$ybOch;8t|rI)ZnFeXhl<{4O)n?|QM)-uoNJX}2YrG7&sQL1S^({sU3X02@FKg3z1w468gQN?p z<#pY8u2RShfBpQ=>L6i&+9?vm|9TCpyOwpt&&RhgR*l77-)q#rkt$YBSotd0Ko1?BPZ7gic3K@q5IEHu?MGY?AA4KqVi>@n=anvEzQaL@~fJ4bKiw zrW0fc3K+1%z3EUT;4L^?p~^52_d6|%DK7{;`Uliu><6AXjJXvruK}J`p>e+VRif{J zY3=4|M6>}LqRbuu-_M^?n+5D@5)$75rGt%>`dCd|e?v3g3<@y_h9-TNq1Yr{w|%4U zJL+^{2R?cTA63>LEHHtqJtLtIb7!|bUNSJj7(<0eb5aCt#^QJH5~PtGCe{bC0Ze@v zanpzlJ?f0h(#kh9!JLLZLDPZe=T}qy(A%q?MNZ%>a34qL8FvHe$tDp((=qYu9jiou zZ0Hpe-4iHcyhUc9j`%kuhwsC*gPERwets}3ebYW5n_60)-Mi%Z9LcGP!{Lf8M}!`K z_qm~VmS^6_#*0S$md~9Kes=Z@Sc8mTq|V&DNZ>AY#2)xQ zIvS&@YLGtwTovJL^0t=*nbGq(EbMow8B`tGAXGw8kpO_%@-jqRINwrknQnGLLBagI zDX=j6@)1i1s94Y}PziBy-%JZlb(jzvUUfBlYfapOf`W9kv~~6M8S?K#Lz|kKS`711 z3F+x_UGs=ILB7+y0NRsMQuev9Rj#Ehngmi;gS`vCer;d2E+jJJqi5AQjkq5dq(v~I zRb(E~dl@1A%a%TK-ZmrBvP>2yfna$mMA6%a^%yZ1xQZ{%NQ95VzEftEE|M}ieM?5Dh&uB4hYHkLh9Wi&=je_JB;~QwFJsBFH93nPi zs+=>$j#fi7vb4Y0(IDEd3X!RYHavRt=x6(NPvewuef|iA+qZ8+57TSX(bncmJArV1 zKvy#_i0?-YPlc?f1MW!^h;y49&wOlnnhtF+HFag*SVl(12S?y3+F4Sco^0w6LQ6yQ zVvWW#HSxvQu<-Em^7;yPM8|zPm;xwyq&nj5Ykd+#!+-cM)Wt&=4h9<<8bF<5y5snK zhb-_lNH$Nu`^QD64vsGXKK90TU!HtS6#jLX4{>!2YcQUrib8v0)m4ck5>O8 z3IM!napEj`gEpc*7(@-+3jT1m^?PO5sy`dpoLA9f7LcS{`Gb zzw$cw{}8|a`#;VSj0e05oso8>x}2Px{QUfZ3HQx=4fEC1)$K8pIv(IA{g`-L(&g@@ zzp1XJmFD`cFEYm=Q$3^MsR{#MgaU0)?Tqzp#?z(DG(VI0&3ZF2<@Pg;AI}UGXmY^O zN=r*$YQTCwTn+I6pm*s--{H$i`*Lrr&Y_X9u`yCdgg$@3{Onc54ekDpj&~nEbcY*0 zxDwi9>NfpOrn9Td7d8Kc_WD0r004osL0<|A9=Y))c@S99uR@TBI>-Bq= zaqH4Oos?VYvDOZ?45vu7%8~qPz9{I^`&)~uf>OW)+6K&v;JJQDPHwc=8Ze5b0TkWC zDkfH)ntFe!%Jsr+>r2Ds?UAYOjT2m>riGScRh4vZZQwrB={d$%R*EpH)iQZ)+CcZ8 zxGxk`d(r24scseJ=B@8N4gj^ux4Aa1z}ZWJ1S1qG-9y8}!(HlfQ0Hp)t^v^1);8sh zxX#WF3+mvv{_>|5!?xo}Xulf0dI#wl891w0pTFnTJ3O7HEsc%4TL6 zU4J$*#|0bR9JJNdlSLoFbhmRI0D>YYsG*_ZQePQav_r_QB-P=P_S+>qw=#2<>v=rKCEw zdx^PFMt^Di$brfUe92CBh1qAWCuo>eQ*72&NLWZnz+!OvwmR9$o0ESIp|y)xz_Ep* z6{|D&1qCy3k2Ey)M-ux|Brs$7?fFi9c4g#rg_qjua|#R9TBw!G;1Xg!k60EjYgm|W z>~L9GTAp5eb`APVcD6c}BBd+s$Yj+`ZPC7b%&4QIW5U5{{LW(8cD7P`=rR-L*pZrs z#_o`ABXdgjd`|BH*QwuyWDi}L8LZ6A$X9ZvirumE)yjRGcx!9o4pRf|@~rfv(|>Zl~ZTE_sowk1fUT)!_C9RQIb*3*pDU9D_+Ud`rI(Gqcnt zI#gx1r-s2mxvZp3_h4|vt}n$%W4#J-jfVLH>!!B0wvG}-xaxPaJ#6gk>n_t1S~bfO z)j4V_ZQaX~X#Q-jQ_q{Hi`}{Bne)G$u*vn;|Ck2nD7TcxI!^W&^X*w^xplMKLtApA zoa|mJbAMEJn#2}UZzjoK?dq_&U;NX7Ziy>aJZEZV$$nP;&~?vp=_qq{j{gtmaLv5V zD~)53UtvVuQ=6~Lw#QPy?PmGq!i8!wu2Avy1syB3_Q=T*aaXdZjI;FB$ z;LIr)*%EVfzt7iHe807Fb7fz7RXD0oZM?-LcQ|No<4`o|NMwC)&QDm=Ej;6xOs{ge zir9=-Ii9dm;u zV~}}c|Lqu6�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. + */ + +/* + * DenseInstance.java + * Copyright (C) 1999-2012 University of Waikato, Hamilton, New Zealand + * + */ + +package weka.core; + +import java.io.Serializable; +import java.util.Enumeration; + +/** + * Abstract class providing common functionality for the original instance + * implementations. + * + * @author Eibe Frank (eibe@cs.waikato.ac.nz) + * @version $Revision: 9134 $ + */ +public abstract class AbstractInstance implements Instance, Serializable, + RevisionHandler { + + /** for serialization */ + static final long serialVersionUID = 1482635194499365155L; + + /** + * The dataset the instance has access to. Null if the instance doesn't have + * access to any dataset. Only if an instance has access to a dataset, it + * knows about the actual attribute types. + */ + protected/* @spec_public@ */Instances m_Dataset; + + /** The instance's attribute values. */ + protected/* @spec_public non_null@ */double[] m_AttValues; + + /** The instance's weight. */ + protected double m_Weight; + + /** Default max number of digits after the decimal point for numeric values */ + public static int s_numericAfterDecimalPoint = 6; + + /** + * Returns the attribute with the given index. + * + * @param index the attribute's index + * @return the attribute at the given position + * @throws UnassignedDatasetException if instance doesn't have access to a + * dataset + */ + // @ requires m_Dataset != null; + @Override + public/* @pure@ */Attribute attribute(int index) { + + if (m_Dataset == null) { + throw new UnassignedDatasetException( + "DenseInstance doesn't have access to a dataset!"); + } + return m_Dataset.attribute(index); + } + + /** + * Returns the attribute with the given index in the sparse representation. + * + * @param indexOfIndex the index of the attribute's index + * @return the attribute at the given position + * @throws UnassignedDatasetException if instance doesn't have access to a + * dataset + */ + // @ requires m_Dataset != null; + @Override + public/* @pure@ */Attribute attributeSparse(int indexOfIndex) { + + if (m_Dataset == null) { + throw new UnassignedDatasetException( + "DenseInstance doesn't have access to a dataset!"); + } + return m_Dataset.attribute(index(indexOfIndex)); + } + + /** + * Returns class attribute. + * + * @return the class attribute + * @throws UnassignedDatasetException if the class is not set or the instance + * doesn't have access to a dataset + */ + // @ requires m_Dataset != null; + @Override + public/* @pure@ */Attribute classAttribute() { + + if (m_Dataset == null) { + throw new UnassignedDatasetException( + "DenseInstance doesn't have access to a dataset!"); + } + return m_Dataset.classAttribute(); + } + + /** + * Returns the class attribute's index. + * + * @return the class index as an integer + * @throws UnassignedDatasetException if instance doesn't have access to a + * dataset + */ + // @ requires m_Dataset != null; + // @ ensures \result == m_Dataset.classIndex(); + @Override + public/* @pure@ */int classIndex() { + + if (m_Dataset == null) { + throw new UnassignedDatasetException( + "DenseInstance doesn't have access to a dataset!"); + } + return m_Dataset.classIndex(); + } + + /** + * Tests if an instance's class is missing. + * + * @return true if the instance's class is missing + * @throws UnassignedClassException if the class is not set or the instance + * doesn't have access to a dataset + */ + // @ requires classIndex() >= 0; + @Override + public/* @pure@ */boolean classIsMissing() { + + if (classIndex() < 0) { + throw new UnassignedClassException("Class is not set!"); + } + return isMissing(classIndex()); + } + + /** + * Returns an instance's class value in internal format. (ie. as a + * floating-point number) + * + * @return the corresponding value as a double (If the corresponding attribute + * is nominal (or a string) then it returns the value's index as a + * double). + * @throws UnassignedClassException if the class is not set or the instance + * doesn't have access to a dataset + */ + // @ requires classIndex() >= 0; + @Override + public/* @pure@ */double classValue() { + + if (classIndex() < 0) { + throw new UnassignedClassException("Class is not set!"); + } + return value(classIndex()); + } + + /** + * Returns the dataset this instance has access to. (ie. obtains information + * about attribute types from) Null if the instance doesn't have access to a + * dataset. + * + * @return the dataset the instance has accesss to + */ + // @ ensures \result == m_Dataset; + @Override + public/* @pure@ */Instances dataset() { + + return m_Dataset; + } + + /** + * Deletes an attribute at the given position (0 to numAttributes() - 1). Only + * succeeds if the instance does not have access to any dataset because + * otherwise inconsistencies could be introduced. + * + * @param position the attribute's position + * @throws RuntimeException if the instance has access to a dataset + */ + // @ requires m_Dataset != null; + @Override + public void deleteAttributeAt(int position) { + + if (m_Dataset != null) { + throw new RuntimeException("DenseInstance has access to a dataset!"); + } + forceDeleteAttributeAt(position); + } + + /** + * Returns an enumeration of all the attributes. + * + * @return enumeration of all the attributes + * @throws UnassignedDatasetException if the instance doesn't have access to a + * dataset + */ + // @ requires m_Dataset != null; + @Override + public/* @pure@ */Enumeration enumerateAttributes() { + + if (m_Dataset == null) { + throw new UnassignedDatasetException( + "DenseInstance doesn't have access to a dataset!"); + } + return m_Dataset.enumerateAttributes(); + } + + /** + * Tests if the headers of two instances are equivalent. + * + * @param inst another instance + * @return true if the header of the given instance is equivalent to this + * instance's header + * @throws UnassignedDatasetException if instance doesn't have access to any + * dataset + */ + // @ requires m_Dataset != null; + @Override + public/* @pure@ */boolean equalHeaders(Instance inst) { + + if (m_Dataset == null) { + throw new UnassignedDatasetException( + "DenseInstance doesn't have access to a dataset!"); + } + return m_Dataset.equalHeaders(inst.dataset()); + } + + /** + * Checks if the headers of two instances are equivalent. If not, then returns + * a message why they differ. + * + * @param dataset another instance + * @return null if the header of the given instance is equivalent to this + * instance's header, otherwise a message with details on why they + * differ + */ + @Override + public String equalHeadersMsg(Instance inst) { + if (m_Dataset == null) + throw new UnassignedDatasetException( + "DenseInstance doesn't have access to a dataset!"); + + return m_Dataset.equalHeadersMsg(inst.dataset()); + } + + /** + * Tests whether an instance has a missing value. Skips the class attribute if + * set. + * + * @return true if instance has a missing value. + * @throws UnassignedDatasetException if instance doesn't have access to any + * dataset + */ + // @ requires m_Dataset != null; + @Override + public/* @pure@ */boolean hasMissingValue() { + + if (m_Dataset == null) { + throw new UnassignedDatasetException( + "DenseInstance doesn't have access to a dataset!"); + } + for (int i = 0; i < numValues(); i++) { + if (index(i) != classIndex()) { + if (isMissingSparse(i)) { + return true; + } + } + } + return false; + } + + /** + * Inserts an attribute at the given position (0 to numAttributes()). Only + * succeeds if the instance does not have access to any dataset because + * otherwise inconsistencies could be introduced. + * + * @param position the attribute's position + * @throws RuntimeException if the instance has accesss to a dataset + * @throws IllegalArgumentException if the position is out of range + */ + // @ requires m_Dataset == null; + // @ requires 0 <= position && position <= numAttributes(); + @Override + public void insertAttributeAt(int position) { + + if (m_Dataset != null) { + throw new RuntimeException("DenseInstance has accesss to a dataset!"); + } + if ((position < 0) || (position > numAttributes())) { + throw new IllegalArgumentException("Can't insert attribute: index out " + + "of range"); + } + forceInsertAttributeAt(position); + } + + /** + * Tests if a specific value is "missing". + * + * @param attIndex the attribute's index + * @return true if the value is "missing" + */ + @Override + public/* @pure@ */boolean isMissing(int attIndex) { + + if (Utils.isMissingValue(value(attIndex))) { + return true; + } + return false; + } + + /** + * Tests if a specific value is "missing", given an index in the sparse + * representation. + * + * @param indexOfIndex the index of the attribute's index + * @return true if the value is "missing" + */ + @Override + public/* @pure@ */boolean isMissingSparse(int indexOfIndex) { + + if (Utils.isMissingValue(valueSparse(indexOfIndex))) { + return true; + } + return false; + } + + /** + * Tests if a specific value is "missing". The given attribute has to belong + * to a dataset. + * + * @param att the attribute + * @return true if the value is "missing" + */ + @Override + public/* @pure@ */boolean isMissing(Attribute att) { + + return isMissing(att.index()); + } + + /** + * Returns the number of class labels. + * + * @return the number of class labels as an integer if the class attribute is + * nominal, 1 otherwise. + * @throws UnassignedDatasetException if instance doesn't have access to any + * dataset + */ + // @ requires m_Dataset != null; + @Override + public/* @pure@ */int numClasses() { + + if (m_Dataset == null) { + throw new UnassignedDatasetException( + "DenseInstance doesn't have access to a dataset!"); + } + return m_Dataset.numClasses(); + } + + /** + * Sets the class value of an instance to be "missing". A deep copy of the + * vector of attribute values is performed before the value is set to be + * missing. + * + * @throws UnassignedClassException if the class is not set + * @throws UnassignedDatasetException if the instance doesn't have access to a + * dataset + */ + // @ requires classIndex() >= 0; + @Override + public void setClassMissing() { + + if (classIndex() < 0) { + throw new UnassignedClassException("Class is not set!"); + } + setMissing(classIndex()); + } + + /** + * Sets the class value of an instance to the given value (internal + * floating-point format). A deep copy of the vector of attribute values is + * performed before the value is set. + * + * @param value the new attribute value (If the corresponding attribute is + * nominal (or a string) then this is the new value's index as a + * double). + * @throws UnassignedClassException if the class is not set + * @throws UnaddignedDatasetException if the instance doesn't have access to a + * dataset + */ + // @ requires classIndex() >= 0; + @Override + public void setClassValue(double value) { + + if (classIndex() < 0) { + throw new UnassignedClassException("Class is not set!"); + } + setValue(classIndex(), value); + } + + /** + * Sets the class value of an instance to the given value. A deep copy of the + * vector of attribute values is performed before the value is set. + * + * @param value the new class value (If the class is a string attribute and + * the value can't be found, the value is added to the attribute). + * @throws UnassignedClassException if the class is not set + * @throws UnassignedDatasetException if the dataset is not set + * @throws IllegalArgumentException if the attribute is not nominal or a + * string, or the value couldn't be found for a nominal attribute + */ + // @ requires classIndex() >= 0; + @Override + public final void setClassValue(String value) { + + if (classIndex() < 0) { + throw new UnassignedClassException("Class is not set!"); + } + setValue(classIndex(), value); + } + + /** + * Sets the reference to the dataset. Does not check if the instance is + * compatible with the dataset. Note: the dataset does not know about this + * instance. If the structure of the dataset's header gets changed, this + * instance will not be adjusted automatically. + * + * @param instances the reference to the dataset + */ + @Override + public final void setDataset(Instances instances) { + + m_Dataset = instances; + } + + /** + * Sets a specific value to be "missing". Performs a deep copy of the vector + * of attribute values before the value is set to be missing. + * + * @param attIndex the attribute's index + */ + @Override + public final void setMissing(int attIndex) { + + setValue(attIndex, Utils.missingValue()); + } + + /** + * Sets a specific value to be "missing". Performs a deep copy of the vector + * of attribute values before the value is set to be missing. The given + * attribute has to belong to a dataset. + * + * @param att the attribute + */ + @Override + public final void setMissing(Attribute att) { + + setMissing(att.index()); + } + + /** + * Sets a value of a nominal or string attribute to the given value. Performs + * a deep copy of the vector of attribute values before the value is set. + * + * @param attIndex the attribute's index + * @param value the new attribute value (If the attribute is a string + * attribute and the value can't be found, the value is added to the + * attribute). + * @throws UnassignedDatasetException if the dataset is not set + * @throws IllegalArgumentException if the selected attribute is not nominal + * or a string, or the supplied value couldn't be found for a + * nominal attribute + */ + // @ requires m_Dataset != null; + @Override + public final void setValue(int attIndex, String value) { + + int valIndex; + + if (m_Dataset == null) { + throw new UnassignedDatasetException( + "DenseInstance doesn't have access to a dataset!"); + } + if (!attribute(attIndex).isNominal() && !attribute(attIndex).isString()) { + throw new IllegalArgumentException( + "Attribute neither nominal nor string!"); + } + valIndex = attribute(attIndex).indexOfValue(value); + if (valIndex == -1) { + if (attribute(attIndex).isNominal()) { + throw new IllegalArgumentException( + "Value not defined for given nominal attribute!"); + } else { + attribute(attIndex).forceAddValue(value); + valIndex = attribute(attIndex).indexOfValue(value); + } + } + setValue(attIndex, valIndex); + } + + /** + * Sets a specific value in the instance to the given value (internal + * floating-point format). Performs a deep copy of the vector of attribute + * values before the value is set, so if you are planning on calling setValue + * many times it may be faster to create a new instance using toDoubleArray. + * The given attribute has to belong to a dataset. + * + * @param att the attribute + * @param value the new attribute value (If the corresponding attribute is + * nominal (or a string) then this is the new value's index as a + * double). + */ + @Override + public final void setValue(Attribute att, double value) { + + setValue(att.index(), value); + } + + /** + * Sets a value of an nominal or string attribute to the given value. Performs + * a deep copy of the vector of attribute values before the value is set, so + * if you are planning on calling setValue many times it may be faster to + * create a new instance using toDoubleArray. The given attribute has to + * belong to a dataset. + * + * @param att the attribute + * @param value the new attribute value (If the attribute is a string + * attribute and the value can't be found, the value is added to the + * attribute). + * @throws IllegalArgumentException if the the attribute is not nominal or a + * string, or the value couldn't be found for a nominal attribute + */ + @Override + public final void setValue(Attribute att, String value) { + + if (!att.isNominal() && !att.isString()) { + throw new IllegalArgumentException( + "Attribute neither nominal nor string!"); + } + int valIndex = att.indexOfValue(value); + if (valIndex == -1) { + if (att.isNominal()) { + throw new IllegalArgumentException( + "Value not defined for given nominal attribute!"); + } else { + att.forceAddValue(value); + valIndex = att.indexOfValue(value); + } + } + setValue(att.index(), valIndex); + } + + /** + * Sets the weight of an instance. + * + * @param weight the weight + */ + @Override + public final void setWeight(double weight) { + + m_Weight = weight; + } + + /** + * Returns the relational value of a relational attribute. + * + * @param attIndex the attribute's index + * @return the corresponding relation as an Instances object + * @throws IllegalArgumentException if the attribute is not a relation-valued + * attribute + * @throws UnassignedDatasetException if the instance doesn't belong to a + * dataset. + */ + // @ requires m_Dataset != null; + @Override + public final/* @pure@ */Instances relationalValue(int attIndex) { + + if (m_Dataset == null) { + throw new UnassignedDatasetException( + "DenseInstance doesn't have access to a dataset!"); + } + return relationalValue(m_Dataset.attribute(attIndex)); + } + + /** + * Returns the relational value of a relational attribute. + * + * @param att the attribute + * @return the corresponding relation as an Instances object, null if missing + * @throws IllegalArgumentException if the attribute is not a relation-valued + * attribute + * @throws UnassignedDatasetException if the instance doesn't belong to a + * dataset. + */ + @Override + public final/* @pure@ */Instances relationalValue(Attribute att) { + + int attIndex = att.index(); + if (att.isRelationValued()) { + if (isMissing(attIndex)) { + return null; + } + return att.relation((int) value(attIndex)); + } else { + throw new IllegalArgumentException("Attribute isn't relation-valued!"); + } + } + + /** + * Returns the value of a nominal, string, date, or relational attribute for + * the instance as a string. + * + * @param attIndex the attribute's index + * @return the value as a string + * @throws IllegalArgumentException if the attribute is not a nominal, string, + * date, or relation-valued attribute. + * @throws UnassignedDatasetException if the instance doesn't belong to a + * dataset. + */ + // @ requires m_Dataset != null; + @Override + public final/* @pure@ */String stringValue(int attIndex) { + + if (m_Dataset == null) { + throw new UnassignedDatasetException( + "DenseInstance doesn't have access to a dataset!"); + } + return stringValue(m_Dataset.attribute(attIndex)); + } + + /** + * Returns the value of a nominal, string, date, or relational attribute for + * the instance as a string. + * + * @param att the attribute + * @return the value as a string + * @throws IllegalArgumentException if the attribute is not a nominal, string, + * date, or relation-valued attribute. + * @throws UnassignedDatasetException if the instance doesn't belong to a + * dataset. + */ + @Override + public final/* @pure@ */String stringValue(Attribute att) { + + int attIndex = att.index(); + if (isMissing(attIndex)) { + return "?"; + } + switch (att.type()) { + case Attribute.NOMINAL: + case Attribute.STRING: + return att.value((int) value(attIndex)); + case Attribute.DATE: + return att.formatDate(value(attIndex)); + case Attribute.RELATIONAL: + return att.relation((int) value(attIndex)).stringWithoutHeader(); + default: + throw new IllegalArgumentException( + "Attribute isn't nominal, string or date!"); + } + } + + /** + * Returns the description of one instance with any numeric values printed at + * the supplied maximum number of decimal places. If the instance doesn't have + * access to a dataset, it returns the internal floating-point values. Quotes + * string values that contain whitespace characters. + * + * @param afterDecimalPoint the maximum number of digits permitted after the + * decimal point for a numeric value + * + * @return the instance's description as a string + */ + @Override + public final String toStringMaxDecimalDigits(int afterDecimalPoint) { + StringBuffer text = new StringBuffer(toStringNoWeight(afterDecimalPoint)); + + if (m_Weight != 1.0) { + text.append(",{" + Utils.doubleToString(m_Weight, afterDecimalPoint) + + "}"); + } + + return text.toString(); + } + + /** + * Returns the description of one instance. If the instance doesn't have + * access to a dataset, it returns the internal floating-point values. Quotes + * string values that contain whitespace characters. + * + * @return the instance's description as a string + */ + @Override + public String toString() { + + return toStringMaxDecimalDigits(s_numericAfterDecimalPoint); + } + + /** + * Returns the description of one value of the instance as a string. If the + * instance doesn't have access to a dataset, it returns the internal + * floating-point value. Quotes string values that contain whitespace + * characters, or if they are a question mark. + * + * @param attIndex the attribute's index + * @return the value's description as a string + */ + @Override + public final String toString(int attIndex) { + return toString(attIndex, s_numericAfterDecimalPoint); + } + + /** + * Returns the description of one value of the instance as a string. If the + * instance doesn't have access to a dataset, it returns the internal + * floating-point value. Quotes string values that contain whitespace + * characters, or if they are a question mark. + * + * @param attIndex the attribute's index + * @param afterDecimalPoint the maximum number of digits permitted after the + * decimal point for numeric values + * @return the value's description as a string + */ + @Override + public final/* @pure@ */String toString(int attIndex, int afterDecimalPoint) { + + StringBuffer text = new StringBuffer(); + + if (isMissing(attIndex)) { + text.append("?"); + } else { + if (m_Dataset == null) { + text.append(Utils.doubleToString(value(attIndex), afterDecimalPoint)); + } else { + switch (m_Dataset.attribute(attIndex).type()) { + case Attribute.NOMINAL: + case Attribute.STRING: + case Attribute.DATE: + case Attribute.RELATIONAL: + text.append(Utils.quote(stringValue(attIndex))); + break; + case Attribute.NUMERIC: + text.append(Utils.doubleToString(value(attIndex), afterDecimalPoint)); + break; + default: + throw new IllegalStateException("Unknown attribute type"); + } + } + } + return text.toString(); + } + + /** + * Returns the description of one value of the instance as a string. If the + * instance doesn't have access to a dataset it returns the internal + * floating-point value. Quotes string values that contain whitespace + * characters, or if they are a question mark. The given attribute has to + * belong to a dataset. + * + * @param att the attribute + * @return the value's description as a string + */ + @Override + public final String toString(Attribute att) { + + return toString(att.index()); + } + + /** + * Returns the description of one value of the instance as a string. If the + * instance doesn't have access to a dataset it returns the internal + * floating-point value. Quotes string values that contain whitespace + * characters, or if they are a question mark. The given attribute has to + * belong to a dataset. + * + * @param att the attribute + * @param afterDecimalPoint the maximum number of decimal places to print + * @return the value's description as a string + */ + @Override + public final String toString(Attribute att, int afterDecimalPoint) { + + return toString(att.index(), afterDecimalPoint); + } + + /** + * Returns an instance's attribute value in internal format. The given + * attribute has to belong to a dataset. + * + * @param att the attribute + * @return the specified value as a double (If the corresponding attribute is + * nominal (or a string) then it returns the value's index as a + * double). + */ + @Override + public/* @pure@ */double value(Attribute att) { + + return value(att.index()); + } + + /** + * Returns an instance's attribute value in internal format, given an index in + * the sparse representation. + * + * @param indexOfIndex the index of the attribute's index + * @return the specified value as a double (If the corresponding attribute is + * nominal (or a string) then it returns the value's index as a + * double). + */ + @Override + public/* @pure@ */double valueSparse(int indexOfIndex) { + + return m_AttValues[indexOfIndex]; + } + + /** + * Returns the instance's weight. + * + * @return the instance's weight as a double + */ + @Override + public final/* @pure@ */double weight() { + + return m_Weight; + } + + /** + * Returns the revision string. + * + * @return the revision + */ + @Override + public String getRevision() { + return RevisionUtils.extract("$Revision: 9134 $"); + } + + /** + * Deletes an attribute at the given position (0 to numAttributes() - 1). + * + * @param position the attribute's position + */ + protected abstract void forceDeleteAttributeAt(int position); + + /** + * Inserts an attribute at the given position (0 to numAttributes()) and sets + * its value to be missing. + * + * @param position the attribute's position + */ + protected abstract void forceInsertAttributeAt(int position); +} diff --git a/cfg_generator/test_source/break.java b/cfg_generator/test_source/break.java new file mode 100644 index 00000000..d740d51b --- /dev/null +++ b/cfg_generator/test_source/break.java @@ -0,0 +1,17 @@ +class a{ + + int main(){ + int a=0; + int b=10; + for (int i =0 ;i<10 ;i++) + { + if(a>6){ + break; + } + a++; + b--; + System.out.println(i); + + } + } +} \ No newline at end of file diff --git a/cfg_generator/test_source/continue.java b/cfg_generator/test_source/continue.java new file mode 100644 index 00000000..5c16bb70 --- /dev/null +++ b/cfg_generator/test_source/continue.java @@ -0,0 +1,18 @@ +class a{ + + int main(){ + int a=0; + int b=10; + for (int i =0 ;i<10 ;i++) + { + if(a>6){ + a++; + continue; + } + a++; + b--; + System.out.println(i); + + } + } +} diff --git a/cfg_generator/test_source/dowhile.java b/cfg_generator/test_source/dowhile.java new file mode 100644 index 00000000..91c8315a --- /dev/null +++ b/cfg_generator/test_source/dowhile.java @@ -0,0 +1,11 @@ +class a{ + int main(){ + int i = 0; + do{ + System.out.println(i); + i++; + } + while (i < 5); + c++; + } +} \ No newline at end of file diff --git a/cfg_generator/test_source/for.java b/cfg_generator/test_source/for.java new file mode 100644 index 00000000..104f627c --- /dev/null +++ b/cfg_generator/test_source/for.java @@ -0,0 +1,20 @@ +class a{ + + int main(){ + int a=0; + int b=10; + for (int i =0 ;i<10 ;i++) + { + a++; + b--; + System.out.println(i); + if (a>0) + { + a--; + break; + } + } + c++; +// return 0; + } +} \ No newline at end of file diff --git a/cfg_generator/test_source/if.java b/cfg_generator/test_source/if.java new file mode 100644 index 00000000..9c92d0f8 --- /dev/null +++ b/cfg_generator/test_source/if.java @@ -0,0 +1,23 @@ +class a{ + int main(){ + int a=0; + int b=10; + if(a>6){ + c=a/b; + a++; + b--; + } + else if(a<7){ + c--; + b--; + } + else{ + a--; + b++; + + } + c++; + } +} + + diff --git a/cfg_generator/test_source/switch.java b/cfg_generator/test_source/switch.java new file mode 100644 index 00000000..7e0daafe --- /dev/null +++ b/cfg_generator/test_source/switch.java @@ -0,0 +1,27 @@ +class a{ +int main(){ +int day = 4; +switch (day) { +case 6: +System.out.println("Today is Saturday"); +System.out.println("Today is Friday"); +if(a>0) +{ + a++; +} +else +{ + b++; +} +break; +case 2: +System.out.println("Today is Monday"); +case 7: +System.out.println("Today is Sunday"); +break; +default: +System.out.println("Looking forward to the Weekend"); +} + +} +} diff --git a/cfg_generator/test_source/test.java b/cfg_generator/test_source/test.java new file mode 100644 index 00000000..07666d0b --- /dev/null +++ b/cfg_generator/test_source/test.java @@ -0,0 +1,15 @@ +class C { + void main(){ + int day = 4; + switch (day) { + case 6: + System.out.println("Today is Saturday"); + break; + case 7: + System.out.println("Today is Sunday"); + break; + default: + System.out.println("Looking forward to the Weekend"); + } + } +} \ No newline at end of file diff --git a/cfg_generator/test_source/tetst.java b/cfg_generator/test_source/tetst.java new file mode 100644 index 00000000..ef1c3eae --- /dev/null +++ b/cfg_generator/test_source/tetst.java @@ -0,0 +1,14 @@ +class a{ + + int x=6; + int y =7; + + +} + +class b{ + int a=0; + int b=1; + + +} \ No newline at end of file diff --git a/cfg_generator/test_source/throw.java b/cfg_generator/test_source/throw.java new file mode 100644 index 00000000..5b60e0c8 --- /dev/null +++ b/cfg_generator/test_source/throw.java @@ -0,0 +1,21 @@ +class a{ + int main(){ + a++; + try { + int age = 18; + c = a / b ; + throw new ArithmeticException("Access denied - You must be at least 18 years old."); + int master = 2; + if (a > b) + { + a++; + break; + } + + } + catch (ArithmeticException e) { + e.print(); + } + c++; + } +} \ No newline at end of file diff --git a/cfg_generator/test_source/try_catch.java b/cfg_generator/test_source/try_catch.java new file mode 100644 index 00000000..2ea321c5 --- /dev/null +++ b/cfg_generator/test_source/try_catch.java @@ -0,0 +1,26 @@ +class a{ + int main(){ + try { + int[] myNumbers = {1, 2, 3}; + System.out.println(myNumbers[10]); + } + catch (Exception e) { + if (a>1){ + System.out.println("Something went wrong."); + } + else{ + a++; + } + } + catch(ArrayIndexOutOfBoundsException | ArithmeticException exp) { + if (a>1){ + System.out.println("Something went wrong."); + } + else{ + a++; + } + } + + } + +} \ No newline at end of file diff --git a/cfg_generator/test_source/unconditional for.java b/cfg_generator/test_source/unconditional for.java new file mode 100644 index 00000000..5a815ec4 --- /dev/null +++ b/cfg_generator/test_source/unconditional for.java @@ -0,0 +1,14 @@ +class a{ + int main(){ + int a=0; + int b=10; + for (int i =0; ; i++) + { + a++; + b--; + if (condition) break; + System.out.println(i); + } +// c++; + } +} \ No newline at end of file diff --git a/cfg_generator/test_source/while.java b/cfg_generator/test_source/while.java new file mode 100644 index 00000000..a40f3cc8 --- /dev/null +++ b/cfg_generator/test_source/while.java @@ -0,0 +1,10 @@ +class a{ + int main(){ + int i = 0; + while (i < 5) { + System.out.println(i); + i++; + } + c++; + } +} \ No newline at end of file

    E_}Q4_-G% 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 literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/setWeight/setWeight-cfg.gv b/cfg_generator/test_output/AbstractInstance/setWeight/setWeight-cfg.gv new file mode 100644 index 00000000..a729fa8f --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/setWeight/setWeight-cfg.gv @@ -0,0 +1,23 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\setWeight\setWeight +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 0 [label=< + + + + + + + + + + + +
    1
    570: m_Weight = weight;
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + start -> 0 [penwidth=2] + 0 -> end [penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/setWeight/setWeight-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/setWeight/setWeight-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..182c467fa0e9bfc45ea99239592450319e3c9767 GIT binary patch literal 13149 zcmd73WmFVUyFWUJ64Ie`4c(!Hq{t9TcL>rT-Q7Jjh=9@((%mf$q99!g3?ZG;dH1~c ztaCoxPyf5_UF$3t4ovKP_OqW~Or(mEEY4%{#}Ehv=d~P64FW-#13$JHXyBQ^mp#4U z0nJ2S76!RT{>y1EOoBjYA+KSQ8lD+@f4p?mweQdl1vwr>)v&;GjSO_ln(Eku?VB|1 z^kq=0?Vqg%*OxaKY5V#=o1ez96DfD=(&N-5cD0qZ`QuoOQIMMx7(D$LP7I@4?zZ+1 z5E`mtz)wj}PdNW4>hrfAQs6_FR+40rmdIqO6y$ zS4hLcbOq;pqeFZgm2mFc8GA=3r=aw73VnV3<+ZiR-qB$AHq`jQ1Ztd|oQ(LM%--aA z1odw|#4<54O~_2ff$%t3;mVT8x;kz_(&GfG_TEPeoY@)eyvN!(o95wt7Njfx>{Hrj zwtGX>cR?$;CWGtFqFkQXm(O09HS-bweY#>iEj8$DKG>NWpYirZQ@St7qjM|>B&D2l zEZ}7T_WiIUHW}Z;tgNi6hK8sA3h1oQNNZpZnp`$;<0xMQ_asI*A-W%l`W+M7%{NGn z(us}r)S|bX>^%TOnsuuVfk6rCQgYFy2V1hjeyl0{j%kie=M_v$PI*L6Pv6wJiMz$X znyGhT}yq-b2KL`H*z{I6713A%fF zj(#>S(J~36xo7Sjj@P9gemG%l!u1Gyjdi8oaIEN~#nVFf<#8<`Hqo24RlT#7v#oVTAOES5mpTrYLxBADdrOf{f zcF!4D9u0eR(%z5y#srv)E(RR<#gOv8+8u|V;7X+wQGZBEs`kJ2-o;tKqClrm@b!Vp zjL<}C36%G8l@Dot)TTw~JcxTpBYAvjhD|AoPt$ge!laz_LwyKFZZb${Ma#{NSE^mv z|MzFQ@qMsZe9lZpJvSownV`M zIHRJYkLE115fl8`xdn>y7v-lt37@50zoI5J6c{SXZi;+qdg_L=D88uEX)l(Mnc2q` zEoaGV7C8xzj_%oQu1);>Ir7LMZr~(mi>L89Nh?RDiAVavn!$bV zcbHP9aHPT0L?z=vLQUuMeFKFoVX_$q{Q;XD!=5I_RqV6Ls;~Baf4XP>b;yimOV9qh zrB+CL{(AQV+!akKWwUc-WrfFlo4BsZE+|k6W%E~F$SmVl?08|pg~gVj(ET4T+u14< zhtAuESw@1bhv0Yz!r>S{G6hNY^L`&`&AzRAZ%XI>+MAV6h|p(oA*Azu^f}ad2j9kP5mE|@ zXfT!co(%G6d%wO&9iAQavpci}du9J5YR#}%o!_$2;WofCq%rhu{rC1vlqsZd$(K*3 zP$@I`K*2EPlqR}4{cn_kQtk1|CdtuAmk0jSr{RHtkm_MNLY#QBA=*FfJ|wqS=Tenp z?T6Egjk6&-v}4z~M+dt1{aIo@%NrZa?k`|^0||^F>RMXis_*g={3WQeZ_Y3|^lFom z65KhL!fHiEp!+jIO|7lb2Dph@N3OhN8B?X&tIpl#ZU3@8NUQXCEPE)0yo8MZmVIX7 z<|b*SgqE8OevoYTyB3&s(80@|65m|wpNp*Pnw=z-?|d6IIjLd$r$uwu8D1Av7(JAu z@LBkg_IQPn--TRoCW!S24hy*3{2ekf&$`=pgP z#A44VHuY;;XlAQ>l)>XfEgrD6u*}Hd1v$Y_^?XFFAKAu_a*rDc zvpwl}ABq-EuD`I?+7MyDETZ4$srvCOvM!QN{^vUj3#Pygn*I5N%#_#!M!Lhq3tF?+ z7@+4P*jfJf;<>@t#Eb3&to2cGLYnpRmXluBUBhO>X8r1)+gXEI%NDze8MrUXe~t4IAbb)pVw&E)R-`g+&kAVx|l1?)aCTQ(lTb81gJiB#mx)wUz=tMadPMrKkc0R{5#|uwY#|LtY*;IuPTZN z>U!y5TPf|CGYI8hQ>z-&kvSn^n73@#)E3Lsi~>x z@;372`Z2e=`?V020uq<_F0sQ!#5s9gdtNq;radY|Pp`grGb|4UQjKm>TGr|~{Hm?t zjDLO9Bk5pe=cFUvA&T>7r`-9eb?dFOKR&Mr);>hAzb9~G=unAe2 znN-xn)Ol?h7wq4DU}m90F8;37JWR(G2yS4+Nq7Kxg(^irLl$3sXUglmD7U_~*gvQ=+`l*6nCQ$^ zFt$MWcI*~9>tQ*l_HTe**ZQo*b?X77$zwH3Yd#50?nru@tspAyj8`?3tw#tw7BqEWyZ_Va zED?BrsxhK8tkv4iT*C}sB>D48ZK{FuqlCk4WNBfg2_iTwxIrqPowUXbpM!&g$6;SI z0B z9S4$qR@!H$HQ9b=jyr(ub zzuR%|)R#?P!fkBcVqBgd6V%f`c4$9(s{ACWD*=>u&9l<@R>KqyZ9(nmXDhXnqa{D$ zVBOcwXQ_iRL%pYKJ3NAd|4HY|i5z4fHA}T5)won&Fw$W%pPI07?Y0NTQV8%F4dsAz zm@_*+Z?czGFLX7hsxRWFxa*AFy?Qe+D{A?yKb9t<^X|0LBvmS3Q`A5K&1&TL3!$3{ zkiE`>^%+`U{$h6xD?!3_u#wU8Sv=6!;}jpK`1g%+&zsH?2t z^DHC3Ji&d;w=c?gh~INAq!v?DrJ%+$(p*lUcCED6fePl_@exz=6&WSsgt{u zx4SI3Wx|0!4eczxedq#rQ~A&@<-!^ZaX+`bU#UUKv02vY805?Ca90^-3}JT zkQbm;<3!bSSJo@VO=eJBtomR1`M%hZH!C!w_YDy0kEH<5!i0kgqa*K1O$XwH0`^6} zDr5xLCrv|pB_8(0NA+>ZZ)7g`;U0LmVG%=kNlZzrV9AGaDRN<;db!{}iuhblcH?o? z8H2(* zUb1pqy-0(UX|YnzaBz%f?-Bl@{uiV)ZTBdPUK><8Iy!Iz^28BjshR`ozjQ%|{*tLu z6@9%J-sl0N@r5J+P1xP7g4x+wdz$}jIGXhkAWQdVmyMMqWpT*}T&iBKSh)>QbZ&ns zD#BQ3bQtI#6@VW2Q-}Yg4j+q_$s5R_Hc6dcqqY$1MK*9#y6SmyNbq+wJ^l&1R*uj4 zzDcS~z985I92Gsis9(QSY_EKY)IO*!ul)@r2%rcuu8ruL@6y{nCNC??$4>Qc3w3E7 zp+mqPl$DoPFVkRE`Cd9xHxu$hK((F-%E~I687@$*N6W@jcb#%qY;y0#r!sZslO*W@ zAQcm8irM6PK}Z;&)H{(|NGj-0d3V>?DaDrD{Ue4%nbw*G)ZIj^TwMK#o`|E>c!`xl zQ;9FMosdie;k;3Hzh5@*xlhQ)u>`2>dbx-gq1dJrlziThhYghuVE-jXTBPrV$jgg`1U0l)f;;crBGaH zb8Q|ot|G1~po?0jzxxLk{ctkE{@B3m&)_QyXD0vnTdDwtyP&A!$F9!Xp#(j$%Tuo_ zSCX~g1=ZKzW&LFu*94t#dY)_&_}`vt!(?UYnFP>=Sce7`Mjt`|pzN-WptluS$gTIY znRTxVs}JFypKT2CVt1*ldXJLyl!?dYv~!~2iTM*2e~lQ>izuge)WBtYVs<8;ZX7m9 zTdEh9bTtkZd56YykZ<$-J|Lq17X|wqK}ZvUu+1iurPT_N(v7zujI~jxpc(` z_#`g@AOzG#fBaCGYi$I8|MTZjWnPc{-?~3);Br!JkMWQM0f;gf>;V`f0Rbj}`~Sln z{I7YT7g?kfeFgAAzumk3yWdQOf%;v*?rgPY%4-I~-K9<%0RaKM;&}LTkR`??sYKj+ zzbd9ra!I&tYb0lblKMv=cp4=5{1A(g3`~0ZpG#T({{9cNq+mFG$WO$@#gU5pHp%Re zQ&98_49G4=!Hej?^o8F{eH;S*hf*nWvR*zudD78O-6{su`(Q26bn^Lm zwzjrB{x=tTGrWR=19estbs7W&QzYQc5mRm-g`HMlI&a_F6q7?sxWhRTant$CA9HYW zPH}A%n?V2cg8>+GzHR7T8%omTviZ}(&!m`^zYazqjvRr~pRsMwqLH!jmv!s^dd~jl z;^_TCgI(;k<Nh!5Fb*;2%l=3sxBl4dVH~SNH$r3-HBoTN#<~@ApIm z1Y3{WTeCPIatt5XBt%3+P$6s1&7}VsRDLSmFc0Y2FQ*aQ@L(IL{=XZ+|H))b#y_D; z_+1fSUS3`t4bY^QP`9T5B4=&Qta_LhYE5ivY6`9nxIy@cqlbsXp(&$tv;N{Qbdc-F zJPsD^99Lnmd>=GC>X_MCo$BFVWU=s}eySmFPtR{dLzsZ3vo{r(-~gmY4>&p?iJGLo zf=#lBe(>ABI9kQPz<56?K>noW>C>lGRaM_UvZ|A7J_M<=!YWGQzIqib;Qyall%Xb> zUE5^+d$MAK7zipbfzZ&JCS+uY2IWhOEzs$^!T#NN+fNj&U zTxl@%(_X(B>>&!{{ur`jkWijm5TVhFi5cL&T;~K2>!!gWAyeXCuQ-{R3;S1HoSoOy ziZ%SNPOR4bFflQmi#6Dk<>c^po43rc7#Lo1rOq_Hc=2LN$B-!rFnP8HU#3S#iDpk`=56RQMqo6P*uz4 zpsjRFaDtA&X;-19v$DQ8M7UMtVFaU~qG>dPi5r7W`NVINGC$z$<3rEG^UEmCqP(nZ z`QRYF-RFF|C2OU~6rsW=#Dx05-e*N9eY(w4E94bG-MFX zHaXFon3~ch4Q>1C8x+PkySP-l?PxuG^k_=w{OWWE0s-Ylef+^UH*R*7{wa(ed!8?D7?%G#$9&Nog4o5D-8D2M6UqU)>WE zMAOsL@R%6eN%tr1@0b0>NJ;tX?By51R7By8EQvsrzk((j z0o*C4pip)sn!=%*t6x!(>Z-oE)F~0z(y620;Y$Vqah&U(39dJ`Mr{KPjgQAKey(bGM#aw~_6@RJ`EdroP#+DQU9 z#!LLCRrDoNrrwIx9@Q3)A3t8(+S)qqiNG7ay}eBqLk|fKCT~*&@r+K(&B9VttuPi| zVxEkWAYY)CJRBSxysc@dqN0+#!IXMmd2V<5*4o;-d^l{k{O!z6R$3a{`T4naM@N(% zJ2J*ETh`as20^=;XMfRX@vyK;YdT71%38qX*{s1FOWnHlwRLX^d)E( z?O}a2nN4pocG}M3KBp?~PM9)H9D<3hEmqALipcx5=Z6hiNA3W0keq zDmDC2G=05F;;!Q+jR&`1^sS+vilvqBDCT3)u}>cNtA!Sp;32jV#TPkccanu%o|>8C zr3b~5iu*JD&IWfmS`V!p9joTeOX6HX2C6t7rUJw58Dcrfh>ypEECWC@eZd>0L>e{p zL?iJ{0l7nEhg9@QW>OMSzM566)edn|fClx4XP}IOywumvIPU1}g_$3$ekT?aUbkk# zE%u%GXtFdpP0=ELtw#~Mdy$_rD_i0{MlIwBiNK>lgY*szXzM;DBP(|P{ou6!~2quj>^{tEWBGH0_p`Jd!SS9$l)ddmcm1|E76K{Ql-2+i)G3 z^;Oe>94WSLBEa%gl9H0-m7VX$pmGJ{dX~Z4GnF(Du-7m5g!}sXG^hC)xH~SOf%iC5 zi9=>W9{c*Sk&IkzP(N#mmpw791d*jNvT2S% zd|h>{8}70((ltDcrKP1c+ug5f|P*J&uW#X&{q4a})PEzHN|jAs=*(lMzHkPP?3`16bQ@Tpte~zRB6`Rr zWR4IjFWv*$w|wl>jDn9{VV(YgCXIKj!Qw}23bb7NKP?r!r9$4Sq7mDInx@Zfd`9Z+ z?(*i*G}Xf=n~1FBVilY4705%-b2cB@SpTCZ2uSM_@vUUPs;BVKmX&DBe? z_cxTTbQP>!a$y~@L&@Gkqu^%nR+PHosh>KFQUu#PGX4ESmF21o7%aJ_wJKSERix}V zx$)|Js&G_8P`tKcL*GlUv&BBS)0e-`#y~|S=cfJW{CuW4P_szlw9@a_bj z6Z0j28}Ak;p`xOc9UUF9-m$Z-pXAVo%=o~~HSJ|!?BnAD;@rsul`5C}nv0$uwX3Tu zx6V!uiOAj$#8H83t?XY*_qTtTcxgNJcBhHryRD$O0zjIUmiFb29VY{$A_PK&hV%kZ zkRw5#n!>4|*Rfe|e?Ob$W(k0QICOM$NZbzaR`DL;YaD|mkHo}8xi@c2zFA`e(1y+k z3Lv&*C?6joP_7-_-79#P94gZ98MmaZK+tOI>81IVWKyZmi+J98BwqgKj{U*l9-*12O;G#3LKomPh`3f z1dtN3vlD%I=m@#;$<&8R^-Lf~{lA*B_%9*_AVJ#PG;pn{f^}N&07i=S`__eK3XZ{NN}lAVA5{(Yb&4Lj`v6BZsE9j$z~qns`f ziz1&N@}Efj@rk#pwsykv_9~o@zzQ81HJ{Vcx)&DS=DAT(QZBErGdfDcCh?K%K*82n zab+cUOl<6yHbye_W}<V%PauNXfo&<)3pn{9!5d;ukT`^?OVE@Ba z(;7_#69Edip;N-b89-7m)&X^G4f~#h>`hqkyuS7%sF*lo&TO zJS^qzF2MKfnJS=wySrZjeliabxS(baE+}C9@#Dv@8gqF-59he;OoRL4C0Mty4nLny zpFY8FiQ$`_7xoNdAU_vZNlTlGY{(m>kz4PVW^#h3ghSaVilHGy8e)gx0P zQ=Pg7l|@56{U{*tvv6`r4^6z;p&;w3Xs7Z%-3}9Pzs^z4-e_EG_sIkLhMr#>tQRl= z<$y*2IpURu2665P3~_V$k7bZMusV{L(nlzFB0BTeW#7nqpma6FH6U#?4VeqwzsK7~ z>{3%x=p{sG@D9X#dwlSY4)>*yB|dQR{Ej=MtRxWg<)oCo>#AEgY=%Xri$p_tpqFWXBt^su<76cJ+HaZ z#p&Nnx}11=%*P^Pv->O@7c3VAfQ7^t#XV1_w2iH-Saon<;UMcw_S!FX!~#TRG`c7@ z*pZ6EEXa&~OdX0cj^g=c2`hm#(#NU={WD&|q00jkdXq#~Cd{v2zakq!bk5Sed-tx* zm0Fbu5cT{h02LB3D=iOKcJx+f$9*X`eH(LgEr)$Z9W$~IOd!hTxoyy1s;HjJgOSy% zupLJym#%dArQYAoE?%zklMg|B#ky`!vbJ5{wKfq3JmQiv;4z+ih@ByT-_O+VCZQ7n z7OZ=SlbPUDk(lEL$KiCk105|b1VF>5tskIzk3Bi;2R$1M-vd+rgb8Wcj zxWCHbt{ba$l7k^DK-D#Re@AAg*C_cbLQ<#AlUG48?0SJ$)dhUIr11LuV0F)9u|MnJ zJm=t|#~TD)ux%zF1vE6KmVqdjmh`YNO02kjIe=<8-t zt1p1)cX)c#*C^7t9)=0mSZ)oL3$t5jKmhbTP>NEyQtwvj^pxQV+9+vEiWVnrBVEDpd*V*-*o&vcz)jexlq0j0<=F%}1rYa-2 zj8qvrZ_g+!MnB_JK6;0(gL8Va8@Y}cKDs?$GMy^XMCydGVn~A{gc#3!3=W8?5@p2M?Rp=^920GzZ0afL} zH;3y0squOS*WFoF;5dN|RBppO7ss|PMhB`rH%!oM>4AzLqUB!B<8UX6yGQpxDg^@= z5(c6?w2i*|s4olu07jLQG~kWnm}`His;Y{Cg+&A`E@MEPT=oO%-+SY^2LZR6K;9hZ zI3b-x?Xkogh>)bot*g^O_6K4vBqb{=j`MA!k>0Q8Sxok?7VnSyK^m`e*-)yMrz3m< z{3i3A_qPr@B08qPiUJxcn|-lh41U#VG^V;2kVlIJI%H{E8|Bi$Ej9g}zyl`EwEH#7 zYwdm6!4LQsa=y#-M+9x{z(wG+aYm)zUJAJe|;3Tmj9zIIV<<6>yXq_ji zEca8i*>l_fLuPR8-naj!wSJl@vBDULqQb75_}*S;udeO)`naTRfX!mk+DFO~uP*@i zHli?Q$Ouf?NO}O)_ ziHoO}N6OZ=3?%=lVPk>*BB%Z6u_p;`{UuR}UmywaFa<7`! zOMk8UdbZQKv&Q4#F8Mk!>(e{)OrYgAk@*l6N-1e?p=4xzs@Nr?tYLTv-s#qmn)N9T zIAFe?DMe)11K}NWCvJN1=g%hvcF^ko2+6(|_$kvV38a_-d+NFs*mUx*Afg8d3NE~X z@KBtlBu{i;Sa}HyIO{EmU5P@i*BlL;^IzMzfty0>#2_f?t?~m1aIQpZ=4m58aH(m@&~^r_<!9}`V1hNOSjDU57bVEYPT+9I7wfsKmef~Ie z0U%+2dAGt^axRr!r1FEy%Q+v@5Is=kT1HPHO>2HwX?XgL$YbEz&{|Mu2Dk8wtrv$UC&a*`qKe!CfJLw=g{r2F zc@&Mkf4M@w6%5MPR}_-2Oz4>24m^MWTT8l`Pb|{(6cZD3cs$G<4Xj=)VBA%0GG2)7 zqf!=bPLeVpWqtnj?H4(bGD|-5*F2m1uP-v^155%S-%7?xHK>1DUt^q)Bjh&)b7+9$ zH*d;4(iLeao8FzPJz}{hsJL;Jt`hL}Iqe6o5y-cw4)z3Ko&s_GeSIr(Yqrsu=C@1} z|7)L$9)sjPJA|)LtmeR#@$S-PT{u+bxapx2`YKPrzOUp0-MINK@KX$rjSw>*9 zQR2~ebJTp)<<1_%xmB;xYaa*%tC7R@$AmijnGwhLH{W?&{whc|DCgrbIKSIW#Mbfj z6uPmvG?rRHb9F!9c>fl(&~!6lZjQIyw?NWk7y1@3w1Qb$ybp^i*1>j=aou`irb4;t zKxZz&8%7ryh^m^#U|?MVcAD^sXeCEiH)6A<_?yp^NbkZZi5NkHVA)Wkay~a$`(MBr za)q;r{><{(L+Z!GNK>TmrkCyI!c+ZLcbtlfHVbYtt~@=W%GnYzqIY``ntw)Id zG|+ubhI{i5@^>_QG>|a_Se~E|)BZR~JuUL--bzWV=%*&Bc{9L&=sqA5RvO%|3&;7p6C3(nK0!^v09QL?)Q3FabX{BM?7$Q* zL1=i6S`;2Efps`#V`#ixSNuuDqXNiHTMt3WUSbBw@Yz}iyt{+l`$%V9AwNy9hxg={ z+&TCc{C~B9aRzAyQ33{JO|^IL;-w9brRSM`D4I z!T9?mD?B>BC*5ZW)`@xB%k|n)bkH|YaYFD5Z61W#UpxqSUH>zIl|+t2q%?l9wW<6` z++29Ny#*IsQ3JJ6mL{o;ExoIeo}KsCJYFWj(Ii}aMv>NCU{7#>zKrV7c8TVVyA{c} z#3c!moJnfFn>nMoP}3Eyzs^5YWUwtv+r6JENk-a}p996@g&@=1{8n~IuRFu%>T(a(8)$L+mPFT)>F zm0#L>x#W3(#h^N1-9O{<44X+Q4GwHV;kC83$i8rpUT&l*U;dq8aINJ??tSkavS1{+ z>ZEnoRs70Qi6K#TjlwLD{j$}4?{Kbvba`)&(_I(l4a)gR3}$6u%#)-+j60iu;n< z%#=&pDsW`@h?xE!ce)t12?&z5!KxlEO#%l-TiKv5@+UKX00Z@&NZmkdt)@3PE>UWTkXwy057X4(P zrZJ^!bQBNN{wArilNv6!bpjG-^9E`84;~zZ?xX{CAY? zboN_!O=3{iW?_1BYmP|CFJpNZfn7+F`Rj`%I%zto;Olg}T59O6wJ=|W1ub~6ANbSX z{`TBxzMB{o9jAA8%#_#f$`$Y(t*__lp;KUk^-gx@o*|P008!Gmwj6|&j4Kw~iU3^p zO#UElpt3av-*iY<5~$iTLbXA+Atj^e%8h*#qZn&!Zxweu?)*`dOH$W~>`ivciq)99 zXwx<1k?tepmmSbOXqKH2rjVBdN>qrk0aVm0yl-#3X_e4ciH3*4xlT#2wtIPlfO0o}Y0e4+QSlA=LQXwYi zFsVdbLxHFTY?;8rg69b|Q=s7N7Rs9a0+Rzg3~$T}1OSFG;Ftd&iJA!l?F9w_c+rci afKS&QlyFN0S@3-s$ZKgOSj8)&;QtHC*rwh9 literal 0 HcmV?d00001 diff --git a/cfg_generator/test_output/AbstractInstance/stringValue/stringValue-cfg.gv b/cfg_generator/test_output/AbstractInstance/stringValue/stringValue-cfg.gv new file mode 100644 index 00000000..1680d716 --- /dev/null +++ b/cfg_generator/test_output/AbstractInstance/stringValue/stringValue-cfg.gv @@ -0,0 +1,125 @@ +// F:\OpenUnderstand\cfg_generator\src\..\test_output\AbstractInstance\stringValue\stringValue +digraph { + node [shape=none] + start [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 6 [label=< + + + + + + + + + + + +
    7
    667: throw new IllegalArgumentException( +"Attribute isn't nominal, string or date!");
    +
    +
    >] + 5 [label=< + + + + + + + + + + + +
    6
    665: return att.relation((int) value(attIndex)).stringWithoutHeader();
    +
    +
    >] + 4 [label=< + + + + + + + + + + + +
    5
    663: return att.formatDate(value(attIndex));
    +
    +
    >] + 3 [label=< + + + + + + + + + + + +
    4
    661: return att.value((int) value(attIndex));
    +
    +
    >] + 2 [label=< + + + + + + + + + + + +
    3
    658: att.type()
    +
    +
    >] + 1 [label=< + + + + + + + + + + + +
    2
    656: return "?";
    +
    +
    >] + 0 [label=< + + + + + + + + + + + +
    1
    654: int attIndex = att.index();
    +655: isMissing(attIndex)
    +
    +
    >] + end [fillcolor="#aaffaa" fontsize=22 shape=oval style=filled] + 2 -> 3 [label="caseAttribute.NOMINAL" fontsize=22 penwidth=2] + 2 -> 4 [label="caseAttribute.STRING" fontsize=22 penwidth=2] + 2 -> 5 [label="caseAttribute.DATE" fontsize=22 penwidth=2] + 2 -> 6 [label="caseAttribute.RELATIONAL" fontsize=22 penwidth=2] + 0 -> 2 [label=false fontsize=22 penwidth=2] + 0 -> 1 [label=true fontsize=22 penwidth=2] + start -> 0 [penwidth=2] + 5 -> end [penwidth=2] + 4 -> end [penwidth=2] + 3 -> end [penwidth=2] + 1 -> end [penwidth=2] + 6 -> end [label=IllegalArgumentException penwidth=2] +} diff --git a/cfg_generator/test_output/AbstractInstance/stringValue/stringValue-cfg.gv.png b/cfg_generator/test_output/AbstractInstance/stringValue/stringValue-cfg.gv.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec29772d45fcf60c200d91293ac3d50c840540f GIT binary patch literal 126815 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�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
    an3DnWq-Stb!{tZ#pI+( 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