diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..3f930b9 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "antlr-grammars-v4"] + path = antlr-grammars-v4 + url = https://github.com/antlr/grammars-v4.git +[submodule "antlr4"] + path = antlr4 + url = https://github.com/antlr/antlr4.git diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..26f910c --- /dev/null +++ b/Makefile @@ -0,0 +1,24 @@ +.PHONY: help submodules + +help: ## Show help + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' + +submodules: ## Init submodules + @git submodule init + @git submodule update + @# antlr-grammers-v4 + @git -C antlr-grammars-v4 config core.sparsecheckout true + @echo '/solidity/' > ./.git/modules/antlr-grammars-v4/info/sparse-checkout + @git -C antlr-grammars-v4 read-tree -mu HEAD + @# antlr4 + @git -C antlr4 config core.sparsecheckout true + @echo '/docker/' > ./.git/modules/antlr4/info/sparse-checkout + @git -C antlr4 read-tree -mu HEAD + +antlr-image: ## Build antlr/antlr4 docker image + @docker build -t antlr/antlr4 ./antlr4/docker/ + +parser: ## Generate parser file by antlr + @mkdir ./parser/ + @cp ./antlr-grammars-v4/solidity/Solidity.g4 ./parser/ + @docker run --rm -v `pwd`:/work antlr/antlr4 -Dlanguage=Go ./parser/Solidity.g4 diff --git a/antlr-grammars-v4 b/antlr-grammars-v4 new file mode 160000 index 0000000..4de106f --- /dev/null +++ b/antlr-grammars-v4 @@ -0,0 +1 @@ +Subproject commit 4de106f998c383916b1fb74f69250493da0bd4a2 diff --git a/antlr4 b/antlr4 new file mode 160000 index 0000000..9abda18 --- /dev/null +++ b/antlr4 @@ -0,0 +1 @@ +Subproject commit 9abda183db8e241cb216308652bf76d2938d1f47 diff --git a/ast/ast.go b/ast/ast.go deleted file mode 100644 index bfb9f1b..0000000 --- a/ast/ast.go +++ /dev/null @@ -1,185 +0,0 @@ -package ast - -import "github.com/uji/solparser/token" - -type Node interface { - Pos() token.Position - End() token.Position -} - -type PragmaValue struct { - Version string - Expression string -} - -type PragmaDirective struct { - PragmaName string - PragmaValue PragmaValue -} - -type FunctionDescriptor struct { - Name string -} - -type StateMutability struct { - Pure bool -} - -type ModifierList struct { - StateMutability *StateMutability -} - -type TypeName struct { - ElementalyTypeName string -} - -type EventParameter struct { - TypeName *TypeName -} - -type ParameterList struct { - EventParameter *EventParameter -} - -type ReturnParameters struct { - ParameterList *ParameterList -} - -type FunctionDefinition struct { - FunctionDescriptor *FunctionDescriptor - ModifierList *ModifierList - ReturnParameters *ReturnParameters -} - -type InheritanceSpecifier struct { - IdentifierPath string - CallArgumentList CallArgumentList -} - -type CallArgumentList struct{} - -type ContractBodyElement Node - -type ContractDefinition struct { - Position token.Position - Abstract bool - InheritanceSpecifiers []*InheritanceSpecifier - ContractBodyElements []*ContractBodyElement -} - -// A File node represents a Solidity source file. -type SourceUnit struct { - PragmaDirective *PragmaDirective - ContractDefinition *ContractDefinition - FunctionDefinition *FunctionDefinition -} - -type Literal Node // BooleanLiteral | StringLiteral | NumberLiteral | HexStringLiteral | UnicordStringLiteral - -type BooleanLiteral struct { - Token token.Token -} - -func (b *BooleanLiteral) Pos() token.Position { - return b.Token.Pos -} - -func (b *BooleanLiteral) End() token.Position { - return token.Position{ - Column: b.Token.Pos.Column + len(b.Token.Text), - Line: b.Token.Pos.Line, - } -} - -type StringLiteral struct { - Pos token.Position - List []Node // EmptyStringLiteral | NonEmptyStringLiteral -} - -type HexStringLiteral []*HexString - -type UnicordStringLiteral []*UnicordStrings - -type NumberLiteral struct { - Number Node // DecimalNumber | HexNumber - NumberUnit *NumberUnit -} - -type NumberUnit struct { - Pos token.Position - Value string -} - -type EmptyStringLiteral struct { - Pos token.Position - SingleQuoted bool -} - -type NonEmptyStringLiteral struct { - Pos token.Position - List []Node // SingleQuotedPrintable | DoubleQuotedPrintable | EscapeSequence -} - -type SingleQuotedPrintable struct { - Pos token.Position - String string -} - -type DoubleQuotedPrintable struct { - Pos token.Position - String string -} - -type EscapeSequence struct { - Pos token.Position - String string -} - -// unicode-string-literal (https://github.com/ethereum/solidity/blob/develop/docs/grammar/SolidityParser.g4#L407) -type UnicordStrings struct { - Pos token.Position - List []Node // string | EscapeSequence -} - -type HexString struct { - Pos token.Position - SingleQuoted bool - String string -} - -type ElementaryTypeNameKind int - -const ( - ElementaryTypeName_Address ElementaryTypeNameKind = iota + 1 - ElementaryTypeName_AddressPayable - ElementaryTypeName_Bool - ElementaryTypeName_String - ElementaryTypeName_Bytes - ElementaryTypeName_SignedIntegerType - ElementaryTypeName_UnsignedIntegerType - ElementaryTypeName_FixedBytes - ElementaryTypeName_Fixed - ElementaryTypeName_Ufixed -) - -type ElementaryTypeName struct { - Pos token.Position - Kind ElementaryTypeNameKind -} - -type ReturnStatement struct { - Position token.Position - Expression Expression -} - -func (r *ReturnStatement) Pos() token.Position { - return r.Position -} -func (r *ReturnStatement) End() token.Position { - return token.Position{ - Column: r.Expression.End().Column + 1, - Line: r.Expression.End().Line, - } -} - -type Expression Node diff --git a/contractDefinition.go b/contractDefinition.go deleted file mode 100644 index 045321d..0000000 --- a/contractDefinition.go +++ /dev/null @@ -1,39 +0,0 @@ -package solparser - -import ( - "errors" - - "github.com/uji/solparser/ast" - "github.com/uji/solparser/token" -) - -func (p *Parser) ParseContractDefinition() (*ast.ContractDefinition, error) { - var abstract bool - p.lexer.Scan() - tkn := p.lexer.Token() - if tkn.TokenType == token.Abstract { - abstract = true - p.lexer.Scan() - } - if tkn.TokenType != token.Contract { - return nil, errors.New("not found contract definition") - } - - p.lexer.Scan() - if p.lexer.Token().TokenType != token.Unknown { - return nil, errors.New("not found left brace") - } - - if p.lexer.Token().TokenType != token.BraceL { - return nil, errors.New("not found left brace") - } - - p.lexer.Scan() - if p.lexer.Token().TokenType != token.BraceR { - return nil, errors.New("not found right brace") - } - - return &ast.ContractDefinition{ - Abstract: abstract, - }, nil -} diff --git a/error.go b/error.go deleted file mode 100644 index b8ec82c..0000000 --- a/error.go +++ /dev/null @@ -1,26 +0,0 @@ -package solparser - -import ( - "github.com/uji/solparser/token" -) - -type Error struct { - Pos token.Position - Msg string -} - -var _ error = &Error{} - -func newError(pos token.Position, msg string) *Error { - return &Error{ - Pos: pos, - Msg: msg, - } -} - -func (e *Error) Error() string { - if e.Pos.IsValid() { - return e.Pos.String() + ": " + e.Msg - } - return e.Msg -} diff --git a/error_test.go b/error_test.go deleted file mode 100644 index ea3dba6..0000000 --- a/error_test.go +++ /dev/null @@ -1,47 +0,0 @@ -package solparser_test - -import ( - "testing" - - "github.com/uji/solparser" - "github.com/uji/solparser/token" -) - -func TestErrorError(t *testing.T) { - tests := []struct { - name string - err solparser.Error - want string - }{ - { - name: "normal case", - err: solparser.Error{ - Pos: token.Position{ - Column: 1, - Line: 1, - }, - Msg: "not found pragma", - }, - want: "1:1: not found pragma", - }, - { - name: "invalid position case", - err: solparser.Error{ - Pos: token.Position{ - Column: 0, - Line: 1, - }, - Msg: "not found pragma", - }, - want: "not found pragma", - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got := tt.err.Error() - if got != tt.want { - t.Fatalf("want %v, but %v:", tt.want, got) - } - }) - } -} diff --git a/functionDefinition.go b/functionDefinition.go deleted file mode 100644 index 4268ca6..0000000 --- a/functionDefinition.go +++ /dev/null @@ -1,15 +0,0 @@ -package solparser - -import "github.com/uji/solparser/ast" - -func (p *Parser) ParseFunctionDefinition() (*ast.FunctionDefinition, error) { - return nil, nil -} - -func (p *Parser) ParseModirierList() (*ast.ModifierList, error) { - return nil, nil -} - -func (p *Parser) ParseReturnParameters() (*ast.ReturnParameters, error) { - return nil, nil -} diff --git a/go.mod b/go.mod index 7884694..cbe5ac3 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,5 @@ module github.com/uji/solparser -go 1.16 +go 1.18 -require github.com/google/go-cmp v0.5.8 +require github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220626175859-9abda183db8e diff --git a/go.sum b/go.sum index e9b099c..58403d7 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,2 @@ -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220626175859-9abda183db8e h1:bt6SW1eSSvdmmsG0KqyxYXorcTnFBTX7hfVR1+68+jg= +github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220626175859-9abda183db8e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= diff --git a/lexer/lexer.go b/lexer/lexer.go deleted file mode 100644 index 2b58d46..0000000 --- a/lexer/lexer.go +++ /dev/null @@ -1,130 +0,0 @@ -package lexer - -import ( - "bufio" - "io" - "unicode/utf8" - - "github.com/uji/solparser/token" -) - -type scanner interface { - Scan() bool - Text() string - Err() error -} - -type Lexer struct { - scanner scanner - - // scan result - token token.Token - err error - - // position state - offset int - lineOffset int - - // peek state - peeked bool - peekToken token.Token - peekErr error -} - -func New(input io.Reader) *Lexer { - s := bufio.NewScanner(input) - s.Split(ScanTokens) - - return &Lexer{ - scanner: s, - } -} - -func (l *Lexer) scan() (result bool, tkn token.Token, err error) { - offset := l.offset - lineOffset := l.lineOffset - - // Scan until next token. - for { - if !l.scanner.Scan() { - return false, token.Token{}, nil - } - if err := l.scanner.Err(); err != nil { - return false, token.Token{}, err - } - txt := l.scanner.Text() - r, _ := utf8.DecodeRune([]byte(txt)) - if r == '\n' { - lineOffset++ - offset = 0 - continue - } - if isSpace(r) { - offset += len([]rune(txt)) - continue - } - break - } - txt := l.scanner.Text() - pos := token.Position{ - Column: offset + 1, - Line: lineOffset + 1, - } - - return true, token.NewToken(txt, pos), nil -} - -func (l *Lexer) Scan() (result bool) { - if l.peeked { - l.token = l.peekToken - l.err = l.peekErr - l.peeked = false - return true - } - - rslt, tkn, err := l.scan() - if err != nil { - l.err = err - return false - } - if !rslt { - return false - } - l.token = tkn - l.offset = tkn.Pos.Column - 1 + len([]rune(tkn.Text)) - l.lineOffset = tkn.Pos.Line - 1 - - return true -} - -func (l Lexer) Token() token.Token { - return l.token -} - -func (l Lexer) Error() error { - return l.err -} - -func (l *Lexer) Peek() bool { - if l.peeked { - return true - } - - rslt, tkn, err := l.scan() - if !rslt { - return false - } - - l.peeked = true - l.peekToken = tkn - l.peekErr = err - return true -} - -func (l Lexer) PeekToken() token.Token { - return l.peekToken -} - -func (l Lexer) PeekError() error { - return l.peekErr -} diff --git a/lexer/lexer_test.go b/lexer/lexer_test.go deleted file mode 100644 index cbec599..0000000 --- a/lexer/lexer_test.go +++ /dev/null @@ -1,249 +0,0 @@ -package lexer - -import ( - "errors" - "testing" - - "github.com/google/go-cmp/cmp" - "github.com/uji/solparser/token" -) - -type scanResult struct { - text string - err error -} - -type mockScanner struct { - calledCount int - results []scanResult -} - -func (s *mockScanner) Scan() bool { - if s.calledCount == len(s.results) { - return false - } - s.calledCount++ - return true -} -func (s *mockScanner) Text() string { - return s.results[s.calledCount-1].text -} -func (s *mockScanner) Err() error { - return s.results[s.calledCount-1].err -} - -func TestLexerScan(t *testing.T) { - tests := []struct { - name string - offset int - lineOffset int - scanResults []scanResult - result bool - token token.Token - err error - }{ - { - name: "normal", - offset: 4, - lineOffset: 5, - scanResults: []scanResult{ - { - text: "pragma", - err: nil, - }, - }, - result: true, - token: token.Token{ - TokenType: token.Pragma, - Text: "pragma", - Pos: token.Position{ - Column: 5, - Line: 6, - }, - }, - }, - { - name: "when scan space", - offset: 4, - lineOffset: 5, - scanResults: []scanResult{ - { - text: " ", - err: nil, - }, - { - text: "^", - err: nil, - }, - }, - result: true, - token: token.Token{ - TokenType: token.Hat, - Text: "^", - Pos: token.Position{ - Column: 7, - Line: 6, - }, - }, - }, - { - name: "when scan \\n", - offset: 4, - lineOffset: 5, - scanResults: []scanResult{ - { - text: " ", - err: nil, - }, - { - text: "\n", - err: nil, - }, - { - text: "^", - err: nil, - }, - }, - result: true, - token: token.Token{ - TokenType: token.Hat, - Text: "^", - Pos: token.Position{ - Column: 1, - Line: 7, - }, - }, - }, - { - name: "when scan is done", - offset: 4, - lineOffset: 5, - scanResults: []scanResult{}, - result: false, - token: token.Token{}, - }, - { - name: "when peeked", - offset: 4, - lineOffset: 5, - scanResults: []scanResult{}, - result: false, - token: token.Token{}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - s := &mockScanner{ - results: tt.scanResults, - } - l := Lexer{ - offset: tt.offset, - lineOffset: tt.lineOffset, - scanner: s, - } - if rslt := l.Scan(); rslt != tt.result { - t.Errorf("result is wrong, want: %t, got: %t", tt.result, rslt) - } - if err := l.Error(); err != tt.err { - t.Errorf("error is wrong, want: %s, got: %s", tt.err, err) - } - if diff := cmp.Diff(tt.token, l.Token()); diff != "" { - t.Errorf(diff) - } - }) - } - - t.Run("when peeked", func(t *testing.T) { - s := &mockScanner{ - results: nil, - } - peekErr := errors.New("peekErr") - peekToken := token.Token{ - TokenType: token.Hat, - Text: "^", - Pos: token.Position{ - Column: 7, - Line: 6, - }, - } - l := Lexer{ - offset: 4, - lineOffset: 6, - scanner: s, - peeked: true, - peekToken: peekToken, - peekErr: peekErr, - } - if rslt := l.Scan(); !rslt { - t.Errorf("result is wrong, want: true, got: true") - } - if err := l.Error(); err != peekErr { - t.Errorf("error is wrong, want: %s, got: %s", peekErr, err) - } - if diff := cmp.Diff(peekToken, l.Token()); diff != "" { - t.Errorf(diff) - } - }) -} - -func TestLexerPeek(t *testing.T) { - tests := []struct { - name string - offset int - lineOffset int - scanResults []scanResult - result bool - token token.Token - err error - }{ - { - name: "normal", - offset: 4, - lineOffset: 5, - scanResults: []scanResult{ - { - text: "pragma", - err: nil, - }, - }, - result: true, - token: token.Token{ - TokenType: token.Pragma, - Text: "pragma", - Pos: token.Position{ - Column: 5, - Line: 6, - }, - }, - }, - { - name: "when scan is done", - offset: 4, - lineOffset: 5, - scanResults: []scanResult{}, - result: false, - token: token.Token{}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - s := &mockScanner{ - results: tt.scanResults, - } - l := Lexer{ - offset: tt.offset, - lineOffset: tt.lineOffset, - scanner: s, - } - if rslt := l.Peek(); tt.result != rslt { - t.Errorf("result is wrong, want: %t, got: %t", tt.result, rslt) - } - if err := l.PeekError(); err != tt.err { - t.Errorf("want: %s, got: %s", tt.err, err) - } - if diff := cmp.Diff(tt.token, l.PeekToken()); diff != "" { - t.Errorf(diff) - } - }) - } -} diff --git a/lexer/scanner.go b/lexer/scanner.go deleted file mode 100644 index 173b0bb..0000000 --- a/lexer/scanner.go +++ /dev/null @@ -1,64 +0,0 @@ -package lexer - -import ( - "unicode/utf8" -) - -// isSpace reports whether the character is a Unicode white space character. -// We avoid dependency on the unicode package, but check validity of the implementation -// in the tests. -func isSpace(r rune) bool { - if r <= '\u00FF' { - // Obvious ASCII ones: \t through \r plus space. Plus two Latin-1 oddballs. - switch r { - case ' ', '\t', '\v', '\f', '\r': - return true - case '\u0085', '\u00A0': - return true - } - return false - } - // High-valued ones. - if '\u2000' <= r && r <= '\u200a' { - return true - } - switch r { - case '\u1680', '\u2028', '\u2029', '\u202f', '\u205f', '\u3000': - return true - } - return false -} - -func isSplitSymbol(r rune) bool { - switch r { - case '^', '~', '<', '>', '=', ':', ';', '(', ')', '{', '}': - return true - } - return false -} - -func ScanTokens(data []byte, atEOF bool) (advance int, token []byte, err error) { - start := 0 - - // Return newline code or misk token. - r, width := utf8.DecodeRune(data[start:]) - if r == '\n' || isSplitSymbol(r) { - return start + width, data[start : start+width], nil - } - - tokenIsSpace := isSpace(r) - // Scan until isSpace result changed, marking end of word. - for width, i := 0, start; i < len(data); i += width { - var r rune - r, width = utf8.DecodeRune(data[i:]) - if r == '\n' || isSplitSymbol(r) || isSpace(r) != tokenIsSpace { - return i, data[start:i], nil - } - } - // If we're at EOF, we have a final, non-empty, non-terminated word. Return it. - if atEOF && len(data) > start { - return len(data), data[start:], nil - } - // Request more data. - return start, nil, nil -} diff --git a/lexer/scanner_test.go b/lexer/scanner_test.go deleted file mode 100644 index 5625fd1..0000000 --- a/lexer/scanner_test.go +++ /dev/null @@ -1,55 +0,0 @@ -package lexer_test - -import ( - "bufio" - "strings" - "testing" - - "github.com/google/go-cmp/cmp" - "github.com/uji/solparser/lexer" -) - -// Test that the token splitter. -func TestScanTokens(t *testing.T) { - tests := []struct { - input string - want []string - }{ - {"", []string{}}, - {" ", []string{" "}}, - {"\n", []string{"\n"}}, - {"a", []string{"a"}}, - {" a ", []string{" ", "a", " "}}, - {"abc def ", []string{"abc", " ", "def", " "}}, - {"a\tb\nc\r\td\f", []string{"a", "\t", "b", "\n", "c", "\r\t", "d", "\f"}}, - {"e\vf\u0085g\u00a0\n", []string{"e", "\v", "f", "\u0085", "g", "\u00a0", "\n"}}, - {"^0.8.13", []string{"^", "0.8.13"}}, - {"0.8.13;", []string{"0.8.13", ";"}}, - {"pragma solidity ^0.8.13;", []string{"pragma", " ", "solidity", " ", "^", "0.8.13", ";"}}, - {"contract HelloWorld {", []string{"contract", " ", "HelloWorld", " ", "{"}}, - } - - for n, c := range tests { - buf := strings.NewReader(c.input) - s := bufio.NewScanner(buf) - s.Split(lexer.ScanTokens) - - got := make([]string, 0, len(c.want)) - for i := 0; i < len(c.want); i++ { - if !s.Scan() { - break - } - got = append(got, s.Text()) - } - if s.Scan() { - t.Errorf("#%d: scan ran too long, got %q", n, s.Text()) - } - if diff := cmp.Diff(c.want, got); diff != "" { - t.Errorf("#%d: %s", n, diff) - } - err := s.Err() - if err != nil { - t.Errorf("#%d: %v", n, err) - } - } -} diff --git a/parser/Solidity.g4 b/parser/Solidity.g4 new file mode 100644 index 0000000..172ce52 --- /dev/null +++ b/parser/Solidity.g4 @@ -0,0 +1,491 @@ +// Copyright 2016-2017 Federico Bond +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// Copied from https://solidity.readthedocs.io/en/latest/grammar.html + +grammar Solidity; + +sourceUnit + : (pragmaDirective | importDirective | structDefinition | enumDefinition | contractDefinition)* EOF ; + +pragmaDirective + : 'pragma' pragmaName pragmaValue ';' ; + +pragmaName + : identifier ; + +pragmaValue + : version | expression ; + +version + : versionConstraint versionConstraint? ; + +versionConstraint + : versionOperator? VersionLiteral ; + +versionOperator + : '^' | '~' | '>=' | '>' | '<' | '<=' | '=' ; + +importDirective + : 'import' StringLiteralFragment ('as' identifier)? ';' + | 'import' ('*' | identifier) ('as' identifier)? 'from' StringLiteralFragment ';' + | 'import' '{' importDeclaration ( ',' importDeclaration )* '}' 'from' StringLiteralFragment ';' ; + +importDeclaration + : identifier ('as' identifier)? ; + +contractDefinition + : 'abstract'? ( 'contract' | 'interface' | 'library' ) identifier + ( 'is' inheritanceSpecifier (',' inheritanceSpecifier )* )? + '{' contractPart* '}' ; + +inheritanceSpecifier + : userDefinedTypeName ( '(' expressionList? ')' )? ; + +contractPart + : stateVariableDeclaration + | usingForDeclaration + | structDefinition + | modifierDefinition + | functionDefinition + | eventDefinition + | enumDefinition ; + +stateVariableDeclaration + : typeName + ( PublicKeyword | InternalKeyword | PrivateKeyword | ConstantKeyword | ImmutableKeyword | overrideSpecifier )* + identifier ('=' expression)? ';' ; + +overrideSpecifier : 'override' ( '(' userDefinedTypeName (',' userDefinedTypeName)* ')' )? ; + +usingForDeclaration + : 'using' identifier 'for' ('*' | typeName) ';' ; + +structDefinition + : 'struct' identifier + '{' ( variableDeclaration ';' (variableDeclaration ';')* )? '}' ; + +modifierDefinition + : 'modifier' identifier parameterList? ( VirtualKeyword | overrideSpecifier )* ( ';' | block ) ; + +functionDefinition + : functionDescriptor parameterList modifierList returnParameters? ( ';' | block ) ; + +functionDescriptor + : 'function' ( identifier | ReceiveKeyword | FallbackKeyword )? + | ConstructorKeyword + | FallbackKeyword + | ReceiveKeyword ; + +returnParameters + : 'returns' parameterList ; + +modifierList + : ( modifierInvocation | stateMutability | ExternalKeyword + | PublicKeyword | InternalKeyword | PrivateKeyword | VirtualKeyword | overrideSpecifier )* ; + +modifierInvocation + : identifier ( '(' expressionList? ')' )? ; + +eventDefinition + : 'event' identifier eventParameterList AnonymousKeyword? ';' ; + +enumDefinition + : 'enum' identifier '{' enumValue? (',' enumValue)* '}' ; + +enumValue + : identifier ; + +parameterList + : '(' ( parameter (',' parameter)* )? ')' ; + +parameter + : typeName storageLocation? identifier? ; + +eventParameterList + : '(' ( eventParameter (',' eventParameter)* )? ')' ; + +eventParameter + : typeName IndexedKeyword? identifier? ; + +variableDeclaration + : typeName storageLocation? identifier ; + +typeName + : elementaryTypeName + | userDefinedTypeName + | mapping + | typeName '[' expression? ']' + | functionTypeName ; + +userDefinedTypeName + : identifier ( '.' identifier )* ; + +mapping + : 'mapping' '(' (elementaryTypeName | userDefinedTypeName) '=>' typeName ')' ; + +functionTypeName + : 'function' parameterList modifierList returnParameters? ; + +storageLocation + : 'memory' | 'storage' | 'calldata'; + +stateMutability + : PureKeyword | ConstantKeyword | ViewKeyword | PayableKeyword ; + +block + : '{' statement* '}' ; + +statement + : ifStatement + | tryStatement + | whileStatement + | forStatement + | block + | inlineAssemblyStatement + | doWhileStatement + | continueStatement + | breakStatement + | returnStatement + | throwStatement + | emitStatement + | simpleStatement ; + +expressionStatement + : expression ';' ; + +ifStatement + : 'if' '(' expression ')' statement ( 'else' statement )? ; + +tryStatement : 'try' expression returnParameters? block catchClause+ ; + +// In reality catch clauses still are not processed as below +// the identifier can only be a set string: "Error". But plans +// of the Solidity team include possible expansion so we'll +// leave this as is, befitting with the Solidity docs. +catchClause : 'catch' ( identifier? parameterList )? block ; + +whileStatement + : 'while' '(' expression ')' statement ; + +forStatement + : 'for' '(' ( simpleStatement | ';' ) ( expressionStatement | ';' ) expression? ')' statement ; + +simpleStatement + : ( variableDeclarationStatement | expressionStatement ) ; + +inlineAssemblyStatement + : 'assembly' StringLiteralFragment? assemblyBlock ; + +doWhileStatement + : 'do' statement 'while' '(' expression ')' ';' ; + +continueStatement + : 'continue' ';' ; + +breakStatement + : 'break' ';' ; + +returnStatement + : 'return' expression? ';' ; + +// throw is no longer supported by latest Solidity. +throwStatement + : 'throw' ';' ; + +emitStatement + : 'emit' functionCall ';' ; + +// 'var' is no longer supported by latest Solidity. +variableDeclarationStatement + : ( 'var' identifierList | variableDeclaration | '(' variableDeclarationList ')' ) ( '=' expression )? ';'; + +variableDeclarationList + : variableDeclaration? (',' variableDeclaration? )* ; + +identifierList + : '(' ( identifier? ',' )* identifier? ')' ; + +elementaryTypeName + : 'address' PayableKeyword? | 'bool' | 'string' | 'var' | Int | Uint | 'byte' | Byte | Fixed | Ufixed ; + +Int + : 'int' | 'int8' | 'int16' | 'int24' | 'int32' | 'int40' | 'int48' | 'int56' | 'int64' | 'int72' | 'int80' | 'int88' | 'int96' | 'int104' | 'int112' | 'int120' | 'int128' | 'int136' | 'int144' | 'int152' | 'int160' | 'int168' | 'int176' | 'int184' | 'int192' | 'int200' | 'int208' | 'int216' | 'int224' | 'int232' | 'int240' | 'int248' | 'int256' ; + +Uint + : 'uint' | 'uint8' | 'uint16' | 'uint24' | 'uint32' | 'uint40' | 'uint48' | 'uint56' | 'uint64' | 'uint72' | 'uint80' | 'uint88' | 'uint96' | 'uint104' | 'uint112' | 'uint120' | 'uint128' | 'uint136' | 'uint144' | 'uint152' | 'uint160' | 'uint168' | 'uint176' | 'uint184' | 'uint192' | 'uint200' | 'uint208' | 'uint216' | 'uint224' | 'uint232' | 'uint240' | 'uint248' | 'uint256' ; + +Byte + : 'bytes' | 'bytes1' | 'bytes2' | 'bytes3' | 'bytes4' | 'bytes5' | 'bytes6' | 'bytes7' | 'bytes8' | 'bytes9' | 'bytes10' | 'bytes11' | 'bytes12' | 'bytes13' | 'bytes14' | 'bytes15' | 'bytes16' | 'bytes17' | 'bytes18' | 'bytes19' | 'bytes20' | 'bytes21' | 'bytes22' | 'bytes23' | 'bytes24' | 'bytes25' | 'bytes26' | 'bytes27' | 'bytes28' | 'bytes29' | 'bytes30' | 'bytes31' | 'bytes32' ; + +Fixed + : 'fixed' | ( 'fixed' [0-9]+ 'x' [0-9]+ ) ; + +Ufixed + : 'ufixed' | ( 'ufixed' [0-9]+ 'x' [0-9]+ ) ; + +expression + : expression ('++' | '--') + | 'new' typeName + | expression '[' expression? ']' + | expression '[' expression? ':' expression? ']' + | expression '.' identifier + | expression '{' nameValueList '}' + | expression '(' functionCallArguments ')' + | PayableKeyword '(' expression ')' + | '(' expression ')' + | ('++' | '--') expression + | ('+' | '-') expression + | ('after' | 'delete') expression + | '!' expression + | '~' expression + | expression '**' expression + | expression ('*' | '/' | '%') expression + | expression ('+' | '-') expression + | expression ('<<' | '>>') expression + | expression '&' expression + | expression '^' expression + | expression '|' expression + | expression ('<' | '>' | '<=' | '>=') expression + | expression ('==' | '!=') expression + | expression '&&' expression + | expression '||' expression + | expression '?' expression ':' expression + | expression ('=' | '|=' | '^=' | '&=' | '<<=' | '>>=' | '+=' | '-=' | '*=' | '/=' | '%=') expression + | primaryExpression ; + +primaryExpression + : BooleanLiteral + | numberLiteral + | hexLiteral + | stringLiteral + | identifier ('[' ']')? + | TypeKeyword + | tupleExpression + | typeNameExpression ('[' ']')? ; + +expressionList + : expression (',' expression)* ; + +nameValueList + : nameValue (',' nameValue)* ','? ; + +nameValue + : identifier ':' expression ; + +functionCallArguments + : '{' nameValueList? '}' + | expressionList? ; + +functionCall + : expression '(' functionCallArguments ')' ; + +tupleExpression + : '(' ( expression? ( ',' expression? )* ) ')' + | '[' ( expression ( ',' expression )* )? ']' ; + +typeNameExpression + : elementaryTypeName + | userDefinedTypeName ; + +assemblyItem + : identifier + | assemblyBlock + | assemblyExpression + | assemblyLocalDefinition + | assemblyAssignment + | assemblyStackAssignment + | labelDefinition + | assemblySwitch + | assemblyFunctionDefinition + | assemblyFor + | assemblyIf + | BreakKeyword + | ContinueKeyword + | LeaveKeyword + | subAssembly + | numberLiteral + | stringLiteral + | hexLiteral ; + +assemblyBlock + : '{' assemblyItem* '}' ; + +assemblyExpression + : assemblyCall | assemblyLiteral ; + +assemblyCall + : ( 'return' | 'address' | 'byte' | identifier ) ( '(' assemblyExpression? ( ',' assemblyExpression )* ')' )? ; + +assemblyLocalDefinition + : 'let' assemblyIdentifierList ( ':=' assemblyExpression )? ; + +assemblyAssignment + : assemblyIdentifierList ':=' assemblyExpression ; + +assemblyIdentifierList + : identifier ( ',' identifier )* ; + +assemblyStackAssignment + : '=:' identifier ; + +labelDefinition + : identifier ':' ; + +assemblySwitch + : 'switch' assemblyExpression assemblyCase* ; + +assemblyCase + : 'case' assemblyLiteral assemblyType? assemblyBlock + | 'default' assemblyBlock ; + +assemblyFunctionDefinition + : 'function' identifier '(' assemblyTypedVariableList? ')' + assemblyFunctionReturns? assemblyBlock ; + +assemblyFunctionReturns + : ( '-' '>' assemblyTypedVariableList ) ; + +assemblyFor + : 'for' assemblyBlock assemblyExpression assemblyBlock assemblyBlock ; + +assemblyIf + : 'if' assemblyExpression assemblyBlock ; + +assemblyLiteral + : ( stringLiteral | DecimalNumber | HexNumber | hexLiteral | BooleanLiteral ) assemblyType? ; + +assemblyTypedVariableList + : identifier assemblyType? ( ',' assemblyTypedVariableList )? ; + +assemblyType + : ':' identifier ; + +subAssembly + : 'assembly' identifier assemblyBlock ; + +numberLiteral + : (DecimalNumber | HexNumber) NumberUnit? ; + +identifier + : ('from' | 'calldata' | 'address' | Identifier) ; + +BooleanLiteral + : 'true' | 'false' ; + +DecimalNumber + : ( DecimalDigits | (DecimalDigits? '.' DecimalDigits) ) ( [eE] '-'? DecimalDigits )? ; + +fragment +DecimalDigits + : [0-9] ( '_'? [0-9] )* ; + +HexNumber + : '0' [xX] HexDigits ; + +fragment +HexDigits + : HexCharacter ( '_'? HexCharacter )* ; + +NumberUnit + : 'wei' | 'szabo' | 'finney' | 'ether' + | 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks' | 'years' ; + +HexLiteralFragment + : 'hex' (('"' HexDigits? '"') | ('\'' HexDigits? '\'')) ; + +hexLiteral : HexLiteralFragment+ ; + +fragment +HexPair + : HexCharacter HexCharacter ; + +fragment +HexCharacter + : [0-9A-Fa-f] ; + +ReservedKeyword + : 'after' + | 'case' + | 'default' + | 'final' + | 'in' + | 'inline' + | 'let' + | 'match' + | 'null' + | 'of' + | 'relocatable' + | 'static' + | 'switch' + | 'typeof' ; + +AnonymousKeyword : 'anonymous' ; +BreakKeyword : 'break' ; +ConstantKeyword : 'constant' ; +ImmutableKeyword : 'immutable' ; +ContinueKeyword : 'continue' ; +LeaveKeyword : 'leave' ; +ExternalKeyword : 'external' ; +IndexedKeyword : 'indexed' ; +InternalKeyword : 'internal' ; +PayableKeyword : 'payable' ; +PrivateKeyword : 'private' ; +PublicKeyword : 'public' ; +VirtualKeyword : 'virtual' ; +PureKeyword : 'pure' ; +TypeKeyword : 'type' ; +ViewKeyword : 'view' ; + +ConstructorKeyword : 'constructor' ; +FallbackKeyword : 'fallback' ; +ReceiveKeyword : 'receive' ; + +Identifier + : IdentifierStart IdentifierPart* ; + +fragment +IdentifierStart + : [a-zA-Z$_] ; + +fragment +IdentifierPart + : [a-zA-Z0-9$_] ; + +stringLiteral + : StringLiteralFragment+ ; + +StringLiteralFragment + : '"' DoubleQuotedStringCharacter* '"' + | '\'' SingleQuotedStringCharacter* '\'' ; + +fragment +DoubleQuotedStringCharacter + : ~["\r\n\\] | ('\\' .) ; + +fragment +SingleQuotedStringCharacter + : ~['\r\n\\] | ('\\' .) ; + +VersionLiteral + : [0-9]+ '.' [0-9]+ ('.' [0-9]+)? ; + +WS + : [ \t\r\n\u000C]+ -> skip ; + +COMMENT + : '/*' .*? '*/' -> channel(HIDDEN) ; + +LINE_COMMENT + : '//' ~[\r\n]* -> channel(HIDDEN) ; diff --git a/parser/Solidity.interp b/parser/Solidity.interp new file mode 100644 index 0000000..bda522b --- /dev/null +++ b/parser/Solidity.interp @@ -0,0 +1,355 @@ +token literal names: +null +'pragma' +';' +'^' +'~' +'>=' +'>' +'<' +'<=' +'=' +'import' +'as' +'*' +'from' +'{' +',' +'}' +'abstract' +'contract' +'interface' +'library' +'is' +'(' +')' +'override' +'using' +'for' +'struct' +'modifier' +'function' +'returns' +'event' +'enum' +'[' +']' +'.' +'mapping' +'=>' +'memory' +'storage' +'calldata' +'if' +'else' +'try' +'catch' +'while' +'assembly' +'do' +'return' +'throw' +'emit' +'var' +'address' +'bool' +'string' +'byte' +'++' +'--' +'new' +':' +'+' +'-' +'after' +'delete' +'!' +'**' +'/' +'%' +'<<' +'>>' +'&' +'|' +'==' +'!=' +'&&' +'||' +'?' +'|=' +'^=' +'&=' +'<<=' +'>>=' +'+=' +'-=' +'*=' +'/=' +'%=' +'let' +':=' +'=:' +'switch' +'case' +'default' +null +null +null +null +null +null +null +null +null +null +null +'anonymous' +'break' +'constant' +'immutable' +'continue' +'leave' +'external' +'indexed' +'internal' +'payable' +'private' +'public' +'virtual' +'pure' +'type' +'view' +'constructor' +'fallback' +'receive' +null +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +Int +Uint +Byte +Fixed +Ufixed +BooleanLiteral +DecimalNumber +HexNumber +NumberUnit +HexLiteralFragment +ReservedKeyword +AnonymousKeyword +BreakKeyword +ConstantKeyword +ImmutableKeyword +ContinueKeyword +LeaveKeyword +ExternalKeyword +IndexedKeyword +InternalKeyword +PayableKeyword +PrivateKeyword +PublicKeyword +VirtualKeyword +PureKeyword +TypeKeyword +ViewKeyword +ConstructorKeyword +FallbackKeyword +ReceiveKeyword +Identifier +StringLiteralFragment +VersionLiteral +WS +COMMENT +LINE_COMMENT + +rule names: +sourceUnit +pragmaDirective +pragmaName +pragmaValue +version +versionConstraint +versionOperator +importDirective +importDeclaration +contractDefinition +inheritanceSpecifier +contractPart +stateVariableDeclaration +overrideSpecifier +usingForDeclaration +structDefinition +modifierDefinition +functionDefinition +functionDescriptor +returnParameters +modifierList +modifierInvocation +eventDefinition +enumDefinition +enumValue +parameterList +parameter +eventParameterList +eventParameter +variableDeclaration +typeName +userDefinedTypeName +mapping +functionTypeName +storageLocation +stateMutability +block +statement +expressionStatement +ifStatement +tryStatement +catchClause +whileStatement +forStatement +simpleStatement +inlineAssemblyStatement +doWhileStatement +continueStatement +breakStatement +returnStatement +throwStatement +emitStatement +variableDeclarationStatement +variableDeclarationList +identifierList +elementaryTypeName +expression +primaryExpression +expressionList +nameValueList +nameValue +functionCallArguments +functionCall +tupleExpression +typeNameExpression +assemblyItem +assemblyBlock +assemblyExpression +assemblyCall +assemblyLocalDefinition +assemblyAssignment +assemblyIdentifierList +assemblyStackAssignment +labelDefinition +assemblySwitch +assemblyCase +assemblyFunctionDefinition +assemblyFunctionReturns +assemblyFor +assemblyIf +assemblyLiteral +assemblyTypedVariableList +assemblyType +subAssembly +numberLiteral +identifier +hexLiteral +stringLiteral + + +atn: +[4, 1, 128, 1057, 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, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 182, 8, 0, 10, 0, 12, 0, 185, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 3, 3, 198, 8, 3, 1, 4, 1, 4, 3, 4, 202, 8, 4, 1, 5, 3, 5, 205, 8, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 215, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 221, 8, 7, 1, 7, 1, 7, 3, 7, 225, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 235, 8, 7, 10, 7, 12, 7, 238, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 245, 8, 7, 1, 8, 1, 8, 1, 8, 3, 8, 250, 8, 8, 1, 9, 3, 9, 253, 8, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 5, 9, 261, 8, 9, 10, 9, 12, 9, 264, 9, 9, 3, 9, 266, 8, 9, 1, 9, 1, 9, 5, 9, 270, 8, 9, 10, 9, 12, 9, 273, 9, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 3, 10, 280, 8, 10, 1, 10, 3, 10, 283, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 292, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 301, 8, 12, 10, 12, 12, 12, 304, 9, 12, 1, 12, 1, 12, 1, 12, 3, 12, 309, 8, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 318, 8, 13, 10, 13, 12, 13, 321, 9, 13, 1, 13, 1, 13, 3, 13, 325, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 332, 8, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 344, 8, 15, 10, 15, 12, 15, 347, 9, 15, 3, 15, 349, 8, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 3, 16, 356, 8, 16, 1, 16, 1, 16, 5, 16, 360, 8, 16, 10, 16, 12, 16, 363, 9, 16, 1, 16, 1, 16, 3, 16, 367, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 373, 8, 17, 1, 17, 1, 17, 3, 17, 377, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 383, 8, 18, 1, 18, 1, 18, 1, 18, 3, 18, 388, 8, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 401, 8, 20, 10, 20, 12, 20, 404, 9, 20, 1, 21, 1, 21, 1, 21, 3, 21, 409, 8, 21, 1, 21, 3, 21, 412, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 418, 8, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 426, 8, 23, 1, 23, 1, 23, 5, 23, 430, 8, 23, 10, 23, 12, 23, 433, 9, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 443, 8, 25, 10, 25, 12, 25, 446, 9, 25, 3, 25, 448, 8, 25, 1, 25, 1, 25, 1, 26, 1, 26, 3, 26, 454, 8, 26, 1, 26, 3, 26, 457, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 5, 27, 463, 8, 27, 10, 27, 12, 27, 466, 9, 27, 3, 27, 468, 8, 27, 1, 27, 1, 27, 1, 28, 1, 28, 3, 28, 474, 8, 28, 1, 28, 3, 28, 477, 8, 28, 1, 29, 1, 29, 3, 29, 481, 8, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 490, 8, 30, 1, 30, 1, 30, 1, 30, 3, 30, 495, 8, 30, 1, 30, 5, 30, 498, 8, 30, 10, 30, 12, 30, 501, 9, 30, 1, 31, 1, 31, 1, 31, 5, 31, 506, 8, 31, 10, 31, 12, 31, 509, 9, 31, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 515, 8, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 525, 8, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 5, 36, 533, 8, 36, 10, 36, 12, 36, 536, 9, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 553, 8, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 565, 8, 39, 1, 40, 1, 40, 1, 40, 3, 40, 570, 8, 40, 1, 40, 1, 40, 4, 40, 574, 8, 40, 11, 40, 12, 40, 575, 1, 41, 1, 41, 3, 41, 580, 8, 41, 1, 41, 3, 41, 583, 8, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 597, 8, 43, 1, 43, 1, 43, 3, 43, 601, 8, 43, 1, 43, 3, 43, 604, 8, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 3, 44, 611, 8, 44, 1, 45, 1, 45, 3, 45, 615, 8, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 3, 49, 635, 8, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 653, 8, 52, 1, 52, 1, 52, 3, 52, 657, 8, 52, 1, 52, 1, 52, 1, 53, 3, 53, 662, 8, 53, 1, 53, 1, 53, 3, 53, 666, 8, 53, 5, 53, 668, 8, 53, 10, 53, 12, 53, 671, 9, 53, 1, 54, 1, 54, 3, 54, 675, 8, 54, 1, 54, 5, 54, 678, 8, 54, 10, 54, 12, 54, 681, 9, 54, 1, 54, 3, 54, 684, 8, 54, 1, 54, 1, 54, 1, 55, 1, 55, 3, 55, 690, 8, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 701, 8, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 726, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 775, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 781, 8, 56, 1, 56, 1, 56, 3, 56, 785, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 801, 8, 56, 10, 56, 12, 56, 804, 9, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 813, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 820, 8, 57, 3, 57, 822, 8, 57, 1, 58, 1, 58, 1, 58, 5, 58, 827, 8, 58, 10, 58, 12, 58, 830, 9, 58, 1, 59, 1, 59, 1, 59, 5, 59, 835, 8, 59, 10, 59, 12, 59, 838, 9, 59, 1, 59, 3, 59, 841, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 3, 61, 849, 8, 61, 1, 61, 1, 61, 3, 61, 853, 8, 61, 3, 61, 855, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 3, 63, 864, 8, 63, 1, 63, 1, 63, 3, 63, 868, 8, 63, 5, 63, 870, 8, 63, 10, 63, 12, 63, 873, 9, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 5, 63, 880, 8, 63, 10, 63, 12, 63, 883, 9, 63, 3, 63, 885, 8, 63, 1, 63, 3, 63, 888, 8, 63, 1, 64, 1, 64, 3, 64, 892, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 912, 8, 65, 1, 66, 1, 66, 5, 66, 916, 8, 66, 10, 66, 12, 66, 919, 9, 66, 1, 66, 1, 66, 1, 67, 1, 67, 3, 67, 925, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 931, 8, 68, 1, 68, 1, 68, 3, 68, 935, 8, 68, 1, 68, 1, 68, 5, 68, 939, 8, 68, 10, 68, 12, 68, 942, 9, 68, 1, 68, 3, 68, 945, 8, 68, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 951, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 5, 71, 960, 8, 71, 10, 71, 12, 71, 963, 9, 71, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 5, 74, 974, 8, 74, 10, 74, 12, 74, 977, 9, 74, 1, 75, 1, 75, 1, 75, 3, 75, 982, 8, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 988, 8, 75, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 994, 8, 76, 1, 76, 1, 76, 3, 76, 998, 8, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1021, 8, 80, 1, 80, 3, 80, 1024, 8, 80, 1, 81, 1, 81, 3, 81, 1028, 8, 81, 1, 81, 1, 81, 3, 81, 1032, 8, 81, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 3, 84, 1043, 8, 84, 1, 85, 1, 85, 1, 86, 4, 86, 1048, 8, 86, 11, 86, 12, 86, 1049, 1, 87, 4, 87, 1053, 8, 87, 11, 87, 12, 87, 1054, 1, 87, 0, 2, 60, 112, 88, 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, 0, 14, 1, 0, 3, 9, 1, 0, 18, 20, 1, 0, 38, 40, 4, 0, 106, 106, 113, 113, 117, 117, 119, 119, 1, 0, 56, 57, 1, 0, 60, 61, 1, 0, 62, 63, 2, 0, 12, 12, 66, 67, 1, 0, 68, 69, 1, 0, 5, 8, 1, 0, 72, 73, 2, 0, 9, 9, 77, 86, 1, 0, 99, 100, 4, 0, 13, 13, 40, 40, 52, 52, 123, 123, 1186, 0, 183, 1, 0, 0, 0, 2, 188, 1, 0, 0, 0, 4, 193, 1, 0, 0, 0, 6, 197, 1, 0, 0, 0, 8, 199, 1, 0, 0, 0, 10, 204, 1, 0, 0, 0, 12, 208, 1, 0, 0, 0, 14, 244, 1, 0, 0, 0, 16, 246, 1, 0, 0, 0, 18, 252, 1, 0, 0, 0, 20, 276, 1, 0, 0, 0, 22, 291, 1, 0, 0, 0, 24, 293, 1, 0, 0, 0, 26, 312, 1, 0, 0, 0, 28, 326, 1, 0, 0, 0, 30, 335, 1, 0, 0, 0, 32, 352, 1, 0, 0, 0, 34, 368, 1, 0, 0, 0, 36, 387, 1, 0, 0, 0, 38, 389, 1, 0, 0, 0, 40, 402, 1, 0, 0, 0, 42, 405, 1, 0, 0, 0, 44, 413, 1, 0, 0, 0, 46, 421, 1, 0, 0, 0, 48, 436, 1, 0, 0, 0, 50, 438, 1, 0, 0, 0, 52, 451, 1, 0, 0, 0, 54, 458, 1, 0, 0, 0, 56, 471, 1, 0, 0, 0, 58, 478, 1, 0, 0, 0, 60, 489, 1, 0, 0, 0, 62, 502, 1, 0, 0, 0, 64, 510, 1, 0, 0, 0, 66, 520, 1, 0, 0, 0, 68, 526, 1, 0, 0, 0, 70, 528, 1, 0, 0, 0, 72, 530, 1, 0, 0, 0, 74, 552, 1, 0, 0, 0, 76, 554, 1, 0, 0, 0, 78, 557, 1, 0, 0, 0, 80, 566, 1, 0, 0, 0, 82, 577, 1, 0, 0, 0, 84, 586, 1, 0, 0, 0, 86, 592, 1, 0, 0, 0, 88, 610, 1, 0, 0, 0, 90, 612, 1, 0, 0, 0, 92, 618, 1, 0, 0, 0, 94, 626, 1, 0, 0, 0, 96, 629, 1, 0, 0, 0, 98, 632, 1, 0, 0, 0, 100, 638, 1, 0, 0, 0, 102, 641, 1, 0, 0, 0, 104, 652, 1, 0, 0, 0, 106, 661, 1, 0, 0, 0, 108, 672, 1, 0, 0, 0, 110, 700, 1, 0, 0, 0, 112, 725, 1, 0, 0, 0, 114, 821, 1, 0, 0, 0, 116, 823, 1, 0, 0, 0, 118, 831, 1, 0, 0, 0, 120, 842, 1, 0, 0, 0, 122, 854, 1, 0, 0, 0, 124, 856, 1, 0, 0, 0, 126, 887, 1, 0, 0, 0, 128, 891, 1, 0, 0, 0, 130, 911, 1, 0, 0, 0, 132, 913, 1, 0, 0, 0, 134, 924, 1, 0, 0, 0, 136, 930, 1, 0, 0, 0, 138, 946, 1, 0, 0, 0, 140, 952, 1, 0, 0, 0, 142, 956, 1, 0, 0, 0, 144, 964, 1, 0, 0, 0, 146, 967, 1, 0, 0, 0, 148, 970, 1, 0, 0, 0, 150, 987, 1, 0, 0, 0, 152, 989, 1, 0, 0, 0, 154, 1001, 1, 0, 0, 0, 156, 1005, 1, 0, 0, 0, 158, 1011, 1, 0, 0, 0, 160, 1020, 1, 0, 0, 0, 162, 1025, 1, 0, 0, 0, 164, 1033, 1, 0, 0, 0, 166, 1036, 1, 0, 0, 0, 168, 1040, 1, 0, 0, 0, 170, 1044, 1, 0, 0, 0, 172, 1047, 1, 0, 0, 0, 174, 1052, 1, 0, 0, 0, 176, 182, 3, 2, 1, 0, 177, 182, 3, 14, 7, 0, 178, 182, 3, 30, 15, 0, 179, 182, 3, 46, 23, 0, 180, 182, 3, 18, 9, 0, 181, 176, 1, 0, 0, 0, 181, 177, 1, 0, 0, 0, 181, 178, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 181, 180, 1, 0, 0, 0, 182, 185, 1, 0, 0, 0, 183, 181, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 186, 1, 0, 0, 0, 185, 183, 1, 0, 0, 0, 186, 187, 5, 0, 0, 1, 187, 1, 1, 0, 0, 0, 188, 189, 5, 1, 0, 0, 189, 190, 3, 4, 2, 0, 190, 191, 3, 6, 3, 0, 191, 192, 5, 2, 0, 0, 192, 3, 1, 0, 0, 0, 193, 194, 3, 170, 85, 0, 194, 5, 1, 0, 0, 0, 195, 198, 3, 8, 4, 0, 196, 198, 3, 112, 56, 0, 197, 195, 1, 0, 0, 0, 197, 196, 1, 0, 0, 0, 198, 7, 1, 0, 0, 0, 199, 201, 3, 10, 5, 0, 200, 202, 3, 10, 5, 0, 201, 200, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 9, 1, 0, 0, 0, 203, 205, 3, 12, 6, 0, 204, 203, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 207, 5, 125, 0, 0, 207, 11, 1, 0, 0, 0, 208, 209, 7, 0, 0, 0, 209, 13, 1, 0, 0, 0, 210, 211, 5, 10, 0, 0, 211, 214, 5, 124, 0, 0, 212, 213, 5, 11, 0, 0, 213, 215, 3, 170, 85, 0, 214, 212, 1, 0, 0, 0, 214, 215, 1, 0, 0, 0, 215, 216, 1, 0, 0, 0, 216, 245, 5, 2, 0, 0, 217, 220, 5, 10, 0, 0, 218, 221, 5, 12, 0, 0, 219, 221, 3, 170, 85, 0, 220, 218, 1, 0, 0, 0, 220, 219, 1, 0, 0, 0, 221, 224, 1, 0, 0, 0, 222, 223, 5, 11, 0, 0, 223, 225, 3, 170, 85, 0, 224, 222, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 226, 1, 0, 0, 0, 226, 227, 5, 13, 0, 0, 227, 228, 5, 124, 0, 0, 228, 245, 5, 2, 0, 0, 229, 230, 5, 10, 0, 0, 230, 231, 5, 14, 0, 0, 231, 236, 3, 16, 8, 0, 232, 233, 5, 15, 0, 0, 233, 235, 3, 16, 8, 0, 234, 232, 1, 0, 0, 0, 235, 238, 1, 0, 0, 0, 236, 234, 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 239, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 239, 240, 5, 16, 0, 0, 240, 241, 5, 13, 0, 0, 241, 242, 5, 124, 0, 0, 242, 243, 5, 2, 0, 0, 243, 245, 1, 0, 0, 0, 244, 210, 1, 0, 0, 0, 244, 217, 1, 0, 0, 0, 244, 229, 1, 0, 0, 0, 245, 15, 1, 0, 0, 0, 246, 249, 3, 170, 85, 0, 247, 248, 5, 11, 0, 0, 248, 250, 3, 170, 85, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 17, 1, 0, 0, 0, 251, 253, 5, 17, 0, 0, 252, 251, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 255, 7, 1, 0, 0, 255, 265, 3, 170, 85, 0, 256, 257, 5, 21, 0, 0, 257, 262, 3, 20, 10, 0, 258, 259, 5, 15, 0, 0, 259, 261, 3, 20, 10, 0, 260, 258, 1, 0, 0, 0, 261, 264, 1, 0, 0, 0, 262, 260, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 266, 1, 0, 0, 0, 264, 262, 1, 0, 0, 0, 265, 256, 1, 0, 0, 0, 265, 266, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 271, 5, 14, 0, 0, 268, 270, 3, 22, 11, 0, 269, 268, 1, 0, 0, 0, 270, 273, 1, 0, 0, 0, 271, 269, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 274, 1, 0, 0, 0, 273, 271, 1, 0, 0, 0, 274, 275, 5, 16, 0, 0, 275, 19, 1, 0, 0, 0, 276, 282, 3, 62, 31, 0, 277, 279, 5, 22, 0, 0, 278, 280, 3, 116, 58, 0, 279, 278, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 283, 5, 23, 0, 0, 282, 277, 1, 0, 0, 0, 282, 283, 1, 0, 0, 0, 283, 21, 1, 0, 0, 0, 284, 292, 3, 24, 12, 0, 285, 292, 3, 28, 14, 0, 286, 292, 3, 30, 15, 0, 287, 292, 3, 32, 16, 0, 288, 292, 3, 34, 17, 0, 289, 292, 3, 44, 22, 0, 290, 292, 3, 46, 23, 0, 291, 284, 1, 0, 0, 0, 291, 285, 1, 0, 0, 0, 291, 286, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 288, 1, 0, 0, 0, 291, 289, 1, 0, 0, 0, 291, 290, 1, 0, 0, 0, 292, 23, 1, 0, 0, 0, 293, 302, 3, 60, 30, 0, 294, 301, 5, 115, 0, 0, 295, 301, 5, 112, 0, 0, 296, 301, 5, 114, 0, 0, 297, 301, 5, 106, 0, 0, 298, 301, 5, 107, 0, 0, 299, 301, 3, 26, 13, 0, 300, 294, 1, 0, 0, 0, 300, 295, 1, 0, 0, 0, 300, 296, 1, 0, 0, 0, 300, 297, 1, 0, 0, 0, 300, 298, 1, 0, 0, 0, 300, 299, 1, 0, 0, 0, 301, 304, 1, 0, 0, 0, 302, 300, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 305, 1, 0, 0, 0, 304, 302, 1, 0, 0, 0, 305, 308, 3, 170, 85, 0, 306, 307, 5, 9, 0, 0, 307, 309, 3, 112, 56, 0, 308, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 310, 1, 0, 0, 0, 310, 311, 5, 2, 0, 0, 311, 25, 1, 0, 0, 0, 312, 324, 5, 24, 0, 0, 313, 314, 5, 22, 0, 0, 314, 319, 3, 62, 31, 0, 315, 316, 5, 15, 0, 0, 316, 318, 3, 62, 31, 0, 317, 315, 1, 0, 0, 0, 318, 321, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 322, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 322, 323, 5, 23, 0, 0, 323, 325, 1, 0, 0, 0, 324, 313, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 27, 1, 0, 0, 0, 326, 327, 5, 25, 0, 0, 327, 328, 3, 170, 85, 0, 328, 331, 5, 26, 0, 0, 329, 332, 5, 12, 0, 0, 330, 332, 3, 60, 30, 0, 331, 329, 1, 0, 0, 0, 331, 330, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 334, 5, 2, 0, 0, 334, 29, 1, 0, 0, 0, 335, 336, 5, 27, 0, 0, 336, 337, 3, 170, 85, 0, 337, 348, 5, 14, 0, 0, 338, 339, 3, 58, 29, 0, 339, 345, 5, 2, 0, 0, 340, 341, 3, 58, 29, 0, 341, 342, 5, 2, 0, 0, 342, 344, 1, 0, 0, 0, 343, 340, 1, 0, 0, 0, 344, 347, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 349, 1, 0, 0, 0, 347, 345, 1, 0, 0, 0, 348, 338, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 351, 5, 16, 0, 0, 351, 31, 1, 0, 0, 0, 352, 353, 5, 28, 0, 0, 353, 355, 3, 170, 85, 0, 354, 356, 3, 50, 25, 0, 355, 354, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 361, 1, 0, 0, 0, 357, 360, 5, 116, 0, 0, 358, 360, 3, 26, 13, 0, 359, 357, 1, 0, 0, 0, 359, 358, 1, 0, 0, 0, 360, 363, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 366, 1, 0, 0, 0, 363, 361, 1, 0, 0, 0, 364, 367, 5, 2, 0, 0, 365, 367, 3, 72, 36, 0, 366, 364, 1, 0, 0, 0, 366, 365, 1, 0, 0, 0, 367, 33, 1, 0, 0, 0, 368, 369, 3, 36, 18, 0, 369, 370, 3, 50, 25, 0, 370, 372, 3, 40, 20, 0, 371, 373, 3, 38, 19, 0, 372, 371, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 376, 1, 0, 0, 0, 374, 377, 5, 2, 0, 0, 375, 377, 3, 72, 36, 0, 376, 374, 1, 0, 0, 0, 376, 375, 1, 0, 0, 0, 377, 35, 1, 0, 0, 0, 378, 382, 5, 29, 0, 0, 379, 383, 3, 170, 85, 0, 380, 383, 5, 122, 0, 0, 381, 383, 5, 121, 0, 0, 382, 379, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 382, 381, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 388, 1, 0, 0, 0, 384, 388, 5, 120, 0, 0, 385, 388, 5, 121, 0, 0, 386, 388, 5, 122, 0, 0, 387, 378, 1, 0, 0, 0, 387, 384, 1, 0, 0, 0, 387, 385, 1, 0, 0, 0, 387, 386, 1, 0, 0, 0, 388, 37, 1, 0, 0, 0, 389, 390, 5, 30, 0, 0, 390, 391, 3, 50, 25, 0, 391, 39, 1, 0, 0, 0, 392, 401, 3, 42, 21, 0, 393, 401, 3, 70, 35, 0, 394, 401, 5, 110, 0, 0, 395, 401, 5, 115, 0, 0, 396, 401, 5, 112, 0, 0, 397, 401, 5, 114, 0, 0, 398, 401, 5, 116, 0, 0, 399, 401, 3, 26, 13, 0, 400, 392, 1, 0, 0, 0, 400, 393, 1, 0, 0, 0, 400, 394, 1, 0, 0, 0, 400, 395, 1, 0, 0, 0, 400, 396, 1, 0, 0, 0, 400, 397, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 400, 399, 1, 0, 0, 0, 401, 404, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 41, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 405, 411, 3, 170, 85, 0, 406, 408, 5, 22, 0, 0, 407, 409, 3, 116, 58, 0, 408, 407, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 412, 5, 23, 0, 0, 411, 406, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 43, 1, 0, 0, 0, 413, 414, 5, 31, 0, 0, 414, 415, 3, 170, 85, 0, 415, 417, 3, 54, 27, 0, 416, 418, 5, 104, 0, 0, 417, 416, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 419, 420, 5, 2, 0, 0, 420, 45, 1, 0, 0, 0, 421, 422, 5, 32, 0, 0, 422, 423, 3, 170, 85, 0, 423, 425, 5, 14, 0, 0, 424, 426, 3, 48, 24, 0, 425, 424, 1, 0, 0, 0, 425, 426, 1, 0, 0, 0, 426, 431, 1, 0, 0, 0, 427, 428, 5, 15, 0, 0, 428, 430, 3, 48, 24, 0, 429, 427, 1, 0, 0, 0, 430, 433, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 434, 1, 0, 0, 0, 433, 431, 1, 0, 0, 0, 434, 435, 5, 16, 0, 0, 435, 47, 1, 0, 0, 0, 436, 437, 3, 170, 85, 0, 437, 49, 1, 0, 0, 0, 438, 447, 5, 22, 0, 0, 439, 444, 3, 52, 26, 0, 440, 441, 5, 15, 0, 0, 441, 443, 3, 52, 26, 0, 442, 440, 1, 0, 0, 0, 443, 446, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 444, 445, 1, 0, 0, 0, 445, 448, 1, 0, 0, 0, 446, 444, 1, 0, 0, 0, 447, 439, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 450, 5, 23, 0, 0, 450, 51, 1, 0, 0, 0, 451, 453, 3, 60, 30, 0, 452, 454, 3, 68, 34, 0, 453, 452, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 456, 1, 0, 0, 0, 455, 457, 3, 170, 85, 0, 456, 455, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 53, 1, 0, 0, 0, 458, 467, 5, 22, 0, 0, 459, 464, 3, 56, 28, 0, 460, 461, 5, 15, 0, 0, 461, 463, 3, 56, 28, 0, 462, 460, 1, 0, 0, 0, 463, 466, 1, 0, 0, 0, 464, 462, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 468, 1, 0, 0, 0, 466, 464, 1, 0, 0, 0, 467, 459, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 469, 1, 0, 0, 0, 469, 470, 5, 23, 0, 0, 470, 55, 1, 0, 0, 0, 471, 473, 3, 60, 30, 0, 472, 474, 5, 111, 0, 0, 473, 472, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 476, 1, 0, 0, 0, 475, 477, 3, 170, 85, 0, 476, 475, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 57, 1, 0, 0, 0, 478, 480, 3, 60, 30, 0, 479, 481, 3, 68, 34, 0, 480, 479, 1, 0, 0, 0, 480, 481, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 483, 3, 170, 85, 0, 483, 59, 1, 0, 0, 0, 484, 485, 6, 30, -1, 0, 485, 490, 3, 110, 55, 0, 486, 490, 3, 62, 31, 0, 487, 490, 3, 64, 32, 0, 488, 490, 3, 66, 33, 0, 489, 484, 1, 0, 0, 0, 489, 486, 1, 0, 0, 0, 489, 487, 1, 0, 0, 0, 489, 488, 1, 0, 0, 0, 490, 499, 1, 0, 0, 0, 491, 492, 10, 2, 0, 0, 492, 494, 5, 33, 0, 0, 493, 495, 3, 112, 56, 0, 494, 493, 1, 0, 0, 0, 494, 495, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 498, 5, 34, 0, 0, 497, 491, 1, 0, 0, 0, 498, 501, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 61, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 502, 507, 3, 170, 85, 0, 503, 504, 5, 35, 0, 0, 504, 506, 3, 170, 85, 0, 505, 503, 1, 0, 0, 0, 506, 509, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 63, 1, 0, 0, 0, 509, 507, 1, 0, 0, 0, 510, 511, 5, 36, 0, 0, 511, 514, 5, 22, 0, 0, 512, 515, 3, 110, 55, 0, 513, 515, 3, 62, 31, 0, 514, 512, 1, 0, 0, 0, 514, 513, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 517, 5, 37, 0, 0, 517, 518, 3, 60, 30, 0, 518, 519, 5, 23, 0, 0, 519, 65, 1, 0, 0, 0, 520, 521, 5, 29, 0, 0, 521, 522, 3, 50, 25, 0, 522, 524, 3, 40, 20, 0, 523, 525, 3, 38, 19, 0, 524, 523, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 67, 1, 0, 0, 0, 526, 527, 7, 2, 0, 0, 527, 69, 1, 0, 0, 0, 528, 529, 7, 3, 0, 0, 529, 71, 1, 0, 0, 0, 530, 534, 5, 14, 0, 0, 531, 533, 3, 74, 37, 0, 532, 531, 1, 0, 0, 0, 533, 536, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, 537, 1, 0, 0, 0, 536, 534, 1, 0, 0, 0, 537, 538, 5, 16, 0, 0, 538, 73, 1, 0, 0, 0, 539, 553, 3, 78, 39, 0, 540, 553, 3, 80, 40, 0, 541, 553, 3, 84, 42, 0, 542, 553, 3, 86, 43, 0, 543, 553, 3, 72, 36, 0, 544, 553, 3, 90, 45, 0, 545, 553, 3, 92, 46, 0, 546, 553, 3, 94, 47, 0, 547, 553, 3, 96, 48, 0, 548, 553, 3, 98, 49, 0, 549, 553, 3, 100, 50, 0, 550, 553, 3, 102, 51, 0, 551, 553, 3, 88, 44, 0, 552, 539, 1, 0, 0, 0, 552, 540, 1, 0, 0, 0, 552, 541, 1, 0, 0, 0, 552, 542, 1, 0, 0, 0, 552, 543, 1, 0, 0, 0, 552, 544, 1, 0, 0, 0, 552, 545, 1, 0, 0, 0, 552, 546, 1, 0, 0, 0, 552, 547, 1, 0, 0, 0, 552, 548, 1, 0, 0, 0, 552, 549, 1, 0, 0, 0, 552, 550, 1, 0, 0, 0, 552, 551, 1, 0, 0, 0, 553, 75, 1, 0, 0, 0, 554, 555, 3, 112, 56, 0, 555, 556, 5, 2, 0, 0, 556, 77, 1, 0, 0, 0, 557, 558, 5, 41, 0, 0, 558, 559, 5, 22, 0, 0, 559, 560, 3, 112, 56, 0, 560, 561, 5, 23, 0, 0, 561, 564, 3, 74, 37, 0, 562, 563, 5, 42, 0, 0, 563, 565, 3, 74, 37, 0, 564, 562, 1, 0, 0, 0, 564, 565, 1, 0, 0, 0, 565, 79, 1, 0, 0, 0, 566, 567, 5, 43, 0, 0, 567, 569, 3, 112, 56, 0, 568, 570, 3, 38, 19, 0, 569, 568, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 571, 1, 0, 0, 0, 571, 573, 3, 72, 36, 0, 572, 574, 3, 82, 41, 0, 573, 572, 1, 0, 0, 0, 574, 575, 1, 0, 0, 0, 575, 573, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 81, 1, 0, 0, 0, 577, 582, 5, 44, 0, 0, 578, 580, 3, 170, 85, 0, 579, 578, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 583, 3, 50, 25, 0, 582, 579, 1, 0, 0, 0, 582, 583, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 585, 3, 72, 36, 0, 585, 83, 1, 0, 0, 0, 586, 587, 5, 45, 0, 0, 587, 588, 5, 22, 0, 0, 588, 589, 3, 112, 56, 0, 589, 590, 5, 23, 0, 0, 590, 591, 3, 74, 37, 0, 591, 85, 1, 0, 0, 0, 592, 593, 5, 26, 0, 0, 593, 596, 5, 22, 0, 0, 594, 597, 3, 88, 44, 0, 595, 597, 5, 2, 0, 0, 596, 594, 1, 0, 0, 0, 596, 595, 1, 0, 0, 0, 597, 600, 1, 0, 0, 0, 598, 601, 3, 76, 38, 0, 599, 601, 5, 2, 0, 0, 600, 598, 1, 0, 0, 0, 600, 599, 1, 0, 0, 0, 601, 603, 1, 0, 0, 0, 602, 604, 3, 112, 56, 0, 603, 602, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 5, 23, 0, 0, 606, 607, 3, 74, 37, 0, 607, 87, 1, 0, 0, 0, 608, 611, 3, 104, 52, 0, 609, 611, 3, 76, 38, 0, 610, 608, 1, 0, 0, 0, 610, 609, 1, 0, 0, 0, 611, 89, 1, 0, 0, 0, 612, 614, 5, 46, 0, 0, 613, 615, 5, 124, 0, 0, 614, 613, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 617, 3, 132, 66, 0, 617, 91, 1, 0, 0, 0, 618, 619, 5, 47, 0, 0, 619, 620, 3, 74, 37, 0, 620, 621, 5, 45, 0, 0, 621, 622, 5, 22, 0, 0, 622, 623, 3, 112, 56, 0, 623, 624, 5, 23, 0, 0, 624, 625, 5, 2, 0, 0, 625, 93, 1, 0, 0, 0, 626, 627, 5, 108, 0, 0, 627, 628, 5, 2, 0, 0, 628, 95, 1, 0, 0, 0, 629, 630, 5, 105, 0, 0, 630, 631, 5, 2, 0, 0, 631, 97, 1, 0, 0, 0, 632, 634, 5, 48, 0, 0, 633, 635, 3, 112, 56, 0, 634, 633, 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 637, 5, 2, 0, 0, 637, 99, 1, 0, 0, 0, 638, 639, 5, 49, 0, 0, 639, 640, 5, 2, 0, 0, 640, 101, 1, 0, 0, 0, 641, 642, 5, 50, 0, 0, 642, 643, 3, 124, 62, 0, 643, 644, 5, 2, 0, 0, 644, 103, 1, 0, 0, 0, 645, 646, 5, 51, 0, 0, 646, 653, 3, 108, 54, 0, 647, 653, 3, 58, 29, 0, 648, 649, 5, 22, 0, 0, 649, 650, 3, 106, 53, 0, 650, 651, 5, 23, 0, 0, 651, 653, 1, 0, 0, 0, 652, 645, 1, 0, 0, 0, 652, 647, 1, 0, 0, 0, 652, 648, 1, 0, 0, 0, 653, 656, 1, 0, 0, 0, 654, 655, 5, 9, 0, 0, 655, 657, 3, 112, 56, 0, 656, 654, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 659, 5, 2, 0, 0, 659, 105, 1, 0, 0, 0, 660, 662, 3, 58, 29, 0, 661, 660, 1, 0, 0, 0, 661, 662, 1, 0, 0, 0, 662, 669, 1, 0, 0, 0, 663, 665, 5, 15, 0, 0, 664, 666, 3, 58, 29, 0, 665, 664, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 668, 1, 0, 0, 0, 667, 663, 1, 0, 0, 0, 668, 671, 1, 0, 0, 0, 669, 667, 1, 0, 0, 0, 669, 670, 1, 0, 0, 0, 670, 107, 1, 0, 0, 0, 671, 669, 1, 0, 0, 0, 672, 679, 5, 22, 0, 0, 673, 675, 3, 170, 85, 0, 674, 673, 1, 0, 0, 0, 674, 675, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 678, 5, 15, 0, 0, 677, 674, 1, 0, 0, 0, 678, 681, 1, 0, 0, 0, 679, 677, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 683, 1, 0, 0, 0, 681, 679, 1, 0, 0, 0, 682, 684, 3, 170, 85, 0, 683, 682, 1, 0, 0, 0, 683, 684, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 686, 5, 23, 0, 0, 686, 109, 1, 0, 0, 0, 687, 689, 5, 52, 0, 0, 688, 690, 5, 113, 0, 0, 689, 688, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 690, 701, 1, 0, 0, 0, 691, 701, 5, 53, 0, 0, 692, 701, 5, 54, 0, 0, 693, 701, 5, 51, 0, 0, 694, 701, 5, 93, 0, 0, 695, 701, 5, 94, 0, 0, 696, 701, 5, 55, 0, 0, 697, 701, 5, 95, 0, 0, 698, 701, 5, 96, 0, 0, 699, 701, 5, 97, 0, 0, 700, 687, 1, 0, 0, 0, 700, 691, 1, 0, 0, 0, 700, 692, 1, 0, 0, 0, 700, 693, 1, 0, 0, 0, 700, 694, 1, 0, 0, 0, 700, 695, 1, 0, 0, 0, 700, 696, 1, 0, 0, 0, 700, 697, 1, 0, 0, 0, 700, 698, 1, 0, 0, 0, 700, 699, 1, 0, 0, 0, 701, 111, 1, 0, 0, 0, 702, 703, 6, 56, -1, 0, 703, 704, 5, 58, 0, 0, 704, 726, 3, 60, 30, 0, 705, 706, 5, 113, 0, 0, 706, 707, 5, 22, 0, 0, 707, 708, 3, 112, 56, 0, 708, 709, 5, 23, 0, 0, 709, 726, 1, 0, 0, 0, 710, 711, 5, 22, 0, 0, 711, 712, 3, 112, 56, 0, 712, 713, 5, 23, 0, 0, 713, 726, 1, 0, 0, 0, 714, 715, 7, 4, 0, 0, 715, 726, 3, 112, 56, 19, 716, 717, 7, 5, 0, 0, 717, 726, 3, 112, 56, 18, 718, 719, 7, 6, 0, 0, 719, 726, 3, 112, 56, 17, 720, 721, 5, 64, 0, 0, 721, 726, 3, 112, 56, 16, 722, 723, 5, 4, 0, 0, 723, 726, 3, 112, 56, 15, 724, 726, 3, 114, 57, 0, 725, 702, 1, 0, 0, 0, 725, 705, 1, 0, 0, 0, 725, 710, 1, 0, 0, 0, 725, 714, 1, 0, 0, 0, 725, 716, 1, 0, 0, 0, 725, 718, 1, 0, 0, 0, 725, 720, 1, 0, 0, 0, 725, 722, 1, 0, 0, 0, 725, 724, 1, 0, 0, 0, 726, 802, 1, 0, 0, 0, 727, 728, 10, 14, 0, 0, 728, 729, 5, 65, 0, 0, 729, 801, 3, 112, 56, 15, 730, 731, 10, 13, 0, 0, 731, 732, 7, 7, 0, 0, 732, 801, 3, 112, 56, 14, 733, 734, 10, 12, 0, 0, 734, 735, 7, 5, 0, 0, 735, 801, 3, 112, 56, 13, 736, 737, 10, 11, 0, 0, 737, 738, 7, 8, 0, 0, 738, 801, 3, 112, 56, 12, 739, 740, 10, 10, 0, 0, 740, 741, 5, 70, 0, 0, 741, 801, 3, 112, 56, 11, 742, 743, 10, 9, 0, 0, 743, 744, 5, 3, 0, 0, 744, 801, 3, 112, 56, 10, 745, 746, 10, 8, 0, 0, 746, 747, 5, 71, 0, 0, 747, 801, 3, 112, 56, 9, 748, 749, 10, 7, 0, 0, 749, 750, 7, 9, 0, 0, 750, 801, 3, 112, 56, 8, 751, 752, 10, 6, 0, 0, 752, 753, 7, 10, 0, 0, 753, 801, 3, 112, 56, 7, 754, 755, 10, 5, 0, 0, 755, 756, 5, 74, 0, 0, 756, 801, 3, 112, 56, 6, 757, 758, 10, 4, 0, 0, 758, 759, 5, 75, 0, 0, 759, 801, 3, 112, 56, 5, 760, 761, 10, 3, 0, 0, 761, 762, 5, 76, 0, 0, 762, 763, 3, 112, 56, 0, 763, 764, 5, 59, 0, 0, 764, 765, 3, 112, 56, 4, 765, 801, 1, 0, 0, 0, 766, 767, 10, 2, 0, 0, 767, 768, 7, 11, 0, 0, 768, 801, 3, 112, 56, 3, 769, 770, 10, 28, 0, 0, 770, 801, 7, 4, 0, 0, 771, 772, 10, 26, 0, 0, 772, 774, 5, 33, 0, 0, 773, 775, 3, 112, 56, 0, 774, 773, 1, 0, 0, 0, 774, 775, 1, 0, 0, 0, 775, 776, 1, 0, 0, 0, 776, 801, 5, 34, 0, 0, 777, 778, 10, 25, 0, 0, 778, 780, 5, 33, 0, 0, 779, 781, 3, 112, 56, 0, 780, 779, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 782, 1, 0, 0, 0, 782, 784, 5, 59, 0, 0, 783, 785, 3, 112, 56, 0, 784, 783, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 786, 1, 0, 0, 0, 786, 801, 5, 34, 0, 0, 787, 788, 10, 24, 0, 0, 788, 789, 5, 35, 0, 0, 789, 801, 3, 170, 85, 0, 790, 791, 10, 23, 0, 0, 791, 792, 5, 14, 0, 0, 792, 793, 3, 118, 59, 0, 793, 794, 5, 16, 0, 0, 794, 801, 1, 0, 0, 0, 795, 796, 10, 22, 0, 0, 796, 797, 5, 22, 0, 0, 797, 798, 3, 122, 61, 0, 798, 799, 5, 23, 0, 0, 799, 801, 1, 0, 0, 0, 800, 727, 1, 0, 0, 0, 800, 730, 1, 0, 0, 0, 800, 733, 1, 0, 0, 0, 800, 736, 1, 0, 0, 0, 800, 739, 1, 0, 0, 0, 800, 742, 1, 0, 0, 0, 800, 745, 1, 0, 0, 0, 800, 748, 1, 0, 0, 0, 800, 751, 1, 0, 0, 0, 800, 754, 1, 0, 0, 0, 800, 757, 1, 0, 0, 0, 800, 760, 1, 0, 0, 0, 800, 766, 1, 0, 0, 0, 800, 769, 1, 0, 0, 0, 800, 771, 1, 0, 0, 0, 800, 777, 1, 0, 0, 0, 800, 787, 1, 0, 0, 0, 800, 790, 1, 0, 0, 0, 800, 795, 1, 0, 0, 0, 801, 804, 1, 0, 0, 0, 802, 800, 1, 0, 0, 0, 802, 803, 1, 0, 0, 0, 803, 113, 1, 0, 0, 0, 804, 802, 1, 0, 0, 0, 805, 822, 5, 98, 0, 0, 806, 822, 3, 168, 84, 0, 807, 822, 3, 172, 86, 0, 808, 822, 3, 174, 87, 0, 809, 812, 3, 170, 85, 0, 810, 811, 5, 33, 0, 0, 811, 813, 5, 34, 0, 0, 812, 810, 1, 0, 0, 0, 812, 813, 1, 0, 0, 0, 813, 822, 1, 0, 0, 0, 814, 822, 5, 118, 0, 0, 815, 822, 3, 126, 63, 0, 816, 819, 3, 128, 64, 0, 817, 818, 5, 33, 0, 0, 818, 820, 5, 34, 0, 0, 819, 817, 1, 0, 0, 0, 819, 820, 1, 0, 0, 0, 820, 822, 1, 0, 0, 0, 821, 805, 1, 0, 0, 0, 821, 806, 1, 0, 0, 0, 821, 807, 1, 0, 0, 0, 821, 808, 1, 0, 0, 0, 821, 809, 1, 0, 0, 0, 821, 814, 1, 0, 0, 0, 821, 815, 1, 0, 0, 0, 821, 816, 1, 0, 0, 0, 822, 115, 1, 0, 0, 0, 823, 828, 3, 112, 56, 0, 824, 825, 5, 15, 0, 0, 825, 827, 3, 112, 56, 0, 826, 824, 1, 0, 0, 0, 827, 830, 1, 0, 0, 0, 828, 826, 1, 0, 0, 0, 828, 829, 1, 0, 0, 0, 829, 117, 1, 0, 0, 0, 830, 828, 1, 0, 0, 0, 831, 836, 3, 120, 60, 0, 832, 833, 5, 15, 0, 0, 833, 835, 3, 120, 60, 0, 834, 832, 1, 0, 0, 0, 835, 838, 1, 0, 0, 0, 836, 834, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 840, 1, 0, 0, 0, 838, 836, 1, 0, 0, 0, 839, 841, 5, 15, 0, 0, 840, 839, 1, 0, 0, 0, 840, 841, 1, 0, 0, 0, 841, 119, 1, 0, 0, 0, 842, 843, 3, 170, 85, 0, 843, 844, 5, 59, 0, 0, 844, 845, 3, 112, 56, 0, 845, 121, 1, 0, 0, 0, 846, 848, 5, 14, 0, 0, 847, 849, 3, 118, 59, 0, 848, 847, 1, 0, 0, 0, 848, 849, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 855, 5, 16, 0, 0, 851, 853, 3, 116, 58, 0, 852, 851, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 855, 1, 0, 0, 0, 854, 846, 1, 0, 0, 0, 854, 852, 1, 0, 0, 0, 855, 123, 1, 0, 0, 0, 856, 857, 3, 112, 56, 0, 857, 858, 5, 22, 0, 0, 858, 859, 3, 122, 61, 0, 859, 860, 5, 23, 0, 0, 860, 125, 1, 0, 0, 0, 861, 863, 5, 22, 0, 0, 862, 864, 3, 112, 56, 0, 863, 862, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 871, 1, 0, 0, 0, 865, 867, 5, 15, 0, 0, 866, 868, 3, 112, 56, 0, 867, 866, 1, 0, 0, 0, 867, 868, 1, 0, 0, 0, 868, 870, 1, 0, 0, 0, 869, 865, 1, 0, 0, 0, 870, 873, 1, 0, 0, 0, 871, 869, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 874, 1, 0, 0, 0, 873, 871, 1, 0, 0, 0, 874, 888, 5, 23, 0, 0, 875, 884, 5, 33, 0, 0, 876, 881, 3, 112, 56, 0, 877, 878, 5, 15, 0, 0, 878, 880, 3, 112, 56, 0, 879, 877, 1, 0, 0, 0, 880, 883, 1, 0, 0, 0, 881, 879, 1, 0, 0, 0, 881, 882, 1, 0, 0, 0, 882, 885, 1, 0, 0, 0, 883, 881, 1, 0, 0, 0, 884, 876, 1, 0, 0, 0, 884, 885, 1, 0, 0, 0, 885, 886, 1, 0, 0, 0, 886, 888, 5, 34, 0, 0, 887, 861, 1, 0, 0, 0, 887, 875, 1, 0, 0, 0, 888, 127, 1, 0, 0, 0, 889, 892, 3, 110, 55, 0, 890, 892, 3, 62, 31, 0, 891, 889, 1, 0, 0, 0, 891, 890, 1, 0, 0, 0, 892, 129, 1, 0, 0, 0, 893, 912, 3, 170, 85, 0, 894, 912, 3, 132, 66, 0, 895, 912, 3, 134, 67, 0, 896, 912, 3, 138, 69, 0, 897, 912, 3, 140, 70, 0, 898, 912, 3, 144, 72, 0, 899, 912, 3, 146, 73, 0, 900, 912, 3, 148, 74, 0, 901, 912, 3, 152, 76, 0, 902, 912, 3, 156, 78, 0, 903, 912, 3, 158, 79, 0, 904, 912, 5, 105, 0, 0, 905, 912, 5, 108, 0, 0, 906, 912, 5, 109, 0, 0, 907, 912, 3, 166, 83, 0, 908, 912, 3, 168, 84, 0, 909, 912, 3, 174, 87, 0, 910, 912, 3, 172, 86, 0, 911, 893, 1, 0, 0, 0, 911, 894, 1, 0, 0, 0, 911, 895, 1, 0, 0, 0, 911, 896, 1, 0, 0, 0, 911, 897, 1, 0, 0, 0, 911, 898, 1, 0, 0, 0, 911, 899, 1, 0, 0, 0, 911, 900, 1, 0, 0, 0, 911, 901, 1, 0, 0, 0, 911, 902, 1, 0, 0, 0, 911, 903, 1, 0, 0, 0, 911, 904, 1, 0, 0, 0, 911, 905, 1, 0, 0, 0, 911, 906, 1, 0, 0, 0, 911, 907, 1, 0, 0, 0, 911, 908, 1, 0, 0, 0, 911, 909, 1, 0, 0, 0, 911, 910, 1, 0, 0, 0, 912, 131, 1, 0, 0, 0, 913, 917, 5, 14, 0, 0, 914, 916, 3, 130, 65, 0, 915, 914, 1, 0, 0, 0, 916, 919, 1, 0, 0, 0, 917, 915, 1, 0, 0, 0, 917, 918, 1, 0, 0, 0, 918, 920, 1, 0, 0, 0, 919, 917, 1, 0, 0, 0, 920, 921, 5, 16, 0, 0, 921, 133, 1, 0, 0, 0, 922, 925, 3, 136, 68, 0, 923, 925, 3, 160, 80, 0, 924, 922, 1, 0, 0, 0, 924, 923, 1, 0, 0, 0, 925, 135, 1, 0, 0, 0, 926, 931, 5, 48, 0, 0, 927, 931, 5, 52, 0, 0, 928, 931, 5, 55, 0, 0, 929, 931, 3, 170, 85, 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, 944, 1, 0, 0, 0, 932, 934, 5, 22, 0, 0, 933, 935, 3, 134, 67, 0, 934, 933, 1, 0, 0, 0, 934, 935, 1, 0, 0, 0, 935, 940, 1, 0, 0, 0, 936, 937, 5, 15, 0, 0, 937, 939, 3, 134, 67, 0, 938, 936, 1, 0, 0, 0, 939, 942, 1, 0, 0, 0, 940, 938, 1, 0, 0, 0, 940, 941, 1, 0, 0, 0, 941, 943, 1, 0, 0, 0, 942, 940, 1, 0, 0, 0, 943, 945, 5, 23, 0, 0, 944, 932, 1, 0, 0, 0, 944, 945, 1, 0, 0, 0, 945, 137, 1, 0, 0, 0, 946, 947, 5, 87, 0, 0, 947, 950, 3, 142, 71, 0, 948, 949, 5, 88, 0, 0, 949, 951, 3, 134, 67, 0, 950, 948, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 139, 1, 0, 0, 0, 952, 953, 3, 142, 71, 0, 953, 954, 5, 88, 0, 0, 954, 955, 3, 134, 67, 0, 955, 141, 1, 0, 0, 0, 956, 961, 3, 170, 85, 0, 957, 958, 5, 15, 0, 0, 958, 960, 3, 170, 85, 0, 959, 957, 1, 0, 0, 0, 960, 963, 1, 0, 0, 0, 961, 959, 1, 0, 0, 0, 961, 962, 1, 0, 0, 0, 962, 143, 1, 0, 0, 0, 963, 961, 1, 0, 0, 0, 964, 965, 5, 89, 0, 0, 965, 966, 3, 170, 85, 0, 966, 145, 1, 0, 0, 0, 967, 968, 3, 170, 85, 0, 968, 969, 5, 59, 0, 0, 969, 147, 1, 0, 0, 0, 970, 971, 5, 90, 0, 0, 971, 975, 3, 134, 67, 0, 972, 974, 3, 150, 75, 0, 973, 972, 1, 0, 0, 0, 974, 977, 1, 0, 0, 0, 975, 973, 1, 0, 0, 0, 975, 976, 1, 0, 0, 0, 976, 149, 1, 0, 0, 0, 977, 975, 1, 0, 0, 0, 978, 979, 5, 91, 0, 0, 979, 981, 3, 160, 80, 0, 980, 982, 3, 164, 82, 0, 981, 980, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 983, 1, 0, 0, 0, 983, 984, 3, 132, 66, 0, 984, 988, 1, 0, 0, 0, 985, 986, 5, 92, 0, 0, 986, 988, 3, 132, 66, 0, 987, 978, 1, 0, 0, 0, 987, 985, 1, 0, 0, 0, 988, 151, 1, 0, 0, 0, 989, 990, 5, 29, 0, 0, 990, 991, 3, 170, 85, 0, 991, 993, 5, 22, 0, 0, 992, 994, 3, 162, 81, 0, 993, 992, 1, 0, 0, 0, 993, 994, 1, 0, 0, 0, 994, 995, 1, 0, 0, 0, 995, 997, 5, 23, 0, 0, 996, 998, 3, 154, 77, 0, 997, 996, 1, 0, 0, 0, 997, 998, 1, 0, 0, 0, 998, 999, 1, 0, 0, 0, 999, 1000, 3, 132, 66, 0, 1000, 153, 1, 0, 0, 0, 1001, 1002, 5, 61, 0, 0, 1002, 1003, 5, 6, 0, 0, 1003, 1004, 3, 162, 81, 0, 1004, 155, 1, 0, 0, 0, 1005, 1006, 5, 26, 0, 0, 1006, 1007, 3, 132, 66, 0, 1007, 1008, 3, 134, 67, 0, 1008, 1009, 3, 132, 66, 0, 1009, 1010, 3, 132, 66, 0, 1010, 157, 1, 0, 0, 0, 1011, 1012, 5, 41, 0, 0, 1012, 1013, 3, 134, 67, 0, 1013, 1014, 3, 132, 66, 0, 1014, 159, 1, 0, 0, 0, 1015, 1021, 3, 174, 87, 0, 1016, 1021, 5, 99, 0, 0, 1017, 1021, 5, 100, 0, 0, 1018, 1021, 3, 172, 86, 0, 1019, 1021, 5, 98, 0, 0, 1020, 1015, 1, 0, 0, 0, 1020, 1016, 1, 0, 0, 0, 1020, 1017, 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1020, 1019, 1, 0, 0, 0, 1021, 1023, 1, 0, 0, 0, 1022, 1024, 3, 164, 82, 0, 1023, 1022, 1, 0, 0, 0, 1023, 1024, 1, 0, 0, 0, 1024, 161, 1, 0, 0, 0, 1025, 1027, 3, 170, 85, 0, 1026, 1028, 3, 164, 82, 0, 1027, 1026, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 1031, 1, 0, 0, 0, 1029, 1030, 5, 15, 0, 0, 1030, 1032, 3, 162, 81, 0, 1031, 1029, 1, 0, 0, 0, 1031, 1032, 1, 0, 0, 0, 1032, 163, 1, 0, 0, 0, 1033, 1034, 5, 59, 0, 0, 1034, 1035, 3, 170, 85, 0, 1035, 165, 1, 0, 0, 0, 1036, 1037, 5, 46, 0, 0, 1037, 1038, 3, 170, 85, 0, 1038, 1039, 3, 132, 66, 0, 1039, 167, 1, 0, 0, 0, 1040, 1042, 7, 12, 0, 0, 1041, 1043, 5, 101, 0, 0, 1042, 1041, 1, 0, 0, 0, 1042, 1043, 1, 0, 0, 0, 1043, 169, 1, 0, 0, 0, 1044, 1045, 7, 13, 0, 0, 1045, 171, 1, 0, 0, 0, 1046, 1048, 5, 102, 0, 0, 1047, 1046, 1, 0, 0, 0, 1048, 1049, 1, 0, 0, 0, 1049, 1047, 1, 0, 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 173, 1, 0, 0, 0, 1051, 1053, 5, 124, 0, 0, 1052, 1051, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 1052, 1, 0, 0, 0, 1054, 1055, 1, 0, 0, 0, 1055, 175, 1, 0, 0, 0, 122, 181, 183, 197, 201, 204, 214, 220, 224, 236, 244, 249, 252, 262, 265, 271, 279, 282, 291, 300, 302, 308, 319, 324, 331, 345, 348, 355, 359, 361, 366, 372, 376, 382, 387, 400, 402, 408, 411, 417, 425, 431, 444, 447, 453, 456, 464, 467, 473, 476, 480, 489, 494, 499, 507, 514, 524, 534, 552, 564, 569, 575, 579, 582, 596, 600, 603, 610, 614, 634, 652, 656, 661, 665, 669, 674, 679, 683, 689, 700, 725, 774, 780, 784, 800, 802, 812, 819, 821, 828, 836, 840, 848, 852, 854, 863, 867, 871, 881, 884, 887, 891, 911, 917, 924, 930, 934, 940, 944, 950, 961, 975, 981, 987, 993, 997, 1020, 1023, 1027, 1031, 1042, 1049, 1054] \ No newline at end of file diff --git a/parser/Solidity.tokens b/parser/Solidity.tokens new file mode 100644 index 0000000..ffcbd26 --- /dev/null +++ b/parser/Solidity.tokens @@ -0,0 +1,239 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +T__9=10 +T__10=11 +T__11=12 +T__12=13 +T__13=14 +T__14=15 +T__15=16 +T__16=17 +T__17=18 +T__18=19 +T__19=20 +T__20=21 +T__21=22 +T__22=23 +T__23=24 +T__24=25 +T__25=26 +T__26=27 +T__27=28 +T__28=29 +T__29=30 +T__30=31 +T__31=32 +T__32=33 +T__33=34 +T__34=35 +T__35=36 +T__36=37 +T__37=38 +T__38=39 +T__39=40 +T__40=41 +T__41=42 +T__42=43 +T__43=44 +T__44=45 +T__45=46 +T__46=47 +T__47=48 +T__48=49 +T__49=50 +T__50=51 +T__51=52 +T__52=53 +T__53=54 +T__54=55 +T__55=56 +T__56=57 +T__57=58 +T__58=59 +T__59=60 +T__60=61 +T__61=62 +T__62=63 +T__63=64 +T__64=65 +T__65=66 +T__66=67 +T__67=68 +T__68=69 +T__69=70 +T__70=71 +T__71=72 +T__72=73 +T__73=74 +T__74=75 +T__75=76 +T__76=77 +T__77=78 +T__78=79 +T__79=80 +T__80=81 +T__81=82 +T__82=83 +T__83=84 +T__84=85 +T__85=86 +T__86=87 +T__87=88 +T__88=89 +T__89=90 +T__90=91 +T__91=92 +Int=93 +Uint=94 +Byte=95 +Fixed=96 +Ufixed=97 +BooleanLiteral=98 +DecimalNumber=99 +HexNumber=100 +NumberUnit=101 +HexLiteralFragment=102 +ReservedKeyword=103 +AnonymousKeyword=104 +BreakKeyword=105 +ConstantKeyword=106 +ImmutableKeyword=107 +ContinueKeyword=108 +LeaveKeyword=109 +ExternalKeyword=110 +IndexedKeyword=111 +InternalKeyword=112 +PayableKeyword=113 +PrivateKeyword=114 +PublicKeyword=115 +VirtualKeyword=116 +PureKeyword=117 +TypeKeyword=118 +ViewKeyword=119 +ConstructorKeyword=120 +FallbackKeyword=121 +ReceiveKeyword=122 +Identifier=123 +StringLiteralFragment=124 +VersionLiteral=125 +WS=126 +COMMENT=127 +LINE_COMMENT=128 +'pragma'=1 +';'=2 +'^'=3 +'~'=4 +'>='=5 +'>'=6 +'<'=7 +'<='=8 +'='=9 +'import'=10 +'as'=11 +'*'=12 +'from'=13 +'{'=14 +','=15 +'}'=16 +'abstract'=17 +'contract'=18 +'interface'=19 +'library'=20 +'is'=21 +'('=22 +')'=23 +'override'=24 +'using'=25 +'for'=26 +'struct'=27 +'modifier'=28 +'function'=29 +'returns'=30 +'event'=31 +'enum'=32 +'['=33 +']'=34 +'.'=35 +'mapping'=36 +'=>'=37 +'memory'=38 +'storage'=39 +'calldata'=40 +'if'=41 +'else'=42 +'try'=43 +'catch'=44 +'while'=45 +'assembly'=46 +'do'=47 +'return'=48 +'throw'=49 +'emit'=50 +'var'=51 +'address'=52 +'bool'=53 +'string'=54 +'byte'=55 +'++'=56 +'--'=57 +'new'=58 +':'=59 +'+'=60 +'-'=61 +'after'=62 +'delete'=63 +'!'=64 +'**'=65 +'/'=66 +'%'=67 +'<<'=68 +'>>'=69 +'&'=70 +'|'=71 +'=='=72 +'!='=73 +'&&'=74 +'||'=75 +'?'=76 +'|='=77 +'^='=78 +'&='=79 +'<<='=80 +'>>='=81 +'+='=82 +'-='=83 +'*='=84 +'/='=85 +'%='=86 +'let'=87 +':='=88 +'=:'=89 +'switch'=90 +'case'=91 +'default'=92 +'anonymous'=104 +'break'=105 +'constant'=106 +'immutable'=107 +'continue'=108 +'leave'=109 +'external'=110 +'indexed'=111 +'internal'=112 +'payable'=113 +'private'=114 +'public'=115 +'virtual'=116 +'pure'=117 +'type'=118 +'view'=119 +'constructor'=120 +'fallback'=121 +'receive'=122 diff --git a/parser/SolidityLexer.interp b/parser/SolidityLexer.interp new file mode 100644 index 0000000..4ad93f0 --- /dev/null +++ b/parser/SolidityLexer.interp @@ -0,0 +1,409 @@ +token literal names: +null +'pragma' +';' +'^' +'~' +'>=' +'>' +'<' +'<=' +'=' +'import' +'as' +'*' +'from' +'{' +',' +'}' +'abstract' +'contract' +'interface' +'library' +'is' +'(' +')' +'override' +'using' +'for' +'struct' +'modifier' +'function' +'returns' +'event' +'enum' +'[' +']' +'.' +'mapping' +'=>' +'memory' +'storage' +'calldata' +'if' +'else' +'try' +'catch' +'while' +'assembly' +'do' +'return' +'throw' +'emit' +'var' +'address' +'bool' +'string' +'byte' +'++' +'--' +'new' +':' +'+' +'-' +'after' +'delete' +'!' +'**' +'/' +'%' +'<<' +'>>' +'&' +'|' +'==' +'!=' +'&&' +'||' +'?' +'|=' +'^=' +'&=' +'<<=' +'>>=' +'+=' +'-=' +'*=' +'/=' +'%=' +'let' +':=' +'=:' +'switch' +'case' +'default' +null +null +null +null +null +null +null +null +null +null +null +'anonymous' +'break' +'constant' +'immutable' +'continue' +'leave' +'external' +'indexed' +'internal' +'payable' +'private' +'public' +'virtual' +'pure' +'type' +'view' +'constructor' +'fallback' +'receive' +null +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +Int +Uint +Byte +Fixed +Ufixed +BooleanLiteral +DecimalNumber +HexNumber +NumberUnit +HexLiteralFragment +ReservedKeyword +AnonymousKeyword +BreakKeyword +ConstantKeyword +ImmutableKeyword +ContinueKeyword +LeaveKeyword +ExternalKeyword +IndexedKeyword +InternalKeyword +PayableKeyword +PrivateKeyword +PublicKeyword +VirtualKeyword +PureKeyword +TypeKeyword +ViewKeyword +ConstructorKeyword +FallbackKeyword +ReceiveKeyword +Identifier +StringLiteralFragment +VersionLiteral +WS +COMMENT +LINE_COMMENT + +rule names: +T__0 +T__1 +T__2 +T__3 +T__4 +T__5 +T__6 +T__7 +T__8 +T__9 +T__10 +T__11 +T__12 +T__13 +T__14 +T__15 +T__16 +T__17 +T__18 +T__19 +T__20 +T__21 +T__22 +T__23 +T__24 +T__25 +T__26 +T__27 +T__28 +T__29 +T__30 +T__31 +T__32 +T__33 +T__34 +T__35 +T__36 +T__37 +T__38 +T__39 +T__40 +T__41 +T__42 +T__43 +T__44 +T__45 +T__46 +T__47 +T__48 +T__49 +T__50 +T__51 +T__52 +T__53 +T__54 +T__55 +T__56 +T__57 +T__58 +T__59 +T__60 +T__61 +T__62 +T__63 +T__64 +T__65 +T__66 +T__67 +T__68 +T__69 +T__70 +T__71 +T__72 +T__73 +T__74 +T__75 +T__76 +T__77 +T__78 +T__79 +T__80 +T__81 +T__82 +T__83 +T__84 +T__85 +T__86 +T__87 +T__88 +T__89 +T__90 +T__91 +Int +Uint +Byte +Fixed +Ufixed +BooleanLiteral +DecimalNumber +DecimalDigits +HexNumber +HexDigits +NumberUnit +HexLiteralFragment +HexPair +HexCharacter +ReservedKeyword +AnonymousKeyword +BreakKeyword +ConstantKeyword +ImmutableKeyword +ContinueKeyword +LeaveKeyword +ExternalKeyword +IndexedKeyword +InternalKeyword +PayableKeyword +PrivateKeyword +PublicKeyword +VirtualKeyword +PureKeyword +TypeKeyword +ViewKeyword +ConstructorKeyword +FallbackKeyword +ReceiveKeyword +Identifier +IdentifierStart +IdentifierPart +StringLiteralFragment +DoubleQuotedStringCharacter +SingleQuotedStringCharacter +VersionLiteral +WS +COMMENT +LINE_COMMENT + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 128, 1788, 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, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 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, 33, 1, 33, 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, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 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, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 3, 92, 858, 8, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 3, 93, 1075, 8, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1297, 8, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 4, 95, 1311, 8, 95, 11, 95, 12, 95, 1312, 1, 95, 1, 95, 4, 95, 1317, 8, 95, 11, 95, 12, 95, 1318, 3, 95, 1321, 8, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 4, 96, 1337, 8, 96, 11, 96, 12, 96, 1338, 1, 96, 1, 96, 4, 96, 1343, 8, 96, 11, 96, 12, 96, 1344, 3, 96, 1347, 8, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 1358, 8, 97, 1, 98, 1, 98, 3, 98, 1362, 8, 98, 1, 98, 1, 98, 3, 98, 1366, 8, 98, 1, 98, 1, 98, 3, 98, 1370, 8, 98, 1, 98, 3, 98, 1373, 8, 98, 1, 99, 1, 99, 3, 99, 1377, 8, 99, 1, 99, 5, 99, 1380, 8, 99, 10, 99, 12, 99, 1383, 9, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 3, 101, 1391, 8, 101, 1, 101, 5, 101, 1394, 8, 101, 10, 101, 12, 101, 1397, 9, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 3, 102, 1451, 8, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1459, 8, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1464, 8, 103, 1, 103, 3, 103, 1467, 8, 103, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 3, 106, 1546, 8, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 5, 126, 1701, 8, 126, 10, 126, 12, 126, 1704, 9, 126, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 5, 129, 1712, 8, 129, 10, 129, 12, 129, 1715, 9, 129, 1, 129, 1, 129, 1, 129, 5, 129, 1720, 8, 129, 10, 129, 12, 129, 1723, 9, 129, 1, 129, 3, 129, 1726, 8, 129, 1, 130, 1, 130, 1, 130, 3, 130, 1731, 8, 130, 1, 131, 1, 131, 1, 131, 3, 131, 1736, 8, 131, 1, 132, 4, 132, 1739, 8, 132, 11, 132, 12, 132, 1740, 1, 132, 1, 132, 4, 132, 1745, 8, 132, 11, 132, 12, 132, 1746, 1, 132, 1, 132, 4, 132, 1751, 8, 132, 11, 132, 12, 132, 1752, 3, 132, 1755, 8, 132, 1, 133, 4, 133, 1758, 8, 133, 11, 133, 12, 133, 1759, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 5, 134, 1768, 8, 134, 10, 134, 12, 134, 1771, 9, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 5, 135, 1782, 8, 135, 10, 135, 12, 135, 1785, 9, 135, 1, 135, 1, 135, 1, 1769, 0, 136, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 0, 201, 100, 203, 0, 205, 101, 207, 102, 209, 0, 211, 0, 213, 103, 215, 104, 217, 105, 219, 106, 221, 107, 223, 108, 225, 109, 227, 110, 229, 111, 231, 112, 233, 113, 235, 114, 237, 115, 239, 116, 241, 117, 243, 118, 245, 119, 247, 120, 249, 121, 251, 122, 253, 123, 255, 0, 257, 0, 259, 124, 261, 0, 263, 0, 265, 125, 267, 126, 269, 127, 271, 128, 1, 0, 10, 1, 0, 48, 57, 2, 0, 69, 69, 101, 101, 2, 0, 88, 88, 120, 120, 3, 0, 48, 57, 65, 70, 97, 102, 4, 0, 36, 36, 65, 90, 95, 95, 97, 122, 5, 0, 36, 36, 48, 57, 65, 90, 95, 95, 97, 122, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 3, 0, 9, 10, 12, 13, 32, 32, 2, 0, 10, 10, 13, 13, 1928, 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, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 259, 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, 1, 273, 1, 0, 0, 0, 3, 280, 1, 0, 0, 0, 5, 282, 1, 0, 0, 0, 7, 284, 1, 0, 0, 0, 9, 286, 1, 0, 0, 0, 11, 289, 1, 0, 0, 0, 13, 291, 1, 0, 0, 0, 15, 293, 1, 0, 0, 0, 17, 296, 1, 0, 0, 0, 19, 298, 1, 0, 0, 0, 21, 305, 1, 0, 0, 0, 23, 308, 1, 0, 0, 0, 25, 310, 1, 0, 0, 0, 27, 315, 1, 0, 0, 0, 29, 317, 1, 0, 0, 0, 31, 319, 1, 0, 0, 0, 33, 321, 1, 0, 0, 0, 35, 330, 1, 0, 0, 0, 37, 339, 1, 0, 0, 0, 39, 349, 1, 0, 0, 0, 41, 357, 1, 0, 0, 0, 43, 360, 1, 0, 0, 0, 45, 362, 1, 0, 0, 0, 47, 364, 1, 0, 0, 0, 49, 373, 1, 0, 0, 0, 51, 379, 1, 0, 0, 0, 53, 383, 1, 0, 0, 0, 55, 390, 1, 0, 0, 0, 57, 399, 1, 0, 0, 0, 59, 408, 1, 0, 0, 0, 61, 416, 1, 0, 0, 0, 63, 422, 1, 0, 0, 0, 65, 427, 1, 0, 0, 0, 67, 429, 1, 0, 0, 0, 69, 431, 1, 0, 0, 0, 71, 433, 1, 0, 0, 0, 73, 441, 1, 0, 0, 0, 75, 444, 1, 0, 0, 0, 77, 451, 1, 0, 0, 0, 79, 459, 1, 0, 0, 0, 81, 468, 1, 0, 0, 0, 83, 471, 1, 0, 0, 0, 85, 476, 1, 0, 0, 0, 87, 480, 1, 0, 0, 0, 89, 486, 1, 0, 0, 0, 91, 492, 1, 0, 0, 0, 93, 501, 1, 0, 0, 0, 95, 504, 1, 0, 0, 0, 97, 511, 1, 0, 0, 0, 99, 517, 1, 0, 0, 0, 101, 522, 1, 0, 0, 0, 103, 526, 1, 0, 0, 0, 105, 534, 1, 0, 0, 0, 107, 539, 1, 0, 0, 0, 109, 546, 1, 0, 0, 0, 111, 551, 1, 0, 0, 0, 113, 554, 1, 0, 0, 0, 115, 557, 1, 0, 0, 0, 117, 561, 1, 0, 0, 0, 119, 563, 1, 0, 0, 0, 121, 565, 1, 0, 0, 0, 123, 567, 1, 0, 0, 0, 125, 573, 1, 0, 0, 0, 127, 580, 1, 0, 0, 0, 129, 582, 1, 0, 0, 0, 131, 585, 1, 0, 0, 0, 133, 587, 1, 0, 0, 0, 135, 589, 1, 0, 0, 0, 137, 592, 1, 0, 0, 0, 139, 595, 1, 0, 0, 0, 141, 597, 1, 0, 0, 0, 143, 599, 1, 0, 0, 0, 145, 602, 1, 0, 0, 0, 147, 605, 1, 0, 0, 0, 149, 608, 1, 0, 0, 0, 151, 611, 1, 0, 0, 0, 153, 613, 1, 0, 0, 0, 155, 616, 1, 0, 0, 0, 157, 619, 1, 0, 0, 0, 159, 622, 1, 0, 0, 0, 161, 626, 1, 0, 0, 0, 163, 630, 1, 0, 0, 0, 165, 633, 1, 0, 0, 0, 167, 636, 1, 0, 0, 0, 169, 639, 1, 0, 0, 0, 171, 642, 1, 0, 0, 0, 173, 645, 1, 0, 0, 0, 175, 649, 1, 0, 0, 0, 177, 652, 1, 0, 0, 0, 179, 655, 1, 0, 0, 0, 181, 662, 1, 0, 0, 0, 183, 667, 1, 0, 0, 0, 185, 857, 1, 0, 0, 0, 187, 1074, 1, 0, 0, 0, 189, 1296, 1, 0, 0, 0, 191, 1320, 1, 0, 0, 0, 193, 1346, 1, 0, 0, 0, 195, 1357, 1, 0, 0, 0, 197, 1365, 1, 0, 0, 0, 199, 1374, 1, 0, 0, 0, 201, 1384, 1, 0, 0, 0, 203, 1388, 1, 0, 0, 0, 205, 1450, 1, 0, 0, 0, 207, 1452, 1, 0, 0, 0, 209, 1468, 1, 0, 0, 0, 211, 1471, 1, 0, 0, 0, 213, 1545, 1, 0, 0, 0, 215, 1547, 1, 0, 0, 0, 217, 1557, 1, 0, 0, 0, 219, 1563, 1, 0, 0, 0, 221, 1572, 1, 0, 0, 0, 223, 1582, 1, 0, 0, 0, 225, 1591, 1, 0, 0, 0, 227, 1597, 1, 0, 0, 0, 229, 1606, 1, 0, 0, 0, 231, 1614, 1, 0, 0, 0, 233, 1623, 1, 0, 0, 0, 235, 1631, 1, 0, 0, 0, 237, 1639, 1, 0, 0, 0, 239, 1646, 1, 0, 0, 0, 241, 1654, 1, 0, 0, 0, 243, 1659, 1, 0, 0, 0, 245, 1664, 1, 0, 0, 0, 247, 1669, 1, 0, 0, 0, 249, 1681, 1, 0, 0, 0, 251, 1690, 1, 0, 0, 0, 253, 1698, 1, 0, 0, 0, 255, 1705, 1, 0, 0, 0, 257, 1707, 1, 0, 0, 0, 259, 1725, 1, 0, 0, 0, 261, 1730, 1, 0, 0, 0, 263, 1735, 1, 0, 0, 0, 265, 1738, 1, 0, 0, 0, 267, 1757, 1, 0, 0, 0, 269, 1763, 1, 0, 0, 0, 271, 1777, 1, 0, 0, 0, 273, 274, 5, 112, 0, 0, 274, 275, 5, 114, 0, 0, 275, 276, 5, 97, 0, 0, 276, 277, 5, 103, 0, 0, 277, 278, 5, 109, 0, 0, 278, 279, 5, 97, 0, 0, 279, 2, 1, 0, 0, 0, 280, 281, 5, 59, 0, 0, 281, 4, 1, 0, 0, 0, 282, 283, 5, 94, 0, 0, 283, 6, 1, 0, 0, 0, 284, 285, 5, 126, 0, 0, 285, 8, 1, 0, 0, 0, 286, 287, 5, 62, 0, 0, 287, 288, 5, 61, 0, 0, 288, 10, 1, 0, 0, 0, 289, 290, 5, 62, 0, 0, 290, 12, 1, 0, 0, 0, 291, 292, 5, 60, 0, 0, 292, 14, 1, 0, 0, 0, 293, 294, 5, 60, 0, 0, 294, 295, 5, 61, 0, 0, 295, 16, 1, 0, 0, 0, 296, 297, 5, 61, 0, 0, 297, 18, 1, 0, 0, 0, 298, 299, 5, 105, 0, 0, 299, 300, 5, 109, 0, 0, 300, 301, 5, 112, 0, 0, 301, 302, 5, 111, 0, 0, 302, 303, 5, 114, 0, 0, 303, 304, 5, 116, 0, 0, 304, 20, 1, 0, 0, 0, 305, 306, 5, 97, 0, 0, 306, 307, 5, 115, 0, 0, 307, 22, 1, 0, 0, 0, 308, 309, 5, 42, 0, 0, 309, 24, 1, 0, 0, 0, 310, 311, 5, 102, 0, 0, 311, 312, 5, 114, 0, 0, 312, 313, 5, 111, 0, 0, 313, 314, 5, 109, 0, 0, 314, 26, 1, 0, 0, 0, 315, 316, 5, 123, 0, 0, 316, 28, 1, 0, 0, 0, 317, 318, 5, 44, 0, 0, 318, 30, 1, 0, 0, 0, 319, 320, 5, 125, 0, 0, 320, 32, 1, 0, 0, 0, 321, 322, 5, 97, 0, 0, 322, 323, 5, 98, 0, 0, 323, 324, 5, 115, 0, 0, 324, 325, 5, 116, 0, 0, 325, 326, 5, 114, 0, 0, 326, 327, 5, 97, 0, 0, 327, 328, 5, 99, 0, 0, 328, 329, 5, 116, 0, 0, 329, 34, 1, 0, 0, 0, 330, 331, 5, 99, 0, 0, 331, 332, 5, 111, 0, 0, 332, 333, 5, 110, 0, 0, 333, 334, 5, 116, 0, 0, 334, 335, 5, 114, 0, 0, 335, 336, 5, 97, 0, 0, 336, 337, 5, 99, 0, 0, 337, 338, 5, 116, 0, 0, 338, 36, 1, 0, 0, 0, 339, 340, 5, 105, 0, 0, 340, 341, 5, 110, 0, 0, 341, 342, 5, 116, 0, 0, 342, 343, 5, 101, 0, 0, 343, 344, 5, 114, 0, 0, 344, 345, 5, 102, 0, 0, 345, 346, 5, 97, 0, 0, 346, 347, 5, 99, 0, 0, 347, 348, 5, 101, 0, 0, 348, 38, 1, 0, 0, 0, 349, 350, 5, 108, 0, 0, 350, 351, 5, 105, 0, 0, 351, 352, 5, 98, 0, 0, 352, 353, 5, 114, 0, 0, 353, 354, 5, 97, 0, 0, 354, 355, 5, 114, 0, 0, 355, 356, 5, 121, 0, 0, 356, 40, 1, 0, 0, 0, 357, 358, 5, 105, 0, 0, 358, 359, 5, 115, 0, 0, 359, 42, 1, 0, 0, 0, 360, 361, 5, 40, 0, 0, 361, 44, 1, 0, 0, 0, 362, 363, 5, 41, 0, 0, 363, 46, 1, 0, 0, 0, 364, 365, 5, 111, 0, 0, 365, 366, 5, 118, 0, 0, 366, 367, 5, 101, 0, 0, 367, 368, 5, 114, 0, 0, 368, 369, 5, 114, 0, 0, 369, 370, 5, 105, 0, 0, 370, 371, 5, 100, 0, 0, 371, 372, 5, 101, 0, 0, 372, 48, 1, 0, 0, 0, 373, 374, 5, 117, 0, 0, 374, 375, 5, 115, 0, 0, 375, 376, 5, 105, 0, 0, 376, 377, 5, 110, 0, 0, 377, 378, 5, 103, 0, 0, 378, 50, 1, 0, 0, 0, 379, 380, 5, 102, 0, 0, 380, 381, 5, 111, 0, 0, 381, 382, 5, 114, 0, 0, 382, 52, 1, 0, 0, 0, 383, 384, 5, 115, 0, 0, 384, 385, 5, 116, 0, 0, 385, 386, 5, 114, 0, 0, 386, 387, 5, 117, 0, 0, 387, 388, 5, 99, 0, 0, 388, 389, 5, 116, 0, 0, 389, 54, 1, 0, 0, 0, 390, 391, 5, 109, 0, 0, 391, 392, 5, 111, 0, 0, 392, 393, 5, 100, 0, 0, 393, 394, 5, 105, 0, 0, 394, 395, 5, 102, 0, 0, 395, 396, 5, 105, 0, 0, 396, 397, 5, 101, 0, 0, 397, 398, 5, 114, 0, 0, 398, 56, 1, 0, 0, 0, 399, 400, 5, 102, 0, 0, 400, 401, 5, 117, 0, 0, 401, 402, 5, 110, 0, 0, 402, 403, 5, 99, 0, 0, 403, 404, 5, 116, 0, 0, 404, 405, 5, 105, 0, 0, 405, 406, 5, 111, 0, 0, 406, 407, 5, 110, 0, 0, 407, 58, 1, 0, 0, 0, 408, 409, 5, 114, 0, 0, 409, 410, 5, 101, 0, 0, 410, 411, 5, 116, 0, 0, 411, 412, 5, 117, 0, 0, 412, 413, 5, 114, 0, 0, 413, 414, 5, 110, 0, 0, 414, 415, 5, 115, 0, 0, 415, 60, 1, 0, 0, 0, 416, 417, 5, 101, 0, 0, 417, 418, 5, 118, 0, 0, 418, 419, 5, 101, 0, 0, 419, 420, 5, 110, 0, 0, 420, 421, 5, 116, 0, 0, 421, 62, 1, 0, 0, 0, 422, 423, 5, 101, 0, 0, 423, 424, 5, 110, 0, 0, 424, 425, 5, 117, 0, 0, 425, 426, 5, 109, 0, 0, 426, 64, 1, 0, 0, 0, 427, 428, 5, 91, 0, 0, 428, 66, 1, 0, 0, 0, 429, 430, 5, 93, 0, 0, 430, 68, 1, 0, 0, 0, 431, 432, 5, 46, 0, 0, 432, 70, 1, 0, 0, 0, 433, 434, 5, 109, 0, 0, 434, 435, 5, 97, 0, 0, 435, 436, 5, 112, 0, 0, 436, 437, 5, 112, 0, 0, 437, 438, 5, 105, 0, 0, 438, 439, 5, 110, 0, 0, 439, 440, 5, 103, 0, 0, 440, 72, 1, 0, 0, 0, 441, 442, 5, 61, 0, 0, 442, 443, 5, 62, 0, 0, 443, 74, 1, 0, 0, 0, 444, 445, 5, 109, 0, 0, 445, 446, 5, 101, 0, 0, 446, 447, 5, 109, 0, 0, 447, 448, 5, 111, 0, 0, 448, 449, 5, 114, 0, 0, 449, 450, 5, 121, 0, 0, 450, 76, 1, 0, 0, 0, 451, 452, 5, 115, 0, 0, 452, 453, 5, 116, 0, 0, 453, 454, 5, 111, 0, 0, 454, 455, 5, 114, 0, 0, 455, 456, 5, 97, 0, 0, 456, 457, 5, 103, 0, 0, 457, 458, 5, 101, 0, 0, 458, 78, 1, 0, 0, 0, 459, 460, 5, 99, 0, 0, 460, 461, 5, 97, 0, 0, 461, 462, 5, 108, 0, 0, 462, 463, 5, 108, 0, 0, 463, 464, 5, 100, 0, 0, 464, 465, 5, 97, 0, 0, 465, 466, 5, 116, 0, 0, 466, 467, 5, 97, 0, 0, 467, 80, 1, 0, 0, 0, 468, 469, 5, 105, 0, 0, 469, 470, 5, 102, 0, 0, 470, 82, 1, 0, 0, 0, 471, 472, 5, 101, 0, 0, 472, 473, 5, 108, 0, 0, 473, 474, 5, 115, 0, 0, 474, 475, 5, 101, 0, 0, 475, 84, 1, 0, 0, 0, 476, 477, 5, 116, 0, 0, 477, 478, 5, 114, 0, 0, 478, 479, 5, 121, 0, 0, 479, 86, 1, 0, 0, 0, 480, 481, 5, 99, 0, 0, 481, 482, 5, 97, 0, 0, 482, 483, 5, 116, 0, 0, 483, 484, 5, 99, 0, 0, 484, 485, 5, 104, 0, 0, 485, 88, 1, 0, 0, 0, 486, 487, 5, 119, 0, 0, 487, 488, 5, 104, 0, 0, 488, 489, 5, 105, 0, 0, 489, 490, 5, 108, 0, 0, 490, 491, 5, 101, 0, 0, 491, 90, 1, 0, 0, 0, 492, 493, 5, 97, 0, 0, 493, 494, 5, 115, 0, 0, 494, 495, 5, 115, 0, 0, 495, 496, 5, 101, 0, 0, 496, 497, 5, 109, 0, 0, 497, 498, 5, 98, 0, 0, 498, 499, 5, 108, 0, 0, 499, 500, 5, 121, 0, 0, 500, 92, 1, 0, 0, 0, 501, 502, 5, 100, 0, 0, 502, 503, 5, 111, 0, 0, 503, 94, 1, 0, 0, 0, 504, 505, 5, 114, 0, 0, 505, 506, 5, 101, 0, 0, 506, 507, 5, 116, 0, 0, 507, 508, 5, 117, 0, 0, 508, 509, 5, 114, 0, 0, 509, 510, 5, 110, 0, 0, 510, 96, 1, 0, 0, 0, 511, 512, 5, 116, 0, 0, 512, 513, 5, 104, 0, 0, 513, 514, 5, 114, 0, 0, 514, 515, 5, 111, 0, 0, 515, 516, 5, 119, 0, 0, 516, 98, 1, 0, 0, 0, 517, 518, 5, 101, 0, 0, 518, 519, 5, 109, 0, 0, 519, 520, 5, 105, 0, 0, 520, 521, 5, 116, 0, 0, 521, 100, 1, 0, 0, 0, 522, 523, 5, 118, 0, 0, 523, 524, 5, 97, 0, 0, 524, 525, 5, 114, 0, 0, 525, 102, 1, 0, 0, 0, 526, 527, 5, 97, 0, 0, 527, 528, 5, 100, 0, 0, 528, 529, 5, 100, 0, 0, 529, 530, 5, 114, 0, 0, 530, 531, 5, 101, 0, 0, 531, 532, 5, 115, 0, 0, 532, 533, 5, 115, 0, 0, 533, 104, 1, 0, 0, 0, 534, 535, 5, 98, 0, 0, 535, 536, 5, 111, 0, 0, 536, 537, 5, 111, 0, 0, 537, 538, 5, 108, 0, 0, 538, 106, 1, 0, 0, 0, 539, 540, 5, 115, 0, 0, 540, 541, 5, 116, 0, 0, 541, 542, 5, 114, 0, 0, 542, 543, 5, 105, 0, 0, 543, 544, 5, 110, 0, 0, 544, 545, 5, 103, 0, 0, 545, 108, 1, 0, 0, 0, 546, 547, 5, 98, 0, 0, 547, 548, 5, 121, 0, 0, 548, 549, 5, 116, 0, 0, 549, 550, 5, 101, 0, 0, 550, 110, 1, 0, 0, 0, 551, 552, 5, 43, 0, 0, 552, 553, 5, 43, 0, 0, 553, 112, 1, 0, 0, 0, 554, 555, 5, 45, 0, 0, 555, 556, 5, 45, 0, 0, 556, 114, 1, 0, 0, 0, 557, 558, 5, 110, 0, 0, 558, 559, 5, 101, 0, 0, 559, 560, 5, 119, 0, 0, 560, 116, 1, 0, 0, 0, 561, 562, 5, 58, 0, 0, 562, 118, 1, 0, 0, 0, 563, 564, 5, 43, 0, 0, 564, 120, 1, 0, 0, 0, 565, 566, 5, 45, 0, 0, 566, 122, 1, 0, 0, 0, 567, 568, 5, 97, 0, 0, 568, 569, 5, 102, 0, 0, 569, 570, 5, 116, 0, 0, 570, 571, 5, 101, 0, 0, 571, 572, 5, 114, 0, 0, 572, 124, 1, 0, 0, 0, 573, 574, 5, 100, 0, 0, 574, 575, 5, 101, 0, 0, 575, 576, 5, 108, 0, 0, 576, 577, 5, 101, 0, 0, 577, 578, 5, 116, 0, 0, 578, 579, 5, 101, 0, 0, 579, 126, 1, 0, 0, 0, 580, 581, 5, 33, 0, 0, 581, 128, 1, 0, 0, 0, 582, 583, 5, 42, 0, 0, 583, 584, 5, 42, 0, 0, 584, 130, 1, 0, 0, 0, 585, 586, 5, 47, 0, 0, 586, 132, 1, 0, 0, 0, 587, 588, 5, 37, 0, 0, 588, 134, 1, 0, 0, 0, 589, 590, 5, 60, 0, 0, 590, 591, 5, 60, 0, 0, 591, 136, 1, 0, 0, 0, 592, 593, 5, 62, 0, 0, 593, 594, 5, 62, 0, 0, 594, 138, 1, 0, 0, 0, 595, 596, 5, 38, 0, 0, 596, 140, 1, 0, 0, 0, 597, 598, 5, 124, 0, 0, 598, 142, 1, 0, 0, 0, 599, 600, 5, 61, 0, 0, 600, 601, 5, 61, 0, 0, 601, 144, 1, 0, 0, 0, 602, 603, 5, 33, 0, 0, 603, 604, 5, 61, 0, 0, 604, 146, 1, 0, 0, 0, 605, 606, 5, 38, 0, 0, 606, 607, 5, 38, 0, 0, 607, 148, 1, 0, 0, 0, 608, 609, 5, 124, 0, 0, 609, 610, 5, 124, 0, 0, 610, 150, 1, 0, 0, 0, 611, 612, 5, 63, 0, 0, 612, 152, 1, 0, 0, 0, 613, 614, 5, 124, 0, 0, 614, 615, 5, 61, 0, 0, 615, 154, 1, 0, 0, 0, 616, 617, 5, 94, 0, 0, 617, 618, 5, 61, 0, 0, 618, 156, 1, 0, 0, 0, 619, 620, 5, 38, 0, 0, 620, 621, 5, 61, 0, 0, 621, 158, 1, 0, 0, 0, 622, 623, 5, 60, 0, 0, 623, 624, 5, 60, 0, 0, 624, 625, 5, 61, 0, 0, 625, 160, 1, 0, 0, 0, 626, 627, 5, 62, 0, 0, 627, 628, 5, 62, 0, 0, 628, 629, 5, 61, 0, 0, 629, 162, 1, 0, 0, 0, 630, 631, 5, 43, 0, 0, 631, 632, 5, 61, 0, 0, 632, 164, 1, 0, 0, 0, 633, 634, 5, 45, 0, 0, 634, 635, 5, 61, 0, 0, 635, 166, 1, 0, 0, 0, 636, 637, 5, 42, 0, 0, 637, 638, 5, 61, 0, 0, 638, 168, 1, 0, 0, 0, 639, 640, 5, 47, 0, 0, 640, 641, 5, 61, 0, 0, 641, 170, 1, 0, 0, 0, 642, 643, 5, 37, 0, 0, 643, 644, 5, 61, 0, 0, 644, 172, 1, 0, 0, 0, 645, 646, 5, 108, 0, 0, 646, 647, 5, 101, 0, 0, 647, 648, 5, 116, 0, 0, 648, 174, 1, 0, 0, 0, 649, 650, 5, 58, 0, 0, 650, 651, 5, 61, 0, 0, 651, 176, 1, 0, 0, 0, 652, 653, 5, 61, 0, 0, 653, 654, 5, 58, 0, 0, 654, 178, 1, 0, 0, 0, 655, 656, 5, 115, 0, 0, 656, 657, 5, 119, 0, 0, 657, 658, 5, 105, 0, 0, 658, 659, 5, 116, 0, 0, 659, 660, 5, 99, 0, 0, 660, 661, 5, 104, 0, 0, 661, 180, 1, 0, 0, 0, 662, 663, 5, 99, 0, 0, 663, 664, 5, 97, 0, 0, 664, 665, 5, 115, 0, 0, 665, 666, 5, 101, 0, 0, 666, 182, 1, 0, 0, 0, 667, 668, 5, 100, 0, 0, 668, 669, 5, 101, 0, 0, 669, 670, 5, 102, 0, 0, 670, 671, 5, 97, 0, 0, 671, 672, 5, 117, 0, 0, 672, 673, 5, 108, 0, 0, 673, 674, 5, 116, 0, 0, 674, 184, 1, 0, 0, 0, 675, 676, 5, 105, 0, 0, 676, 677, 5, 110, 0, 0, 677, 858, 5, 116, 0, 0, 678, 679, 5, 105, 0, 0, 679, 680, 5, 110, 0, 0, 680, 681, 5, 116, 0, 0, 681, 858, 5, 56, 0, 0, 682, 683, 5, 105, 0, 0, 683, 684, 5, 110, 0, 0, 684, 685, 5, 116, 0, 0, 685, 686, 5, 49, 0, 0, 686, 858, 5, 54, 0, 0, 687, 688, 5, 105, 0, 0, 688, 689, 5, 110, 0, 0, 689, 690, 5, 116, 0, 0, 690, 691, 5, 50, 0, 0, 691, 858, 5, 52, 0, 0, 692, 693, 5, 105, 0, 0, 693, 694, 5, 110, 0, 0, 694, 695, 5, 116, 0, 0, 695, 696, 5, 51, 0, 0, 696, 858, 5, 50, 0, 0, 697, 698, 5, 105, 0, 0, 698, 699, 5, 110, 0, 0, 699, 700, 5, 116, 0, 0, 700, 701, 5, 52, 0, 0, 701, 858, 5, 48, 0, 0, 702, 703, 5, 105, 0, 0, 703, 704, 5, 110, 0, 0, 704, 705, 5, 116, 0, 0, 705, 706, 5, 52, 0, 0, 706, 858, 5, 56, 0, 0, 707, 708, 5, 105, 0, 0, 708, 709, 5, 110, 0, 0, 709, 710, 5, 116, 0, 0, 710, 711, 5, 53, 0, 0, 711, 858, 5, 54, 0, 0, 712, 713, 5, 105, 0, 0, 713, 714, 5, 110, 0, 0, 714, 715, 5, 116, 0, 0, 715, 716, 5, 54, 0, 0, 716, 858, 5, 52, 0, 0, 717, 718, 5, 105, 0, 0, 718, 719, 5, 110, 0, 0, 719, 720, 5, 116, 0, 0, 720, 721, 5, 55, 0, 0, 721, 858, 5, 50, 0, 0, 722, 723, 5, 105, 0, 0, 723, 724, 5, 110, 0, 0, 724, 725, 5, 116, 0, 0, 725, 726, 5, 56, 0, 0, 726, 858, 5, 48, 0, 0, 727, 728, 5, 105, 0, 0, 728, 729, 5, 110, 0, 0, 729, 730, 5, 116, 0, 0, 730, 731, 5, 56, 0, 0, 731, 858, 5, 56, 0, 0, 732, 733, 5, 105, 0, 0, 733, 734, 5, 110, 0, 0, 734, 735, 5, 116, 0, 0, 735, 736, 5, 57, 0, 0, 736, 858, 5, 54, 0, 0, 737, 738, 5, 105, 0, 0, 738, 739, 5, 110, 0, 0, 739, 740, 5, 116, 0, 0, 740, 741, 5, 49, 0, 0, 741, 742, 5, 48, 0, 0, 742, 858, 5, 52, 0, 0, 743, 744, 5, 105, 0, 0, 744, 745, 5, 110, 0, 0, 745, 746, 5, 116, 0, 0, 746, 747, 5, 49, 0, 0, 747, 748, 5, 49, 0, 0, 748, 858, 5, 50, 0, 0, 749, 750, 5, 105, 0, 0, 750, 751, 5, 110, 0, 0, 751, 752, 5, 116, 0, 0, 752, 753, 5, 49, 0, 0, 753, 754, 5, 50, 0, 0, 754, 858, 5, 48, 0, 0, 755, 756, 5, 105, 0, 0, 756, 757, 5, 110, 0, 0, 757, 758, 5, 116, 0, 0, 758, 759, 5, 49, 0, 0, 759, 760, 5, 50, 0, 0, 760, 858, 5, 56, 0, 0, 761, 762, 5, 105, 0, 0, 762, 763, 5, 110, 0, 0, 763, 764, 5, 116, 0, 0, 764, 765, 5, 49, 0, 0, 765, 766, 5, 51, 0, 0, 766, 858, 5, 54, 0, 0, 767, 768, 5, 105, 0, 0, 768, 769, 5, 110, 0, 0, 769, 770, 5, 116, 0, 0, 770, 771, 5, 49, 0, 0, 771, 772, 5, 52, 0, 0, 772, 858, 5, 52, 0, 0, 773, 774, 5, 105, 0, 0, 774, 775, 5, 110, 0, 0, 775, 776, 5, 116, 0, 0, 776, 777, 5, 49, 0, 0, 777, 778, 5, 53, 0, 0, 778, 858, 5, 50, 0, 0, 779, 780, 5, 105, 0, 0, 780, 781, 5, 110, 0, 0, 781, 782, 5, 116, 0, 0, 782, 783, 5, 49, 0, 0, 783, 784, 5, 54, 0, 0, 784, 858, 5, 48, 0, 0, 785, 786, 5, 105, 0, 0, 786, 787, 5, 110, 0, 0, 787, 788, 5, 116, 0, 0, 788, 789, 5, 49, 0, 0, 789, 790, 5, 54, 0, 0, 790, 858, 5, 56, 0, 0, 791, 792, 5, 105, 0, 0, 792, 793, 5, 110, 0, 0, 793, 794, 5, 116, 0, 0, 794, 795, 5, 49, 0, 0, 795, 796, 5, 55, 0, 0, 796, 858, 5, 54, 0, 0, 797, 798, 5, 105, 0, 0, 798, 799, 5, 110, 0, 0, 799, 800, 5, 116, 0, 0, 800, 801, 5, 49, 0, 0, 801, 802, 5, 56, 0, 0, 802, 858, 5, 52, 0, 0, 803, 804, 5, 105, 0, 0, 804, 805, 5, 110, 0, 0, 805, 806, 5, 116, 0, 0, 806, 807, 5, 49, 0, 0, 807, 808, 5, 57, 0, 0, 808, 858, 5, 50, 0, 0, 809, 810, 5, 105, 0, 0, 810, 811, 5, 110, 0, 0, 811, 812, 5, 116, 0, 0, 812, 813, 5, 50, 0, 0, 813, 814, 5, 48, 0, 0, 814, 858, 5, 48, 0, 0, 815, 816, 5, 105, 0, 0, 816, 817, 5, 110, 0, 0, 817, 818, 5, 116, 0, 0, 818, 819, 5, 50, 0, 0, 819, 820, 5, 48, 0, 0, 820, 858, 5, 56, 0, 0, 821, 822, 5, 105, 0, 0, 822, 823, 5, 110, 0, 0, 823, 824, 5, 116, 0, 0, 824, 825, 5, 50, 0, 0, 825, 826, 5, 49, 0, 0, 826, 858, 5, 54, 0, 0, 827, 828, 5, 105, 0, 0, 828, 829, 5, 110, 0, 0, 829, 830, 5, 116, 0, 0, 830, 831, 5, 50, 0, 0, 831, 832, 5, 50, 0, 0, 832, 858, 5, 52, 0, 0, 833, 834, 5, 105, 0, 0, 834, 835, 5, 110, 0, 0, 835, 836, 5, 116, 0, 0, 836, 837, 5, 50, 0, 0, 837, 838, 5, 51, 0, 0, 838, 858, 5, 50, 0, 0, 839, 840, 5, 105, 0, 0, 840, 841, 5, 110, 0, 0, 841, 842, 5, 116, 0, 0, 842, 843, 5, 50, 0, 0, 843, 844, 5, 52, 0, 0, 844, 858, 5, 48, 0, 0, 845, 846, 5, 105, 0, 0, 846, 847, 5, 110, 0, 0, 847, 848, 5, 116, 0, 0, 848, 849, 5, 50, 0, 0, 849, 850, 5, 52, 0, 0, 850, 858, 5, 56, 0, 0, 851, 852, 5, 105, 0, 0, 852, 853, 5, 110, 0, 0, 853, 854, 5, 116, 0, 0, 854, 855, 5, 50, 0, 0, 855, 856, 5, 53, 0, 0, 856, 858, 5, 54, 0, 0, 857, 675, 1, 0, 0, 0, 857, 678, 1, 0, 0, 0, 857, 682, 1, 0, 0, 0, 857, 687, 1, 0, 0, 0, 857, 692, 1, 0, 0, 0, 857, 697, 1, 0, 0, 0, 857, 702, 1, 0, 0, 0, 857, 707, 1, 0, 0, 0, 857, 712, 1, 0, 0, 0, 857, 717, 1, 0, 0, 0, 857, 722, 1, 0, 0, 0, 857, 727, 1, 0, 0, 0, 857, 732, 1, 0, 0, 0, 857, 737, 1, 0, 0, 0, 857, 743, 1, 0, 0, 0, 857, 749, 1, 0, 0, 0, 857, 755, 1, 0, 0, 0, 857, 761, 1, 0, 0, 0, 857, 767, 1, 0, 0, 0, 857, 773, 1, 0, 0, 0, 857, 779, 1, 0, 0, 0, 857, 785, 1, 0, 0, 0, 857, 791, 1, 0, 0, 0, 857, 797, 1, 0, 0, 0, 857, 803, 1, 0, 0, 0, 857, 809, 1, 0, 0, 0, 857, 815, 1, 0, 0, 0, 857, 821, 1, 0, 0, 0, 857, 827, 1, 0, 0, 0, 857, 833, 1, 0, 0, 0, 857, 839, 1, 0, 0, 0, 857, 845, 1, 0, 0, 0, 857, 851, 1, 0, 0, 0, 858, 186, 1, 0, 0, 0, 859, 860, 5, 117, 0, 0, 860, 861, 5, 105, 0, 0, 861, 862, 5, 110, 0, 0, 862, 1075, 5, 116, 0, 0, 863, 864, 5, 117, 0, 0, 864, 865, 5, 105, 0, 0, 865, 866, 5, 110, 0, 0, 866, 867, 5, 116, 0, 0, 867, 1075, 5, 56, 0, 0, 868, 869, 5, 117, 0, 0, 869, 870, 5, 105, 0, 0, 870, 871, 5, 110, 0, 0, 871, 872, 5, 116, 0, 0, 872, 873, 5, 49, 0, 0, 873, 1075, 5, 54, 0, 0, 874, 875, 5, 117, 0, 0, 875, 876, 5, 105, 0, 0, 876, 877, 5, 110, 0, 0, 877, 878, 5, 116, 0, 0, 878, 879, 5, 50, 0, 0, 879, 1075, 5, 52, 0, 0, 880, 881, 5, 117, 0, 0, 881, 882, 5, 105, 0, 0, 882, 883, 5, 110, 0, 0, 883, 884, 5, 116, 0, 0, 884, 885, 5, 51, 0, 0, 885, 1075, 5, 50, 0, 0, 886, 887, 5, 117, 0, 0, 887, 888, 5, 105, 0, 0, 888, 889, 5, 110, 0, 0, 889, 890, 5, 116, 0, 0, 890, 891, 5, 52, 0, 0, 891, 1075, 5, 48, 0, 0, 892, 893, 5, 117, 0, 0, 893, 894, 5, 105, 0, 0, 894, 895, 5, 110, 0, 0, 895, 896, 5, 116, 0, 0, 896, 897, 5, 52, 0, 0, 897, 1075, 5, 56, 0, 0, 898, 899, 5, 117, 0, 0, 899, 900, 5, 105, 0, 0, 900, 901, 5, 110, 0, 0, 901, 902, 5, 116, 0, 0, 902, 903, 5, 53, 0, 0, 903, 1075, 5, 54, 0, 0, 904, 905, 5, 117, 0, 0, 905, 906, 5, 105, 0, 0, 906, 907, 5, 110, 0, 0, 907, 908, 5, 116, 0, 0, 908, 909, 5, 54, 0, 0, 909, 1075, 5, 52, 0, 0, 910, 911, 5, 117, 0, 0, 911, 912, 5, 105, 0, 0, 912, 913, 5, 110, 0, 0, 913, 914, 5, 116, 0, 0, 914, 915, 5, 55, 0, 0, 915, 1075, 5, 50, 0, 0, 916, 917, 5, 117, 0, 0, 917, 918, 5, 105, 0, 0, 918, 919, 5, 110, 0, 0, 919, 920, 5, 116, 0, 0, 920, 921, 5, 56, 0, 0, 921, 1075, 5, 48, 0, 0, 922, 923, 5, 117, 0, 0, 923, 924, 5, 105, 0, 0, 924, 925, 5, 110, 0, 0, 925, 926, 5, 116, 0, 0, 926, 927, 5, 56, 0, 0, 927, 1075, 5, 56, 0, 0, 928, 929, 5, 117, 0, 0, 929, 930, 5, 105, 0, 0, 930, 931, 5, 110, 0, 0, 931, 932, 5, 116, 0, 0, 932, 933, 5, 57, 0, 0, 933, 1075, 5, 54, 0, 0, 934, 935, 5, 117, 0, 0, 935, 936, 5, 105, 0, 0, 936, 937, 5, 110, 0, 0, 937, 938, 5, 116, 0, 0, 938, 939, 5, 49, 0, 0, 939, 940, 5, 48, 0, 0, 940, 1075, 5, 52, 0, 0, 941, 942, 5, 117, 0, 0, 942, 943, 5, 105, 0, 0, 943, 944, 5, 110, 0, 0, 944, 945, 5, 116, 0, 0, 945, 946, 5, 49, 0, 0, 946, 947, 5, 49, 0, 0, 947, 1075, 5, 50, 0, 0, 948, 949, 5, 117, 0, 0, 949, 950, 5, 105, 0, 0, 950, 951, 5, 110, 0, 0, 951, 952, 5, 116, 0, 0, 952, 953, 5, 49, 0, 0, 953, 954, 5, 50, 0, 0, 954, 1075, 5, 48, 0, 0, 955, 956, 5, 117, 0, 0, 956, 957, 5, 105, 0, 0, 957, 958, 5, 110, 0, 0, 958, 959, 5, 116, 0, 0, 959, 960, 5, 49, 0, 0, 960, 961, 5, 50, 0, 0, 961, 1075, 5, 56, 0, 0, 962, 963, 5, 117, 0, 0, 963, 964, 5, 105, 0, 0, 964, 965, 5, 110, 0, 0, 965, 966, 5, 116, 0, 0, 966, 967, 5, 49, 0, 0, 967, 968, 5, 51, 0, 0, 968, 1075, 5, 54, 0, 0, 969, 970, 5, 117, 0, 0, 970, 971, 5, 105, 0, 0, 971, 972, 5, 110, 0, 0, 972, 973, 5, 116, 0, 0, 973, 974, 5, 49, 0, 0, 974, 975, 5, 52, 0, 0, 975, 1075, 5, 52, 0, 0, 976, 977, 5, 117, 0, 0, 977, 978, 5, 105, 0, 0, 978, 979, 5, 110, 0, 0, 979, 980, 5, 116, 0, 0, 980, 981, 5, 49, 0, 0, 981, 982, 5, 53, 0, 0, 982, 1075, 5, 50, 0, 0, 983, 984, 5, 117, 0, 0, 984, 985, 5, 105, 0, 0, 985, 986, 5, 110, 0, 0, 986, 987, 5, 116, 0, 0, 987, 988, 5, 49, 0, 0, 988, 989, 5, 54, 0, 0, 989, 1075, 5, 48, 0, 0, 990, 991, 5, 117, 0, 0, 991, 992, 5, 105, 0, 0, 992, 993, 5, 110, 0, 0, 993, 994, 5, 116, 0, 0, 994, 995, 5, 49, 0, 0, 995, 996, 5, 54, 0, 0, 996, 1075, 5, 56, 0, 0, 997, 998, 5, 117, 0, 0, 998, 999, 5, 105, 0, 0, 999, 1000, 5, 110, 0, 0, 1000, 1001, 5, 116, 0, 0, 1001, 1002, 5, 49, 0, 0, 1002, 1003, 5, 55, 0, 0, 1003, 1075, 5, 54, 0, 0, 1004, 1005, 5, 117, 0, 0, 1005, 1006, 5, 105, 0, 0, 1006, 1007, 5, 110, 0, 0, 1007, 1008, 5, 116, 0, 0, 1008, 1009, 5, 49, 0, 0, 1009, 1010, 5, 56, 0, 0, 1010, 1075, 5, 52, 0, 0, 1011, 1012, 5, 117, 0, 0, 1012, 1013, 5, 105, 0, 0, 1013, 1014, 5, 110, 0, 0, 1014, 1015, 5, 116, 0, 0, 1015, 1016, 5, 49, 0, 0, 1016, 1017, 5, 57, 0, 0, 1017, 1075, 5, 50, 0, 0, 1018, 1019, 5, 117, 0, 0, 1019, 1020, 5, 105, 0, 0, 1020, 1021, 5, 110, 0, 0, 1021, 1022, 5, 116, 0, 0, 1022, 1023, 5, 50, 0, 0, 1023, 1024, 5, 48, 0, 0, 1024, 1075, 5, 48, 0, 0, 1025, 1026, 5, 117, 0, 0, 1026, 1027, 5, 105, 0, 0, 1027, 1028, 5, 110, 0, 0, 1028, 1029, 5, 116, 0, 0, 1029, 1030, 5, 50, 0, 0, 1030, 1031, 5, 48, 0, 0, 1031, 1075, 5, 56, 0, 0, 1032, 1033, 5, 117, 0, 0, 1033, 1034, 5, 105, 0, 0, 1034, 1035, 5, 110, 0, 0, 1035, 1036, 5, 116, 0, 0, 1036, 1037, 5, 50, 0, 0, 1037, 1038, 5, 49, 0, 0, 1038, 1075, 5, 54, 0, 0, 1039, 1040, 5, 117, 0, 0, 1040, 1041, 5, 105, 0, 0, 1041, 1042, 5, 110, 0, 0, 1042, 1043, 5, 116, 0, 0, 1043, 1044, 5, 50, 0, 0, 1044, 1045, 5, 50, 0, 0, 1045, 1075, 5, 52, 0, 0, 1046, 1047, 5, 117, 0, 0, 1047, 1048, 5, 105, 0, 0, 1048, 1049, 5, 110, 0, 0, 1049, 1050, 5, 116, 0, 0, 1050, 1051, 5, 50, 0, 0, 1051, 1052, 5, 51, 0, 0, 1052, 1075, 5, 50, 0, 0, 1053, 1054, 5, 117, 0, 0, 1054, 1055, 5, 105, 0, 0, 1055, 1056, 5, 110, 0, 0, 1056, 1057, 5, 116, 0, 0, 1057, 1058, 5, 50, 0, 0, 1058, 1059, 5, 52, 0, 0, 1059, 1075, 5, 48, 0, 0, 1060, 1061, 5, 117, 0, 0, 1061, 1062, 5, 105, 0, 0, 1062, 1063, 5, 110, 0, 0, 1063, 1064, 5, 116, 0, 0, 1064, 1065, 5, 50, 0, 0, 1065, 1066, 5, 52, 0, 0, 1066, 1075, 5, 56, 0, 0, 1067, 1068, 5, 117, 0, 0, 1068, 1069, 5, 105, 0, 0, 1069, 1070, 5, 110, 0, 0, 1070, 1071, 5, 116, 0, 0, 1071, 1072, 5, 50, 0, 0, 1072, 1073, 5, 53, 0, 0, 1073, 1075, 5, 54, 0, 0, 1074, 859, 1, 0, 0, 0, 1074, 863, 1, 0, 0, 0, 1074, 868, 1, 0, 0, 0, 1074, 874, 1, 0, 0, 0, 1074, 880, 1, 0, 0, 0, 1074, 886, 1, 0, 0, 0, 1074, 892, 1, 0, 0, 0, 1074, 898, 1, 0, 0, 0, 1074, 904, 1, 0, 0, 0, 1074, 910, 1, 0, 0, 0, 1074, 916, 1, 0, 0, 0, 1074, 922, 1, 0, 0, 0, 1074, 928, 1, 0, 0, 0, 1074, 934, 1, 0, 0, 0, 1074, 941, 1, 0, 0, 0, 1074, 948, 1, 0, 0, 0, 1074, 955, 1, 0, 0, 0, 1074, 962, 1, 0, 0, 0, 1074, 969, 1, 0, 0, 0, 1074, 976, 1, 0, 0, 0, 1074, 983, 1, 0, 0, 0, 1074, 990, 1, 0, 0, 0, 1074, 997, 1, 0, 0, 0, 1074, 1004, 1, 0, 0, 0, 1074, 1011, 1, 0, 0, 0, 1074, 1018, 1, 0, 0, 0, 1074, 1025, 1, 0, 0, 0, 1074, 1032, 1, 0, 0, 0, 1074, 1039, 1, 0, 0, 0, 1074, 1046, 1, 0, 0, 0, 1074, 1053, 1, 0, 0, 0, 1074, 1060, 1, 0, 0, 0, 1074, 1067, 1, 0, 0, 0, 1075, 188, 1, 0, 0, 0, 1076, 1077, 5, 98, 0, 0, 1077, 1078, 5, 121, 0, 0, 1078, 1079, 5, 116, 0, 0, 1079, 1080, 5, 101, 0, 0, 1080, 1297, 5, 115, 0, 0, 1081, 1082, 5, 98, 0, 0, 1082, 1083, 5, 121, 0, 0, 1083, 1084, 5, 116, 0, 0, 1084, 1085, 5, 101, 0, 0, 1085, 1086, 5, 115, 0, 0, 1086, 1297, 5, 49, 0, 0, 1087, 1088, 5, 98, 0, 0, 1088, 1089, 5, 121, 0, 0, 1089, 1090, 5, 116, 0, 0, 1090, 1091, 5, 101, 0, 0, 1091, 1092, 5, 115, 0, 0, 1092, 1297, 5, 50, 0, 0, 1093, 1094, 5, 98, 0, 0, 1094, 1095, 5, 121, 0, 0, 1095, 1096, 5, 116, 0, 0, 1096, 1097, 5, 101, 0, 0, 1097, 1098, 5, 115, 0, 0, 1098, 1297, 5, 51, 0, 0, 1099, 1100, 5, 98, 0, 0, 1100, 1101, 5, 121, 0, 0, 1101, 1102, 5, 116, 0, 0, 1102, 1103, 5, 101, 0, 0, 1103, 1104, 5, 115, 0, 0, 1104, 1297, 5, 52, 0, 0, 1105, 1106, 5, 98, 0, 0, 1106, 1107, 5, 121, 0, 0, 1107, 1108, 5, 116, 0, 0, 1108, 1109, 5, 101, 0, 0, 1109, 1110, 5, 115, 0, 0, 1110, 1297, 5, 53, 0, 0, 1111, 1112, 5, 98, 0, 0, 1112, 1113, 5, 121, 0, 0, 1113, 1114, 5, 116, 0, 0, 1114, 1115, 5, 101, 0, 0, 1115, 1116, 5, 115, 0, 0, 1116, 1297, 5, 54, 0, 0, 1117, 1118, 5, 98, 0, 0, 1118, 1119, 5, 121, 0, 0, 1119, 1120, 5, 116, 0, 0, 1120, 1121, 5, 101, 0, 0, 1121, 1122, 5, 115, 0, 0, 1122, 1297, 5, 55, 0, 0, 1123, 1124, 5, 98, 0, 0, 1124, 1125, 5, 121, 0, 0, 1125, 1126, 5, 116, 0, 0, 1126, 1127, 5, 101, 0, 0, 1127, 1128, 5, 115, 0, 0, 1128, 1297, 5, 56, 0, 0, 1129, 1130, 5, 98, 0, 0, 1130, 1131, 5, 121, 0, 0, 1131, 1132, 5, 116, 0, 0, 1132, 1133, 5, 101, 0, 0, 1133, 1134, 5, 115, 0, 0, 1134, 1297, 5, 57, 0, 0, 1135, 1136, 5, 98, 0, 0, 1136, 1137, 5, 121, 0, 0, 1137, 1138, 5, 116, 0, 0, 1138, 1139, 5, 101, 0, 0, 1139, 1140, 5, 115, 0, 0, 1140, 1141, 5, 49, 0, 0, 1141, 1297, 5, 48, 0, 0, 1142, 1143, 5, 98, 0, 0, 1143, 1144, 5, 121, 0, 0, 1144, 1145, 5, 116, 0, 0, 1145, 1146, 5, 101, 0, 0, 1146, 1147, 5, 115, 0, 0, 1147, 1148, 5, 49, 0, 0, 1148, 1297, 5, 49, 0, 0, 1149, 1150, 5, 98, 0, 0, 1150, 1151, 5, 121, 0, 0, 1151, 1152, 5, 116, 0, 0, 1152, 1153, 5, 101, 0, 0, 1153, 1154, 5, 115, 0, 0, 1154, 1155, 5, 49, 0, 0, 1155, 1297, 5, 50, 0, 0, 1156, 1157, 5, 98, 0, 0, 1157, 1158, 5, 121, 0, 0, 1158, 1159, 5, 116, 0, 0, 1159, 1160, 5, 101, 0, 0, 1160, 1161, 5, 115, 0, 0, 1161, 1162, 5, 49, 0, 0, 1162, 1297, 5, 51, 0, 0, 1163, 1164, 5, 98, 0, 0, 1164, 1165, 5, 121, 0, 0, 1165, 1166, 5, 116, 0, 0, 1166, 1167, 5, 101, 0, 0, 1167, 1168, 5, 115, 0, 0, 1168, 1169, 5, 49, 0, 0, 1169, 1297, 5, 52, 0, 0, 1170, 1171, 5, 98, 0, 0, 1171, 1172, 5, 121, 0, 0, 1172, 1173, 5, 116, 0, 0, 1173, 1174, 5, 101, 0, 0, 1174, 1175, 5, 115, 0, 0, 1175, 1176, 5, 49, 0, 0, 1176, 1297, 5, 53, 0, 0, 1177, 1178, 5, 98, 0, 0, 1178, 1179, 5, 121, 0, 0, 1179, 1180, 5, 116, 0, 0, 1180, 1181, 5, 101, 0, 0, 1181, 1182, 5, 115, 0, 0, 1182, 1183, 5, 49, 0, 0, 1183, 1297, 5, 54, 0, 0, 1184, 1185, 5, 98, 0, 0, 1185, 1186, 5, 121, 0, 0, 1186, 1187, 5, 116, 0, 0, 1187, 1188, 5, 101, 0, 0, 1188, 1189, 5, 115, 0, 0, 1189, 1190, 5, 49, 0, 0, 1190, 1297, 5, 55, 0, 0, 1191, 1192, 5, 98, 0, 0, 1192, 1193, 5, 121, 0, 0, 1193, 1194, 5, 116, 0, 0, 1194, 1195, 5, 101, 0, 0, 1195, 1196, 5, 115, 0, 0, 1196, 1197, 5, 49, 0, 0, 1197, 1297, 5, 56, 0, 0, 1198, 1199, 5, 98, 0, 0, 1199, 1200, 5, 121, 0, 0, 1200, 1201, 5, 116, 0, 0, 1201, 1202, 5, 101, 0, 0, 1202, 1203, 5, 115, 0, 0, 1203, 1204, 5, 49, 0, 0, 1204, 1297, 5, 57, 0, 0, 1205, 1206, 5, 98, 0, 0, 1206, 1207, 5, 121, 0, 0, 1207, 1208, 5, 116, 0, 0, 1208, 1209, 5, 101, 0, 0, 1209, 1210, 5, 115, 0, 0, 1210, 1211, 5, 50, 0, 0, 1211, 1297, 5, 48, 0, 0, 1212, 1213, 5, 98, 0, 0, 1213, 1214, 5, 121, 0, 0, 1214, 1215, 5, 116, 0, 0, 1215, 1216, 5, 101, 0, 0, 1216, 1217, 5, 115, 0, 0, 1217, 1218, 5, 50, 0, 0, 1218, 1297, 5, 49, 0, 0, 1219, 1220, 5, 98, 0, 0, 1220, 1221, 5, 121, 0, 0, 1221, 1222, 5, 116, 0, 0, 1222, 1223, 5, 101, 0, 0, 1223, 1224, 5, 115, 0, 0, 1224, 1225, 5, 50, 0, 0, 1225, 1297, 5, 50, 0, 0, 1226, 1227, 5, 98, 0, 0, 1227, 1228, 5, 121, 0, 0, 1228, 1229, 5, 116, 0, 0, 1229, 1230, 5, 101, 0, 0, 1230, 1231, 5, 115, 0, 0, 1231, 1232, 5, 50, 0, 0, 1232, 1297, 5, 51, 0, 0, 1233, 1234, 5, 98, 0, 0, 1234, 1235, 5, 121, 0, 0, 1235, 1236, 5, 116, 0, 0, 1236, 1237, 5, 101, 0, 0, 1237, 1238, 5, 115, 0, 0, 1238, 1239, 5, 50, 0, 0, 1239, 1297, 5, 52, 0, 0, 1240, 1241, 5, 98, 0, 0, 1241, 1242, 5, 121, 0, 0, 1242, 1243, 5, 116, 0, 0, 1243, 1244, 5, 101, 0, 0, 1244, 1245, 5, 115, 0, 0, 1245, 1246, 5, 50, 0, 0, 1246, 1297, 5, 53, 0, 0, 1247, 1248, 5, 98, 0, 0, 1248, 1249, 5, 121, 0, 0, 1249, 1250, 5, 116, 0, 0, 1250, 1251, 5, 101, 0, 0, 1251, 1252, 5, 115, 0, 0, 1252, 1253, 5, 50, 0, 0, 1253, 1297, 5, 54, 0, 0, 1254, 1255, 5, 98, 0, 0, 1255, 1256, 5, 121, 0, 0, 1256, 1257, 5, 116, 0, 0, 1257, 1258, 5, 101, 0, 0, 1258, 1259, 5, 115, 0, 0, 1259, 1260, 5, 50, 0, 0, 1260, 1297, 5, 55, 0, 0, 1261, 1262, 5, 98, 0, 0, 1262, 1263, 5, 121, 0, 0, 1263, 1264, 5, 116, 0, 0, 1264, 1265, 5, 101, 0, 0, 1265, 1266, 5, 115, 0, 0, 1266, 1267, 5, 50, 0, 0, 1267, 1297, 5, 56, 0, 0, 1268, 1269, 5, 98, 0, 0, 1269, 1270, 5, 121, 0, 0, 1270, 1271, 5, 116, 0, 0, 1271, 1272, 5, 101, 0, 0, 1272, 1273, 5, 115, 0, 0, 1273, 1274, 5, 50, 0, 0, 1274, 1297, 5, 57, 0, 0, 1275, 1276, 5, 98, 0, 0, 1276, 1277, 5, 121, 0, 0, 1277, 1278, 5, 116, 0, 0, 1278, 1279, 5, 101, 0, 0, 1279, 1280, 5, 115, 0, 0, 1280, 1281, 5, 51, 0, 0, 1281, 1297, 5, 48, 0, 0, 1282, 1283, 5, 98, 0, 0, 1283, 1284, 5, 121, 0, 0, 1284, 1285, 5, 116, 0, 0, 1285, 1286, 5, 101, 0, 0, 1286, 1287, 5, 115, 0, 0, 1287, 1288, 5, 51, 0, 0, 1288, 1297, 5, 49, 0, 0, 1289, 1290, 5, 98, 0, 0, 1290, 1291, 5, 121, 0, 0, 1291, 1292, 5, 116, 0, 0, 1292, 1293, 5, 101, 0, 0, 1293, 1294, 5, 115, 0, 0, 1294, 1295, 5, 51, 0, 0, 1295, 1297, 5, 50, 0, 0, 1296, 1076, 1, 0, 0, 0, 1296, 1081, 1, 0, 0, 0, 1296, 1087, 1, 0, 0, 0, 1296, 1093, 1, 0, 0, 0, 1296, 1099, 1, 0, 0, 0, 1296, 1105, 1, 0, 0, 0, 1296, 1111, 1, 0, 0, 0, 1296, 1117, 1, 0, 0, 0, 1296, 1123, 1, 0, 0, 0, 1296, 1129, 1, 0, 0, 0, 1296, 1135, 1, 0, 0, 0, 1296, 1142, 1, 0, 0, 0, 1296, 1149, 1, 0, 0, 0, 1296, 1156, 1, 0, 0, 0, 1296, 1163, 1, 0, 0, 0, 1296, 1170, 1, 0, 0, 0, 1296, 1177, 1, 0, 0, 0, 1296, 1184, 1, 0, 0, 0, 1296, 1191, 1, 0, 0, 0, 1296, 1198, 1, 0, 0, 0, 1296, 1205, 1, 0, 0, 0, 1296, 1212, 1, 0, 0, 0, 1296, 1219, 1, 0, 0, 0, 1296, 1226, 1, 0, 0, 0, 1296, 1233, 1, 0, 0, 0, 1296, 1240, 1, 0, 0, 0, 1296, 1247, 1, 0, 0, 0, 1296, 1254, 1, 0, 0, 0, 1296, 1261, 1, 0, 0, 0, 1296, 1268, 1, 0, 0, 0, 1296, 1275, 1, 0, 0, 0, 1296, 1282, 1, 0, 0, 0, 1296, 1289, 1, 0, 0, 0, 1297, 190, 1, 0, 0, 0, 1298, 1299, 5, 102, 0, 0, 1299, 1300, 5, 105, 0, 0, 1300, 1301, 5, 120, 0, 0, 1301, 1302, 5, 101, 0, 0, 1302, 1321, 5, 100, 0, 0, 1303, 1304, 5, 102, 0, 0, 1304, 1305, 5, 105, 0, 0, 1305, 1306, 5, 120, 0, 0, 1306, 1307, 5, 101, 0, 0, 1307, 1308, 5, 100, 0, 0, 1308, 1310, 1, 0, 0, 0, 1309, 1311, 7, 0, 0, 0, 1310, 1309, 1, 0, 0, 0, 1311, 1312, 1, 0, 0, 0, 1312, 1310, 1, 0, 0, 0, 1312, 1313, 1, 0, 0, 0, 1313, 1314, 1, 0, 0, 0, 1314, 1316, 5, 120, 0, 0, 1315, 1317, 7, 0, 0, 0, 1316, 1315, 1, 0, 0, 0, 1317, 1318, 1, 0, 0, 0, 1318, 1316, 1, 0, 0, 0, 1318, 1319, 1, 0, 0, 0, 1319, 1321, 1, 0, 0, 0, 1320, 1298, 1, 0, 0, 0, 1320, 1303, 1, 0, 0, 0, 1321, 192, 1, 0, 0, 0, 1322, 1323, 5, 117, 0, 0, 1323, 1324, 5, 102, 0, 0, 1324, 1325, 5, 105, 0, 0, 1325, 1326, 5, 120, 0, 0, 1326, 1327, 5, 101, 0, 0, 1327, 1347, 5, 100, 0, 0, 1328, 1329, 5, 117, 0, 0, 1329, 1330, 5, 102, 0, 0, 1330, 1331, 5, 105, 0, 0, 1331, 1332, 5, 120, 0, 0, 1332, 1333, 5, 101, 0, 0, 1333, 1334, 5, 100, 0, 0, 1334, 1336, 1, 0, 0, 0, 1335, 1337, 7, 0, 0, 0, 1336, 1335, 1, 0, 0, 0, 1337, 1338, 1, 0, 0, 0, 1338, 1336, 1, 0, 0, 0, 1338, 1339, 1, 0, 0, 0, 1339, 1340, 1, 0, 0, 0, 1340, 1342, 5, 120, 0, 0, 1341, 1343, 7, 0, 0, 0, 1342, 1341, 1, 0, 0, 0, 1343, 1344, 1, 0, 0, 0, 1344, 1342, 1, 0, 0, 0, 1344, 1345, 1, 0, 0, 0, 1345, 1347, 1, 0, 0, 0, 1346, 1322, 1, 0, 0, 0, 1346, 1328, 1, 0, 0, 0, 1347, 194, 1, 0, 0, 0, 1348, 1349, 5, 116, 0, 0, 1349, 1350, 5, 114, 0, 0, 1350, 1351, 5, 117, 0, 0, 1351, 1358, 5, 101, 0, 0, 1352, 1353, 5, 102, 0, 0, 1353, 1354, 5, 97, 0, 0, 1354, 1355, 5, 108, 0, 0, 1355, 1356, 5, 115, 0, 0, 1356, 1358, 5, 101, 0, 0, 1357, 1348, 1, 0, 0, 0, 1357, 1352, 1, 0, 0, 0, 1358, 196, 1, 0, 0, 0, 1359, 1366, 3, 199, 99, 0, 1360, 1362, 3, 199, 99, 0, 1361, 1360, 1, 0, 0, 0, 1361, 1362, 1, 0, 0, 0, 1362, 1363, 1, 0, 0, 0, 1363, 1364, 5, 46, 0, 0, 1364, 1366, 3, 199, 99, 0, 1365, 1359, 1, 0, 0, 0, 1365, 1361, 1, 0, 0, 0, 1366, 1372, 1, 0, 0, 0, 1367, 1369, 7, 1, 0, 0, 1368, 1370, 5, 45, 0, 0, 1369, 1368, 1, 0, 0, 0, 1369, 1370, 1, 0, 0, 0, 1370, 1371, 1, 0, 0, 0, 1371, 1373, 3, 199, 99, 0, 1372, 1367, 1, 0, 0, 0, 1372, 1373, 1, 0, 0, 0, 1373, 198, 1, 0, 0, 0, 1374, 1381, 7, 0, 0, 0, 1375, 1377, 5, 95, 0, 0, 1376, 1375, 1, 0, 0, 0, 1376, 1377, 1, 0, 0, 0, 1377, 1378, 1, 0, 0, 0, 1378, 1380, 7, 0, 0, 0, 1379, 1376, 1, 0, 0, 0, 1380, 1383, 1, 0, 0, 0, 1381, 1379, 1, 0, 0, 0, 1381, 1382, 1, 0, 0, 0, 1382, 200, 1, 0, 0, 0, 1383, 1381, 1, 0, 0, 0, 1384, 1385, 5, 48, 0, 0, 1385, 1386, 7, 2, 0, 0, 1386, 1387, 3, 203, 101, 0, 1387, 202, 1, 0, 0, 0, 1388, 1395, 3, 211, 105, 0, 1389, 1391, 5, 95, 0, 0, 1390, 1389, 1, 0, 0, 0, 1390, 1391, 1, 0, 0, 0, 1391, 1392, 1, 0, 0, 0, 1392, 1394, 3, 211, 105, 0, 1393, 1390, 1, 0, 0, 0, 1394, 1397, 1, 0, 0, 0, 1395, 1393, 1, 0, 0, 0, 1395, 1396, 1, 0, 0, 0, 1396, 204, 1, 0, 0, 0, 1397, 1395, 1, 0, 0, 0, 1398, 1399, 5, 119, 0, 0, 1399, 1400, 5, 101, 0, 0, 1400, 1451, 5, 105, 0, 0, 1401, 1402, 5, 115, 0, 0, 1402, 1403, 5, 122, 0, 0, 1403, 1404, 5, 97, 0, 0, 1404, 1405, 5, 98, 0, 0, 1405, 1451, 5, 111, 0, 0, 1406, 1407, 5, 102, 0, 0, 1407, 1408, 5, 105, 0, 0, 1408, 1409, 5, 110, 0, 0, 1409, 1410, 5, 110, 0, 0, 1410, 1411, 5, 101, 0, 0, 1411, 1451, 5, 121, 0, 0, 1412, 1413, 5, 101, 0, 0, 1413, 1414, 5, 116, 0, 0, 1414, 1415, 5, 104, 0, 0, 1415, 1416, 5, 101, 0, 0, 1416, 1451, 5, 114, 0, 0, 1417, 1418, 5, 115, 0, 0, 1418, 1419, 5, 101, 0, 0, 1419, 1420, 5, 99, 0, 0, 1420, 1421, 5, 111, 0, 0, 1421, 1422, 5, 110, 0, 0, 1422, 1423, 5, 100, 0, 0, 1423, 1451, 5, 115, 0, 0, 1424, 1425, 5, 109, 0, 0, 1425, 1426, 5, 105, 0, 0, 1426, 1427, 5, 110, 0, 0, 1427, 1428, 5, 117, 0, 0, 1428, 1429, 5, 116, 0, 0, 1429, 1430, 5, 101, 0, 0, 1430, 1451, 5, 115, 0, 0, 1431, 1432, 5, 104, 0, 0, 1432, 1433, 5, 111, 0, 0, 1433, 1434, 5, 117, 0, 0, 1434, 1435, 5, 114, 0, 0, 1435, 1451, 5, 115, 0, 0, 1436, 1437, 5, 100, 0, 0, 1437, 1438, 5, 97, 0, 0, 1438, 1439, 5, 121, 0, 0, 1439, 1451, 5, 115, 0, 0, 1440, 1441, 5, 119, 0, 0, 1441, 1442, 5, 101, 0, 0, 1442, 1443, 5, 101, 0, 0, 1443, 1444, 5, 107, 0, 0, 1444, 1451, 5, 115, 0, 0, 1445, 1446, 5, 121, 0, 0, 1446, 1447, 5, 101, 0, 0, 1447, 1448, 5, 97, 0, 0, 1448, 1449, 5, 114, 0, 0, 1449, 1451, 5, 115, 0, 0, 1450, 1398, 1, 0, 0, 0, 1450, 1401, 1, 0, 0, 0, 1450, 1406, 1, 0, 0, 0, 1450, 1412, 1, 0, 0, 0, 1450, 1417, 1, 0, 0, 0, 1450, 1424, 1, 0, 0, 0, 1450, 1431, 1, 0, 0, 0, 1450, 1436, 1, 0, 0, 0, 1450, 1440, 1, 0, 0, 0, 1450, 1445, 1, 0, 0, 0, 1451, 206, 1, 0, 0, 0, 1452, 1453, 5, 104, 0, 0, 1453, 1454, 5, 101, 0, 0, 1454, 1455, 5, 120, 0, 0, 1455, 1466, 1, 0, 0, 0, 1456, 1458, 5, 34, 0, 0, 1457, 1459, 3, 203, 101, 0, 1458, 1457, 1, 0, 0, 0, 1458, 1459, 1, 0, 0, 0, 1459, 1460, 1, 0, 0, 0, 1460, 1467, 5, 34, 0, 0, 1461, 1463, 5, 39, 0, 0, 1462, 1464, 3, 203, 101, 0, 1463, 1462, 1, 0, 0, 0, 1463, 1464, 1, 0, 0, 0, 1464, 1465, 1, 0, 0, 0, 1465, 1467, 5, 39, 0, 0, 1466, 1456, 1, 0, 0, 0, 1466, 1461, 1, 0, 0, 0, 1467, 208, 1, 0, 0, 0, 1468, 1469, 3, 211, 105, 0, 1469, 1470, 3, 211, 105, 0, 1470, 210, 1, 0, 0, 0, 1471, 1472, 7, 3, 0, 0, 1472, 212, 1, 0, 0, 0, 1473, 1474, 5, 97, 0, 0, 1474, 1475, 5, 102, 0, 0, 1475, 1476, 5, 116, 0, 0, 1476, 1477, 5, 101, 0, 0, 1477, 1546, 5, 114, 0, 0, 1478, 1479, 5, 99, 0, 0, 1479, 1480, 5, 97, 0, 0, 1480, 1481, 5, 115, 0, 0, 1481, 1546, 5, 101, 0, 0, 1482, 1483, 5, 100, 0, 0, 1483, 1484, 5, 101, 0, 0, 1484, 1485, 5, 102, 0, 0, 1485, 1486, 5, 97, 0, 0, 1486, 1487, 5, 117, 0, 0, 1487, 1488, 5, 108, 0, 0, 1488, 1546, 5, 116, 0, 0, 1489, 1490, 5, 102, 0, 0, 1490, 1491, 5, 105, 0, 0, 1491, 1492, 5, 110, 0, 0, 1492, 1493, 5, 97, 0, 0, 1493, 1546, 5, 108, 0, 0, 1494, 1495, 5, 105, 0, 0, 1495, 1546, 5, 110, 0, 0, 1496, 1497, 5, 105, 0, 0, 1497, 1498, 5, 110, 0, 0, 1498, 1499, 5, 108, 0, 0, 1499, 1500, 5, 105, 0, 0, 1500, 1501, 5, 110, 0, 0, 1501, 1546, 5, 101, 0, 0, 1502, 1503, 5, 108, 0, 0, 1503, 1504, 5, 101, 0, 0, 1504, 1546, 5, 116, 0, 0, 1505, 1506, 5, 109, 0, 0, 1506, 1507, 5, 97, 0, 0, 1507, 1508, 5, 116, 0, 0, 1508, 1509, 5, 99, 0, 0, 1509, 1546, 5, 104, 0, 0, 1510, 1511, 5, 110, 0, 0, 1511, 1512, 5, 117, 0, 0, 1512, 1513, 5, 108, 0, 0, 1513, 1546, 5, 108, 0, 0, 1514, 1515, 5, 111, 0, 0, 1515, 1546, 5, 102, 0, 0, 1516, 1517, 5, 114, 0, 0, 1517, 1518, 5, 101, 0, 0, 1518, 1519, 5, 108, 0, 0, 1519, 1520, 5, 111, 0, 0, 1520, 1521, 5, 99, 0, 0, 1521, 1522, 5, 97, 0, 0, 1522, 1523, 5, 116, 0, 0, 1523, 1524, 5, 97, 0, 0, 1524, 1525, 5, 98, 0, 0, 1525, 1526, 5, 108, 0, 0, 1526, 1546, 5, 101, 0, 0, 1527, 1528, 5, 115, 0, 0, 1528, 1529, 5, 116, 0, 0, 1529, 1530, 5, 97, 0, 0, 1530, 1531, 5, 116, 0, 0, 1531, 1532, 5, 105, 0, 0, 1532, 1546, 5, 99, 0, 0, 1533, 1534, 5, 115, 0, 0, 1534, 1535, 5, 119, 0, 0, 1535, 1536, 5, 105, 0, 0, 1536, 1537, 5, 116, 0, 0, 1537, 1538, 5, 99, 0, 0, 1538, 1546, 5, 104, 0, 0, 1539, 1540, 5, 116, 0, 0, 1540, 1541, 5, 121, 0, 0, 1541, 1542, 5, 112, 0, 0, 1542, 1543, 5, 101, 0, 0, 1543, 1544, 5, 111, 0, 0, 1544, 1546, 5, 102, 0, 0, 1545, 1473, 1, 0, 0, 0, 1545, 1478, 1, 0, 0, 0, 1545, 1482, 1, 0, 0, 0, 1545, 1489, 1, 0, 0, 0, 1545, 1494, 1, 0, 0, 0, 1545, 1496, 1, 0, 0, 0, 1545, 1502, 1, 0, 0, 0, 1545, 1505, 1, 0, 0, 0, 1545, 1510, 1, 0, 0, 0, 1545, 1514, 1, 0, 0, 0, 1545, 1516, 1, 0, 0, 0, 1545, 1527, 1, 0, 0, 0, 1545, 1533, 1, 0, 0, 0, 1545, 1539, 1, 0, 0, 0, 1546, 214, 1, 0, 0, 0, 1547, 1548, 5, 97, 0, 0, 1548, 1549, 5, 110, 0, 0, 1549, 1550, 5, 111, 0, 0, 1550, 1551, 5, 110, 0, 0, 1551, 1552, 5, 121, 0, 0, 1552, 1553, 5, 109, 0, 0, 1553, 1554, 5, 111, 0, 0, 1554, 1555, 5, 117, 0, 0, 1555, 1556, 5, 115, 0, 0, 1556, 216, 1, 0, 0, 0, 1557, 1558, 5, 98, 0, 0, 1558, 1559, 5, 114, 0, 0, 1559, 1560, 5, 101, 0, 0, 1560, 1561, 5, 97, 0, 0, 1561, 1562, 5, 107, 0, 0, 1562, 218, 1, 0, 0, 0, 1563, 1564, 5, 99, 0, 0, 1564, 1565, 5, 111, 0, 0, 1565, 1566, 5, 110, 0, 0, 1566, 1567, 5, 115, 0, 0, 1567, 1568, 5, 116, 0, 0, 1568, 1569, 5, 97, 0, 0, 1569, 1570, 5, 110, 0, 0, 1570, 1571, 5, 116, 0, 0, 1571, 220, 1, 0, 0, 0, 1572, 1573, 5, 105, 0, 0, 1573, 1574, 5, 109, 0, 0, 1574, 1575, 5, 109, 0, 0, 1575, 1576, 5, 117, 0, 0, 1576, 1577, 5, 116, 0, 0, 1577, 1578, 5, 97, 0, 0, 1578, 1579, 5, 98, 0, 0, 1579, 1580, 5, 108, 0, 0, 1580, 1581, 5, 101, 0, 0, 1581, 222, 1, 0, 0, 0, 1582, 1583, 5, 99, 0, 0, 1583, 1584, 5, 111, 0, 0, 1584, 1585, 5, 110, 0, 0, 1585, 1586, 5, 116, 0, 0, 1586, 1587, 5, 105, 0, 0, 1587, 1588, 5, 110, 0, 0, 1588, 1589, 5, 117, 0, 0, 1589, 1590, 5, 101, 0, 0, 1590, 224, 1, 0, 0, 0, 1591, 1592, 5, 108, 0, 0, 1592, 1593, 5, 101, 0, 0, 1593, 1594, 5, 97, 0, 0, 1594, 1595, 5, 118, 0, 0, 1595, 1596, 5, 101, 0, 0, 1596, 226, 1, 0, 0, 0, 1597, 1598, 5, 101, 0, 0, 1598, 1599, 5, 120, 0, 0, 1599, 1600, 5, 116, 0, 0, 1600, 1601, 5, 101, 0, 0, 1601, 1602, 5, 114, 0, 0, 1602, 1603, 5, 110, 0, 0, 1603, 1604, 5, 97, 0, 0, 1604, 1605, 5, 108, 0, 0, 1605, 228, 1, 0, 0, 0, 1606, 1607, 5, 105, 0, 0, 1607, 1608, 5, 110, 0, 0, 1608, 1609, 5, 100, 0, 0, 1609, 1610, 5, 101, 0, 0, 1610, 1611, 5, 120, 0, 0, 1611, 1612, 5, 101, 0, 0, 1612, 1613, 5, 100, 0, 0, 1613, 230, 1, 0, 0, 0, 1614, 1615, 5, 105, 0, 0, 1615, 1616, 5, 110, 0, 0, 1616, 1617, 5, 116, 0, 0, 1617, 1618, 5, 101, 0, 0, 1618, 1619, 5, 114, 0, 0, 1619, 1620, 5, 110, 0, 0, 1620, 1621, 5, 97, 0, 0, 1621, 1622, 5, 108, 0, 0, 1622, 232, 1, 0, 0, 0, 1623, 1624, 5, 112, 0, 0, 1624, 1625, 5, 97, 0, 0, 1625, 1626, 5, 121, 0, 0, 1626, 1627, 5, 97, 0, 0, 1627, 1628, 5, 98, 0, 0, 1628, 1629, 5, 108, 0, 0, 1629, 1630, 5, 101, 0, 0, 1630, 234, 1, 0, 0, 0, 1631, 1632, 5, 112, 0, 0, 1632, 1633, 5, 114, 0, 0, 1633, 1634, 5, 105, 0, 0, 1634, 1635, 5, 118, 0, 0, 1635, 1636, 5, 97, 0, 0, 1636, 1637, 5, 116, 0, 0, 1637, 1638, 5, 101, 0, 0, 1638, 236, 1, 0, 0, 0, 1639, 1640, 5, 112, 0, 0, 1640, 1641, 5, 117, 0, 0, 1641, 1642, 5, 98, 0, 0, 1642, 1643, 5, 108, 0, 0, 1643, 1644, 5, 105, 0, 0, 1644, 1645, 5, 99, 0, 0, 1645, 238, 1, 0, 0, 0, 1646, 1647, 5, 118, 0, 0, 1647, 1648, 5, 105, 0, 0, 1648, 1649, 5, 114, 0, 0, 1649, 1650, 5, 116, 0, 0, 1650, 1651, 5, 117, 0, 0, 1651, 1652, 5, 97, 0, 0, 1652, 1653, 5, 108, 0, 0, 1653, 240, 1, 0, 0, 0, 1654, 1655, 5, 112, 0, 0, 1655, 1656, 5, 117, 0, 0, 1656, 1657, 5, 114, 0, 0, 1657, 1658, 5, 101, 0, 0, 1658, 242, 1, 0, 0, 0, 1659, 1660, 5, 116, 0, 0, 1660, 1661, 5, 121, 0, 0, 1661, 1662, 5, 112, 0, 0, 1662, 1663, 5, 101, 0, 0, 1663, 244, 1, 0, 0, 0, 1664, 1665, 5, 118, 0, 0, 1665, 1666, 5, 105, 0, 0, 1666, 1667, 5, 101, 0, 0, 1667, 1668, 5, 119, 0, 0, 1668, 246, 1, 0, 0, 0, 1669, 1670, 5, 99, 0, 0, 1670, 1671, 5, 111, 0, 0, 1671, 1672, 5, 110, 0, 0, 1672, 1673, 5, 115, 0, 0, 1673, 1674, 5, 116, 0, 0, 1674, 1675, 5, 114, 0, 0, 1675, 1676, 5, 117, 0, 0, 1676, 1677, 5, 99, 0, 0, 1677, 1678, 5, 116, 0, 0, 1678, 1679, 5, 111, 0, 0, 1679, 1680, 5, 114, 0, 0, 1680, 248, 1, 0, 0, 0, 1681, 1682, 5, 102, 0, 0, 1682, 1683, 5, 97, 0, 0, 1683, 1684, 5, 108, 0, 0, 1684, 1685, 5, 108, 0, 0, 1685, 1686, 5, 98, 0, 0, 1686, 1687, 5, 97, 0, 0, 1687, 1688, 5, 99, 0, 0, 1688, 1689, 5, 107, 0, 0, 1689, 250, 1, 0, 0, 0, 1690, 1691, 5, 114, 0, 0, 1691, 1692, 5, 101, 0, 0, 1692, 1693, 5, 99, 0, 0, 1693, 1694, 5, 101, 0, 0, 1694, 1695, 5, 105, 0, 0, 1695, 1696, 5, 118, 0, 0, 1696, 1697, 5, 101, 0, 0, 1697, 252, 1, 0, 0, 0, 1698, 1702, 3, 255, 127, 0, 1699, 1701, 3, 257, 128, 0, 1700, 1699, 1, 0, 0, 0, 1701, 1704, 1, 0, 0, 0, 1702, 1700, 1, 0, 0, 0, 1702, 1703, 1, 0, 0, 0, 1703, 254, 1, 0, 0, 0, 1704, 1702, 1, 0, 0, 0, 1705, 1706, 7, 4, 0, 0, 1706, 256, 1, 0, 0, 0, 1707, 1708, 7, 5, 0, 0, 1708, 258, 1, 0, 0, 0, 1709, 1713, 5, 34, 0, 0, 1710, 1712, 3, 261, 130, 0, 1711, 1710, 1, 0, 0, 0, 1712, 1715, 1, 0, 0, 0, 1713, 1711, 1, 0, 0, 0, 1713, 1714, 1, 0, 0, 0, 1714, 1716, 1, 0, 0, 0, 1715, 1713, 1, 0, 0, 0, 1716, 1726, 5, 34, 0, 0, 1717, 1721, 5, 39, 0, 0, 1718, 1720, 3, 263, 131, 0, 1719, 1718, 1, 0, 0, 0, 1720, 1723, 1, 0, 0, 0, 1721, 1719, 1, 0, 0, 0, 1721, 1722, 1, 0, 0, 0, 1722, 1724, 1, 0, 0, 0, 1723, 1721, 1, 0, 0, 0, 1724, 1726, 5, 39, 0, 0, 1725, 1709, 1, 0, 0, 0, 1725, 1717, 1, 0, 0, 0, 1726, 260, 1, 0, 0, 0, 1727, 1731, 8, 6, 0, 0, 1728, 1729, 5, 92, 0, 0, 1729, 1731, 9, 0, 0, 0, 1730, 1727, 1, 0, 0, 0, 1730, 1728, 1, 0, 0, 0, 1731, 262, 1, 0, 0, 0, 1732, 1736, 8, 7, 0, 0, 1733, 1734, 5, 92, 0, 0, 1734, 1736, 9, 0, 0, 0, 1735, 1732, 1, 0, 0, 0, 1735, 1733, 1, 0, 0, 0, 1736, 264, 1, 0, 0, 0, 1737, 1739, 7, 0, 0, 0, 1738, 1737, 1, 0, 0, 0, 1739, 1740, 1, 0, 0, 0, 1740, 1738, 1, 0, 0, 0, 1740, 1741, 1, 0, 0, 0, 1741, 1742, 1, 0, 0, 0, 1742, 1744, 5, 46, 0, 0, 1743, 1745, 7, 0, 0, 0, 1744, 1743, 1, 0, 0, 0, 1745, 1746, 1, 0, 0, 0, 1746, 1744, 1, 0, 0, 0, 1746, 1747, 1, 0, 0, 0, 1747, 1754, 1, 0, 0, 0, 1748, 1750, 5, 46, 0, 0, 1749, 1751, 7, 0, 0, 0, 1750, 1749, 1, 0, 0, 0, 1751, 1752, 1, 0, 0, 0, 1752, 1750, 1, 0, 0, 0, 1752, 1753, 1, 0, 0, 0, 1753, 1755, 1, 0, 0, 0, 1754, 1748, 1, 0, 0, 0, 1754, 1755, 1, 0, 0, 0, 1755, 266, 1, 0, 0, 0, 1756, 1758, 7, 8, 0, 0, 1757, 1756, 1, 0, 0, 0, 1758, 1759, 1, 0, 0, 0, 1759, 1757, 1, 0, 0, 0, 1759, 1760, 1, 0, 0, 0, 1760, 1761, 1, 0, 0, 0, 1761, 1762, 6, 133, 0, 0, 1762, 268, 1, 0, 0, 0, 1763, 1764, 5, 47, 0, 0, 1764, 1765, 5, 42, 0, 0, 1765, 1769, 1, 0, 0, 0, 1766, 1768, 9, 0, 0, 0, 1767, 1766, 1, 0, 0, 0, 1768, 1771, 1, 0, 0, 0, 1769, 1770, 1, 0, 0, 0, 1769, 1767, 1, 0, 0, 0, 1770, 1772, 1, 0, 0, 0, 1771, 1769, 1, 0, 0, 0, 1772, 1773, 5, 42, 0, 0, 1773, 1774, 5, 47, 0, 0, 1774, 1775, 1, 0, 0, 0, 1775, 1776, 6, 134, 1, 0, 1776, 270, 1, 0, 0, 0, 1777, 1778, 5, 47, 0, 0, 1778, 1779, 5, 47, 0, 0, 1779, 1783, 1, 0, 0, 0, 1780, 1782, 8, 9, 0, 0, 1781, 1780, 1, 0, 0, 0, 1782, 1785, 1, 0, 0, 0, 1783, 1781, 1, 0, 0, 0, 1783, 1784, 1, 0, 0, 0, 1784, 1786, 1, 0, 0, 0, 1785, 1783, 1, 0, 0, 0, 1786, 1787, 6, 135, 1, 0, 1787, 272, 1, 0, 0, 0, 37, 0, 857, 1074, 1296, 1312, 1318, 1320, 1338, 1344, 1346, 1357, 1361, 1365, 1369, 1372, 1376, 1381, 1390, 1395, 1450, 1458, 1463, 1466, 1545, 1702, 1713, 1721, 1725, 1730, 1735, 1740, 1746, 1752, 1754, 1759, 1769, 1783, 2, 6, 0, 0, 0, 1, 0] \ No newline at end of file diff --git a/parser/SolidityLexer.tokens b/parser/SolidityLexer.tokens new file mode 100644 index 0000000..ffcbd26 --- /dev/null +++ b/parser/SolidityLexer.tokens @@ -0,0 +1,239 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +T__9=10 +T__10=11 +T__11=12 +T__12=13 +T__13=14 +T__14=15 +T__15=16 +T__16=17 +T__17=18 +T__18=19 +T__19=20 +T__20=21 +T__21=22 +T__22=23 +T__23=24 +T__24=25 +T__25=26 +T__26=27 +T__27=28 +T__28=29 +T__29=30 +T__30=31 +T__31=32 +T__32=33 +T__33=34 +T__34=35 +T__35=36 +T__36=37 +T__37=38 +T__38=39 +T__39=40 +T__40=41 +T__41=42 +T__42=43 +T__43=44 +T__44=45 +T__45=46 +T__46=47 +T__47=48 +T__48=49 +T__49=50 +T__50=51 +T__51=52 +T__52=53 +T__53=54 +T__54=55 +T__55=56 +T__56=57 +T__57=58 +T__58=59 +T__59=60 +T__60=61 +T__61=62 +T__62=63 +T__63=64 +T__64=65 +T__65=66 +T__66=67 +T__67=68 +T__68=69 +T__69=70 +T__70=71 +T__71=72 +T__72=73 +T__73=74 +T__74=75 +T__75=76 +T__76=77 +T__77=78 +T__78=79 +T__79=80 +T__80=81 +T__81=82 +T__82=83 +T__83=84 +T__84=85 +T__85=86 +T__86=87 +T__87=88 +T__88=89 +T__89=90 +T__90=91 +T__91=92 +Int=93 +Uint=94 +Byte=95 +Fixed=96 +Ufixed=97 +BooleanLiteral=98 +DecimalNumber=99 +HexNumber=100 +NumberUnit=101 +HexLiteralFragment=102 +ReservedKeyword=103 +AnonymousKeyword=104 +BreakKeyword=105 +ConstantKeyword=106 +ImmutableKeyword=107 +ContinueKeyword=108 +LeaveKeyword=109 +ExternalKeyword=110 +IndexedKeyword=111 +InternalKeyword=112 +PayableKeyword=113 +PrivateKeyword=114 +PublicKeyword=115 +VirtualKeyword=116 +PureKeyword=117 +TypeKeyword=118 +ViewKeyword=119 +ConstructorKeyword=120 +FallbackKeyword=121 +ReceiveKeyword=122 +Identifier=123 +StringLiteralFragment=124 +VersionLiteral=125 +WS=126 +COMMENT=127 +LINE_COMMENT=128 +'pragma'=1 +';'=2 +'^'=3 +'~'=4 +'>='=5 +'>'=6 +'<'=7 +'<='=8 +'='=9 +'import'=10 +'as'=11 +'*'=12 +'from'=13 +'{'=14 +','=15 +'}'=16 +'abstract'=17 +'contract'=18 +'interface'=19 +'library'=20 +'is'=21 +'('=22 +')'=23 +'override'=24 +'using'=25 +'for'=26 +'struct'=27 +'modifier'=28 +'function'=29 +'returns'=30 +'event'=31 +'enum'=32 +'['=33 +']'=34 +'.'=35 +'mapping'=36 +'=>'=37 +'memory'=38 +'storage'=39 +'calldata'=40 +'if'=41 +'else'=42 +'try'=43 +'catch'=44 +'while'=45 +'assembly'=46 +'do'=47 +'return'=48 +'throw'=49 +'emit'=50 +'var'=51 +'address'=52 +'bool'=53 +'string'=54 +'byte'=55 +'++'=56 +'--'=57 +'new'=58 +':'=59 +'+'=60 +'-'=61 +'after'=62 +'delete'=63 +'!'=64 +'**'=65 +'/'=66 +'%'=67 +'<<'=68 +'>>'=69 +'&'=70 +'|'=71 +'=='=72 +'!='=73 +'&&'=74 +'||'=75 +'?'=76 +'|='=77 +'^='=78 +'&='=79 +'<<='=80 +'>>='=81 +'+='=82 +'-='=83 +'*='=84 +'/='=85 +'%='=86 +'let'=87 +':='=88 +'=:'=89 +'switch'=90 +'case'=91 +'default'=92 +'anonymous'=104 +'break'=105 +'constant'=106 +'immutable'=107 +'continue'=108 +'leave'=109 +'external'=110 +'indexed'=111 +'internal'=112 +'payable'=113 +'private'=114 +'public'=115 +'virtual'=116 +'pure'=117 +'type'=118 +'view'=119 +'constructor'=120 +'fallback'=121 +'receive'=122 diff --git a/parser/solidity_base_listener.go b/parser/solidity_base_listener.go new file mode 100644 index 0000000..0a010b6 --- /dev/null +++ b/parser/solidity_base_listener.go @@ -0,0 +1,550 @@ +// Code generated from ./parser/Solidity.g4 by ANTLR 4.10.1. DO NOT EDIT. + +package parser // Solidity + +import "github.com/antlr/antlr4/runtime/Go/antlr" + +// BaseSolidityListener is a complete listener for a parse tree produced by SolidityParser. +type BaseSolidityListener struct{} + +var _ SolidityListener = &BaseSolidityListener{} + +// VisitTerminal is called when a terminal node is visited. +func (s *BaseSolidityListener) VisitTerminal(node antlr.TerminalNode) {} + +// VisitErrorNode is called when an error node is visited. +func (s *BaseSolidityListener) VisitErrorNode(node antlr.ErrorNode) {} + +// EnterEveryRule is called when any rule is entered. +func (s *BaseSolidityListener) EnterEveryRule(ctx antlr.ParserRuleContext) {} + +// ExitEveryRule is called when any rule is exited. +func (s *BaseSolidityListener) ExitEveryRule(ctx antlr.ParserRuleContext) {} + +// EnterSourceUnit is called when production sourceUnit is entered. +func (s *BaseSolidityListener) EnterSourceUnit(ctx *SourceUnitContext) {} + +// ExitSourceUnit is called when production sourceUnit is exited. +func (s *BaseSolidityListener) ExitSourceUnit(ctx *SourceUnitContext) {} + +// EnterPragmaDirective is called when production pragmaDirective is entered. +func (s *BaseSolidityListener) EnterPragmaDirective(ctx *PragmaDirectiveContext) {} + +// ExitPragmaDirective is called when production pragmaDirective is exited. +func (s *BaseSolidityListener) ExitPragmaDirective(ctx *PragmaDirectiveContext) {} + +// EnterPragmaName is called when production pragmaName is entered. +func (s *BaseSolidityListener) EnterPragmaName(ctx *PragmaNameContext) {} + +// ExitPragmaName is called when production pragmaName is exited. +func (s *BaseSolidityListener) ExitPragmaName(ctx *PragmaNameContext) {} + +// EnterPragmaValue is called when production pragmaValue is entered. +func (s *BaseSolidityListener) EnterPragmaValue(ctx *PragmaValueContext) {} + +// ExitPragmaValue is called when production pragmaValue is exited. +func (s *BaseSolidityListener) ExitPragmaValue(ctx *PragmaValueContext) {} + +// EnterVersion is called when production version is entered. +func (s *BaseSolidityListener) EnterVersion(ctx *VersionContext) {} + +// ExitVersion is called when production version is exited. +func (s *BaseSolidityListener) ExitVersion(ctx *VersionContext) {} + +// EnterVersionConstraint is called when production versionConstraint is entered. +func (s *BaseSolidityListener) EnterVersionConstraint(ctx *VersionConstraintContext) {} + +// ExitVersionConstraint is called when production versionConstraint is exited. +func (s *BaseSolidityListener) ExitVersionConstraint(ctx *VersionConstraintContext) {} + +// EnterVersionOperator is called when production versionOperator is entered. +func (s *BaseSolidityListener) EnterVersionOperator(ctx *VersionOperatorContext) {} + +// ExitVersionOperator is called when production versionOperator is exited. +func (s *BaseSolidityListener) ExitVersionOperator(ctx *VersionOperatorContext) {} + +// EnterImportDirective is called when production importDirective is entered. +func (s *BaseSolidityListener) EnterImportDirective(ctx *ImportDirectiveContext) {} + +// ExitImportDirective is called when production importDirective is exited. +func (s *BaseSolidityListener) ExitImportDirective(ctx *ImportDirectiveContext) {} + +// EnterImportDeclaration is called when production importDeclaration is entered. +func (s *BaseSolidityListener) EnterImportDeclaration(ctx *ImportDeclarationContext) {} + +// ExitImportDeclaration is called when production importDeclaration is exited. +func (s *BaseSolidityListener) ExitImportDeclaration(ctx *ImportDeclarationContext) {} + +// EnterContractDefinition is called when production contractDefinition is entered. +func (s *BaseSolidityListener) EnterContractDefinition(ctx *ContractDefinitionContext) {} + +// ExitContractDefinition is called when production contractDefinition is exited. +func (s *BaseSolidityListener) ExitContractDefinition(ctx *ContractDefinitionContext) {} + +// EnterInheritanceSpecifier is called when production inheritanceSpecifier is entered. +func (s *BaseSolidityListener) EnterInheritanceSpecifier(ctx *InheritanceSpecifierContext) {} + +// ExitInheritanceSpecifier is called when production inheritanceSpecifier is exited. +func (s *BaseSolidityListener) ExitInheritanceSpecifier(ctx *InheritanceSpecifierContext) {} + +// EnterContractPart is called when production contractPart is entered. +func (s *BaseSolidityListener) EnterContractPart(ctx *ContractPartContext) {} + +// ExitContractPart is called when production contractPart is exited. +func (s *BaseSolidityListener) ExitContractPart(ctx *ContractPartContext) {} + +// EnterStateVariableDeclaration is called when production stateVariableDeclaration is entered. +func (s *BaseSolidityListener) EnterStateVariableDeclaration(ctx *StateVariableDeclarationContext) {} + +// ExitStateVariableDeclaration is called when production stateVariableDeclaration is exited. +func (s *BaseSolidityListener) ExitStateVariableDeclaration(ctx *StateVariableDeclarationContext) {} + +// EnterOverrideSpecifier is called when production overrideSpecifier is entered. +func (s *BaseSolidityListener) EnterOverrideSpecifier(ctx *OverrideSpecifierContext) {} + +// ExitOverrideSpecifier is called when production overrideSpecifier is exited. +func (s *BaseSolidityListener) ExitOverrideSpecifier(ctx *OverrideSpecifierContext) {} + +// EnterUsingForDeclaration is called when production usingForDeclaration is entered. +func (s *BaseSolidityListener) EnterUsingForDeclaration(ctx *UsingForDeclarationContext) {} + +// ExitUsingForDeclaration is called when production usingForDeclaration is exited. +func (s *BaseSolidityListener) ExitUsingForDeclaration(ctx *UsingForDeclarationContext) {} + +// EnterStructDefinition is called when production structDefinition is entered. +func (s *BaseSolidityListener) EnterStructDefinition(ctx *StructDefinitionContext) {} + +// ExitStructDefinition is called when production structDefinition is exited. +func (s *BaseSolidityListener) ExitStructDefinition(ctx *StructDefinitionContext) {} + +// EnterModifierDefinition is called when production modifierDefinition is entered. +func (s *BaseSolidityListener) EnterModifierDefinition(ctx *ModifierDefinitionContext) {} + +// ExitModifierDefinition is called when production modifierDefinition is exited. +func (s *BaseSolidityListener) ExitModifierDefinition(ctx *ModifierDefinitionContext) {} + +// EnterFunctionDefinition is called when production functionDefinition is entered. +func (s *BaseSolidityListener) EnterFunctionDefinition(ctx *FunctionDefinitionContext) {} + +// ExitFunctionDefinition is called when production functionDefinition is exited. +func (s *BaseSolidityListener) ExitFunctionDefinition(ctx *FunctionDefinitionContext) {} + +// EnterFunctionDescriptor is called when production functionDescriptor is entered. +func (s *BaseSolidityListener) EnterFunctionDescriptor(ctx *FunctionDescriptorContext) {} + +// ExitFunctionDescriptor is called when production functionDescriptor is exited. +func (s *BaseSolidityListener) ExitFunctionDescriptor(ctx *FunctionDescriptorContext) {} + +// EnterReturnParameters is called when production returnParameters is entered. +func (s *BaseSolidityListener) EnterReturnParameters(ctx *ReturnParametersContext) {} + +// ExitReturnParameters is called when production returnParameters is exited. +func (s *BaseSolidityListener) ExitReturnParameters(ctx *ReturnParametersContext) {} + +// EnterModifierList is called when production modifierList is entered. +func (s *BaseSolidityListener) EnterModifierList(ctx *ModifierListContext) {} + +// ExitModifierList is called when production modifierList is exited. +func (s *BaseSolidityListener) ExitModifierList(ctx *ModifierListContext) {} + +// EnterModifierInvocation is called when production modifierInvocation is entered. +func (s *BaseSolidityListener) EnterModifierInvocation(ctx *ModifierInvocationContext) {} + +// ExitModifierInvocation is called when production modifierInvocation is exited. +func (s *BaseSolidityListener) ExitModifierInvocation(ctx *ModifierInvocationContext) {} + +// EnterEventDefinition is called when production eventDefinition is entered. +func (s *BaseSolidityListener) EnterEventDefinition(ctx *EventDefinitionContext) {} + +// ExitEventDefinition is called when production eventDefinition is exited. +func (s *BaseSolidityListener) ExitEventDefinition(ctx *EventDefinitionContext) {} + +// EnterEnumDefinition is called when production enumDefinition is entered. +func (s *BaseSolidityListener) EnterEnumDefinition(ctx *EnumDefinitionContext) {} + +// ExitEnumDefinition is called when production enumDefinition is exited. +func (s *BaseSolidityListener) ExitEnumDefinition(ctx *EnumDefinitionContext) {} + +// EnterEnumValue is called when production enumValue is entered. +func (s *BaseSolidityListener) EnterEnumValue(ctx *EnumValueContext) {} + +// ExitEnumValue is called when production enumValue is exited. +func (s *BaseSolidityListener) ExitEnumValue(ctx *EnumValueContext) {} + +// EnterParameterList is called when production parameterList is entered. +func (s *BaseSolidityListener) EnterParameterList(ctx *ParameterListContext) {} + +// ExitParameterList is called when production parameterList is exited. +func (s *BaseSolidityListener) ExitParameterList(ctx *ParameterListContext) {} + +// EnterParameter is called when production parameter is entered. +func (s *BaseSolidityListener) EnterParameter(ctx *ParameterContext) {} + +// ExitParameter is called when production parameter is exited. +func (s *BaseSolidityListener) ExitParameter(ctx *ParameterContext) {} + +// EnterEventParameterList is called when production eventParameterList is entered. +func (s *BaseSolidityListener) EnterEventParameterList(ctx *EventParameterListContext) {} + +// ExitEventParameterList is called when production eventParameterList is exited. +func (s *BaseSolidityListener) ExitEventParameterList(ctx *EventParameterListContext) {} + +// EnterEventParameter is called when production eventParameter is entered. +func (s *BaseSolidityListener) EnterEventParameter(ctx *EventParameterContext) {} + +// ExitEventParameter is called when production eventParameter is exited. +func (s *BaseSolidityListener) ExitEventParameter(ctx *EventParameterContext) {} + +// EnterVariableDeclaration is called when production variableDeclaration is entered. +func (s *BaseSolidityListener) EnterVariableDeclaration(ctx *VariableDeclarationContext) {} + +// ExitVariableDeclaration is called when production variableDeclaration is exited. +func (s *BaseSolidityListener) ExitVariableDeclaration(ctx *VariableDeclarationContext) {} + +// EnterTypeName is called when production typeName is entered. +func (s *BaseSolidityListener) EnterTypeName(ctx *TypeNameContext) {} + +// ExitTypeName is called when production typeName is exited. +func (s *BaseSolidityListener) ExitTypeName(ctx *TypeNameContext) {} + +// EnterUserDefinedTypeName is called when production userDefinedTypeName is entered. +func (s *BaseSolidityListener) EnterUserDefinedTypeName(ctx *UserDefinedTypeNameContext) {} + +// ExitUserDefinedTypeName is called when production userDefinedTypeName is exited. +func (s *BaseSolidityListener) ExitUserDefinedTypeName(ctx *UserDefinedTypeNameContext) {} + +// EnterMapping is called when production mapping is entered. +func (s *BaseSolidityListener) EnterMapping(ctx *MappingContext) {} + +// ExitMapping is called when production mapping is exited. +func (s *BaseSolidityListener) ExitMapping(ctx *MappingContext) {} + +// EnterFunctionTypeName is called when production functionTypeName is entered. +func (s *BaseSolidityListener) EnterFunctionTypeName(ctx *FunctionTypeNameContext) {} + +// ExitFunctionTypeName is called when production functionTypeName is exited. +func (s *BaseSolidityListener) ExitFunctionTypeName(ctx *FunctionTypeNameContext) {} + +// EnterStorageLocation is called when production storageLocation is entered. +func (s *BaseSolidityListener) EnterStorageLocation(ctx *StorageLocationContext) {} + +// ExitStorageLocation is called when production storageLocation is exited. +func (s *BaseSolidityListener) ExitStorageLocation(ctx *StorageLocationContext) {} + +// EnterStateMutability is called when production stateMutability is entered. +func (s *BaseSolidityListener) EnterStateMutability(ctx *StateMutabilityContext) {} + +// ExitStateMutability is called when production stateMutability is exited. +func (s *BaseSolidityListener) ExitStateMutability(ctx *StateMutabilityContext) {} + +// EnterBlock is called when production block is entered. +func (s *BaseSolidityListener) EnterBlock(ctx *BlockContext) {} + +// ExitBlock is called when production block is exited. +func (s *BaseSolidityListener) ExitBlock(ctx *BlockContext) {} + +// EnterStatement is called when production statement is entered. +func (s *BaseSolidityListener) EnterStatement(ctx *StatementContext) {} + +// ExitStatement is called when production statement is exited. +func (s *BaseSolidityListener) ExitStatement(ctx *StatementContext) {} + +// EnterExpressionStatement is called when production expressionStatement is entered. +func (s *BaseSolidityListener) EnterExpressionStatement(ctx *ExpressionStatementContext) {} + +// ExitExpressionStatement is called when production expressionStatement is exited. +func (s *BaseSolidityListener) ExitExpressionStatement(ctx *ExpressionStatementContext) {} + +// EnterIfStatement is called when production ifStatement is entered. +func (s *BaseSolidityListener) EnterIfStatement(ctx *IfStatementContext) {} + +// ExitIfStatement is called when production ifStatement is exited. +func (s *BaseSolidityListener) ExitIfStatement(ctx *IfStatementContext) {} + +// EnterTryStatement is called when production tryStatement is entered. +func (s *BaseSolidityListener) EnterTryStatement(ctx *TryStatementContext) {} + +// ExitTryStatement is called when production tryStatement is exited. +func (s *BaseSolidityListener) ExitTryStatement(ctx *TryStatementContext) {} + +// EnterCatchClause is called when production catchClause is entered. +func (s *BaseSolidityListener) EnterCatchClause(ctx *CatchClauseContext) {} + +// ExitCatchClause is called when production catchClause is exited. +func (s *BaseSolidityListener) ExitCatchClause(ctx *CatchClauseContext) {} + +// EnterWhileStatement is called when production whileStatement is entered. +func (s *BaseSolidityListener) EnterWhileStatement(ctx *WhileStatementContext) {} + +// ExitWhileStatement is called when production whileStatement is exited. +func (s *BaseSolidityListener) ExitWhileStatement(ctx *WhileStatementContext) {} + +// EnterForStatement is called when production forStatement is entered. +func (s *BaseSolidityListener) EnterForStatement(ctx *ForStatementContext) {} + +// ExitForStatement is called when production forStatement is exited. +func (s *BaseSolidityListener) ExitForStatement(ctx *ForStatementContext) {} + +// EnterSimpleStatement is called when production simpleStatement is entered. +func (s *BaseSolidityListener) EnterSimpleStatement(ctx *SimpleStatementContext) {} + +// ExitSimpleStatement is called when production simpleStatement is exited. +func (s *BaseSolidityListener) ExitSimpleStatement(ctx *SimpleStatementContext) {} + +// EnterInlineAssemblyStatement is called when production inlineAssemblyStatement is entered. +func (s *BaseSolidityListener) EnterInlineAssemblyStatement(ctx *InlineAssemblyStatementContext) {} + +// ExitInlineAssemblyStatement is called when production inlineAssemblyStatement is exited. +func (s *BaseSolidityListener) ExitInlineAssemblyStatement(ctx *InlineAssemblyStatementContext) {} + +// EnterDoWhileStatement is called when production doWhileStatement is entered. +func (s *BaseSolidityListener) EnterDoWhileStatement(ctx *DoWhileStatementContext) {} + +// ExitDoWhileStatement is called when production doWhileStatement is exited. +func (s *BaseSolidityListener) ExitDoWhileStatement(ctx *DoWhileStatementContext) {} + +// EnterContinueStatement is called when production continueStatement is entered. +func (s *BaseSolidityListener) EnterContinueStatement(ctx *ContinueStatementContext) {} + +// ExitContinueStatement is called when production continueStatement is exited. +func (s *BaseSolidityListener) ExitContinueStatement(ctx *ContinueStatementContext) {} + +// EnterBreakStatement is called when production breakStatement is entered. +func (s *BaseSolidityListener) EnterBreakStatement(ctx *BreakStatementContext) {} + +// ExitBreakStatement is called when production breakStatement is exited. +func (s *BaseSolidityListener) ExitBreakStatement(ctx *BreakStatementContext) {} + +// EnterReturnStatement is called when production returnStatement is entered. +func (s *BaseSolidityListener) EnterReturnStatement(ctx *ReturnStatementContext) {} + +// ExitReturnStatement is called when production returnStatement is exited. +func (s *BaseSolidityListener) ExitReturnStatement(ctx *ReturnStatementContext) {} + +// EnterThrowStatement is called when production throwStatement is entered. +func (s *BaseSolidityListener) EnterThrowStatement(ctx *ThrowStatementContext) {} + +// ExitThrowStatement is called when production throwStatement is exited. +func (s *BaseSolidityListener) ExitThrowStatement(ctx *ThrowStatementContext) {} + +// EnterEmitStatement is called when production emitStatement is entered. +func (s *BaseSolidityListener) EnterEmitStatement(ctx *EmitStatementContext) {} + +// ExitEmitStatement is called when production emitStatement is exited. +func (s *BaseSolidityListener) ExitEmitStatement(ctx *EmitStatementContext) {} + +// EnterVariableDeclarationStatement is called when production variableDeclarationStatement is entered. +func (s *BaseSolidityListener) EnterVariableDeclarationStatement(ctx *VariableDeclarationStatementContext) {} + +// ExitVariableDeclarationStatement is called when production variableDeclarationStatement is exited. +func (s *BaseSolidityListener) ExitVariableDeclarationStatement(ctx *VariableDeclarationStatementContext) {} + +// EnterVariableDeclarationList is called when production variableDeclarationList is entered. +func (s *BaseSolidityListener) EnterVariableDeclarationList(ctx *VariableDeclarationListContext) {} + +// ExitVariableDeclarationList is called when production variableDeclarationList is exited. +func (s *BaseSolidityListener) ExitVariableDeclarationList(ctx *VariableDeclarationListContext) {} + +// EnterIdentifierList is called when production identifierList is entered. +func (s *BaseSolidityListener) EnterIdentifierList(ctx *IdentifierListContext) {} + +// ExitIdentifierList is called when production identifierList is exited. +func (s *BaseSolidityListener) ExitIdentifierList(ctx *IdentifierListContext) {} + +// EnterElementaryTypeName is called when production elementaryTypeName is entered. +func (s *BaseSolidityListener) EnterElementaryTypeName(ctx *ElementaryTypeNameContext) {} + +// ExitElementaryTypeName is called when production elementaryTypeName is exited. +func (s *BaseSolidityListener) ExitElementaryTypeName(ctx *ElementaryTypeNameContext) {} + +// EnterExpression is called when production expression is entered. +func (s *BaseSolidityListener) EnterExpression(ctx *ExpressionContext) {} + +// ExitExpression is called when production expression is exited. +func (s *BaseSolidityListener) ExitExpression(ctx *ExpressionContext) {} + +// EnterPrimaryExpression is called when production primaryExpression is entered. +func (s *BaseSolidityListener) EnterPrimaryExpression(ctx *PrimaryExpressionContext) {} + +// ExitPrimaryExpression is called when production primaryExpression is exited. +func (s *BaseSolidityListener) ExitPrimaryExpression(ctx *PrimaryExpressionContext) {} + +// EnterExpressionList is called when production expressionList is entered. +func (s *BaseSolidityListener) EnterExpressionList(ctx *ExpressionListContext) {} + +// ExitExpressionList is called when production expressionList is exited. +func (s *BaseSolidityListener) ExitExpressionList(ctx *ExpressionListContext) {} + +// EnterNameValueList is called when production nameValueList is entered. +func (s *BaseSolidityListener) EnterNameValueList(ctx *NameValueListContext) {} + +// ExitNameValueList is called when production nameValueList is exited. +func (s *BaseSolidityListener) ExitNameValueList(ctx *NameValueListContext) {} + +// EnterNameValue is called when production nameValue is entered. +func (s *BaseSolidityListener) EnterNameValue(ctx *NameValueContext) {} + +// ExitNameValue is called when production nameValue is exited. +func (s *BaseSolidityListener) ExitNameValue(ctx *NameValueContext) {} + +// EnterFunctionCallArguments is called when production functionCallArguments is entered. +func (s *BaseSolidityListener) EnterFunctionCallArguments(ctx *FunctionCallArgumentsContext) {} + +// ExitFunctionCallArguments is called when production functionCallArguments is exited. +func (s *BaseSolidityListener) ExitFunctionCallArguments(ctx *FunctionCallArgumentsContext) {} + +// EnterFunctionCall is called when production functionCall is entered. +func (s *BaseSolidityListener) EnterFunctionCall(ctx *FunctionCallContext) {} + +// ExitFunctionCall is called when production functionCall is exited. +func (s *BaseSolidityListener) ExitFunctionCall(ctx *FunctionCallContext) {} + +// EnterTupleExpression is called when production tupleExpression is entered. +func (s *BaseSolidityListener) EnterTupleExpression(ctx *TupleExpressionContext) {} + +// ExitTupleExpression is called when production tupleExpression is exited. +func (s *BaseSolidityListener) ExitTupleExpression(ctx *TupleExpressionContext) {} + +// EnterTypeNameExpression is called when production typeNameExpression is entered. +func (s *BaseSolidityListener) EnterTypeNameExpression(ctx *TypeNameExpressionContext) {} + +// ExitTypeNameExpression is called when production typeNameExpression is exited. +func (s *BaseSolidityListener) ExitTypeNameExpression(ctx *TypeNameExpressionContext) {} + +// EnterAssemblyItem is called when production assemblyItem is entered. +func (s *BaseSolidityListener) EnterAssemblyItem(ctx *AssemblyItemContext) {} + +// ExitAssemblyItem is called when production assemblyItem is exited. +func (s *BaseSolidityListener) ExitAssemblyItem(ctx *AssemblyItemContext) {} + +// EnterAssemblyBlock is called when production assemblyBlock is entered. +func (s *BaseSolidityListener) EnterAssemblyBlock(ctx *AssemblyBlockContext) {} + +// ExitAssemblyBlock is called when production assemblyBlock is exited. +func (s *BaseSolidityListener) ExitAssemblyBlock(ctx *AssemblyBlockContext) {} + +// EnterAssemblyExpression is called when production assemblyExpression is entered. +func (s *BaseSolidityListener) EnterAssemblyExpression(ctx *AssemblyExpressionContext) {} + +// ExitAssemblyExpression is called when production assemblyExpression is exited. +func (s *BaseSolidityListener) ExitAssemblyExpression(ctx *AssemblyExpressionContext) {} + +// EnterAssemblyCall is called when production assemblyCall is entered. +func (s *BaseSolidityListener) EnterAssemblyCall(ctx *AssemblyCallContext) {} + +// ExitAssemblyCall is called when production assemblyCall is exited. +func (s *BaseSolidityListener) ExitAssemblyCall(ctx *AssemblyCallContext) {} + +// EnterAssemblyLocalDefinition is called when production assemblyLocalDefinition is entered. +func (s *BaseSolidityListener) EnterAssemblyLocalDefinition(ctx *AssemblyLocalDefinitionContext) {} + +// ExitAssemblyLocalDefinition is called when production assemblyLocalDefinition is exited. +func (s *BaseSolidityListener) ExitAssemblyLocalDefinition(ctx *AssemblyLocalDefinitionContext) {} + +// EnterAssemblyAssignment is called when production assemblyAssignment is entered. +func (s *BaseSolidityListener) EnterAssemblyAssignment(ctx *AssemblyAssignmentContext) {} + +// ExitAssemblyAssignment is called when production assemblyAssignment is exited. +func (s *BaseSolidityListener) ExitAssemblyAssignment(ctx *AssemblyAssignmentContext) {} + +// EnterAssemblyIdentifierList is called when production assemblyIdentifierList is entered. +func (s *BaseSolidityListener) EnterAssemblyIdentifierList(ctx *AssemblyIdentifierListContext) {} + +// ExitAssemblyIdentifierList is called when production assemblyIdentifierList is exited. +func (s *BaseSolidityListener) ExitAssemblyIdentifierList(ctx *AssemblyIdentifierListContext) {} + +// EnterAssemblyStackAssignment is called when production assemblyStackAssignment is entered. +func (s *BaseSolidityListener) EnterAssemblyStackAssignment(ctx *AssemblyStackAssignmentContext) {} + +// ExitAssemblyStackAssignment is called when production assemblyStackAssignment is exited. +func (s *BaseSolidityListener) ExitAssemblyStackAssignment(ctx *AssemblyStackAssignmentContext) {} + +// EnterLabelDefinition is called when production labelDefinition is entered. +func (s *BaseSolidityListener) EnterLabelDefinition(ctx *LabelDefinitionContext) {} + +// ExitLabelDefinition is called when production labelDefinition is exited. +func (s *BaseSolidityListener) ExitLabelDefinition(ctx *LabelDefinitionContext) {} + +// EnterAssemblySwitch is called when production assemblySwitch is entered. +func (s *BaseSolidityListener) EnterAssemblySwitch(ctx *AssemblySwitchContext) {} + +// ExitAssemblySwitch is called when production assemblySwitch is exited. +func (s *BaseSolidityListener) ExitAssemblySwitch(ctx *AssemblySwitchContext) {} + +// EnterAssemblyCase is called when production assemblyCase is entered. +func (s *BaseSolidityListener) EnterAssemblyCase(ctx *AssemblyCaseContext) {} + +// ExitAssemblyCase is called when production assemblyCase is exited. +func (s *BaseSolidityListener) ExitAssemblyCase(ctx *AssemblyCaseContext) {} + +// EnterAssemblyFunctionDefinition is called when production assemblyFunctionDefinition is entered. +func (s *BaseSolidityListener) EnterAssemblyFunctionDefinition(ctx *AssemblyFunctionDefinitionContext) {} + +// ExitAssemblyFunctionDefinition is called when production assemblyFunctionDefinition is exited. +func (s *BaseSolidityListener) ExitAssemblyFunctionDefinition(ctx *AssemblyFunctionDefinitionContext) {} + +// EnterAssemblyFunctionReturns is called when production assemblyFunctionReturns is entered. +func (s *BaseSolidityListener) EnterAssemblyFunctionReturns(ctx *AssemblyFunctionReturnsContext) {} + +// ExitAssemblyFunctionReturns is called when production assemblyFunctionReturns is exited. +func (s *BaseSolidityListener) ExitAssemblyFunctionReturns(ctx *AssemblyFunctionReturnsContext) {} + +// EnterAssemblyFor is called when production assemblyFor is entered. +func (s *BaseSolidityListener) EnterAssemblyFor(ctx *AssemblyForContext) {} + +// ExitAssemblyFor is called when production assemblyFor is exited. +func (s *BaseSolidityListener) ExitAssemblyFor(ctx *AssemblyForContext) {} + +// EnterAssemblyIf is called when production assemblyIf is entered. +func (s *BaseSolidityListener) EnterAssemblyIf(ctx *AssemblyIfContext) {} + +// ExitAssemblyIf is called when production assemblyIf is exited. +func (s *BaseSolidityListener) ExitAssemblyIf(ctx *AssemblyIfContext) {} + +// EnterAssemblyLiteral is called when production assemblyLiteral is entered. +func (s *BaseSolidityListener) EnterAssemblyLiteral(ctx *AssemblyLiteralContext) {} + +// ExitAssemblyLiteral is called when production assemblyLiteral is exited. +func (s *BaseSolidityListener) ExitAssemblyLiteral(ctx *AssemblyLiteralContext) {} + +// EnterAssemblyTypedVariableList is called when production assemblyTypedVariableList is entered. +func (s *BaseSolidityListener) EnterAssemblyTypedVariableList(ctx *AssemblyTypedVariableListContext) {} + +// ExitAssemblyTypedVariableList is called when production assemblyTypedVariableList is exited. +func (s *BaseSolidityListener) ExitAssemblyTypedVariableList(ctx *AssemblyTypedVariableListContext) {} + +// EnterAssemblyType is called when production assemblyType is entered. +func (s *BaseSolidityListener) EnterAssemblyType(ctx *AssemblyTypeContext) {} + +// ExitAssemblyType is called when production assemblyType is exited. +func (s *BaseSolidityListener) ExitAssemblyType(ctx *AssemblyTypeContext) {} + +// EnterSubAssembly is called when production subAssembly is entered. +func (s *BaseSolidityListener) EnterSubAssembly(ctx *SubAssemblyContext) {} + +// ExitSubAssembly is called when production subAssembly is exited. +func (s *BaseSolidityListener) ExitSubAssembly(ctx *SubAssemblyContext) {} + +// EnterNumberLiteral is called when production numberLiteral is entered. +func (s *BaseSolidityListener) EnterNumberLiteral(ctx *NumberLiteralContext) {} + +// ExitNumberLiteral is called when production numberLiteral is exited. +func (s *BaseSolidityListener) ExitNumberLiteral(ctx *NumberLiteralContext) {} + +// EnterIdentifier is called when production identifier is entered. +func (s *BaseSolidityListener) EnterIdentifier(ctx *IdentifierContext) {} + +// ExitIdentifier is called when production identifier is exited. +func (s *BaseSolidityListener) ExitIdentifier(ctx *IdentifierContext) {} + +// EnterHexLiteral is called when production hexLiteral is entered. +func (s *BaseSolidityListener) EnterHexLiteral(ctx *HexLiteralContext) {} + +// ExitHexLiteral is called when production hexLiteral is exited. +func (s *BaseSolidityListener) ExitHexLiteral(ctx *HexLiteralContext) {} + +// EnterStringLiteral is called when production stringLiteral is entered. +func (s *BaseSolidityListener) EnterStringLiteral(ctx *StringLiteralContext) {} + +// ExitStringLiteral is called when production stringLiteral is exited. +func (s *BaseSolidityListener) ExitStringLiteral(ctx *StringLiteralContext) {} diff --git a/parser/solidity_lexer.go b/parser/solidity_lexer.go new file mode 100644 index 0000000..4523898 --- /dev/null +++ b/parser/solidity_lexer.go @@ -0,0 +1,1113 @@ +// Code generated from ./parser/Solidity.g4 by ANTLR 4.10.1. DO NOT EDIT. + +package parser + +import ( + "fmt" + "sync" + "unicode" + + "github.com/antlr/antlr4/runtime/Go/antlr" +) +// Suppress unused import error +var _ = fmt.Printf +var _ = sync.Once{} +var _ = unicode.IsLetter + + +type SolidityLexer struct { + *antlr.BaseLexer + channelNames []string + modeNames []string + // TODO: EOF string +} + +var soliditylexerLexerStaticData struct { + once sync.Once + serializedATN []int32 + channelNames []string + modeNames []string + literalNames []string + symbolicNames []string + ruleNames []string + predictionContextCache *antlr.PredictionContextCache + atn *antlr.ATN + decisionToDFA []*antlr.DFA +} + +func soliditylexerLexerInit() { + staticData := &soliditylexerLexerStaticData + staticData.channelNames = []string{ + "DEFAULT_TOKEN_CHANNEL", "HIDDEN", + } + staticData.modeNames = []string{ + "DEFAULT_MODE", + } + staticData.literalNames = []string{ + "", "'pragma'", "';'", "'^'", "'~'", "'>='", "'>'", "'<'", "'<='", "'='", + "'import'", "'as'", "'*'", "'from'", "'{'", "','", "'}'", "'abstract'", + "'contract'", "'interface'", "'library'", "'is'", "'('", "')'", "'override'", + "'using'", "'for'", "'struct'", "'modifier'", "'function'", "'returns'", + "'event'", "'enum'", "'['", "']'", "'.'", "'mapping'", "'=>'", "'memory'", + "'storage'", "'calldata'", "'if'", "'else'", "'try'", "'catch'", "'while'", + "'assembly'", "'do'", "'return'", "'throw'", "'emit'", "'var'", "'address'", + "'bool'", "'string'", "'byte'", "'++'", "'--'", "'new'", "':'", "'+'", + "'-'", "'after'", "'delete'", "'!'", "'**'", "'/'", "'%'", "'<<'", "'>>'", + "'&'", "'|'", "'=='", "'!='", "'&&'", "'||'", "'?'", "'|='", "'^='", + "'&='", "'<<='", "'>>='", "'+='", "'-='", "'*='", "'/='", "'%='", "'let'", + "':='", "'=:'", "'switch'", "'case'", "'default'", "", "", "", "", "", + "", "", "", "", "", "", "'anonymous'", "'break'", "'constant'", "'immutable'", + "'continue'", "'leave'", "'external'", "'indexed'", "'internal'", "'payable'", + "'private'", "'public'", "'virtual'", "'pure'", "'type'", "'view'", + "'constructor'", "'fallback'", "'receive'", + } + staticData.symbolicNames = []string{ + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "Int", "Uint", "Byte", "Fixed", "Ufixed", + "BooleanLiteral", "DecimalNumber", "HexNumber", "NumberUnit", "HexLiteralFragment", + "ReservedKeyword", "AnonymousKeyword", "BreakKeyword", "ConstantKeyword", + "ImmutableKeyword", "ContinueKeyword", "LeaveKeyword", "ExternalKeyword", + "IndexedKeyword", "InternalKeyword", "PayableKeyword", "PrivateKeyword", + "PublicKeyword", "VirtualKeyword", "PureKeyword", "TypeKeyword", "ViewKeyword", + "ConstructorKeyword", "FallbackKeyword", "ReceiveKeyword", "Identifier", + "StringLiteralFragment", "VersionLiteral", "WS", "COMMENT", "LINE_COMMENT", + } + staticData.ruleNames = []string{ + "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", + "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", + "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", + "T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32", + "T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40", + "T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48", + "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56", + "T__57", "T__58", "T__59", "T__60", "T__61", "T__62", "T__63", "T__64", + "T__65", "T__66", "T__67", "T__68", "T__69", "T__70", "T__71", "T__72", + "T__73", "T__74", "T__75", "T__76", "T__77", "T__78", "T__79", "T__80", + "T__81", "T__82", "T__83", "T__84", "T__85", "T__86", "T__87", "T__88", + "T__89", "T__90", "T__91", "Int", "Uint", "Byte", "Fixed", "Ufixed", + "BooleanLiteral", "DecimalNumber", "DecimalDigits", "HexNumber", "HexDigits", + "NumberUnit", "HexLiteralFragment", "HexPair", "HexCharacter", "ReservedKeyword", + "AnonymousKeyword", "BreakKeyword", "ConstantKeyword", "ImmutableKeyword", + "ContinueKeyword", "LeaveKeyword", "ExternalKeyword", "IndexedKeyword", + "InternalKeyword", "PayableKeyword", "PrivateKeyword", "PublicKeyword", + "VirtualKeyword", "PureKeyword", "TypeKeyword", "ViewKeyword", "ConstructorKeyword", + "FallbackKeyword", "ReceiveKeyword", "Identifier", "IdentifierStart", + "IdentifierPart", "StringLiteralFragment", "DoubleQuotedStringCharacter", + "SingleQuotedStringCharacter", "VersionLiteral", "WS", "COMMENT", "LINE_COMMENT", + } + staticData.predictionContextCache = antlr.NewPredictionContextCache() + staticData.serializedATN = []int32{ + 4, 0, 128, 1788, 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, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, + 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, + 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, + 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, + 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, + 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, + 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, + 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, + 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, + 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, + 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, + 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, + 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, + 1, 29, 1, 29, 1, 29, 1, 29, 1, 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, 33, 1, 33, 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, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, + 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, + 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, + 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, + 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, + 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, + 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, + 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 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, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, + 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, + 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 1, 60, 1, 61, 1, 61, 1, + 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, + 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 66, 1, 66, 1, 67, 1, + 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 70, 1, 70, 1, 71, 1, 71, + 1, 71, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, + 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, + 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, + 81, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 85, + 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 88, 1, + 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, + 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, + 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, + 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, + 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, + 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, + 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, + 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, + 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, + 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, + 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, + 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, + 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, + 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, + 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, + 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, + 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, + 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, + 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, + 1, 92, 1, 92, 1, 92, 1, 92, 3, 92, 858, 8, 92, 1, 93, 1, 93, 1, 93, 1, + 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, + 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, + 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, + 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, + 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, + 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, + 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, + 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, + 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, + 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, + 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, + 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, + 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, + 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, + 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, + 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, + 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, + 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, + 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, + 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, + 93, 1, 93, 3, 93, 1075, 8, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, + 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, + 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, + 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, + 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, + 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, + 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, + 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, + 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, + 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, + 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, + 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, + 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, + 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, + 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, + 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, + 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, + 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, + 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, + 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, + 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, + 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1297, 8, 94, 1, 95, 1, 95, 1, 95, 1, + 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 4, 95, 1311, + 8, 95, 11, 95, 12, 95, 1312, 1, 95, 1, 95, 4, 95, 1317, 8, 95, 11, 95, + 12, 95, 1318, 3, 95, 1321, 8, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, + 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 4, 96, 1337, + 8, 96, 11, 96, 12, 96, 1338, 1, 96, 1, 96, 4, 96, 1343, 8, 96, 11, 96, + 12, 96, 1344, 3, 96, 1347, 8, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, + 97, 1, 97, 1, 97, 1, 97, 3, 97, 1358, 8, 97, 1, 98, 1, 98, 3, 98, 1362, + 8, 98, 1, 98, 1, 98, 3, 98, 1366, 8, 98, 1, 98, 1, 98, 3, 98, 1370, 8, + 98, 1, 98, 3, 98, 1373, 8, 98, 1, 99, 1, 99, 3, 99, 1377, 8, 99, 1, 99, + 5, 99, 1380, 8, 99, 10, 99, 12, 99, 1383, 9, 99, 1, 100, 1, 100, 1, 100, + 1, 100, 1, 101, 1, 101, 3, 101, 1391, 8, 101, 1, 101, 5, 101, 1394, 8, + 101, 10, 101, 12, 101, 1397, 9, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, + 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, + 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, + 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, + 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, + 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, + 102, 1, 102, 1, 102, 3, 102, 1451, 8, 102, 1, 103, 1, 103, 1, 103, 1, 103, + 1, 103, 1, 103, 3, 103, 1459, 8, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1464, + 8, 103, 1, 103, 3, 103, 1467, 8, 103, 1, 104, 1, 104, 1, 104, 1, 105, 1, + 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, + 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, + 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, + 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, + 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, + 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, + 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, + 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, + 106, 3, 106, 1546, 8, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, + 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, + 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, + 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, + 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, + 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, + 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, + 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, + 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, + 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, + 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, + 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, + 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, + 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, + 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, + 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, + 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, + 1, 125, 1, 126, 1, 126, 5, 126, 1701, 8, 126, 10, 126, 12, 126, 1704, 9, + 126, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 5, 129, 1712, 8, 129, + 10, 129, 12, 129, 1715, 9, 129, 1, 129, 1, 129, 1, 129, 5, 129, 1720, 8, + 129, 10, 129, 12, 129, 1723, 9, 129, 1, 129, 3, 129, 1726, 8, 129, 1, 130, + 1, 130, 1, 130, 3, 130, 1731, 8, 130, 1, 131, 1, 131, 1, 131, 3, 131, 1736, + 8, 131, 1, 132, 4, 132, 1739, 8, 132, 11, 132, 12, 132, 1740, 1, 132, 1, + 132, 4, 132, 1745, 8, 132, 11, 132, 12, 132, 1746, 1, 132, 1, 132, 4, 132, + 1751, 8, 132, 11, 132, 12, 132, 1752, 3, 132, 1755, 8, 132, 1, 133, 4, + 133, 1758, 8, 133, 11, 133, 12, 133, 1759, 1, 133, 1, 133, 1, 134, 1, 134, + 1, 134, 1, 134, 5, 134, 1768, 8, 134, 10, 134, 12, 134, 1771, 9, 134, 1, + 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 5, + 135, 1782, 8, 135, 10, 135, 12, 135, 1785, 9, 135, 1, 135, 1, 135, 1, 1769, + 0, 136, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, + 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, + 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, + 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, + 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, + 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, + 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, + 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, + 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, + 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, + 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, + 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 0, 201, 100, 203, 0, 205, + 101, 207, 102, 209, 0, 211, 0, 213, 103, 215, 104, 217, 105, 219, 106, + 221, 107, 223, 108, 225, 109, 227, 110, 229, 111, 231, 112, 233, 113, 235, + 114, 237, 115, 239, 116, 241, 117, 243, 118, 245, 119, 247, 120, 249, 121, + 251, 122, 253, 123, 255, 0, 257, 0, 259, 124, 261, 0, 263, 0, 265, 125, + 267, 126, 269, 127, 271, 128, 1, 0, 10, 1, 0, 48, 57, 2, 0, 69, 69, 101, + 101, 2, 0, 88, 88, 120, 120, 3, 0, 48, 57, 65, 70, 97, 102, 4, 0, 36, 36, + 65, 90, 95, 95, 97, 122, 5, 0, 36, 36, 48, 57, 65, 90, 95, 95, 97, 122, + 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, + 92, 3, 0, 9, 10, 12, 13, 32, 32, 2, 0, 10, 10, 13, 13, 1928, 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, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, + 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, + 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, + 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, + 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, + 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, + 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, + 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, + 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, + 0, 207, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, + 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, + 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, + 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, + 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, + 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, + 0, 0, 0, 0, 259, 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, 1, 273, 1, 0, 0, 0, 3, 280, 1, 0, + 0, 0, 5, 282, 1, 0, 0, 0, 7, 284, 1, 0, 0, 0, 9, 286, 1, 0, 0, 0, 11, 289, + 1, 0, 0, 0, 13, 291, 1, 0, 0, 0, 15, 293, 1, 0, 0, 0, 17, 296, 1, 0, 0, + 0, 19, 298, 1, 0, 0, 0, 21, 305, 1, 0, 0, 0, 23, 308, 1, 0, 0, 0, 25, 310, + 1, 0, 0, 0, 27, 315, 1, 0, 0, 0, 29, 317, 1, 0, 0, 0, 31, 319, 1, 0, 0, + 0, 33, 321, 1, 0, 0, 0, 35, 330, 1, 0, 0, 0, 37, 339, 1, 0, 0, 0, 39, 349, + 1, 0, 0, 0, 41, 357, 1, 0, 0, 0, 43, 360, 1, 0, 0, 0, 45, 362, 1, 0, 0, + 0, 47, 364, 1, 0, 0, 0, 49, 373, 1, 0, 0, 0, 51, 379, 1, 0, 0, 0, 53, 383, + 1, 0, 0, 0, 55, 390, 1, 0, 0, 0, 57, 399, 1, 0, 0, 0, 59, 408, 1, 0, 0, + 0, 61, 416, 1, 0, 0, 0, 63, 422, 1, 0, 0, 0, 65, 427, 1, 0, 0, 0, 67, 429, + 1, 0, 0, 0, 69, 431, 1, 0, 0, 0, 71, 433, 1, 0, 0, 0, 73, 441, 1, 0, 0, + 0, 75, 444, 1, 0, 0, 0, 77, 451, 1, 0, 0, 0, 79, 459, 1, 0, 0, 0, 81, 468, + 1, 0, 0, 0, 83, 471, 1, 0, 0, 0, 85, 476, 1, 0, 0, 0, 87, 480, 1, 0, 0, + 0, 89, 486, 1, 0, 0, 0, 91, 492, 1, 0, 0, 0, 93, 501, 1, 0, 0, 0, 95, 504, + 1, 0, 0, 0, 97, 511, 1, 0, 0, 0, 99, 517, 1, 0, 0, 0, 101, 522, 1, 0, 0, + 0, 103, 526, 1, 0, 0, 0, 105, 534, 1, 0, 0, 0, 107, 539, 1, 0, 0, 0, 109, + 546, 1, 0, 0, 0, 111, 551, 1, 0, 0, 0, 113, 554, 1, 0, 0, 0, 115, 557, + 1, 0, 0, 0, 117, 561, 1, 0, 0, 0, 119, 563, 1, 0, 0, 0, 121, 565, 1, 0, + 0, 0, 123, 567, 1, 0, 0, 0, 125, 573, 1, 0, 0, 0, 127, 580, 1, 0, 0, 0, + 129, 582, 1, 0, 0, 0, 131, 585, 1, 0, 0, 0, 133, 587, 1, 0, 0, 0, 135, + 589, 1, 0, 0, 0, 137, 592, 1, 0, 0, 0, 139, 595, 1, 0, 0, 0, 141, 597, + 1, 0, 0, 0, 143, 599, 1, 0, 0, 0, 145, 602, 1, 0, 0, 0, 147, 605, 1, 0, + 0, 0, 149, 608, 1, 0, 0, 0, 151, 611, 1, 0, 0, 0, 153, 613, 1, 0, 0, 0, + 155, 616, 1, 0, 0, 0, 157, 619, 1, 0, 0, 0, 159, 622, 1, 0, 0, 0, 161, + 626, 1, 0, 0, 0, 163, 630, 1, 0, 0, 0, 165, 633, 1, 0, 0, 0, 167, 636, + 1, 0, 0, 0, 169, 639, 1, 0, 0, 0, 171, 642, 1, 0, 0, 0, 173, 645, 1, 0, + 0, 0, 175, 649, 1, 0, 0, 0, 177, 652, 1, 0, 0, 0, 179, 655, 1, 0, 0, 0, + 181, 662, 1, 0, 0, 0, 183, 667, 1, 0, 0, 0, 185, 857, 1, 0, 0, 0, 187, + 1074, 1, 0, 0, 0, 189, 1296, 1, 0, 0, 0, 191, 1320, 1, 0, 0, 0, 193, 1346, + 1, 0, 0, 0, 195, 1357, 1, 0, 0, 0, 197, 1365, 1, 0, 0, 0, 199, 1374, 1, + 0, 0, 0, 201, 1384, 1, 0, 0, 0, 203, 1388, 1, 0, 0, 0, 205, 1450, 1, 0, + 0, 0, 207, 1452, 1, 0, 0, 0, 209, 1468, 1, 0, 0, 0, 211, 1471, 1, 0, 0, + 0, 213, 1545, 1, 0, 0, 0, 215, 1547, 1, 0, 0, 0, 217, 1557, 1, 0, 0, 0, + 219, 1563, 1, 0, 0, 0, 221, 1572, 1, 0, 0, 0, 223, 1582, 1, 0, 0, 0, 225, + 1591, 1, 0, 0, 0, 227, 1597, 1, 0, 0, 0, 229, 1606, 1, 0, 0, 0, 231, 1614, + 1, 0, 0, 0, 233, 1623, 1, 0, 0, 0, 235, 1631, 1, 0, 0, 0, 237, 1639, 1, + 0, 0, 0, 239, 1646, 1, 0, 0, 0, 241, 1654, 1, 0, 0, 0, 243, 1659, 1, 0, + 0, 0, 245, 1664, 1, 0, 0, 0, 247, 1669, 1, 0, 0, 0, 249, 1681, 1, 0, 0, + 0, 251, 1690, 1, 0, 0, 0, 253, 1698, 1, 0, 0, 0, 255, 1705, 1, 0, 0, 0, + 257, 1707, 1, 0, 0, 0, 259, 1725, 1, 0, 0, 0, 261, 1730, 1, 0, 0, 0, 263, + 1735, 1, 0, 0, 0, 265, 1738, 1, 0, 0, 0, 267, 1757, 1, 0, 0, 0, 269, 1763, + 1, 0, 0, 0, 271, 1777, 1, 0, 0, 0, 273, 274, 5, 112, 0, 0, 274, 275, 5, + 114, 0, 0, 275, 276, 5, 97, 0, 0, 276, 277, 5, 103, 0, 0, 277, 278, 5, + 109, 0, 0, 278, 279, 5, 97, 0, 0, 279, 2, 1, 0, 0, 0, 280, 281, 5, 59, + 0, 0, 281, 4, 1, 0, 0, 0, 282, 283, 5, 94, 0, 0, 283, 6, 1, 0, 0, 0, 284, + 285, 5, 126, 0, 0, 285, 8, 1, 0, 0, 0, 286, 287, 5, 62, 0, 0, 287, 288, + 5, 61, 0, 0, 288, 10, 1, 0, 0, 0, 289, 290, 5, 62, 0, 0, 290, 12, 1, 0, + 0, 0, 291, 292, 5, 60, 0, 0, 292, 14, 1, 0, 0, 0, 293, 294, 5, 60, 0, 0, + 294, 295, 5, 61, 0, 0, 295, 16, 1, 0, 0, 0, 296, 297, 5, 61, 0, 0, 297, + 18, 1, 0, 0, 0, 298, 299, 5, 105, 0, 0, 299, 300, 5, 109, 0, 0, 300, 301, + 5, 112, 0, 0, 301, 302, 5, 111, 0, 0, 302, 303, 5, 114, 0, 0, 303, 304, + 5, 116, 0, 0, 304, 20, 1, 0, 0, 0, 305, 306, 5, 97, 0, 0, 306, 307, 5, + 115, 0, 0, 307, 22, 1, 0, 0, 0, 308, 309, 5, 42, 0, 0, 309, 24, 1, 0, 0, + 0, 310, 311, 5, 102, 0, 0, 311, 312, 5, 114, 0, 0, 312, 313, 5, 111, 0, + 0, 313, 314, 5, 109, 0, 0, 314, 26, 1, 0, 0, 0, 315, 316, 5, 123, 0, 0, + 316, 28, 1, 0, 0, 0, 317, 318, 5, 44, 0, 0, 318, 30, 1, 0, 0, 0, 319, 320, + 5, 125, 0, 0, 320, 32, 1, 0, 0, 0, 321, 322, 5, 97, 0, 0, 322, 323, 5, + 98, 0, 0, 323, 324, 5, 115, 0, 0, 324, 325, 5, 116, 0, 0, 325, 326, 5, + 114, 0, 0, 326, 327, 5, 97, 0, 0, 327, 328, 5, 99, 0, 0, 328, 329, 5, 116, + 0, 0, 329, 34, 1, 0, 0, 0, 330, 331, 5, 99, 0, 0, 331, 332, 5, 111, 0, + 0, 332, 333, 5, 110, 0, 0, 333, 334, 5, 116, 0, 0, 334, 335, 5, 114, 0, + 0, 335, 336, 5, 97, 0, 0, 336, 337, 5, 99, 0, 0, 337, 338, 5, 116, 0, 0, + 338, 36, 1, 0, 0, 0, 339, 340, 5, 105, 0, 0, 340, 341, 5, 110, 0, 0, 341, + 342, 5, 116, 0, 0, 342, 343, 5, 101, 0, 0, 343, 344, 5, 114, 0, 0, 344, + 345, 5, 102, 0, 0, 345, 346, 5, 97, 0, 0, 346, 347, 5, 99, 0, 0, 347, 348, + 5, 101, 0, 0, 348, 38, 1, 0, 0, 0, 349, 350, 5, 108, 0, 0, 350, 351, 5, + 105, 0, 0, 351, 352, 5, 98, 0, 0, 352, 353, 5, 114, 0, 0, 353, 354, 5, + 97, 0, 0, 354, 355, 5, 114, 0, 0, 355, 356, 5, 121, 0, 0, 356, 40, 1, 0, + 0, 0, 357, 358, 5, 105, 0, 0, 358, 359, 5, 115, 0, 0, 359, 42, 1, 0, 0, + 0, 360, 361, 5, 40, 0, 0, 361, 44, 1, 0, 0, 0, 362, 363, 5, 41, 0, 0, 363, + 46, 1, 0, 0, 0, 364, 365, 5, 111, 0, 0, 365, 366, 5, 118, 0, 0, 366, 367, + 5, 101, 0, 0, 367, 368, 5, 114, 0, 0, 368, 369, 5, 114, 0, 0, 369, 370, + 5, 105, 0, 0, 370, 371, 5, 100, 0, 0, 371, 372, 5, 101, 0, 0, 372, 48, + 1, 0, 0, 0, 373, 374, 5, 117, 0, 0, 374, 375, 5, 115, 0, 0, 375, 376, 5, + 105, 0, 0, 376, 377, 5, 110, 0, 0, 377, 378, 5, 103, 0, 0, 378, 50, 1, + 0, 0, 0, 379, 380, 5, 102, 0, 0, 380, 381, 5, 111, 0, 0, 381, 382, 5, 114, + 0, 0, 382, 52, 1, 0, 0, 0, 383, 384, 5, 115, 0, 0, 384, 385, 5, 116, 0, + 0, 385, 386, 5, 114, 0, 0, 386, 387, 5, 117, 0, 0, 387, 388, 5, 99, 0, + 0, 388, 389, 5, 116, 0, 0, 389, 54, 1, 0, 0, 0, 390, 391, 5, 109, 0, 0, + 391, 392, 5, 111, 0, 0, 392, 393, 5, 100, 0, 0, 393, 394, 5, 105, 0, 0, + 394, 395, 5, 102, 0, 0, 395, 396, 5, 105, 0, 0, 396, 397, 5, 101, 0, 0, + 397, 398, 5, 114, 0, 0, 398, 56, 1, 0, 0, 0, 399, 400, 5, 102, 0, 0, 400, + 401, 5, 117, 0, 0, 401, 402, 5, 110, 0, 0, 402, 403, 5, 99, 0, 0, 403, + 404, 5, 116, 0, 0, 404, 405, 5, 105, 0, 0, 405, 406, 5, 111, 0, 0, 406, + 407, 5, 110, 0, 0, 407, 58, 1, 0, 0, 0, 408, 409, 5, 114, 0, 0, 409, 410, + 5, 101, 0, 0, 410, 411, 5, 116, 0, 0, 411, 412, 5, 117, 0, 0, 412, 413, + 5, 114, 0, 0, 413, 414, 5, 110, 0, 0, 414, 415, 5, 115, 0, 0, 415, 60, + 1, 0, 0, 0, 416, 417, 5, 101, 0, 0, 417, 418, 5, 118, 0, 0, 418, 419, 5, + 101, 0, 0, 419, 420, 5, 110, 0, 0, 420, 421, 5, 116, 0, 0, 421, 62, 1, + 0, 0, 0, 422, 423, 5, 101, 0, 0, 423, 424, 5, 110, 0, 0, 424, 425, 5, 117, + 0, 0, 425, 426, 5, 109, 0, 0, 426, 64, 1, 0, 0, 0, 427, 428, 5, 91, 0, + 0, 428, 66, 1, 0, 0, 0, 429, 430, 5, 93, 0, 0, 430, 68, 1, 0, 0, 0, 431, + 432, 5, 46, 0, 0, 432, 70, 1, 0, 0, 0, 433, 434, 5, 109, 0, 0, 434, 435, + 5, 97, 0, 0, 435, 436, 5, 112, 0, 0, 436, 437, 5, 112, 0, 0, 437, 438, + 5, 105, 0, 0, 438, 439, 5, 110, 0, 0, 439, 440, 5, 103, 0, 0, 440, 72, + 1, 0, 0, 0, 441, 442, 5, 61, 0, 0, 442, 443, 5, 62, 0, 0, 443, 74, 1, 0, + 0, 0, 444, 445, 5, 109, 0, 0, 445, 446, 5, 101, 0, 0, 446, 447, 5, 109, + 0, 0, 447, 448, 5, 111, 0, 0, 448, 449, 5, 114, 0, 0, 449, 450, 5, 121, + 0, 0, 450, 76, 1, 0, 0, 0, 451, 452, 5, 115, 0, 0, 452, 453, 5, 116, 0, + 0, 453, 454, 5, 111, 0, 0, 454, 455, 5, 114, 0, 0, 455, 456, 5, 97, 0, + 0, 456, 457, 5, 103, 0, 0, 457, 458, 5, 101, 0, 0, 458, 78, 1, 0, 0, 0, + 459, 460, 5, 99, 0, 0, 460, 461, 5, 97, 0, 0, 461, 462, 5, 108, 0, 0, 462, + 463, 5, 108, 0, 0, 463, 464, 5, 100, 0, 0, 464, 465, 5, 97, 0, 0, 465, + 466, 5, 116, 0, 0, 466, 467, 5, 97, 0, 0, 467, 80, 1, 0, 0, 0, 468, 469, + 5, 105, 0, 0, 469, 470, 5, 102, 0, 0, 470, 82, 1, 0, 0, 0, 471, 472, 5, + 101, 0, 0, 472, 473, 5, 108, 0, 0, 473, 474, 5, 115, 0, 0, 474, 475, 5, + 101, 0, 0, 475, 84, 1, 0, 0, 0, 476, 477, 5, 116, 0, 0, 477, 478, 5, 114, + 0, 0, 478, 479, 5, 121, 0, 0, 479, 86, 1, 0, 0, 0, 480, 481, 5, 99, 0, + 0, 481, 482, 5, 97, 0, 0, 482, 483, 5, 116, 0, 0, 483, 484, 5, 99, 0, 0, + 484, 485, 5, 104, 0, 0, 485, 88, 1, 0, 0, 0, 486, 487, 5, 119, 0, 0, 487, + 488, 5, 104, 0, 0, 488, 489, 5, 105, 0, 0, 489, 490, 5, 108, 0, 0, 490, + 491, 5, 101, 0, 0, 491, 90, 1, 0, 0, 0, 492, 493, 5, 97, 0, 0, 493, 494, + 5, 115, 0, 0, 494, 495, 5, 115, 0, 0, 495, 496, 5, 101, 0, 0, 496, 497, + 5, 109, 0, 0, 497, 498, 5, 98, 0, 0, 498, 499, 5, 108, 0, 0, 499, 500, + 5, 121, 0, 0, 500, 92, 1, 0, 0, 0, 501, 502, 5, 100, 0, 0, 502, 503, 5, + 111, 0, 0, 503, 94, 1, 0, 0, 0, 504, 505, 5, 114, 0, 0, 505, 506, 5, 101, + 0, 0, 506, 507, 5, 116, 0, 0, 507, 508, 5, 117, 0, 0, 508, 509, 5, 114, + 0, 0, 509, 510, 5, 110, 0, 0, 510, 96, 1, 0, 0, 0, 511, 512, 5, 116, 0, + 0, 512, 513, 5, 104, 0, 0, 513, 514, 5, 114, 0, 0, 514, 515, 5, 111, 0, + 0, 515, 516, 5, 119, 0, 0, 516, 98, 1, 0, 0, 0, 517, 518, 5, 101, 0, 0, + 518, 519, 5, 109, 0, 0, 519, 520, 5, 105, 0, 0, 520, 521, 5, 116, 0, 0, + 521, 100, 1, 0, 0, 0, 522, 523, 5, 118, 0, 0, 523, 524, 5, 97, 0, 0, 524, + 525, 5, 114, 0, 0, 525, 102, 1, 0, 0, 0, 526, 527, 5, 97, 0, 0, 527, 528, + 5, 100, 0, 0, 528, 529, 5, 100, 0, 0, 529, 530, 5, 114, 0, 0, 530, 531, + 5, 101, 0, 0, 531, 532, 5, 115, 0, 0, 532, 533, 5, 115, 0, 0, 533, 104, + 1, 0, 0, 0, 534, 535, 5, 98, 0, 0, 535, 536, 5, 111, 0, 0, 536, 537, 5, + 111, 0, 0, 537, 538, 5, 108, 0, 0, 538, 106, 1, 0, 0, 0, 539, 540, 5, 115, + 0, 0, 540, 541, 5, 116, 0, 0, 541, 542, 5, 114, 0, 0, 542, 543, 5, 105, + 0, 0, 543, 544, 5, 110, 0, 0, 544, 545, 5, 103, 0, 0, 545, 108, 1, 0, 0, + 0, 546, 547, 5, 98, 0, 0, 547, 548, 5, 121, 0, 0, 548, 549, 5, 116, 0, + 0, 549, 550, 5, 101, 0, 0, 550, 110, 1, 0, 0, 0, 551, 552, 5, 43, 0, 0, + 552, 553, 5, 43, 0, 0, 553, 112, 1, 0, 0, 0, 554, 555, 5, 45, 0, 0, 555, + 556, 5, 45, 0, 0, 556, 114, 1, 0, 0, 0, 557, 558, 5, 110, 0, 0, 558, 559, + 5, 101, 0, 0, 559, 560, 5, 119, 0, 0, 560, 116, 1, 0, 0, 0, 561, 562, 5, + 58, 0, 0, 562, 118, 1, 0, 0, 0, 563, 564, 5, 43, 0, 0, 564, 120, 1, 0, + 0, 0, 565, 566, 5, 45, 0, 0, 566, 122, 1, 0, 0, 0, 567, 568, 5, 97, 0, + 0, 568, 569, 5, 102, 0, 0, 569, 570, 5, 116, 0, 0, 570, 571, 5, 101, 0, + 0, 571, 572, 5, 114, 0, 0, 572, 124, 1, 0, 0, 0, 573, 574, 5, 100, 0, 0, + 574, 575, 5, 101, 0, 0, 575, 576, 5, 108, 0, 0, 576, 577, 5, 101, 0, 0, + 577, 578, 5, 116, 0, 0, 578, 579, 5, 101, 0, 0, 579, 126, 1, 0, 0, 0, 580, + 581, 5, 33, 0, 0, 581, 128, 1, 0, 0, 0, 582, 583, 5, 42, 0, 0, 583, 584, + 5, 42, 0, 0, 584, 130, 1, 0, 0, 0, 585, 586, 5, 47, 0, 0, 586, 132, 1, + 0, 0, 0, 587, 588, 5, 37, 0, 0, 588, 134, 1, 0, 0, 0, 589, 590, 5, 60, + 0, 0, 590, 591, 5, 60, 0, 0, 591, 136, 1, 0, 0, 0, 592, 593, 5, 62, 0, + 0, 593, 594, 5, 62, 0, 0, 594, 138, 1, 0, 0, 0, 595, 596, 5, 38, 0, 0, + 596, 140, 1, 0, 0, 0, 597, 598, 5, 124, 0, 0, 598, 142, 1, 0, 0, 0, 599, + 600, 5, 61, 0, 0, 600, 601, 5, 61, 0, 0, 601, 144, 1, 0, 0, 0, 602, 603, + 5, 33, 0, 0, 603, 604, 5, 61, 0, 0, 604, 146, 1, 0, 0, 0, 605, 606, 5, + 38, 0, 0, 606, 607, 5, 38, 0, 0, 607, 148, 1, 0, 0, 0, 608, 609, 5, 124, + 0, 0, 609, 610, 5, 124, 0, 0, 610, 150, 1, 0, 0, 0, 611, 612, 5, 63, 0, + 0, 612, 152, 1, 0, 0, 0, 613, 614, 5, 124, 0, 0, 614, 615, 5, 61, 0, 0, + 615, 154, 1, 0, 0, 0, 616, 617, 5, 94, 0, 0, 617, 618, 5, 61, 0, 0, 618, + 156, 1, 0, 0, 0, 619, 620, 5, 38, 0, 0, 620, 621, 5, 61, 0, 0, 621, 158, + 1, 0, 0, 0, 622, 623, 5, 60, 0, 0, 623, 624, 5, 60, 0, 0, 624, 625, 5, + 61, 0, 0, 625, 160, 1, 0, 0, 0, 626, 627, 5, 62, 0, 0, 627, 628, 5, 62, + 0, 0, 628, 629, 5, 61, 0, 0, 629, 162, 1, 0, 0, 0, 630, 631, 5, 43, 0, + 0, 631, 632, 5, 61, 0, 0, 632, 164, 1, 0, 0, 0, 633, 634, 5, 45, 0, 0, + 634, 635, 5, 61, 0, 0, 635, 166, 1, 0, 0, 0, 636, 637, 5, 42, 0, 0, 637, + 638, 5, 61, 0, 0, 638, 168, 1, 0, 0, 0, 639, 640, 5, 47, 0, 0, 640, 641, + 5, 61, 0, 0, 641, 170, 1, 0, 0, 0, 642, 643, 5, 37, 0, 0, 643, 644, 5, + 61, 0, 0, 644, 172, 1, 0, 0, 0, 645, 646, 5, 108, 0, 0, 646, 647, 5, 101, + 0, 0, 647, 648, 5, 116, 0, 0, 648, 174, 1, 0, 0, 0, 649, 650, 5, 58, 0, + 0, 650, 651, 5, 61, 0, 0, 651, 176, 1, 0, 0, 0, 652, 653, 5, 61, 0, 0, + 653, 654, 5, 58, 0, 0, 654, 178, 1, 0, 0, 0, 655, 656, 5, 115, 0, 0, 656, + 657, 5, 119, 0, 0, 657, 658, 5, 105, 0, 0, 658, 659, 5, 116, 0, 0, 659, + 660, 5, 99, 0, 0, 660, 661, 5, 104, 0, 0, 661, 180, 1, 0, 0, 0, 662, 663, + 5, 99, 0, 0, 663, 664, 5, 97, 0, 0, 664, 665, 5, 115, 0, 0, 665, 666, 5, + 101, 0, 0, 666, 182, 1, 0, 0, 0, 667, 668, 5, 100, 0, 0, 668, 669, 5, 101, + 0, 0, 669, 670, 5, 102, 0, 0, 670, 671, 5, 97, 0, 0, 671, 672, 5, 117, + 0, 0, 672, 673, 5, 108, 0, 0, 673, 674, 5, 116, 0, 0, 674, 184, 1, 0, 0, + 0, 675, 676, 5, 105, 0, 0, 676, 677, 5, 110, 0, 0, 677, 858, 5, 116, 0, + 0, 678, 679, 5, 105, 0, 0, 679, 680, 5, 110, 0, 0, 680, 681, 5, 116, 0, + 0, 681, 858, 5, 56, 0, 0, 682, 683, 5, 105, 0, 0, 683, 684, 5, 110, 0, + 0, 684, 685, 5, 116, 0, 0, 685, 686, 5, 49, 0, 0, 686, 858, 5, 54, 0, 0, + 687, 688, 5, 105, 0, 0, 688, 689, 5, 110, 0, 0, 689, 690, 5, 116, 0, 0, + 690, 691, 5, 50, 0, 0, 691, 858, 5, 52, 0, 0, 692, 693, 5, 105, 0, 0, 693, + 694, 5, 110, 0, 0, 694, 695, 5, 116, 0, 0, 695, 696, 5, 51, 0, 0, 696, + 858, 5, 50, 0, 0, 697, 698, 5, 105, 0, 0, 698, 699, 5, 110, 0, 0, 699, + 700, 5, 116, 0, 0, 700, 701, 5, 52, 0, 0, 701, 858, 5, 48, 0, 0, 702, 703, + 5, 105, 0, 0, 703, 704, 5, 110, 0, 0, 704, 705, 5, 116, 0, 0, 705, 706, + 5, 52, 0, 0, 706, 858, 5, 56, 0, 0, 707, 708, 5, 105, 0, 0, 708, 709, 5, + 110, 0, 0, 709, 710, 5, 116, 0, 0, 710, 711, 5, 53, 0, 0, 711, 858, 5, + 54, 0, 0, 712, 713, 5, 105, 0, 0, 713, 714, 5, 110, 0, 0, 714, 715, 5, + 116, 0, 0, 715, 716, 5, 54, 0, 0, 716, 858, 5, 52, 0, 0, 717, 718, 5, 105, + 0, 0, 718, 719, 5, 110, 0, 0, 719, 720, 5, 116, 0, 0, 720, 721, 5, 55, + 0, 0, 721, 858, 5, 50, 0, 0, 722, 723, 5, 105, 0, 0, 723, 724, 5, 110, + 0, 0, 724, 725, 5, 116, 0, 0, 725, 726, 5, 56, 0, 0, 726, 858, 5, 48, 0, + 0, 727, 728, 5, 105, 0, 0, 728, 729, 5, 110, 0, 0, 729, 730, 5, 116, 0, + 0, 730, 731, 5, 56, 0, 0, 731, 858, 5, 56, 0, 0, 732, 733, 5, 105, 0, 0, + 733, 734, 5, 110, 0, 0, 734, 735, 5, 116, 0, 0, 735, 736, 5, 57, 0, 0, + 736, 858, 5, 54, 0, 0, 737, 738, 5, 105, 0, 0, 738, 739, 5, 110, 0, 0, + 739, 740, 5, 116, 0, 0, 740, 741, 5, 49, 0, 0, 741, 742, 5, 48, 0, 0, 742, + 858, 5, 52, 0, 0, 743, 744, 5, 105, 0, 0, 744, 745, 5, 110, 0, 0, 745, + 746, 5, 116, 0, 0, 746, 747, 5, 49, 0, 0, 747, 748, 5, 49, 0, 0, 748, 858, + 5, 50, 0, 0, 749, 750, 5, 105, 0, 0, 750, 751, 5, 110, 0, 0, 751, 752, + 5, 116, 0, 0, 752, 753, 5, 49, 0, 0, 753, 754, 5, 50, 0, 0, 754, 858, 5, + 48, 0, 0, 755, 756, 5, 105, 0, 0, 756, 757, 5, 110, 0, 0, 757, 758, 5, + 116, 0, 0, 758, 759, 5, 49, 0, 0, 759, 760, 5, 50, 0, 0, 760, 858, 5, 56, + 0, 0, 761, 762, 5, 105, 0, 0, 762, 763, 5, 110, 0, 0, 763, 764, 5, 116, + 0, 0, 764, 765, 5, 49, 0, 0, 765, 766, 5, 51, 0, 0, 766, 858, 5, 54, 0, + 0, 767, 768, 5, 105, 0, 0, 768, 769, 5, 110, 0, 0, 769, 770, 5, 116, 0, + 0, 770, 771, 5, 49, 0, 0, 771, 772, 5, 52, 0, 0, 772, 858, 5, 52, 0, 0, + 773, 774, 5, 105, 0, 0, 774, 775, 5, 110, 0, 0, 775, 776, 5, 116, 0, 0, + 776, 777, 5, 49, 0, 0, 777, 778, 5, 53, 0, 0, 778, 858, 5, 50, 0, 0, 779, + 780, 5, 105, 0, 0, 780, 781, 5, 110, 0, 0, 781, 782, 5, 116, 0, 0, 782, + 783, 5, 49, 0, 0, 783, 784, 5, 54, 0, 0, 784, 858, 5, 48, 0, 0, 785, 786, + 5, 105, 0, 0, 786, 787, 5, 110, 0, 0, 787, 788, 5, 116, 0, 0, 788, 789, + 5, 49, 0, 0, 789, 790, 5, 54, 0, 0, 790, 858, 5, 56, 0, 0, 791, 792, 5, + 105, 0, 0, 792, 793, 5, 110, 0, 0, 793, 794, 5, 116, 0, 0, 794, 795, 5, + 49, 0, 0, 795, 796, 5, 55, 0, 0, 796, 858, 5, 54, 0, 0, 797, 798, 5, 105, + 0, 0, 798, 799, 5, 110, 0, 0, 799, 800, 5, 116, 0, 0, 800, 801, 5, 49, + 0, 0, 801, 802, 5, 56, 0, 0, 802, 858, 5, 52, 0, 0, 803, 804, 5, 105, 0, + 0, 804, 805, 5, 110, 0, 0, 805, 806, 5, 116, 0, 0, 806, 807, 5, 49, 0, + 0, 807, 808, 5, 57, 0, 0, 808, 858, 5, 50, 0, 0, 809, 810, 5, 105, 0, 0, + 810, 811, 5, 110, 0, 0, 811, 812, 5, 116, 0, 0, 812, 813, 5, 50, 0, 0, + 813, 814, 5, 48, 0, 0, 814, 858, 5, 48, 0, 0, 815, 816, 5, 105, 0, 0, 816, + 817, 5, 110, 0, 0, 817, 818, 5, 116, 0, 0, 818, 819, 5, 50, 0, 0, 819, + 820, 5, 48, 0, 0, 820, 858, 5, 56, 0, 0, 821, 822, 5, 105, 0, 0, 822, 823, + 5, 110, 0, 0, 823, 824, 5, 116, 0, 0, 824, 825, 5, 50, 0, 0, 825, 826, + 5, 49, 0, 0, 826, 858, 5, 54, 0, 0, 827, 828, 5, 105, 0, 0, 828, 829, 5, + 110, 0, 0, 829, 830, 5, 116, 0, 0, 830, 831, 5, 50, 0, 0, 831, 832, 5, + 50, 0, 0, 832, 858, 5, 52, 0, 0, 833, 834, 5, 105, 0, 0, 834, 835, 5, 110, + 0, 0, 835, 836, 5, 116, 0, 0, 836, 837, 5, 50, 0, 0, 837, 838, 5, 51, 0, + 0, 838, 858, 5, 50, 0, 0, 839, 840, 5, 105, 0, 0, 840, 841, 5, 110, 0, + 0, 841, 842, 5, 116, 0, 0, 842, 843, 5, 50, 0, 0, 843, 844, 5, 52, 0, 0, + 844, 858, 5, 48, 0, 0, 845, 846, 5, 105, 0, 0, 846, 847, 5, 110, 0, 0, + 847, 848, 5, 116, 0, 0, 848, 849, 5, 50, 0, 0, 849, 850, 5, 52, 0, 0, 850, + 858, 5, 56, 0, 0, 851, 852, 5, 105, 0, 0, 852, 853, 5, 110, 0, 0, 853, + 854, 5, 116, 0, 0, 854, 855, 5, 50, 0, 0, 855, 856, 5, 53, 0, 0, 856, 858, + 5, 54, 0, 0, 857, 675, 1, 0, 0, 0, 857, 678, 1, 0, 0, 0, 857, 682, 1, 0, + 0, 0, 857, 687, 1, 0, 0, 0, 857, 692, 1, 0, 0, 0, 857, 697, 1, 0, 0, 0, + 857, 702, 1, 0, 0, 0, 857, 707, 1, 0, 0, 0, 857, 712, 1, 0, 0, 0, 857, + 717, 1, 0, 0, 0, 857, 722, 1, 0, 0, 0, 857, 727, 1, 0, 0, 0, 857, 732, + 1, 0, 0, 0, 857, 737, 1, 0, 0, 0, 857, 743, 1, 0, 0, 0, 857, 749, 1, 0, + 0, 0, 857, 755, 1, 0, 0, 0, 857, 761, 1, 0, 0, 0, 857, 767, 1, 0, 0, 0, + 857, 773, 1, 0, 0, 0, 857, 779, 1, 0, 0, 0, 857, 785, 1, 0, 0, 0, 857, + 791, 1, 0, 0, 0, 857, 797, 1, 0, 0, 0, 857, 803, 1, 0, 0, 0, 857, 809, + 1, 0, 0, 0, 857, 815, 1, 0, 0, 0, 857, 821, 1, 0, 0, 0, 857, 827, 1, 0, + 0, 0, 857, 833, 1, 0, 0, 0, 857, 839, 1, 0, 0, 0, 857, 845, 1, 0, 0, 0, + 857, 851, 1, 0, 0, 0, 858, 186, 1, 0, 0, 0, 859, 860, 5, 117, 0, 0, 860, + 861, 5, 105, 0, 0, 861, 862, 5, 110, 0, 0, 862, 1075, 5, 116, 0, 0, 863, + 864, 5, 117, 0, 0, 864, 865, 5, 105, 0, 0, 865, 866, 5, 110, 0, 0, 866, + 867, 5, 116, 0, 0, 867, 1075, 5, 56, 0, 0, 868, 869, 5, 117, 0, 0, 869, + 870, 5, 105, 0, 0, 870, 871, 5, 110, 0, 0, 871, 872, 5, 116, 0, 0, 872, + 873, 5, 49, 0, 0, 873, 1075, 5, 54, 0, 0, 874, 875, 5, 117, 0, 0, 875, + 876, 5, 105, 0, 0, 876, 877, 5, 110, 0, 0, 877, 878, 5, 116, 0, 0, 878, + 879, 5, 50, 0, 0, 879, 1075, 5, 52, 0, 0, 880, 881, 5, 117, 0, 0, 881, + 882, 5, 105, 0, 0, 882, 883, 5, 110, 0, 0, 883, 884, 5, 116, 0, 0, 884, + 885, 5, 51, 0, 0, 885, 1075, 5, 50, 0, 0, 886, 887, 5, 117, 0, 0, 887, + 888, 5, 105, 0, 0, 888, 889, 5, 110, 0, 0, 889, 890, 5, 116, 0, 0, 890, + 891, 5, 52, 0, 0, 891, 1075, 5, 48, 0, 0, 892, 893, 5, 117, 0, 0, 893, + 894, 5, 105, 0, 0, 894, 895, 5, 110, 0, 0, 895, 896, 5, 116, 0, 0, 896, + 897, 5, 52, 0, 0, 897, 1075, 5, 56, 0, 0, 898, 899, 5, 117, 0, 0, 899, + 900, 5, 105, 0, 0, 900, 901, 5, 110, 0, 0, 901, 902, 5, 116, 0, 0, 902, + 903, 5, 53, 0, 0, 903, 1075, 5, 54, 0, 0, 904, 905, 5, 117, 0, 0, 905, + 906, 5, 105, 0, 0, 906, 907, 5, 110, 0, 0, 907, 908, 5, 116, 0, 0, 908, + 909, 5, 54, 0, 0, 909, 1075, 5, 52, 0, 0, 910, 911, 5, 117, 0, 0, 911, + 912, 5, 105, 0, 0, 912, 913, 5, 110, 0, 0, 913, 914, 5, 116, 0, 0, 914, + 915, 5, 55, 0, 0, 915, 1075, 5, 50, 0, 0, 916, 917, 5, 117, 0, 0, 917, + 918, 5, 105, 0, 0, 918, 919, 5, 110, 0, 0, 919, 920, 5, 116, 0, 0, 920, + 921, 5, 56, 0, 0, 921, 1075, 5, 48, 0, 0, 922, 923, 5, 117, 0, 0, 923, + 924, 5, 105, 0, 0, 924, 925, 5, 110, 0, 0, 925, 926, 5, 116, 0, 0, 926, + 927, 5, 56, 0, 0, 927, 1075, 5, 56, 0, 0, 928, 929, 5, 117, 0, 0, 929, + 930, 5, 105, 0, 0, 930, 931, 5, 110, 0, 0, 931, 932, 5, 116, 0, 0, 932, + 933, 5, 57, 0, 0, 933, 1075, 5, 54, 0, 0, 934, 935, 5, 117, 0, 0, 935, + 936, 5, 105, 0, 0, 936, 937, 5, 110, 0, 0, 937, 938, 5, 116, 0, 0, 938, + 939, 5, 49, 0, 0, 939, 940, 5, 48, 0, 0, 940, 1075, 5, 52, 0, 0, 941, 942, + 5, 117, 0, 0, 942, 943, 5, 105, 0, 0, 943, 944, 5, 110, 0, 0, 944, 945, + 5, 116, 0, 0, 945, 946, 5, 49, 0, 0, 946, 947, 5, 49, 0, 0, 947, 1075, + 5, 50, 0, 0, 948, 949, 5, 117, 0, 0, 949, 950, 5, 105, 0, 0, 950, 951, + 5, 110, 0, 0, 951, 952, 5, 116, 0, 0, 952, 953, 5, 49, 0, 0, 953, 954, + 5, 50, 0, 0, 954, 1075, 5, 48, 0, 0, 955, 956, 5, 117, 0, 0, 956, 957, + 5, 105, 0, 0, 957, 958, 5, 110, 0, 0, 958, 959, 5, 116, 0, 0, 959, 960, + 5, 49, 0, 0, 960, 961, 5, 50, 0, 0, 961, 1075, 5, 56, 0, 0, 962, 963, 5, + 117, 0, 0, 963, 964, 5, 105, 0, 0, 964, 965, 5, 110, 0, 0, 965, 966, 5, + 116, 0, 0, 966, 967, 5, 49, 0, 0, 967, 968, 5, 51, 0, 0, 968, 1075, 5, + 54, 0, 0, 969, 970, 5, 117, 0, 0, 970, 971, 5, 105, 0, 0, 971, 972, 5, + 110, 0, 0, 972, 973, 5, 116, 0, 0, 973, 974, 5, 49, 0, 0, 974, 975, 5, + 52, 0, 0, 975, 1075, 5, 52, 0, 0, 976, 977, 5, 117, 0, 0, 977, 978, 5, + 105, 0, 0, 978, 979, 5, 110, 0, 0, 979, 980, 5, 116, 0, 0, 980, 981, 5, + 49, 0, 0, 981, 982, 5, 53, 0, 0, 982, 1075, 5, 50, 0, 0, 983, 984, 5, 117, + 0, 0, 984, 985, 5, 105, 0, 0, 985, 986, 5, 110, 0, 0, 986, 987, 5, 116, + 0, 0, 987, 988, 5, 49, 0, 0, 988, 989, 5, 54, 0, 0, 989, 1075, 5, 48, 0, + 0, 990, 991, 5, 117, 0, 0, 991, 992, 5, 105, 0, 0, 992, 993, 5, 110, 0, + 0, 993, 994, 5, 116, 0, 0, 994, 995, 5, 49, 0, 0, 995, 996, 5, 54, 0, 0, + 996, 1075, 5, 56, 0, 0, 997, 998, 5, 117, 0, 0, 998, 999, 5, 105, 0, 0, + 999, 1000, 5, 110, 0, 0, 1000, 1001, 5, 116, 0, 0, 1001, 1002, 5, 49, 0, + 0, 1002, 1003, 5, 55, 0, 0, 1003, 1075, 5, 54, 0, 0, 1004, 1005, 5, 117, + 0, 0, 1005, 1006, 5, 105, 0, 0, 1006, 1007, 5, 110, 0, 0, 1007, 1008, 5, + 116, 0, 0, 1008, 1009, 5, 49, 0, 0, 1009, 1010, 5, 56, 0, 0, 1010, 1075, + 5, 52, 0, 0, 1011, 1012, 5, 117, 0, 0, 1012, 1013, 5, 105, 0, 0, 1013, + 1014, 5, 110, 0, 0, 1014, 1015, 5, 116, 0, 0, 1015, 1016, 5, 49, 0, 0, + 1016, 1017, 5, 57, 0, 0, 1017, 1075, 5, 50, 0, 0, 1018, 1019, 5, 117, 0, + 0, 1019, 1020, 5, 105, 0, 0, 1020, 1021, 5, 110, 0, 0, 1021, 1022, 5, 116, + 0, 0, 1022, 1023, 5, 50, 0, 0, 1023, 1024, 5, 48, 0, 0, 1024, 1075, 5, + 48, 0, 0, 1025, 1026, 5, 117, 0, 0, 1026, 1027, 5, 105, 0, 0, 1027, 1028, + 5, 110, 0, 0, 1028, 1029, 5, 116, 0, 0, 1029, 1030, 5, 50, 0, 0, 1030, + 1031, 5, 48, 0, 0, 1031, 1075, 5, 56, 0, 0, 1032, 1033, 5, 117, 0, 0, 1033, + 1034, 5, 105, 0, 0, 1034, 1035, 5, 110, 0, 0, 1035, 1036, 5, 116, 0, 0, + 1036, 1037, 5, 50, 0, 0, 1037, 1038, 5, 49, 0, 0, 1038, 1075, 5, 54, 0, + 0, 1039, 1040, 5, 117, 0, 0, 1040, 1041, 5, 105, 0, 0, 1041, 1042, 5, 110, + 0, 0, 1042, 1043, 5, 116, 0, 0, 1043, 1044, 5, 50, 0, 0, 1044, 1045, 5, + 50, 0, 0, 1045, 1075, 5, 52, 0, 0, 1046, 1047, 5, 117, 0, 0, 1047, 1048, + 5, 105, 0, 0, 1048, 1049, 5, 110, 0, 0, 1049, 1050, 5, 116, 0, 0, 1050, + 1051, 5, 50, 0, 0, 1051, 1052, 5, 51, 0, 0, 1052, 1075, 5, 50, 0, 0, 1053, + 1054, 5, 117, 0, 0, 1054, 1055, 5, 105, 0, 0, 1055, 1056, 5, 110, 0, 0, + 1056, 1057, 5, 116, 0, 0, 1057, 1058, 5, 50, 0, 0, 1058, 1059, 5, 52, 0, + 0, 1059, 1075, 5, 48, 0, 0, 1060, 1061, 5, 117, 0, 0, 1061, 1062, 5, 105, + 0, 0, 1062, 1063, 5, 110, 0, 0, 1063, 1064, 5, 116, 0, 0, 1064, 1065, 5, + 50, 0, 0, 1065, 1066, 5, 52, 0, 0, 1066, 1075, 5, 56, 0, 0, 1067, 1068, + 5, 117, 0, 0, 1068, 1069, 5, 105, 0, 0, 1069, 1070, 5, 110, 0, 0, 1070, + 1071, 5, 116, 0, 0, 1071, 1072, 5, 50, 0, 0, 1072, 1073, 5, 53, 0, 0, 1073, + 1075, 5, 54, 0, 0, 1074, 859, 1, 0, 0, 0, 1074, 863, 1, 0, 0, 0, 1074, + 868, 1, 0, 0, 0, 1074, 874, 1, 0, 0, 0, 1074, 880, 1, 0, 0, 0, 1074, 886, + 1, 0, 0, 0, 1074, 892, 1, 0, 0, 0, 1074, 898, 1, 0, 0, 0, 1074, 904, 1, + 0, 0, 0, 1074, 910, 1, 0, 0, 0, 1074, 916, 1, 0, 0, 0, 1074, 922, 1, 0, + 0, 0, 1074, 928, 1, 0, 0, 0, 1074, 934, 1, 0, 0, 0, 1074, 941, 1, 0, 0, + 0, 1074, 948, 1, 0, 0, 0, 1074, 955, 1, 0, 0, 0, 1074, 962, 1, 0, 0, 0, + 1074, 969, 1, 0, 0, 0, 1074, 976, 1, 0, 0, 0, 1074, 983, 1, 0, 0, 0, 1074, + 990, 1, 0, 0, 0, 1074, 997, 1, 0, 0, 0, 1074, 1004, 1, 0, 0, 0, 1074, 1011, + 1, 0, 0, 0, 1074, 1018, 1, 0, 0, 0, 1074, 1025, 1, 0, 0, 0, 1074, 1032, + 1, 0, 0, 0, 1074, 1039, 1, 0, 0, 0, 1074, 1046, 1, 0, 0, 0, 1074, 1053, + 1, 0, 0, 0, 1074, 1060, 1, 0, 0, 0, 1074, 1067, 1, 0, 0, 0, 1075, 188, + 1, 0, 0, 0, 1076, 1077, 5, 98, 0, 0, 1077, 1078, 5, 121, 0, 0, 1078, 1079, + 5, 116, 0, 0, 1079, 1080, 5, 101, 0, 0, 1080, 1297, 5, 115, 0, 0, 1081, + 1082, 5, 98, 0, 0, 1082, 1083, 5, 121, 0, 0, 1083, 1084, 5, 116, 0, 0, + 1084, 1085, 5, 101, 0, 0, 1085, 1086, 5, 115, 0, 0, 1086, 1297, 5, 49, + 0, 0, 1087, 1088, 5, 98, 0, 0, 1088, 1089, 5, 121, 0, 0, 1089, 1090, 5, + 116, 0, 0, 1090, 1091, 5, 101, 0, 0, 1091, 1092, 5, 115, 0, 0, 1092, 1297, + 5, 50, 0, 0, 1093, 1094, 5, 98, 0, 0, 1094, 1095, 5, 121, 0, 0, 1095, 1096, + 5, 116, 0, 0, 1096, 1097, 5, 101, 0, 0, 1097, 1098, 5, 115, 0, 0, 1098, + 1297, 5, 51, 0, 0, 1099, 1100, 5, 98, 0, 0, 1100, 1101, 5, 121, 0, 0, 1101, + 1102, 5, 116, 0, 0, 1102, 1103, 5, 101, 0, 0, 1103, 1104, 5, 115, 0, 0, + 1104, 1297, 5, 52, 0, 0, 1105, 1106, 5, 98, 0, 0, 1106, 1107, 5, 121, 0, + 0, 1107, 1108, 5, 116, 0, 0, 1108, 1109, 5, 101, 0, 0, 1109, 1110, 5, 115, + 0, 0, 1110, 1297, 5, 53, 0, 0, 1111, 1112, 5, 98, 0, 0, 1112, 1113, 5, + 121, 0, 0, 1113, 1114, 5, 116, 0, 0, 1114, 1115, 5, 101, 0, 0, 1115, 1116, + 5, 115, 0, 0, 1116, 1297, 5, 54, 0, 0, 1117, 1118, 5, 98, 0, 0, 1118, 1119, + 5, 121, 0, 0, 1119, 1120, 5, 116, 0, 0, 1120, 1121, 5, 101, 0, 0, 1121, + 1122, 5, 115, 0, 0, 1122, 1297, 5, 55, 0, 0, 1123, 1124, 5, 98, 0, 0, 1124, + 1125, 5, 121, 0, 0, 1125, 1126, 5, 116, 0, 0, 1126, 1127, 5, 101, 0, 0, + 1127, 1128, 5, 115, 0, 0, 1128, 1297, 5, 56, 0, 0, 1129, 1130, 5, 98, 0, + 0, 1130, 1131, 5, 121, 0, 0, 1131, 1132, 5, 116, 0, 0, 1132, 1133, 5, 101, + 0, 0, 1133, 1134, 5, 115, 0, 0, 1134, 1297, 5, 57, 0, 0, 1135, 1136, 5, + 98, 0, 0, 1136, 1137, 5, 121, 0, 0, 1137, 1138, 5, 116, 0, 0, 1138, 1139, + 5, 101, 0, 0, 1139, 1140, 5, 115, 0, 0, 1140, 1141, 5, 49, 0, 0, 1141, + 1297, 5, 48, 0, 0, 1142, 1143, 5, 98, 0, 0, 1143, 1144, 5, 121, 0, 0, 1144, + 1145, 5, 116, 0, 0, 1145, 1146, 5, 101, 0, 0, 1146, 1147, 5, 115, 0, 0, + 1147, 1148, 5, 49, 0, 0, 1148, 1297, 5, 49, 0, 0, 1149, 1150, 5, 98, 0, + 0, 1150, 1151, 5, 121, 0, 0, 1151, 1152, 5, 116, 0, 0, 1152, 1153, 5, 101, + 0, 0, 1153, 1154, 5, 115, 0, 0, 1154, 1155, 5, 49, 0, 0, 1155, 1297, 5, + 50, 0, 0, 1156, 1157, 5, 98, 0, 0, 1157, 1158, 5, 121, 0, 0, 1158, 1159, + 5, 116, 0, 0, 1159, 1160, 5, 101, 0, 0, 1160, 1161, 5, 115, 0, 0, 1161, + 1162, 5, 49, 0, 0, 1162, 1297, 5, 51, 0, 0, 1163, 1164, 5, 98, 0, 0, 1164, + 1165, 5, 121, 0, 0, 1165, 1166, 5, 116, 0, 0, 1166, 1167, 5, 101, 0, 0, + 1167, 1168, 5, 115, 0, 0, 1168, 1169, 5, 49, 0, 0, 1169, 1297, 5, 52, 0, + 0, 1170, 1171, 5, 98, 0, 0, 1171, 1172, 5, 121, 0, 0, 1172, 1173, 5, 116, + 0, 0, 1173, 1174, 5, 101, 0, 0, 1174, 1175, 5, 115, 0, 0, 1175, 1176, 5, + 49, 0, 0, 1176, 1297, 5, 53, 0, 0, 1177, 1178, 5, 98, 0, 0, 1178, 1179, + 5, 121, 0, 0, 1179, 1180, 5, 116, 0, 0, 1180, 1181, 5, 101, 0, 0, 1181, + 1182, 5, 115, 0, 0, 1182, 1183, 5, 49, 0, 0, 1183, 1297, 5, 54, 0, 0, 1184, + 1185, 5, 98, 0, 0, 1185, 1186, 5, 121, 0, 0, 1186, 1187, 5, 116, 0, 0, + 1187, 1188, 5, 101, 0, 0, 1188, 1189, 5, 115, 0, 0, 1189, 1190, 5, 49, + 0, 0, 1190, 1297, 5, 55, 0, 0, 1191, 1192, 5, 98, 0, 0, 1192, 1193, 5, + 121, 0, 0, 1193, 1194, 5, 116, 0, 0, 1194, 1195, 5, 101, 0, 0, 1195, 1196, + 5, 115, 0, 0, 1196, 1197, 5, 49, 0, 0, 1197, 1297, 5, 56, 0, 0, 1198, 1199, + 5, 98, 0, 0, 1199, 1200, 5, 121, 0, 0, 1200, 1201, 5, 116, 0, 0, 1201, + 1202, 5, 101, 0, 0, 1202, 1203, 5, 115, 0, 0, 1203, 1204, 5, 49, 0, 0, + 1204, 1297, 5, 57, 0, 0, 1205, 1206, 5, 98, 0, 0, 1206, 1207, 5, 121, 0, + 0, 1207, 1208, 5, 116, 0, 0, 1208, 1209, 5, 101, 0, 0, 1209, 1210, 5, 115, + 0, 0, 1210, 1211, 5, 50, 0, 0, 1211, 1297, 5, 48, 0, 0, 1212, 1213, 5, + 98, 0, 0, 1213, 1214, 5, 121, 0, 0, 1214, 1215, 5, 116, 0, 0, 1215, 1216, + 5, 101, 0, 0, 1216, 1217, 5, 115, 0, 0, 1217, 1218, 5, 50, 0, 0, 1218, + 1297, 5, 49, 0, 0, 1219, 1220, 5, 98, 0, 0, 1220, 1221, 5, 121, 0, 0, 1221, + 1222, 5, 116, 0, 0, 1222, 1223, 5, 101, 0, 0, 1223, 1224, 5, 115, 0, 0, + 1224, 1225, 5, 50, 0, 0, 1225, 1297, 5, 50, 0, 0, 1226, 1227, 5, 98, 0, + 0, 1227, 1228, 5, 121, 0, 0, 1228, 1229, 5, 116, 0, 0, 1229, 1230, 5, 101, + 0, 0, 1230, 1231, 5, 115, 0, 0, 1231, 1232, 5, 50, 0, 0, 1232, 1297, 5, + 51, 0, 0, 1233, 1234, 5, 98, 0, 0, 1234, 1235, 5, 121, 0, 0, 1235, 1236, + 5, 116, 0, 0, 1236, 1237, 5, 101, 0, 0, 1237, 1238, 5, 115, 0, 0, 1238, + 1239, 5, 50, 0, 0, 1239, 1297, 5, 52, 0, 0, 1240, 1241, 5, 98, 0, 0, 1241, + 1242, 5, 121, 0, 0, 1242, 1243, 5, 116, 0, 0, 1243, 1244, 5, 101, 0, 0, + 1244, 1245, 5, 115, 0, 0, 1245, 1246, 5, 50, 0, 0, 1246, 1297, 5, 53, 0, + 0, 1247, 1248, 5, 98, 0, 0, 1248, 1249, 5, 121, 0, 0, 1249, 1250, 5, 116, + 0, 0, 1250, 1251, 5, 101, 0, 0, 1251, 1252, 5, 115, 0, 0, 1252, 1253, 5, + 50, 0, 0, 1253, 1297, 5, 54, 0, 0, 1254, 1255, 5, 98, 0, 0, 1255, 1256, + 5, 121, 0, 0, 1256, 1257, 5, 116, 0, 0, 1257, 1258, 5, 101, 0, 0, 1258, + 1259, 5, 115, 0, 0, 1259, 1260, 5, 50, 0, 0, 1260, 1297, 5, 55, 0, 0, 1261, + 1262, 5, 98, 0, 0, 1262, 1263, 5, 121, 0, 0, 1263, 1264, 5, 116, 0, 0, + 1264, 1265, 5, 101, 0, 0, 1265, 1266, 5, 115, 0, 0, 1266, 1267, 5, 50, + 0, 0, 1267, 1297, 5, 56, 0, 0, 1268, 1269, 5, 98, 0, 0, 1269, 1270, 5, + 121, 0, 0, 1270, 1271, 5, 116, 0, 0, 1271, 1272, 5, 101, 0, 0, 1272, 1273, + 5, 115, 0, 0, 1273, 1274, 5, 50, 0, 0, 1274, 1297, 5, 57, 0, 0, 1275, 1276, + 5, 98, 0, 0, 1276, 1277, 5, 121, 0, 0, 1277, 1278, 5, 116, 0, 0, 1278, + 1279, 5, 101, 0, 0, 1279, 1280, 5, 115, 0, 0, 1280, 1281, 5, 51, 0, 0, + 1281, 1297, 5, 48, 0, 0, 1282, 1283, 5, 98, 0, 0, 1283, 1284, 5, 121, 0, + 0, 1284, 1285, 5, 116, 0, 0, 1285, 1286, 5, 101, 0, 0, 1286, 1287, 5, 115, + 0, 0, 1287, 1288, 5, 51, 0, 0, 1288, 1297, 5, 49, 0, 0, 1289, 1290, 5, + 98, 0, 0, 1290, 1291, 5, 121, 0, 0, 1291, 1292, 5, 116, 0, 0, 1292, 1293, + 5, 101, 0, 0, 1293, 1294, 5, 115, 0, 0, 1294, 1295, 5, 51, 0, 0, 1295, + 1297, 5, 50, 0, 0, 1296, 1076, 1, 0, 0, 0, 1296, 1081, 1, 0, 0, 0, 1296, + 1087, 1, 0, 0, 0, 1296, 1093, 1, 0, 0, 0, 1296, 1099, 1, 0, 0, 0, 1296, + 1105, 1, 0, 0, 0, 1296, 1111, 1, 0, 0, 0, 1296, 1117, 1, 0, 0, 0, 1296, + 1123, 1, 0, 0, 0, 1296, 1129, 1, 0, 0, 0, 1296, 1135, 1, 0, 0, 0, 1296, + 1142, 1, 0, 0, 0, 1296, 1149, 1, 0, 0, 0, 1296, 1156, 1, 0, 0, 0, 1296, + 1163, 1, 0, 0, 0, 1296, 1170, 1, 0, 0, 0, 1296, 1177, 1, 0, 0, 0, 1296, + 1184, 1, 0, 0, 0, 1296, 1191, 1, 0, 0, 0, 1296, 1198, 1, 0, 0, 0, 1296, + 1205, 1, 0, 0, 0, 1296, 1212, 1, 0, 0, 0, 1296, 1219, 1, 0, 0, 0, 1296, + 1226, 1, 0, 0, 0, 1296, 1233, 1, 0, 0, 0, 1296, 1240, 1, 0, 0, 0, 1296, + 1247, 1, 0, 0, 0, 1296, 1254, 1, 0, 0, 0, 1296, 1261, 1, 0, 0, 0, 1296, + 1268, 1, 0, 0, 0, 1296, 1275, 1, 0, 0, 0, 1296, 1282, 1, 0, 0, 0, 1296, + 1289, 1, 0, 0, 0, 1297, 190, 1, 0, 0, 0, 1298, 1299, 5, 102, 0, 0, 1299, + 1300, 5, 105, 0, 0, 1300, 1301, 5, 120, 0, 0, 1301, 1302, 5, 101, 0, 0, + 1302, 1321, 5, 100, 0, 0, 1303, 1304, 5, 102, 0, 0, 1304, 1305, 5, 105, + 0, 0, 1305, 1306, 5, 120, 0, 0, 1306, 1307, 5, 101, 0, 0, 1307, 1308, 5, + 100, 0, 0, 1308, 1310, 1, 0, 0, 0, 1309, 1311, 7, 0, 0, 0, 1310, 1309, + 1, 0, 0, 0, 1311, 1312, 1, 0, 0, 0, 1312, 1310, 1, 0, 0, 0, 1312, 1313, + 1, 0, 0, 0, 1313, 1314, 1, 0, 0, 0, 1314, 1316, 5, 120, 0, 0, 1315, 1317, + 7, 0, 0, 0, 1316, 1315, 1, 0, 0, 0, 1317, 1318, 1, 0, 0, 0, 1318, 1316, + 1, 0, 0, 0, 1318, 1319, 1, 0, 0, 0, 1319, 1321, 1, 0, 0, 0, 1320, 1298, + 1, 0, 0, 0, 1320, 1303, 1, 0, 0, 0, 1321, 192, 1, 0, 0, 0, 1322, 1323, + 5, 117, 0, 0, 1323, 1324, 5, 102, 0, 0, 1324, 1325, 5, 105, 0, 0, 1325, + 1326, 5, 120, 0, 0, 1326, 1327, 5, 101, 0, 0, 1327, 1347, 5, 100, 0, 0, + 1328, 1329, 5, 117, 0, 0, 1329, 1330, 5, 102, 0, 0, 1330, 1331, 5, 105, + 0, 0, 1331, 1332, 5, 120, 0, 0, 1332, 1333, 5, 101, 0, 0, 1333, 1334, 5, + 100, 0, 0, 1334, 1336, 1, 0, 0, 0, 1335, 1337, 7, 0, 0, 0, 1336, 1335, + 1, 0, 0, 0, 1337, 1338, 1, 0, 0, 0, 1338, 1336, 1, 0, 0, 0, 1338, 1339, + 1, 0, 0, 0, 1339, 1340, 1, 0, 0, 0, 1340, 1342, 5, 120, 0, 0, 1341, 1343, + 7, 0, 0, 0, 1342, 1341, 1, 0, 0, 0, 1343, 1344, 1, 0, 0, 0, 1344, 1342, + 1, 0, 0, 0, 1344, 1345, 1, 0, 0, 0, 1345, 1347, 1, 0, 0, 0, 1346, 1322, + 1, 0, 0, 0, 1346, 1328, 1, 0, 0, 0, 1347, 194, 1, 0, 0, 0, 1348, 1349, + 5, 116, 0, 0, 1349, 1350, 5, 114, 0, 0, 1350, 1351, 5, 117, 0, 0, 1351, + 1358, 5, 101, 0, 0, 1352, 1353, 5, 102, 0, 0, 1353, 1354, 5, 97, 0, 0, + 1354, 1355, 5, 108, 0, 0, 1355, 1356, 5, 115, 0, 0, 1356, 1358, 5, 101, + 0, 0, 1357, 1348, 1, 0, 0, 0, 1357, 1352, 1, 0, 0, 0, 1358, 196, 1, 0, + 0, 0, 1359, 1366, 3, 199, 99, 0, 1360, 1362, 3, 199, 99, 0, 1361, 1360, + 1, 0, 0, 0, 1361, 1362, 1, 0, 0, 0, 1362, 1363, 1, 0, 0, 0, 1363, 1364, + 5, 46, 0, 0, 1364, 1366, 3, 199, 99, 0, 1365, 1359, 1, 0, 0, 0, 1365, 1361, + 1, 0, 0, 0, 1366, 1372, 1, 0, 0, 0, 1367, 1369, 7, 1, 0, 0, 1368, 1370, + 5, 45, 0, 0, 1369, 1368, 1, 0, 0, 0, 1369, 1370, 1, 0, 0, 0, 1370, 1371, + 1, 0, 0, 0, 1371, 1373, 3, 199, 99, 0, 1372, 1367, 1, 0, 0, 0, 1372, 1373, + 1, 0, 0, 0, 1373, 198, 1, 0, 0, 0, 1374, 1381, 7, 0, 0, 0, 1375, 1377, + 5, 95, 0, 0, 1376, 1375, 1, 0, 0, 0, 1376, 1377, 1, 0, 0, 0, 1377, 1378, + 1, 0, 0, 0, 1378, 1380, 7, 0, 0, 0, 1379, 1376, 1, 0, 0, 0, 1380, 1383, + 1, 0, 0, 0, 1381, 1379, 1, 0, 0, 0, 1381, 1382, 1, 0, 0, 0, 1382, 200, + 1, 0, 0, 0, 1383, 1381, 1, 0, 0, 0, 1384, 1385, 5, 48, 0, 0, 1385, 1386, + 7, 2, 0, 0, 1386, 1387, 3, 203, 101, 0, 1387, 202, 1, 0, 0, 0, 1388, 1395, + 3, 211, 105, 0, 1389, 1391, 5, 95, 0, 0, 1390, 1389, 1, 0, 0, 0, 1390, + 1391, 1, 0, 0, 0, 1391, 1392, 1, 0, 0, 0, 1392, 1394, 3, 211, 105, 0, 1393, + 1390, 1, 0, 0, 0, 1394, 1397, 1, 0, 0, 0, 1395, 1393, 1, 0, 0, 0, 1395, + 1396, 1, 0, 0, 0, 1396, 204, 1, 0, 0, 0, 1397, 1395, 1, 0, 0, 0, 1398, + 1399, 5, 119, 0, 0, 1399, 1400, 5, 101, 0, 0, 1400, 1451, 5, 105, 0, 0, + 1401, 1402, 5, 115, 0, 0, 1402, 1403, 5, 122, 0, 0, 1403, 1404, 5, 97, + 0, 0, 1404, 1405, 5, 98, 0, 0, 1405, 1451, 5, 111, 0, 0, 1406, 1407, 5, + 102, 0, 0, 1407, 1408, 5, 105, 0, 0, 1408, 1409, 5, 110, 0, 0, 1409, 1410, + 5, 110, 0, 0, 1410, 1411, 5, 101, 0, 0, 1411, 1451, 5, 121, 0, 0, 1412, + 1413, 5, 101, 0, 0, 1413, 1414, 5, 116, 0, 0, 1414, 1415, 5, 104, 0, 0, + 1415, 1416, 5, 101, 0, 0, 1416, 1451, 5, 114, 0, 0, 1417, 1418, 5, 115, + 0, 0, 1418, 1419, 5, 101, 0, 0, 1419, 1420, 5, 99, 0, 0, 1420, 1421, 5, + 111, 0, 0, 1421, 1422, 5, 110, 0, 0, 1422, 1423, 5, 100, 0, 0, 1423, 1451, + 5, 115, 0, 0, 1424, 1425, 5, 109, 0, 0, 1425, 1426, 5, 105, 0, 0, 1426, + 1427, 5, 110, 0, 0, 1427, 1428, 5, 117, 0, 0, 1428, 1429, 5, 116, 0, 0, + 1429, 1430, 5, 101, 0, 0, 1430, 1451, 5, 115, 0, 0, 1431, 1432, 5, 104, + 0, 0, 1432, 1433, 5, 111, 0, 0, 1433, 1434, 5, 117, 0, 0, 1434, 1435, 5, + 114, 0, 0, 1435, 1451, 5, 115, 0, 0, 1436, 1437, 5, 100, 0, 0, 1437, 1438, + 5, 97, 0, 0, 1438, 1439, 5, 121, 0, 0, 1439, 1451, 5, 115, 0, 0, 1440, + 1441, 5, 119, 0, 0, 1441, 1442, 5, 101, 0, 0, 1442, 1443, 5, 101, 0, 0, + 1443, 1444, 5, 107, 0, 0, 1444, 1451, 5, 115, 0, 0, 1445, 1446, 5, 121, + 0, 0, 1446, 1447, 5, 101, 0, 0, 1447, 1448, 5, 97, 0, 0, 1448, 1449, 5, + 114, 0, 0, 1449, 1451, 5, 115, 0, 0, 1450, 1398, 1, 0, 0, 0, 1450, 1401, + 1, 0, 0, 0, 1450, 1406, 1, 0, 0, 0, 1450, 1412, 1, 0, 0, 0, 1450, 1417, + 1, 0, 0, 0, 1450, 1424, 1, 0, 0, 0, 1450, 1431, 1, 0, 0, 0, 1450, 1436, + 1, 0, 0, 0, 1450, 1440, 1, 0, 0, 0, 1450, 1445, 1, 0, 0, 0, 1451, 206, + 1, 0, 0, 0, 1452, 1453, 5, 104, 0, 0, 1453, 1454, 5, 101, 0, 0, 1454, 1455, + 5, 120, 0, 0, 1455, 1466, 1, 0, 0, 0, 1456, 1458, 5, 34, 0, 0, 1457, 1459, + 3, 203, 101, 0, 1458, 1457, 1, 0, 0, 0, 1458, 1459, 1, 0, 0, 0, 1459, 1460, + 1, 0, 0, 0, 1460, 1467, 5, 34, 0, 0, 1461, 1463, 5, 39, 0, 0, 1462, 1464, + 3, 203, 101, 0, 1463, 1462, 1, 0, 0, 0, 1463, 1464, 1, 0, 0, 0, 1464, 1465, + 1, 0, 0, 0, 1465, 1467, 5, 39, 0, 0, 1466, 1456, 1, 0, 0, 0, 1466, 1461, + 1, 0, 0, 0, 1467, 208, 1, 0, 0, 0, 1468, 1469, 3, 211, 105, 0, 1469, 1470, + 3, 211, 105, 0, 1470, 210, 1, 0, 0, 0, 1471, 1472, 7, 3, 0, 0, 1472, 212, + 1, 0, 0, 0, 1473, 1474, 5, 97, 0, 0, 1474, 1475, 5, 102, 0, 0, 1475, 1476, + 5, 116, 0, 0, 1476, 1477, 5, 101, 0, 0, 1477, 1546, 5, 114, 0, 0, 1478, + 1479, 5, 99, 0, 0, 1479, 1480, 5, 97, 0, 0, 1480, 1481, 5, 115, 0, 0, 1481, + 1546, 5, 101, 0, 0, 1482, 1483, 5, 100, 0, 0, 1483, 1484, 5, 101, 0, 0, + 1484, 1485, 5, 102, 0, 0, 1485, 1486, 5, 97, 0, 0, 1486, 1487, 5, 117, + 0, 0, 1487, 1488, 5, 108, 0, 0, 1488, 1546, 5, 116, 0, 0, 1489, 1490, 5, + 102, 0, 0, 1490, 1491, 5, 105, 0, 0, 1491, 1492, 5, 110, 0, 0, 1492, 1493, + 5, 97, 0, 0, 1493, 1546, 5, 108, 0, 0, 1494, 1495, 5, 105, 0, 0, 1495, + 1546, 5, 110, 0, 0, 1496, 1497, 5, 105, 0, 0, 1497, 1498, 5, 110, 0, 0, + 1498, 1499, 5, 108, 0, 0, 1499, 1500, 5, 105, 0, 0, 1500, 1501, 5, 110, + 0, 0, 1501, 1546, 5, 101, 0, 0, 1502, 1503, 5, 108, 0, 0, 1503, 1504, 5, + 101, 0, 0, 1504, 1546, 5, 116, 0, 0, 1505, 1506, 5, 109, 0, 0, 1506, 1507, + 5, 97, 0, 0, 1507, 1508, 5, 116, 0, 0, 1508, 1509, 5, 99, 0, 0, 1509, 1546, + 5, 104, 0, 0, 1510, 1511, 5, 110, 0, 0, 1511, 1512, 5, 117, 0, 0, 1512, + 1513, 5, 108, 0, 0, 1513, 1546, 5, 108, 0, 0, 1514, 1515, 5, 111, 0, 0, + 1515, 1546, 5, 102, 0, 0, 1516, 1517, 5, 114, 0, 0, 1517, 1518, 5, 101, + 0, 0, 1518, 1519, 5, 108, 0, 0, 1519, 1520, 5, 111, 0, 0, 1520, 1521, 5, + 99, 0, 0, 1521, 1522, 5, 97, 0, 0, 1522, 1523, 5, 116, 0, 0, 1523, 1524, + 5, 97, 0, 0, 1524, 1525, 5, 98, 0, 0, 1525, 1526, 5, 108, 0, 0, 1526, 1546, + 5, 101, 0, 0, 1527, 1528, 5, 115, 0, 0, 1528, 1529, 5, 116, 0, 0, 1529, + 1530, 5, 97, 0, 0, 1530, 1531, 5, 116, 0, 0, 1531, 1532, 5, 105, 0, 0, + 1532, 1546, 5, 99, 0, 0, 1533, 1534, 5, 115, 0, 0, 1534, 1535, 5, 119, + 0, 0, 1535, 1536, 5, 105, 0, 0, 1536, 1537, 5, 116, 0, 0, 1537, 1538, 5, + 99, 0, 0, 1538, 1546, 5, 104, 0, 0, 1539, 1540, 5, 116, 0, 0, 1540, 1541, + 5, 121, 0, 0, 1541, 1542, 5, 112, 0, 0, 1542, 1543, 5, 101, 0, 0, 1543, + 1544, 5, 111, 0, 0, 1544, 1546, 5, 102, 0, 0, 1545, 1473, 1, 0, 0, 0, 1545, + 1478, 1, 0, 0, 0, 1545, 1482, 1, 0, 0, 0, 1545, 1489, 1, 0, 0, 0, 1545, + 1494, 1, 0, 0, 0, 1545, 1496, 1, 0, 0, 0, 1545, 1502, 1, 0, 0, 0, 1545, + 1505, 1, 0, 0, 0, 1545, 1510, 1, 0, 0, 0, 1545, 1514, 1, 0, 0, 0, 1545, + 1516, 1, 0, 0, 0, 1545, 1527, 1, 0, 0, 0, 1545, 1533, 1, 0, 0, 0, 1545, + 1539, 1, 0, 0, 0, 1546, 214, 1, 0, 0, 0, 1547, 1548, 5, 97, 0, 0, 1548, + 1549, 5, 110, 0, 0, 1549, 1550, 5, 111, 0, 0, 1550, 1551, 5, 110, 0, 0, + 1551, 1552, 5, 121, 0, 0, 1552, 1553, 5, 109, 0, 0, 1553, 1554, 5, 111, + 0, 0, 1554, 1555, 5, 117, 0, 0, 1555, 1556, 5, 115, 0, 0, 1556, 216, 1, + 0, 0, 0, 1557, 1558, 5, 98, 0, 0, 1558, 1559, 5, 114, 0, 0, 1559, 1560, + 5, 101, 0, 0, 1560, 1561, 5, 97, 0, 0, 1561, 1562, 5, 107, 0, 0, 1562, + 218, 1, 0, 0, 0, 1563, 1564, 5, 99, 0, 0, 1564, 1565, 5, 111, 0, 0, 1565, + 1566, 5, 110, 0, 0, 1566, 1567, 5, 115, 0, 0, 1567, 1568, 5, 116, 0, 0, + 1568, 1569, 5, 97, 0, 0, 1569, 1570, 5, 110, 0, 0, 1570, 1571, 5, 116, + 0, 0, 1571, 220, 1, 0, 0, 0, 1572, 1573, 5, 105, 0, 0, 1573, 1574, 5, 109, + 0, 0, 1574, 1575, 5, 109, 0, 0, 1575, 1576, 5, 117, 0, 0, 1576, 1577, 5, + 116, 0, 0, 1577, 1578, 5, 97, 0, 0, 1578, 1579, 5, 98, 0, 0, 1579, 1580, + 5, 108, 0, 0, 1580, 1581, 5, 101, 0, 0, 1581, 222, 1, 0, 0, 0, 1582, 1583, + 5, 99, 0, 0, 1583, 1584, 5, 111, 0, 0, 1584, 1585, 5, 110, 0, 0, 1585, + 1586, 5, 116, 0, 0, 1586, 1587, 5, 105, 0, 0, 1587, 1588, 5, 110, 0, 0, + 1588, 1589, 5, 117, 0, 0, 1589, 1590, 5, 101, 0, 0, 1590, 224, 1, 0, 0, + 0, 1591, 1592, 5, 108, 0, 0, 1592, 1593, 5, 101, 0, 0, 1593, 1594, 5, 97, + 0, 0, 1594, 1595, 5, 118, 0, 0, 1595, 1596, 5, 101, 0, 0, 1596, 226, 1, + 0, 0, 0, 1597, 1598, 5, 101, 0, 0, 1598, 1599, 5, 120, 0, 0, 1599, 1600, + 5, 116, 0, 0, 1600, 1601, 5, 101, 0, 0, 1601, 1602, 5, 114, 0, 0, 1602, + 1603, 5, 110, 0, 0, 1603, 1604, 5, 97, 0, 0, 1604, 1605, 5, 108, 0, 0, + 1605, 228, 1, 0, 0, 0, 1606, 1607, 5, 105, 0, 0, 1607, 1608, 5, 110, 0, + 0, 1608, 1609, 5, 100, 0, 0, 1609, 1610, 5, 101, 0, 0, 1610, 1611, 5, 120, + 0, 0, 1611, 1612, 5, 101, 0, 0, 1612, 1613, 5, 100, 0, 0, 1613, 230, 1, + 0, 0, 0, 1614, 1615, 5, 105, 0, 0, 1615, 1616, 5, 110, 0, 0, 1616, 1617, + 5, 116, 0, 0, 1617, 1618, 5, 101, 0, 0, 1618, 1619, 5, 114, 0, 0, 1619, + 1620, 5, 110, 0, 0, 1620, 1621, 5, 97, 0, 0, 1621, 1622, 5, 108, 0, 0, + 1622, 232, 1, 0, 0, 0, 1623, 1624, 5, 112, 0, 0, 1624, 1625, 5, 97, 0, + 0, 1625, 1626, 5, 121, 0, 0, 1626, 1627, 5, 97, 0, 0, 1627, 1628, 5, 98, + 0, 0, 1628, 1629, 5, 108, 0, 0, 1629, 1630, 5, 101, 0, 0, 1630, 234, 1, + 0, 0, 0, 1631, 1632, 5, 112, 0, 0, 1632, 1633, 5, 114, 0, 0, 1633, 1634, + 5, 105, 0, 0, 1634, 1635, 5, 118, 0, 0, 1635, 1636, 5, 97, 0, 0, 1636, + 1637, 5, 116, 0, 0, 1637, 1638, 5, 101, 0, 0, 1638, 236, 1, 0, 0, 0, 1639, + 1640, 5, 112, 0, 0, 1640, 1641, 5, 117, 0, 0, 1641, 1642, 5, 98, 0, 0, + 1642, 1643, 5, 108, 0, 0, 1643, 1644, 5, 105, 0, 0, 1644, 1645, 5, 99, + 0, 0, 1645, 238, 1, 0, 0, 0, 1646, 1647, 5, 118, 0, 0, 1647, 1648, 5, 105, + 0, 0, 1648, 1649, 5, 114, 0, 0, 1649, 1650, 5, 116, 0, 0, 1650, 1651, 5, + 117, 0, 0, 1651, 1652, 5, 97, 0, 0, 1652, 1653, 5, 108, 0, 0, 1653, 240, + 1, 0, 0, 0, 1654, 1655, 5, 112, 0, 0, 1655, 1656, 5, 117, 0, 0, 1656, 1657, + 5, 114, 0, 0, 1657, 1658, 5, 101, 0, 0, 1658, 242, 1, 0, 0, 0, 1659, 1660, + 5, 116, 0, 0, 1660, 1661, 5, 121, 0, 0, 1661, 1662, 5, 112, 0, 0, 1662, + 1663, 5, 101, 0, 0, 1663, 244, 1, 0, 0, 0, 1664, 1665, 5, 118, 0, 0, 1665, + 1666, 5, 105, 0, 0, 1666, 1667, 5, 101, 0, 0, 1667, 1668, 5, 119, 0, 0, + 1668, 246, 1, 0, 0, 0, 1669, 1670, 5, 99, 0, 0, 1670, 1671, 5, 111, 0, + 0, 1671, 1672, 5, 110, 0, 0, 1672, 1673, 5, 115, 0, 0, 1673, 1674, 5, 116, + 0, 0, 1674, 1675, 5, 114, 0, 0, 1675, 1676, 5, 117, 0, 0, 1676, 1677, 5, + 99, 0, 0, 1677, 1678, 5, 116, 0, 0, 1678, 1679, 5, 111, 0, 0, 1679, 1680, + 5, 114, 0, 0, 1680, 248, 1, 0, 0, 0, 1681, 1682, 5, 102, 0, 0, 1682, 1683, + 5, 97, 0, 0, 1683, 1684, 5, 108, 0, 0, 1684, 1685, 5, 108, 0, 0, 1685, + 1686, 5, 98, 0, 0, 1686, 1687, 5, 97, 0, 0, 1687, 1688, 5, 99, 0, 0, 1688, + 1689, 5, 107, 0, 0, 1689, 250, 1, 0, 0, 0, 1690, 1691, 5, 114, 0, 0, 1691, + 1692, 5, 101, 0, 0, 1692, 1693, 5, 99, 0, 0, 1693, 1694, 5, 101, 0, 0, + 1694, 1695, 5, 105, 0, 0, 1695, 1696, 5, 118, 0, 0, 1696, 1697, 5, 101, + 0, 0, 1697, 252, 1, 0, 0, 0, 1698, 1702, 3, 255, 127, 0, 1699, 1701, 3, + 257, 128, 0, 1700, 1699, 1, 0, 0, 0, 1701, 1704, 1, 0, 0, 0, 1702, 1700, + 1, 0, 0, 0, 1702, 1703, 1, 0, 0, 0, 1703, 254, 1, 0, 0, 0, 1704, 1702, + 1, 0, 0, 0, 1705, 1706, 7, 4, 0, 0, 1706, 256, 1, 0, 0, 0, 1707, 1708, + 7, 5, 0, 0, 1708, 258, 1, 0, 0, 0, 1709, 1713, 5, 34, 0, 0, 1710, 1712, + 3, 261, 130, 0, 1711, 1710, 1, 0, 0, 0, 1712, 1715, 1, 0, 0, 0, 1713, 1711, + 1, 0, 0, 0, 1713, 1714, 1, 0, 0, 0, 1714, 1716, 1, 0, 0, 0, 1715, 1713, + 1, 0, 0, 0, 1716, 1726, 5, 34, 0, 0, 1717, 1721, 5, 39, 0, 0, 1718, 1720, + 3, 263, 131, 0, 1719, 1718, 1, 0, 0, 0, 1720, 1723, 1, 0, 0, 0, 1721, 1719, + 1, 0, 0, 0, 1721, 1722, 1, 0, 0, 0, 1722, 1724, 1, 0, 0, 0, 1723, 1721, + 1, 0, 0, 0, 1724, 1726, 5, 39, 0, 0, 1725, 1709, 1, 0, 0, 0, 1725, 1717, + 1, 0, 0, 0, 1726, 260, 1, 0, 0, 0, 1727, 1731, 8, 6, 0, 0, 1728, 1729, + 5, 92, 0, 0, 1729, 1731, 9, 0, 0, 0, 1730, 1727, 1, 0, 0, 0, 1730, 1728, + 1, 0, 0, 0, 1731, 262, 1, 0, 0, 0, 1732, 1736, 8, 7, 0, 0, 1733, 1734, + 5, 92, 0, 0, 1734, 1736, 9, 0, 0, 0, 1735, 1732, 1, 0, 0, 0, 1735, 1733, + 1, 0, 0, 0, 1736, 264, 1, 0, 0, 0, 1737, 1739, 7, 0, 0, 0, 1738, 1737, + 1, 0, 0, 0, 1739, 1740, 1, 0, 0, 0, 1740, 1738, 1, 0, 0, 0, 1740, 1741, + 1, 0, 0, 0, 1741, 1742, 1, 0, 0, 0, 1742, 1744, 5, 46, 0, 0, 1743, 1745, + 7, 0, 0, 0, 1744, 1743, 1, 0, 0, 0, 1745, 1746, 1, 0, 0, 0, 1746, 1744, + 1, 0, 0, 0, 1746, 1747, 1, 0, 0, 0, 1747, 1754, 1, 0, 0, 0, 1748, 1750, + 5, 46, 0, 0, 1749, 1751, 7, 0, 0, 0, 1750, 1749, 1, 0, 0, 0, 1751, 1752, + 1, 0, 0, 0, 1752, 1750, 1, 0, 0, 0, 1752, 1753, 1, 0, 0, 0, 1753, 1755, + 1, 0, 0, 0, 1754, 1748, 1, 0, 0, 0, 1754, 1755, 1, 0, 0, 0, 1755, 266, + 1, 0, 0, 0, 1756, 1758, 7, 8, 0, 0, 1757, 1756, 1, 0, 0, 0, 1758, 1759, + 1, 0, 0, 0, 1759, 1757, 1, 0, 0, 0, 1759, 1760, 1, 0, 0, 0, 1760, 1761, + 1, 0, 0, 0, 1761, 1762, 6, 133, 0, 0, 1762, 268, 1, 0, 0, 0, 1763, 1764, + 5, 47, 0, 0, 1764, 1765, 5, 42, 0, 0, 1765, 1769, 1, 0, 0, 0, 1766, 1768, + 9, 0, 0, 0, 1767, 1766, 1, 0, 0, 0, 1768, 1771, 1, 0, 0, 0, 1769, 1770, + 1, 0, 0, 0, 1769, 1767, 1, 0, 0, 0, 1770, 1772, 1, 0, 0, 0, 1771, 1769, + 1, 0, 0, 0, 1772, 1773, 5, 42, 0, 0, 1773, 1774, 5, 47, 0, 0, 1774, 1775, + 1, 0, 0, 0, 1775, 1776, 6, 134, 1, 0, 1776, 270, 1, 0, 0, 0, 1777, 1778, + 5, 47, 0, 0, 1778, 1779, 5, 47, 0, 0, 1779, 1783, 1, 0, 0, 0, 1780, 1782, + 8, 9, 0, 0, 1781, 1780, 1, 0, 0, 0, 1782, 1785, 1, 0, 0, 0, 1783, 1781, + 1, 0, 0, 0, 1783, 1784, 1, 0, 0, 0, 1784, 1786, 1, 0, 0, 0, 1785, 1783, + 1, 0, 0, 0, 1786, 1787, 6, 135, 1, 0, 1787, 272, 1, 0, 0, 0, 37, 0, 857, + 1074, 1296, 1312, 1318, 1320, 1338, 1344, 1346, 1357, 1361, 1365, 1369, + 1372, 1376, 1381, 1390, 1395, 1450, 1458, 1463, 1466, 1545, 1702, 1713, + 1721, 1725, 1730, 1735, 1740, 1746, 1752, 1754, 1759, 1769, 1783, 2, 6, + 0, 0, 0, 1, 0, +} + deserializer := antlr.NewATNDeserializer(nil) + staticData.atn = deserializer.Deserialize(staticData.serializedATN) + atn := staticData.atn + staticData.decisionToDFA = make([]*antlr.DFA, len(atn.DecisionToState)) + decisionToDFA := staticData.decisionToDFA + for index, state := range atn.DecisionToState { + decisionToDFA[index] = antlr.NewDFA(state, index) + } +} + +// SolidityLexerInit initializes any static state used to implement SolidityLexer. By default the +// static state used to implement the lexer is lazily initialized during the first call to +// NewSolidityLexer(). You can call this function if you wish to initialize the static state ahead +// of time. +func SolidityLexerInit() { + staticData := &soliditylexerLexerStaticData + staticData.once.Do(soliditylexerLexerInit) +} + +// NewSolidityLexer produces a new lexer instance for the optional input antlr.CharStream. +func NewSolidityLexer(input antlr.CharStream) *SolidityLexer { + SolidityLexerInit() + l := new(SolidityLexer) + l.BaseLexer = antlr.NewBaseLexer(input) + staticData := &soliditylexerLexerStaticData + l.Interpreter = antlr.NewLexerATNSimulator(l, staticData.atn, staticData.decisionToDFA, staticData.predictionContextCache) + l.channelNames = staticData.channelNames + l.modeNames = staticData.modeNames + l.RuleNames = staticData.ruleNames + l.LiteralNames = staticData.literalNames + l.SymbolicNames = staticData.symbolicNames + l.GrammarFileName = "Solidity.g4" + // TODO: l.EOF = antlr.TokenEOF + + return l +} + +// SolidityLexer tokens. +const ( + SolidityLexerT__0 = 1 + SolidityLexerT__1 = 2 + SolidityLexerT__2 = 3 + SolidityLexerT__3 = 4 + SolidityLexerT__4 = 5 + SolidityLexerT__5 = 6 + SolidityLexerT__6 = 7 + SolidityLexerT__7 = 8 + SolidityLexerT__8 = 9 + SolidityLexerT__9 = 10 + SolidityLexerT__10 = 11 + SolidityLexerT__11 = 12 + SolidityLexerT__12 = 13 + SolidityLexerT__13 = 14 + SolidityLexerT__14 = 15 + SolidityLexerT__15 = 16 + SolidityLexerT__16 = 17 + SolidityLexerT__17 = 18 + SolidityLexerT__18 = 19 + SolidityLexerT__19 = 20 + SolidityLexerT__20 = 21 + SolidityLexerT__21 = 22 + SolidityLexerT__22 = 23 + SolidityLexerT__23 = 24 + SolidityLexerT__24 = 25 + SolidityLexerT__25 = 26 + SolidityLexerT__26 = 27 + SolidityLexerT__27 = 28 + SolidityLexerT__28 = 29 + SolidityLexerT__29 = 30 + SolidityLexerT__30 = 31 + SolidityLexerT__31 = 32 + SolidityLexerT__32 = 33 + SolidityLexerT__33 = 34 + SolidityLexerT__34 = 35 + SolidityLexerT__35 = 36 + SolidityLexerT__36 = 37 + SolidityLexerT__37 = 38 + SolidityLexerT__38 = 39 + SolidityLexerT__39 = 40 + SolidityLexerT__40 = 41 + SolidityLexerT__41 = 42 + SolidityLexerT__42 = 43 + SolidityLexerT__43 = 44 + SolidityLexerT__44 = 45 + SolidityLexerT__45 = 46 + SolidityLexerT__46 = 47 + SolidityLexerT__47 = 48 + SolidityLexerT__48 = 49 + SolidityLexerT__49 = 50 + SolidityLexerT__50 = 51 + SolidityLexerT__51 = 52 + SolidityLexerT__52 = 53 + SolidityLexerT__53 = 54 + SolidityLexerT__54 = 55 + SolidityLexerT__55 = 56 + SolidityLexerT__56 = 57 + SolidityLexerT__57 = 58 + SolidityLexerT__58 = 59 + SolidityLexerT__59 = 60 + SolidityLexerT__60 = 61 + SolidityLexerT__61 = 62 + SolidityLexerT__62 = 63 + SolidityLexerT__63 = 64 + SolidityLexerT__64 = 65 + SolidityLexerT__65 = 66 + SolidityLexerT__66 = 67 + SolidityLexerT__67 = 68 + SolidityLexerT__68 = 69 + SolidityLexerT__69 = 70 + SolidityLexerT__70 = 71 + SolidityLexerT__71 = 72 + SolidityLexerT__72 = 73 + SolidityLexerT__73 = 74 + SolidityLexerT__74 = 75 + SolidityLexerT__75 = 76 + SolidityLexerT__76 = 77 + SolidityLexerT__77 = 78 + SolidityLexerT__78 = 79 + SolidityLexerT__79 = 80 + SolidityLexerT__80 = 81 + SolidityLexerT__81 = 82 + SolidityLexerT__82 = 83 + SolidityLexerT__83 = 84 + SolidityLexerT__84 = 85 + SolidityLexerT__85 = 86 + SolidityLexerT__86 = 87 + SolidityLexerT__87 = 88 + SolidityLexerT__88 = 89 + SolidityLexerT__89 = 90 + SolidityLexerT__90 = 91 + SolidityLexerT__91 = 92 + SolidityLexerInt = 93 + SolidityLexerUint = 94 + SolidityLexerByte = 95 + SolidityLexerFixed = 96 + SolidityLexerUfixed = 97 + SolidityLexerBooleanLiteral = 98 + SolidityLexerDecimalNumber = 99 + SolidityLexerHexNumber = 100 + SolidityLexerNumberUnit = 101 + SolidityLexerHexLiteralFragment = 102 + SolidityLexerReservedKeyword = 103 + SolidityLexerAnonymousKeyword = 104 + SolidityLexerBreakKeyword = 105 + SolidityLexerConstantKeyword = 106 + SolidityLexerImmutableKeyword = 107 + SolidityLexerContinueKeyword = 108 + SolidityLexerLeaveKeyword = 109 + SolidityLexerExternalKeyword = 110 + SolidityLexerIndexedKeyword = 111 + SolidityLexerInternalKeyword = 112 + SolidityLexerPayableKeyword = 113 + SolidityLexerPrivateKeyword = 114 + SolidityLexerPublicKeyword = 115 + SolidityLexerVirtualKeyword = 116 + SolidityLexerPureKeyword = 117 + SolidityLexerTypeKeyword = 118 + SolidityLexerViewKeyword = 119 + SolidityLexerConstructorKeyword = 120 + SolidityLexerFallbackKeyword = 121 + SolidityLexerReceiveKeyword = 122 + SolidityLexerIdentifier = 123 + SolidityLexerStringLiteralFragment = 124 + SolidityLexerVersionLiteral = 125 + SolidityLexerWS = 126 + SolidityLexerCOMMENT = 127 + SolidityLexerLINE_COMMENT = 128 +) + diff --git a/parser/solidity_listener.go b/parser/solidity_listener.go new file mode 100644 index 0000000..a929fe4 --- /dev/null +++ b/parser/solidity_listener.go @@ -0,0 +1,538 @@ +// Code generated from ./parser/Solidity.g4 by ANTLR 4.10.1. DO NOT EDIT. + +package parser // Solidity + +import "github.com/antlr/antlr4/runtime/Go/antlr" + +// SolidityListener is a complete listener for a parse tree produced by SolidityParser. +type SolidityListener interface { + antlr.ParseTreeListener + + // EnterSourceUnit is called when entering the sourceUnit production. + EnterSourceUnit(c *SourceUnitContext) + + // EnterPragmaDirective is called when entering the pragmaDirective production. + EnterPragmaDirective(c *PragmaDirectiveContext) + + // EnterPragmaName is called when entering the pragmaName production. + EnterPragmaName(c *PragmaNameContext) + + // EnterPragmaValue is called when entering the pragmaValue production. + EnterPragmaValue(c *PragmaValueContext) + + // EnterVersion is called when entering the version production. + EnterVersion(c *VersionContext) + + // EnterVersionConstraint is called when entering the versionConstraint production. + EnterVersionConstraint(c *VersionConstraintContext) + + // EnterVersionOperator is called when entering the versionOperator production. + EnterVersionOperator(c *VersionOperatorContext) + + // EnterImportDirective is called when entering the importDirective production. + EnterImportDirective(c *ImportDirectiveContext) + + // EnterImportDeclaration is called when entering the importDeclaration production. + EnterImportDeclaration(c *ImportDeclarationContext) + + // EnterContractDefinition is called when entering the contractDefinition production. + EnterContractDefinition(c *ContractDefinitionContext) + + // EnterInheritanceSpecifier is called when entering the inheritanceSpecifier production. + EnterInheritanceSpecifier(c *InheritanceSpecifierContext) + + // EnterContractPart is called when entering the contractPart production. + EnterContractPart(c *ContractPartContext) + + // EnterStateVariableDeclaration is called when entering the stateVariableDeclaration production. + EnterStateVariableDeclaration(c *StateVariableDeclarationContext) + + // EnterOverrideSpecifier is called when entering the overrideSpecifier production. + EnterOverrideSpecifier(c *OverrideSpecifierContext) + + // EnterUsingForDeclaration is called when entering the usingForDeclaration production. + EnterUsingForDeclaration(c *UsingForDeclarationContext) + + // EnterStructDefinition is called when entering the structDefinition production. + EnterStructDefinition(c *StructDefinitionContext) + + // EnterModifierDefinition is called when entering the modifierDefinition production. + EnterModifierDefinition(c *ModifierDefinitionContext) + + // EnterFunctionDefinition is called when entering the functionDefinition production. + EnterFunctionDefinition(c *FunctionDefinitionContext) + + // EnterFunctionDescriptor is called when entering the functionDescriptor production. + EnterFunctionDescriptor(c *FunctionDescriptorContext) + + // EnterReturnParameters is called when entering the returnParameters production. + EnterReturnParameters(c *ReturnParametersContext) + + // EnterModifierList is called when entering the modifierList production. + EnterModifierList(c *ModifierListContext) + + // EnterModifierInvocation is called when entering the modifierInvocation production. + EnterModifierInvocation(c *ModifierInvocationContext) + + // EnterEventDefinition is called when entering the eventDefinition production. + EnterEventDefinition(c *EventDefinitionContext) + + // EnterEnumDefinition is called when entering the enumDefinition production. + EnterEnumDefinition(c *EnumDefinitionContext) + + // EnterEnumValue is called when entering the enumValue production. + EnterEnumValue(c *EnumValueContext) + + // EnterParameterList is called when entering the parameterList production. + EnterParameterList(c *ParameterListContext) + + // EnterParameter is called when entering the parameter production. + EnterParameter(c *ParameterContext) + + // EnterEventParameterList is called when entering the eventParameterList production. + EnterEventParameterList(c *EventParameterListContext) + + // EnterEventParameter is called when entering the eventParameter production. + EnterEventParameter(c *EventParameterContext) + + // EnterVariableDeclaration is called when entering the variableDeclaration production. + EnterVariableDeclaration(c *VariableDeclarationContext) + + // EnterTypeName is called when entering the typeName production. + EnterTypeName(c *TypeNameContext) + + // EnterUserDefinedTypeName is called when entering the userDefinedTypeName production. + EnterUserDefinedTypeName(c *UserDefinedTypeNameContext) + + // EnterMapping is called when entering the mapping production. + EnterMapping(c *MappingContext) + + // EnterFunctionTypeName is called when entering the functionTypeName production. + EnterFunctionTypeName(c *FunctionTypeNameContext) + + // EnterStorageLocation is called when entering the storageLocation production. + EnterStorageLocation(c *StorageLocationContext) + + // EnterStateMutability is called when entering the stateMutability production. + EnterStateMutability(c *StateMutabilityContext) + + // EnterBlock is called when entering the block production. + EnterBlock(c *BlockContext) + + // EnterStatement is called when entering the statement production. + EnterStatement(c *StatementContext) + + // EnterExpressionStatement is called when entering the expressionStatement production. + EnterExpressionStatement(c *ExpressionStatementContext) + + // EnterIfStatement is called when entering the ifStatement production. + EnterIfStatement(c *IfStatementContext) + + // EnterTryStatement is called when entering the tryStatement production. + EnterTryStatement(c *TryStatementContext) + + // EnterCatchClause is called when entering the catchClause production. + EnterCatchClause(c *CatchClauseContext) + + // EnterWhileStatement is called when entering the whileStatement production. + EnterWhileStatement(c *WhileStatementContext) + + // EnterForStatement is called when entering the forStatement production. + EnterForStatement(c *ForStatementContext) + + // EnterSimpleStatement is called when entering the simpleStatement production. + EnterSimpleStatement(c *SimpleStatementContext) + + // EnterInlineAssemblyStatement is called when entering the inlineAssemblyStatement production. + EnterInlineAssemblyStatement(c *InlineAssemblyStatementContext) + + // EnterDoWhileStatement is called when entering the doWhileStatement production. + EnterDoWhileStatement(c *DoWhileStatementContext) + + // EnterContinueStatement is called when entering the continueStatement production. + EnterContinueStatement(c *ContinueStatementContext) + + // EnterBreakStatement is called when entering the breakStatement production. + EnterBreakStatement(c *BreakStatementContext) + + // EnterReturnStatement is called when entering the returnStatement production. + EnterReturnStatement(c *ReturnStatementContext) + + // EnterThrowStatement is called when entering the throwStatement production. + EnterThrowStatement(c *ThrowStatementContext) + + // EnterEmitStatement is called when entering the emitStatement production. + EnterEmitStatement(c *EmitStatementContext) + + // EnterVariableDeclarationStatement is called when entering the variableDeclarationStatement production. + EnterVariableDeclarationStatement(c *VariableDeclarationStatementContext) + + // EnterVariableDeclarationList is called when entering the variableDeclarationList production. + EnterVariableDeclarationList(c *VariableDeclarationListContext) + + // EnterIdentifierList is called when entering the identifierList production. + EnterIdentifierList(c *IdentifierListContext) + + // EnterElementaryTypeName is called when entering the elementaryTypeName production. + EnterElementaryTypeName(c *ElementaryTypeNameContext) + + // EnterExpression is called when entering the expression production. + EnterExpression(c *ExpressionContext) + + // EnterPrimaryExpression is called when entering the primaryExpression production. + EnterPrimaryExpression(c *PrimaryExpressionContext) + + // EnterExpressionList is called when entering the expressionList production. + EnterExpressionList(c *ExpressionListContext) + + // EnterNameValueList is called when entering the nameValueList production. + EnterNameValueList(c *NameValueListContext) + + // EnterNameValue is called when entering the nameValue production. + EnterNameValue(c *NameValueContext) + + // EnterFunctionCallArguments is called when entering the functionCallArguments production. + EnterFunctionCallArguments(c *FunctionCallArgumentsContext) + + // EnterFunctionCall is called when entering the functionCall production. + EnterFunctionCall(c *FunctionCallContext) + + // EnterTupleExpression is called when entering the tupleExpression production. + EnterTupleExpression(c *TupleExpressionContext) + + // EnterTypeNameExpression is called when entering the typeNameExpression production. + EnterTypeNameExpression(c *TypeNameExpressionContext) + + // EnterAssemblyItem is called when entering the assemblyItem production. + EnterAssemblyItem(c *AssemblyItemContext) + + // EnterAssemblyBlock is called when entering the assemblyBlock production. + EnterAssemblyBlock(c *AssemblyBlockContext) + + // EnterAssemblyExpression is called when entering the assemblyExpression production. + EnterAssemblyExpression(c *AssemblyExpressionContext) + + // EnterAssemblyCall is called when entering the assemblyCall production. + EnterAssemblyCall(c *AssemblyCallContext) + + // EnterAssemblyLocalDefinition is called when entering the assemblyLocalDefinition production. + EnterAssemblyLocalDefinition(c *AssemblyLocalDefinitionContext) + + // EnterAssemblyAssignment is called when entering the assemblyAssignment production. + EnterAssemblyAssignment(c *AssemblyAssignmentContext) + + // EnterAssemblyIdentifierList is called when entering the assemblyIdentifierList production. + EnterAssemblyIdentifierList(c *AssemblyIdentifierListContext) + + // EnterAssemblyStackAssignment is called when entering the assemblyStackAssignment production. + EnterAssemblyStackAssignment(c *AssemblyStackAssignmentContext) + + // EnterLabelDefinition is called when entering the labelDefinition production. + EnterLabelDefinition(c *LabelDefinitionContext) + + // EnterAssemblySwitch is called when entering the assemblySwitch production. + EnterAssemblySwitch(c *AssemblySwitchContext) + + // EnterAssemblyCase is called when entering the assemblyCase production. + EnterAssemblyCase(c *AssemblyCaseContext) + + // EnterAssemblyFunctionDefinition is called when entering the assemblyFunctionDefinition production. + EnterAssemblyFunctionDefinition(c *AssemblyFunctionDefinitionContext) + + // EnterAssemblyFunctionReturns is called when entering the assemblyFunctionReturns production. + EnterAssemblyFunctionReturns(c *AssemblyFunctionReturnsContext) + + // EnterAssemblyFor is called when entering the assemblyFor production. + EnterAssemblyFor(c *AssemblyForContext) + + // EnterAssemblyIf is called when entering the assemblyIf production. + EnterAssemblyIf(c *AssemblyIfContext) + + // EnterAssemblyLiteral is called when entering the assemblyLiteral production. + EnterAssemblyLiteral(c *AssemblyLiteralContext) + + // EnterAssemblyTypedVariableList is called when entering the assemblyTypedVariableList production. + EnterAssemblyTypedVariableList(c *AssemblyTypedVariableListContext) + + // EnterAssemblyType is called when entering the assemblyType production. + EnterAssemblyType(c *AssemblyTypeContext) + + // EnterSubAssembly is called when entering the subAssembly production. + EnterSubAssembly(c *SubAssemblyContext) + + // EnterNumberLiteral is called when entering the numberLiteral production. + EnterNumberLiteral(c *NumberLiteralContext) + + // EnterIdentifier is called when entering the identifier production. + EnterIdentifier(c *IdentifierContext) + + // EnterHexLiteral is called when entering the hexLiteral production. + EnterHexLiteral(c *HexLiteralContext) + + // EnterStringLiteral is called when entering the stringLiteral production. + EnterStringLiteral(c *StringLiteralContext) + + // ExitSourceUnit is called when exiting the sourceUnit production. + ExitSourceUnit(c *SourceUnitContext) + + // ExitPragmaDirective is called when exiting the pragmaDirective production. + ExitPragmaDirective(c *PragmaDirectiveContext) + + // ExitPragmaName is called when exiting the pragmaName production. + ExitPragmaName(c *PragmaNameContext) + + // ExitPragmaValue is called when exiting the pragmaValue production. + ExitPragmaValue(c *PragmaValueContext) + + // ExitVersion is called when exiting the version production. + ExitVersion(c *VersionContext) + + // ExitVersionConstraint is called when exiting the versionConstraint production. + ExitVersionConstraint(c *VersionConstraintContext) + + // ExitVersionOperator is called when exiting the versionOperator production. + ExitVersionOperator(c *VersionOperatorContext) + + // ExitImportDirective is called when exiting the importDirective production. + ExitImportDirective(c *ImportDirectiveContext) + + // ExitImportDeclaration is called when exiting the importDeclaration production. + ExitImportDeclaration(c *ImportDeclarationContext) + + // ExitContractDefinition is called when exiting the contractDefinition production. + ExitContractDefinition(c *ContractDefinitionContext) + + // ExitInheritanceSpecifier is called when exiting the inheritanceSpecifier production. + ExitInheritanceSpecifier(c *InheritanceSpecifierContext) + + // ExitContractPart is called when exiting the contractPart production. + ExitContractPart(c *ContractPartContext) + + // ExitStateVariableDeclaration is called when exiting the stateVariableDeclaration production. + ExitStateVariableDeclaration(c *StateVariableDeclarationContext) + + // ExitOverrideSpecifier is called when exiting the overrideSpecifier production. + ExitOverrideSpecifier(c *OverrideSpecifierContext) + + // ExitUsingForDeclaration is called when exiting the usingForDeclaration production. + ExitUsingForDeclaration(c *UsingForDeclarationContext) + + // ExitStructDefinition is called when exiting the structDefinition production. + ExitStructDefinition(c *StructDefinitionContext) + + // ExitModifierDefinition is called when exiting the modifierDefinition production. + ExitModifierDefinition(c *ModifierDefinitionContext) + + // ExitFunctionDefinition is called when exiting the functionDefinition production. + ExitFunctionDefinition(c *FunctionDefinitionContext) + + // ExitFunctionDescriptor is called when exiting the functionDescriptor production. + ExitFunctionDescriptor(c *FunctionDescriptorContext) + + // ExitReturnParameters is called when exiting the returnParameters production. + ExitReturnParameters(c *ReturnParametersContext) + + // ExitModifierList is called when exiting the modifierList production. + ExitModifierList(c *ModifierListContext) + + // ExitModifierInvocation is called when exiting the modifierInvocation production. + ExitModifierInvocation(c *ModifierInvocationContext) + + // ExitEventDefinition is called when exiting the eventDefinition production. + ExitEventDefinition(c *EventDefinitionContext) + + // ExitEnumDefinition is called when exiting the enumDefinition production. + ExitEnumDefinition(c *EnumDefinitionContext) + + // ExitEnumValue is called when exiting the enumValue production. + ExitEnumValue(c *EnumValueContext) + + // ExitParameterList is called when exiting the parameterList production. + ExitParameterList(c *ParameterListContext) + + // ExitParameter is called when exiting the parameter production. + ExitParameter(c *ParameterContext) + + // ExitEventParameterList is called when exiting the eventParameterList production. + ExitEventParameterList(c *EventParameterListContext) + + // ExitEventParameter is called when exiting the eventParameter production. + ExitEventParameter(c *EventParameterContext) + + // ExitVariableDeclaration is called when exiting the variableDeclaration production. + ExitVariableDeclaration(c *VariableDeclarationContext) + + // ExitTypeName is called when exiting the typeName production. + ExitTypeName(c *TypeNameContext) + + // ExitUserDefinedTypeName is called when exiting the userDefinedTypeName production. + ExitUserDefinedTypeName(c *UserDefinedTypeNameContext) + + // ExitMapping is called when exiting the mapping production. + ExitMapping(c *MappingContext) + + // ExitFunctionTypeName is called when exiting the functionTypeName production. + ExitFunctionTypeName(c *FunctionTypeNameContext) + + // ExitStorageLocation is called when exiting the storageLocation production. + ExitStorageLocation(c *StorageLocationContext) + + // ExitStateMutability is called when exiting the stateMutability production. + ExitStateMutability(c *StateMutabilityContext) + + // ExitBlock is called when exiting the block production. + ExitBlock(c *BlockContext) + + // ExitStatement is called when exiting the statement production. + ExitStatement(c *StatementContext) + + // ExitExpressionStatement is called when exiting the expressionStatement production. + ExitExpressionStatement(c *ExpressionStatementContext) + + // ExitIfStatement is called when exiting the ifStatement production. + ExitIfStatement(c *IfStatementContext) + + // ExitTryStatement is called when exiting the tryStatement production. + ExitTryStatement(c *TryStatementContext) + + // ExitCatchClause is called when exiting the catchClause production. + ExitCatchClause(c *CatchClauseContext) + + // ExitWhileStatement is called when exiting the whileStatement production. + ExitWhileStatement(c *WhileStatementContext) + + // ExitForStatement is called when exiting the forStatement production. + ExitForStatement(c *ForStatementContext) + + // ExitSimpleStatement is called when exiting the simpleStatement production. + ExitSimpleStatement(c *SimpleStatementContext) + + // ExitInlineAssemblyStatement is called when exiting the inlineAssemblyStatement production. + ExitInlineAssemblyStatement(c *InlineAssemblyStatementContext) + + // ExitDoWhileStatement is called when exiting the doWhileStatement production. + ExitDoWhileStatement(c *DoWhileStatementContext) + + // ExitContinueStatement is called when exiting the continueStatement production. + ExitContinueStatement(c *ContinueStatementContext) + + // ExitBreakStatement is called when exiting the breakStatement production. + ExitBreakStatement(c *BreakStatementContext) + + // ExitReturnStatement is called when exiting the returnStatement production. + ExitReturnStatement(c *ReturnStatementContext) + + // ExitThrowStatement is called when exiting the throwStatement production. + ExitThrowStatement(c *ThrowStatementContext) + + // ExitEmitStatement is called when exiting the emitStatement production. + ExitEmitStatement(c *EmitStatementContext) + + // ExitVariableDeclarationStatement is called when exiting the variableDeclarationStatement production. + ExitVariableDeclarationStatement(c *VariableDeclarationStatementContext) + + // ExitVariableDeclarationList is called when exiting the variableDeclarationList production. + ExitVariableDeclarationList(c *VariableDeclarationListContext) + + // ExitIdentifierList is called when exiting the identifierList production. + ExitIdentifierList(c *IdentifierListContext) + + // ExitElementaryTypeName is called when exiting the elementaryTypeName production. + ExitElementaryTypeName(c *ElementaryTypeNameContext) + + // ExitExpression is called when exiting the expression production. + ExitExpression(c *ExpressionContext) + + // ExitPrimaryExpression is called when exiting the primaryExpression production. + ExitPrimaryExpression(c *PrimaryExpressionContext) + + // ExitExpressionList is called when exiting the expressionList production. + ExitExpressionList(c *ExpressionListContext) + + // ExitNameValueList is called when exiting the nameValueList production. + ExitNameValueList(c *NameValueListContext) + + // ExitNameValue is called when exiting the nameValue production. + ExitNameValue(c *NameValueContext) + + // ExitFunctionCallArguments is called when exiting the functionCallArguments production. + ExitFunctionCallArguments(c *FunctionCallArgumentsContext) + + // ExitFunctionCall is called when exiting the functionCall production. + ExitFunctionCall(c *FunctionCallContext) + + // ExitTupleExpression is called when exiting the tupleExpression production. + ExitTupleExpression(c *TupleExpressionContext) + + // ExitTypeNameExpression is called when exiting the typeNameExpression production. + ExitTypeNameExpression(c *TypeNameExpressionContext) + + // ExitAssemblyItem is called when exiting the assemblyItem production. + ExitAssemblyItem(c *AssemblyItemContext) + + // ExitAssemblyBlock is called when exiting the assemblyBlock production. + ExitAssemblyBlock(c *AssemblyBlockContext) + + // ExitAssemblyExpression is called when exiting the assemblyExpression production. + ExitAssemblyExpression(c *AssemblyExpressionContext) + + // ExitAssemblyCall is called when exiting the assemblyCall production. + ExitAssemblyCall(c *AssemblyCallContext) + + // ExitAssemblyLocalDefinition is called when exiting the assemblyLocalDefinition production. + ExitAssemblyLocalDefinition(c *AssemblyLocalDefinitionContext) + + // ExitAssemblyAssignment is called when exiting the assemblyAssignment production. + ExitAssemblyAssignment(c *AssemblyAssignmentContext) + + // ExitAssemblyIdentifierList is called when exiting the assemblyIdentifierList production. + ExitAssemblyIdentifierList(c *AssemblyIdentifierListContext) + + // ExitAssemblyStackAssignment is called when exiting the assemblyStackAssignment production. + ExitAssemblyStackAssignment(c *AssemblyStackAssignmentContext) + + // ExitLabelDefinition is called when exiting the labelDefinition production. + ExitLabelDefinition(c *LabelDefinitionContext) + + // ExitAssemblySwitch is called when exiting the assemblySwitch production. + ExitAssemblySwitch(c *AssemblySwitchContext) + + // ExitAssemblyCase is called when exiting the assemblyCase production. + ExitAssemblyCase(c *AssemblyCaseContext) + + // ExitAssemblyFunctionDefinition is called when exiting the assemblyFunctionDefinition production. + ExitAssemblyFunctionDefinition(c *AssemblyFunctionDefinitionContext) + + // ExitAssemblyFunctionReturns is called when exiting the assemblyFunctionReturns production. + ExitAssemblyFunctionReturns(c *AssemblyFunctionReturnsContext) + + // ExitAssemblyFor is called when exiting the assemblyFor production. + ExitAssemblyFor(c *AssemblyForContext) + + // ExitAssemblyIf is called when exiting the assemblyIf production. + ExitAssemblyIf(c *AssemblyIfContext) + + // ExitAssemblyLiteral is called when exiting the assemblyLiteral production. + ExitAssemblyLiteral(c *AssemblyLiteralContext) + + // ExitAssemblyTypedVariableList is called when exiting the assemblyTypedVariableList production. + ExitAssemblyTypedVariableList(c *AssemblyTypedVariableListContext) + + // ExitAssemblyType is called when exiting the assemblyType production. + ExitAssemblyType(c *AssemblyTypeContext) + + // ExitSubAssembly is called when exiting the subAssembly production. + ExitSubAssembly(c *SubAssemblyContext) + + // ExitNumberLiteral is called when exiting the numberLiteral production. + ExitNumberLiteral(c *NumberLiteralContext) + + // ExitIdentifier is called when exiting the identifier production. + ExitIdentifier(c *IdentifierContext) + + // ExitHexLiteral is called when exiting the hexLiteral production. + ExitHexLiteral(c *HexLiteralContext) + + // ExitStringLiteral is called when exiting the stringLiteral production. + ExitStringLiteral(c *StringLiteralContext) +} diff --git a/parser/solidity_parser.go b/parser/solidity_parser.go new file mode 100644 index 0000000..62e9c72 --- /dev/null +++ b/parser/solidity_parser.go @@ -0,0 +1,17312 @@ +// Code generated from ./parser/Solidity.g4 by ANTLR 4.10.1. DO NOT EDIT. + +package parser // Solidity + +import ( + "fmt" + "strconv" + "sync" + + "github.com/antlr/antlr4/runtime/Go/antlr" +) + +// Suppress unused import errors +var _ = fmt.Printf +var _ = strconv.Itoa +var _ = sync.Once{} + + +type SolidityParser struct { + *antlr.BaseParser +} + +var solidityParserStaticData struct { + once sync.Once + serializedATN []int32 + literalNames []string + symbolicNames []string + ruleNames []string + predictionContextCache *antlr.PredictionContextCache + atn *antlr.ATN + decisionToDFA []*antlr.DFA +} + +func solidityParserInit() { + staticData := &solidityParserStaticData + staticData.literalNames = []string{ + "", "'pragma'", "';'", "'^'", "'~'", "'>='", "'>'", "'<'", "'<='", "'='", + "'import'", "'as'", "'*'", "'from'", "'{'", "','", "'}'", "'abstract'", + "'contract'", "'interface'", "'library'", "'is'", "'('", "')'", "'override'", + "'using'", "'for'", "'struct'", "'modifier'", "'function'", "'returns'", + "'event'", "'enum'", "'['", "']'", "'.'", "'mapping'", "'=>'", "'memory'", + "'storage'", "'calldata'", "'if'", "'else'", "'try'", "'catch'", "'while'", + "'assembly'", "'do'", "'return'", "'throw'", "'emit'", "'var'", "'address'", + "'bool'", "'string'", "'byte'", "'++'", "'--'", "'new'", "':'", "'+'", + "'-'", "'after'", "'delete'", "'!'", "'**'", "'/'", "'%'", "'<<'", "'>>'", + "'&'", "'|'", "'=='", "'!='", "'&&'", "'||'", "'?'", "'|='", "'^='", + "'&='", "'<<='", "'>>='", "'+='", "'-='", "'*='", "'/='", "'%='", "'let'", + "':='", "'=:'", "'switch'", "'case'", "'default'", "", "", "", "", "", + "", "", "", "", "", "", "'anonymous'", "'break'", "'constant'", "'immutable'", + "'continue'", "'leave'", "'external'", "'indexed'", "'internal'", "'payable'", + "'private'", "'public'", "'virtual'", "'pure'", "'type'", "'view'", + "'constructor'", "'fallback'", "'receive'", + } + staticData.symbolicNames = []string{ + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "Int", "Uint", "Byte", "Fixed", "Ufixed", + "BooleanLiteral", "DecimalNumber", "HexNumber", "NumberUnit", "HexLiteralFragment", + "ReservedKeyword", "AnonymousKeyword", "BreakKeyword", "ConstantKeyword", + "ImmutableKeyword", "ContinueKeyword", "LeaveKeyword", "ExternalKeyword", + "IndexedKeyword", "InternalKeyword", "PayableKeyword", "PrivateKeyword", + "PublicKeyword", "VirtualKeyword", "PureKeyword", "TypeKeyword", "ViewKeyword", + "ConstructorKeyword", "FallbackKeyword", "ReceiveKeyword", "Identifier", + "StringLiteralFragment", "VersionLiteral", "WS", "COMMENT", "LINE_COMMENT", + } + staticData.ruleNames = []string{ + "sourceUnit", "pragmaDirective", "pragmaName", "pragmaValue", "version", + "versionConstraint", "versionOperator", "importDirective", "importDeclaration", + "contractDefinition", "inheritanceSpecifier", "contractPart", "stateVariableDeclaration", + "overrideSpecifier", "usingForDeclaration", "structDefinition", "modifierDefinition", + "functionDefinition", "functionDescriptor", "returnParameters", "modifierList", + "modifierInvocation", "eventDefinition", "enumDefinition", "enumValue", + "parameterList", "parameter", "eventParameterList", "eventParameter", + "variableDeclaration", "typeName", "userDefinedTypeName", "mapping", + "functionTypeName", "storageLocation", "stateMutability", "block", "statement", + "expressionStatement", "ifStatement", "tryStatement", "catchClause", + "whileStatement", "forStatement", "simpleStatement", "inlineAssemblyStatement", + "doWhileStatement", "continueStatement", "breakStatement", "returnStatement", + "throwStatement", "emitStatement", "variableDeclarationStatement", "variableDeclarationList", + "identifierList", "elementaryTypeName", "expression", "primaryExpression", + "expressionList", "nameValueList", "nameValue", "functionCallArguments", + "functionCall", "tupleExpression", "typeNameExpression", "assemblyItem", + "assemblyBlock", "assemblyExpression", "assemblyCall", "assemblyLocalDefinition", + "assemblyAssignment", "assemblyIdentifierList", "assemblyStackAssignment", + "labelDefinition", "assemblySwitch", "assemblyCase", "assemblyFunctionDefinition", + "assemblyFunctionReturns", "assemblyFor", "assemblyIf", "assemblyLiteral", + "assemblyTypedVariableList", "assemblyType", "subAssembly", "numberLiteral", + "identifier", "hexLiteral", "stringLiteral", + } + staticData.predictionContextCache = antlr.NewPredictionContextCache() + staticData.serializedATN = []int32{ + 4, 1, 128, 1057, 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, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 5, 0, 182, 8, 0, 10, 0, 12, 0, 185, 9, 0, 1, 0, 1, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 3, 3, 198, 8, 3, 1, + 4, 1, 4, 3, 4, 202, 8, 4, 1, 5, 3, 5, 205, 8, 5, 1, 5, 1, 5, 1, 6, 1, 6, + 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 215, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, + 221, 8, 7, 1, 7, 1, 7, 3, 7, 225, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, + 7, 1, 7, 1, 7, 5, 7, 235, 8, 7, 10, 7, 12, 7, 238, 9, 7, 1, 7, 1, 7, 1, + 7, 1, 7, 1, 7, 3, 7, 245, 8, 7, 1, 8, 1, 8, 1, 8, 3, 8, 250, 8, 8, 1, 9, + 3, 9, 253, 8, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 5, 9, 261, 8, 9, 10, + 9, 12, 9, 264, 9, 9, 3, 9, 266, 8, 9, 1, 9, 1, 9, 5, 9, 270, 8, 9, 10, + 9, 12, 9, 273, 9, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 3, 10, 280, 8, 10, + 1, 10, 3, 10, 283, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, + 11, 3, 11, 292, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, + 5, 12, 301, 8, 12, 10, 12, 12, 12, 304, 9, 12, 1, 12, 1, 12, 1, 12, 3, + 12, 309, 8, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, + 318, 8, 13, 10, 13, 12, 13, 321, 9, 13, 1, 13, 1, 13, 3, 13, 325, 8, 13, + 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 332, 8, 14, 1, 14, 1, 14, 1, + 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 344, 8, 15, + 10, 15, 12, 15, 347, 9, 15, 3, 15, 349, 8, 15, 1, 15, 1, 15, 1, 16, 1, + 16, 1, 16, 3, 16, 356, 8, 16, 1, 16, 1, 16, 5, 16, 360, 8, 16, 10, 16, + 12, 16, 363, 9, 16, 1, 16, 1, 16, 3, 16, 367, 8, 16, 1, 17, 1, 17, 1, 17, + 1, 17, 3, 17, 373, 8, 17, 1, 17, 1, 17, 3, 17, 377, 8, 17, 1, 18, 1, 18, + 1, 18, 1, 18, 3, 18, 383, 8, 18, 1, 18, 1, 18, 1, 18, 3, 18, 388, 8, 18, + 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, + 20, 5, 20, 401, 8, 20, 10, 20, 12, 20, 404, 9, 20, 1, 21, 1, 21, 1, 21, + 3, 21, 409, 8, 21, 1, 21, 3, 21, 412, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, + 3, 22, 418, 8, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 426, + 8, 23, 1, 23, 1, 23, 5, 23, 430, 8, 23, 10, 23, 12, 23, 433, 9, 23, 1, + 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 443, 8, 25, + 10, 25, 12, 25, 446, 9, 25, 3, 25, 448, 8, 25, 1, 25, 1, 25, 1, 26, 1, + 26, 3, 26, 454, 8, 26, 1, 26, 3, 26, 457, 8, 26, 1, 27, 1, 27, 1, 27, 1, + 27, 5, 27, 463, 8, 27, 10, 27, 12, 27, 466, 9, 27, 3, 27, 468, 8, 27, 1, + 27, 1, 27, 1, 28, 1, 28, 3, 28, 474, 8, 28, 1, 28, 3, 28, 477, 8, 28, 1, + 29, 1, 29, 3, 29, 481, 8, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, + 1, 30, 3, 30, 490, 8, 30, 1, 30, 1, 30, 1, 30, 3, 30, 495, 8, 30, 1, 30, + 5, 30, 498, 8, 30, 10, 30, 12, 30, 501, 9, 30, 1, 31, 1, 31, 1, 31, 5, + 31, 506, 8, 31, 10, 31, 12, 31, 509, 9, 31, 1, 32, 1, 32, 1, 32, 1, 32, + 3, 32, 515, 8, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, + 33, 3, 33, 525, 8, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 5, 36, + 533, 8, 36, 10, 36, 12, 36, 536, 9, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, + 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, + 3, 37, 553, 8, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, + 39, 1, 39, 1, 39, 3, 39, 565, 8, 39, 1, 40, 1, 40, 1, 40, 3, 40, 570, 8, + 40, 1, 40, 1, 40, 4, 40, 574, 8, 40, 11, 40, 12, 40, 575, 1, 41, 1, 41, + 3, 41, 580, 8, 41, 1, 41, 3, 41, 583, 8, 41, 1, 41, 1, 41, 1, 42, 1, 42, + 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 597, 8, + 43, 1, 43, 1, 43, 3, 43, 601, 8, 43, 1, 43, 3, 43, 604, 8, 43, 1, 43, 1, + 43, 1, 43, 1, 44, 1, 44, 3, 44, 611, 8, 44, 1, 45, 1, 45, 3, 45, 615, 8, + 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, + 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 3, 49, 635, 8, + 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, + 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 653, 8, 52, 1, 52, 1, + 52, 3, 52, 657, 8, 52, 1, 52, 1, 52, 1, 53, 3, 53, 662, 8, 53, 1, 53, 1, + 53, 3, 53, 666, 8, 53, 5, 53, 668, 8, 53, 10, 53, 12, 53, 671, 9, 53, 1, + 54, 1, 54, 3, 54, 675, 8, 54, 1, 54, 5, 54, 678, 8, 54, 10, 54, 12, 54, + 681, 9, 54, 1, 54, 3, 54, 684, 8, 54, 1, 54, 1, 54, 1, 55, 1, 55, 3, 55, + 690, 8, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, + 55, 3, 55, 701, 8, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, + 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, + 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 726, 8, 56, 1, 56, 1, 56, + 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, + 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, + 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, + 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, + 1, 56, 1, 56, 1, 56, 3, 56, 775, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, + 56, 781, 8, 56, 1, 56, 1, 56, 3, 56, 785, 8, 56, 1, 56, 1, 56, 1, 56, 1, + 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, + 5, 56, 801, 8, 56, 10, 56, 12, 56, 804, 9, 56, 1, 57, 1, 57, 1, 57, 1, + 57, 1, 57, 1, 57, 1, 57, 3, 57, 813, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, + 1, 57, 3, 57, 820, 8, 57, 3, 57, 822, 8, 57, 1, 58, 1, 58, 1, 58, 5, 58, + 827, 8, 58, 10, 58, 12, 58, 830, 9, 58, 1, 59, 1, 59, 1, 59, 5, 59, 835, + 8, 59, 10, 59, 12, 59, 838, 9, 59, 1, 59, 3, 59, 841, 8, 59, 1, 60, 1, + 60, 1, 60, 1, 60, 1, 61, 1, 61, 3, 61, 849, 8, 61, 1, 61, 1, 61, 3, 61, + 853, 8, 61, 3, 61, 855, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, + 1, 63, 3, 63, 864, 8, 63, 1, 63, 1, 63, 3, 63, 868, 8, 63, 5, 63, 870, + 8, 63, 10, 63, 12, 63, 873, 9, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 5, + 63, 880, 8, 63, 10, 63, 12, 63, 883, 9, 63, 3, 63, 885, 8, 63, 1, 63, 3, + 63, 888, 8, 63, 1, 64, 1, 64, 3, 64, 892, 8, 64, 1, 65, 1, 65, 1, 65, 1, + 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, + 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 912, 8, 65, 1, 66, 1, 66, 5, 66, 916, + 8, 66, 10, 66, 12, 66, 919, 9, 66, 1, 66, 1, 66, 1, 67, 1, 67, 3, 67, 925, + 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 931, 8, 68, 1, 68, 1, 68, 3, + 68, 935, 8, 68, 1, 68, 1, 68, 5, 68, 939, 8, 68, 10, 68, 12, 68, 942, 9, + 68, 1, 68, 3, 68, 945, 8, 68, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 951, 8, + 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 5, 71, 960, 8, 71, + 10, 71, 12, 71, 963, 9, 71, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, + 74, 1, 74, 1, 74, 5, 74, 974, 8, 74, 10, 74, 12, 74, 977, 9, 74, 1, 75, + 1, 75, 1, 75, 3, 75, 982, 8, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 988, + 8, 75, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 994, 8, 76, 1, 76, 1, 76, 3, + 76, 998, 8, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, + 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, + 80, 1, 80, 1, 80, 3, 80, 1021, 8, 80, 1, 80, 3, 80, 1024, 8, 80, 1, 81, + 1, 81, 3, 81, 1028, 8, 81, 1, 81, 1, 81, 3, 81, 1032, 8, 81, 1, 82, 1, + 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 3, 84, 1043, 8, 84, + 1, 85, 1, 85, 1, 86, 4, 86, 1048, 8, 86, 11, 86, 12, 86, 1049, 1, 87, 4, + 87, 1053, 8, 87, 11, 87, 12, 87, 1054, 1, 87, 0, 2, 60, 112, 88, 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, 0, 14, 1, 0, 3, 9, 1, 0, 18, 20, 1, 0, 38, 40, 4, 0, 106, 106, + 113, 113, 117, 117, 119, 119, 1, 0, 56, 57, 1, 0, 60, 61, 1, 0, 62, 63, + 2, 0, 12, 12, 66, 67, 1, 0, 68, 69, 1, 0, 5, 8, 1, 0, 72, 73, 2, 0, 9, + 9, 77, 86, 1, 0, 99, 100, 4, 0, 13, 13, 40, 40, 52, 52, 123, 123, 1186, + 0, 183, 1, 0, 0, 0, 2, 188, 1, 0, 0, 0, 4, 193, 1, 0, 0, 0, 6, 197, 1, + 0, 0, 0, 8, 199, 1, 0, 0, 0, 10, 204, 1, 0, 0, 0, 12, 208, 1, 0, 0, 0, + 14, 244, 1, 0, 0, 0, 16, 246, 1, 0, 0, 0, 18, 252, 1, 0, 0, 0, 20, 276, + 1, 0, 0, 0, 22, 291, 1, 0, 0, 0, 24, 293, 1, 0, 0, 0, 26, 312, 1, 0, 0, + 0, 28, 326, 1, 0, 0, 0, 30, 335, 1, 0, 0, 0, 32, 352, 1, 0, 0, 0, 34, 368, + 1, 0, 0, 0, 36, 387, 1, 0, 0, 0, 38, 389, 1, 0, 0, 0, 40, 402, 1, 0, 0, + 0, 42, 405, 1, 0, 0, 0, 44, 413, 1, 0, 0, 0, 46, 421, 1, 0, 0, 0, 48, 436, + 1, 0, 0, 0, 50, 438, 1, 0, 0, 0, 52, 451, 1, 0, 0, 0, 54, 458, 1, 0, 0, + 0, 56, 471, 1, 0, 0, 0, 58, 478, 1, 0, 0, 0, 60, 489, 1, 0, 0, 0, 62, 502, + 1, 0, 0, 0, 64, 510, 1, 0, 0, 0, 66, 520, 1, 0, 0, 0, 68, 526, 1, 0, 0, + 0, 70, 528, 1, 0, 0, 0, 72, 530, 1, 0, 0, 0, 74, 552, 1, 0, 0, 0, 76, 554, + 1, 0, 0, 0, 78, 557, 1, 0, 0, 0, 80, 566, 1, 0, 0, 0, 82, 577, 1, 0, 0, + 0, 84, 586, 1, 0, 0, 0, 86, 592, 1, 0, 0, 0, 88, 610, 1, 0, 0, 0, 90, 612, + 1, 0, 0, 0, 92, 618, 1, 0, 0, 0, 94, 626, 1, 0, 0, 0, 96, 629, 1, 0, 0, + 0, 98, 632, 1, 0, 0, 0, 100, 638, 1, 0, 0, 0, 102, 641, 1, 0, 0, 0, 104, + 652, 1, 0, 0, 0, 106, 661, 1, 0, 0, 0, 108, 672, 1, 0, 0, 0, 110, 700, + 1, 0, 0, 0, 112, 725, 1, 0, 0, 0, 114, 821, 1, 0, 0, 0, 116, 823, 1, 0, + 0, 0, 118, 831, 1, 0, 0, 0, 120, 842, 1, 0, 0, 0, 122, 854, 1, 0, 0, 0, + 124, 856, 1, 0, 0, 0, 126, 887, 1, 0, 0, 0, 128, 891, 1, 0, 0, 0, 130, + 911, 1, 0, 0, 0, 132, 913, 1, 0, 0, 0, 134, 924, 1, 0, 0, 0, 136, 930, + 1, 0, 0, 0, 138, 946, 1, 0, 0, 0, 140, 952, 1, 0, 0, 0, 142, 956, 1, 0, + 0, 0, 144, 964, 1, 0, 0, 0, 146, 967, 1, 0, 0, 0, 148, 970, 1, 0, 0, 0, + 150, 987, 1, 0, 0, 0, 152, 989, 1, 0, 0, 0, 154, 1001, 1, 0, 0, 0, 156, + 1005, 1, 0, 0, 0, 158, 1011, 1, 0, 0, 0, 160, 1020, 1, 0, 0, 0, 162, 1025, + 1, 0, 0, 0, 164, 1033, 1, 0, 0, 0, 166, 1036, 1, 0, 0, 0, 168, 1040, 1, + 0, 0, 0, 170, 1044, 1, 0, 0, 0, 172, 1047, 1, 0, 0, 0, 174, 1052, 1, 0, + 0, 0, 176, 182, 3, 2, 1, 0, 177, 182, 3, 14, 7, 0, 178, 182, 3, 30, 15, + 0, 179, 182, 3, 46, 23, 0, 180, 182, 3, 18, 9, 0, 181, 176, 1, 0, 0, 0, + 181, 177, 1, 0, 0, 0, 181, 178, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 181, + 180, 1, 0, 0, 0, 182, 185, 1, 0, 0, 0, 183, 181, 1, 0, 0, 0, 183, 184, + 1, 0, 0, 0, 184, 186, 1, 0, 0, 0, 185, 183, 1, 0, 0, 0, 186, 187, 5, 0, + 0, 1, 187, 1, 1, 0, 0, 0, 188, 189, 5, 1, 0, 0, 189, 190, 3, 4, 2, 0, 190, + 191, 3, 6, 3, 0, 191, 192, 5, 2, 0, 0, 192, 3, 1, 0, 0, 0, 193, 194, 3, + 170, 85, 0, 194, 5, 1, 0, 0, 0, 195, 198, 3, 8, 4, 0, 196, 198, 3, 112, + 56, 0, 197, 195, 1, 0, 0, 0, 197, 196, 1, 0, 0, 0, 198, 7, 1, 0, 0, 0, + 199, 201, 3, 10, 5, 0, 200, 202, 3, 10, 5, 0, 201, 200, 1, 0, 0, 0, 201, + 202, 1, 0, 0, 0, 202, 9, 1, 0, 0, 0, 203, 205, 3, 12, 6, 0, 204, 203, 1, + 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 207, 5, 125, + 0, 0, 207, 11, 1, 0, 0, 0, 208, 209, 7, 0, 0, 0, 209, 13, 1, 0, 0, 0, 210, + 211, 5, 10, 0, 0, 211, 214, 5, 124, 0, 0, 212, 213, 5, 11, 0, 0, 213, 215, + 3, 170, 85, 0, 214, 212, 1, 0, 0, 0, 214, 215, 1, 0, 0, 0, 215, 216, 1, + 0, 0, 0, 216, 245, 5, 2, 0, 0, 217, 220, 5, 10, 0, 0, 218, 221, 5, 12, + 0, 0, 219, 221, 3, 170, 85, 0, 220, 218, 1, 0, 0, 0, 220, 219, 1, 0, 0, + 0, 221, 224, 1, 0, 0, 0, 222, 223, 5, 11, 0, 0, 223, 225, 3, 170, 85, 0, + 224, 222, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 226, 1, 0, 0, 0, 226, + 227, 5, 13, 0, 0, 227, 228, 5, 124, 0, 0, 228, 245, 5, 2, 0, 0, 229, 230, + 5, 10, 0, 0, 230, 231, 5, 14, 0, 0, 231, 236, 3, 16, 8, 0, 232, 233, 5, + 15, 0, 0, 233, 235, 3, 16, 8, 0, 234, 232, 1, 0, 0, 0, 235, 238, 1, 0, + 0, 0, 236, 234, 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 239, 1, 0, 0, 0, + 238, 236, 1, 0, 0, 0, 239, 240, 5, 16, 0, 0, 240, 241, 5, 13, 0, 0, 241, + 242, 5, 124, 0, 0, 242, 243, 5, 2, 0, 0, 243, 245, 1, 0, 0, 0, 244, 210, + 1, 0, 0, 0, 244, 217, 1, 0, 0, 0, 244, 229, 1, 0, 0, 0, 245, 15, 1, 0, + 0, 0, 246, 249, 3, 170, 85, 0, 247, 248, 5, 11, 0, 0, 248, 250, 3, 170, + 85, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 17, 1, 0, 0, 0, + 251, 253, 5, 17, 0, 0, 252, 251, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, + 254, 1, 0, 0, 0, 254, 255, 7, 1, 0, 0, 255, 265, 3, 170, 85, 0, 256, 257, + 5, 21, 0, 0, 257, 262, 3, 20, 10, 0, 258, 259, 5, 15, 0, 0, 259, 261, 3, + 20, 10, 0, 260, 258, 1, 0, 0, 0, 261, 264, 1, 0, 0, 0, 262, 260, 1, 0, + 0, 0, 262, 263, 1, 0, 0, 0, 263, 266, 1, 0, 0, 0, 264, 262, 1, 0, 0, 0, + 265, 256, 1, 0, 0, 0, 265, 266, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, + 271, 5, 14, 0, 0, 268, 270, 3, 22, 11, 0, 269, 268, 1, 0, 0, 0, 270, 273, + 1, 0, 0, 0, 271, 269, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 274, 1, 0, + 0, 0, 273, 271, 1, 0, 0, 0, 274, 275, 5, 16, 0, 0, 275, 19, 1, 0, 0, 0, + 276, 282, 3, 62, 31, 0, 277, 279, 5, 22, 0, 0, 278, 280, 3, 116, 58, 0, + 279, 278, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, + 283, 5, 23, 0, 0, 282, 277, 1, 0, 0, 0, 282, 283, 1, 0, 0, 0, 283, 21, + 1, 0, 0, 0, 284, 292, 3, 24, 12, 0, 285, 292, 3, 28, 14, 0, 286, 292, 3, + 30, 15, 0, 287, 292, 3, 32, 16, 0, 288, 292, 3, 34, 17, 0, 289, 292, 3, + 44, 22, 0, 290, 292, 3, 46, 23, 0, 291, 284, 1, 0, 0, 0, 291, 285, 1, 0, + 0, 0, 291, 286, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 288, 1, 0, 0, 0, + 291, 289, 1, 0, 0, 0, 291, 290, 1, 0, 0, 0, 292, 23, 1, 0, 0, 0, 293, 302, + 3, 60, 30, 0, 294, 301, 5, 115, 0, 0, 295, 301, 5, 112, 0, 0, 296, 301, + 5, 114, 0, 0, 297, 301, 5, 106, 0, 0, 298, 301, 5, 107, 0, 0, 299, 301, + 3, 26, 13, 0, 300, 294, 1, 0, 0, 0, 300, 295, 1, 0, 0, 0, 300, 296, 1, + 0, 0, 0, 300, 297, 1, 0, 0, 0, 300, 298, 1, 0, 0, 0, 300, 299, 1, 0, 0, + 0, 301, 304, 1, 0, 0, 0, 302, 300, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, + 305, 1, 0, 0, 0, 304, 302, 1, 0, 0, 0, 305, 308, 3, 170, 85, 0, 306, 307, + 5, 9, 0, 0, 307, 309, 3, 112, 56, 0, 308, 306, 1, 0, 0, 0, 308, 309, 1, + 0, 0, 0, 309, 310, 1, 0, 0, 0, 310, 311, 5, 2, 0, 0, 311, 25, 1, 0, 0, + 0, 312, 324, 5, 24, 0, 0, 313, 314, 5, 22, 0, 0, 314, 319, 3, 62, 31, 0, + 315, 316, 5, 15, 0, 0, 316, 318, 3, 62, 31, 0, 317, 315, 1, 0, 0, 0, 318, + 321, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 322, + 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 322, 323, 5, 23, 0, 0, 323, 325, 1, 0, + 0, 0, 324, 313, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 27, 1, 0, 0, 0, + 326, 327, 5, 25, 0, 0, 327, 328, 3, 170, 85, 0, 328, 331, 5, 26, 0, 0, + 329, 332, 5, 12, 0, 0, 330, 332, 3, 60, 30, 0, 331, 329, 1, 0, 0, 0, 331, + 330, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 334, 5, 2, 0, 0, 334, 29, 1, + 0, 0, 0, 335, 336, 5, 27, 0, 0, 336, 337, 3, 170, 85, 0, 337, 348, 5, 14, + 0, 0, 338, 339, 3, 58, 29, 0, 339, 345, 5, 2, 0, 0, 340, 341, 3, 58, 29, + 0, 341, 342, 5, 2, 0, 0, 342, 344, 1, 0, 0, 0, 343, 340, 1, 0, 0, 0, 344, + 347, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 349, + 1, 0, 0, 0, 347, 345, 1, 0, 0, 0, 348, 338, 1, 0, 0, 0, 348, 349, 1, 0, + 0, 0, 349, 350, 1, 0, 0, 0, 350, 351, 5, 16, 0, 0, 351, 31, 1, 0, 0, 0, + 352, 353, 5, 28, 0, 0, 353, 355, 3, 170, 85, 0, 354, 356, 3, 50, 25, 0, + 355, 354, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 361, 1, 0, 0, 0, 357, + 360, 5, 116, 0, 0, 358, 360, 3, 26, 13, 0, 359, 357, 1, 0, 0, 0, 359, 358, + 1, 0, 0, 0, 360, 363, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 361, 362, 1, 0, + 0, 0, 362, 366, 1, 0, 0, 0, 363, 361, 1, 0, 0, 0, 364, 367, 5, 2, 0, 0, + 365, 367, 3, 72, 36, 0, 366, 364, 1, 0, 0, 0, 366, 365, 1, 0, 0, 0, 367, + 33, 1, 0, 0, 0, 368, 369, 3, 36, 18, 0, 369, 370, 3, 50, 25, 0, 370, 372, + 3, 40, 20, 0, 371, 373, 3, 38, 19, 0, 372, 371, 1, 0, 0, 0, 372, 373, 1, + 0, 0, 0, 373, 376, 1, 0, 0, 0, 374, 377, 5, 2, 0, 0, 375, 377, 3, 72, 36, + 0, 376, 374, 1, 0, 0, 0, 376, 375, 1, 0, 0, 0, 377, 35, 1, 0, 0, 0, 378, + 382, 5, 29, 0, 0, 379, 383, 3, 170, 85, 0, 380, 383, 5, 122, 0, 0, 381, + 383, 5, 121, 0, 0, 382, 379, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 382, 381, + 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 388, 1, 0, 0, 0, 384, 388, 5, 120, + 0, 0, 385, 388, 5, 121, 0, 0, 386, 388, 5, 122, 0, 0, 387, 378, 1, 0, 0, + 0, 387, 384, 1, 0, 0, 0, 387, 385, 1, 0, 0, 0, 387, 386, 1, 0, 0, 0, 388, + 37, 1, 0, 0, 0, 389, 390, 5, 30, 0, 0, 390, 391, 3, 50, 25, 0, 391, 39, + 1, 0, 0, 0, 392, 401, 3, 42, 21, 0, 393, 401, 3, 70, 35, 0, 394, 401, 5, + 110, 0, 0, 395, 401, 5, 115, 0, 0, 396, 401, 5, 112, 0, 0, 397, 401, 5, + 114, 0, 0, 398, 401, 5, 116, 0, 0, 399, 401, 3, 26, 13, 0, 400, 392, 1, + 0, 0, 0, 400, 393, 1, 0, 0, 0, 400, 394, 1, 0, 0, 0, 400, 395, 1, 0, 0, + 0, 400, 396, 1, 0, 0, 0, 400, 397, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 400, + 399, 1, 0, 0, 0, 401, 404, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 402, 403, + 1, 0, 0, 0, 403, 41, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 405, 411, 3, 170, + 85, 0, 406, 408, 5, 22, 0, 0, 407, 409, 3, 116, 58, 0, 408, 407, 1, 0, + 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 412, 5, 23, 0, 0, + 411, 406, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 43, 1, 0, 0, 0, 413, 414, + 5, 31, 0, 0, 414, 415, 3, 170, 85, 0, 415, 417, 3, 54, 27, 0, 416, 418, + 5, 104, 0, 0, 417, 416, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 419, 1, + 0, 0, 0, 419, 420, 5, 2, 0, 0, 420, 45, 1, 0, 0, 0, 421, 422, 5, 32, 0, + 0, 422, 423, 3, 170, 85, 0, 423, 425, 5, 14, 0, 0, 424, 426, 3, 48, 24, + 0, 425, 424, 1, 0, 0, 0, 425, 426, 1, 0, 0, 0, 426, 431, 1, 0, 0, 0, 427, + 428, 5, 15, 0, 0, 428, 430, 3, 48, 24, 0, 429, 427, 1, 0, 0, 0, 430, 433, + 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 434, 1, 0, + 0, 0, 433, 431, 1, 0, 0, 0, 434, 435, 5, 16, 0, 0, 435, 47, 1, 0, 0, 0, + 436, 437, 3, 170, 85, 0, 437, 49, 1, 0, 0, 0, 438, 447, 5, 22, 0, 0, 439, + 444, 3, 52, 26, 0, 440, 441, 5, 15, 0, 0, 441, 443, 3, 52, 26, 0, 442, + 440, 1, 0, 0, 0, 443, 446, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 444, 445, + 1, 0, 0, 0, 445, 448, 1, 0, 0, 0, 446, 444, 1, 0, 0, 0, 447, 439, 1, 0, + 0, 0, 447, 448, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 450, 5, 23, 0, 0, + 450, 51, 1, 0, 0, 0, 451, 453, 3, 60, 30, 0, 452, 454, 3, 68, 34, 0, 453, + 452, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 456, 1, 0, 0, 0, 455, 457, + 3, 170, 85, 0, 456, 455, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 53, 1, + 0, 0, 0, 458, 467, 5, 22, 0, 0, 459, 464, 3, 56, 28, 0, 460, 461, 5, 15, + 0, 0, 461, 463, 3, 56, 28, 0, 462, 460, 1, 0, 0, 0, 463, 466, 1, 0, 0, + 0, 464, 462, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 468, 1, 0, 0, 0, 466, + 464, 1, 0, 0, 0, 467, 459, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 469, + 1, 0, 0, 0, 469, 470, 5, 23, 0, 0, 470, 55, 1, 0, 0, 0, 471, 473, 3, 60, + 30, 0, 472, 474, 5, 111, 0, 0, 473, 472, 1, 0, 0, 0, 473, 474, 1, 0, 0, + 0, 474, 476, 1, 0, 0, 0, 475, 477, 3, 170, 85, 0, 476, 475, 1, 0, 0, 0, + 476, 477, 1, 0, 0, 0, 477, 57, 1, 0, 0, 0, 478, 480, 3, 60, 30, 0, 479, + 481, 3, 68, 34, 0, 480, 479, 1, 0, 0, 0, 480, 481, 1, 0, 0, 0, 481, 482, + 1, 0, 0, 0, 482, 483, 3, 170, 85, 0, 483, 59, 1, 0, 0, 0, 484, 485, 6, + 30, -1, 0, 485, 490, 3, 110, 55, 0, 486, 490, 3, 62, 31, 0, 487, 490, 3, + 64, 32, 0, 488, 490, 3, 66, 33, 0, 489, 484, 1, 0, 0, 0, 489, 486, 1, 0, + 0, 0, 489, 487, 1, 0, 0, 0, 489, 488, 1, 0, 0, 0, 490, 499, 1, 0, 0, 0, + 491, 492, 10, 2, 0, 0, 492, 494, 5, 33, 0, 0, 493, 495, 3, 112, 56, 0, + 494, 493, 1, 0, 0, 0, 494, 495, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, + 498, 5, 34, 0, 0, 497, 491, 1, 0, 0, 0, 498, 501, 1, 0, 0, 0, 499, 497, + 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 61, 1, 0, 0, 0, 501, 499, 1, 0, + 0, 0, 502, 507, 3, 170, 85, 0, 503, 504, 5, 35, 0, 0, 504, 506, 3, 170, + 85, 0, 505, 503, 1, 0, 0, 0, 506, 509, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, + 507, 508, 1, 0, 0, 0, 508, 63, 1, 0, 0, 0, 509, 507, 1, 0, 0, 0, 510, 511, + 5, 36, 0, 0, 511, 514, 5, 22, 0, 0, 512, 515, 3, 110, 55, 0, 513, 515, + 3, 62, 31, 0, 514, 512, 1, 0, 0, 0, 514, 513, 1, 0, 0, 0, 515, 516, 1, + 0, 0, 0, 516, 517, 5, 37, 0, 0, 517, 518, 3, 60, 30, 0, 518, 519, 5, 23, + 0, 0, 519, 65, 1, 0, 0, 0, 520, 521, 5, 29, 0, 0, 521, 522, 3, 50, 25, + 0, 522, 524, 3, 40, 20, 0, 523, 525, 3, 38, 19, 0, 524, 523, 1, 0, 0, 0, + 524, 525, 1, 0, 0, 0, 525, 67, 1, 0, 0, 0, 526, 527, 7, 2, 0, 0, 527, 69, + 1, 0, 0, 0, 528, 529, 7, 3, 0, 0, 529, 71, 1, 0, 0, 0, 530, 534, 5, 14, + 0, 0, 531, 533, 3, 74, 37, 0, 532, 531, 1, 0, 0, 0, 533, 536, 1, 0, 0, + 0, 534, 532, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, 537, 1, 0, 0, 0, 536, + 534, 1, 0, 0, 0, 537, 538, 5, 16, 0, 0, 538, 73, 1, 0, 0, 0, 539, 553, + 3, 78, 39, 0, 540, 553, 3, 80, 40, 0, 541, 553, 3, 84, 42, 0, 542, 553, + 3, 86, 43, 0, 543, 553, 3, 72, 36, 0, 544, 553, 3, 90, 45, 0, 545, 553, + 3, 92, 46, 0, 546, 553, 3, 94, 47, 0, 547, 553, 3, 96, 48, 0, 548, 553, + 3, 98, 49, 0, 549, 553, 3, 100, 50, 0, 550, 553, 3, 102, 51, 0, 551, 553, + 3, 88, 44, 0, 552, 539, 1, 0, 0, 0, 552, 540, 1, 0, 0, 0, 552, 541, 1, + 0, 0, 0, 552, 542, 1, 0, 0, 0, 552, 543, 1, 0, 0, 0, 552, 544, 1, 0, 0, + 0, 552, 545, 1, 0, 0, 0, 552, 546, 1, 0, 0, 0, 552, 547, 1, 0, 0, 0, 552, + 548, 1, 0, 0, 0, 552, 549, 1, 0, 0, 0, 552, 550, 1, 0, 0, 0, 552, 551, + 1, 0, 0, 0, 553, 75, 1, 0, 0, 0, 554, 555, 3, 112, 56, 0, 555, 556, 5, + 2, 0, 0, 556, 77, 1, 0, 0, 0, 557, 558, 5, 41, 0, 0, 558, 559, 5, 22, 0, + 0, 559, 560, 3, 112, 56, 0, 560, 561, 5, 23, 0, 0, 561, 564, 3, 74, 37, + 0, 562, 563, 5, 42, 0, 0, 563, 565, 3, 74, 37, 0, 564, 562, 1, 0, 0, 0, + 564, 565, 1, 0, 0, 0, 565, 79, 1, 0, 0, 0, 566, 567, 5, 43, 0, 0, 567, + 569, 3, 112, 56, 0, 568, 570, 3, 38, 19, 0, 569, 568, 1, 0, 0, 0, 569, + 570, 1, 0, 0, 0, 570, 571, 1, 0, 0, 0, 571, 573, 3, 72, 36, 0, 572, 574, + 3, 82, 41, 0, 573, 572, 1, 0, 0, 0, 574, 575, 1, 0, 0, 0, 575, 573, 1, + 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 81, 1, 0, 0, 0, 577, 582, 5, 44, 0, + 0, 578, 580, 3, 170, 85, 0, 579, 578, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, + 580, 581, 1, 0, 0, 0, 581, 583, 3, 50, 25, 0, 582, 579, 1, 0, 0, 0, 582, + 583, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 585, 3, 72, 36, 0, 585, 83, + 1, 0, 0, 0, 586, 587, 5, 45, 0, 0, 587, 588, 5, 22, 0, 0, 588, 589, 3, + 112, 56, 0, 589, 590, 5, 23, 0, 0, 590, 591, 3, 74, 37, 0, 591, 85, 1, + 0, 0, 0, 592, 593, 5, 26, 0, 0, 593, 596, 5, 22, 0, 0, 594, 597, 3, 88, + 44, 0, 595, 597, 5, 2, 0, 0, 596, 594, 1, 0, 0, 0, 596, 595, 1, 0, 0, 0, + 597, 600, 1, 0, 0, 0, 598, 601, 3, 76, 38, 0, 599, 601, 5, 2, 0, 0, 600, + 598, 1, 0, 0, 0, 600, 599, 1, 0, 0, 0, 601, 603, 1, 0, 0, 0, 602, 604, + 3, 112, 56, 0, 603, 602, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 605, 1, + 0, 0, 0, 605, 606, 5, 23, 0, 0, 606, 607, 3, 74, 37, 0, 607, 87, 1, 0, + 0, 0, 608, 611, 3, 104, 52, 0, 609, 611, 3, 76, 38, 0, 610, 608, 1, 0, + 0, 0, 610, 609, 1, 0, 0, 0, 611, 89, 1, 0, 0, 0, 612, 614, 5, 46, 0, 0, + 613, 615, 5, 124, 0, 0, 614, 613, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, + 616, 1, 0, 0, 0, 616, 617, 3, 132, 66, 0, 617, 91, 1, 0, 0, 0, 618, 619, + 5, 47, 0, 0, 619, 620, 3, 74, 37, 0, 620, 621, 5, 45, 0, 0, 621, 622, 5, + 22, 0, 0, 622, 623, 3, 112, 56, 0, 623, 624, 5, 23, 0, 0, 624, 625, 5, + 2, 0, 0, 625, 93, 1, 0, 0, 0, 626, 627, 5, 108, 0, 0, 627, 628, 5, 2, 0, + 0, 628, 95, 1, 0, 0, 0, 629, 630, 5, 105, 0, 0, 630, 631, 5, 2, 0, 0, 631, + 97, 1, 0, 0, 0, 632, 634, 5, 48, 0, 0, 633, 635, 3, 112, 56, 0, 634, 633, + 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 637, 5, 2, + 0, 0, 637, 99, 1, 0, 0, 0, 638, 639, 5, 49, 0, 0, 639, 640, 5, 2, 0, 0, + 640, 101, 1, 0, 0, 0, 641, 642, 5, 50, 0, 0, 642, 643, 3, 124, 62, 0, 643, + 644, 5, 2, 0, 0, 644, 103, 1, 0, 0, 0, 645, 646, 5, 51, 0, 0, 646, 653, + 3, 108, 54, 0, 647, 653, 3, 58, 29, 0, 648, 649, 5, 22, 0, 0, 649, 650, + 3, 106, 53, 0, 650, 651, 5, 23, 0, 0, 651, 653, 1, 0, 0, 0, 652, 645, 1, + 0, 0, 0, 652, 647, 1, 0, 0, 0, 652, 648, 1, 0, 0, 0, 653, 656, 1, 0, 0, + 0, 654, 655, 5, 9, 0, 0, 655, 657, 3, 112, 56, 0, 656, 654, 1, 0, 0, 0, + 656, 657, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 659, 5, 2, 0, 0, 659, + 105, 1, 0, 0, 0, 660, 662, 3, 58, 29, 0, 661, 660, 1, 0, 0, 0, 661, 662, + 1, 0, 0, 0, 662, 669, 1, 0, 0, 0, 663, 665, 5, 15, 0, 0, 664, 666, 3, 58, + 29, 0, 665, 664, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 668, 1, 0, 0, 0, + 667, 663, 1, 0, 0, 0, 668, 671, 1, 0, 0, 0, 669, 667, 1, 0, 0, 0, 669, + 670, 1, 0, 0, 0, 670, 107, 1, 0, 0, 0, 671, 669, 1, 0, 0, 0, 672, 679, + 5, 22, 0, 0, 673, 675, 3, 170, 85, 0, 674, 673, 1, 0, 0, 0, 674, 675, 1, + 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 678, 5, 15, 0, 0, 677, 674, 1, 0, 0, + 0, 678, 681, 1, 0, 0, 0, 679, 677, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, + 683, 1, 0, 0, 0, 681, 679, 1, 0, 0, 0, 682, 684, 3, 170, 85, 0, 683, 682, + 1, 0, 0, 0, 683, 684, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 686, 5, 23, + 0, 0, 686, 109, 1, 0, 0, 0, 687, 689, 5, 52, 0, 0, 688, 690, 5, 113, 0, + 0, 689, 688, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 690, 701, 1, 0, 0, 0, 691, + 701, 5, 53, 0, 0, 692, 701, 5, 54, 0, 0, 693, 701, 5, 51, 0, 0, 694, 701, + 5, 93, 0, 0, 695, 701, 5, 94, 0, 0, 696, 701, 5, 55, 0, 0, 697, 701, 5, + 95, 0, 0, 698, 701, 5, 96, 0, 0, 699, 701, 5, 97, 0, 0, 700, 687, 1, 0, + 0, 0, 700, 691, 1, 0, 0, 0, 700, 692, 1, 0, 0, 0, 700, 693, 1, 0, 0, 0, + 700, 694, 1, 0, 0, 0, 700, 695, 1, 0, 0, 0, 700, 696, 1, 0, 0, 0, 700, + 697, 1, 0, 0, 0, 700, 698, 1, 0, 0, 0, 700, 699, 1, 0, 0, 0, 701, 111, + 1, 0, 0, 0, 702, 703, 6, 56, -1, 0, 703, 704, 5, 58, 0, 0, 704, 726, 3, + 60, 30, 0, 705, 706, 5, 113, 0, 0, 706, 707, 5, 22, 0, 0, 707, 708, 3, + 112, 56, 0, 708, 709, 5, 23, 0, 0, 709, 726, 1, 0, 0, 0, 710, 711, 5, 22, + 0, 0, 711, 712, 3, 112, 56, 0, 712, 713, 5, 23, 0, 0, 713, 726, 1, 0, 0, + 0, 714, 715, 7, 4, 0, 0, 715, 726, 3, 112, 56, 19, 716, 717, 7, 5, 0, 0, + 717, 726, 3, 112, 56, 18, 718, 719, 7, 6, 0, 0, 719, 726, 3, 112, 56, 17, + 720, 721, 5, 64, 0, 0, 721, 726, 3, 112, 56, 16, 722, 723, 5, 4, 0, 0, + 723, 726, 3, 112, 56, 15, 724, 726, 3, 114, 57, 0, 725, 702, 1, 0, 0, 0, + 725, 705, 1, 0, 0, 0, 725, 710, 1, 0, 0, 0, 725, 714, 1, 0, 0, 0, 725, + 716, 1, 0, 0, 0, 725, 718, 1, 0, 0, 0, 725, 720, 1, 0, 0, 0, 725, 722, + 1, 0, 0, 0, 725, 724, 1, 0, 0, 0, 726, 802, 1, 0, 0, 0, 727, 728, 10, 14, + 0, 0, 728, 729, 5, 65, 0, 0, 729, 801, 3, 112, 56, 15, 730, 731, 10, 13, + 0, 0, 731, 732, 7, 7, 0, 0, 732, 801, 3, 112, 56, 14, 733, 734, 10, 12, + 0, 0, 734, 735, 7, 5, 0, 0, 735, 801, 3, 112, 56, 13, 736, 737, 10, 11, + 0, 0, 737, 738, 7, 8, 0, 0, 738, 801, 3, 112, 56, 12, 739, 740, 10, 10, + 0, 0, 740, 741, 5, 70, 0, 0, 741, 801, 3, 112, 56, 11, 742, 743, 10, 9, + 0, 0, 743, 744, 5, 3, 0, 0, 744, 801, 3, 112, 56, 10, 745, 746, 10, 8, + 0, 0, 746, 747, 5, 71, 0, 0, 747, 801, 3, 112, 56, 9, 748, 749, 10, 7, + 0, 0, 749, 750, 7, 9, 0, 0, 750, 801, 3, 112, 56, 8, 751, 752, 10, 6, 0, + 0, 752, 753, 7, 10, 0, 0, 753, 801, 3, 112, 56, 7, 754, 755, 10, 5, 0, + 0, 755, 756, 5, 74, 0, 0, 756, 801, 3, 112, 56, 6, 757, 758, 10, 4, 0, + 0, 758, 759, 5, 75, 0, 0, 759, 801, 3, 112, 56, 5, 760, 761, 10, 3, 0, + 0, 761, 762, 5, 76, 0, 0, 762, 763, 3, 112, 56, 0, 763, 764, 5, 59, 0, + 0, 764, 765, 3, 112, 56, 4, 765, 801, 1, 0, 0, 0, 766, 767, 10, 2, 0, 0, + 767, 768, 7, 11, 0, 0, 768, 801, 3, 112, 56, 3, 769, 770, 10, 28, 0, 0, + 770, 801, 7, 4, 0, 0, 771, 772, 10, 26, 0, 0, 772, 774, 5, 33, 0, 0, 773, + 775, 3, 112, 56, 0, 774, 773, 1, 0, 0, 0, 774, 775, 1, 0, 0, 0, 775, 776, + 1, 0, 0, 0, 776, 801, 5, 34, 0, 0, 777, 778, 10, 25, 0, 0, 778, 780, 5, + 33, 0, 0, 779, 781, 3, 112, 56, 0, 780, 779, 1, 0, 0, 0, 780, 781, 1, 0, + 0, 0, 781, 782, 1, 0, 0, 0, 782, 784, 5, 59, 0, 0, 783, 785, 3, 112, 56, + 0, 784, 783, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 786, 1, 0, 0, 0, 786, + 801, 5, 34, 0, 0, 787, 788, 10, 24, 0, 0, 788, 789, 5, 35, 0, 0, 789, 801, + 3, 170, 85, 0, 790, 791, 10, 23, 0, 0, 791, 792, 5, 14, 0, 0, 792, 793, + 3, 118, 59, 0, 793, 794, 5, 16, 0, 0, 794, 801, 1, 0, 0, 0, 795, 796, 10, + 22, 0, 0, 796, 797, 5, 22, 0, 0, 797, 798, 3, 122, 61, 0, 798, 799, 5, + 23, 0, 0, 799, 801, 1, 0, 0, 0, 800, 727, 1, 0, 0, 0, 800, 730, 1, 0, 0, + 0, 800, 733, 1, 0, 0, 0, 800, 736, 1, 0, 0, 0, 800, 739, 1, 0, 0, 0, 800, + 742, 1, 0, 0, 0, 800, 745, 1, 0, 0, 0, 800, 748, 1, 0, 0, 0, 800, 751, + 1, 0, 0, 0, 800, 754, 1, 0, 0, 0, 800, 757, 1, 0, 0, 0, 800, 760, 1, 0, + 0, 0, 800, 766, 1, 0, 0, 0, 800, 769, 1, 0, 0, 0, 800, 771, 1, 0, 0, 0, + 800, 777, 1, 0, 0, 0, 800, 787, 1, 0, 0, 0, 800, 790, 1, 0, 0, 0, 800, + 795, 1, 0, 0, 0, 801, 804, 1, 0, 0, 0, 802, 800, 1, 0, 0, 0, 802, 803, + 1, 0, 0, 0, 803, 113, 1, 0, 0, 0, 804, 802, 1, 0, 0, 0, 805, 822, 5, 98, + 0, 0, 806, 822, 3, 168, 84, 0, 807, 822, 3, 172, 86, 0, 808, 822, 3, 174, + 87, 0, 809, 812, 3, 170, 85, 0, 810, 811, 5, 33, 0, 0, 811, 813, 5, 34, + 0, 0, 812, 810, 1, 0, 0, 0, 812, 813, 1, 0, 0, 0, 813, 822, 1, 0, 0, 0, + 814, 822, 5, 118, 0, 0, 815, 822, 3, 126, 63, 0, 816, 819, 3, 128, 64, + 0, 817, 818, 5, 33, 0, 0, 818, 820, 5, 34, 0, 0, 819, 817, 1, 0, 0, 0, + 819, 820, 1, 0, 0, 0, 820, 822, 1, 0, 0, 0, 821, 805, 1, 0, 0, 0, 821, + 806, 1, 0, 0, 0, 821, 807, 1, 0, 0, 0, 821, 808, 1, 0, 0, 0, 821, 809, + 1, 0, 0, 0, 821, 814, 1, 0, 0, 0, 821, 815, 1, 0, 0, 0, 821, 816, 1, 0, + 0, 0, 822, 115, 1, 0, 0, 0, 823, 828, 3, 112, 56, 0, 824, 825, 5, 15, 0, + 0, 825, 827, 3, 112, 56, 0, 826, 824, 1, 0, 0, 0, 827, 830, 1, 0, 0, 0, + 828, 826, 1, 0, 0, 0, 828, 829, 1, 0, 0, 0, 829, 117, 1, 0, 0, 0, 830, + 828, 1, 0, 0, 0, 831, 836, 3, 120, 60, 0, 832, 833, 5, 15, 0, 0, 833, 835, + 3, 120, 60, 0, 834, 832, 1, 0, 0, 0, 835, 838, 1, 0, 0, 0, 836, 834, 1, + 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 840, 1, 0, 0, 0, 838, 836, 1, 0, 0, + 0, 839, 841, 5, 15, 0, 0, 840, 839, 1, 0, 0, 0, 840, 841, 1, 0, 0, 0, 841, + 119, 1, 0, 0, 0, 842, 843, 3, 170, 85, 0, 843, 844, 5, 59, 0, 0, 844, 845, + 3, 112, 56, 0, 845, 121, 1, 0, 0, 0, 846, 848, 5, 14, 0, 0, 847, 849, 3, + 118, 59, 0, 848, 847, 1, 0, 0, 0, 848, 849, 1, 0, 0, 0, 849, 850, 1, 0, + 0, 0, 850, 855, 5, 16, 0, 0, 851, 853, 3, 116, 58, 0, 852, 851, 1, 0, 0, + 0, 852, 853, 1, 0, 0, 0, 853, 855, 1, 0, 0, 0, 854, 846, 1, 0, 0, 0, 854, + 852, 1, 0, 0, 0, 855, 123, 1, 0, 0, 0, 856, 857, 3, 112, 56, 0, 857, 858, + 5, 22, 0, 0, 858, 859, 3, 122, 61, 0, 859, 860, 5, 23, 0, 0, 860, 125, + 1, 0, 0, 0, 861, 863, 5, 22, 0, 0, 862, 864, 3, 112, 56, 0, 863, 862, 1, + 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 871, 1, 0, 0, 0, 865, 867, 5, 15, 0, + 0, 866, 868, 3, 112, 56, 0, 867, 866, 1, 0, 0, 0, 867, 868, 1, 0, 0, 0, + 868, 870, 1, 0, 0, 0, 869, 865, 1, 0, 0, 0, 870, 873, 1, 0, 0, 0, 871, + 869, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 874, 1, 0, 0, 0, 873, 871, + 1, 0, 0, 0, 874, 888, 5, 23, 0, 0, 875, 884, 5, 33, 0, 0, 876, 881, 3, + 112, 56, 0, 877, 878, 5, 15, 0, 0, 878, 880, 3, 112, 56, 0, 879, 877, 1, + 0, 0, 0, 880, 883, 1, 0, 0, 0, 881, 879, 1, 0, 0, 0, 881, 882, 1, 0, 0, + 0, 882, 885, 1, 0, 0, 0, 883, 881, 1, 0, 0, 0, 884, 876, 1, 0, 0, 0, 884, + 885, 1, 0, 0, 0, 885, 886, 1, 0, 0, 0, 886, 888, 5, 34, 0, 0, 887, 861, + 1, 0, 0, 0, 887, 875, 1, 0, 0, 0, 888, 127, 1, 0, 0, 0, 889, 892, 3, 110, + 55, 0, 890, 892, 3, 62, 31, 0, 891, 889, 1, 0, 0, 0, 891, 890, 1, 0, 0, + 0, 892, 129, 1, 0, 0, 0, 893, 912, 3, 170, 85, 0, 894, 912, 3, 132, 66, + 0, 895, 912, 3, 134, 67, 0, 896, 912, 3, 138, 69, 0, 897, 912, 3, 140, + 70, 0, 898, 912, 3, 144, 72, 0, 899, 912, 3, 146, 73, 0, 900, 912, 3, 148, + 74, 0, 901, 912, 3, 152, 76, 0, 902, 912, 3, 156, 78, 0, 903, 912, 3, 158, + 79, 0, 904, 912, 5, 105, 0, 0, 905, 912, 5, 108, 0, 0, 906, 912, 5, 109, + 0, 0, 907, 912, 3, 166, 83, 0, 908, 912, 3, 168, 84, 0, 909, 912, 3, 174, + 87, 0, 910, 912, 3, 172, 86, 0, 911, 893, 1, 0, 0, 0, 911, 894, 1, 0, 0, + 0, 911, 895, 1, 0, 0, 0, 911, 896, 1, 0, 0, 0, 911, 897, 1, 0, 0, 0, 911, + 898, 1, 0, 0, 0, 911, 899, 1, 0, 0, 0, 911, 900, 1, 0, 0, 0, 911, 901, + 1, 0, 0, 0, 911, 902, 1, 0, 0, 0, 911, 903, 1, 0, 0, 0, 911, 904, 1, 0, + 0, 0, 911, 905, 1, 0, 0, 0, 911, 906, 1, 0, 0, 0, 911, 907, 1, 0, 0, 0, + 911, 908, 1, 0, 0, 0, 911, 909, 1, 0, 0, 0, 911, 910, 1, 0, 0, 0, 912, + 131, 1, 0, 0, 0, 913, 917, 5, 14, 0, 0, 914, 916, 3, 130, 65, 0, 915, 914, + 1, 0, 0, 0, 916, 919, 1, 0, 0, 0, 917, 915, 1, 0, 0, 0, 917, 918, 1, 0, + 0, 0, 918, 920, 1, 0, 0, 0, 919, 917, 1, 0, 0, 0, 920, 921, 5, 16, 0, 0, + 921, 133, 1, 0, 0, 0, 922, 925, 3, 136, 68, 0, 923, 925, 3, 160, 80, 0, + 924, 922, 1, 0, 0, 0, 924, 923, 1, 0, 0, 0, 925, 135, 1, 0, 0, 0, 926, + 931, 5, 48, 0, 0, 927, 931, 5, 52, 0, 0, 928, 931, 5, 55, 0, 0, 929, 931, + 3, 170, 85, 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, 944, 1, 0, 0, 0, 932, 934, 5, 22, 0, + 0, 933, 935, 3, 134, 67, 0, 934, 933, 1, 0, 0, 0, 934, 935, 1, 0, 0, 0, + 935, 940, 1, 0, 0, 0, 936, 937, 5, 15, 0, 0, 937, 939, 3, 134, 67, 0, 938, + 936, 1, 0, 0, 0, 939, 942, 1, 0, 0, 0, 940, 938, 1, 0, 0, 0, 940, 941, + 1, 0, 0, 0, 941, 943, 1, 0, 0, 0, 942, 940, 1, 0, 0, 0, 943, 945, 5, 23, + 0, 0, 944, 932, 1, 0, 0, 0, 944, 945, 1, 0, 0, 0, 945, 137, 1, 0, 0, 0, + 946, 947, 5, 87, 0, 0, 947, 950, 3, 142, 71, 0, 948, 949, 5, 88, 0, 0, + 949, 951, 3, 134, 67, 0, 950, 948, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, + 139, 1, 0, 0, 0, 952, 953, 3, 142, 71, 0, 953, 954, 5, 88, 0, 0, 954, 955, + 3, 134, 67, 0, 955, 141, 1, 0, 0, 0, 956, 961, 3, 170, 85, 0, 957, 958, + 5, 15, 0, 0, 958, 960, 3, 170, 85, 0, 959, 957, 1, 0, 0, 0, 960, 963, 1, + 0, 0, 0, 961, 959, 1, 0, 0, 0, 961, 962, 1, 0, 0, 0, 962, 143, 1, 0, 0, + 0, 963, 961, 1, 0, 0, 0, 964, 965, 5, 89, 0, 0, 965, 966, 3, 170, 85, 0, + 966, 145, 1, 0, 0, 0, 967, 968, 3, 170, 85, 0, 968, 969, 5, 59, 0, 0, 969, + 147, 1, 0, 0, 0, 970, 971, 5, 90, 0, 0, 971, 975, 3, 134, 67, 0, 972, 974, + 3, 150, 75, 0, 973, 972, 1, 0, 0, 0, 974, 977, 1, 0, 0, 0, 975, 973, 1, + 0, 0, 0, 975, 976, 1, 0, 0, 0, 976, 149, 1, 0, 0, 0, 977, 975, 1, 0, 0, + 0, 978, 979, 5, 91, 0, 0, 979, 981, 3, 160, 80, 0, 980, 982, 3, 164, 82, + 0, 981, 980, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 983, 1, 0, 0, 0, 983, + 984, 3, 132, 66, 0, 984, 988, 1, 0, 0, 0, 985, 986, 5, 92, 0, 0, 986, 988, + 3, 132, 66, 0, 987, 978, 1, 0, 0, 0, 987, 985, 1, 0, 0, 0, 988, 151, 1, + 0, 0, 0, 989, 990, 5, 29, 0, 0, 990, 991, 3, 170, 85, 0, 991, 993, 5, 22, + 0, 0, 992, 994, 3, 162, 81, 0, 993, 992, 1, 0, 0, 0, 993, 994, 1, 0, 0, + 0, 994, 995, 1, 0, 0, 0, 995, 997, 5, 23, 0, 0, 996, 998, 3, 154, 77, 0, + 997, 996, 1, 0, 0, 0, 997, 998, 1, 0, 0, 0, 998, 999, 1, 0, 0, 0, 999, + 1000, 3, 132, 66, 0, 1000, 153, 1, 0, 0, 0, 1001, 1002, 5, 61, 0, 0, 1002, + 1003, 5, 6, 0, 0, 1003, 1004, 3, 162, 81, 0, 1004, 155, 1, 0, 0, 0, 1005, + 1006, 5, 26, 0, 0, 1006, 1007, 3, 132, 66, 0, 1007, 1008, 3, 134, 67, 0, + 1008, 1009, 3, 132, 66, 0, 1009, 1010, 3, 132, 66, 0, 1010, 157, 1, 0, + 0, 0, 1011, 1012, 5, 41, 0, 0, 1012, 1013, 3, 134, 67, 0, 1013, 1014, 3, + 132, 66, 0, 1014, 159, 1, 0, 0, 0, 1015, 1021, 3, 174, 87, 0, 1016, 1021, + 5, 99, 0, 0, 1017, 1021, 5, 100, 0, 0, 1018, 1021, 3, 172, 86, 0, 1019, + 1021, 5, 98, 0, 0, 1020, 1015, 1, 0, 0, 0, 1020, 1016, 1, 0, 0, 0, 1020, + 1017, 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1020, 1019, 1, 0, 0, 0, 1021, + 1023, 1, 0, 0, 0, 1022, 1024, 3, 164, 82, 0, 1023, 1022, 1, 0, 0, 0, 1023, + 1024, 1, 0, 0, 0, 1024, 161, 1, 0, 0, 0, 1025, 1027, 3, 170, 85, 0, 1026, + 1028, 3, 164, 82, 0, 1027, 1026, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, + 1031, 1, 0, 0, 0, 1029, 1030, 5, 15, 0, 0, 1030, 1032, 3, 162, 81, 0, 1031, + 1029, 1, 0, 0, 0, 1031, 1032, 1, 0, 0, 0, 1032, 163, 1, 0, 0, 0, 1033, + 1034, 5, 59, 0, 0, 1034, 1035, 3, 170, 85, 0, 1035, 165, 1, 0, 0, 0, 1036, + 1037, 5, 46, 0, 0, 1037, 1038, 3, 170, 85, 0, 1038, 1039, 3, 132, 66, 0, + 1039, 167, 1, 0, 0, 0, 1040, 1042, 7, 12, 0, 0, 1041, 1043, 5, 101, 0, + 0, 1042, 1041, 1, 0, 0, 0, 1042, 1043, 1, 0, 0, 0, 1043, 169, 1, 0, 0, + 0, 1044, 1045, 7, 13, 0, 0, 1045, 171, 1, 0, 0, 0, 1046, 1048, 5, 102, + 0, 0, 1047, 1046, 1, 0, 0, 0, 1048, 1049, 1, 0, 0, 0, 1049, 1047, 1, 0, + 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 173, 1, 0, 0, 0, 1051, 1053, 5, 124, + 0, 0, 1052, 1051, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 1052, 1, 0, + 0, 0, 1054, 1055, 1, 0, 0, 0, 1055, 175, 1, 0, 0, 0, 122, 181, 183, 197, + 201, 204, 214, 220, 224, 236, 244, 249, 252, 262, 265, 271, 279, 282, 291, + 300, 302, 308, 319, 324, 331, 345, 348, 355, 359, 361, 366, 372, 376, 382, + 387, 400, 402, 408, 411, 417, 425, 431, 444, 447, 453, 456, 464, 467, 473, + 476, 480, 489, 494, 499, 507, 514, 524, 534, 552, 564, 569, 575, 579, 582, + 596, 600, 603, 610, 614, 634, 652, 656, 661, 665, 669, 674, 679, 683, 689, + 700, 725, 774, 780, 784, 800, 802, 812, 819, 821, 828, 836, 840, 848, 852, + 854, 863, 867, 871, 881, 884, 887, 891, 911, 917, 924, 930, 934, 940, 944, + 950, 961, 975, 981, 987, 993, 997, 1020, 1023, 1027, 1031, 1042, 1049, + 1054, +} + deserializer := antlr.NewATNDeserializer(nil) + staticData.atn = deserializer.Deserialize(staticData.serializedATN) + atn := staticData.atn + staticData.decisionToDFA = make([]*antlr.DFA, len(atn.DecisionToState)) + decisionToDFA := staticData.decisionToDFA + for index, state := range atn.DecisionToState { + decisionToDFA[index] = antlr.NewDFA(state, index) + } +} + +// SolidityParserInit initializes any static state used to implement SolidityParser. By default the +// static state used to implement the parser is lazily initialized during the first call to +// NewSolidityParser(). You can call this function if you wish to initialize the static state ahead +// of time. +func SolidityParserInit() { + staticData := &solidityParserStaticData + staticData.once.Do(solidityParserInit) +} + +// NewSolidityParser produces a new parser instance for the optional input antlr.TokenStream. +func NewSolidityParser(input antlr.TokenStream) *SolidityParser { + SolidityParserInit() + this := new(SolidityParser) + this.BaseParser = antlr.NewBaseParser(input) + staticData := &solidityParserStaticData + this.Interpreter = antlr.NewParserATNSimulator(this, staticData.atn, staticData.decisionToDFA, staticData.predictionContextCache) + this.RuleNames = staticData.ruleNames + this.LiteralNames = staticData.literalNames + this.SymbolicNames = staticData.symbolicNames + this.GrammarFileName = "Solidity.g4" + + return this +} + + +// SolidityParser tokens. +const ( + SolidityParserEOF = antlr.TokenEOF + SolidityParserT__0 = 1 + SolidityParserT__1 = 2 + SolidityParserT__2 = 3 + SolidityParserT__3 = 4 + SolidityParserT__4 = 5 + SolidityParserT__5 = 6 + SolidityParserT__6 = 7 + SolidityParserT__7 = 8 + SolidityParserT__8 = 9 + SolidityParserT__9 = 10 + SolidityParserT__10 = 11 + SolidityParserT__11 = 12 + SolidityParserT__12 = 13 + SolidityParserT__13 = 14 + SolidityParserT__14 = 15 + SolidityParserT__15 = 16 + SolidityParserT__16 = 17 + SolidityParserT__17 = 18 + SolidityParserT__18 = 19 + SolidityParserT__19 = 20 + SolidityParserT__20 = 21 + SolidityParserT__21 = 22 + SolidityParserT__22 = 23 + SolidityParserT__23 = 24 + SolidityParserT__24 = 25 + SolidityParserT__25 = 26 + SolidityParserT__26 = 27 + SolidityParserT__27 = 28 + SolidityParserT__28 = 29 + SolidityParserT__29 = 30 + SolidityParserT__30 = 31 + SolidityParserT__31 = 32 + SolidityParserT__32 = 33 + SolidityParserT__33 = 34 + SolidityParserT__34 = 35 + SolidityParserT__35 = 36 + SolidityParserT__36 = 37 + SolidityParserT__37 = 38 + SolidityParserT__38 = 39 + SolidityParserT__39 = 40 + SolidityParserT__40 = 41 + SolidityParserT__41 = 42 + SolidityParserT__42 = 43 + SolidityParserT__43 = 44 + SolidityParserT__44 = 45 + SolidityParserT__45 = 46 + SolidityParserT__46 = 47 + SolidityParserT__47 = 48 + SolidityParserT__48 = 49 + SolidityParserT__49 = 50 + SolidityParserT__50 = 51 + SolidityParserT__51 = 52 + SolidityParserT__52 = 53 + SolidityParserT__53 = 54 + SolidityParserT__54 = 55 + SolidityParserT__55 = 56 + SolidityParserT__56 = 57 + SolidityParserT__57 = 58 + SolidityParserT__58 = 59 + SolidityParserT__59 = 60 + SolidityParserT__60 = 61 + SolidityParserT__61 = 62 + SolidityParserT__62 = 63 + SolidityParserT__63 = 64 + SolidityParserT__64 = 65 + SolidityParserT__65 = 66 + SolidityParserT__66 = 67 + SolidityParserT__67 = 68 + SolidityParserT__68 = 69 + SolidityParserT__69 = 70 + SolidityParserT__70 = 71 + SolidityParserT__71 = 72 + SolidityParserT__72 = 73 + SolidityParserT__73 = 74 + SolidityParserT__74 = 75 + SolidityParserT__75 = 76 + SolidityParserT__76 = 77 + SolidityParserT__77 = 78 + SolidityParserT__78 = 79 + SolidityParserT__79 = 80 + SolidityParserT__80 = 81 + SolidityParserT__81 = 82 + SolidityParserT__82 = 83 + SolidityParserT__83 = 84 + SolidityParserT__84 = 85 + SolidityParserT__85 = 86 + SolidityParserT__86 = 87 + SolidityParserT__87 = 88 + SolidityParserT__88 = 89 + SolidityParserT__89 = 90 + SolidityParserT__90 = 91 + SolidityParserT__91 = 92 + SolidityParserInt = 93 + SolidityParserUint = 94 + SolidityParserByte = 95 + SolidityParserFixed = 96 + SolidityParserUfixed = 97 + SolidityParserBooleanLiteral = 98 + SolidityParserDecimalNumber = 99 + SolidityParserHexNumber = 100 + SolidityParserNumberUnit = 101 + SolidityParserHexLiteralFragment = 102 + SolidityParserReservedKeyword = 103 + SolidityParserAnonymousKeyword = 104 + SolidityParserBreakKeyword = 105 + SolidityParserConstantKeyword = 106 + SolidityParserImmutableKeyword = 107 + SolidityParserContinueKeyword = 108 + SolidityParserLeaveKeyword = 109 + SolidityParserExternalKeyword = 110 + SolidityParserIndexedKeyword = 111 + SolidityParserInternalKeyword = 112 + SolidityParserPayableKeyword = 113 + SolidityParserPrivateKeyword = 114 + SolidityParserPublicKeyword = 115 + SolidityParserVirtualKeyword = 116 + SolidityParserPureKeyword = 117 + SolidityParserTypeKeyword = 118 + SolidityParserViewKeyword = 119 + SolidityParserConstructorKeyword = 120 + SolidityParserFallbackKeyword = 121 + SolidityParserReceiveKeyword = 122 + SolidityParserIdentifier = 123 + SolidityParserStringLiteralFragment = 124 + SolidityParserVersionLiteral = 125 + SolidityParserWS = 126 + SolidityParserCOMMENT = 127 + SolidityParserLINE_COMMENT = 128 +) + +// SolidityParser rules. +const ( + SolidityParserRULE_sourceUnit = 0 + SolidityParserRULE_pragmaDirective = 1 + SolidityParserRULE_pragmaName = 2 + SolidityParserRULE_pragmaValue = 3 + SolidityParserRULE_version = 4 + SolidityParserRULE_versionConstraint = 5 + SolidityParserRULE_versionOperator = 6 + SolidityParserRULE_importDirective = 7 + SolidityParserRULE_importDeclaration = 8 + SolidityParserRULE_contractDefinition = 9 + SolidityParserRULE_inheritanceSpecifier = 10 + SolidityParserRULE_contractPart = 11 + SolidityParserRULE_stateVariableDeclaration = 12 + SolidityParserRULE_overrideSpecifier = 13 + SolidityParserRULE_usingForDeclaration = 14 + SolidityParserRULE_structDefinition = 15 + SolidityParserRULE_modifierDefinition = 16 + SolidityParserRULE_functionDefinition = 17 + SolidityParserRULE_functionDescriptor = 18 + SolidityParserRULE_returnParameters = 19 + SolidityParserRULE_modifierList = 20 + SolidityParserRULE_modifierInvocation = 21 + SolidityParserRULE_eventDefinition = 22 + SolidityParserRULE_enumDefinition = 23 + SolidityParserRULE_enumValue = 24 + SolidityParserRULE_parameterList = 25 + SolidityParserRULE_parameter = 26 + SolidityParserRULE_eventParameterList = 27 + SolidityParserRULE_eventParameter = 28 + SolidityParserRULE_variableDeclaration = 29 + SolidityParserRULE_typeName = 30 + SolidityParserRULE_userDefinedTypeName = 31 + SolidityParserRULE_mapping = 32 + SolidityParserRULE_functionTypeName = 33 + SolidityParserRULE_storageLocation = 34 + SolidityParserRULE_stateMutability = 35 + SolidityParserRULE_block = 36 + SolidityParserRULE_statement = 37 + SolidityParserRULE_expressionStatement = 38 + SolidityParserRULE_ifStatement = 39 + SolidityParserRULE_tryStatement = 40 + SolidityParserRULE_catchClause = 41 + SolidityParserRULE_whileStatement = 42 + SolidityParserRULE_forStatement = 43 + SolidityParserRULE_simpleStatement = 44 + SolidityParserRULE_inlineAssemblyStatement = 45 + SolidityParserRULE_doWhileStatement = 46 + SolidityParserRULE_continueStatement = 47 + SolidityParserRULE_breakStatement = 48 + SolidityParserRULE_returnStatement = 49 + SolidityParserRULE_throwStatement = 50 + SolidityParserRULE_emitStatement = 51 + SolidityParserRULE_variableDeclarationStatement = 52 + SolidityParserRULE_variableDeclarationList = 53 + SolidityParserRULE_identifierList = 54 + SolidityParserRULE_elementaryTypeName = 55 + SolidityParserRULE_expression = 56 + SolidityParserRULE_primaryExpression = 57 + SolidityParserRULE_expressionList = 58 + SolidityParserRULE_nameValueList = 59 + SolidityParserRULE_nameValue = 60 + SolidityParserRULE_functionCallArguments = 61 + SolidityParserRULE_functionCall = 62 + SolidityParserRULE_tupleExpression = 63 + SolidityParserRULE_typeNameExpression = 64 + SolidityParserRULE_assemblyItem = 65 + SolidityParserRULE_assemblyBlock = 66 + SolidityParserRULE_assemblyExpression = 67 + SolidityParserRULE_assemblyCall = 68 + SolidityParserRULE_assemblyLocalDefinition = 69 + SolidityParserRULE_assemblyAssignment = 70 + SolidityParserRULE_assemblyIdentifierList = 71 + SolidityParserRULE_assemblyStackAssignment = 72 + SolidityParserRULE_labelDefinition = 73 + SolidityParserRULE_assemblySwitch = 74 + SolidityParserRULE_assemblyCase = 75 + SolidityParserRULE_assemblyFunctionDefinition = 76 + SolidityParserRULE_assemblyFunctionReturns = 77 + SolidityParserRULE_assemblyFor = 78 + SolidityParserRULE_assemblyIf = 79 + SolidityParserRULE_assemblyLiteral = 80 + SolidityParserRULE_assemblyTypedVariableList = 81 + SolidityParserRULE_assemblyType = 82 + SolidityParserRULE_subAssembly = 83 + SolidityParserRULE_numberLiteral = 84 + SolidityParserRULE_identifier = 85 + SolidityParserRULE_hexLiteral = 86 + SolidityParserRULE_stringLiteral = 87 +) + +// ISourceUnitContext is an interface to support dynamic dispatch. +type ISourceUnitContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsSourceUnitContext differentiates from other interfaces. + IsSourceUnitContext() +} + +type SourceUnitContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptySourceUnitContext() *SourceUnitContext { + var p = new(SourceUnitContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_sourceUnit + return p +} + +func (*SourceUnitContext) IsSourceUnitContext() {} + +func NewSourceUnitContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *SourceUnitContext { + var p = new(SourceUnitContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_sourceUnit + + return p +} + +func (s *SourceUnitContext) GetParser() antlr.Parser { return s.parser } + +func (s *SourceUnitContext) EOF() antlr.TerminalNode { + return s.GetToken(SolidityParserEOF, 0) +} + +func (s *SourceUnitContext) AllPragmaDirective() []IPragmaDirectiveContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IPragmaDirectiveContext); ok { + len++ + } + } + + tst := make([]IPragmaDirectiveContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IPragmaDirectiveContext); ok { + tst[i] = t.(IPragmaDirectiveContext) + i++ + } + } + + return tst +} + +func (s *SourceUnitContext) PragmaDirective(i int) IPragmaDirectiveContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IPragmaDirectiveContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IPragmaDirectiveContext) +} + +func (s *SourceUnitContext) AllImportDirective() []IImportDirectiveContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IImportDirectiveContext); ok { + len++ + } + } + + tst := make([]IImportDirectiveContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IImportDirectiveContext); ok { + tst[i] = t.(IImportDirectiveContext) + i++ + } + } + + return tst +} + +func (s *SourceUnitContext) ImportDirective(i int) IImportDirectiveContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IImportDirectiveContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IImportDirectiveContext) +} + +func (s *SourceUnitContext) AllStructDefinition() []IStructDefinitionContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IStructDefinitionContext); ok { + len++ + } + } + + tst := make([]IStructDefinitionContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IStructDefinitionContext); ok { + tst[i] = t.(IStructDefinitionContext) + i++ + } + } + + return tst +} + +func (s *SourceUnitContext) StructDefinition(i int) IStructDefinitionContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStructDefinitionContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IStructDefinitionContext) +} + +func (s *SourceUnitContext) AllEnumDefinition() []IEnumDefinitionContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IEnumDefinitionContext); ok { + len++ + } + } + + tst := make([]IEnumDefinitionContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IEnumDefinitionContext); ok { + tst[i] = t.(IEnumDefinitionContext) + i++ + } + } + + return tst +} + +func (s *SourceUnitContext) EnumDefinition(i int) IEnumDefinitionContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IEnumDefinitionContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IEnumDefinitionContext) +} + +func (s *SourceUnitContext) AllContractDefinition() []IContractDefinitionContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IContractDefinitionContext); ok { + len++ + } + } + + tst := make([]IContractDefinitionContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IContractDefinitionContext); ok { + tst[i] = t.(IContractDefinitionContext) + i++ + } + } + + return tst +} + +func (s *SourceUnitContext) ContractDefinition(i int) IContractDefinitionContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IContractDefinitionContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IContractDefinitionContext) +} + +func (s *SourceUnitContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *SourceUnitContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *SourceUnitContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterSourceUnit(s) + } +} + +func (s *SourceUnitContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitSourceUnit(s) + } +} + + + + +func (p *SolidityParser) SourceUnit() (localctx ISourceUnitContext) { + this := p + _ = this + + localctx = NewSourceUnitContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 0, SolidityParserRULE_sourceUnit) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + p.SetState(183) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for ((((_la - 1)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 1))) & ((1 << (SolidityParserT__0 - 1)) | (1 << (SolidityParserT__9 - 1)) | (1 << (SolidityParserT__16 - 1)) | (1 << (SolidityParserT__17 - 1)) | (1 << (SolidityParserT__18 - 1)) | (1 << (SolidityParserT__19 - 1)) | (1 << (SolidityParserT__26 - 1)) | (1 << (SolidityParserT__31 - 1)))) != 0) { + p.SetState(181) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__0: + { + p.SetState(176) + p.PragmaDirective() + } + + + case SolidityParserT__9: + { + p.SetState(177) + p.ImportDirective() + } + + + case SolidityParserT__26: + { + p.SetState(178) + p.StructDefinition() + } + + + case SolidityParserT__31: + { + p.SetState(179) + p.EnumDefinition() + } + + + case SolidityParserT__16, SolidityParserT__17, SolidityParserT__18, SolidityParserT__19: + { + p.SetState(180) + p.ContractDefinition() + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + p.SetState(185) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + { + p.SetState(186) + p.Match(SolidityParserEOF) + } + + + + return localctx +} + + +// IPragmaDirectiveContext is an interface to support dynamic dispatch. +type IPragmaDirectiveContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsPragmaDirectiveContext differentiates from other interfaces. + IsPragmaDirectiveContext() +} + +type PragmaDirectiveContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyPragmaDirectiveContext() *PragmaDirectiveContext { + var p = new(PragmaDirectiveContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_pragmaDirective + return p +} + +func (*PragmaDirectiveContext) IsPragmaDirectiveContext() {} + +func NewPragmaDirectiveContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *PragmaDirectiveContext { + var p = new(PragmaDirectiveContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_pragmaDirective + + return p +} + +func (s *PragmaDirectiveContext) GetParser() antlr.Parser { return s.parser } + +func (s *PragmaDirectiveContext) PragmaName() IPragmaNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IPragmaNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IPragmaNameContext) +} + +func (s *PragmaDirectiveContext) PragmaValue() IPragmaValueContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IPragmaValueContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IPragmaValueContext) +} + +func (s *PragmaDirectiveContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *PragmaDirectiveContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *PragmaDirectiveContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterPragmaDirective(s) + } +} + +func (s *PragmaDirectiveContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitPragmaDirective(s) + } +} + + + + +func (p *SolidityParser) PragmaDirective() (localctx IPragmaDirectiveContext) { + this := p + _ = this + + localctx = NewPragmaDirectiveContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 2, SolidityParserRULE_pragmaDirective) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(188) + p.Match(SolidityParserT__0) + } + { + p.SetState(189) + p.PragmaName() + } + { + p.SetState(190) + p.PragmaValue() + } + { + p.SetState(191) + p.Match(SolidityParserT__1) + } + + + + return localctx +} + + +// IPragmaNameContext is an interface to support dynamic dispatch. +type IPragmaNameContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsPragmaNameContext differentiates from other interfaces. + IsPragmaNameContext() +} + +type PragmaNameContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyPragmaNameContext() *PragmaNameContext { + var p = new(PragmaNameContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_pragmaName + return p +} + +func (*PragmaNameContext) IsPragmaNameContext() {} + +func NewPragmaNameContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *PragmaNameContext { + var p = new(PragmaNameContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_pragmaName + + return p +} + +func (s *PragmaNameContext) GetParser() antlr.Parser { return s.parser } + +func (s *PragmaNameContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *PragmaNameContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *PragmaNameContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *PragmaNameContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterPragmaName(s) + } +} + +func (s *PragmaNameContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitPragmaName(s) + } +} + + + + +func (p *SolidityParser) PragmaName() (localctx IPragmaNameContext) { + this := p + _ = this + + localctx = NewPragmaNameContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 4, SolidityParserRULE_pragmaName) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(193) + p.Identifier() + } + + + + return localctx +} + + +// IPragmaValueContext is an interface to support dynamic dispatch. +type IPragmaValueContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsPragmaValueContext differentiates from other interfaces. + IsPragmaValueContext() +} + +type PragmaValueContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyPragmaValueContext() *PragmaValueContext { + var p = new(PragmaValueContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_pragmaValue + return p +} + +func (*PragmaValueContext) IsPragmaValueContext() {} + +func NewPragmaValueContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *PragmaValueContext { + var p = new(PragmaValueContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_pragmaValue + + return p +} + +func (s *PragmaValueContext) GetParser() antlr.Parser { return s.parser } + +func (s *PragmaValueContext) Version() IVersionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IVersionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IVersionContext) +} + +func (s *PragmaValueContext) Expression() IExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *PragmaValueContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *PragmaValueContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *PragmaValueContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterPragmaValue(s) + } +} + +func (s *PragmaValueContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitPragmaValue(s) + } +} + + + + +func (p *SolidityParser) PragmaValue() (localctx IPragmaValueContext) { + this := p + _ = this + + localctx = NewPragmaValueContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 6, SolidityParserRULE_pragmaValue) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(197) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 2, p.GetParserRuleContext()) { + case 1: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(195) + p.Version() + } + + + case 2: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(196) + p.expression(0) + } + + } + + + return localctx +} + + +// IVersionContext is an interface to support dynamic dispatch. +type IVersionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsVersionContext differentiates from other interfaces. + IsVersionContext() +} + +type VersionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyVersionContext() *VersionContext { + var p = new(VersionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_version + return p +} + +func (*VersionContext) IsVersionContext() {} + +func NewVersionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *VersionContext { + var p = new(VersionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_version + + return p +} + +func (s *VersionContext) GetParser() antlr.Parser { return s.parser } + +func (s *VersionContext) AllVersionConstraint() []IVersionConstraintContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IVersionConstraintContext); ok { + len++ + } + } + + tst := make([]IVersionConstraintContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IVersionConstraintContext); ok { + tst[i] = t.(IVersionConstraintContext) + i++ + } + } + + return tst +} + +func (s *VersionContext) VersionConstraint(i int) IVersionConstraintContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IVersionConstraintContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IVersionConstraintContext) +} + +func (s *VersionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *VersionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *VersionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterVersion(s) + } +} + +func (s *VersionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitVersion(s) + } +} + + + + +func (p *SolidityParser) Version() (localctx IVersionContext) { + this := p + _ = this + + localctx = NewVersionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 8, SolidityParserRULE_version) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(199) + p.VersionConstraint() + } + p.SetState(201) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__2) | (1 << SolidityParserT__3) | (1 << SolidityParserT__4) | (1 << SolidityParserT__5) | (1 << SolidityParserT__6) | (1 << SolidityParserT__7) | (1 << SolidityParserT__8))) != 0) || _la == SolidityParserVersionLiteral { + { + p.SetState(200) + p.VersionConstraint() + } + + } + + + + return localctx +} + + +// IVersionConstraintContext is an interface to support dynamic dispatch. +type IVersionConstraintContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsVersionConstraintContext differentiates from other interfaces. + IsVersionConstraintContext() +} + +type VersionConstraintContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyVersionConstraintContext() *VersionConstraintContext { + var p = new(VersionConstraintContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_versionConstraint + return p +} + +func (*VersionConstraintContext) IsVersionConstraintContext() {} + +func NewVersionConstraintContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *VersionConstraintContext { + var p = new(VersionConstraintContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_versionConstraint + + return p +} + +func (s *VersionConstraintContext) GetParser() antlr.Parser { return s.parser } + +func (s *VersionConstraintContext) VersionLiteral() antlr.TerminalNode { + return s.GetToken(SolidityParserVersionLiteral, 0) +} + +func (s *VersionConstraintContext) VersionOperator() IVersionOperatorContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IVersionOperatorContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IVersionOperatorContext) +} + +func (s *VersionConstraintContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *VersionConstraintContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *VersionConstraintContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterVersionConstraint(s) + } +} + +func (s *VersionConstraintContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitVersionConstraint(s) + } +} + + + + +func (p *SolidityParser) VersionConstraint() (localctx IVersionConstraintContext) { + this := p + _ = this + + localctx = NewVersionConstraintContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 10, SolidityParserRULE_versionConstraint) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + p.SetState(204) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__2) | (1 << SolidityParserT__3) | (1 << SolidityParserT__4) | (1 << SolidityParserT__5) | (1 << SolidityParserT__6) | (1 << SolidityParserT__7) | (1 << SolidityParserT__8))) != 0) { + { + p.SetState(203) + p.VersionOperator() + } + + } + { + p.SetState(206) + p.Match(SolidityParserVersionLiteral) + } + + + + return localctx +} + + +// IVersionOperatorContext is an interface to support dynamic dispatch. +type IVersionOperatorContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsVersionOperatorContext differentiates from other interfaces. + IsVersionOperatorContext() +} + +type VersionOperatorContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyVersionOperatorContext() *VersionOperatorContext { + var p = new(VersionOperatorContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_versionOperator + return p +} + +func (*VersionOperatorContext) IsVersionOperatorContext() {} + +func NewVersionOperatorContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *VersionOperatorContext { + var p = new(VersionOperatorContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_versionOperator + + return p +} + +func (s *VersionOperatorContext) GetParser() antlr.Parser { return s.parser } +func (s *VersionOperatorContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *VersionOperatorContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *VersionOperatorContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterVersionOperator(s) + } +} + +func (s *VersionOperatorContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitVersionOperator(s) + } +} + + + + +func (p *SolidityParser) VersionOperator() (localctx IVersionOperatorContext) { + this := p + _ = this + + localctx = NewVersionOperatorContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 12, SolidityParserRULE_versionOperator) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(208) + _la = p.GetTokenStream().LA(1) + + if !((((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__2) | (1 << SolidityParserT__3) | (1 << SolidityParserT__4) | (1 << SolidityParserT__5) | (1 << SolidityParserT__6) | (1 << SolidityParserT__7) | (1 << SolidityParserT__8))) != 0)) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + + + + return localctx +} + + +// IImportDirectiveContext is an interface to support dynamic dispatch. +type IImportDirectiveContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsImportDirectiveContext differentiates from other interfaces. + IsImportDirectiveContext() +} + +type ImportDirectiveContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyImportDirectiveContext() *ImportDirectiveContext { + var p = new(ImportDirectiveContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_importDirective + return p +} + +func (*ImportDirectiveContext) IsImportDirectiveContext() {} + +func NewImportDirectiveContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ImportDirectiveContext { + var p = new(ImportDirectiveContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_importDirective + + return p +} + +func (s *ImportDirectiveContext) GetParser() antlr.Parser { return s.parser } + +func (s *ImportDirectiveContext) StringLiteralFragment() antlr.TerminalNode { + return s.GetToken(SolidityParserStringLiteralFragment, 0) +} + +func (s *ImportDirectiveContext) AllIdentifier() []IIdentifierContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IIdentifierContext); ok { + len++ + } + } + + tst := make([]IIdentifierContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IIdentifierContext); ok { + tst[i] = t.(IIdentifierContext) + i++ + } + } + + return tst +} + +func (s *ImportDirectiveContext) Identifier(i int) IIdentifierContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *ImportDirectiveContext) AllImportDeclaration() []IImportDeclarationContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IImportDeclarationContext); ok { + len++ + } + } + + tst := make([]IImportDeclarationContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IImportDeclarationContext); ok { + tst[i] = t.(IImportDeclarationContext) + i++ + } + } + + return tst +} + +func (s *ImportDirectiveContext) ImportDeclaration(i int) IImportDeclarationContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IImportDeclarationContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IImportDeclarationContext) +} + +func (s *ImportDirectiveContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ImportDirectiveContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ImportDirectiveContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterImportDirective(s) + } +} + +func (s *ImportDirectiveContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitImportDirective(s) + } +} + + + + +func (p *SolidityParser) ImportDirective() (localctx IImportDirectiveContext) { + this := p + _ = this + + localctx = NewImportDirectiveContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 14, SolidityParserRULE_importDirective) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(244) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 9, p.GetParserRuleContext()) { + case 1: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(210) + p.Match(SolidityParserT__9) + } + { + p.SetState(211) + p.Match(SolidityParserStringLiteralFragment) + } + p.SetState(214) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__10 { + { + p.SetState(212) + p.Match(SolidityParserT__10) + } + { + p.SetState(213) + p.Identifier() + } + + } + { + p.SetState(216) + p.Match(SolidityParserT__1) + } + + + case 2: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(217) + p.Match(SolidityParserT__9) + } + p.SetState(220) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__11: + { + p.SetState(218) + p.Match(SolidityParserT__11) + } + + + case SolidityParserT__12, SolidityParserT__39, SolidityParserT__51, SolidityParserIdentifier: + { + p.SetState(219) + p.Identifier() + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + p.SetState(224) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__10 { + { + p.SetState(222) + p.Match(SolidityParserT__10) + } + { + p.SetState(223) + p.Identifier() + } + + } + { + p.SetState(226) + p.Match(SolidityParserT__12) + } + { + p.SetState(227) + p.Match(SolidityParserStringLiteralFragment) + } + { + p.SetState(228) + p.Match(SolidityParserT__1) + } + + + case 3: + p.EnterOuterAlt(localctx, 3) + { + p.SetState(229) + p.Match(SolidityParserT__9) + } + { + p.SetState(230) + p.Match(SolidityParserT__13) + } + { + p.SetState(231) + p.ImportDeclaration() + } + p.SetState(236) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__14 { + { + p.SetState(232) + p.Match(SolidityParserT__14) + } + { + p.SetState(233) + p.ImportDeclaration() + } + + + p.SetState(238) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + { + p.SetState(239) + p.Match(SolidityParserT__15) + } + { + p.SetState(240) + p.Match(SolidityParserT__12) + } + { + p.SetState(241) + p.Match(SolidityParserStringLiteralFragment) + } + { + p.SetState(242) + p.Match(SolidityParserT__1) + } + + } + + + return localctx +} + + +// IImportDeclarationContext is an interface to support dynamic dispatch. +type IImportDeclarationContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsImportDeclarationContext differentiates from other interfaces. + IsImportDeclarationContext() +} + +type ImportDeclarationContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyImportDeclarationContext() *ImportDeclarationContext { + var p = new(ImportDeclarationContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_importDeclaration + return p +} + +func (*ImportDeclarationContext) IsImportDeclarationContext() {} + +func NewImportDeclarationContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ImportDeclarationContext { + var p = new(ImportDeclarationContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_importDeclaration + + return p +} + +func (s *ImportDeclarationContext) GetParser() antlr.Parser { return s.parser } + +func (s *ImportDeclarationContext) AllIdentifier() []IIdentifierContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IIdentifierContext); ok { + len++ + } + } + + tst := make([]IIdentifierContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IIdentifierContext); ok { + tst[i] = t.(IIdentifierContext) + i++ + } + } + + return tst +} + +func (s *ImportDeclarationContext) Identifier(i int) IIdentifierContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *ImportDeclarationContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ImportDeclarationContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ImportDeclarationContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterImportDeclaration(s) + } +} + +func (s *ImportDeclarationContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitImportDeclaration(s) + } +} + + + + +func (p *SolidityParser) ImportDeclaration() (localctx IImportDeclarationContext) { + this := p + _ = this + + localctx = NewImportDeclarationContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 16, SolidityParserRULE_importDeclaration) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(246) + p.Identifier() + } + p.SetState(249) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__10 { + { + p.SetState(247) + p.Match(SolidityParserT__10) + } + { + p.SetState(248) + p.Identifier() + } + + } + + + + return localctx +} + + +// IContractDefinitionContext is an interface to support dynamic dispatch. +type IContractDefinitionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsContractDefinitionContext differentiates from other interfaces. + IsContractDefinitionContext() +} + +type ContractDefinitionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyContractDefinitionContext() *ContractDefinitionContext { + var p = new(ContractDefinitionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_contractDefinition + return p +} + +func (*ContractDefinitionContext) IsContractDefinitionContext() {} + +func NewContractDefinitionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ContractDefinitionContext { + var p = new(ContractDefinitionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_contractDefinition + + return p +} + +func (s *ContractDefinitionContext) GetParser() antlr.Parser { return s.parser } + +func (s *ContractDefinitionContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *ContractDefinitionContext) AllInheritanceSpecifier() []IInheritanceSpecifierContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IInheritanceSpecifierContext); ok { + len++ + } + } + + tst := make([]IInheritanceSpecifierContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IInheritanceSpecifierContext); ok { + tst[i] = t.(IInheritanceSpecifierContext) + i++ + } + } + + return tst +} + +func (s *ContractDefinitionContext) InheritanceSpecifier(i int) IInheritanceSpecifierContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IInheritanceSpecifierContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IInheritanceSpecifierContext) +} + +func (s *ContractDefinitionContext) AllContractPart() []IContractPartContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IContractPartContext); ok { + len++ + } + } + + tst := make([]IContractPartContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IContractPartContext); ok { + tst[i] = t.(IContractPartContext) + i++ + } + } + + return tst +} + +func (s *ContractDefinitionContext) ContractPart(i int) IContractPartContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IContractPartContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IContractPartContext) +} + +func (s *ContractDefinitionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ContractDefinitionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ContractDefinitionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterContractDefinition(s) + } +} + +func (s *ContractDefinitionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitContractDefinition(s) + } +} + + + + +func (p *SolidityParser) ContractDefinition() (localctx IContractDefinitionContext) { + this := p + _ = this + + localctx = NewContractDefinitionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 18, SolidityParserRULE_contractDefinition) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + p.SetState(252) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__16 { + { + p.SetState(251) + p.Match(SolidityParserT__16) + } + + } + { + p.SetState(254) + _la = p.GetTokenStream().LA(1) + + if !((((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__17) | (1 << SolidityParserT__18) | (1 << SolidityParserT__19))) != 0)) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + { + p.SetState(255) + p.Identifier() + } + p.SetState(265) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__20 { + { + p.SetState(256) + p.Match(SolidityParserT__20) + } + { + p.SetState(257) + p.InheritanceSpecifier() + } + p.SetState(262) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__14 { + { + p.SetState(258) + p.Match(SolidityParserT__14) + } + { + p.SetState(259) + p.InheritanceSpecifier() + } + + + p.SetState(264) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + + } + { + p.SetState(267) + p.Match(SolidityParserT__13) + } + p.SetState(271) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__12) | (1 << SolidityParserT__24) | (1 << SolidityParserT__26) | (1 << SolidityParserT__27) | (1 << SolidityParserT__28) | (1 << SolidityParserT__30))) != 0) || ((((_la - 32)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 32))) & ((1 << (SolidityParserT__31 - 32)) | (1 << (SolidityParserT__35 - 32)) | (1 << (SolidityParserT__39 - 32)) | (1 << (SolidityParserT__50 - 32)) | (1 << (SolidityParserT__51 - 32)) | (1 << (SolidityParserT__52 - 32)) | (1 << (SolidityParserT__53 - 32)) | (1 << (SolidityParserT__54 - 32)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserConstructorKeyword - 93)) | (1 << (SolidityParserFallbackKeyword - 93)) | (1 << (SolidityParserReceiveKeyword - 93)) | (1 << (SolidityParserIdentifier - 93)))) != 0) { + { + p.SetState(268) + p.ContractPart() + } + + + p.SetState(273) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + { + p.SetState(274) + p.Match(SolidityParserT__15) + } + + + + return localctx +} + + +// IInheritanceSpecifierContext is an interface to support dynamic dispatch. +type IInheritanceSpecifierContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsInheritanceSpecifierContext differentiates from other interfaces. + IsInheritanceSpecifierContext() +} + +type InheritanceSpecifierContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyInheritanceSpecifierContext() *InheritanceSpecifierContext { + var p = new(InheritanceSpecifierContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_inheritanceSpecifier + return p +} + +func (*InheritanceSpecifierContext) IsInheritanceSpecifierContext() {} + +func NewInheritanceSpecifierContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *InheritanceSpecifierContext { + var p = new(InheritanceSpecifierContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_inheritanceSpecifier + + return p +} + +func (s *InheritanceSpecifierContext) GetParser() antlr.Parser { return s.parser } + +func (s *InheritanceSpecifierContext) UserDefinedTypeName() IUserDefinedTypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IUserDefinedTypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IUserDefinedTypeNameContext) +} + +func (s *InheritanceSpecifierContext) ExpressionList() IExpressionListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionListContext) +} + +func (s *InheritanceSpecifierContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *InheritanceSpecifierContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *InheritanceSpecifierContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterInheritanceSpecifier(s) + } +} + +func (s *InheritanceSpecifierContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitInheritanceSpecifier(s) + } +} + + + + +func (p *SolidityParser) InheritanceSpecifier() (localctx IInheritanceSpecifierContext) { + this := p + _ = this + + localctx = NewInheritanceSpecifierContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 20, SolidityParserRULE_inheritanceSpecifier) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(276) + p.UserDefinedTypeName() + } + p.SetState(282) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__21 { + { + p.SetState(277) + p.Match(SolidityParserT__21) + } + p.SetState(279) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__3) | (1 << SolidityParserT__12) | (1 << SolidityParserT__21))) != 0) || ((((_la - 33)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 33))) & ((1 << (SolidityParserT__32 - 33)) | (1 << (SolidityParserT__39 - 33)) | (1 << (SolidityParserT__50 - 33)) | (1 << (SolidityParserT__51 - 33)) | (1 << (SolidityParserT__52 - 33)) | (1 << (SolidityParserT__53 - 33)) | (1 << (SolidityParserT__54 - 33)) | (1 << (SolidityParserT__55 - 33)) | (1 << (SolidityParserT__56 - 33)) | (1 << (SolidityParserT__57 - 33)) | (1 << (SolidityParserT__59 - 33)) | (1 << (SolidityParserT__60 - 33)) | (1 << (SolidityParserT__61 - 33)) | (1 << (SolidityParserT__62 - 33)) | (1 << (SolidityParserT__63 - 33)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserBooleanLiteral - 93)) | (1 << (SolidityParserDecimalNumber - 93)) | (1 << (SolidityParserHexNumber - 93)) | (1 << (SolidityParserHexLiteralFragment - 93)) | (1 << (SolidityParserPayableKeyword - 93)) | (1 << (SolidityParserTypeKeyword - 93)) | (1 << (SolidityParserIdentifier - 93)) | (1 << (SolidityParserStringLiteralFragment - 93)))) != 0) { + { + p.SetState(278) + p.ExpressionList() + } + + } + { + p.SetState(281) + p.Match(SolidityParserT__22) + } + + } + + + + return localctx +} + + +// IContractPartContext is an interface to support dynamic dispatch. +type IContractPartContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsContractPartContext differentiates from other interfaces. + IsContractPartContext() +} + +type ContractPartContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyContractPartContext() *ContractPartContext { + var p = new(ContractPartContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_contractPart + return p +} + +func (*ContractPartContext) IsContractPartContext() {} + +func NewContractPartContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ContractPartContext { + var p = new(ContractPartContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_contractPart + + return p +} + +func (s *ContractPartContext) GetParser() antlr.Parser { return s.parser } + +func (s *ContractPartContext) StateVariableDeclaration() IStateVariableDeclarationContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStateVariableDeclarationContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IStateVariableDeclarationContext) +} + +func (s *ContractPartContext) UsingForDeclaration() IUsingForDeclarationContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IUsingForDeclarationContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IUsingForDeclarationContext) +} + +func (s *ContractPartContext) StructDefinition() IStructDefinitionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStructDefinitionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IStructDefinitionContext) +} + +func (s *ContractPartContext) ModifierDefinition() IModifierDefinitionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IModifierDefinitionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IModifierDefinitionContext) +} + +func (s *ContractPartContext) FunctionDefinition() IFunctionDefinitionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IFunctionDefinitionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IFunctionDefinitionContext) +} + +func (s *ContractPartContext) EventDefinition() IEventDefinitionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IEventDefinitionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IEventDefinitionContext) +} + +func (s *ContractPartContext) EnumDefinition() IEnumDefinitionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IEnumDefinitionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IEnumDefinitionContext) +} + +func (s *ContractPartContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ContractPartContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ContractPartContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterContractPart(s) + } +} + +func (s *ContractPartContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitContractPart(s) + } +} + + + + +func (p *SolidityParser) ContractPart() (localctx IContractPartContext) { + this := p + _ = this + + localctx = NewContractPartContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 22, SolidityParserRULE_contractPart) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(291) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 17, p.GetParserRuleContext()) { + case 1: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(284) + p.StateVariableDeclaration() + } + + + case 2: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(285) + p.UsingForDeclaration() + } + + + case 3: + p.EnterOuterAlt(localctx, 3) + { + p.SetState(286) + p.StructDefinition() + } + + + case 4: + p.EnterOuterAlt(localctx, 4) + { + p.SetState(287) + p.ModifierDefinition() + } + + + case 5: + p.EnterOuterAlt(localctx, 5) + { + p.SetState(288) + p.FunctionDefinition() + } + + + case 6: + p.EnterOuterAlt(localctx, 6) + { + p.SetState(289) + p.EventDefinition() + } + + + case 7: + p.EnterOuterAlt(localctx, 7) + { + p.SetState(290) + p.EnumDefinition() + } + + } + + + return localctx +} + + +// IStateVariableDeclarationContext is an interface to support dynamic dispatch. +type IStateVariableDeclarationContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsStateVariableDeclarationContext differentiates from other interfaces. + IsStateVariableDeclarationContext() +} + +type StateVariableDeclarationContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyStateVariableDeclarationContext() *StateVariableDeclarationContext { + var p = new(StateVariableDeclarationContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_stateVariableDeclaration + return p +} + +func (*StateVariableDeclarationContext) IsStateVariableDeclarationContext() {} + +func NewStateVariableDeclarationContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *StateVariableDeclarationContext { + var p = new(StateVariableDeclarationContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_stateVariableDeclaration + + return p +} + +func (s *StateVariableDeclarationContext) GetParser() antlr.Parser { return s.parser } + +func (s *StateVariableDeclarationContext) TypeName() ITypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ITypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ITypeNameContext) +} + +func (s *StateVariableDeclarationContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *StateVariableDeclarationContext) AllPublicKeyword() []antlr.TerminalNode { + return s.GetTokens(SolidityParserPublicKeyword) +} + +func (s *StateVariableDeclarationContext) PublicKeyword(i int) antlr.TerminalNode { + return s.GetToken(SolidityParserPublicKeyword, i) +} + +func (s *StateVariableDeclarationContext) AllInternalKeyword() []antlr.TerminalNode { + return s.GetTokens(SolidityParserInternalKeyword) +} + +func (s *StateVariableDeclarationContext) InternalKeyword(i int) antlr.TerminalNode { + return s.GetToken(SolidityParserInternalKeyword, i) +} + +func (s *StateVariableDeclarationContext) AllPrivateKeyword() []antlr.TerminalNode { + return s.GetTokens(SolidityParserPrivateKeyword) +} + +func (s *StateVariableDeclarationContext) PrivateKeyword(i int) antlr.TerminalNode { + return s.GetToken(SolidityParserPrivateKeyword, i) +} + +func (s *StateVariableDeclarationContext) AllConstantKeyword() []antlr.TerminalNode { + return s.GetTokens(SolidityParserConstantKeyword) +} + +func (s *StateVariableDeclarationContext) ConstantKeyword(i int) antlr.TerminalNode { + return s.GetToken(SolidityParserConstantKeyword, i) +} + +func (s *StateVariableDeclarationContext) AllImmutableKeyword() []antlr.TerminalNode { + return s.GetTokens(SolidityParserImmutableKeyword) +} + +func (s *StateVariableDeclarationContext) ImmutableKeyword(i int) antlr.TerminalNode { + return s.GetToken(SolidityParserImmutableKeyword, i) +} + +func (s *StateVariableDeclarationContext) AllOverrideSpecifier() []IOverrideSpecifierContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IOverrideSpecifierContext); ok { + len++ + } + } + + tst := make([]IOverrideSpecifierContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IOverrideSpecifierContext); ok { + tst[i] = t.(IOverrideSpecifierContext) + i++ + } + } + + return tst +} + +func (s *StateVariableDeclarationContext) OverrideSpecifier(i int) IOverrideSpecifierContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IOverrideSpecifierContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IOverrideSpecifierContext) +} + +func (s *StateVariableDeclarationContext) Expression() IExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *StateVariableDeclarationContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *StateVariableDeclarationContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *StateVariableDeclarationContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterStateVariableDeclaration(s) + } +} + +func (s *StateVariableDeclarationContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitStateVariableDeclaration(s) + } +} + + + + +func (p *SolidityParser) StateVariableDeclaration() (localctx IStateVariableDeclarationContext) { + this := p + _ = this + + localctx = NewStateVariableDeclarationContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 24, SolidityParserRULE_stateVariableDeclaration) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(293) + p.typeName(0) + } + p.SetState(302) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__23 || ((((_la - 106)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 106))) & ((1 << (SolidityParserConstantKeyword - 106)) | (1 << (SolidityParserImmutableKeyword - 106)) | (1 << (SolidityParserInternalKeyword - 106)) | (1 << (SolidityParserPrivateKeyword - 106)) | (1 << (SolidityParserPublicKeyword - 106)))) != 0) { + p.SetState(300) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserPublicKeyword: + { + p.SetState(294) + p.Match(SolidityParserPublicKeyword) + } + + + case SolidityParserInternalKeyword: + { + p.SetState(295) + p.Match(SolidityParserInternalKeyword) + } + + + case SolidityParserPrivateKeyword: + { + p.SetState(296) + p.Match(SolidityParserPrivateKeyword) + } + + + case SolidityParserConstantKeyword: + { + p.SetState(297) + p.Match(SolidityParserConstantKeyword) + } + + + case SolidityParserImmutableKeyword: + { + p.SetState(298) + p.Match(SolidityParserImmutableKeyword) + } + + + case SolidityParserT__23: + { + p.SetState(299) + p.OverrideSpecifier() + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + p.SetState(304) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + { + p.SetState(305) + p.Identifier() + } + p.SetState(308) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__8 { + { + p.SetState(306) + p.Match(SolidityParserT__8) + } + { + p.SetState(307) + p.expression(0) + } + + } + { + p.SetState(310) + p.Match(SolidityParserT__1) + } + + + + return localctx +} + + +// IOverrideSpecifierContext is an interface to support dynamic dispatch. +type IOverrideSpecifierContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsOverrideSpecifierContext differentiates from other interfaces. + IsOverrideSpecifierContext() +} + +type OverrideSpecifierContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyOverrideSpecifierContext() *OverrideSpecifierContext { + var p = new(OverrideSpecifierContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_overrideSpecifier + return p +} + +func (*OverrideSpecifierContext) IsOverrideSpecifierContext() {} + +func NewOverrideSpecifierContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *OverrideSpecifierContext { + var p = new(OverrideSpecifierContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_overrideSpecifier + + return p +} + +func (s *OverrideSpecifierContext) GetParser() antlr.Parser { return s.parser } + +func (s *OverrideSpecifierContext) AllUserDefinedTypeName() []IUserDefinedTypeNameContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IUserDefinedTypeNameContext); ok { + len++ + } + } + + tst := make([]IUserDefinedTypeNameContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IUserDefinedTypeNameContext); ok { + tst[i] = t.(IUserDefinedTypeNameContext) + i++ + } + } + + return tst +} + +func (s *OverrideSpecifierContext) UserDefinedTypeName(i int) IUserDefinedTypeNameContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IUserDefinedTypeNameContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IUserDefinedTypeNameContext) +} + +func (s *OverrideSpecifierContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *OverrideSpecifierContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *OverrideSpecifierContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterOverrideSpecifier(s) + } +} + +func (s *OverrideSpecifierContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitOverrideSpecifier(s) + } +} + + + + +func (p *SolidityParser) OverrideSpecifier() (localctx IOverrideSpecifierContext) { + this := p + _ = this + + localctx = NewOverrideSpecifierContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 26, SolidityParserRULE_overrideSpecifier) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(312) + p.Match(SolidityParserT__23) + } + p.SetState(324) + p.GetErrorHandler().Sync(p) + + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 22, p.GetParserRuleContext()) == 1 { + { + p.SetState(313) + p.Match(SolidityParserT__21) + } + { + p.SetState(314) + p.UserDefinedTypeName() + } + p.SetState(319) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__14 { + { + p.SetState(315) + p.Match(SolidityParserT__14) + } + { + p.SetState(316) + p.UserDefinedTypeName() + } + + + p.SetState(321) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + { + p.SetState(322) + p.Match(SolidityParserT__22) + } + + + } + + + + return localctx +} + + +// IUsingForDeclarationContext is an interface to support dynamic dispatch. +type IUsingForDeclarationContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsUsingForDeclarationContext differentiates from other interfaces. + IsUsingForDeclarationContext() +} + +type UsingForDeclarationContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyUsingForDeclarationContext() *UsingForDeclarationContext { + var p = new(UsingForDeclarationContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_usingForDeclaration + return p +} + +func (*UsingForDeclarationContext) IsUsingForDeclarationContext() {} + +func NewUsingForDeclarationContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *UsingForDeclarationContext { + var p = new(UsingForDeclarationContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_usingForDeclaration + + return p +} + +func (s *UsingForDeclarationContext) GetParser() antlr.Parser { return s.parser } + +func (s *UsingForDeclarationContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *UsingForDeclarationContext) TypeName() ITypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ITypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ITypeNameContext) +} + +func (s *UsingForDeclarationContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *UsingForDeclarationContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *UsingForDeclarationContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterUsingForDeclaration(s) + } +} + +func (s *UsingForDeclarationContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitUsingForDeclaration(s) + } +} + + + + +func (p *SolidityParser) UsingForDeclaration() (localctx IUsingForDeclarationContext) { + this := p + _ = this + + localctx = NewUsingForDeclarationContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 28, SolidityParserRULE_usingForDeclaration) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(326) + p.Match(SolidityParserT__24) + } + { + p.SetState(327) + p.Identifier() + } + { + p.SetState(328) + p.Match(SolidityParserT__25) + } + p.SetState(331) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__11: + { + p.SetState(329) + p.Match(SolidityParserT__11) + } + + + case SolidityParserT__12, SolidityParserT__28, SolidityParserT__35, SolidityParserT__39, SolidityParserT__50, SolidityParserT__51, SolidityParserT__52, SolidityParserT__53, SolidityParserT__54, SolidityParserInt, SolidityParserUint, SolidityParserByte, SolidityParserFixed, SolidityParserUfixed, SolidityParserIdentifier: + { + p.SetState(330) + p.typeName(0) + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + { + p.SetState(333) + p.Match(SolidityParserT__1) + } + + + + return localctx +} + + +// IStructDefinitionContext is an interface to support dynamic dispatch. +type IStructDefinitionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsStructDefinitionContext differentiates from other interfaces. + IsStructDefinitionContext() +} + +type StructDefinitionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyStructDefinitionContext() *StructDefinitionContext { + var p = new(StructDefinitionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_structDefinition + return p +} + +func (*StructDefinitionContext) IsStructDefinitionContext() {} + +func NewStructDefinitionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *StructDefinitionContext { + var p = new(StructDefinitionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_structDefinition + + return p +} + +func (s *StructDefinitionContext) GetParser() antlr.Parser { return s.parser } + +func (s *StructDefinitionContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *StructDefinitionContext) AllVariableDeclaration() []IVariableDeclarationContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IVariableDeclarationContext); ok { + len++ + } + } + + tst := make([]IVariableDeclarationContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IVariableDeclarationContext); ok { + tst[i] = t.(IVariableDeclarationContext) + i++ + } + } + + return tst +} + +func (s *StructDefinitionContext) VariableDeclaration(i int) IVariableDeclarationContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IVariableDeclarationContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IVariableDeclarationContext) +} + +func (s *StructDefinitionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *StructDefinitionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *StructDefinitionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterStructDefinition(s) + } +} + +func (s *StructDefinitionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitStructDefinition(s) + } +} + + + + +func (p *SolidityParser) StructDefinition() (localctx IStructDefinitionContext) { + this := p + _ = this + + localctx = NewStructDefinitionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 30, SolidityParserRULE_structDefinition) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(335) + p.Match(SolidityParserT__26) + } + { + p.SetState(336) + p.Identifier() + } + { + p.SetState(337) + p.Match(SolidityParserT__13) + } + p.SetState(348) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || _la == SolidityParserT__28 || ((((_la - 36)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 36))) & ((1 << (SolidityParserT__35 - 36)) | (1 << (SolidityParserT__39 - 36)) | (1 << (SolidityParserT__50 - 36)) | (1 << (SolidityParserT__51 - 36)) | (1 << (SolidityParserT__52 - 36)) | (1 << (SolidityParserT__53 - 36)) | (1 << (SolidityParserT__54 - 36)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserIdentifier - 93)))) != 0) { + { + p.SetState(338) + p.VariableDeclaration() + } + { + p.SetState(339) + p.Match(SolidityParserT__1) + } + p.SetState(345) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__12 || _la == SolidityParserT__28 || ((((_la - 36)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 36))) & ((1 << (SolidityParserT__35 - 36)) | (1 << (SolidityParserT__39 - 36)) | (1 << (SolidityParserT__50 - 36)) | (1 << (SolidityParserT__51 - 36)) | (1 << (SolidityParserT__52 - 36)) | (1 << (SolidityParserT__53 - 36)) | (1 << (SolidityParserT__54 - 36)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserIdentifier - 93)))) != 0) { + { + p.SetState(340) + p.VariableDeclaration() + } + { + p.SetState(341) + p.Match(SolidityParserT__1) + } + + + p.SetState(347) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + + } + { + p.SetState(350) + p.Match(SolidityParserT__15) + } + + + + return localctx +} + + +// IModifierDefinitionContext is an interface to support dynamic dispatch. +type IModifierDefinitionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsModifierDefinitionContext differentiates from other interfaces. + IsModifierDefinitionContext() +} + +type ModifierDefinitionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyModifierDefinitionContext() *ModifierDefinitionContext { + var p = new(ModifierDefinitionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_modifierDefinition + return p +} + +func (*ModifierDefinitionContext) IsModifierDefinitionContext() {} + +func NewModifierDefinitionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ModifierDefinitionContext { + var p = new(ModifierDefinitionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_modifierDefinition + + return p +} + +func (s *ModifierDefinitionContext) GetParser() antlr.Parser { return s.parser } + +func (s *ModifierDefinitionContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *ModifierDefinitionContext) Block() IBlockContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IBlockContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IBlockContext) +} + +func (s *ModifierDefinitionContext) ParameterList() IParameterListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IParameterListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IParameterListContext) +} + +func (s *ModifierDefinitionContext) AllVirtualKeyword() []antlr.TerminalNode { + return s.GetTokens(SolidityParserVirtualKeyword) +} + +func (s *ModifierDefinitionContext) VirtualKeyword(i int) antlr.TerminalNode { + return s.GetToken(SolidityParserVirtualKeyword, i) +} + +func (s *ModifierDefinitionContext) AllOverrideSpecifier() []IOverrideSpecifierContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IOverrideSpecifierContext); ok { + len++ + } + } + + tst := make([]IOverrideSpecifierContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IOverrideSpecifierContext); ok { + tst[i] = t.(IOverrideSpecifierContext) + i++ + } + } + + return tst +} + +func (s *ModifierDefinitionContext) OverrideSpecifier(i int) IOverrideSpecifierContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IOverrideSpecifierContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IOverrideSpecifierContext) +} + +func (s *ModifierDefinitionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ModifierDefinitionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ModifierDefinitionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterModifierDefinition(s) + } +} + +func (s *ModifierDefinitionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitModifierDefinition(s) + } +} + + + + +func (p *SolidityParser) ModifierDefinition() (localctx IModifierDefinitionContext) { + this := p + _ = this + + localctx = NewModifierDefinitionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 32, SolidityParserRULE_modifierDefinition) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(352) + p.Match(SolidityParserT__27) + } + { + p.SetState(353) + p.Identifier() + } + p.SetState(355) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__21 { + { + p.SetState(354) + p.ParameterList() + } + + } + p.SetState(361) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__23 || _la == SolidityParserVirtualKeyword { + p.SetState(359) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserVirtualKeyword: + { + p.SetState(357) + p.Match(SolidityParserVirtualKeyword) + } + + + case SolidityParserT__23: + { + p.SetState(358) + p.OverrideSpecifier() + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + p.SetState(363) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + p.SetState(366) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__1: + { + p.SetState(364) + p.Match(SolidityParserT__1) + } + + + case SolidityParserT__13: + { + p.SetState(365) + p.Block() + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + + + return localctx +} + + +// IFunctionDefinitionContext is an interface to support dynamic dispatch. +type IFunctionDefinitionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsFunctionDefinitionContext differentiates from other interfaces. + IsFunctionDefinitionContext() +} + +type FunctionDefinitionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyFunctionDefinitionContext() *FunctionDefinitionContext { + var p = new(FunctionDefinitionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_functionDefinition + return p +} + +func (*FunctionDefinitionContext) IsFunctionDefinitionContext() {} + +func NewFunctionDefinitionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *FunctionDefinitionContext { + var p = new(FunctionDefinitionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_functionDefinition + + return p +} + +func (s *FunctionDefinitionContext) GetParser() antlr.Parser { return s.parser } + +func (s *FunctionDefinitionContext) FunctionDescriptor() IFunctionDescriptorContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IFunctionDescriptorContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IFunctionDescriptorContext) +} + +func (s *FunctionDefinitionContext) ParameterList() IParameterListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IParameterListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IParameterListContext) +} + +func (s *FunctionDefinitionContext) ModifierList() IModifierListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IModifierListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IModifierListContext) +} + +func (s *FunctionDefinitionContext) Block() IBlockContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IBlockContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IBlockContext) +} + +func (s *FunctionDefinitionContext) ReturnParameters() IReturnParametersContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IReturnParametersContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IReturnParametersContext) +} + +func (s *FunctionDefinitionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *FunctionDefinitionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *FunctionDefinitionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterFunctionDefinition(s) + } +} + +func (s *FunctionDefinitionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitFunctionDefinition(s) + } +} + + + + +func (p *SolidityParser) FunctionDefinition() (localctx IFunctionDefinitionContext) { + this := p + _ = this + + localctx = NewFunctionDefinitionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 34, SolidityParserRULE_functionDefinition) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(368) + p.FunctionDescriptor() + } + { + p.SetState(369) + p.ParameterList() + } + { + p.SetState(370) + p.ModifierList() + } + p.SetState(372) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__29 { + { + p.SetState(371) + p.ReturnParameters() + } + + } + p.SetState(376) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__1: + { + p.SetState(374) + p.Match(SolidityParserT__1) + } + + + case SolidityParserT__13: + { + p.SetState(375) + p.Block() + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + + + return localctx +} + + +// IFunctionDescriptorContext is an interface to support dynamic dispatch. +type IFunctionDescriptorContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsFunctionDescriptorContext differentiates from other interfaces. + IsFunctionDescriptorContext() +} + +type FunctionDescriptorContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyFunctionDescriptorContext() *FunctionDescriptorContext { + var p = new(FunctionDescriptorContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_functionDescriptor + return p +} + +func (*FunctionDescriptorContext) IsFunctionDescriptorContext() {} + +func NewFunctionDescriptorContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *FunctionDescriptorContext { + var p = new(FunctionDescriptorContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_functionDescriptor + + return p +} + +func (s *FunctionDescriptorContext) GetParser() antlr.Parser { return s.parser } + +func (s *FunctionDescriptorContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *FunctionDescriptorContext) ReceiveKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserReceiveKeyword, 0) +} + +func (s *FunctionDescriptorContext) FallbackKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserFallbackKeyword, 0) +} + +func (s *FunctionDescriptorContext) ConstructorKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserConstructorKeyword, 0) +} + +func (s *FunctionDescriptorContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *FunctionDescriptorContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *FunctionDescriptorContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterFunctionDescriptor(s) + } +} + +func (s *FunctionDescriptorContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitFunctionDescriptor(s) + } +} + + + + +func (p *SolidityParser) FunctionDescriptor() (localctx IFunctionDescriptorContext) { + this := p + _ = this + + localctx = NewFunctionDescriptorContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 36, SolidityParserRULE_functionDescriptor) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(387) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__28: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(378) + p.Match(SolidityParserT__28) + } + p.SetState(382) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__12, SolidityParserT__39, SolidityParserT__51, SolidityParserIdentifier: + { + p.SetState(379) + p.Identifier() + } + + + case SolidityParserReceiveKeyword: + { + p.SetState(380) + p.Match(SolidityParserReceiveKeyword) + } + + + case SolidityParserFallbackKeyword: + { + p.SetState(381) + p.Match(SolidityParserFallbackKeyword) + } + + + case SolidityParserT__21: + + + + default: + } + + + case SolidityParserConstructorKeyword: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(384) + p.Match(SolidityParserConstructorKeyword) + } + + + case SolidityParserFallbackKeyword: + p.EnterOuterAlt(localctx, 3) + { + p.SetState(385) + p.Match(SolidityParserFallbackKeyword) + } + + + case SolidityParserReceiveKeyword: + p.EnterOuterAlt(localctx, 4) + { + p.SetState(386) + p.Match(SolidityParserReceiveKeyword) + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + + return localctx +} + + +// IReturnParametersContext is an interface to support dynamic dispatch. +type IReturnParametersContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsReturnParametersContext differentiates from other interfaces. + IsReturnParametersContext() +} + +type ReturnParametersContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyReturnParametersContext() *ReturnParametersContext { + var p = new(ReturnParametersContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_returnParameters + return p +} + +func (*ReturnParametersContext) IsReturnParametersContext() {} + +func NewReturnParametersContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ReturnParametersContext { + var p = new(ReturnParametersContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_returnParameters + + return p +} + +func (s *ReturnParametersContext) GetParser() antlr.Parser { return s.parser } + +func (s *ReturnParametersContext) ParameterList() IParameterListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IParameterListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IParameterListContext) +} + +func (s *ReturnParametersContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ReturnParametersContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ReturnParametersContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterReturnParameters(s) + } +} + +func (s *ReturnParametersContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitReturnParameters(s) + } +} + + + + +func (p *SolidityParser) ReturnParameters() (localctx IReturnParametersContext) { + this := p + _ = this + + localctx = NewReturnParametersContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 38, SolidityParserRULE_returnParameters) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(389) + p.Match(SolidityParserT__29) + } + { + p.SetState(390) + p.ParameterList() + } + + + + return localctx +} + + +// IModifierListContext is an interface to support dynamic dispatch. +type IModifierListContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsModifierListContext differentiates from other interfaces. + IsModifierListContext() +} + +type ModifierListContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyModifierListContext() *ModifierListContext { + var p = new(ModifierListContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_modifierList + return p +} + +func (*ModifierListContext) IsModifierListContext() {} + +func NewModifierListContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ModifierListContext { + var p = new(ModifierListContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_modifierList + + return p +} + +func (s *ModifierListContext) GetParser() antlr.Parser { return s.parser } + +func (s *ModifierListContext) AllModifierInvocation() []IModifierInvocationContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IModifierInvocationContext); ok { + len++ + } + } + + tst := make([]IModifierInvocationContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IModifierInvocationContext); ok { + tst[i] = t.(IModifierInvocationContext) + i++ + } + } + + return tst +} + +func (s *ModifierListContext) ModifierInvocation(i int) IModifierInvocationContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IModifierInvocationContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IModifierInvocationContext) +} + +func (s *ModifierListContext) AllStateMutability() []IStateMutabilityContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IStateMutabilityContext); ok { + len++ + } + } + + tst := make([]IStateMutabilityContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IStateMutabilityContext); ok { + tst[i] = t.(IStateMutabilityContext) + i++ + } + } + + return tst +} + +func (s *ModifierListContext) StateMutability(i int) IStateMutabilityContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStateMutabilityContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IStateMutabilityContext) +} + +func (s *ModifierListContext) AllExternalKeyword() []antlr.TerminalNode { + return s.GetTokens(SolidityParserExternalKeyword) +} + +func (s *ModifierListContext) ExternalKeyword(i int) antlr.TerminalNode { + return s.GetToken(SolidityParserExternalKeyword, i) +} + +func (s *ModifierListContext) AllPublicKeyword() []antlr.TerminalNode { + return s.GetTokens(SolidityParserPublicKeyword) +} + +func (s *ModifierListContext) PublicKeyword(i int) antlr.TerminalNode { + return s.GetToken(SolidityParserPublicKeyword, i) +} + +func (s *ModifierListContext) AllInternalKeyword() []antlr.TerminalNode { + return s.GetTokens(SolidityParserInternalKeyword) +} + +func (s *ModifierListContext) InternalKeyword(i int) antlr.TerminalNode { + return s.GetToken(SolidityParserInternalKeyword, i) +} + +func (s *ModifierListContext) AllPrivateKeyword() []antlr.TerminalNode { + return s.GetTokens(SolidityParserPrivateKeyword) +} + +func (s *ModifierListContext) PrivateKeyword(i int) antlr.TerminalNode { + return s.GetToken(SolidityParserPrivateKeyword, i) +} + +func (s *ModifierListContext) AllVirtualKeyword() []antlr.TerminalNode { + return s.GetTokens(SolidityParserVirtualKeyword) +} + +func (s *ModifierListContext) VirtualKeyword(i int) antlr.TerminalNode { + return s.GetToken(SolidityParserVirtualKeyword, i) +} + +func (s *ModifierListContext) AllOverrideSpecifier() []IOverrideSpecifierContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IOverrideSpecifierContext); ok { + len++ + } + } + + tst := make([]IOverrideSpecifierContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IOverrideSpecifierContext); ok { + tst[i] = t.(IOverrideSpecifierContext) + i++ + } + } + + return tst +} + +func (s *ModifierListContext) OverrideSpecifier(i int) IOverrideSpecifierContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IOverrideSpecifierContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IOverrideSpecifierContext) +} + +func (s *ModifierListContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ModifierListContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ModifierListContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterModifierList(s) + } +} + +func (s *ModifierListContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitModifierList(s) + } +} + + + + +func (p *SolidityParser) ModifierList() (localctx IModifierListContext) { + this := p + _ = this + + localctx = NewModifierListContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 40, SolidityParserRULE_modifierList) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + var _alt int + + p.EnterOuterAlt(localctx, 1) + p.SetState(402) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 35, p.GetParserRuleContext()) + + for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + if _alt == 1 { + p.SetState(400) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__12, SolidityParserT__39, SolidityParserT__51, SolidityParserIdentifier: + { + p.SetState(392) + p.ModifierInvocation() + } + + + case SolidityParserConstantKeyword, SolidityParserPayableKeyword, SolidityParserPureKeyword, SolidityParserViewKeyword: + { + p.SetState(393) + p.StateMutability() + } + + + case SolidityParserExternalKeyword: + { + p.SetState(394) + p.Match(SolidityParserExternalKeyword) + } + + + case SolidityParserPublicKeyword: + { + p.SetState(395) + p.Match(SolidityParserPublicKeyword) + } + + + case SolidityParserInternalKeyword: + { + p.SetState(396) + p.Match(SolidityParserInternalKeyword) + } + + + case SolidityParserPrivateKeyword: + { + p.SetState(397) + p.Match(SolidityParserPrivateKeyword) + } + + + case SolidityParserVirtualKeyword: + { + p.SetState(398) + p.Match(SolidityParserVirtualKeyword) + } + + + case SolidityParserT__23: + { + p.SetState(399) + p.OverrideSpecifier() + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + } + p.SetState(404) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 35, p.GetParserRuleContext()) + } + + + + return localctx +} + + +// IModifierInvocationContext is an interface to support dynamic dispatch. +type IModifierInvocationContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsModifierInvocationContext differentiates from other interfaces. + IsModifierInvocationContext() +} + +type ModifierInvocationContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyModifierInvocationContext() *ModifierInvocationContext { + var p = new(ModifierInvocationContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_modifierInvocation + return p +} + +func (*ModifierInvocationContext) IsModifierInvocationContext() {} + +func NewModifierInvocationContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ModifierInvocationContext { + var p = new(ModifierInvocationContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_modifierInvocation + + return p +} + +func (s *ModifierInvocationContext) GetParser() antlr.Parser { return s.parser } + +func (s *ModifierInvocationContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *ModifierInvocationContext) ExpressionList() IExpressionListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionListContext) +} + +func (s *ModifierInvocationContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ModifierInvocationContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ModifierInvocationContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterModifierInvocation(s) + } +} + +func (s *ModifierInvocationContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitModifierInvocation(s) + } +} + + + + +func (p *SolidityParser) ModifierInvocation() (localctx IModifierInvocationContext) { + this := p + _ = this + + localctx = NewModifierInvocationContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 42, SolidityParserRULE_modifierInvocation) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(405) + p.Identifier() + } + p.SetState(411) + p.GetErrorHandler().Sync(p) + + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 37, p.GetParserRuleContext()) == 1 { + { + p.SetState(406) + p.Match(SolidityParserT__21) + } + p.SetState(408) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__3) | (1 << SolidityParserT__12) | (1 << SolidityParserT__21))) != 0) || ((((_la - 33)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 33))) & ((1 << (SolidityParserT__32 - 33)) | (1 << (SolidityParserT__39 - 33)) | (1 << (SolidityParserT__50 - 33)) | (1 << (SolidityParserT__51 - 33)) | (1 << (SolidityParserT__52 - 33)) | (1 << (SolidityParserT__53 - 33)) | (1 << (SolidityParserT__54 - 33)) | (1 << (SolidityParserT__55 - 33)) | (1 << (SolidityParserT__56 - 33)) | (1 << (SolidityParserT__57 - 33)) | (1 << (SolidityParserT__59 - 33)) | (1 << (SolidityParserT__60 - 33)) | (1 << (SolidityParserT__61 - 33)) | (1 << (SolidityParserT__62 - 33)) | (1 << (SolidityParserT__63 - 33)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserBooleanLiteral - 93)) | (1 << (SolidityParserDecimalNumber - 93)) | (1 << (SolidityParserHexNumber - 93)) | (1 << (SolidityParserHexLiteralFragment - 93)) | (1 << (SolidityParserPayableKeyword - 93)) | (1 << (SolidityParserTypeKeyword - 93)) | (1 << (SolidityParserIdentifier - 93)) | (1 << (SolidityParserStringLiteralFragment - 93)))) != 0) { + { + p.SetState(407) + p.ExpressionList() + } + + } + { + p.SetState(410) + p.Match(SolidityParserT__22) + } + + + } + + + + return localctx +} + + +// IEventDefinitionContext is an interface to support dynamic dispatch. +type IEventDefinitionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsEventDefinitionContext differentiates from other interfaces. + IsEventDefinitionContext() +} + +type EventDefinitionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyEventDefinitionContext() *EventDefinitionContext { + var p = new(EventDefinitionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_eventDefinition + return p +} + +func (*EventDefinitionContext) IsEventDefinitionContext() {} + +func NewEventDefinitionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *EventDefinitionContext { + var p = new(EventDefinitionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_eventDefinition + + return p +} + +func (s *EventDefinitionContext) GetParser() antlr.Parser { return s.parser } + +func (s *EventDefinitionContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *EventDefinitionContext) EventParameterList() IEventParameterListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IEventParameterListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IEventParameterListContext) +} + +func (s *EventDefinitionContext) AnonymousKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserAnonymousKeyword, 0) +} + +func (s *EventDefinitionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *EventDefinitionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *EventDefinitionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterEventDefinition(s) + } +} + +func (s *EventDefinitionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitEventDefinition(s) + } +} + + + + +func (p *SolidityParser) EventDefinition() (localctx IEventDefinitionContext) { + this := p + _ = this + + localctx = NewEventDefinitionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 44, SolidityParserRULE_eventDefinition) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(413) + p.Match(SolidityParserT__30) + } + { + p.SetState(414) + p.Identifier() + } + { + p.SetState(415) + p.EventParameterList() + } + p.SetState(417) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserAnonymousKeyword { + { + p.SetState(416) + p.Match(SolidityParserAnonymousKeyword) + } + + } + { + p.SetState(419) + p.Match(SolidityParserT__1) + } + + + + return localctx +} + + +// IEnumDefinitionContext is an interface to support dynamic dispatch. +type IEnumDefinitionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsEnumDefinitionContext differentiates from other interfaces. + IsEnumDefinitionContext() +} + +type EnumDefinitionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyEnumDefinitionContext() *EnumDefinitionContext { + var p = new(EnumDefinitionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_enumDefinition + return p +} + +func (*EnumDefinitionContext) IsEnumDefinitionContext() {} + +func NewEnumDefinitionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *EnumDefinitionContext { + var p = new(EnumDefinitionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_enumDefinition + + return p +} + +func (s *EnumDefinitionContext) GetParser() antlr.Parser { return s.parser } + +func (s *EnumDefinitionContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *EnumDefinitionContext) AllEnumValue() []IEnumValueContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IEnumValueContext); ok { + len++ + } + } + + tst := make([]IEnumValueContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IEnumValueContext); ok { + tst[i] = t.(IEnumValueContext) + i++ + } + } + + return tst +} + +func (s *EnumDefinitionContext) EnumValue(i int) IEnumValueContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IEnumValueContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IEnumValueContext) +} + +func (s *EnumDefinitionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *EnumDefinitionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *EnumDefinitionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterEnumDefinition(s) + } +} + +func (s *EnumDefinitionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitEnumDefinition(s) + } +} + + + + +func (p *SolidityParser) EnumDefinition() (localctx IEnumDefinitionContext) { + this := p + _ = this + + localctx = NewEnumDefinitionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 46, SolidityParserRULE_enumDefinition) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(421) + p.Match(SolidityParserT__31) + } + { + p.SetState(422) + p.Identifier() + } + { + p.SetState(423) + p.Match(SolidityParserT__13) + } + p.SetState(425) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || _la == SolidityParserT__39 || _la == SolidityParserT__51 || _la == SolidityParserIdentifier { + { + p.SetState(424) + p.EnumValue() + } + + } + p.SetState(431) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__14 { + { + p.SetState(427) + p.Match(SolidityParserT__14) + } + { + p.SetState(428) + p.EnumValue() + } + + + p.SetState(433) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + { + p.SetState(434) + p.Match(SolidityParserT__15) + } + + + + return localctx +} + + +// IEnumValueContext is an interface to support dynamic dispatch. +type IEnumValueContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsEnumValueContext differentiates from other interfaces. + IsEnumValueContext() +} + +type EnumValueContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyEnumValueContext() *EnumValueContext { + var p = new(EnumValueContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_enumValue + return p +} + +func (*EnumValueContext) IsEnumValueContext() {} + +func NewEnumValueContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *EnumValueContext { + var p = new(EnumValueContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_enumValue + + return p +} + +func (s *EnumValueContext) GetParser() antlr.Parser { return s.parser } + +func (s *EnumValueContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *EnumValueContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *EnumValueContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *EnumValueContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterEnumValue(s) + } +} + +func (s *EnumValueContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitEnumValue(s) + } +} + + + + +func (p *SolidityParser) EnumValue() (localctx IEnumValueContext) { + this := p + _ = this + + localctx = NewEnumValueContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 48, SolidityParserRULE_enumValue) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(436) + p.Identifier() + } + + + + return localctx +} + + +// IParameterListContext is an interface to support dynamic dispatch. +type IParameterListContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsParameterListContext differentiates from other interfaces. + IsParameterListContext() +} + +type ParameterListContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyParameterListContext() *ParameterListContext { + var p = new(ParameterListContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_parameterList + return p +} + +func (*ParameterListContext) IsParameterListContext() {} + +func NewParameterListContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ParameterListContext { + var p = new(ParameterListContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_parameterList + + return p +} + +func (s *ParameterListContext) GetParser() antlr.Parser { return s.parser } + +func (s *ParameterListContext) AllParameter() []IParameterContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IParameterContext); ok { + len++ + } + } + + tst := make([]IParameterContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IParameterContext); ok { + tst[i] = t.(IParameterContext) + i++ + } + } + + return tst +} + +func (s *ParameterListContext) Parameter(i int) IParameterContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IParameterContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IParameterContext) +} + +func (s *ParameterListContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ParameterListContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ParameterListContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterParameterList(s) + } +} + +func (s *ParameterListContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitParameterList(s) + } +} + + + + +func (p *SolidityParser) ParameterList() (localctx IParameterListContext) { + this := p + _ = this + + localctx = NewParameterListContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 50, SolidityParserRULE_parameterList) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(438) + p.Match(SolidityParserT__21) + } + p.SetState(447) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || _la == SolidityParserT__28 || ((((_la - 36)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 36))) & ((1 << (SolidityParserT__35 - 36)) | (1 << (SolidityParserT__39 - 36)) | (1 << (SolidityParserT__50 - 36)) | (1 << (SolidityParserT__51 - 36)) | (1 << (SolidityParserT__52 - 36)) | (1 << (SolidityParserT__53 - 36)) | (1 << (SolidityParserT__54 - 36)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserIdentifier - 93)))) != 0) { + { + p.SetState(439) + p.Parameter() + } + p.SetState(444) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__14 { + { + p.SetState(440) + p.Match(SolidityParserT__14) + } + { + p.SetState(441) + p.Parameter() + } + + + p.SetState(446) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + + } + { + p.SetState(449) + p.Match(SolidityParserT__22) + } + + + + return localctx +} + + +// IParameterContext is an interface to support dynamic dispatch. +type IParameterContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsParameterContext differentiates from other interfaces. + IsParameterContext() +} + +type ParameterContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyParameterContext() *ParameterContext { + var p = new(ParameterContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_parameter + return p +} + +func (*ParameterContext) IsParameterContext() {} + +func NewParameterContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ParameterContext { + var p = new(ParameterContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_parameter + + return p +} + +func (s *ParameterContext) GetParser() antlr.Parser { return s.parser } + +func (s *ParameterContext) TypeName() ITypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ITypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ITypeNameContext) +} + +func (s *ParameterContext) StorageLocation() IStorageLocationContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStorageLocationContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IStorageLocationContext) +} + +func (s *ParameterContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *ParameterContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ParameterContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ParameterContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterParameter(s) + } +} + +func (s *ParameterContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitParameter(s) + } +} + + + + +func (p *SolidityParser) Parameter() (localctx IParameterContext) { + this := p + _ = this + + localctx = NewParameterContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 52, SolidityParserRULE_parameter) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(451) + p.typeName(0) + } + p.SetState(453) + p.GetErrorHandler().Sync(p) + + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 43, p.GetParserRuleContext()) == 1 { + { + p.SetState(452) + p.StorageLocation() + } + + + } + p.SetState(456) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || _la == SolidityParserT__39 || _la == SolidityParserT__51 || _la == SolidityParserIdentifier { + { + p.SetState(455) + p.Identifier() + } + + } + + + + return localctx +} + + +// IEventParameterListContext is an interface to support dynamic dispatch. +type IEventParameterListContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsEventParameterListContext differentiates from other interfaces. + IsEventParameterListContext() +} + +type EventParameterListContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyEventParameterListContext() *EventParameterListContext { + var p = new(EventParameterListContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_eventParameterList + return p +} + +func (*EventParameterListContext) IsEventParameterListContext() {} + +func NewEventParameterListContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *EventParameterListContext { + var p = new(EventParameterListContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_eventParameterList + + return p +} + +func (s *EventParameterListContext) GetParser() antlr.Parser { return s.parser } + +func (s *EventParameterListContext) AllEventParameter() []IEventParameterContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IEventParameterContext); ok { + len++ + } + } + + tst := make([]IEventParameterContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IEventParameterContext); ok { + tst[i] = t.(IEventParameterContext) + i++ + } + } + + return tst +} + +func (s *EventParameterListContext) EventParameter(i int) IEventParameterContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IEventParameterContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IEventParameterContext) +} + +func (s *EventParameterListContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *EventParameterListContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *EventParameterListContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterEventParameterList(s) + } +} + +func (s *EventParameterListContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitEventParameterList(s) + } +} + + + + +func (p *SolidityParser) EventParameterList() (localctx IEventParameterListContext) { + this := p + _ = this + + localctx = NewEventParameterListContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 54, SolidityParserRULE_eventParameterList) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(458) + p.Match(SolidityParserT__21) + } + p.SetState(467) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || _la == SolidityParserT__28 || ((((_la - 36)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 36))) & ((1 << (SolidityParserT__35 - 36)) | (1 << (SolidityParserT__39 - 36)) | (1 << (SolidityParserT__50 - 36)) | (1 << (SolidityParserT__51 - 36)) | (1 << (SolidityParserT__52 - 36)) | (1 << (SolidityParserT__53 - 36)) | (1 << (SolidityParserT__54 - 36)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserIdentifier - 93)))) != 0) { + { + p.SetState(459) + p.EventParameter() + } + p.SetState(464) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__14 { + { + p.SetState(460) + p.Match(SolidityParserT__14) + } + { + p.SetState(461) + p.EventParameter() + } + + + p.SetState(466) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + + } + { + p.SetState(469) + p.Match(SolidityParserT__22) + } + + + + return localctx +} + + +// IEventParameterContext is an interface to support dynamic dispatch. +type IEventParameterContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsEventParameterContext differentiates from other interfaces. + IsEventParameterContext() +} + +type EventParameterContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyEventParameterContext() *EventParameterContext { + var p = new(EventParameterContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_eventParameter + return p +} + +func (*EventParameterContext) IsEventParameterContext() {} + +func NewEventParameterContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *EventParameterContext { + var p = new(EventParameterContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_eventParameter + + return p +} + +func (s *EventParameterContext) GetParser() antlr.Parser { return s.parser } + +func (s *EventParameterContext) TypeName() ITypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ITypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ITypeNameContext) +} + +func (s *EventParameterContext) IndexedKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserIndexedKeyword, 0) +} + +func (s *EventParameterContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *EventParameterContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *EventParameterContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *EventParameterContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterEventParameter(s) + } +} + +func (s *EventParameterContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitEventParameter(s) + } +} + + + + +func (p *SolidityParser) EventParameter() (localctx IEventParameterContext) { + this := p + _ = this + + localctx = NewEventParameterContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 56, SolidityParserRULE_eventParameter) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(471) + p.typeName(0) + } + p.SetState(473) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserIndexedKeyword { + { + p.SetState(472) + p.Match(SolidityParserIndexedKeyword) + } + + } + p.SetState(476) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || _la == SolidityParserT__39 || _la == SolidityParserT__51 || _la == SolidityParserIdentifier { + { + p.SetState(475) + p.Identifier() + } + + } + + + + return localctx +} + + +// IVariableDeclarationContext is an interface to support dynamic dispatch. +type IVariableDeclarationContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsVariableDeclarationContext differentiates from other interfaces. + IsVariableDeclarationContext() +} + +type VariableDeclarationContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyVariableDeclarationContext() *VariableDeclarationContext { + var p = new(VariableDeclarationContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_variableDeclaration + return p +} + +func (*VariableDeclarationContext) IsVariableDeclarationContext() {} + +func NewVariableDeclarationContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *VariableDeclarationContext { + var p = new(VariableDeclarationContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_variableDeclaration + + return p +} + +func (s *VariableDeclarationContext) GetParser() antlr.Parser { return s.parser } + +func (s *VariableDeclarationContext) TypeName() ITypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ITypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ITypeNameContext) +} + +func (s *VariableDeclarationContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *VariableDeclarationContext) StorageLocation() IStorageLocationContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStorageLocationContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IStorageLocationContext) +} + +func (s *VariableDeclarationContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *VariableDeclarationContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *VariableDeclarationContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterVariableDeclaration(s) + } +} + +func (s *VariableDeclarationContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitVariableDeclaration(s) + } +} + + + + +func (p *SolidityParser) VariableDeclaration() (localctx IVariableDeclarationContext) { + this := p + _ = this + + localctx = NewVariableDeclarationContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 58, SolidityParserRULE_variableDeclaration) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(478) + p.typeName(0) + } + p.SetState(480) + p.GetErrorHandler().Sync(p) + + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 49, p.GetParserRuleContext()) == 1 { + { + p.SetState(479) + p.StorageLocation() + } + + + } + { + p.SetState(482) + p.Identifier() + } + + + + return localctx +} + + +// ITypeNameContext is an interface to support dynamic dispatch. +type ITypeNameContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsTypeNameContext differentiates from other interfaces. + IsTypeNameContext() +} + +type TypeNameContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyTypeNameContext() *TypeNameContext { + var p = new(TypeNameContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_typeName + return p +} + +func (*TypeNameContext) IsTypeNameContext() {} + +func NewTypeNameContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *TypeNameContext { + var p = new(TypeNameContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_typeName + + return p +} + +func (s *TypeNameContext) GetParser() antlr.Parser { return s.parser } + +func (s *TypeNameContext) ElementaryTypeName() IElementaryTypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IElementaryTypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IElementaryTypeNameContext) +} + +func (s *TypeNameContext) UserDefinedTypeName() IUserDefinedTypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IUserDefinedTypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IUserDefinedTypeNameContext) +} + +func (s *TypeNameContext) Mapping() IMappingContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IMappingContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IMappingContext) +} + +func (s *TypeNameContext) FunctionTypeName() IFunctionTypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IFunctionTypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IFunctionTypeNameContext) +} + +func (s *TypeNameContext) TypeName() ITypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ITypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ITypeNameContext) +} + +func (s *TypeNameContext) Expression() IExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *TypeNameContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *TypeNameContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *TypeNameContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterTypeName(s) + } +} + +func (s *TypeNameContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitTypeName(s) + } +} + + + + + +func (p *SolidityParser) TypeName() (localctx ITypeNameContext) { + return p.typeName(0) +} + +func (p *SolidityParser) typeName(_p int) (localctx ITypeNameContext) { + this := p + _ = this + + var _parentctx antlr.ParserRuleContext = p.GetParserRuleContext() + _parentState := p.GetState() + localctx = NewTypeNameContext(p, p.GetParserRuleContext(), _parentState) + var _prevctx ITypeNameContext = localctx + var _ antlr.ParserRuleContext = _prevctx // TODO: To prevent unused variable warning. + _startState := 60 + p.EnterRecursionRule(localctx, 60, SolidityParserRULE_typeName, _p) + var _la int + + + defer func() { + p.UnrollRecursionContexts(_parentctx) + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + var _alt int + + p.EnterOuterAlt(localctx, 1) + p.SetState(489) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 50, p.GetParserRuleContext()) { + case 1: + { + p.SetState(485) + p.ElementaryTypeName() + } + + + case 2: + { + p.SetState(486) + p.UserDefinedTypeName() + } + + + case 3: + { + p.SetState(487) + p.Mapping() + } + + + case 4: + { + p.SetState(488) + p.FunctionTypeName() + } + + } + p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) + p.SetState(499) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 52, p.GetParserRuleContext()) + + for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + if _alt == 1 { + if p.GetParseListeners() != nil { + p.TriggerExitRuleEvent() + } + _prevctx = localctx + localctx = NewTypeNameContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_typeName) + p.SetState(491) + + if !(p.Precpred(p.GetParserRuleContext(), 2)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 2)", "")) + } + { + p.SetState(492) + p.Match(SolidityParserT__32) + } + p.SetState(494) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__3) | (1 << SolidityParserT__12) | (1 << SolidityParserT__21))) != 0) || ((((_la - 33)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 33))) & ((1 << (SolidityParserT__32 - 33)) | (1 << (SolidityParserT__39 - 33)) | (1 << (SolidityParserT__50 - 33)) | (1 << (SolidityParserT__51 - 33)) | (1 << (SolidityParserT__52 - 33)) | (1 << (SolidityParserT__53 - 33)) | (1 << (SolidityParserT__54 - 33)) | (1 << (SolidityParserT__55 - 33)) | (1 << (SolidityParserT__56 - 33)) | (1 << (SolidityParserT__57 - 33)) | (1 << (SolidityParserT__59 - 33)) | (1 << (SolidityParserT__60 - 33)) | (1 << (SolidityParserT__61 - 33)) | (1 << (SolidityParserT__62 - 33)) | (1 << (SolidityParserT__63 - 33)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserBooleanLiteral - 93)) | (1 << (SolidityParserDecimalNumber - 93)) | (1 << (SolidityParserHexNumber - 93)) | (1 << (SolidityParserHexLiteralFragment - 93)) | (1 << (SolidityParserPayableKeyword - 93)) | (1 << (SolidityParserTypeKeyword - 93)) | (1 << (SolidityParserIdentifier - 93)) | (1 << (SolidityParserStringLiteralFragment - 93)))) != 0) { + { + p.SetState(493) + p.expression(0) + } + + } + { + p.SetState(496) + p.Match(SolidityParserT__33) + } + + + } + p.SetState(501) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 52, p.GetParserRuleContext()) + } + + + + return localctx +} + + +// IUserDefinedTypeNameContext is an interface to support dynamic dispatch. +type IUserDefinedTypeNameContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsUserDefinedTypeNameContext differentiates from other interfaces. + IsUserDefinedTypeNameContext() +} + +type UserDefinedTypeNameContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyUserDefinedTypeNameContext() *UserDefinedTypeNameContext { + var p = new(UserDefinedTypeNameContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_userDefinedTypeName + return p +} + +func (*UserDefinedTypeNameContext) IsUserDefinedTypeNameContext() {} + +func NewUserDefinedTypeNameContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *UserDefinedTypeNameContext { + var p = new(UserDefinedTypeNameContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_userDefinedTypeName + + return p +} + +func (s *UserDefinedTypeNameContext) GetParser() antlr.Parser { return s.parser } + +func (s *UserDefinedTypeNameContext) AllIdentifier() []IIdentifierContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IIdentifierContext); ok { + len++ + } + } + + tst := make([]IIdentifierContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IIdentifierContext); ok { + tst[i] = t.(IIdentifierContext) + i++ + } + } + + return tst +} + +func (s *UserDefinedTypeNameContext) Identifier(i int) IIdentifierContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *UserDefinedTypeNameContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *UserDefinedTypeNameContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *UserDefinedTypeNameContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterUserDefinedTypeName(s) + } +} + +func (s *UserDefinedTypeNameContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitUserDefinedTypeName(s) + } +} + + + + +func (p *SolidityParser) UserDefinedTypeName() (localctx IUserDefinedTypeNameContext) { + this := p + _ = this + + localctx = NewUserDefinedTypeNameContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 62, SolidityParserRULE_userDefinedTypeName) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + var _alt int + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(502) + p.Identifier() + } + p.SetState(507) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 53, p.GetParserRuleContext()) + + for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + if _alt == 1 { + { + p.SetState(503) + p.Match(SolidityParserT__34) + } + { + p.SetState(504) + p.Identifier() + } + + + } + p.SetState(509) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 53, p.GetParserRuleContext()) + } + + + + return localctx +} + + +// IMappingContext is an interface to support dynamic dispatch. +type IMappingContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsMappingContext differentiates from other interfaces. + IsMappingContext() +} + +type MappingContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyMappingContext() *MappingContext { + var p = new(MappingContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_mapping + return p +} + +func (*MappingContext) IsMappingContext() {} + +func NewMappingContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *MappingContext { + var p = new(MappingContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_mapping + + return p +} + +func (s *MappingContext) GetParser() antlr.Parser { return s.parser } + +func (s *MappingContext) TypeName() ITypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ITypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ITypeNameContext) +} + +func (s *MappingContext) ElementaryTypeName() IElementaryTypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IElementaryTypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IElementaryTypeNameContext) +} + +func (s *MappingContext) UserDefinedTypeName() IUserDefinedTypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IUserDefinedTypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IUserDefinedTypeNameContext) +} + +func (s *MappingContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *MappingContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *MappingContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterMapping(s) + } +} + +func (s *MappingContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitMapping(s) + } +} + + + + +func (p *SolidityParser) Mapping() (localctx IMappingContext) { + this := p + _ = this + + localctx = NewMappingContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 64, SolidityParserRULE_mapping) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(510) + p.Match(SolidityParserT__35) + } + { + p.SetState(511) + p.Match(SolidityParserT__21) + } + p.SetState(514) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 54, p.GetParserRuleContext()) { + case 1: + { + p.SetState(512) + p.ElementaryTypeName() + } + + + case 2: + { + p.SetState(513) + p.UserDefinedTypeName() + } + + } + { + p.SetState(516) + p.Match(SolidityParserT__36) + } + { + p.SetState(517) + p.typeName(0) + } + { + p.SetState(518) + p.Match(SolidityParserT__22) + } + + + + return localctx +} + + +// IFunctionTypeNameContext is an interface to support dynamic dispatch. +type IFunctionTypeNameContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsFunctionTypeNameContext differentiates from other interfaces. + IsFunctionTypeNameContext() +} + +type FunctionTypeNameContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyFunctionTypeNameContext() *FunctionTypeNameContext { + var p = new(FunctionTypeNameContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_functionTypeName + return p +} + +func (*FunctionTypeNameContext) IsFunctionTypeNameContext() {} + +func NewFunctionTypeNameContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *FunctionTypeNameContext { + var p = new(FunctionTypeNameContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_functionTypeName + + return p +} + +func (s *FunctionTypeNameContext) GetParser() antlr.Parser { return s.parser } + +func (s *FunctionTypeNameContext) ParameterList() IParameterListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IParameterListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IParameterListContext) +} + +func (s *FunctionTypeNameContext) ModifierList() IModifierListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IModifierListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IModifierListContext) +} + +func (s *FunctionTypeNameContext) ReturnParameters() IReturnParametersContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IReturnParametersContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IReturnParametersContext) +} + +func (s *FunctionTypeNameContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *FunctionTypeNameContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *FunctionTypeNameContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterFunctionTypeName(s) + } +} + +func (s *FunctionTypeNameContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitFunctionTypeName(s) + } +} + + + + +func (p *SolidityParser) FunctionTypeName() (localctx IFunctionTypeNameContext) { + this := p + _ = this + + localctx = NewFunctionTypeNameContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 66, SolidityParserRULE_functionTypeName) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(520) + p.Match(SolidityParserT__28) + } + { + p.SetState(521) + p.ParameterList() + } + { + p.SetState(522) + p.ModifierList() + } + p.SetState(524) + p.GetErrorHandler().Sync(p) + + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 55, p.GetParserRuleContext()) == 1 { + { + p.SetState(523) + p.ReturnParameters() + } + + + } + + + + return localctx +} + + +// IStorageLocationContext is an interface to support dynamic dispatch. +type IStorageLocationContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsStorageLocationContext differentiates from other interfaces. + IsStorageLocationContext() +} + +type StorageLocationContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyStorageLocationContext() *StorageLocationContext { + var p = new(StorageLocationContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_storageLocation + return p +} + +func (*StorageLocationContext) IsStorageLocationContext() {} + +func NewStorageLocationContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *StorageLocationContext { + var p = new(StorageLocationContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_storageLocation + + return p +} + +func (s *StorageLocationContext) GetParser() antlr.Parser { return s.parser } +func (s *StorageLocationContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *StorageLocationContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *StorageLocationContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterStorageLocation(s) + } +} + +func (s *StorageLocationContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitStorageLocation(s) + } +} + + + + +func (p *SolidityParser) StorageLocation() (localctx IStorageLocationContext) { + this := p + _ = this + + localctx = NewStorageLocationContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 68, SolidityParserRULE_storageLocation) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(526) + _la = p.GetTokenStream().LA(1) + + if !(((((_la - 38)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 38))) & ((1 << (SolidityParserT__37 - 38)) | (1 << (SolidityParserT__38 - 38)) | (1 << (SolidityParserT__39 - 38)))) != 0)) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + + + + return localctx +} + + +// IStateMutabilityContext is an interface to support dynamic dispatch. +type IStateMutabilityContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsStateMutabilityContext differentiates from other interfaces. + IsStateMutabilityContext() +} + +type StateMutabilityContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyStateMutabilityContext() *StateMutabilityContext { + var p = new(StateMutabilityContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_stateMutability + return p +} + +func (*StateMutabilityContext) IsStateMutabilityContext() {} + +func NewStateMutabilityContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *StateMutabilityContext { + var p = new(StateMutabilityContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_stateMutability + + return p +} + +func (s *StateMutabilityContext) GetParser() antlr.Parser { return s.parser } + +func (s *StateMutabilityContext) PureKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserPureKeyword, 0) +} + +func (s *StateMutabilityContext) ConstantKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserConstantKeyword, 0) +} + +func (s *StateMutabilityContext) ViewKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserViewKeyword, 0) +} + +func (s *StateMutabilityContext) PayableKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserPayableKeyword, 0) +} + +func (s *StateMutabilityContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *StateMutabilityContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *StateMutabilityContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterStateMutability(s) + } +} + +func (s *StateMutabilityContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitStateMutability(s) + } +} + + + + +func (p *SolidityParser) StateMutability() (localctx IStateMutabilityContext) { + this := p + _ = this + + localctx = NewStateMutabilityContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 70, SolidityParserRULE_stateMutability) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(528) + _la = p.GetTokenStream().LA(1) + + if !(((((_la - 106)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 106))) & ((1 << (SolidityParserConstantKeyword - 106)) | (1 << (SolidityParserPayableKeyword - 106)) | (1 << (SolidityParserPureKeyword - 106)) | (1 << (SolidityParserViewKeyword - 106)))) != 0)) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + + + + return localctx +} + + +// IBlockContext is an interface to support dynamic dispatch. +type IBlockContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsBlockContext differentiates from other interfaces. + IsBlockContext() +} + +type BlockContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyBlockContext() *BlockContext { + var p = new(BlockContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_block + return p +} + +func (*BlockContext) IsBlockContext() {} + +func NewBlockContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *BlockContext { + var p = new(BlockContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_block + + return p +} + +func (s *BlockContext) GetParser() antlr.Parser { return s.parser } + +func (s *BlockContext) AllStatement() []IStatementContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IStatementContext); ok { + len++ + } + } + + tst := make([]IStatementContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IStatementContext); ok { + tst[i] = t.(IStatementContext) + i++ + } + } + + return tst +} + +func (s *BlockContext) Statement(i int) IStatementContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStatementContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IStatementContext) +} + +func (s *BlockContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *BlockContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *BlockContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterBlock(s) + } +} + +func (s *BlockContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitBlock(s) + } +} + + + + +func (p *SolidityParser) Block() (localctx IBlockContext) { + this := p + _ = this + + localctx = NewBlockContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 72, SolidityParserRULE_block) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(530) + p.Match(SolidityParserT__13) + } + p.SetState(534) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__3) | (1 << SolidityParserT__12) | (1 << SolidityParserT__13) | (1 << SolidityParserT__21) | (1 << SolidityParserT__25) | (1 << SolidityParserT__28))) != 0) || ((((_la - 33)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 33))) & ((1 << (SolidityParserT__32 - 33)) | (1 << (SolidityParserT__35 - 33)) | (1 << (SolidityParserT__39 - 33)) | (1 << (SolidityParserT__40 - 33)) | (1 << (SolidityParserT__42 - 33)) | (1 << (SolidityParserT__44 - 33)) | (1 << (SolidityParserT__45 - 33)) | (1 << (SolidityParserT__46 - 33)) | (1 << (SolidityParserT__47 - 33)) | (1 << (SolidityParserT__48 - 33)) | (1 << (SolidityParserT__49 - 33)) | (1 << (SolidityParserT__50 - 33)) | (1 << (SolidityParserT__51 - 33)) | (1 << (SolidityParserT__52 - 33)) | (1 << (SolidityParserT__53 - 33)) | (1 << (SolidityParserT__54 - 33)) | (1 << (SolidityParserT__55 - 33)) | (1 << (SolidityParserT__56 - 33)) | (1 << (SolidityParserT__57 - 33)) | (1 << (SolidityParserT__59 - 33)) | (1 << (SolidityParserT__60 - 33)) | (1 << (SolidityParserT__61 - 33)) | (1 << (SolidityParserT__62 - 33)) | (1 << (SolidityParserT__63 - 33)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserBooleanLiteral - 93)) | (1 << (SolidityParserDecimalNumber - 93)) | (1 << (SolidityParserHexNumber - 93)) | (1 << (SolidityParserHexLiteralFragment - 93)) | (1 << (SolidityParserBreakKeyword - 93)) | (1 << (SolidityParserContinueKeyword - 93)) | (1 << (SolidityParserPayableKeyword - 93)) | (1 << (SolidityParserTypeKeyword - 93)) | (1 << (SolidityParserIdentifier - 93)) | (1 << (SolidityParserStringLiteralFragment - 93)))) != 0) { + { + p.SetState(531) + p.Statement() + } + + + p.SetState(536) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + { + p.SetState(537) + p.Match(SolidityParserT__15) + } + + + + return localctx +} + + +// IStatementContext is an interface to support dynamic dispatch. +type IStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsStatementContext differentiates from other interfaces. + IsStatementContext() +} + +type StatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyStatementContext() *StatementContext { + var p = new(StatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_statement + return p +} + +func (*StatementContext) IsStatementContext() {} + +func NewStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *StatementContext { + var p = new(StatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_statement + + return p +} + +func (s *StatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *StatementContext) IfStatement() IIfStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIfStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIfStatementContext) +} + +func (s *StatementContext) TryStatement() ITryStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ITryStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ITryStatementContext) +} + +func (s *StatementContext) WhileStatement() IWhileStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IWhileStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IWhileStatementContext) +} + +func (s *StatementContext) ForStatement() IForStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IForStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IForStatementContext) +} + +func (s *StatementContext) Block() IBlockContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IBlockContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IBlockContext) +} + +func (s *StatementContext) InlineAssemblyStatement() IInlineAssemblyStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IInlineAssemblyStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IInlineAssemblyStatementContext) +} + +func (s *StatementContext) DoWhileStatement() IDoWhileStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IDoWhileStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IDoWhileStatementContext) +} + +func (s *StatementContext) ContinueStatement() IContinueStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IContinueStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IContinueStatementContext) +} + +func (s *StatementContext) BreakStatement() IBreakStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IBreakStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IBreakStatementContext) +} + +func (s *StatementContext) ReturnStatement() IReturnStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IReturnStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IReturnStatementContext) +} + +func (s *StatementContext) ThrowStatement() IThrowStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IThrowStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IThrowStatementContext) +} + +func (s *StatementContext) EmitStatement() IEmitStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IEmitStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IEmitStatementContext) +} + +func (s *StatementContext) SimpleStatement() ISimpleStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ISimpleStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ISimpleStatementContext) +} + +func (s *StatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *StatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *StatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterStatement(s) + } +} + +func (s *StatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitStatement(s) + } +} + + + + +func (p *SolidityParser) Statement() (localctx IStatementContext) { + this := p + _ = this + + localctx = NewStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 74, SolidityParserRULE_statement) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(552) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__40: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(539) + p.IfStatement() + } + + + case SolidityParserT__42: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(540) + p.TryStatement() + } + + + case SolidityParserT__44: + p.EnterOuterAlt(localctx, 3) + { + p.SetState(541) + p.WhileStatement() + } + + + case SolidityParserT__25: + p.EnterOuterAlt(localctx, 4) + { + p.SetState(542) + p.ForStatement() + } + + + case SolidityParserT__13: + p.EnterOuterAlt(localctx, 5) + { + p.SetState(543) + p.Block() + } + + + case SolidityParserT__45: + p.EnterOuterAlt(localctx, 6) + { + p.SetState(544) + p.InlineAssemblyStatement() + } + + + case SolidityParserT__46: + p.EnterOuterAlt(localctx, 7) + { + p.SetState(545) + p.DoWhileStatement() + } + + + case SolidityParserContinueKeyword: + p.EnterOuterAlt(localctx, 8) + { + p.SetState(546) + p.ContinueStatement() + } + + + case SolidityParserBreakKeyword: + p.EnterOuterAlt(localctx, 9) + { + p.SetState(547) + p.BreakStatement() + } + + + case SolidityParserT__47: + p.EnterOuterAlt(localctx, 10) + { + p.SetState(548) + p.ReturnStatement() + } + + + case SolidityParserT__48: + p.EnterOuterAlt(localctx, 11) + { + p.SetState(549) + p.ThrowStatement() + } + + + case SolidityParserT__49: + p.EnterOuterAlt(localctx, 12) + { + p.SetState(550) + p.EmitStatement() + } + + + case SolidityParserT__3, SolidityParserT__12, SolidityParserT__21, SolidityParserT__28, SolidityParserT__32, SolidityParserT__35, SolidityParserT__39, SolidityParserT__50, SolidityParserT__51, SolidityParserT__52, SolidityParserT__53, SolidityParserT__54, SolidityParserT__55, SolidityParserT__56, SolidityParserT__57, SolidityParserT__59, SolidityParserT__60, SolidityParserT__61, SolidityParserT__62, SolidityParserT__63, SolidityParserInt, SolidityParserUint, SolidityParserByte, SolidityParserFixed, SolidityParserUfixed, SolidityParserBooleanLiteral, SolidityParserDecimalNumber, SolidityParserHexNumber, SolidityParserHexLiteralFragment, SolidityParserPayableKeyword, SolidityParserTypeKeyword, SolidityParserIdentifier, SolidityParserStringLiteralFragment: + p.EnterOuterAlt(localctx, 13) + { + p.SetState(551) + p.SimpleStatement() + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + + return localctx +} + + +// IExpressionStatementContext is an interface to support dynamic dispatch. +type IExpressionStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsExpressionStatementContext differentiates from other interfaces. + IsExpressionStatementContext() +} + +type ExpressionStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyExpressionStatementContext() *ExpressionStatementContext { + var p = new(ExpressionStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_expressionStatement + return p +} + +func (*ExpressionStatementContext) IsExpressionStatementContext() {} + +func NewExpressionStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ExpressionStatementContext { + var p = new(ExpressionStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_expressionStatement + + return p +} + +func (s *ExpressionStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *ExpressionStatementContext) Expression() IExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *ExpressionStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ExpressionStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ExpressionStatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterExpressionStatement(s) + } +} + +func (s *ExpressionStatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitExpressionStatement(s) + } +} + + + + +func (p *SolidityParser) ExpressionStatement() (localctx IExpressionStatementContext) { + this := p + _ = this + + localctx = NewExpressionStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 76, SolidityParserRULE_expressionStatement) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(554) + p.expression(0) + } + { + p.SetState(555) + p.Match(SolidityParserT__1) + } + + + + return localctx +} + + +// IIfStatementContext is an interface to support dynamic dispatch. +type IIfStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsIfStatementContext differentiates from other interfaces. + IsIfStatementContext() +} + +type IfStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyIfStatementContext() *IfStatementContext { + var p = new(IfStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_ifStatement + return p +} + +func (*IfStatementContext) IsIfStatementContext() {} + +func NewIfStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *IfStatementContext { + var p = new(IfStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_ifStatement + + return p +} + +func (s *IfStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *IfStatementContext) Expression() IExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *IfStatementContext) AllStatement() []IStatementContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IStatementContext); ok { + len++ + } + } + + tst := make([]IStatementContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IStatementContext); ok { + tst[i] = t.(IStatementContext) + i++ + } + } + + return tst +} + +func (s *IfStatementContext) Statement(i int) IStatementContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStatementContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IStatementContext) +} + +func (s *IfStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *IfStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *IfStatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterIfStatement(s) + } +} + +func (s *IfStatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitIfStatement(s) + } +} + + + + +func (p *SolidityParser) IfStatement() (localctx IIfStatementContext) { + this := p + _ = this + + localctx = NewIfStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 78, SolidityParserRULE_ifStatement) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(557) + p.Match(SolidityParserT__40) + } + { + p.SetState(558) + p.Match(SolidityParserT__21) + } + { + p.SetState(559) + p.expression(0) + } + { + p.SetState(560) + p.Match(SolidityParserT__22) + } + { + p.SetState(561) + p.Statement() + } + p.SetState(564) + p.GetErrorHandler().Sync(p) + + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 58, p.GetParserRuleContext()) == 1 { + { + p.SetState(562) + p.Match(SolidityParserT__41) + } + { + p.SetState(563) + p.Statement() + } + + + } + + + + return localctx +} + + +// ITryStatementContext is an interface to support dynamic dispatch. +type ITryStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsTryStatementContext differentiates from other interfaces. + IsTryStatementContext() +} + +type TryStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyTryStatementContext() *TryStatementContext { + var p = new(TryStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_tryStatement + return p +} + +func (*TryStatementContext) IsTryStatementContext() {} + +func NewTryStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *TryStatementContext { + var p = new(TryStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_tryStatement + + return p +} + +func (s *TryStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *TryStatementContext) Expression() IExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *TryStatementContext) Block() IBlockContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IBlockContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IBlockContext) +} + +func (s *TryStatementContext) ReturnParameters() IReturnParametersContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IReturnParametersContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IReturnParametersContext) +} + +func (s *TryStatementContext) AllCatchClause() []ICatchClauseContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(ICatchClauseContext); ok { + len++ + } + } + + tst := make([]ICatchClauseContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(ICatchClauseContext); ok { + tst[i] = t.(ICatchClauseContext) + i++ + } + } + + return tst +} + +func (s *TryStatementContext) CatchClause(i int) ICatchClauseContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ICatchClauseContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(ICatchClauseContext) +} + +func (s *TryStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *TryStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *TryStatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterTryStatement(s) + } +} + +func (s *TryStatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitTryStatement(s) + } +} + + + + +func (p *SolidityParser) TryStatement() (localctx ITryStatementContext) { + this := p + _ = this + + localctx = NewTryStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 80, SolidityParserRULE_tryStatement) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(566) + p.Match(SolidityParserT__42) + } + { + p.SetState(567) + p.expression(0) + } + p.SetState(569) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__29 { + { + p.SetState(568) + p.ReturnParameters() + } + + } + { + p.SetState(571) + p.Block() + } + p.SetState(573) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for ok := true; ok; ok = _la == SolidityParserT__43 { + { + p.SetState(572) + p.CatchClause() + } + + + p.SetState(575) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + + + + return localctx +} + + +// ICatchClauseContext is an interface to support dynamic dispatch. +type ICatchClauseContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsCatchClauseContext differentiates from other interfaces. + IsCatchClauseContext() +} + +type CatchClauseContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyCatchClauseContext() *CatchClauseContext { + var p = new(CatchClauseContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_catchClause + return p +} + +func (*CatchClauseContext) IsCatchClauseContext() {} + +func NewCatchClauseContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *CatchClauseContext { + var p = new(CatchClauseContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_catchClause + + return p +} + +func (s *CatchClauseContext) GetParser() antlr.Parser { return s.parser } + +func (s *CatchClauseContext) Block() IBlockContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IBlockContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IBlockContext) +} + +func (s *CatchClauseContext) ParameterList() IParameterListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IParameterListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IParameterListContext) +} + +func (s *CatchClauseContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *CatchClauseContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *CatchClauseContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *CatchClauseContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterCatchClause(s) + } +} + +func (s *CatchClauseContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitCatchClause(s) + } +} + + + + +func (p *SolidityParser) CatchClause() (localctx ICatchClauseContext) { + this := p + _ = this + + localctx = NewCatchClauseContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 82, SolidityParserRULE_catchClause) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(577) + p.Match(SolidityParserT__43) + } + p.SetState(582) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || _la == SolidityParserT__21 || _la == SolidityParserT__39 || _la == SolidityParserT__51 || _la == SolidityParserIdentifier { + p.SetState(579) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || _la == SolidityParserT__39 || _la == SolidityParserT__51 || _la == SolidityParserIdentifier { + { + p.SetState(578) + p.Identifier() + } + + } + { + p.SetState(581) + p.ParameterList() + } + + } + { + p.SetState(584) + p.Block() + } + + + + return localctx +} + + +// IWhileStatementContext is an interface to support dynamic dispatch. +type IWhileStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsWhileStatementContext differentiates from other interfaces. + IsWhileStatementContext() +} + +type WhileStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyWhileStatementContext() *WhileStatementContext { + var p = new(WhileStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_whileStatement + return p +} + +func (*WhileStatementContext) IsWhileStatementContext() {} + +func NewWhileStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *WhileStatementContext { + var p = new(WhileStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_whileStatement + + return p +} + +func (s *WhileStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *WhileStatementContext) Expression() IExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *WhileStatementContext) Statement() IStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IStatementContext) +} + +func (s *WhileStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *WhileStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *WhileStatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterWhileStatement(s) + } +} + +func (s *WhileStatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitWhileStatement(s) + } +} + + + + +func (p *SolidityParser) WhileStatement() (localctx IWhileStatementContext) { + this := p + _ = this + + localctx = NewWhileStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 84, SolidityParserRULE_whileStatement) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(586) + p.Match(SolidityParserT__44) + } + { + p.SetState(587) + p.Match(SolidityParserT__21) + } + { + p.SetState(588) + p.expression(0) + } + { + p.SetState(589) + p.Match(SolidityParserT__22) + } + { + p.SetState(590) + p.Statement() + } + + + + return localctx +} + + +// IForStatementContext is an interface to support dynamic dispatch. +type IForStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsForStatementContext differentiates from other interfaces. + IsForStatementContext() +} + +type ForStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyForStatementContext() *ForStatementContext { + var p = new(ForStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_forStatement + return p +} + +func (*ForStatementContext) IsForStatementContext() {} + +func NewForStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ForStatementContext { + var p = new(ForStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_forStatement + + return p +} + +func (s *ForStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *ForStatementContext) Statement() IStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IStatementContext) +} + +func (s *ForStatementContext) SimpleStatement() ISimpleStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ISimpleStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ISimpleStatementContext) +} + +func (s *ForStatementContext) ExpressionStatement() IExpressionStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionStatementContext) +} + +func (s *ForStatementContext) Expression() IExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *ForStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ForStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ForStatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterForStatement(s) + } +} + +func (s *ForStatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitForStatement(s) + } +} + + + + +func (p *SolidityParser) ForStatement() (localctx IForStatementContext) { + this := p + _ = this + + localctx = NewForStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 86, SolidityParserRULE_forStatement) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(592) + p.Match(SolidityParserT__25) + } + { + p.SetState(593) + p.Match(SolidityParserT__21) + } + p.SetState(596) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__3, SolidityParserT__12, SolidityParserT__21, SolidityParserT__28, SolidityParserT__32, SolidityParserT__35, SolidityParserT__39, SolidityParserT__50, SolidityParserT__51, SolidityParserT__52, SolidityParserT__53, SolidityParserT__54, SolidityParserT__55, SolidityParserT__56, SolidityParserT__57, SolidityParserT__59, SolidityParserT__60, SolidityParserT__61, SolidityParserT__62, SolidityParserT__63, SolidityParserInt, SolidityParserUint, SolidityParserByte, SolidityParserFixed, SolidityParserUfixed, SolidityParserBooleanLiteral, SolidityParserDecimalNumber, SolidityParserHexNumber, SolidityParserHexLiteralFragment, SolidityParserPayableKeyword, SolidityParserTypeKeyword, SolidityParserIdentifier, SolidityParserStringLiteralFragment: + { + p.SetState(594) + p.SimpleStatement() + } + + + case SolidityParserT__1: + { + p.SetState(595) + p.Match(SolidityParserT__1) + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + p.SetState(600) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__3, SolidityParserT__12, SolidityParserT__21, SolidityParserT__32, SolidityParserT__39, SolidityParserT__50, SolidityParserT__51, SolidityParserT__52, SolidityParserT__53, SolidityParserT__54, SolidityParserT__55, SolidityParserT__56, SolidityParserT__57, SolidityParserT__59, SolidityParserT__60, SolidityParserT__61, SolidityParserT__62, SolidityParserT__63, SolidityParserInt, SolidityParserUint, SolidityParserByte, SolidityParserFixed, SolidityParserUfixed, SolidityParserBooleanLiteral, SolidityParserDecimalNumber, SolidityParserHexNumber, SolidityParserHexLiteralFragment, SolidityParserPayableKeyword, SolidityParserTypeKeyword, SolidityParserIdentifier, SolidityParserStringLiteralFragment: + { + p.SetState(598) + p.ExpressionStatement() + } + + + case SolidityParserT__1: + { + p.SetState(599) + p.Match(SolidityParserT__1) + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + p.SetState(603) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__3) | (1 << SolidityParserT__12) | (1 << SolidityParserT__21))) != 0) || ((((_la - 33)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 33))) & ((1 << (SolidityParserT__32 - 33)) | (1 << (SolidityParserT__39 - 33)) | (1 << (SolidityParserT__50 - 33)) | (1 << (SolidityParserT__51 - 33)) | (1 << (SolidityParserT__52 - 33)) | (1 << (SolidityParserT__53 - 33)) | (1 << (SolidityParserT__54 - 33)) | (1 << (SolidityParserT__55 - 33)) | (1 << (SolidityParserT__56 - 33)) | (1 << (SolidityParserT__57 - 33)) | (1 << (SolidityParserT__59 - 33)) | (1 << (SolidityParserT__60 - 33)) | (1 << (SolidityParserT__61 - 33)) | (1 << (SolidityParserT__62 - 33)) | (1 << (SolidityParserT__63 - 33)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserBooleanLiteral - 93)) | (1 << (SolidityParserDecimalNumber - 93)) | (1 << (SolidityParserHexNumber - 93)) | (1 << (SolidityParserHexLiteralFragment - 93)) | (1 << (SolidityParserPayableKeyword - 93)) | (1 << (SolidityParserTypeKeyword - 93)) | (1 << (SolidityParserIdentifier - 93)) | (1 << (SolidityParserStringLiteralFragment - 93)))) != 0) { + { + p.SetState(602) + p.expression(0) + } + + } + { + p.SetState(605) + p.Match(SolidityParserT__22) + } + { + p.SetState(606) + p.Statement() + } + + + + return localctx +} + + +// ISimpleStatementContext is an interface to support dynamic dispatch. +type ISimpleStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsSimpleStatementContext differentiates from other interfaces. + IsSimpleStatementContext() +} + +type SimpleStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptySimpleStatementContext() *SimpleStatementContext { + var p = new(SimpleStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_simpleStatement + return p +} + +func (*SimpleStatementContext) IsSimpleStatementContext() {} + +func NewSimpleStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *SimpleStatementContext { + var p = new(SimpleStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_simpleStatement + + return p +} + +func (s *SimpleStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *SimpleStatementContext) VariableDeclarationStatement() IVariableDeclarationStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IVariableDeclarationStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IVariableDeclarationStatementContext) +} + +func (s *SimpleStatementContext) ExpressionStatement() IExpressionStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionStatementContext) +} + +func (s *SimpleStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *SimpleStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *SimpleStatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterSimpleStatement(s) + } +} + +func (s *SimpleStatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitSimpleStatement(s) + } +} + + + + +func (p *SolidityParser) SimpleStatement() (localctx ISimpleStatementContext) { + this := p + _ = this + + localctx = NewSimpleStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 88, SolidityParserRULE_simpleStatement) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + p.SetState(610) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 66, p.GetParserRuleContext()) { + case 1: + { + p.SetState(608) + p.VariableDeclarationStatement() + } + + + case 2: + { + p.SetState(609) + p.ExpressionStatement() + } + + } + + + + return localctx +} + + +// IInlineAssemblyStatementContext is an interface to support dynamic dispatch. +type IInlineAssemblyStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsInlineAssemblyStatementContext differentiates from other interfaces. + IsInlineAssemblyStatementContext() +} + +type InlineAssemblyStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyInlineAssemblyStatementContext() *InlineAssemblyStatementContext { + var p = new(InlineAssemblyStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_inlineAssemblyStatement + return p +} + +func (*InlineAssemblyStatementContext) IsInlineAssemblyStatementContext() {} + +func NewInlineAssemblyStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *InlineAssemblyStatementContext { + var p = new(InlineAssemblyStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_inlineAssemblyStatement + + return p +} + +func (s *InlineAssemblyStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *InlineAssemblyStatementContext) AssemblyBlock() IAssemblyBlockContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyBlockContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyBlockContext) +} + +func (s *InlineAssemblyStatementContext) StringLiteralFragment() antlr.TerminalNode { + return s.GetToken(SolidityParserStringLiteralFragment, 0) +} + +func (s *InlineAssemblyStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *InlineAssemblyStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *InlineAssemblyStatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterInlineAssemblyStatement(s) + } +} + +func (s *InlineAssemblyStatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitInlineAssemblyStatement(s) + } +} + + + + +func (p *SolidityParser) InlineAssemblyStatement() (localctx IInlineAssemblyStatementContext) { + this := p + _ = this + + localctx = NewInlineAssemblyStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 90, SolidityParserRULE_inlineAssemblyStatement) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(612) + p.Match(SolidityParserT__45) + } + p.SetState(614) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserStringLiteralFragment { + { + p.SetState(613) + p.Match(SolidityParserStringLiteralFragment) + } + + } + { + p.SetState(616) + p.AssemblyBlock() + } + + + + return localctx +} + + +// IDoWhileStatementContext is an interface to support dynamic dispatch. +type IDoWhileStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsDoWhileStatementContext differentiates from other interfaces. + IsDoWhileStatementContext() +} + +type DoWhileStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyDoWhileStatementContext() *DoWhileStatementContext { + var p = new(DoWhileStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_doWhileStatement + return p +} + +func (*DoWhileStatementContext) IsDoWhileStatementContext() {} + +func NewDoWhileStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *DoWhileStatementContext { + var p = new(DoWhileStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_doWhileStatement + + return p +} + +func (s *DoWhileStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *DoWhileStatementContext) Statement() IStatementContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStatementContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IStatementContext) +} + +func (s *DoWhileStatementContext) Expression() IExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *DoWhileStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *DoWhileStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *DoWhileStatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterDoWhileStatement(s) + } +} + +func (s *DoWhileStatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitDoWhileStatement(s) + } +} + + + + +func (p *SolidityParser) DoWhileStatement() (localctx IDoWhileStatementContext) { + this := p + _ = this + + localctx = NewDoWhileStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 92, SolidityParserRULE_doWhileStatement) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(618) + p.Match(SolidityParserT__46) + } + { + p.SetState(619) + p.Statement() + } + { + p.SetState(620) + p.Match(SolidityParserT__44) + } + { + p.SetState(621) + p.Match(SolidityParserT__21) + } + { + p.SetState(622) + p.expression(0) + } + { + p.SetState(623) + p.Match(SolidityParserT__22) + } + { + p.SetState(624) + p.Match(SolidityParserT__1) + } + + + + return localctx +} + + +// IContinueStatementContext is an interface to support dynamic dispatch. +type IContinueStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsContinueStatementContext differentiates from other interfaces. + IsContinueStatementContext() +} + +type ContinueStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyContinueStatementContext() *ContinueStatementContext { + var p = new(ContinueStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_continueStatement + return p +} + +func (*ContinueStatementContext) IsContinueStatementContext() {} + +func NewContinueStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ContinueStatementContext { + var p = new(ContinueStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_continueStatement + + return p +} + +func (s *ContinueStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *ContinueStatementContext) ContinueKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserContinueKeyword, 0) +} + +func (s *ContinueStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ContinueStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ContinueStatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterContinueStatement(s) + } +} + +func (s *ContinueStatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitContinueStatement(s) + } +} + + + + +func (p *SolidityParser) ContinueStatement() (localctx IContinueStatementContext) { + this := p + _ = this + + localctx = NewContinueStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 94, SolidityParserRULE_continueStatement) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(626) + p.Match(SolidityParserContinueKeyword) + } + { + p.SetState(627) + p.Match(SolidityParserT__1) + } + + + + return localctx +} + + +// IBreakStatementContext is an interface to support dynamic dispatch. +type IBreakStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsBreakStatementContext differentiates from other interfaces. + IsBreakStatementContext() +} + +type BreakStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyBreakStatementContext() *BreakStatementContext { + var p = new(BreakStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_breakStatement + return p +} + +func (*BreakStatementContext) IsBreakStatementContext() {} + +func NewBreakStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *BreakStatementContext { + var p = new(BreakStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_breakStatement + + return p +} + +func (s *BreakStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *BreakStatementContext) BreakKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserBreakKeyword, 0) +} + +func (s *BreakStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *BreakStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *BreakStatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterBreakStatement(s) + } +} + +func (s *BreakStatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitBreakStatement(s) + } +} + + + + +func (p *SolidityParser) BreakStatement() (localctx IBreakStatementContext) { + this := p + _ = this + + localctx = NewBreakStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 96, SolidityParserRULE_breakStatement) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(629) + p.Match(SolidityParserBreakKeyword) + } + { + p.SetState(630) + p.Match(SolidityParserT__1) + } + + + + return localctx +} + + +// IReturnStatementContext is an interface to support dynamic dispatch. +type IReturnStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsReturnStatementContext differentiates from other interfaces. + IsReturnStatementContext() +} + +type ReturnStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyReturnStatementContext() *ReturnStatementContext { + var p = new(ReturnStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_returnStatement + return p +} + +func (*ReturnStatementContext) IsReturnStatementContext() {} + +func NewReturnStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ReturnStatementContext { + var p = new(ReturnStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_returnStatement + + return p +} + +func (s *ReturnStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *ReturnStatementContext) Expression() IExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *ReturnStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ReturnStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ReturnStatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterReturnStatement(s) + } +} + +func (s *ReturnStatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitReturnStatement(s) + } +} + + + + +func (p *SolidityParser) ReturnStatement() (localctx IReturnStatementContext) { + this := p + _ = this + + localctx = NewReturnStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 98, SolidityParserRULE_returnStatement) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(632) + p.Match(SolidityParserT__47) + } + p.SetState(634) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__3) | (1 << SolidityParserT__12) | (1 << SolidityParserT__21))) != 0) || ((((_la - 33)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 33))) & ((1 << (SolidityParserT__32 - 33)) | (1 << (SolidityParserT__39 - 33)) | (1 << (SolidityParserT__50 - 33)) | (1 << (SolidityParserT__51 - 33)) | (1 << (SolidityParserT__52 - 33)) | (1 << (SolidityParserT__53 - 33)) | (1 << (SolidityParserT__54 - 33)) | (1 << (SolidityParserT__55 - 33)) | (1 << (SolidityParserT__56 - 33)) | (1 << (SolidityParserT__57 - 33)) | (1 << (SolidityParserT__59 - 33)) | (1 << (SolidityParserT__60 - 33)) | (1 << (SolidityParserT__61 - 33)) | (1 << (SolidityParserT__62 - 33)) | (1 << (SolidityParserT__63 - 33)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserBooleanLiteral - 93)) | (1 << (SolidityParserDecimalNumber - 93)) | (1 << (SolidityParserHexNumber - 93)) | (1 << (SolidityParserHexLiteralFragment - 93)) | (1 << (SolidityParserPayableKeyword - 93)) | (1 << (SolidityParserTypeKeyword - 93)) | (1 << (SolidityParserIdentifier - 93)) | (1 << (SolidityParserStringLiteralFragment - 93)))) != 0) { + { + p.SetState(633) + p.expression(0) + } + + } + { + p.SetState(636) + p.Match(SolidityParserT__1) + } + + + + return localctx +} + + +// IThrowStatementContext is an interface to support dynamic dispatch. +type IThrowStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsThrowStatementContext differentiates from other interfaces. + IsThrowStatementContext() +} + +type ThrowStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyThrowStatementContext() *ThrowStatementContext { + var p = new(ThrowStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_throwStatement + return p +} + +func (*ThrowStatementContext) IsThrowStatementContext() {} + +func NewThrowStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ThrowStatementContext { + var p = new(ThrowStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_throwStatement + + return p +} + +func (s *ThrowStatementContext) GetParser() antlr.Parser { return s.parser } +func (s *ThrowStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ThrowStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ThrowStatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterThrowStatement(s) + } +} + +func (s *ThrowStatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitThrowStatement(s) + } +} + + + + +func (p *SolidityParser) ThrowStatement() (localctx IThrowStatementContext) { + this := p + _ = this + + localctx = NewThrowStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 100, SolidityParserRULE_throwStatement) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(638) + p.Match(SolidityParserT__48) + } + { + p.SetState(639) + p.Match(SolidityParserT__1) + } + + + + return localctx +} + + +// IEmitStatementContext is an interface to support dynamic dispatch. +type IEmitStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsEmitStatementContext differentiates from other interfaces. + IsEmitStatementContext() +} + +type EmitStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyEmitStatementContext() *EmitStatementContext { + var p = new(EmitStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_emitStatement + return p +} + +func (*EmitStatementContext) IsEmitStatementContext() {} + +func NewEmitStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *EmitStatementContext { + var p = new(EmitStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_emitStatement + + return p +} + +func (s *EmitStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *EmitStatementContext) FunctionCall() IFunctionCallContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IFunctionCallContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IFunctionCallContext) +} + +func (s *EmitStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *EmitStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *EmitStatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterEmitStatement(s) + } +} + +func (s *EmitStatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitEmitStatement(s) + } +} + + + + +func (p *SolidityParser) EmitStatement() (localctx IEmitStatementContext) { + this := p + _ = this + + localctx = NewEmitStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 102, SolidityParserRULE_emitStatement) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(641) + p.Match(SolidityParserT__49) + } + { + p.SetState(642) + p.FunctionCall() + } + { + p.SetState(643) + p.Match(SolidityParserT__1) + } + + + + return localctx +} + + +// IVariableDeclarationStatementContext is an interface to support dynamic dispatch. +type IVariableDeclarationStatementContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsVariableDeclarationStatementContext differentiates from other interfaces. + IsVariableDeclarationStatementContext() +} + +type VariableDeclarationStatementContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyVariableDeclarationStatementContext() *VariableDeclarationStatementContext { + var p = new(VariableDeclarationStatementContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_variableDeclarationStatement + return p +} + +func (*VariableDeclarationStatementContext) IsVariableDeclarationStatementContext() {} + +func NewVariableDeclarationStatementContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *VariableDeclarationStatementContext { + var p = new(VariableDeclarationStatementContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_variableDeclarationStatement + + return p +} + +func (s *VariableDeclarationStatementContext) GetParser() antlr.Parser { return s.parser } + +func (s *VariableDeclarationStatementContext) IdentifierList() IIdentifierListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierListContext) +} + +func (s *VariableDeclarationStatementContext) VariableDeclaration() IVariableDeclarationContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IVariableDeclarationContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IVariableDeclarationContext) +} + +func (s *VariableDeclarationStatementContext) VariableDeclarationList() IVariableDeclarationListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IVariableDeclarationListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IVariableDeclarationListContext) +} + +func (s *VariableDeclarationStatementContext) Expression() IExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *VariableDeclarationStatementContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *VariableDeclarationStatementContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *VariableDeclarationStatementContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterVariableDeclarationStatement(s) + } +} + +func (s *VariableDeclarationStatementContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitVariableDeclarationStatement(s) + } +} + + + + +func (p *SolidityParser) VariableDeclarationStatement() (localctx IVariableDeclarationStatementContext) { + this := p + _ = this + + localctx = NewVariableDeclarationStatementContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 104, SolidityParserRULE_variableDeclarationStatement) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + p.SetState(652) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 69, p.GetParserRuleContext()) { + case 1: + { + p.SetState(645) + p.Match(SolidityParserT__50) + } + { + p.SetState(646) + p.IdentifierList() + } + + + case 2: + { + p.SetState(647) + p.VariableDeclaration() + } + + + case 3: + { + p.SetState(648) + p.Match(SolidityParserT__21) + } + { + p.SetState(649) + p.VariableDeclarationList() + } + { + p.SetState(650) + p.Match(SolidityParserT__22) + } + + } + p.SetState(656) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__8 { + { + p.SetState(654) + p.Match(SolidityParserT__8) + } + { + p.SetState(655) + p.expression(0) + } + + } + { + p.SetState(658) + p.Match(SolidityParserT__1) + } + + + + return localctx +} + + +// IVariableDeclarationListContext is an interface to support dynamic dispatch. +type IVariableDeclarationListContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsVariableDeclarationListContext differentiates from other interfaces. + IsVariableDeclarationListContext() +} + +type VariableDeclarationListContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyVariableDeclarationListContext() *VariableDeclarationListContext { + var p = new(VariableDeclarationListContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_variableDeclarationList + return p +} + +func (*VariableDeclarationListContext) IsVariableDeclarationListContext() {} + +func NewVariableDeclarationListContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *VariableDeclarationListContext { + var p = new(VariableDeclarationListContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_variableDeclarationList + + return p +} + +func (s *VariableDeclarationListContext) GetParser() antlr.Parser { return s.parser } + +func (s *VariableDeclarationListContext) AllVariableDeclaration() []IVariableDeclarationContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IVariableDeclarationContext); ok { + len++ + } + } + + tst := make([]IVariableDeclarationContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IVariableDeclarationContext); ok { + tst[i] = t.(IVariableDeclarationContext) + i++ + } + } + + return tst +} + +func (s *VariableDeclarationListContext) VariableDeclaration(i int) IVariableDeclarationContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IVariableDeclarationContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IVariableDeclarationContext) +} + +func (s *VariableDeclarationListContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *VariableDeclarationListContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *VariableDeclarationListContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterVariableDeclarationList(s) + } +} + +func (s *VariableDeclarationListContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitVariableDeclarationList(s) + } +} + + + + +func (p *SolidityParser) VariableDeclarationList() (localctx IVariableDeclarationListContext) { + this := p + _ = this + + localctx = NewVariableDeclarationListContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 106, SolidityParserRULE_variableDeclarationList) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + p.SetState(661) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || _la == SolidityParserT__28 || ((((_la - 36)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 36))) & ((1 << (SolidityParserT__35 - 36)) | (1 << (SolidityParserT__39 - 36)) | (1 << (SolidityParserT__50 - 36)) | (1 << (SolidityParserT__51 - 36)) | (1 << (SolidityParserT__52 - 36)) | (1 << (SolidityParserT__53 - 36)) | (1 << (SolidityParserT__54 - 36)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserIdentifier - 93)))) != 0) { + { + p.SetState(660) + p.VariableDeclaration() + } + + } + p.SetState(669) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__14 { + { + p.SetState(663) + p.Match(SolidityParserT__14) + } + p.SetState(665) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || _la == SolidityParserT__28 || ((((_la - 36)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 36))) & ((1 << (SolidityParserT__35 - 36)) | (1 << (SolidityParserT__39 - 36)) | (1 << (SolidityParserT__50 - 36)) | (1 << (SolidityParserT__51 - 36)) | (1 << (SolidityParserT__52 - 36)) | (1 << (SolidityParserT__53 - 36)) | (1 << (SolidityParserT__54 - 36)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserIdentifier - 93)))) != 0) { + { + p.SetState(664) + p.VariableDeclaration() + } + + } + + + p.SetState(671) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + + + + return localctx +} + + +// IIdentifierListContext is an interface to support dynamic dispatch. +type IIdentifierListContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsIdentifierListContext differentiates from other interfaces. + IsIdentifierListContext() +} + +type IdentifierListContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyIdentifierListContext() *IdentifierListContext { + var p = new(IdentifierListContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_identifierList + return p +} + +func (*IdentifierListContext) IsIdentifierListContext() {} + +func NewIdentifierListContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *IdentifierListContext { + var p = new(IdentifierListContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_identifierList + + return p +} + +func (s *IdentifierListContext) GetParser() antlr.Parser { return s.parser } + +func (s *IdentifierListContext) AllIdentifier() []IIdentifierContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IIdentifierContext); ok { + len++ + } + } + + tst := make([]IIdentifierContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IIdentifierContext); ok { + tst[i] = t.(IIdentifierContext) + i++ + } + } + + return tst +} + +func (s *IdentifierListContext) Identifier(i int) IIdentifierContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *IdentifierListContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *IdentifierListContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *IdentifierListContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterIdentifierList(s) + } +} + +func (s *IdentifierListContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitIdentifierList(s) + } +} + + + + +func (p *SolidityParser) IdentifierList() (localctx IIdentifierListContext) { + this := p + _ = this + + localctx = NewIdentifierListContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 108, SolidityParserRULE_identifierList) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + var _alt int + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(672) + p.Match(SolidityParserT__21) + } + p.SetState(679) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 75, p.GetParserRuleContext()) + + for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + if _alt == 1 { + p.SetState(674) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || _la == SolidityParserT__39 || _la == SolidityParserT__51 || _la == SolidityParserIdentifier { + { + p.SetState(673) + p.Identifier() + } + + } + { + p.SetState(676) + p.Match(SolidityParserT__14) + } + + + } + p.SetState(681) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 75, p.GetParserRuleContext()) + } + p.SetState(683) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || _la == SolidityParserT__39 || _la == SolidityParserT__51 || _la == SolidityParserIdentifier { + { + p.SetState(682) + p.Identifier() + } + + } + { + p.SetState(685) + p.Match(SolidityParserT__22) + } + + + + return localctx +} + + +// IElementaryTypeNameContext is an interface to support dynamic dispatch. +type IElementaryTypeNameContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsElementaryTypeNameContext differentiates from other interfaces. + IsElementaryTypeNameContext() +} + +type ElementaryTypeNameContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyElementaryTypeNameContext() *ElementaryTypeNameContext { + var p = new(ElementaryTypeNameContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_elementaryTypeName + return p +} + +func (*ElementaryTypeNameContext) IsElementaryTypeNameContext() {} + +func NewElementaryTypeNameContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ElementaryTypeNameContext { + var p = new(ElementaryTypeNameContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_elementaryTypeName + + return p +} + +func (s *ElementaryTypeNameContext) GetParser() antlr.Parser { return s.parser } + +func (s *ElementaryTypeNameContext) PayableKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserPayableKeyword, 0) +} + +func (s *ElementaryTypeNameContext) Int() antlr.TerminalNode { + return s.GetToken(SolidityParserInt, 0) +} + +func (s *ElementaryTypeNameContext) Uint() antlr.TerminalNode { + return s.GetToken(SolidityParserUint, 0) +} + +func (s *ElementaryTypeNameContext) Byte() antlr.TerminalNode { + return s.GetToken(SolidityParserByte, 0) +} + +func (s *ElementaryTypeNameContext) Fixed() antlr.TerminalNode { + return s.GetToken(SolidityParserFixed, 0) +} + +func (s *ElementaryTypeNameContext) Ufixed() antlr.TerminalNode { + return s.GetToken(SolidityParserUfixed, 0) +} + +func (s *ElementaryTypeNameContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ElementaryTypeNameContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ElementaryTypeNameContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterElementaryTypeName(s) + } +} + +func (s *ElementaryTypeNameContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitElementaryTypeName(s) + } +} + + + + +func (p *SolidityParser) ElementaryTypeName() (localctx IElementaryTypeNameContext) { + this := p + _ = this + + localctx = NewElementaryTypeNameContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 110, SolidityParserRULE_elementaryTypeName) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(700) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__51: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(687) + p.Match(SolidityParserT__51) + } + p.SetState(689) + p.GetErrorHandler().Sync(p) + + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 77, p.GetParserRuleContext()) == 1 { + { + p.SetState(688) + p.Match(SolidityParserPayableKeyword) + } + + + } + + + case SolidityParserT__52: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(691) + p.Match(SolidityParserT__52) + } + + + case SolidityParserT__53: + p.EnterOuterAlt(localctx, 3) + { + p.SetState(692) + p.Match(SolidityParserT__53) + } + + + case SolidityParserT__50: + p.EnterOuterAlt(localctx, 4) + { + p.SetState(693) + p.Match(SolidityParserT__50) + } + + + case SolidityParserInt: + p.EnterOuterAlt(localctx, 5) + { + p.SetState(694) + p.Match(SolidityParserInt) + } + + + case SolidityParserUint: + p.EnterOuterAlt(localctx, 6) + { + p.SetState(695) + p.Match(SolidityParserUint) + } + + + case SolidityParserT__54: + p.EnterOuterAlt(localctx, 7) + { + p.SetState(696) + p.Match(SolidityParserT__54) + } + + + case SolidityParserByte: + p.EnterOuterAlt(localctx, 8) + { + p.SetState(697) + p.Match(SolidityParserByte) + } + + + case SolidityParserFixed: + p.EnterOuterAlt(localctx, 9) + { + p.SetState(698) + p.Match(SolidityParserFixed) + } + + + case SolidityParserUfixed: + p.EnterOuterAlt(localctx, 10) + { + p.SetState(699) + p.Match(SolidityParserUfixed) + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + + return localctx +} + + +// IExpressionContext is an interface to support dynamic dispatch. +type IExpressionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsExpressionContext differentiates from other interfaces. + IsExpressionContext() +} + +type ExpressionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyExpressionContext() *ExpressionContext { + var p = new(ExpressionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_expression + return p +} + +func (*ExpressionContext) IsExpressionContext() {} + +func NewExpressionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ExpressionContext { + var p = new(ExpressionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_expression + + return p +} + +func (s *ExpressionContext) GetParser() antlr.Parser { return s.parser } + +func (s *ExpressionContext) TypeName() ITypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ITypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ITypeNameContext) +} + +func (s *ExpressionContext) PayableKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserPayableKeyword, 0) +} + +func (s *ExpressionContext) AllExpression() []IExpressionContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExpressionContext); ok { + len++ + } + } + + tst := make([]IExpressionContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExpressionContext); ok { + tst[i] = t.(IExpressionContext) + i++ + } + } + + return tst +} + +func (s *ExpressionContext) Expression(i int) IExpressionContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *ExpressionContext) PrimaryExpression() IPrimaryExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IPrimaryExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IPrimaryExpressionContext) +} + +func (s *ExpressionContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *ExpressionContext) NameValueList() INameValueListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(INameValueListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(INameValueListContext) +} + +func (s *ExpressionContext) FunctionCallArguments() IFunctionCallArgumentsContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IFunctionCallArgumentsContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IFunctionCallArgumentsContext) +} + +func (s *ExpressionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ExpressionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ExpressionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterExpression(s) + } +} + +func (s *ExpressionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitExpression(s) + } +} + + + + + +func (p *SolidityParser) Expression() (localctx IExpressionContext) { + return p.expression(0) +} + +func (p *SolidityParser) expression(_p int) (localctx IExpressionContext) { + this := p + _ = this + + var _parentctx antlr.ParserRuleContext = p.GetParserRuleContext() + _parentState := p.GetState() + localctx = NewExpressionContext(p, p.GetParserRuleContext(), _parentState) + var _prevctx IExpressionContext = localctx + var _ antlr.ParserRuleContext = _prevctx // TODO: To prevent unused variable warning. + _startState := 112 + p.EnterRecursionRule(localctx, 112, SolidityParserRULE_expression, _p) + var _la int + + + defer func() { + p.UnrollRecursionContexts(_parentctx) + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + var _alt int + + p.EnterOuterAlt(localctx, 1) + p.SetState(725) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 79, p.GetParserRuleContext()) { + case 1: + { + p.SetState(703) + p.Match(SolidityParserT__57) + } + { + p.SetState(704) + p.typeName(0) + } + + + case 2: + { + p.SetState(705) + p.Match(SolidityParserPayableKeyword) + } + { + p.SetState(706) + p.Match(SolidityParserT__21) + } + { + p.SetState(707) + p.expression(0) + } + { + p.SetState(708) + p.Match(SolidityParserT__22) + } + + + case 3: + { + p.SetState(710) + p.Match(SolidityParserT__21) + } + { + p.SetState(711) + p.expression(0) + } + { + p.SetState(712) + p.Match(SolidityParserT__22) + } + + + case 4: + { + p.SetState(714) + _la = p.GetTokenStream().LA(1) + + if !(_la == SolidityParserT__55 || _la == SolidityParserT__56) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + { + p.SetState(715) + p.expression(19) + } + + + case 5: + { + p.SetState(716) + _la = p.GetTokenStream().LA(1) + + if !(_la == SolidityParserT__59 || _la == SolidityParserT__60) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + { + p.SetState(717) + p.expression(18) + } + + + case 6: + { + p.SetState(718) + _la = p.GetTokenStream().LA(1) + + if !(_la == SolidityParserT__61 || _la == SolidityParserT__62) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + { + p.SetState(719) + p.expression(17) + } + + + case 7: + { + p.SetState(720) + p.Match(SolidityParserT__63) + } + { + p.SetState(721) + p.expression(16) + } + + + case 8: + { + p.SetState(722) + p.Match(SolidityParserT__3) + } + { + p.SetState(723) + p.expression(15) + } + + + case 9: + { + p.SetState(724) + p.PrimaryExpression() + } + + } + p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) + p.SetState(802) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 84, p.GetParserRuleContext()) + + for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + if _alt == 1 { + if p.GetParseListeners() != nil { + p.TriggerExitRuleEvent() + } + _prevctx = localctx + p.SetState(800) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 83, p.GetParserRuleContext()) { + case 1: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(727) + + if !(p.Precpred(p.GetParserRuleContext(), 14)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 14)", "")) + } + { + p.SetState(728) + p.Match(SolidityParserT__64) + } + { + p.SetState(729) + p.expression(15) + } + + + case 2: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(730) + + if !(p.Precpred(p.GetParserRuleContext(), 13)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 13)", "")) + } + { + p.SetState(731) + _la = p.GetTokenStream().LA(1) + + if !(_la == SolidityParserT__11 || _la == SolidityParserT__65 || _la == SolidityParserT__66) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + { + p.SetState(732) + p.expression(14) + } + + + case 3: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(733) + + if !(p.Precpred(p.GetParserRuleContext(), 12)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 12)", "")) + } + { + p.SetState(734) + _la = p.GetTokenStream().LA(1) + + if !(_la == SolidityParserT__59 || _la == SolidityParserT__60) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + { + p.SetState(735) + p.expression(13) + } + + + case 4: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(736) + + if !(p.Precpred(p.GetParserRuleContext(), 11)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 11)", "")) + } + { + p.SetState(737) + _la = p.GetTokenStream().LA(1) + + if !(_la == SolidityParserT__67 || _la == SolidityParserT__68) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + { + p.SetState(738) + p.expression(12) + } + + + case 5: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(739) + + if !(p.Precpred(p.GetParserRuleContext(), 10)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 10)", "")) + } + { + p.SetState(740) + p.Match(SolidityParserT__69) + } + { + p.SetState(741) + p.expression(11) + } + + + case 6: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(742) + + if !(p.Precpred(p.GetParserRuleContext(), 9)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 9)", "")) + } + { + p.SetState(743) + p.Match(SolidityParserT__2) + } + { + p.SetState(744) + p.expression(10) + } + + + case 7: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(745) + + if !(p.Precpred(p.GetParserRuleContext(), 8)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 8)", "")) + } + { + p.SetState(746) + p.Match(SolidityParserT__70) + } + { + p.SetState(747) + p.expression(9) + } + + + case 8: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(748) + + if !(p.Precpred(p.GetParserRuleContext(), 7)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 7)", "")) + } + { + p.SetState(749) + _la = p.GetTokenStream().LA(1) + + if !((((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__4) | (1 << SolidityParserT__5) | (1 << SolidityParserT__6) | (1 << SolidityParserT__7))) != 0)) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + { + p.SetState(750) + p.expression(8) + } + + + case 9: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(751) + + if !(p.Precpred(p.GetParserRuleContext(), 6)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 6)", "")) + } + { + p.SetState(752) + _la = p.GetTokenStream().LA(1) + + if !(_la == SolidityParserT__71 || _la == SolidityParserT__72) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + { + p.SetState(753) + p.expression(7) + } + + + case 10: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(754) + + if !(p.Precpred(p.GetParserRuleContext(), 5)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 5)", "")) + } + { + p.SetState(755) + p.Match(SolidityParserT__73) + } + { + p.SetState(756) + p.expression(6) + } + + + case 11: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(757) + + if !(p.Precpred(p.GetParserRuleContext(), 4)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 4)", "")) + } + { + p.SetState(758) + p.Match(SolidityParserT__74) + } + { + p.SetState(759) + p.expression(5) + } + + + case 12: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(760) + + if !(p.Precpred(p.GetParserRuleContext(), 3)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 3)", "")) + } + { + p.SetState(761) + p.Match(SolidityParserT__75) + } + { + p.SetState(762) + p.expression(0) + } + { + p.SetState(763) + p.Match(SolidityParserT__58) + } + { + p.SetState(764) + p.expression(4) + } + + + case 13: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(766) + + if !(p.Precpred(p.GetParserRuleContext(), 2)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 2)", "")) + } + { + p.SetState(767) + _la = p.GetTokenStream().LA(1) + + if !(_la == SolidityParserT__8 || ((((_la - 77)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 77))) & ((1 << (SolidityParserT__76 - 77)) | (1 << (SolidityParserT__77 - 77)) | (1 << (SolidityParserT__78 - 77)) | (1 << (SolidityParserT__79 - 77)) | (1 << (SolidityParserT__80 - 77)) | (1 << (SolidityParserT__81 - 77)) | (1 << (SolidityParserT__82 - 77)) | (1 << (SolidityParserT__83 - 77)) | (1 << (SolidityParserT__84 - 77)) | (1 << (SolidityParserT__85 - 77)))) != 0)) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + { + p.SetState(768) + p.expression(3) + } + + + case 14: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(769) + + if !(p.Precpred(p.GetParserRuleContext(), 28)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 28)", "")) + } + { + p.SetState(770) + _la = p.GetTokenStream().LA(1) + + if !(_la == SolidityParserT__55 || _la == SolidityParserT__56) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + + + case 15: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(771) + + if !(p.Precpred(p.GetParserRuleContext(), 26)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 26)", "")) + } + { + p.SetState(772) + p.Match(SolidityParserT__32) + } + p.SetState(774) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__3) | (1 << SolidityParserT__12) | (1 << SolidityParserT__21))) != 0) || ((((_la - 33)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 33))) & ((1 << (SolidityParserT__32 - 33)) | (1 << (SolidityParserT__39 - 33)) | (1 << (SolidityParserT__50 - 33)) | (1 << (SolidityParserT__51 - 33)) | (1 << (SolidityParserT__52 - 33)) | (1 << (SolidityParserT__53 - 33)) | (1 << (SolidityParserT__54 - 33)) | (1 << (SolidityParserT__55 - 33)) | (1 << (SolidityParserT__56 - 33)) | (1 << (SolidityParserT__57 - 33)) | (1 << (SolidityParserT__59 - 33)) | (1 << (SolidityParserT__60 - 33)) | (1 << (SolidityParserT__61 - 33)) | (1 << (SolidityParserT__62 - 33)) | (1 << (SolidityParserT__63 - 33)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserBooleanLiteral - 93)) | (1 << (SolidityParserDecimalNumber - 93)) | (1 << (SolidityParserHexNumber - 93)) | (1 << (SolidityParserHexLiteralFragment - 93)) | (1 << (SolidityParserPayableKeyword - 93)) | (1 << (SolidityParserTypeKeyword - 93)) | (1 << (SolidityParserIdentifier - 93)) | (1 << (SolidityParserStringLiteralFragment - 93)))) != 0) { + { + p.SetState(773) + p.expression(0) + } + + } + { + p.SetState(776) + p.Match(SolidityParserT__33) + } + + + case 16: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(777) + + if !(p.Precpred(p.GetParserRuleContext(), 25)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 25)", "")) + } + { + p.SetState(778) + p.Match(SolidityParserT__32) + } + p.SetState(780) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__3) | (1 << SolidityParserT__12) | (1 << SolidityParserT__21))) != 0) || ((((_la - 33)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 33))) & ((1 << (SolidityParserT__32 - 33)) | (1 << (SolidityParserT__39 - 33)) | (1 << (SolidityParserT__50 - 33)) | (1 << (SolidityParserT__51 - 33)) | (1 << (SolidityParserT__52 - 33)) | (1 << (SolidityParserT__53 - 33)) | (1 << (SolidityParserT__54 - 33)) | (1 << (SolidityParserT__55 - 33)) | (1 << (SolidityParserT__56 - 33)) | (1 << (SolidityParserT__57 - 33)) | (1 << (SolidityParserT__59 - 33)) | (1 << (SolidityParserT__60 - 33)) | (1 << (SolidityParserT__61 - 33)) | (1 << (SolidityParserT__62 - 33)) | (1 << (SolidityParserT__63 - 33)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserBooleanLiteral - 93)) | (1 << (SolidityParserDecimalNumber - 93)) | (1 << (SolidityParserHexNumber - 93)) | (1 << (SolidityParserHexLiteralFragment - 93)) | (1 << (SolidityParserPayableKeyword - 93)) | (1 << (SolidityParserTypeKeyword - 93)) | (1 << (SolidityParserIdentifier - 93)) | (1 << (SolidityParserStringLiteralFragment - 93)))) != 0) { + { + p.SetState(779) + p.expression(0) + } + + } + { + p.SetState(782) + p.Match(SolidityParserT__58) + } + p.SetState(784) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__3) | (1 << SolidityParserT__12) | (1 << SolidityParserT__21))) != 0) || ((((_la - 33)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 33))) & ((1 << (SolidityParserT__32 - 33)) | (1 << (SolidityParserT__39 - 33)) | (1 << (SolidityParserT__50 - 33)) | (1 << (SolidityParserT__51 - 33)) | (1 << (SolidityParserT__52 - 33)) | (1 << (SolidityParserT__53 - 33)) | (1 << (SolidityParserT__54 - 33)) | (1 << (SolidityParserT__55 - 33)) | (1 << (SolidityParserT__56 - 33)) | (1 << (SolidityParserT__57 - 33)) | (1 << (SolidityParserT__59 - 33)) | (1 << (SolidityParserT__60 - 33)) | (1 << (SolidityParserT__61 - 33)) | (1 << (SolidityParserT__62 - 33)) | (1 << (SolidityParserT__63 - 33)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserBooleanLiteral - 93)) | (1 << (SolidityParserDecimalNumber - 93)) | (1 << (SolidityParserHexNumber - 93)) | (1 << (SolidityParserHexLiteralFragment - 93)) | (1 << (SolidityParserPayableKeyword - 93)) | (1 << (SolidityParserTypeKeyword - 93)) | (1 << (SolidityParserIdentifier - 93)) | (1 << (SolidityParserStringLiteralFragment - 93)))) != 0) { + { + p.SetState(783) + p.expression(0) + } + + } + { + p.SetState(786) + p.Match(SolidityParserT__33) + } + + + case 17: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(787) + + if !(p.Precpred(p.GetParserRuleContext(), 24)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 24)", "")) + } + { + p.SetState(788) + p.Match(SolidityParserT__34) + } + { + p.SetState(789) + p.Identifier() + } + + + case 18: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(790) + + if !(p.Precpred(p.GetParserRuleContext(), 23)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 23)", "")) + } + { + p.SetState(791) + p.Match(SolidityParserT__13) + } + { + p.SetState(792) + p.NameValueList() + } + { + p.SetState(793) + p.Match(SolidityParserT__15) + } + + + case 19: + localctx = NewExpressionContext(p, _parentctx, _parentState) + p.PushNewRecursionContext(localctx, _startState, SolidityParserRULE_expression) + p.SetState(795) + + if !(p.Precpred(p.GetParserRuleContext(), 22)) { + panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 22)", "")) + } + { + p.SetState(796) + p.Match(SolidityParserT__21) + } + { + p.SetState(797) + p.FunctionCallArguments() + } + { + p.SetState(798) + p.Match(SolidityParserT__22) + } + + } + + } + p.SetState(804) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 84, p.GetParserRuleContext()) + } + + + + return localctx +} + + +// IPrimaryExpressionContext is an interface to support dynamic dispatch. +type IPrimaryExpressionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsPrimaryExpressionContext differentiates from other interfaces. + IsPrimaryExpressionContext() +} + +type PrimaryExpressionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyPrimaryExpressionContext() *PrimaryExpressionContext { + var p = new(PrimaryExpressionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_primaryExpression + return p +} + +func (*PrimaryExpressionContext) IsPrimaryExpressionContext() {} + +func NewPrimaryExpressionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *PrimaryExpressionContext { + var p = new(PrimaryExpressionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_primaryExpression + + return p +} + +func (s *PrimaryExpressionContext) GetParser() antlr.Parser { return s.parser } + +func (s *PrimaryExpressionContext) BooleanLiteral() antlr.TerminalNode { + return s.GetToken(SolidityParserBooleanLiteral, 0) +} + +func (s *PrimaryExpressionContext) NumberLiteral() INumberLiteralContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(INumberLiteralContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(INumberLiteralContext) +} + +func (s *PrimaryExpressionContext) HexLiteral() IHexLiteralContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IHexLiteralContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IHexLiteralContext) +} + +func (s *PrimaryExpressionContext) StringLiteral() IStringLiteralContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStringLiteralContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IStringLiteralContext) +} + +func (s *PrimaryExpressionContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *PrimaryExpressionContext) TypeKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserTypeKeyword, 0) +} + +func (s *PrimaryExpressionContext) TupleExpression() ITupleExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ITupleExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ITupleExpressionContext) +} + +func (s *PrimaryExpressionContext) TypeNameExpression() ITypeNameExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ITypeNameExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ITypeNameExpressionContext) +} + +func (s *PrimaryExpressionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *PrimaryExpressionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *PrimaryExpressionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterPrimaryExpression(s) + } +} + +func (s *PrimaryExpressionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitPrimaryExpression(s) + } +} + + + + +func (p *SolidityParser) PrimaryExpression() (localctx IPrimaryExpressionContext) { + this := p + _ = this + + localctx = NewPrimaryExpressionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 114, SolidityParserRULE_primaryExpression) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(821) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 87, p.GetParserRuleContext()) { + case 1: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(805) + p.Match(SolidityParserBooleanLiteral) + } + + + case 2: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(806) + p.NumberLiteral() + } + + + case 3: + p.EnterOuterAlt(localctx, 3) + { + p.SetState(807) + p.HexLiteral() + } + + + case 4: + p.EnterOuterAlt(localctx, 4) + { + p.SetState(808) + p.StringLiteral() + } + + + case 5: + p.EnterOuterAlt(localctx, 5) + { + p.SetState(809) + p.Identifier() + } + p.SetState(812) + p.GetErrorHandler().Sync(p) + + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 85, p.GetParserRuleContext()) == 1 { + { + p.SetState(810) + p.Match(SolidityParserT__32) + } + { + p.SetState(811) + p.Match(SolidityParserT__33) + } + + + } + + + case 6: + p.EnterOuterAlt(localctx, 6) + { + p.SetState(814) + p.Match(SolidityParserTypeKeyword) + } + + + case 7: + p.EnterOuterAlt(localctx, 7) + { + p.SetState(815) + p.TupleExpression() + } + + + case 8: + p.EnterOuterAlt(localctx, 8) + { + p.SetState(816) + p.TypeNameExpression() + } + p.SetState(819) + p.GetErrorHandler().Sync(p) + + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 86, p.GetParserRuleContext()) == 1 { + { + p.SetState(817) + p.Match(SolidityParserT__32) + } + { + p.SetState(818) + p.Match(SolidityParserT__33) + } + + + } + + } + + + return localctx +} + + +// IExpressionListContext is an interface to support dynamic dispatch. +type IExpressionListContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsExpressionListContext differentiates from other interfaces. + IsExpressionListContext() +} + +type ExpressionListContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyExpressionListContext() *ExpressionListContext { + var p = new(ExpressionListContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_expressionList + return p +} + +func (*ExpressionListContext) IsExpressionListContext() {} + +func NewExpressionListContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ExpressionListContext { + var p = new(ExpressionListContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_expressionList + + return p +} + +func (s *ExpressionListContext) GetParser() antlr.Parser { return s.parser } + +func (s *ExpressionListContext) AllExpression() []IExpressionContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExpressionContext); ok { + len++ + } + } + + tst := make([]IExpressionContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExpressionContext); ok { + tst[i] = t.(IExpressionContext) + i++ + } + } + + return tst +} + +func (s *ExpressionListContext) Expression(i int) IExpressionContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *ExpressionListContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ExpressionListContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *ExpressionListContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterExpressionList(s) + } +} + +func (s *ExpressionListContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitExpressionList(s) + } +} + + + + +func (p *SolidityParser) ExpressionList() (localctx IExpressionListContext) { + this := p + _ = this + + localctx = NewExpressionListContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 116, SolidityParserRULE_expressionList) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(823) + p.expression(0) + } + p.SetState(828) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__14 { + { + p.SetState(824) + p.Match(SolidityParserT__14) + } + { + p.SetState(825) + p.expression(0) + } + + + p.SetState(830) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + + + + return localctx +} + + +// INameValueListContext is an interface to support dynamic dispatch. +type INameValueListContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsNameValueListContext differentiates from other interfaces. + IsNameValueListContext() +} + +type NameValueListContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyNameValueListContext() *NameValueListContext { + var p = new(NameValueListContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_nameValueList + return p +} + +func (*NameValueListContext) IsNameValueListContext() {} + +func NewNameValueListContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *NameValueListContext { + var p = new(NameValueListContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_nameValueList + + return p +} + +func (s *NameValueListContext) GetParser() antlr.Parser { return s.parser } + +func (s *NameValueListContext) AllNameValue() []INameValueContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(INameValueContext); ok { + len++ + } + } + + tst := make([]INameValueContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(INameValueContext); ok { + tst[i] = t.(INameValueContext) + i++ + } + } + + return tst +} + +func (s *NameValueListContext) NameValue(i int) INameValueContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(INameValueContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(INameValueContext) +} + +func (s *NameValueListContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *NameValueListContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *NameValueListContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterNameValueList(s) + } +} + +func (s *NameValueListContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitNameValueList(s) + } +} + + + + +func (p *SolidityParser) NameValueList() (localctx INameValueListContext) { + this := p + _ = this + + localctx = NewNameValueListContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 118, SolidityParserRULE_nameValueList) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + var _alt int + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(831) + p.NameValue() + } + p.SetState(836) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 89, p.GetParserRuleContext()) + + for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + if _alt == 1 { + { + p.SetState(832) + p.Match(SolidityParserT__14) + } + { + p.SetState(833) + p.NameValue() + } + + + } + p.SetState(838) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 89, p.GetParserRuleContext()) + } + p.SetState(840) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__14 { + { + p.SetState(839) + p.Match(SolidityParserT__14) + } + + } + + + + return localctx +} + + +// INameValueContext is an interface to support dynamic dispatch. +type INameValueContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsNameValueContext differentiates from other interfaces. + IsNameValueContext() +} + +type NameValueContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyNameValueContext() *NameValueContext { + var p = new(NameValueContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_nameValue + return p +} + +func (*NameValueContext) IsNameValueContext() {} + +func NewNameValueContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *NameValueContext { + var p = new(NameValueContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_nameValue + + return p +} + +func (s *NameValueContext) GetParser() antlr.Parser { return s.parser } + +func (s *NameValueContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *NameValueContext) Expression() IExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *NameValueContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *NameValueContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *NameValueContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterNameValue(s) + } +} + +func (s *NameValueContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitNameValue(s) + } +} + + + + +func (p *SolidityParser) NameValue() (localctx INameValueContext) { + this := p + _ = this + + localctx = NewNameValueContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 120, SolidityParserRULE_nameValue) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(842) + p.Identifier() + } + { + p.SetState(843) + p.Match(SolidityParserT__58) + } + { + p.SetState(844) + p.expression(0) + } + + + + return localctx +} + + +// IFunctionCallArgumentsContext is an interface to support dynamic dispatch. +type IFunctionCallArgumentsContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsFunctionCallArgumentsContext differentiates from other interfaces. + IsFunctionCallArgumentsContext() +} + +type FunctionCallArgumentsContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyFunctionCallArgumentsContext() *FunctionCallArgumentsContext { + var p = new(FunctionCallArgumentsContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_functionCallArguments + return p +} + +func (*FunctionCallArgumentsContext) IsFunctionCallArgumentsContext() {} + +func NewFunctionCallArgumentsContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *FunctionCallArgumentsContext { + var p = new(FunctionCallArgumentsContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_functionCallArguments + + return p +} + +func (s *FunctionCallArgumentsContext) GetParser() antlr.Parser { return s.parser } + +func (s *FunctionCallArgumentsContext) NameValueList() INameValueListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(INameValueListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(INameValueListContext) +} + +func (s *FunctionCallArgumentsContext) ExpressionList() IExpressionListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionListContext) +} + +func (s *FunctionCallArgumentsContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *FunctionCallArgumentsContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *FunctionCallArgumentsContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterFunctionCallArguments(s) + } +} + +func (s *FunctionCallArgumentsContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitFunctionCallArguments(s) + } +} + + + + +func (p *SolidityParser) FunctionCallArguments() (localctx IFunctionCallArgumentsContext) { + this := p + _ = this + + localctx = NewFunctionCallArgumentsContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 122, SolidityParserRULE_functionCallArguments) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(854) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__13: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(846) + p.Match(SolidityParserT__13) + } + p.SetState(848) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || _la == SolidityParserT__39 || _la == SolidityParserT__51 || _la == SolidityParserIdentifier { + { + p.SetState(847) + p.NameValueList() + } + + } + { + p.SetState(850) + p.Match(SolidityParserT__15) + } + + + case SolidityParserT__3, SolidityParserT__12, SolidityParserT__21, SolidityParserT__22, SolidityParserT__32, SolidityParserT__39, SolidityParserT__50, SolidityParserT__51, SolidityParserT__52, SolidityParserT__53, SolidityParserT__54, SolidityParserT__55, SolidityParserT__56, SolidityParserT__57, SolidityParserT__59, SolidityParserT__60, SolidityParserT__61, SolidityParserT__62, SolidityParserT__63, SolidityParserInt, SolidityParserUint, SolidityParserByte, SolidityParserFixed, SolidityParserUfixed, SolidityParserBooleanLiteral, SolidityParserDecimalNumber, SolidityParserHexNumber, SolidityParserHexLiteralFragment, SolidityParserPayableKeyword, SolidityParserTypeKeyword, SolidityParserIdentifier, SolidityParserStringLiteralFragment: + p.EnterOuterAlt(localctx, 2) + p.SetState(852) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__3) | (1 << SolidityParserT__12) | (1 << SolidityParserT__21))) != 0) || ((((_la - 33)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 33))) & ((1 << (SolidityParserT__32 - 33)) | (1 << (SolidityParserT__39 - 33)) | (1 << (SolidityParserT__50 - 33)) | (1 << (SolidityParserT__51 - 33)) | (1 << (SolidityParserT__52 - 33)) | (1 << (SolidityParserT__53 - 33)) | (1 << (SolidityParserT__54 - 33)) | (1 << (SolidityParserT__55 - 33)) | (1 << (SolidityParserT__56 - 33)) | (1 << (SolidityParserT__57 - 33)) | (1 << (SolidityParserT__59 - 33)) | (1 << (SolidityParserT__60 - 33)) | (1 << (SolidityParserT__61 - 33)) | (1 << (SolidityParserT__62 - 33)) | (1 << (SolidityParserT__63 - 33)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserBooleanLiteral - 93)) | (1 << (SolidityParserDecimalNumber - 93)) | (1 << (SolidityParserHexNumber - 93)) | (1 << (SolidityParserHexLiteralFragment - 93)) | (1 << (SolidityParserPayableKeyword - 93)) | (1 << (SolidityParserTypeKeyword - 93)) | (1 << (SolidityParserIdentifier - 93)) | (1 << (SolidityParserStringLiteralFragment - 93)))) != 0) { + { + p.SetState(851) + p.ExpressionList() + } + + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + + return localctx +} + + +// IFunctionCallContext is an interface to support dynamic dispatch. +type IFunctionCallContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsFunctionCallContext differentiates from other interfaces. + IsFunctionCallContext() +} + +type FunctionCallContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyFunctionCallContext() *FunctionCallContext { + var p = new(FunctionCallContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_functionCall + return p +} + +func (*FunctionCallContext) IsFunctionCallContext() {} + +func NewFunctionCallContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *FunctionCallContext { + var p = new(FunctionCallContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_functionCall + + return p +} + +func (s *FunctionCallContext) GetParser() antlr.Parser { return s.parser } + +func (s *FunctionCallContext) Expression() IExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *FunctionCallContext) FunctionCallArguments() IFunctionCallArgumentsContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IFunctionCallArgumentsContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IFunctionCallArgumentsContext) +} + +func (s *FunctionCallContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *FunctionCallContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *FunctionCallContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterFunctionCall(s) + } +} + +func (s *FunctionCallContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitFunctionCall(s) + } +} + + + + +func (p *SolidityParser) FunctionCall() (localctx IFunctionCallContext) { + this := p + _ = this + + localctx = NewFunctionCallContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 124, SolidityParserRULE_functionCall) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(856) + p.expression(0) + } + { + p.SetState(857) + p.Match(SolidityParserT__21) + } + { + p.SetState(858) + p.FunctionCallArguments() + } + { + p.SetState(859) + p.Match(SolidityParserT__22) + } + + + + return localctx +} + + +// ITupleExpressionContext is an interface to support dynamic dispatch. +type ITupleExpressionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsTupleExpressionContext differentiates from other interfaces. + IsTupleExpressionContext() +} + +type TupleExpressionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyTupleExpressionContext() *TupleExpressionContext { + var p = new(TupleExpressionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_tupleExpression + return p +} + +func (*TupleExpressionContext) IsTupleExpressionContext() {} + +func NewTupleExpressionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *TupleExpressionContext { + var p = new(TupleExpressionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_tupleExpression + + return p +} + +func (s *TupleExpressionContext) GetParser() antlr.Parser { return s.parser } + +func (s *TupleExpressionContext) AllExpression() []IExpressionContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IExpressionContext); ok { + len++ + } + } + + tst := make([]IExpressionContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IExpressionContext); ok { + tst[i] = t.(IExpressionContext) + i++ + } + } + + return tst +} + +func (s *TupleExpressionContext) Expression(i int) IExpressionContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *TupleExpressionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *TupleExpressionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *TupleExpressionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterTupleExpression(s) + } +} + +func (s *TupleExpressionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitTupleExpression(s) + } +} + + + + +func (p *SolidityParser) TupleExpression() (localctx ITupleExpressionContext) { + this := p + _ = this + + localctx = NewTupleExpressionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 126, SolidityParserRULE_tupleExpression) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(887) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__21: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(861) + p.Match(SolidityParserT__21) + } + + p.SetState(863) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__3) | (1 << SolidityParserT__12) | (1 << SolidityParserT__21))) != 0) || ((((_la - 33)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 33))) & ((1 << (SolidityParserT__32 - 33)) | (1 << (SolidityParserT__39 - 33)) | (1 << (SolidityParserT__50 - 33)) | (1 << (SolidityParserT__51 - 33)) | (1 << (SolidityParserT__52 - 33)) | (1 << (SolidityParserT__53 - 33)) | (1 << (SolidityParserT__54 - 33)) | (1 << (SolidityParserT__55 - 33)) | (1 << (SolidityParserT__56 - 33)) | (1 << (SolidityParserT__57 - 33)) | (1 << (SolidityParserT__59 - 33)) | (1 << (SolidityParserT__60 - 33)) | (1 << (SolidityParserT__61 - 33)) | (1 << (SolidityParserT__62 - 33)) | (1 << (SolidityParserT__63 - 33)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserBooleanLiteral - 93)) | (1 << (SolidityParserDecimalNumber - 93)) | (1 << (SolidityParserHexNumber - 93)) | (1 << (SolidityParserHexLiteralFragment - 93)) | (1 << (SolidityParserPayableKeyword - 93)) | (1 << (SolidityParserTypeKeyword - 93)) | (1 << (SolidityParserIdentifier - 93)) | (1 << (SolidityParserStringLiteralFragment - 93)))) != 0) { + { + p.SetState(862) + p.expression(0) + } + + } + p.SetState(871) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__14 { + { + p.SetState(865) + p.Match(SolidityParserT__14) + } + p.SetState(867) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__3) | (1 << SolidityParserT__12) | (1 << SolidityParserT__21))) != 0) || ((((_la - 33)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 33))) & ((1 << (SolidityParserT__32 - 33)) | (1 << (SolidityParserT__39 - 33)) | (1 << (SolidityParserT__50 - 33)) | (1 << (SolidityParserT__51 - 33)) | (1 << (SolidityParserT__52 - 33)) | (1 << (SolidityParserT__53 - 33)) | (1 << (SolidityParserT__54 - 33)) | (1 << (SolidityParserT__55 - 33)) | (1 << (SolidityParserT__56 - 33)) | (1 << (SolidityParserT__57 - 33)) | (1 << (SolidityParserT__59 - 33)) | (1 << (SolidityParserT__60 - 33)) | (1 << (SolidityParserT__61 - 33)) | (1 << (SolidityParserT__62 - 33)) | (1 << (SolidityParserT__63 - 33)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserBooleanLiteral - 93)) | (1 << (SolidityParserDecimalNumber - 93)) | (1 << (SolidityParserHexNumber - 93)) | (1 << (SolidityParserHexLiteralFragment - 93)) | (1 << (SolidityParserPayableKeyword - 93)) | (1 << (SolidityParserTypeKeyword - 93)) | (1 << (SolidityParserIdentifier - 93)) | (1 << (SolidityParserStringLiteralFragment - 93)))) != 0) { + { + p.SetState(866) + p.expression(0) + } + + } + + + p.SetState(873) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + + { + p.SetState(874) + p.Match(SolidityParserT__22) + } + + + case SolidityParserT__32: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(875) + p.Match(SolidityParserT__32) + } + p.SetState(884) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__3) | (1 << SolidityParserT__12) | (1 << SolidityParserT__21))) != 0) || ((((_la - 33)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 33))) & ((1 << (SolidityParserT__32 - 33)) | (1 << (SolidityParserT__39 - 33)) | (1 << (SolidityParserT__50 - 33)) | (1 << (SolidityParserT__51 - 33)) | (1 << (SolidityParserT__52 - 33)) | (1 << (SolidityParserT__53 - 33)) | (1 << (SolidityParserT__54 - 33)) | (1 << (SolidityParserT__55 - 33)) | (1 << (SolidityParserT__56 - 33)) | (1 << (SolidityParserT__57 - 33)) | (1 << (SolidityParserT__59 - 33)) | (1 << (SolidityParserT__60 - 33)) | (1 << (SolidityParserT__61 - 33)) | (1 << (SolidityParserT__62 - 33)) | (1 << (SolidityParserT__63 - 33)))) != 0) || ((((_la - 93)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 93))) & ((1 << (SolidityParserInt - 93)) | (1 << (SolidityParserUint - 93)) | (1 << (SolidityParserByte - 93)) | (1 << (SolidityParserFixed - 93)) | (1 << (SolidityParserUfixed - 93)) | (1 << (SolidityParserBooleanLiteral - 93)) | (1 << (SolidityParserDecimalNumber - 93)) | (1 << (SolidityParserHexNumber - 93)) | (1 << (SolidityParserHexLiteralFragment - 93)) | (1 << (SolidityParserPayableKeyword - 93)) | (1 << (SolidityParserTypeKeyword - 93)) | (1 << (SolidityParserIdentifier - 93)) | (1 << (SolidityParserStringLiteralFragment - 93)))) != 0) { + { + p.SetState(876) + p.expression(0) + } + p.SetState(881) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__14 { + { + p.SetState(877) + p.Match(SolidityParserT__14) + } + { + p.SetState(878) + p.expression(0) + } + + + p.SetState(883) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + + } + { + p.SetState(886) + p.Match(SolidityParserT__33) + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + + return localctx +} + + +// ITypeNameExpressionContext is an interface to support dynamic dispatch. +type ITypeNameExpressionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsTypeNameExpressionContext differentiates from other interfaces. + IsTypeNameExpressionContext() +} + +type TypeNameExpressionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyTypeNameExpressionContext() *TypeNameExpressionContext { + var p = new(TypeNameExpressionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_typeNameExpression + return p +} + +func (*TypeNameExpressionContext) IsTypeNameExpressionContext() {} + +func NewTypeNameExpressionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *TypeNameExpressionContext { + var p = new(TypeNameExpressionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_typeNameExpression + + return p +} + +func (s *TypeNameExpressionContext) GetParser() antlr.Parser { return s.parser } + +func (s *TypeNameExpressionContext) ElementaryTypeName() IElementaryTypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IElementaryTypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IElementaryTypeNameContext) +} + +func (s *TypeNameExpressionContext) UserDefinedTypeName() IUserDefinedTypeNameContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IUserDefinedTypeNameContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IUserDefinedTypeNameContext) +} + +func (s *TypeNameExpressionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *TypeNameExpressionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *TypeNameExpressionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterTypeNameExpression(s) + } +} + +func (s *TypeNameExpressionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitTypeNameExpression(s) + } +} + + + + +func (p *SolidityParser) TypeNameExpression() (localctx ITypeNameExpressionContext) { + this := p + _ = this + + localctx = NewTypeNameExpressionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 128, SolidityParserRULE_typeNameExpression) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(891) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 100, p.GetParserRuleContext()) { + case 1: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(889) + p.ElementaryTypeName() + } + + + case 2: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(890) + p.UserDefinedTypeName() + } + + } + + + return localctx +} + + +// IAssemblyItemContext is an interface to support dynamic dispatch. +type IAssemblyItemContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyItemContext differentiates from other interfaces. + IsAssemblyItemContext() +} + +type AssemblyItemContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyItemContext() *AssemblyItemContext { + var p = new(AssemblyItemContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyItem + return p +} + +func (*AssemblyItemContext) IsAssemblyItemContext() {} + +func NewAssemblyItemContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyItemContext { + var p = new(AssemblyItemContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyItem + + return p +} + +func (s *AssemblyItemContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyItemContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *AssemblyItemContext) AssemblyBlock() IAssemblyBlockContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyBlockContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyBlockContext) +} + +func (s *AssemblyItemContext) AssemblyExpression() IAssemblyExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyExpressionContext) +} + +func (s *AssemblyItemContext) AssemblyLocalDefinition() IAssemblyLocalDefinitionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyLocalDefinitionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyLocalDefinitionContext) +} + +func (s *AssemblyItemContext) AssemblyAssignment() IAssemblyAssignmentContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyAssignmentContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyAssignmentContext) +} + +func (s *AssemblyItemContext) AssemblyStackAssignment() IAssemblyStackAssignmentContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyStackAssignmentContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyStackAssignmentContext) +} + +func (s *AssemblyItemContext) LabelDefinition() ILabelDefinitionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ILabelDefinitionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ILabelDefinitionContext) +} + +func (s *AssemblyItemContext) AssemblySwitch() IAssemblySwitchContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblySwitchContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblySwitchContext) +} + +func (s *AssemblyItemContext) AssemblyFunctionDefinition() IAssemblyFunctionDefinitionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyFunctionDefinitionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyFunctionDefinitionContext) +} + +func (s *AssemblyItemContext) AssemblyFor() IAssemblyForContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyForContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyForContext) +} + +func (s *AssemblyItemContext) AssemblyIf() IAssemblyIfContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyIfContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyIfContext) +} + +func (s *AssemblyItemContext) BreakKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserBreakKeyword, 0) +} + +func (s *AssemblyItemContext) ContinueKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserContinueKeyword, 0) +} + +func (s *AssemblyItemContext) LeaveKeyword() antlr.TerminalNode { + return s.GetToken(SolidityParserLeaveKeyword, 0) +} + +func (s *AssemblyItemContext) SubAssembly() ISubAssemblyContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ISubAssemblyContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(ISubAssemblyContext) +} + +func (s *AssemblyItemContext) NumberLiteral() INumberLiteralContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(INumberLiteralContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(INumberLiteralContext) +} + +func (s *AssemblyItemContext) StringLiteral() IStringLiteralContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStringLiteralContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IStringLiteralContext) +} + +func (s *AssemblyItemContext) HexLiteral() IHexLiteralContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IHexLiteralContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IHexLiteralContext) +} + +func (s *AssemblyItemContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyItemContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyItemContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyItem(s) + } +} + +func (s *AssemblyItemContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyItem(s) + } +} + + + + +func (p *SolidityParser) AssemblyItem() (localctx IAssemblyItemContext) { + this := p + _ = this + + localctx = NewAssemblyItemContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 130, SolidityParserRULE_assemblyItem) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(911) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 101, p.GetParserRuleContext()) { + case 1: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(893) + p.Identifier() + } + + + case 2: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(894) + p.AssemblyBlock() + } + + + case 3: + p.EnterOuterAlt(localctx, 3) + { + p.SetState(895) + p.AssemblyExpression() + } + + + case 4: + p.EnterOuterAlt(localctx, 4) + { + p.SetState(896) + p.AssemblyLocalDefinition() + } + + + case 5: + p.EnterOuterAlt(localctx, 5) + { + p.SetState(897) + p.AssemblyAssignment() + } + + + case 6: + p.EnterOuterAlt(localctx, 6) + { + p.SetState(898) + p.AssemblyStackAssignment() + } + + + case 7: + p.EnterOuterAlt(localctx, 7) + { + p.SetState(899) + p.LabelDefinition() + } + + + case 8: + p.EnterOuterAlt(localctx, 8) + { + p.SetState(900) + p.AssemblySwitch() + } + + + case 9: + p.EnterOuterAlt(localctx, 9) + { + p.SetState(901) + p.AssemblyFunctionDefinition() + } + + + case 10: + p.EnterOuterAlt(localctx, 10) + { + p.SetState(902) + p.AssemblyFor() + } + + + case 11: + p.EnterOuterAlt(localctx, 11) + { + p.SetState(903) + p.AssemblyIf() + } + + + case 12: + p.EnterOuterAlt(localctx, 12) + { + p.SetState(904) + p.Match(SolidityParserBreakKeyword) + } + + + case 13: + p.EnterOuterAlt(localctx, 13) + { + p.SetState(905) + p.Match(SolidityParserContinueKeyword) + } + + + case 14: + p.EnterOuterAlt(localctx, 14) + { + p.SetState(906) + p.Match(SolidityParserLeaveKeyword) + } + + + case 15: + p.EnterOuterAlt(localctx, 15) + { + p.SetState(907) + p.SubAssembly() + } + + + case 16: + p.EnterOuterAlt(localctx, 16) + { + p.SetState(908) + p.NumberLiteral() + } + + + case 17: + p.EnterOuterAlt(localctx, 17) + { + p.SetState(909) + p.StringLiteral() + } + + + case 18: + p.EnterOuterAlt(localctx, 18) + { + p.SetState(910) + p.HexLiteral() + } + + } + + + return localctx +} + + +// IAssemblyBlockContext is an interface to support dynamic dispatch. +type IAssemblyBlockContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyBlockContext differentiates from other interfaces. + IsAssemblyBlockContext() +} + +type AssemblyBlockContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyBlockContext() *AssemblyBlockContext { + var p = new(AssemblyBlockContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyBlock + return p +} + +func (*AssemblyBlockContext) IsAssemblyBlockContext() {} + +func NewAssemblyBlockContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyBlockContext { + var p = new(AssemblyBlockContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyBlock + + return p +} + +func (s *AssemblyBlockContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyBlockContext) AllAssemblyItem() []IAssemblyItemContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IAssemblyItemContext); ok { + len++ + } + } + + tst := make([]IAssemblyItemContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IAssemblyItemContext); ok { + tst[i] = t.(IAssemblyItemContext) + i++ + } + } + + return tst +} + +func (s *AssemblyBlockContext) AssemblyItem(i int) IAssemblyItemContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyItemContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyItemContext) +} + +func (s *AssemblyBlockContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyBlockContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyBlockContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyBlock(s) + } +} + +func (s *AssemblyBlockContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyBlock(s) + } +} + + + + +func (p *SolidityParser) AssemblyBlock() (localctx IAssemblyBlockContext) { + this := p + _ = this + + localctx = NewAssemblyBlockContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 132, SolidityParserRULE_assemblyBlock) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(913) + p.Match(SolidityParserT__13) + } + p.SetState(917) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for (((_la) & -(0x1f+1)) == 0 && ((1 << uint(_la)) & ((1 << SolidityParserT__12) | (1 << SolidityParserT__13) | (1 << SolidityParserT__25) | (1 << SolidityParserT__28))) != 0) || ((((_la - 40)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 40))) & ((1 << (SolidityParserT__39 - 40)) | (1 << (SolidityParserT__40 - 40)) | (1 << (SolidityParserT__45 - 40)) | (1 << (SolidityParserT__47 - 40)) | (1 << (SolidityParserT__51 - 40)) | (1 << (SolidityParserT__54 - 40)))) != 0) || ((((_la - 87)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 87))) & ((1 << (SolidityParserT__86 - 87)) | (1 << (SolidityParserT__88 - 87)) | (1 << (SolidityParserT__89 - 87)) | (1 << (SolidityParserBooleanLiteral - 87)) | (1 << (SolidityParserDecimalNumber - 87)) | (1 << (SolidityParserHexNumber - 87)) | (1 << (SolidityParserHexLiteralFragment - 87)) | (1 << (SolidityParserBreakKeyword - 87)) | (1 << (SolidityParserContinueKeyword - 87)) | (1 << (SolidityParserLeaveKeyword - 87)))) != 0) || _la == SolidityParserIdentifier || _la == SolidityParserStringLiteralFragment { + { + p.SetState(914) + p.AssemblyItem() + } + + + p.SetState(919) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + { + p.SetState(920) + p.Match(SolidityParserT__15) + } + + + + return localctx +} + + +// IAssemblyExpressionContext is an interface to support dynamic dispatch. +type IAssemblyExpressionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyExpressionContext differentiates from other interfaces. + IsAssemblyExpressionContext() +} + +type AssemblyExpressionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyExpressionContext() *AssemblyExpressionContext { + var p = new(AssemblyExpressionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyExpression + return p +} + +func (*AssemblyExpressionContext) IsAssemblyExpressionContext() {} + +func NewAssemblyExpressionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyExpressionContext { + var p = new(AssemblyExpressionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyExpression + + return p +} + +func (s *AssemblyExpressionContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyExpressionContext) AssemblyCall() IAssemblyCallContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyCallContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyCallContext) +} + +func (s *AssemblyExpressionContext) AssemblyLiteral() IAssemblyLiteralContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyLiteralContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyLiteralContext) +} + +func (s *AssemblyExpressionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyExpressionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyExpressionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyExpression(s) + } +} + +func (s *AssemblyExpressionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyExpression(s) + } +} + + + + +func (p *SolidityParser) AssemblyExpression() (localctx IAssemblyExpressionContext) { + this := p + _ = this + + localctx = NewAssemblyExpressionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 134, SolidityParserRULE_assemblyExpression) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(924) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__12, SolidityParserT__39, SolidityParserT__47, SolidityParserT__51, SolidityParserT__54, SolidityParserIdentifier: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(922) + p.AssemblyCall() + } + + + case SolidityParserBooleanLiteral, SolidityParserDecimalNumber, SolidityParserHexNumber, SolidityParserHexLiteralFragment, SolidityParserStringLiteralFragment: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(923) + p.AssemblyLiteral() + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + + return localctx +} + + +// IAssemblyCallContext is an interface to support dynamic dispatch. +type IAssemblyCallContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyCallContext differentiates from other interfaces. + IsAssemblyCallContext() +} + +type AssemblyCallContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyCallContext() *AssemblyCallContext { + var p = new(AssemblyCallContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyCall + return p +} + +func (*AssemblyCallContext) IsAssemblyCallContext() {} + +func NewAssemblyCallContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyCallContext { + var p = new(AssemblyCallContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyCall + + return p +} + +func (s *AssemblyCallContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyCallContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *AssemblyCallContext) AllAssemblyExpression() []IAssemblyExpressionContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IAssemblyExpressionContext); ok { + len++ + } + } + + tst := make([]IAssemblyExpressionContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IAssemblyExpressionContext); ok { + tst[i] = t.(IAssemblyExpressionContext) + i++ + } + } + + return tst +} + +func (s *AssemblyCallContext) AssemblyExpression(i int) IAssemblyExpressionContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyExpressionContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyExpressionContext) +} + +func (s *AssemblyCallContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyCallContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyCallContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyCall(s) + } +} + +func (s *AssemblyCallContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyCall(s) + } +} + + + + +func (p *SolidityParser) AssemblyCall() (localctx IAssemblyCallContext) { + this := p + _ = this + + localctx = NewAssemblyCallContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 136, SolidityParserRULE_assemblyCall) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + p.SetState(930) + p.GetErrorHandler().Sync(p) + switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 104, p.GetParserRuleContext()) { + case 1: + { + p.SetState(926) + p.Match(SolidityParserT__47) + } + + + case 2: + { + p.SetState(927) + p.Match(SolidityParserT__51) + } + + + case 3: + { + p.SetState(928) + p.Match(SolidityParserT__54) + } + + + case 4: + { + p.SetState(929) + p.Identifier() + } + + } + p.SetState(944) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__21 { + { + p.SetState(932) + p.Match(SolidityParserT__21) + } + p.SetState(934) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || ((((_la - 40)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 40))) & ((1 << (SolidityParserT__39 - 40)) | (1 << (SolidityParserT__47 - 40)) | (1 << (SolidityParserT__51 - 40)) | (1 << (SolidityParserT__54 - 40)))) != 0) || ((((_la - 98)) & -(0x1f+1)) == 0 && ((1 << uint((_la - 98))) & ((1 << (SolidityParserBooleanLiteral - 98)) | (1 << (SolidityParserDecimalNumber - 98)) | (1 << (SolidityParserHexNumber - 98)) | (1 << (SolidityParserHexLiteralFragment - 98)) | (1 << (SolidityParserIdentifier - 98)) | (1 << (SolidityParserStringLiteralFragment - 98)))) != 0) { + { + p.SetState(933) + p.AssemblyExpression() + } + + } + p.SetState(940) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__14 { + { + p.SetState(936) + p.Match(SolidityParserT__14) + } + { + p.SetState(937) + p.AssemblyExpression() + } + + + p.SetState(942) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + { + p.SetState(943) + p.Match(SolidityParserT__22) + } + + } + + + + return localctx +} + + +// IAssemblyLocalDefinitionContext is an interface to support dynamic dispatch. +type IAssemblyLocalDefinitionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyLocalDefinitionContext differentiates from other interfaces. + IsAssemblyLocalDefinitionContext() +} + +type AssemblyLocalDefinitionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyLocalDefinitionContext() *AssemblyLocalDefinitionContext { + var p = new(AssemblyLocalDefinitionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyLocalDefinition + return p +} + +func (*AssemblyLocalDefinitionContext) IsAssemblyLocalDefinitionContext() {} + +func NewAssemblyLocalDefinitionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyLocalDefinitionContext { + var p = new(AssemblyLocalDefinitionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyLocalDefinition + + return p +} + +func (s *AssemblyLocalDefinitionContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyLocalDefinitionContext) AssemblyIdentifierList() IAssemblyIdentifierListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyIdentifierListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyIdentifierListContext) +} + +func (s *AssemblyLocalDefinitionContext) AssemblyExpression() IAssemblyExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyExpressionContext) +} + +func (s *AssemblyLocalDefinitionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyLocalDefinitionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyLocalDefinitionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyLocalDefinition(s) + } +} + +func (s *AssemblyLocalDefinitionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyLocalDefinition(s) + } +} + + + + +func (p *SolidityParser) AssemblyLocalDefinition() (localctx IAssemblyLocalDefinitionContext) { + this := p + _ = this + + localctx = NewAssemblyLocalDefinitionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 138, SolidityParserRULE_assemblyLocalDefinition) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(946) + p.Match(SolidityParserT__86) + } + { + p.SetState(947) + p.AssemblyIdentifierList() + } + p.SetState(950) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__87 { + { + p.SetState(948) + p.Match(SolidityParserT__87) + } + { + p.SetState(949) + p.AssemblyExpression() + } + + } + + + + return localctx +} + + +// IAssemblyAssignmentContext is an interface to support dynamic dispatch. +type IAssemblyAssignmentContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyAssignmentContext differentiates from other interfaces. + IsAssemblyAssignmentContext() +} + +type AssemblyAssignmentContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyAssignmentContext() *AssemblyAssignmentContext { + var p = new(AssemblyAssignmentContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyAssignment + return p +} + +func (*AssemblyAssignmentContext) IsAssemblyAssignmentContext() {} + +func NewAssemblyAssignmentContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyAssignmentContext { + var p = new(AssemblyAssignmentContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyAssignment + + return p +} + +func (s *AssemblyAssignmentContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyAssignmentContext) AssemblyIdentifierList() IAssemblyIdentifierListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyIdentifierListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyIdentifierListContext) +} + +func (s *AssemblyAssignmentContext) AssemblyExpression() IAssemblyExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyExpressionContext) +} + +func (s *AssemblyAssignmentContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyAssignmentContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyAssignmentContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyAssignment(s) + } +} + +func (s *AssemblyAssignmentContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyAssignment(s) + } +} + + + + +func (p *SolidityParser) AssemblyAssignment() (localctx IAssemblyAssignmentContext) { + this := p + _ = this + + localctx = NewAssemblyAssignmentContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 140, SolidityParserRULE_assemblyAssignment) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(952) + p.AssemblyIdentifierList() + } + { + p.SetState(953) + p.Match(SolidityParserT__87) + } + { + p.SetState(954) + p.AssemblyExpression() + } + + + + return localctx +} + + +// IAssemblyIdentifierListContext is an interface to support dynamic dispatch. +type IAssemblyIdentifierListContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyIdentifierListContext differentiates from other interfaces. + IsAssemblyIdentifierListContext() +} + +type AssemblyIdentifierListContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyIdentifierListContext() *AssemblyIdentifierListContext { + var p = new(AssemblyIdentifierListContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyIdentifierList + return p +} + +func (*AssemblyIdentifierListContext) IsAssemblyIdentifierListContext() {} + +func NewAssemblyIdentifierListContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyIdentifierListContext { + var p = new(AssemblyIdentifierListContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyIdentifierList + + return p +} + +func (s *AssemblyIdentifierListContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyIdentifierListContext) AllIdentifier() []IIdentifierContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IIdentifierContext); ok { + len++ + } + } + + tst := make([]IIdentifierContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IIdentifierContext); ok { + tst[i] = t.(IIdentifierContext) + i++ + } + } + + return tst +} + +func (s *AssemblyIdentifierListContext) Identifier(i int) IIdentifierContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *AssemblyIdentifierListContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyIdentifierListContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyIdentifierListContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyIdentifierList(s) + } +} + +func (s *AssemblyIdentifierListContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyIdentifierList(s) + } +} + + + + +func (p *SolidityParser) AssemblyIdentifierList() (localctx IAssemblyIdentifierListContext) { + this := p + _ = this + + localctx = NewAssemblyIdentifierListContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 142, SolidityParserRULE_assemblyIdentifierList) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(956) + p.Identifier() + } + p.SetState(961) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__14 { + { + p.SetState(957) + p.Match(SolidityParserT__14) + } + { + p.SetState(958) + p.Identifier() + } + + + p.SetState(963) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + + + + return localctx +} + + +// IAssemblyStackAssignmentContext is an interface to support dynamic dispatch. +type IAssemblyStackAssignmentContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyStackAssignmentContext differentiates from other interfaces. + IsAssemblyStackAssignmentContext() +} + +type AssemblyStackAssignmentContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyStackAssignmentContext() *AssemblyStackAssignmentContext { + var p = new(AssemblyStackAssignmentContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyStackAssignment + return p +} + +func (*AssemblyStackAssignmentContext) IsAssemblyStackAssignmentContext() {} + +func NewAssemblyStackAssignmentContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyStackAssignmentContext { + var p = new(AssemblyStackAssignmentContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyStackAssignment + + return p +} + +func (s *AssemblyStackAssignmentContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyStackAssignmentContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *AssemblyStackAssignmentContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyStackAssignmentContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyStackAssignmentContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyStackAssignment(s) + } +} + +func (s *AssemblyStackAssignmentContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyStackAssignment(s) + } +} + + + + +func (p *SolidityParser) AssemblyStackAssignment() (localctx IAssemblyStackAssignmentContext) { + this := p + _ = this + + localctx = NewAssemblyStackAssignmentContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 144, SolidityParserRULE_assemblyStackAssignment) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(964) + p.Match(SolidityParserT__88) + } + { + p.SetState(965) + p.Identifier() + } + + + + return localctx +} + + +// ILabelDefinitionContext is an interface to support dynamic dispatch. +type ILabelDefinitionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsLabelDefinitionContext differentiates from other interfaces. + IsLabelDefinitionContext() +} + +type LabelDefinitionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyLabelDefinitionContext() *LabelDefinitionContext { + var p = new(LabelDefinitionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_labelDefinition + return p +} + +func (*LabelDefinitionContext) IsLabelDefinitionContext() {} + +func NewLabelDefinitionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *LabelDefinitionContext { + var p = new(LabelDefinitionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_labelDefinition + + return p +} + +func (s *LabelDefinitionContext) GetParser() antlr.Parser { return s.parser } + +func (s *LabelDefinitionContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *LabelDefinitionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *LabelDefinitionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *LabelDefinitionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterLabelDefinition(s) + } +} + +func (s *LabelDefinitionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitLabelDefinition(s) + } +} + + + + +func (p *SolidityParser) LabelDefinition() (localctx ILabelDefinitionContext) { + this := p + _ = this + + localctx = NewLabelDefinitionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 146, SolidityParserRULE_labelDefinition) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(967) + p.Identifier() + } + { + p.SetState(968) + p.Match(SolidityParserT__58) + } + + + + return localctx +} + + +// IAssemblySwitchContext is an interface to support dynamic dispatch. +type IAssemblySwitchContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblySwitchContext differentiates from other interfaces. + IsAssemblySwitchContext() +} + +type AssemblySwitchContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblySwitchContext() *AssemblySwitchContext { + var p = new(AssemblySwitchContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblySwitch + return p +} + +func (*AssemblySwitchContext) IsAssemblySwitchContext() {} + +func NewAssemblySwitchContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblySwitchContext { + var p = new(AssemblySwitchContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblySwitch + + return p +} + +func (s *AssemblySwitchContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblySwitchContext) AssemblyExpression() IAssemblyExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyExpressionContext) +} + +func (s *AssemblySwitchContext) AllAssemblyCase() []IAssemblyCaseContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IAssemblyCaseContext); ok { + len++ + } + } + + tst := make([]IAssemblyCaseContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IAssemblyCaseContext); ok { + tst[i] = t.(IAssemblyCaseContext) + i++ + } + } + + return tst +} + +func (s *AssemblySwitchContext) AssemblyCase(i int) IAssemblyCaseContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyCaseContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyCaseContext) +} + +func (s *AssemblySwitchContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblySwitchContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblySwitchContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblySwitch(s) + } +} + +func (s *AssemblySwitchContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblySwitch(s) + } +} + + + + +func (p *SolidityParser) AssemblySwitch() (localctx IAssemblySwitchContext) { + this := p + _ = this + + localctx = NewAssemblySwitchContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 148, SolidityParserRULE_assemblySwitch) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(970) + p.Match(SolidityParserT__89) + } + { + p.SetState(971) + p.AssemblyExpression() + } + p.SetState(975) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + for _la == SolidityParserT__90 || _la == SolidityParserT__91 { + { + p.SetState(972) + p.AssemblyCase() + } + + + p.SetState(977) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + } + + + + return localctx +} + + +// IAssemblyCaseContext is an interface to support dynamic dispatch. +type IAssemblyCaseContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyCaseContext differentiates from other interfaces. + IsAssemblyCaseContext() +} + +type AssemblyCaseContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyCaseContext() *AssemblyCaseContext { + var p = new(AssemblyCaseContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyCase + return p +} + +func (*AssemblyCaseContext) IsAssemblyCaseContext() {} + +func NewAssemblyCaseContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyCaseContext { + var p = new(AssemblyCaseContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyCase + + return p +} + +func (s *AssemblyCaseContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyCaseContext) AssemblyLiteral() IAssemblyLiteralContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyLiteralContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyLiteralContext) +} + +func (s *AssemblyCaseContext) AssemblyBlock() IAssemblyBlockContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyBlockContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyBlockContext) +} + +func (s *AssemblyCaseContext) AssemblyType() IAssemblyTypeContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyTypeContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyTypeContext) +} + +func (s *AssemblyCaseContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyCaseContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyCaseContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyCase(s) + } +} + +func (s *AssemblyCaseContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyCase(s) + } +} + + + + +func (p *SolidityParser) AssemblyCase() (localctx IAssemblyCaseContext) { + this := p + _ = this + + localctx = NewAssemblyCaseContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 150, SolidityParserRULE_assemblyCase) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.SetState(987) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserT__90: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(978) + p.Match(SolidityParserT__90) + } + { + p.SetState(979) + p.AssemblyLiteral() + } + p.SetState(981) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__58 { + { + p.SetState(980) + p.AssemblyType() + } + + } + { + p.SetState(983) + p.AssemblyBlock() + } + + + case SolidityParserT__91: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(985) + p.Match(SolidityParserT__91) + } + { + p.SetState(986) + p.AssemblyBlock() + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + + return localctx +} + + +// IAssemblyFunctionDefinitionContext is an interface to support dynamic dispatch. +type IAssemblyFunctionDefinitionContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyFunctionDefinitionContext differentiates from other interfaces. + IsAssemblyFunctionDefinitionContext() +} + +type AssemblyFunctionDefinitionContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyFunctionDefinitionContext() *AssemblyFunctionDefinitionContext { + var p = new(AssemblyFunctionDefinitionContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyFunctionDefinition + return p +} + +func (*AssemblyFunctionDefinitionContext) IsAssemblyFunctionDefinitionContext() {} + +func NewAssemblyFunctionDefinitionContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyFunctionDefinitionContext { + var p = new(AssemblyFunctionDefinitionContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyFunctionDefinition + + return p +} + +func (s *AssemblyFunctionDefinitionContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyFunctionDefinitionContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *AssemblyFunctionDefinitionContext) AssemblyBlock() IAssemblyBlockContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyBlockContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyBlockContext) +} + +func (s *AssemblyFunctionDefinitionContext) AssemblyTypedVariableList() IAssemblyTypedVariableListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyTypedVariableListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyTypedVariableListContext) +} + +func (s *AssemblyFunctionDefinitionContext) AssemblyFunctionReturns() IAssemblyFunctionReturnsContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyFunctionReturnsContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyFunctionReturnsContext) +} + +func (s *AssemblyFunctionDefinitionContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyFunctionDefinitionContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyFunctionDefinitionContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyFunctionDefinition(s) + } +} + +func (s *AssemblyFunctionDefinitionContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyFunctionDefinition(s) + } +} + + + + +func (p *SolidityParser) AssemblyFunctionDefinition() (localctx IAssemblyFunctionDefinitionContext) { + this := p + _ = this + + localctx = NewAssemblyFunctionDefinitionContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 152, SolidityParserRULE_assemblyFunctionDefinition) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(989) + p.Match(SolidityParserT__28) + } + { + p.SetState(990) + p.Identifier() + } + { + p.SetState(991) + p.Match(SolidityParserT__21) + } + p.SetState(993) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__12 || _la == SolidityParserT__39 || _la == SolidityParserT__51 || _la == SolidityParserIdentifier { + { + p.SetState(992) + p.AssemblyTypedVariableList() + } + + } + { + p.SetState(995) + p.Match(SolidityParserT__22) + } + p.SetState(997) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__60 { + { + p.SetState(996) + p.AssemblyFunctionReturns() + } + + } + { + p.SetState(999) + p.AssemblyBlock() + } + + + + return localctx +} + + +// IAssemblyFunctionReturnsContext is an interface to support dynamic dispatch. +type IAssemblyFunctionReturnsContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyFunctionReturnsContext differentiates from other interfaces. + IsAssemblyFunctionReturnsContext() +} + +type AssemblyFunctionReturnsContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyFunctionReturnsContext() *AssemblyFunctionReturnsContext { + var p = new(AssemblyFunctionReturnsContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyFunctionReturns + return p +} + +func (*AssemblyFunctionReturnsContext) IsAssemblyFunctionReturnsContext() {} + +func NewAssemblyFunctionReturnsContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyFunctionReturnsContext { + var p = new(AssemblyFunctionReturnsContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyFunctionReturns + + return p +} + +func (s *AssemblyFunctionReturnsContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyFunctionReturnsContext) AssemblyTypedVariableList() IAssemblyTypedVariableListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyTypedVariableListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyTypedVariableListContext) +} + +func (s *AssemblyFunctionReturnsContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyFunctionReturnsContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyFunctionReturnsContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyFunctionReturns(s) + } +} + +func (s *AssemblyFunctionReturnsContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyFunctionReturns(s) + } +} + + + + +func (p *SolidityParser) AssemblyFunctionReturns() (localctx IAssemblyFunctionReturnsContext) { + this := p + _ = this + + localctx = NewAssemblyFunctionReturnsContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 154, SolidityParserRULE_assemblyFunctionReturns) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(1001) + p.Match(SolidityParserT__60) + } + { + p.SetState(1002) + p.Match(SolidityParserT__5) + } + { + p.SetState(1003) + p.AssemblyTypedVariableList() + } + + + + + return localctx +} + + +// IAssemblyForContext is an interface to support dynamic dispatch. +type IAssemblyForContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyForContext differentiates from other interfaces. + IsAssemblyForContext() +} + +type AssemblyForContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyForContext() *AssemblyForContext { + var p = new(AssemblyForContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyFor + return p +} + +func (*AssemblyForContext) IsAssemblyForContext() {} + +func NewAssemblyForContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyForContext { + var p = new(AssemblyForContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyFor + + return p +} + +func (s *AssemblyForContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyForContext) AllAssemblyBlock() []IAssemblyBlockContext { + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(IAssemblyBlockContext); ok { + len++ + } + } + + tst := make([]IAssemblyBlockContext, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(IAssemblyBlockContext); ok { + tst[i] = t.(IAssemblyBlockContext) + i++ + } + } + + return tst +} + +func (s *AssemblyForContext) AssemblyBlock(i int) IAssemblyBlockContext { + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyBlockContext); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyBlockContext) +} + +func (s *AssemblyForContext) AssemblyExpression() IAssemblyExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyExpressionContext) +} + +func (s *AssemblyForContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyForContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyForContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyFor(s) + } +} + +func (s *AssemblyForContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyFor(s) + } +} + + + + +func (p *SolidityParser) AssemblyFor() (localctx IAssemblyForContext) { + this := p + _ = this + + localctx = NewAssemblyForContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 156, SolidityParserRULE_assemblyFor) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(1005) + p.Match(SolidityParserT__25) + } + { + p.SetState(1006) + p.AssemblyBlock() + } + { + p.SetState(1007) + p.AssemblyExpression() + } + { + p.SetState(1008) + p.AssemblyBlock() + } + { + p.SetState(1009) + p.AssemblyBlock() + } + + + + return localctx +} + + +// IAssemblyIfContext is an interface to support dynamic dispatch. +type IAssemblyIfContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyIfContext differentiates from other interfaces. + IsAssemblyIfContext() +} + +type AssemblyIfContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyIfContext() *AssemblyIfContext { + var p = new(AssemblyIfContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyIf + return p +} + +func (*AssemblyIfContext) IsAssemblyIfContext() {} + +func NewAssemblyIfContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyIfContext { + var p = new(AssemblyIfContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyIf + + return p +} + +func (s *AssemblyIfContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyIfContext) AssemblyExpression() IAssemblyExpressionContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyExpressionContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyExpressionContext) +} + +func (s *AssemblyIfContext) AssemblyBlock() IAssemblyBlockContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyBlockContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyBlockContext) +} + +func (s *AssemblyIfContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyIfContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyIfContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyIf(s) + } +} + +func (s *AssemblyIfContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyIf(s) + } +} + + + + +func (p *SolidityParser) AssemblyIf() (localctx IAssemblyIfContext) { + this := p + _ = this + + localctx = NewAssemblyIfContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 158, SolidityParserRULE_assemblyIf) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(1011) + p.Match(SolidityParserT__40) + } + { + p.SetState(1012) + p.AssemblyExpression() + } + { + p.SetState(1013) + p.AssemblyBlock() + } + + + + return localctx +} + + +// IAssemblyLiteralContext is an interface to support dynamic dispatch. +type IAssemblyLiteralContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyLiteralContext differentiates from other interfaces. + IsAssemblyLiteralContext() +} + +type AssemblyLiteralContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyLiteralContext() *AssemblyLiteralContext { + var p = new(AssemblyLiteralContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyLiteral + return p +} + +func (*AssemblyLiteralContext) IsAssemblyLiteralContext() {} + +func NewAssemblyLiteralContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyLiteralContext { + var p = new(AssemblyLiteralContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyLiteral + + return p +} + +func (s *AssemblyLiteralContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyLiteralContext) StringLiteral() IStringLiteralContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IStringLiteralContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IStringLiteralContext) +} + +func (s *AssemblyLiteralContext) DecimalNumber() antlr.TerminalNode { + return s.GetToken(SolidityParserDecimalNumber, 0) +} + +func (s *AssemblyLiteralContext) HexNumber() antlr.TerminalNode { + return s.GetToken(SolidityParserHexNumber, 0) +} + +func (s *AssemblyLiteralContext) HexLiteral() IHexLiteralContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IHexLiteralContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IHexLiteralContext) +} + +func (s *AssemblyLiteralContext) BooleanLiteral() antlr.TerminalNode { + return s.GetToken(SolidityParserBooleanLiteral, 0) +} + +func (s *AssemblyLiteralContext) AssemblyType() IAssemblyTypeContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyTypeContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyTypeContext) +} + +func (s *AssemblyLiteralContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyLiteralContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyLiteralContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyLiteral(s) + } +} + +func (s *AssemblyLiteralContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyLiteral(s) + } +} + + + + +func (p *SolidityParser) AssemblyLiteral() (localctx IAssemblyLiteralContext) { + this := p + _ = this + + localctx = NewAssemblyLiteralContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 160, SolidityParserRULE_assemblyLiteral) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + p.SetState(1020) + p.GetErrorHandler().Sync(p) + + switch p.GetTokenStream().LA(1) { + case SolidityParserStringLiteralFragment: + { + p.SetState(1015) + p.StringLiteral() + } + + + case SolidityParserDecimalNumber: + { + p.SetState(1016) + p.Match(SolidityParserDecimalNumber) + } + + + case SolidityParserHexNumber: + { + p.SetState(1017) + p.Match(SolidityParserHexNumber) + } + + + case SolidityParserHexLiteralFragment: + { + p.SetState(1018) + p.HexLiteral() + } + + + case SolidityParserBooleanLiteral: + { + p.SetState(1019) + p.Match(SolidityParserBooleanLiteral) + } + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + p.SetState(1023) + p.GetErrorHandler().Sync(p) + + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 116, p.GetParserRuleContext()) == 1 { + { + p.SetState(1022) + p.AssemblyType() + } + + + } + + + + return localctx +} + + +// IAssemblyTypedVariableListContext is an interface to support dynamic dispatch. +type IAssemblyTypedVariableListContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyTypedVariableListContext differentiates from other interfaces. + IsAssemblyTypedVariableListContext() +} + +type AssemblyTypedVariableListContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyTypedVariableListContext() *AssemblyTypedVariableListContext { + var p = new(AssemblyTypedVariableListContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyTypedVariableList + return p +} + +func (*AssemblyTypedVariableListContext) IsAssemblyTypedVariableListContext() {} + +func NewAssemblyTypedVariableListContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyTypedVariableListContext { + var p = new(AssemblyTypedVariableListContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyTypedVariableList + + return p +} + +func (s *AssemblyTypedVariableListContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyTypedVariableListContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *AssemblyTypedVariableListContext) AssemblyType() IAssemblyTypeContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyTypeContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyTypeContext) +} + +func (s *AssemblyTypedVariableListContext) AssemblyTypedVariableList() IAssemblyTypedVariableListContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyTypedVariableListContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyTypedVariableListContext) +} + +func (s *AssemblyTypedVariableListContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyTypedVariableListContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyTypedVariableListContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyTypedVariableList(s) + } +} + +func (s *AssemblyTypedVariableListContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyTypedVariableList(s) + } +} + + + + +func (p *SolidityParser) AssemblyTypedVariableList() (localctx IAssemblyTypedVariableListContext) { + this := p + _ = this + + localctx = NewAssemblyTypedVariableListContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 162, SolidityParserRULE_assemblyTypedVariableList) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(1025) + p.Identifier() + } + p.SetState(1027) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__58 { + { + p.SetState(1026) + p.AssemblyType() + } + + } + p.SetState(1031) + p.GetErrorHandler().Sync(p) + _la = p.GetTokenStream().LA(1) + + + if _la == SolidityParserT__14 { + { + p.SetState(1029) + p.Match(SolidityParserT__14) + } + { + p.SetState(1030) + p.AssemblyTypedVariableList() + } + + } + + + + return localctx +} + + +// IAssemblyTypeContext is an interface to support dynamic dispatch. +type IAssemblyTypeContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsAssemblyTypeContext differentiates from other interfaces. + IsAssemblyTypeContext() +} + +type AssemblyTypeContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyAssemblyTypeContext() *AssemblyTypeContext { + var p = new(AssemblyTypeContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_assemblyType + return p +} + +func (*AssemblyTypeContext) IsAssemblyTypeContext() {} + +func NewAssemblyTypeContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AssemblyTypeContext { + var p = new(AssemblyTypeContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_assemblyType + + return p +} + +func (s *AssemblyTypeContext) GetParser() antlr.Parser { return s.parser } + +func (s *AssemblyTypeContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *AssemblyTypeContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *AssemblyTypeContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *AssemblyTypeContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterAssemblyType(s) + } +} + +func (s *AssemblyTypeContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitAssemblyType(s) + } +} + + + + +func (p *SolidityParser) AssemblyType() (localctx IAssemblyTypeContext) { + this := p + _ = this + + localctx = NewAssemblyTypeContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 164, SolidityParserRULE_assemblyType) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(1033) + p.Match(SolidityParserT__58) + } + { + p.SetState(1034) + p.Identifier() + } + + + + return localctx +} + + +// ISubAssemblyContext is an interface to support dynamic dispatch. +type ISubAssemblyContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsSubAssemblyContext differentiates from other interfaces. + IsSubAssemblyContext() +} + +type SubAssemblyContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptySubAssemblyContext() *SubAssemblyContext { + var p = new(SubAssemblyContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_subAssembly + return p +} + +func (*SubAssemblyContext) IsSubAssemblyContext() {} + +func NewSubAssemblyContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *SubAssemblyContext { + var p = new(SubAssemblyContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_subAssembly + + return p +} + +func (s *SubAssemblyContext) GetParser() antlr.Parser { return s.parser } + +func (s *SubAssemblyContext) Identifier() IIdentifierContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IIdentifierContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IIdentifierContext) +} + +func (s *SubAssemblyContext) AssemblyBlock() IAssemblyBlockContext { + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IAssemblyBlockContext); ok { + t = ctx.(antlr.RuleContext); + break + } + } + + if t == nil { + return nil + } + + return t.(IAssemblyBlockContext) +} + +func (s *SubAssemblyContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *SubAssemblyContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *SubAssemblyContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterSubAssembly(s) + } +} + +func (s *SubAssemblyContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitSubAssembly(s) + } +} + + + + +func (p *SolidityParser) SubAssembly() (localctx ISubAssemblyContext) { + this := p + _ = this + + localctx = NewSubAssemblyContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 166, SolidityParserRULE_subAssembly) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(1036) + p.Match(SolidityParserT__45) + } + { + p.SetState(1037) + p.Identifier() + } + { + p.SetState(1038) + p.AssemblyBlock() + } + + + + return localctx +} + + +// INumberLiteralContext is an interface to support dynamic dispatch. +type INumberLiteralContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsNumberLiteralContext differentiates from other interfaces. + IsNumberLiteralContext() +} + +type NumberLiteralContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyNumberLiteralContext() *NumberLiteralContext { + var p = new(NumberLiteralContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_numberLiteral + return p +} + +func (*NumberLiteralContext) IsNumberLiteralContext() {} + +func NewNumberLiteralContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *NumberLiteralContext { + var p = new(NumberLiteralContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_numberLiteral + + return p +} + +func (s *NumberLiteralContext) GetParser() antlr.Parser { return s.parser } + +func (s *NumberLiteralContext) DecimalNumber() antlr.TerminalNode { + return s.GetToken(SolidityParserDecimalNumber, 0) +} + +func (s *NumberLiteralContext) HexNumber() antlr.TerminalNode { + return s.GetToken(SolidityParserHexNumber, 0) +} + +func (s *NumberLiteralContext) NumberUnit() antlr.TerminalNode { + return s.GetToken(SolidityParserNumberUnit, 0) +} + +func (s *NumberLiteralContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *NumberLiteralContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *NumberLiteralContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterNumberLiteral(s) + } +} + +func (s *NumberLiteralContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitNumberLiteral(s) + } +} + + + + +func (p *SolidityParser) NumberLiteral() (localctx INumberLiteralContext) { + this := p + _ = this + + localctx = NewNumberLiteralContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 168, SolidityParserRULE_numberLiteral) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(1040) + _la = p.GetTokenStream().LA(1) + + if !(_la == SolidityParserDecimalNumber || _la == SolidityParserHexNumber) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + p.SetState(1042) + p.GetErrorHandler().Sync(p) + + + if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 119, p.GetParserRuleContext()) == 1 { + { + p.SetState(1041) + p.Match(SolidityParserNumberUnit) + } + + + } + + + + return localctx +} + + +// IIdentifierContext is an interface to support dynamic dispatch. +type IIdentifierContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsIdentifierContext differentiates from other interfaces. + IsIdentifierContext() +} + +type IdentifierContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyIdentifierContext() *IdentifierContext { + var p = new(IdentifierContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_identifier + return p +} + +func (*IdentifierContext) IsIdentifierContext() {} + +func NewIdentifierContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *IdentifierContext { + var p = new(IdentifierContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_identifier + + return p +} + +func (s *IdentifierContext) GetParser() antlr.Parser { return s.parser } + +func (s *IdentifierContext) Identifier() antlr.TerminalNode { + return s.GetToken(SolidityParserIdentifier, 0) +} + +func (s *IdentifierContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *IdentifierContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *IdentifierContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterIdentifier(s) + } +} + +func (s *IdentifierContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitIdentifier(s) + } +} + + + + +func (p *SolidityParser) Identifier() (localctx IIdentifierContext) { + this := p + _ = this + + localctx = NewIdentifierContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 170, SolidityParserRULE_identifier) + var _la int + + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + p.EnterOuterAlt(localctx, 1) + { + p.SetState(1044) + _la = p.GetTokenStream().LA(1) + + if !(_la == SolidityParserT__12 || _la == SolidityParserT__39 || _la == SolidityParserT__51 || _la == SolidityParserIdentifier) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + + + + return localctx +} + + +// IHexLiteralContext is an interface to support dynamic dispatch. +type IHexLiteralContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsHexLiteralContext differentiates from other interfaces. + IsHexLiteralContext() +} + +type HexLiteralContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyHexLiteralContext() *HexLiteralContext { + var p = new(HexLiteralContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_hexLiteral + return p +} + +func (*HexLiteralContext) IsHexLiteralContext() {} + +func NewHexLiteralContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *HexLiteralContext { + var p = new(HexLiteralContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_hexLiteral + + return p +} + +func (s *HexLiteralContext) GetParser() antlr.Parser { return s.parser } + +func (s *HexLiteralContext) AllHexLiteralFragment() []antlr.TerminalNode { + return s.GetTokens(SolidityParserHexLiteralFragment) +} + +func (s *HexLiteralContext) HexLiteralFragment(i int) antlr.TerminalNode { + return s.GetToken(SolidityParserHexLiteralFragment, i) +} + +func (s *HexLiteralContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *HexLiteralContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *HexLiteralContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterHexLiteral(s) + } +} + +func (s *HexLiteralContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitHexLiteral(s) + } +} + + + + +func (p *SolidityParser) HexLiteral() (localctx IHexLiteralContext) { + this := p + _ = this + + localctx = NewHexLiteralContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 172, SolidityParserRULE_hexLiteral) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + var _alt int + + p.EnterOuterAlt(localctx, 1) + p.SetState(1047) + p.GetErrorHandler().Sync(p) + _alt = 1 + for ok := true; ok; ok = _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + switch _alt { + case 1: + { + p.SetState(1046) + p.Match(SolidityParserHexLiteralFragment) + } + + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + p.SetState(1049) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 120, p.GetParserRuleContext()) + } + + + + return localctx +} + + +// IStringLiteralContext is an interface to support dynamic dispatch. +type IStringLiteralContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // IsStringLiteralContext differentiates from other interfaces. + IsStringLiteralContext() +} + +type StringLiteralContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyStringLiteralContext() *StringLiteralContext { + var p = new(StringLiteralContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = SolidityParserRULE_stringLiteral + return p +} + +func (*StringLiteralContext) IsStringLiteralContext() {} + +func NewStringLiteralContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *StringLiteralContext { + var p = new(StringLiteralContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = SolidityParserRULE_stringLiteral + + return p +} + +func (s *StringLiteralContext) GetParser() antlr.Parser { return s.parser } + +func (s *StringLiteralContext) AllStringLiteralFragment() []antlr.TerminalNode { + return s.GetTokens(SolidityParserStringLiteralFragment) +} + +func (s *StringLiteralContext) StringLiteralFragment(i int) antlr.TerminalNode { + return s.GetToken(SolidityParserStringLiteralFragment, i) +} + +func (s *StringLiteralContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *StringLiteralContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + + +func (s *StringLiteralContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.EnterStringLiteral(s) + } +} + +func (s *StringLiteralContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(SolidityListener); ok { + listenerT.ExitStringLiteral(s) + } +} + + + + +func (p *SolidityParser) StringLiteral() (localctx IStringLiteralContext) { + this := p + _ = this + + localctx = NewStringLiteralContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 174, SolidityParserRULE_stringLiteral) + + defer func() { + p.ExitRule() + }() + + defer func() { + if err := recover(); err != nil { + if v, ok := err.(antlr.RecognitionException); ok { + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + } else { + panic(err) + } + } + }() + + var _alt int + + p.EnterOuterAlt(localctx, 1) + p.SetState(1052) + p.GetErrorHandler().Sync(p) + _alt = 1 + for ok := true; ok; ok = _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + switch _alt { + case 1: + { + p.SetState(1051) + p.Match(SolidityParserStringLiteralFragment) + } + + + + + default: + panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + } + + p.SetState(1054) + p.GetErrorHandler().Sync(p) + _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 121, p.GetParserRuleContext()) + } + + + + return localctx +} + + +func (p *SolidityParser) Sempred(localctx antlr.RuleContext, ruleIndex, predIndex int) bool { + switch ruleIndex { + case 30: + var t *TypeNameContext = nil + if localctx != nil { t = localctx.(*TypeNameContext) } + return p.TypeName_Sempred(t, predIndex) + + case 56: + var t *ExpressionContext = nil + if localctx != nil { t = localctx.(*ExpressionContext) } + return p.Expression_Sempred(t, predIndex) + + + default: + panic("No predicate with index: " + fmt.Sprint(ruleIndex)) + } +} + +func (p *SolidityParser) TypeName_Sempred(localctx antlr.RuleContext, predIndex int) bool { + this := p + _ = this + + switch predIndex { + case 0: + return p.Precpred(p.GetParserRuleContext(), 2) + + default: + panic("No predicate with index: " + fmt.Sprint(predIndex)) + } +} + +func (p *SolidityParser) Expression_Sempred(localctx antlr.RuleContext, predIndex int) bool { + this := p + _ = this + + switch predIndex { + case 1: + return p.Precpred(p.GetParserRuleContext(), 14) + + case 2: + return p.Precpred(p.GetParserRuleContext(), 13) + + case 3: + return p.Precpred(p.GetParserRuleContext(), 12) + + case 4: + return p.Precpred(p.GetParserRuleContext(), 11) + + case 5: + return p.Precpred(p.GetParserRuleContext(), 10) + + case 6: + return p.Precpred(p.GetParserRuleContext(), 9) + + case 7: + return p.Precpred(p.GetParserRuleContext(), 8) + + case 8: + return p.Precpred(p.GetParserRuleContext(), 7) + + case 9: + return p.Precpred(p.GetParserRuleContext(), 6) + + case 10: + return p.Precpred(p.GetParserRuleContext(), 5) + + case 11: + return p.Precpred(p.GetParserRuleContext(), 4) + + case 12: + return p.Precpred(p.GetParserRuleContext(), 3) + + case 13: + return p.Precpred(p.GetParserRuleContext(), 2) + + case 14: + return p.Precpred(p.GetParserRuleContext(), 28) + + case 15: + return p.Precpred(p.GetParserRuleContext(), 26) + + case 16: + return p.Precpred(p.GetParserRuleContext(), 25) + + case 17: + return p.Precpred(p.GetParserRuleContext(), 24) + + case 18: + return p.Precpred(p.GetParserRuleContext(), 23) + + case 19: + return p.Precpred(p.GetParserRuleContext(), 22) + + default: + panic("No predicate with index: " + fmt.Sprint(predIndex)) + } +} + diff --git a/pragmaDirective.go b/pragmaDirective.go deleted file mode 100644 index 8513331..0000000 --- a/pragmaDirective.go +++ /dev/null @@ -1,44 +0,0 @@ -package solparser - -import ( - "github.com/uji/solparser/ast" - "github.com/uji/solparser/token" -) - -func (p *Parser) ParsePragmaDirective() (*ast.PragmaDirective, error) { - p.lexer.Scan() - if tkn := p.lexer.Token(); tkn.TokenType != token.Pragma { - return nil, newError(tkn.Pos, "not found pragma") - } - - p.lexer.Scan() - pragmaName := p.lexer.Token() - if pragmaName.TokenType != token.Unknown { - return nil, newError(pragmaName.Pos, "not found pragma name") - } - - p.lexer.Scan() - expression := p.lexer.Token() - if expression.TokenType != token.Hat { - return nil, newError(expression.Pos, "not found Hat expression") - } - - p.lexer.Scan() - version := p.lexer.Token() - if version.TokenType != token.Unknown { - return nil, newError(version.Pos, "not found version") - } - - p.lexer.Scan() - if tkn := p.lexer.Token(); tkn.TokenType != token.Semicolon { - return nil, newError(tkn.Pos, "not found Semicolon") - } - - return &ast.PragmaDirective{ - PragmaName: pragmaName.Text, - PragmaValue: ast.PragmaValue{ - Version: version.Text, - Expression: expression.Text, - }, - }, nil -} diff --git a/pragmaDirective_test.go b/pragmaDirective_test.go deleted file mode 100644 index 84e1352..0000000 --- a/pragmaDirective_test.go +++ /dev/null @@ -1,102 +0,0 @@ -package solparser_test - -import ( - "errors" - "strings" - "testing" - - "github.com/google/go-cmp/cmp" - "github.com/uji/solparser" - "github.com/uji/solparser/ast" - "github.com/uji/solparser/token" -) - -func TestParserParsePragmaDirective(t *testing.T) { - tests := []struct { - name string - input string - want *ast.PragmaDirective - err *solparser.Error - }{ - { - name: "normal case", - input: "pragma solidity ^0.8.13;", - want: &ast.PragmaDirective{ - PragmaName: "solidity", - PragmaValue: ast.PragmaValue{ - Version: "0.8.13", - Expression: "^", - }, - }, - err: nil, - }, - { - name: "there is no pragma keyword", - input: "solidity ^0.8.13;", - want: nil, - err: &solparser.Error{ - Pos: token.Position{ - Column: 1, - Line: 1, - }, - Msg: "not found pragma", - }, - }, - { - name: "there is no pragma name", - input: "pragma ^0.8.13;", - want: nil, - err: &solparser.Error{ - Pos: token.Position{ - Column: 8, - Line: 1, - }, - Msg: "not found pragma name", - }, - }, - { - name: "there is no Hat expression", - input: "pragma solidity 0.8.13;", - want: nil, - err: &solparser.Error{ - Pos: token.Position{ - Column: 17, - Line: 1, - }, - Msg: "not found Hat expression", - }, - }, - { - name: "there is no Semicolon", - input: "pragma solidity ^0.8.13", - want: nil, - err: &solparser.Error{ - Pos: token.Position{ - Column: 18, - Line: 1, - }, - Msg: "not found Semicolon", - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(*testing.T) { - r := strings.NewReader(tt.input) - p := solparser.New(r) - - got, err := p.ParsePragmaDirective() - - var sErr *solparser.Error - if errors.As(err, &sErr) { - if diff := cmp.Diff(tt.err, sErr); diff != "" { - t.Errorf("%s", diff) - } - } - - if diff := cmp.Diff(tt.want, got); diff != "" { - t.Errorf("%s", diff) - } - }) - } -} diff --git a/solparser.go b/solparser.go deleted file mode 100644 index 674a135..0000000 --- a/solparser.go +++ /dev/null @@ -1,81 +0,0 @@ -package solparser - -import ( - "io" - - "github.com/uji/solparser/ast" - "github.com/uji/solparser/lexer" - "github.com/uji/solparser/token" -) - -type Parser struct { - input io.Reader - lexer *lexer.Lexer -} - -func New(input io.Reader) *Parser { - return &Parser{ - input: input, - lexer: lexer.New(input), - } -} - -func (p *Parser) Parse(input io.Reader) (*ast.SourceUnit, error) { - if !p.lexer.Peek() { - return nil, nil - } - - if err := p.lexer.PeekError(); err != nil { - return nil, err - } - - var pragmaDirective *ast.PragmaDirective - var contractDefinition *ast.ContractDefinition - var functionDefinition *ast.FunctionDefinition - - switch p.lexer.PeekToken().TokenType { - case token.Pragma: - prgm, err := p.ParsePragmaDirective() - if err != nil { - return nil, err - } - pragmaDirective = prgm - case token.Abstract, token.Contract: - cntrct, err := p.ParseContractDefinition() - if err != nil { - return nil, err - } - contractDefinition = cntrct - case token.Function: - fnc, err := p.ParseFunctionDefinition() - if err != nil { - return nil, err - } - functionDefinition = fnc - } - - return &ast.SourceUnit{ - PragmaDirective: pragmaDirective, - ContractDefinition: contractDefinition, - FunctionDefinition: functionDefinition, - }, nil -} - -func (p *Parser) ParseBooleanLiteral() (*ast.BooleanLiteral, error) { - if !p.lexer.Scan() { - return nil, nil - } - - if err := p.lexer.Error(); err != nil { - return nil, err - } - - tkn := p.lexer.Token() - if tkn.TokenType != token.True && tkn.TokenType != token.False { - return nil, newError(tkn.Pos, "not found keyword true or false") - } - - return &ast.BooleanLiteral{ - Tkn: p.lexer.Token(), - }, nil -} diff --git a/solparser_test.go b/solparser_test.go deleted file mode 100644 index 8e7a82a..0000000 --- a/solparser_test.go +++ /dev/null @@ -1,84 +0,0 @@ -package solparser_test - -import ( - "errors" - "strings" - "testing" - - "github.com/google/go-cmp/cmp" - "github.com/uji/solparser" - "github.com/uji/solparser/ast" - "github.com/uji/solparser/token" -) - -func TestParserParseBooleanLiteral(t *testing.T) { - tests := []struct { - name string - input string - want *ast.BooleanLiteral - err *solparser.Error - }{ - { - name: "true case", - input: "true", - want: &ast.BooleanLiteral{ - Tkn: token.Token{ - TokenType: token.True, - Text: "true", - Pos: token.Position{ - Column: 1, - Line: 1, - }, - }, - }, - err: nil, - }, - { - name: "false case", - input: "false", - want: &ast.BooleanLiteral{ - Tkn: token.Token{ - TokenType: token.False, - Text: "false", - Pos: token.Position{ - Column: 1, - Line: 1, - }, - }, - }, - err: nil, - }, - { - name: "not true or false", - input: "solidity", - want: nil, - err: &solparser.Error{ - Pos: token.Position{ - Column: 1, - Line: 1, - }, - Msg: "not found keyword true or false", - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(*testing.T) { - r := strings.NewReader(tt.input) - p := solparser.New(r) - - got, err := p.ParseBooleanLiteral() - - var sErr *solparser.Error - if errors.As(err, &sErr) { - if diff := cmp.Diff(tt.err, sErr); diff != "" { - t.Errorf("%s", diff) - } - } - - if diff := cmp.Diff(tt.want, got); diff != "" { - t.Errorf("%s", diff) - } - }) - } -} diff --git a/token/token.go b/token/token.go deleted file mode 100644 index a574a96..0000000 --- a/token/token.go +++ /dev/null @@ -1,367 +0,0 @@ -package token - -import "fmt" - -type TokenType int - -const ( - Invalid TokenType = iota - Unknown - - Hat - Tilde - Greater - Less - Equal - Colon - ParenL - ParenR - BraceL - BraceR - Semicolon - - // Reserved Keyword - After - Alias - Apply - Auto - Byte - Case - Copyof - Default - Define - Final - Implements - In - Inline - Let - Macro - Match - Mutable - Null - Of - Partial - Promise - Reference - Relocatable - Sealed - Sizeof - Static - Supports - Switch - Typedef - Typeof - Var - - // Keyword - Abstract - Address - Anonymous - As - Assembly - Bool - Break - Bytes - Calldata - Catch - Constant - Constructor - Continue - Contract - Delete - Do - Else - Emit - Enum - Error - Event - External - Fallback - False - Fixed - For - From - Function - Global - Hex - If - Immutable - Import - Indexed - Interface - Internal - Is - Library - Mapping - Memory - Modifier - NewKeyword - Override - Payable - Pragma - Private - Public - Pure - Receive - Return - Returns - Revert - Storage - String - Struct - True - Try - Type - Using - View - Virtual - While -) - -func asKeyword(str string) TokenType { - switch str { - case "^": - return Hat - case "~": - return Tilde - case "<": - return Less - case ">": - return Greater - case "=": - return Equal - case ":": - return Colon - case ";": - return Semicolon - case "(": - return ParenL - case ")": - return ParenR - case "{": - return BraceL - case "}": - return BraceR - case "after": - return After - case "alias": - return Alias - case "apply": - return Apply - case "auto": - return Auto - case "byte": - return Byte - case "case": - return Case - case "copyof": - return Copyof - case "default": - return Default - case "define": - return Define - case "final": - return Final - case "implements": - return Implements - case "in": - return In - case "inline": - return Inline - case "let": - return Let - case "macro": - return Macro - case "match": - return Match - case "mutable": - return Mutable - case "null": - return Null - case "of": - return Of - case "partial": - return Partial - case "promise": - return Promise - case "reference": - return Reference - case "relocatable": - return Relocatable - case "sealed": - return Sealed - case "sizeof": - return Sizeof - case "static": - return Static - case "supports": - return Supports - case "switch": - return Switch - case "typedef": - return Typedef - case "typeof": - return Typeof - case "var": - return Var - case "abstract": - return Abstract - case "address": - return Address - case "anonymous": - return Anonymous - case "as": - return As - case "assembly": - return Assembly - case "bool": - return Bool - case "break": - return Break - case "bytes": - return Bytes - case "calldata": - return Calldata - case "catch": - return Catch - case "constant": - return Constant - case "constructor": - return Constructor - case "continue": - return Continue - case "contract": - return Contract - case "delete": - return Delete - case "do": - return Do - case "else": - return Else - case "emit": - return Emit - case "enum": - return Enum - case "error": - return Error - case "event": - return Event - case "external": - return External - case "fallback": - return Fallback - case "false": - return False - case "fixed": - return Fixed - case "for": - return For - case "from": - return From - case "function": - return Function - case "global": - return Global - case "hex": - return Hex - case "if": - return If - case "immutable": - return Immutable - case "import": - return Import - case "indexed": - return Indexed - case "interface": - return Interface - case "internal": - return Internal - case "is": - return Is - case "library": - return Library - case "mapping": - return Mapping - case "memory": - return Memory - case "modifier": - return Modifier - case "newKeyword": - return NewKeyword - case "override": - return Override - case "payable": - return Payable - case "pragma": - return Pragma - case "private": - return Private - case "public": - return Public - case "pure": - return Pure - case "receive": - return Receive - case "return": - return Return - case "returns": - return Returns - case "revert": - return Revert - case "storage": - return Storage - case "string": - return String - case "struct": - return Struct - case "true": - return True - case "try": - return Try - case "type": - return Type - case "using": - return Using - case "view": - return View - case "virtual": - return Virtual - case "while": - return While - } - - return Unknown -} - -func asToken(str string) TokenType { - return asKeyword(str) -} - -type Token struct { - TokenType TokenType - Text string - Pos Position -} - -func NewToken(ch string, pos Position) Token { - return Token{ - TokenType: asToken(ch), - Text: ch, - Pos: pos, - } -} - -type Position struct { - Column int - Line int -} - -func (pos Position) IsValid() bool { return pos.Line > 0 && pos.Column > 0 } - -func (pos Position) String() string { - if !pos.IsValid() { - return "-" - } - - return fmt.Sprintf("%d:%d", pos.Line, pos.Column) -} diff --git a/token/token_test.go b/token/token_test.go deleted file mode 100644 index f3916e8..0000000 --- a/token/token_test.go +++ /dev/null @@ -1,24 +0,0 @@ -package token_test - -import ( - "testing" - - "github.com/uji/solparser/token" -) - -func TestPosition_String(t *testing.T) { - cases := []struct { - pos token.Position - want string - }{ - {token.Position{Column: 3, Line: 10}, "10:3"}, - {token.Position{Column: 0, Line: 10}, "-"}, - {token.Position{Column: 1, Line: 0}, "-"}, - } - - for n, c := range cases { - if got := c.pos.String(); got != c.want { - t.Errorf("#%d: got: %s, want: %s", n, got, c.want) - } - } -}