From 3efe51d7989cabdfba8badafdd05933aae448953 Mon Sep 17 00:00:00 2001 From: TristonianJones Date: Wed, 5 Apr 2023 18:03:19 -0700 Subject: [PATCH 1/7] Add help and compile options to the repl --- repl/commands.go | 44 +- repl/commands_test.go | 11 + repl/evaluator.go | 30 +- repl/main/main.go | 10 +- repl/parser/Commands.g4 | 8 +- repl/parser/Commands.interp | 10 +- repl/parser/Commands.tokens | 154 +-- repl/parser/CommandsLexer.interp | 11 +- repl/parser/CommandsLexer.tokens | 154 +-- repl/parser/commands_base_listener.go | 12 + repl/parser/commands_base_visitor.go | 8 + repl/parser/commands_lexer.go | 550 ++++----- repl/parser/commands_listener.go | 12 + repl/parser/commands_parser.go | 1497 +++++++++++++++---------- repl/parser/commands_visitor.go | 6 + 15 files changed, 1485 insertions(+), 1032 deletions(-) diff --git a/repl/commands.go b/repl/commands.go index e98f51d1..ac89e10c 100644 --- a/repl/commands.go +++ b/repl/commands.go @@ -26,17 +26,22 @@ import ( exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" ) -var letUsage = `Let introduces a variable or function defined by a sub-CEL expression. +var ( + letUsage = `Let introduces a variable or function defined by a sub-CEL expression. %let (: )? = %let ( : , ...) : -> ` -var declareUsage = `Declare introduces a variable or function for type checking, but doesn't define a value for it. + declareUsage = `Declare introduces a variable or function for type checking, but doesn't define a value for it. %declare : -%declare ( : , ...) : -` -var deleteUsage = `Delete removes a variable or function declaration from the evaluation context. +%declare ( : , ...) : ` + + deleteUsage = `Delete removes a variable or function declaration from the evaluation context. %delete ` + compileUsage = `Compile emits a textproto representation of the compiled expression. +%compile ` +) + type letVarCmd struct { identifier string typeHint *exprpb.Type @@ -59,6 +64,10 @@ type simpleCmd struct { args []string } +type compileCmd struct { + expr string +} + type evalCmd struct { expr string } @@ -93,6 +102,10 @@ func (c *simpleCmd) Cmd() string { return c.cmd } +func (c *compileCmd) Cmd() string { + return "compile" +} + func (c *evalCmd) Cmd() string { return "eval" } @@ -150,9 +163,16 @@ func Parse(line string) (Cmder, error) { if listener.usage != "" { errFmt = append(errFmt, "", "Usage:", listener.usage) } - return nil, errors.New(strings.Join(errFmt, "\n")) + return nil, fmt.Errorf("invalid command: %v", strings.Join(errFmt, "\n")) + } + if listener.cmd.Cmd() == "help" { + return nil, errors.New(strings.Join([]string{ + compileUsage, + declareUsage, + deleteUsage, + letUsage, + }, "\n\n")) } - return listener.cmd, nil } @@ -183,6 +203,10 @@ func (c *commandParseListener) EnterSimple(ctx *parser.SimpleContext) { c.cmd = &simpleCmd{cmd: cmd, args: args} } +func (c *commandParseListener) EnterHelp(ctx *parser.HelpContext) { + c.cmd = &simpleCmd{cmd: "help"} +} + func (c *commandParseListener) EnterEmpty(ctx *parser.EmptyContext) { c.cmd = &simpleCmd{cmd: "null"} } @@ -231,6 +255,10 @@ func (c *commandParseListener) EnterDelete(ctx *parser.DeleteContext) { c.cmd = &delCmd{} } +func (c *commandParseListener) EnterCompile(ctx *parser.CompileContext) { + c.cmd = &compileCmd{} +} + func (c *commandParseListener) EnterExprCmd(ctx *parser.ExprCmdContext) { c.cmd = &evalCmd{} } @@ -314,6 +342,8 @@ func (c *commandParseListener) ExitVarDecl(ctx *parser.VarDeclContext) { func (c *commandParseListener) ExitExpr(ctx *parser.ExprContext) { expr := extractSourceText(ctx) switch cmd := c.cmd.(type) { + case *compileCmd: + cmd.expr = expr case *evalCmd: cmd.expr = expr case *letFnCmd: diff --git a/repl/commands_test.go b/repl/commands_test.go index ffd9d1a9..444a1021 100644 --- a/repl/commands_test.go +++ b/repl/commands_test.go @@ -33,6 +33,9 @@ func cmdMatches(t testing.TB, got Cmder, expected Cmder) (result bool) { }() switch want := expected.(type) { + case *compileCmd: + gotCompile := got.(*compileCmd) + return gotCompile.expr == want.expr case *evalCmd: gotEval := got.(*evalCmd) return gotEval.expr == want.expr @@ -136,6 +139,10 @@ func TestParse(t *testing.T) { src: "1", }, }, + { + commandLine: `%compile x + 2`, + wantCmd: &compileCmd{expr: "x + 2"}, + }, { commandLine: `%eval x + 2`, wantCmd: &evalCmd{expr: "x + 2"}, @@ -148,6 +155,10 @@ func TestParse(t *testing.T) { commandLine: `%exit`, wantCmd: &simpleCmd{cmd: "exit"}, }, + { + commandLine: `%help`, + wantCmd: &simpleCmd{cmd: "help"}, + }, { commandLine: `%arbitrary --flag -FLAG 'string literal\n'`, wantCmd: &simpleCmd{cmd: "arbitrary", diff --git a/repl/evaluator.go b/repl/evaluator.go index 98907bf1..987875a3 100644 --- a/repl/evaluator.go +++ b/repl/evaluator.go @@ -431,7 +431,7 @@ type Evaluator struct { // NewEvaluator returns an inialized evaluator func NewEvaluator() (*Evaluator, error) { - env, err := cel.NewEnv() + env, err := cel.NewEnv(cel.EnableMacroCallTracking()) if err != nil { return nil, err } @@ -847,8 +847,19 @@ func (e *Evaluator) loadDescriptors(args []string) error { return e.AddOption(&typeOption{path: p, fds: fds}) } +// Process processes the command provided. func (e *Evaluator) Process(cmd Cmder) (string, bool, error) { switch cmd := cmd.(type) { + case *compileCmd: + ast, err := e.Compile(cmd.expr) + if err != nil { + return "", false, fmt.Errorf("compile failed:\n%v", err) + } + cAST, err := cel.AstToCheckedExpr(ast) + if err != nil { + return "", false, fmt.Errorf("compile failed:\n%v", err) + } + return prototext.Format(cAST), false, nil case *evalCmd: val, resultT, err := e.Evaluate(cmd.expr) if err != nil { @@ -916,7 +927,7 @@ func (e *Evaluator) Process(cmd Cmder) (string, bool, error) { return "", false, nil } -// Evaluate sets up a CEL evaluation using the current evaluation context. +// Evaluate sets up a CEL evaluation using the current REPL context. func (e *Evaluator) Evaluate(expr string) (ref.Val, *exprpb.Type, error) { env, act, err := e.applyContext() if err != nil { @@ -924,7 +935,7 @@ func (e *Evaluator) Evaluate(expr string) (ref.Val, *exprpb.Type, error) { } ast, iss := env.Compile(expr) - if iss != nil { + if iss.Err() != nil { return nil, nil, iss.Err() } @@ -937,3 +948,16 @@ func (e *Evaluator) Evaluate(expr string) (ref.Val, *exprpb.Type, error) { // expression can be well-formed and result in an error return val, ast.ResultType(), err } + +// Compile compiles the input expression using the current REPL context. +func (e *Evaluator) Compile(expr string) (*cel.Ast, error) { + env, _, err := e.applyContext() + if err != nil { + return nil, err + } + ast, iss := env.Compile(expr) + if iss.Err() != nil { + return nil, iss.Err() + } + return ast, nil +} diff --git a/repl/main/main.go b/repl/main/main.go index 4ad73743..f10802b2 100644 --- a/repl/main/main.go +++ b/repl/main/main.go @@ -28,9 +28,11 @@ // cel-repl> %let y = {'a': x, 'b': y} // Adding let failed: // Error updating y = {'a': x, 'b': y} -// ERROR: :1:15: undeclared reference to 'y' (in container '') -// | {'a': x, 'b': y} -// | ..............^ +// ERROR: :1:15: undeclared reference to 'y' (in container ”) +// +// | {'a': x, 'b': y} +// | ..............^ +// // cel-repl> %let z = 41 // cel-repl> %let y = {'a': x, 'b': z} // cel-repl> y.map(key, y[key]).filter(x, x > 41) @@ -84,7 +86,7 @@ PromptLoop: cmd, err := repl.Parse(line) if err != nil { - fmt.Fprintf(os.Stderr, "invalid command: %v\n", err) + fmt.Fprintf(os.Stderr, "%v\n", err) continue } status, exit, err := eval.Process(cmd) diff --git a/repl/parser/Commands.g4 b/repl/parser/Commands.g4 index 17c391ff..61a18493 100644 --- a/repl/parser/Commands.g4 +++ b/repl/parser/Commands.g4 @@ -19,13 +19,17 @@ import CEL; // parser rules: startCommand: command EOF; -command: let | +command: help | + let | declare | delete | simple | + compile | exprCmd | empty; +help: '%help' | '%?'; + let: '%let' ( (var=varDecl '=') | (fn=fnDecl '->') ) e=expr; declare: '%declare' (var=varDecl | fn=fnDecl); @@ -42,6 +46,8 @@ simple: cmd=COMMAND (args+=FLAG | args+=STRING)*; empty: ; +compile: '%compile' e=expr; + exprCmd: '%eval'? e=expr; qualId: leadingDot='.'? rid=IDENTIFIER ('.' qualifiers+=IDENTIFIER)*; diff --git a/repl/parser/Commands.interp b/repl/parser/Commands.interp index b7854a96..7cc01039 100644 --- a/repl/parser/Commands.interp +++ b/repl/parser/Commands.interp @@ -1,8 +1,11 @@ token literal names: null +'%help' +'%?' '%let' '%declare' '%delete' +'%compile' '%eval' null null @@ -51,6 +54,9 @@ null null null null +null +null +null COMMAND FLAG ARROW @@ -95,6 +101,7 @@ IDENTIFIER rule names: startCommand command +help let declare varDecl @@ -103,6 +110,7 @@ param delete simple empty +compile exprCmd qualId startType @@ -128,4 +136,4 @@ literal atn: -[4, 1, 44, 395, 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, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 74, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 83, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 3, 3, 90, 8, 3, 1, 4, 1, 4, 1, 4, 3, 4, 95, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 102, 8, 5, 10, 5, 12, 5, 105, 9, 5, 3, 5, 107, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 3, 7, 120, 8, 7, 1, 8, 1, 8, 1, 8, 5, 8, 125, 8, 8, 10, 8, 12, 8, 128, 9, 8, 1, 9, 1, 9, 1, 10, 3, 10, 133, 8, 10, 1, 10, 1, 10, 1, 11, 3, 11, 138, 8, 11, 1, 11, 1, 11, 1, 11, 5, 11, 143, 8, 11, 10, 11, 12, 11, 146, 9, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 153, 8, 13, 1, 14, 3, 14, 156, 8, 14, 1, 14, 1, 14, 1, 14, 5, 14, 161, 8, 14, 10, 14, 12, 14, 164, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 170, 8, 15, 10, 15, 12, 15, 173, 9, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 186, 8, 17, 1, 18, 1, 18, 1, 18, 5, 18, 191, 8, 18, 10, 18, 12, 18, 194, 9, 18, 1, 19, 1, 19, 1, 19, 5, 19, 199, 8, 19, 10, 19, 12, 19, 202, 9, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 210, 8, 20, 10, 20, 12, 20, 213, 9, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 224, 8, 21, 10, 21, 12, 21, 227, 9, 21, 1, 22, 1, 22, 4, 22, 231, 8, 22, 11, 22, 12, 22, 232, 1, 22, 1, 22, 4, 22, 237, 8, 22, 11, 22, 12, 22, 238, 1, 22, 3, 22, 242, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 250, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 258, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 264, 8, 23, 1, 23, 1, 23, 1, 23, 5, 23, 269, 8, 23, 10, 23, 12, 23, 272, 9, 23, 1, 24, 3, 24, 275, 8, 24, 1, 24, 1, 24, 1, 24, 3, 24, 280, 8, 24, 1, 24, 3, 24, 283, 8, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 291, 8, 24, 1, 24, 3, 24, 294, 8, 24, 1, 24, 1, 24, 1, 24, 3, 24, 299, 8, 24, 1, 24, 3, 24, 302, 8, 24, 1, 24, 1, 24, 3, 24, 306, 8, 24, 1, 24, 1, 24, 1, 24, 5, 24, 311, 8, 24, 10, 24, 12, 24, 314, 9, 24, 1, 24, 1, 24, 3, 24, 318, 8, 24, 1, 24, 3, 24, 321, 8, 24, 1, 24, 1, 24, 3, 24, 325, 8, 24, 1, 25, 1, 25, 1, 25, 5, 25, 330, 8, 25, 10, 25, 12, 25, 333, 9, 25, 1, 26, 1, 26, 1, 26, 5, 26, 338, 8, 26, 10, 26, 12, 26, 341, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 5, 27, 351, 8, 27, 10, 27, 12, 27, 354, 9, 27, 1, 28, 3, 28, 357, 8, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 369, 8, 29, 10, 29, 12, 29, 372, 9, 29, 1, 30, 3, 30, 375, 8, 30, 1, 30, 1, 30, 1, 31, 3, 31, 380, 8, 31, 1, 31, 1, 31, 1, 31, 3, 31, 385, 8, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 393, 8, 31, 1, 31, 0, 3, 40, 42, 46, 32, 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, 0, 4, 2, 0, 36, 36, 44, 44, 1, 0, 9, 15, 1, 0, 31, 33, 2, 0, 26, 26, 30, 30, 429, 0, 64, 1, 0, 0, 0, 2, 73, 1, 0, 0, 0, 4, 75, 1, 0, 0, 0, 6, 86, 1, 0, 0, 0, 8, 91, 1, 0, 0, 0, 10, 96, 1, 0, 0, 0, 12, 112, 1, 0, 0, 0, 14, 116, 1, 0, 0, 0, 16, 121, 1, 0, 0, 0, 18, 129, 1, 0, 0, 0, 20, 132, 1, 0, 0, 0, 22, 137, 1, 0, 0, 0, 24, 147, 1, 0, 0, 0, 26, 150, 1, 0, 0, 0, 28, 155, 1, 0, 0, 0, 30, 165, 1, 0, 0, 0, 32, 176, 1, 0, 0, 0, 34, 179, 1, 0, 0, 0, 36, 187, 1, 0, 0, 0, 38, 195, 1, 0, 0, 0, 40, 203, 1, 0, 0, 0, 42, 214, 1, 0, 0, 0, 44, 241, 1, 0, 0, 0, 46, 243, 1, 0, 0, 0, 48, 324, 1, 0, 0, 0, 50, 326, 1, 0, 0, 0, 52, 334, 1, 0, 0, 0, 54, 342, 1, 0, 0, 0, 56, 356, 1, 0, 0, 0, 58, 360, 1, 0, 0, 0, 60, 374, 1, 0, 0, 0, 62, 392, 1, 0, 0, 0, 64, 65, 3, 2, 1, 0, 65, 66, 5, 0, 0, 1, 66, 1, 1, 0, 0, 0, 67, 74, 3, 4, 2, 0, 68, 74, 3, 6, 3, 0, 69, 74, 3, 14, 7, 0, 70, 74, 3, 16, 8, 0, 71, 74, 3, 20, 10, 0, 72, 74, 3, 18, 9, 0, 73, 67, 1, 0, 0, 0, 73, 68, 1, 0, 0, 0, 73, 69, 1, 0, 0, 0, 73, 70, 1, 0, 0, 0, 73, 71, 1, 0, 0, 0, 73, 72, 1, 0, 0, 0, 74, 3, 1, 0, 0, 0, 75, 82, 5, 1, 0, 0, 76, 77, 3, 8, 4, 0, 77, 78, 5, 8, 0, 0, 78, 83, 1, 0, 0, 0, 79, 80, 3, 10, 5, 0, 80, 81, 5, 7, 0, 0, 81, 83, 1, 0, 0, 0, 82, 76, 1, 0, 0, 0, 82, 79, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 85, 3, 34, 17, 0, 85, 5, 1, 0, 0, 0, 86, 89, 5, 2, 0, 0, 87, 90, 3, 8, 4, 0, 88, 90, 3, 10, 5, 0, 89, 87, 1, 0, 0, 0, 89, 88, 1, 0, 0, 0, 90, 7, 1, 0, 0, 0, 91, 94, 3, 22, 11, 0, 92, 93, 5, 29, 0, 0, 93, 95, 3, 26, 13, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 9, 1, 0, 0, 0, 96, 97, 3, 22, 11, 0, 97, 106, 5, 22, 0, 0, 98, 103, 3, 12, 6, 0, 99, 100, 5, 25, 0, 0, 100, 102, 3, 12, 6, 0, 101, 99, 1, 0, 0, 0, 102, 105, 1, 0, 0, 0, 103, 101, 1, 0, 0, 0, 103, 104, 1, 0, 0, 0, 104, 107, 1, 0, 0, 0, 105, 103, 1, 0, 0, 0, 106, 98, 1, 0, 0, 0, 106, 107, 1, 0, 0, 0, 107, 108, 1, 0, 0, 0, 108, 109, 5, 23, 0, 0, 109, 110, 5, 29, 0, 0, 110, 111, 3, 26, 13, 0, 111, 11, 1, 0, 0, 0, 112, 113, 5, 44, 0, 0, 113, 114, 5, 29, 0, 0, 114, 115, 3, 26, 13, 0, 115, 13, 1, 0, 0, 0, 116, 119, 5, 3, 0, 0, 117, 120, 3, 8, 4, 0, 118, 120, 3, 10, 5, 0, 119, 117, 1, 0, 0, 0, 119, 118, 1, 0, 0, 0, 120, 15, 1, 0, 0, 0, 121, 126, 5, 5, 0, 0, 122, 125, 5, 6, 0, 0, 123, 125, 5, 42, 0, 0, 124, 122, 1, 0, 0, 0, 124, 123, 1, 0, 0, 0, 125, 128, 1, 0, 0, 0, 126, 124, 1, 0, 0, 0, 126, 127, 1, 0, 0, 0, 127, 17, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 129, 130, 1, 0, 0, 0, 130, 19, 1, 0, 0, 0, 131, 133, 5, 4, 0, 0, 132, 131, 1, 0, 0, 0, 132, 133, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 135, 3, 34, 17, 0, 135, 21, 1, 0, 0, 0, 136, 138, 5, 24, 0, 0, 137, 136, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 139, 1, 0, 0, 0, 139, 144, 5, 44, 0, 0, 140, 141, 5, 24, 0, 0, 141, 143, 5, 44, 0, 0, 142, 140, 1, 0, 0, 0, 143, 146, 1, 0, 0, 0, 144, 142, 1, 0, 0, 0, 144, 145, 1, 0, 0, 0, 145, 23, 1, 0, 0, 0, 146, 144, 1, 0, 0, 0, 147, 148, 3, 26, 13, 0, 148, 149, 5, 0, 0, 1, 149, 25, 1, 0, 0, 0, 150, 152, 3, 28, 14, 0, 151, 153, 3, 30, 15, 0, 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 27, 1, 0, 0, 0, 154, 156, 5, 24, 0, 0, 155, 154, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 162, 7, 0, 0, 0, 158, 159, 5, 24, 0, 0, 159, 161, 5, 44, 0, 0, 160, 158, 1, 0, 0, 0, 161, 164, 1, 0, 0, 0, 162, 160, 1, 0, 0, 0, 162, 163, 1, 0, 0, 0, 163, 29, 1, 0, 0, 0, 164, 162, 1, 0, 0, 0, 165, 166, 5, 22, 0, 0, 166, 171, 3, 26, 13, 0, 167, 168, 5, 25, 0, 0, 168, 170, 3, 26, 13, 0, 169, 167, 1, 0, 0, 0, 170, 173, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 171, 172, 1, 0, 0, 0, 172, 174, 1, 0, 0, 0, 173, 171, 1, 0, 0, 0, 174, 175, 5, 23, 0, 0, 175, 31, 1, 0, 0, 0, 176, 177, 3, 34, 17, 0, 177, 178, 5, 0, 0, 1, 178, 33, 1, 0, 0, 0, 179, 185, 3, 36, 18, 0, 180, 181, 5, 28, 0, 0, 181, 182, 3, 36, 18, 0, 182, 183, 5, 29, 0, 0, 183, 184, 3, 34, 17, 0, 184, 186, 1, 0, 0, 0, 185, 180, 1, 0, 0, 0, 185, 186, 1, 0, 0, 0, 186, 35, 1, 0, 0, 0, 187, 192, 3, 38, 19, 0, 188, 189, 5, 17, 0, 0, 189, 191, 3, 38, 19, 0, 190, 188, 1, 0, 0, 0, 191, 194, 1, 0, 0, 0, 192, 190, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 37, 1, 0, 0, 0, 194, 192, 1, 0, 0, 0, 195, 200, 3, 40, 20, 0, 196, 197, 5, 16, 0, 0, 197, 199, 3, 40, 20, 0, 198, 196, 1, 0, 0, 0, 199, 202, 1, 0, 0, 0, 200, 198, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 39, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 203, 204, 6, 20, -1, 0, 204, 205, 3, 42, 21, 0, 205, 211, 1, 0, 0, 0, 206, 207, 10, 1, 0, 0, 207, 208, 7, 1, 0, 0, 208, 210, 3, 40, 20, 2, 209, 206, 1, 0, 0, 0, 210, 213, 1, 0, 0, 0, 211, 209, 1, 0, 0, 0, 211, 212, 1, 0, 0, 0, 212, 41, 1, 0, 0, 0, 213, 211, 1, 0, 0, 0, 214, 215, 6, 21, -1, 0, 215, 216, 3, 44, 22, 0, 216, 225, 1, 0, 0, 0, 217, 218, 10, 2, 0, 0, 218, 219, 7, 2, 0, 0, 219, 224, 3, 42, 21, 3, 220, 221, 10, 1, 0, 0, 221, 222, 7, 3, 0, 0, 222, 224, 3, 42, 21, 2, 223, 217, 1, 0, 0, 0, 223, 220, 1, 0, 0, 0, 224, 227, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 225, 226, 1, 0, 0, 0, 226, 43, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 228, 242, 3, 46, 23, 0, 229, 231, 5, 27, 0, 0, 230, 229, 1, 0, 0, 0, 231, 232, 1, 0, 0, 0, 232, 230, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 242, 3, 46, 23, 0, 235, 237, 5, 26, 0, 0, 236, 235, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 242, 3, 46, 23, 0, 241, 228, 1, 0, 0, 0, 241, 230, 1, 0, 0, 0, 241, 236, 1, 0, 0, 0, 242, 45, 1, 0, 0, 0, 243, 244, 6, 23, -1, 0, 244, 245, 3, 48, 24, 0, 245, 270, 1, 0, 0, 0, 246, 247, 10, 3, 0, 0, 247, 249, 5, 24, 0, 0, 248, 250, 5, 28, 0, 0, 249, 248, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 251, 1, 0, 0, 0, 251, 269, 5, 44, 0, 0, 252, 253, 10, 2, 0, 0, 253, 254, 5, 24, 0, 0, 254, 255, 5, 44, 0, 0, 255, 257, 5, 22, 0, 0, 256, 258, 3, 50, 25, 0, 257, 256, 1, 0, 0, 0, 257, 258, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 269, 5, 23, 0, 0, 260, 261, 10, 1, 0, 0, 261, 263, 5, 18, 0, 0, 262, 264, 5, 28, 0, 0, 263, 262, 1, 0, 0, 0, 263, 264, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 266, 3, 34, 17, 0, 266, 267, 5, 19, 0, 0, 267, 269, 1, 0, 0, 0, 268, 246, 1, 0, 0, 0, 268, 252, 1, 0, 0, 0, 268, 260, 1, 0, 0, 0, 269, 272, 1, 0, 0, 0, 270, 268, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 47, 1, 0, 0, 0, 272, 270, 1, 0, 0, 0, 273, 275, 5, 24, 0, 0, 274, 273, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 282, 5, 44, 0, 0, 277, 279, 5, 22, 0, 0, 278, 280, 3, 50, 25, 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, 325, 1, 0, 0, 0, 284, 285, 5, 22, 0, 0, 285, 286, 3, 34, 17, 0, 286, 287, 5, 23, 0, 0, 287, 325, 1, 0, 0, 0, 288, 290, 5, 18, 0, 0, 289, 291, 3, 52, 26, 0, 290, 289, 1, 0, 0, 0, 290, 291, 1, 0, 0, 0, 291, 293, 1, 0, 0, 0, 292, 294, 5, 25, 0, 0, 293, 292, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 325, 5, 19, 0, 0, 296, 298, 5, 20, 0, 0, 297, 299, 3, 58, 29, 0, 298, 297, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 301, 1, 0, 0, 0, 300, 302, 5, 25, 0, 0, 301, 300, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 325, 5, 21, 0, 0, 304, 306, 5, 24, 0, 0, 305, 304, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 312, 5, 44, 0, 0, 308, 309, 5, 24, 0, 0, 309, 311, 5, 44, 0, 0, 310, 308, 1, 0, 0, 0, 311, 314, 1, 0, 0, 0, 312, 310, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 315, 1, 0, 0, 0, 314, 312, 1, 0, 0, 0, 315, 317, 5, 20, 0, 0, 316, 318, 3, 54, 27, 0, 317, 316, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 320, 1, 0, 0, 0, 319, 321, 5, 25, 0, 0, 320, 319, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 325, 5, 21, 0, 0, 323, 325, 3, 62, 31, 0, 324, 274, 1, 0, 0, 0, 324, 284, 1, 0, 0, 0, 324, 288, 1, 0, 0, 0, 324, 296, 1, 0, 0, 0, 324, 305, 1, 0, 0, 0, 324, 323, 1, 0, 0, 0, 325, 49, 1, 0, 0, 0, 326, 331, 3, 34, 17, 0, 327, 328, 5, 25, 0, 0, 328, 330, 3, 34, 17, 0, 329, 327, 1, 0, 0, 0, 330, 333, 1, 0, 0, 0, 331, 329, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 51, 1, 0, 0, 0, 333, 331, 1, 0, 0, 0, 334, 339, 3, 60, 30, 0, 335, 336, 5, 25, 0, 0, 336, 338, 3, 60, 30, 0, 337, 335, 1, 0, 0, 0, 338, 341, 1, 0, 0, 0, 339, 337, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 53, 1, 0, 0, 0, 341, 339, 1, 0, 0, 0, 342, 343, 3, 56, 28, 0, 343, 344, 5, 29, 0, 0, 344, 352, 3, 34, 17, 0, 345, 346, 5, 25, 0, 0, 346, 347, 3, 56, 28, 0, 347, 348, 5, 29, 0, 0, 348, 349, 3, 34, 17, 0, 349, 351, 1, 0, 0, 0, 350, 345, 1, 0, 0, 0, 351, 354, 1, 0, 0, 0, 352, 350, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 55, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 355, 357, 5, 28, 0, 0, 356, 355, 1, 0, 0, 0, 356, 357, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 359, 5, 44, 0, 0, 359, 57, 1, 0, 0, 0, 360, 361, 3, 60, 30, 0, 361, 362, 5, 29, 0, 0, 362, 370, 3, 34, 17, 0, 363, 364, 5, 25, 0, 0, 364, 365, 3, 60, 30, 0, 365, 366, 5, 29, 0, 0, 366, 367, 3, 34, 17, 0, 367, 369, 1, 0, 0, 0, 368, 363, 1, 0, 0, 0, 369, 372, 1, 0, 0, 0, 370, 368, 1, 0, 0, 0, 370, 371, 1, 0, 0, 0, 371, 59, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 373, 375, 5, 28, 0, 0, 374, 373, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 376, 1, 0, 0, 0, 376, 377, 3, 34, 17, 0, 377, 61, 1, 0, 0, 0, 378, 380, 5, 26, 0, 0, 379, 378, 1, 0, 0, 0, 379, 380, 1, 0, 0, 0, 380, 381, 1, 0, 0, 0, 381, 393, 5, 40, 0, 0, 382, 393, 5, 41, 0, 0, 383, 385, 5, 26, 0, 0, 384, 383, 1, 0, 0, 0, 384, 385, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 393, 5, 39, 0, 0, 387, 393, 5, 42, 0, 0, 388, 393, 5, 43, 0, 0, 389, 393, 5, 34, 0, 0, 390, 393, 5, 35, 0, 0, 391, 393, 5, 36, 0, 0, 392, 379, 1, 0, 0, 0, 392, 382, 1, 0, 0, 0, 392, 384, 1, 0, 0, 0, 392, 387, 1, 0, 0, 0, 392, 388, 1, 0, 0, 0, 392, 389, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 392, 391, 1, 0, 0, 0, 393, 63, 1, 0, 0, 0, 51, 73, 82, 89, 94, 103, 106, 119, 124, 126, 132, 137, 144, 152, 155, 162, 171, 185, 192, 200, 211, 223, 225, 232, 238, 241, 249, 257, 263, 268, 270, 274, 279, 282, 290, 293, 298, 301, 305, 312, 317, 320, 324, 331, 339, 352, 356, 370, 374, 379, 384, 392] \ No newline at end of file +[4, 1, 47, 406, 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, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 80, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 91, 8, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 3, 4, 98, 8, 4, 1, 5, 1, 5, 1, 5, 3, 5, 103, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 110, 8, 6, 10, 6, 12, 6, 113, 9, 6, 3, 6, 115, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 3, 8, 128, 8, 8, 1, 9, 1, 9, 1, 9, 5, 9, 133, 8, 9, 10, 9, 12, 9, 136, 9, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 3, 12, 144, 8, 12, 1, 12, 1, 12, 1, 13, 3, 13, 149, 8, 13, 1, 13, 1, 13, 1, 13, 5, 13, 154, 8, 13, 10, 13, 12, 13, 157, 9, 13, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 3, 15, 164, 8, 15, 1, 16, 3, 16, 167, 8, 16, 1, 16, 1, 16, 1, 16, 5, 16, 172, 8, 16, 10, 16, 12, 16, 175, 9, 16, 1, 17, 1, 17, 1, 17, 1, 17, 5, 17, 181, 8, 17, 10, 17, 12, 17, 184, 9, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 197, 8, 19, 1, 20, 1, 20, 1, 20, 5, 20, 202, 8, 20, 10, 20, 12, 20, 205, 9, 20, 1, 21, 1, 21, 1, 21, 5, 21, 210, 8, 21, 10, 21, 12, 21, 213, 9, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 5, 22, 221, 8, 22, 10, 22, 12, 22, 224, 9, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 235, 8, 23, 10, 23, 12, 23, 238, 9, 23, 1, 24, 1, 24, 4, 24, 242, 8, 24, 11, 24, 12, 24, 243, 1, 24, 1, 24, 4, 24, 248, 8, 24, 11, 24, 12, 24, 249, 1, 24, 3, 24, 253, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 261, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 269, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 275, 8, 25, 1, 25, 1, 25, 1, 25, 5, 25, 280, 8, 25, 10, 25, 12, 25, 283, 9, 25, 1, 26, 3, 26, 286, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 291, 8, 26, 1, 26, 3, 26, 294, 8, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 302, 8, 26, 1, 26, 3, 26, 305, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 310, 8, 26, 1, 26, 3, 26, 313, 8, 26, 1, 26, 1, 26, 3, 26, 317, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 322, 8, 26, 10, 26, 12, 26, 325, 9, 26, 1, 26, 1, 26, 3, 26, 329, 8, 26, 1, 26, 3, 26, 332, 8, 26, 1, 26, 1, 26, 3, 26, 336, 8, 26, 1, 27, 1, 27, 1, 27, 5, 27, 341, 8, 27, 10, 27, 12, 27, 344, 9, 27, 1, 28, 1, 28, 1, 28, 5, 28, 349, 8, 28, 10, 28, 12, 28, 352, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 362, 8, 29, 10, 29, 12, 29, 365, 9, 29, 1, 30, 3, 30, 368, 8, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 380, 8, 31, 10, 31, 12, 31, 383, 9, 31, 1, 32, 3, 32, 386, 8, 32, 1, 32, 1, 32, 1, 33, 3, 33, 391, 8, 33, 1, 33, 1, 33, 1, 33, 3, 33, 396, 8, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 404, 8, 33, 1, 33, 0, 3, 44, 46, 50, 34, 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, 0, 5, 1, 0, 1, 2, 2, 0, 39, 39, 47, 47, 1, 0, 12, 18, 1, 0, 34, 36, 2, 0, 29, 29, 33, 33, 440, 0, 68, 1, 0, 0, 0, 2, 79, 1, 0, 0, 0, 4, 81, 1, 0, 0, 0, 6, 83, 1, 0, 0, 0, 8, 94, 1, 0, 0, 0, 10, 99, 1, 0, 0, 0, 12, 104, 1, 0, 0, 0, 14, 120, 1, 0, 0, 0, 16, 124, 1, 0, 0, 0, 18, 129, 1, 0, 0, 0, 20, 137, 1, 0, 0, 0, 22, 139, 1, 0, 0, 0, 24, 143, 1, 0, 0, 0, 26, 148, 1, 0, 0, 0, 28, 158, 1, 0, 0, 0, 30, 161, 1, 0, 0, 0, 32, 166, 1, 0, 0, 0, 34, 176, 1, 0, 0, 0, 36, 187, 1, 0, 0, 0, 38, 190, 1, 0, 0, 0, 40, 198, 1, 0, 0, 0, 42, 206, 1, 0, 0, 0, 44, 214, 1, 0, 0, 0, 46, 225, 1, 0, 0, 0, 48, 252, 1, 0, 0, 0, 50, 254, 1, 0, 0, 0, 52, 335, 1, 0, 0, 0, 54, 337, 1, 0, 0, 0, 56, 345, 1, 0, 0, 0, 58, 353, 1, 0, 0, 0, 60, 367, 1, 0, 0, 0, 62, 371, 1, 0, 0, 0, 64, 385, 1, 0, 0, 0, 66, 403, 1, 0, 0, 0, 68, 69, 3, 2, 1, 0, 69, 70, 5, 0, 0, 1, 70, 1, 1, 0, 0, 0, 71, 80, 3, 4, 2, 0, 72, 80, 3, 6, 3, 0, 73, 80, 3, 8, 4, 0, 74, 80, 3, 16, 8, 0, 75, 80, 3, 18, 9, 0, 76, 80, 3, 22, 11, 0, 77, 80, 3, 24, 12, 0, 78, 80, 3, 20, 10, 0, 79, 71, 1, 0, 0, 0, 79, 72, 1, 0, 0, 0, 79, 73, 1, 0, 0, 0, 79, 74, 1, 0, 0, 0, 79, 75, 1, 0, 0, 0, 79, 76, 1, 0, 0, 0, 79, 77, 1, 0, 0, 0, 79, 78, 1, 0, 0, 0, 80, 3, 1, 0, 0, 0, 81, 82, 7, 0, 0, 0, 82, 5, 1, 0, 0, 0, 83, 90, 5, 3, 0, 0, 84, 85, 3, 10, 5, 0, 85, 86, 5, 11, 0, 0, 86, 91, 1, 0, 0, 0, 87, 88, 3, 12, 6, 0, 88, 89, 5, 10, 0, 0, 89, 91, 1, 0, 0, 0, 90, 84, 1, 0, 0, 0, 90, 87, 1, 0, 0, 0, 91, 92, 1, 0, 0, 0, 92, 93, 3, 38, 19, 0, 93, 7, 1, 0, 0, 0, 94, 97, 5, 4, 0, 0, 95, 98, 3, 10, 5, 0, 96, 98, 3, 12, 6, 0, 97, 95, 1, 0, 0, 0, 97, 96, 1, 0, 0, 0, 98, 9, 1, 0, 0, 0, 99, 102, 3, 26, 13, 0, 100, 101, 5, 32, 0, 0, 101, 103, 3, 30, 15, 0, 102, 100, 1, 0, 0, 0, 102, 103, 1, 0, 0, 0, 103, 11, 1, 0, 0, 0, 104, 105, 3, 26, 13, 0, 105, 114, 5, 25, 0, 0, 106, 111, 3, 14, 7, 0, 107, 108, 5, 28, 0, 0, 108, 110, 3, 14, 7, 0, 109, 107, 1, 0, 0, 0, 110, 113, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 111, 112, 1, 0, 0, 0, 112, 115, 1, 0, 0, 0, 113, 111, 1, 0, 0, 0, 114, 106, 1, 0, 0, 0, 114, 115, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 117, 5, 26, 0, 0, 117, 118, 5, 32, 0, 0, 118, 119, 3, 30, 15, 0, 119, 13, 1, 0, 0, 0, 120, 121, 5, 47, 0, 0, 121, 122, 5, 32, 0, 0, 122, 123, 3, 30, 15, 0, 123, 15, 1, 0, 0, 0, 124, 127, 5, 5, 0, 0, 125, 128, 3, 10, 5, 0, 126, 128, 3, 12, 6, 0, 127, 125, 1, 0, 0, 0, 127, 126, 1, 0, 0, 0, 128, 17, 1, 0, 0, 0, 129, 134, 5, 8, 0, 0, 130, 133, 5, 9, 0, 0, 131, 133, 5, 45, 0, 0, 132, 130, 1, 0, 0, 0, 132, 131, 1, 0, 0, 0, 133, 136, 1, 0, 0, 0, 134, 132, 1, 0, 0, 0, 134, 135, 1, 0, 0, 0, 135, 19, 1, 0, 0, 0, 136, 134, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 21, 1, 0, 0, 0, 139, 140, 5, 6, 0, 0, 140, 141, 3, 38, 19, 0, 141, 23, 1, 0, 0, 0, 142, 144, 5, 7, 0, 0, 143, 142, 1, 0, 0, 0, 143, 144, 1, 0, 0, 0, 144, 145, 1, 0, 0, 0, 145, 146, 3, 38, 19, 0, 146, 25, 1, 0, 0, 0, 147, 149, 5, 27, 0, 0, 148, 147, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 155, 5, 47, 0, 0, 151, 152, 5, 27, 0, 0, 152, 154, 5, 47, 0, 0, 153, 151, 1, 0, 0, 0, 154, 157, 1, 0, 0, 0, 155, 153, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, 27, 1, 0, 0, 0, 157, 155, 1, 0, 0, 0, 158, 159, 3, 30, 15, 0, 159, 160, 5, 0, 0, 1, 160, 29, 1, 0, 0, 0, 161, 163, 3, 32, 16, 0, 162, 164, 3, 34, 17, 0, 163, 162, 1, 0, 0, 0, 163, 164, 1, 0, 0, 0, 164, 31, 1, 0, 0, 0, 165, 167, 5, 27, 0, 0, 166, 165, 1, 0, 0, 0, 166, 167, 1, 0, 0, 0, 167, 168, 1, 0, 0, 0, 168, 173, 7, 1, 0, 0, 169, 170, 5, 27, 0, 0, 170, 172, 5, 47, 0, 0, 171, 169, 1, 0, 0, 0, 172, 175, 1, 0, 0, 0, 173, 171, 1, 0, 0, 0, 173, 174, 1, 0, 0, 0, 174, 33, 1, 0, 0, 0, 175, 173, 1, 0, 0, 0, 176, 177, 5, 25, 0, 0, 177, 182, 3, 30, 15, 0, 178, 179, 5, 28, 0, 0, 179, 181, 3, 30, 15, 0, 180, 178, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 185, 1, 0, 0, 0, 184, 182, 1, 0, 0, 0, 185, 186, 5, 26, 0, 0, 186, 35, 1, 0, 0, 0, 187, 188, 3, 38, 19, 0, 188, 189, 5, 0, 0, 1, 189, 37, 1, 0, 0, 0, 190, 196, 3, 40, 20, 0, 191, 192, 5, 31, 0, 0, 192, 193, 3, 40, 20, 0, 193, 194, 5, 32, 0, 0, 194, 195, 3, 38, 19, 0, 195, 197, 1, 0, 0, 0, 196, 191, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 39, 1, 0, 0, 0, 198, 203, 3, 42, 21, 0, 199, 200, 5, 20, 0, 0, 200, 202, 3, 42, 21, 0, 201, 199, 1, 0, 0, 0, 202, 205, 1, 0, 0, 0, 203, 201, 1, 0, 0, 0, 203, 204, 1, 0, 0, 0, 204, 41, 1, 0, 0, 0, 205, 203, 1, 0, 0, 0, 206, 211, 3, 44, 22, 0, 207, 208, 5, 19, 0, 0, 208, 210, 3, 44, 22, 0, 209, 207, 1, 0, 0, 0, 210, 213, 1, 0, 0, 0, 211, 209, 1, 0, 0, 0, 211, 212, 1, 0, 0, 0, 212, 43, 1, 0, 0, 0, 213, 211, 1, 0, 0, 0, 214, 215, 6, 22, -1, 0, 215, 216, 3, 46, 23, 0, 216, 222, 1, 0, 0, 0, 217, 218, 10, 1, 0, 0, 218, 219, 7, 2, 0, 0, 219, 221, 3, 44, 22, 2, 220, 217, 1, 0, 0, 0, 221, 224, 1, 0, 0, 0, 222, 220, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 45, 1, 0, 0, 0, 224, 222, 1, 0, 0, 0, 225, 226, 6, 23, -1, 0, 226, 227, 3, 48, 24, 0, 227, 236, 1, 0, 0, 0, 228, 229, 10, 2, 0, 0, 229, 230, 7, 3, 0, 0, 230, 235, 3, 46, 23, 3, 231, 232, 10, 1, 0, 0, 232, 233, 7, 4, 0, 0, 233, 235, 3, 46, 23, 2, 234, 228, 1, 0, 0, 0, 234, 231, 1, 0, 0, 0, 235, 238, 1, 0, 0, 0, 236, 234, 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 47, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 239, 253, 3, 50, 25, 0, 240, 242, 5, 30, 0, 0, 241, 240, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 253, 3, 50, 25, 0, 246, 248, 5, 29, 0, 0, 247, 246, 1, 0, 0, 0, 248, 249, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 251, 1, 0, 0, 0, 251, 253, 3, 50, 25, 0, 252, 239, 1, 0, 0, 0, 252, 241, 1, 0, 0, 0, 252, 247, 1, 0, 0, 0, 253, 49, 1, 0, 0, 0, 254, 255, 6, 25, -1, 0, 255, 256, 3, 52, 26, 0, 256, 281, 1, 0, 0, 0, 257, 258, 10, 3, 0, 0, 258, 260, 5, 27, 0, 0, 259, 261, 5, 31, 0, 0, 260, 259, 1, 0, 0, 0, 260, 261, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 280, 5, 47, 0, 0, 263, 264, 10, 2, 0, 0, 264, 265, 5, 27, 0, 0, 265, 266, 5, 47, 0, 0, 266, 268, 5, 25, 0, 0, 267, 269, 3, 54, 27, 0, 268, 267, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 280, 5, 26, 0, 0, 271, 272, 10, 1, 0, 0, 272, 274, 5, 21, 0, 0, 273, 275, 5, 31, 0, 0, 274, 273, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 277, 3, 38, 19, 0, 277, 278, 5, 22, 0, 0, 278, 280, 1, 0, 0, 0, 279, 257, 1, 0, 0, 0, 279, 263, 1, 0, 0, 0, 279, 271, 1, 0, 0, 0, 280, 283, 1, 0, 0, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 51, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 284, 286, 5, 27, 0, 0, 285, 284, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 293, 5, 47, 0, 0, 288, 290, 5, 25, 0, 0, 289, 291, 3, 54, 27, 0, 290, 289, 1, 0, 0, 0, 290, 291, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 294, 5, 26, 0, 0, 293, 288, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 336, 1, 0, 0, 0, 295, 296, 5, 25, 0, 0, 296, 297, 3, 38, 19, 0, 297, 298, 5, 26, 0, 0, 298, 336, 1, 0, 0, 0, 299, 301, 5, 21, 0, 0, 300, 302, 3, 56, 28, 0, 301, 300, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 304, 1, 0, 0, 0, 303, 305, 5, 28, 0, 0, 304, 303, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 336, 5, 22, 0, 0, 307, 309, 5, 23, 0, 0, 308, 310, 3, 62, 31, 0, 309, 308, 1, 0, 0, 0, 309, 310, 1, 0, 0, 0, 310, 312, 1, 0, 0, 0, 311, 313, 5, 28, 0, 0, 312, 311, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 336, 5, 24, 0, 0, 315, 317, 5, 27, 0, 0, 316, 315, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 323, 5, 47, 0, 0, 319, 320, 5, 27, 0, 0, 320, 322, 5, 47, 0, 0, 321, 319, 1, 0, 0, 0, 322, 325, 1, 0, 0, 0, 323, 321, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 326, 1, 0, 0, 0, 325, 323, 1, 0, 0, 0, 326, 328, 5, 23, 0, 0, 327, 329, 3, 58, 29, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 331, 1, 0, 0, 0, 330, 332, 5, 28, 0, 0, 331, 330, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 336, 5, 24, 0, 0, 334, 336, 3, 66, 33, 0, 335, 285, 1, 0, 0, 0, 335, 295, 1, 0, 0, 0, 335, 299, 1, 0, 0, 0, 335, 307, 1, 0, 0, 0, 335, 316, 1, 0, 0, 0, 335, 334, 1, 0, 0, 0, 336, 53, 1, 0, 0, 0, 337, 342, 3, 38, 19, 0, 338, 339, 5, 28, 0, 0, 339, 341, 3, 38, 19, 0, 340, 338, 1, 0, 0, 0, 341, 344, 1, 0, 0, 0, 342, 340, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 55, 1, 0, 0, 0, 344, 342, 1, 0, 0, 0, 345, 350, 3, 64, 32, 0, 346, 347, 5, 28, 0, 0, 347, 349, 3, 64, 32, 0, 348, 346, 1, 0, 0, 0, 349, 352, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 57, 1, 0, 0, 0, 352, 350, 1, 0, 0, 0, 353, 354, 3, 60, 30, 0, 354, 355, 5, 32, 0, 0, 355, 363, 3, 38, 19, 0, 356, 357, 5, 28, 0, 0, 357, 358, 3, 60, 30, 0, 358, 359, 5, 32, 0, 0, 359, 360, 3, 38, 19, 0, 360, 362, 1, 0, 0, 0, 361, 356, 1, 0, 0, 0, 362, 365, 1, 0, 0, 0, 363, 361, 1, 0, 0, 0, 363, 364, 1, 0, 0, 0, 364, 59, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 366, 368, 5, 31, 0, 0, 367, 366, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 370, 5, 47, 0, 0, 370, 61, 1, 0, 0, 0, 371, 372, 3, 64, 32, 0, 372, 373, 5, 32, 0, 0, 373, 381, 3, 38, 19, 0, 374, 375, 5, 28, 0, 0, 375, 376, 3, 64, 32, 0, 376, 377, 5, 32, 0, 0, 377, 378, 3, 38, 19, 0, 378, 380, 1, 0, 0, 0, 379, 374, 1, 0, 0, 0, 380, 383, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 381, 382, 1, 0, 0, 0, 382, 63, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 384, 386, 5, 31, 0, 0, 385, 384, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 388, 3, 38, 19, 0, 388, 65, 1, 0, 0, 0, 389, 391, 5, 29, 0, 0, 390, 389, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 404, 5, 43, 0, 0, 393, 404, 5, 44, 0, 0, 394, 396, 5, 29, 0, 0, 395, 394, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 397, 404, 5, 42, 0, 0, 398, 404, 5, 45, 0, 0, 399, 404, 5, 46, 0, 0, 400, 404, 5, 37, 0, 0, 401, 404, 5, 38, 0, 0, 402, 404, 5, 39, 0, 0, 403, 390, 1, 0, 0, 0, 403, 393, 1, 0, 0, 0, 403, 395, 1, 0, 0, 0, 403, 398, 1, 0, 0, 0, 403, 399, 1, 0, 0, 0, 403, 400, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 403, 402, 1, 0, 0, 0, 404, 67, 1, 0, 0, 0, 51, 79, 90, 97, 102, 111, 114, 127, 132, 134, 143, 148, 155, 163, 166, 173, 182, 196, 203, 211, 222, 234, 236, 243, 249, 252, 260, 268, 274, 279, 281, 285, 290, 293, 301, 304, 309, 312, 316, 323, 328, 331, 335, 342, 350, 363, 367, 381, 385, 390, 395, 403] \ No newline at end of file diff --git a/repl/parser/Commands.tokens b/repl/parser/Commands.tokens index 7cdeb421..86c6bdb6 100644 --- a/repl/parser/Commands.tokens +++ b/repl/parser/Commands.tokens @@ -2,77 +2,83 @@ T__0=1 T__1=2 T__2=3 T__3=4 -COMMAND=5 -FLAG=6 -ARROW=7 -EQUAL_ASSIGN=8 -EQUALS=9 -NOT_EQUALS=10 -IN=11 -LESS=12 -LESS_EQUALS=13 -GREATER_EQUALS=14 -GREATER=15 -LOGICAL_AND=16 -LOGICAL_OR=17 -LBRACKET=18 -RPRACKET=19 -LBRACE=20 -RBRACE=21 -LPAREN=22 -RPAREN=23 -DOT=24 -COMMA=25 -MINUS=26 -EXCLAM=27 -QUESTIONMARK=28 -COLON=29 -PLUS=30 -STAR=31 -SLASH=32 -PERCENT=33 -CEL_TRUE=34 -CEL_FALSE=35 -NUL=36 -WHITESPACE=37 -COMMENT=38 -NUM_FLOAT=39 -NUM_INT=40 -NUM_UINT=41 -STRING=42 -BYTES=43 -IDENTIFIER=44 -'%let'=1 -'%declare'=2 -'%delete'=3 -'%eval'=4 -'->'=7 -'='=8 -'=='=9 -'!='=10 -'in'=11 -'<'=12 -'<='=13 -'>='=14 -'>'=15 -'&&'=16 -'||'=17 -'['=18 -']'=19 -'{'=20 -'}'=21 -'('=22 -')'=23 -'.'=24 -','=25 -'-'=26 -'!'=27 -'?'=28 -':'=29 -'+'=30 -'*'=31 -'/'=32 -'%'=33 -'true'=34 -'false'=35 -'null'=36 +T__4=5 +T__5=6 +T__6=7 +COMMAND=8 +FLAG=9 +ARROW=10 +EQUAL_ASSIGN=11 +EQUALS=12 +NOT_EQUALS=13 +IN=14 +LESS=15 +LESS_EQUALS=16 +GREATER_EQUALS=17 +GREATER=18 +LOGICAL_AND=19 +LOGICAL_OR=20 +LBRACKET=21 +RPRACKET=22 +LBRACE=23 +RBRACE=24 +LPAREN=25 +RPAREN=26 +DOT=27 +COMMA=28 +MINUS=29 +EXCLAM=30 +QUESTIONMARK=31 +COLON=32 +PLUS=33 +STAR=34 +SLASH=35 +PERCENT=36 +CEL_TRUE=37 +CEL_FALSE=38 +NUL=39 +WHITESPACE=40 +COMMENT=41 +NUM_FLOAT=42 +NUM_INT=43 +NUM_UINT=44 +STRING=45 +BYTES=46 +IDENTIFIER=47 +'%help'=1 +'%?'=2 +'%let'=3 +'%declare'=4 +'%delete'=5 +'%compile'=6 +'%eval'=7 +'->'=10 +'='=11 +'=='=12 +'!='=13 +'in'=14 +'<'=15 +'<='=16 +'>='=17 +'>'=18 +'&&'=19 +'||'=20 +'['=21 +']'=22 +'{'=23 +'}'=24 +'('=25 +')'=26 +'.'=27 +','=28 +'-'=29 +'!'=30 +'?'=31 +':'=32 +'+'=33 +'*'=34 +'/'=35 +'%'=36 +'true'=37 +'false'=38 +'null'=39 diff --git a/repl/parser/CommandsLexer.interp b/repl/parser/CommandsLexer.interp index 5a9805ad..cf2103bb 100644 --- a/repl/parser/CommandsLexer.interp +++ b/repl/parser/CommandsLexer.interp @@ -1,8 +1,11 @@ token literal names: null +'%help' +'%?' '%let' '%declare' '%delete' +'%compile' '%eval' null null @@ -51,6 +54,9 @@ null null null null +null +null +null COMMAND FLAG ARROW @@ -97,6 +103,9 @@ T__0 T__1 T__2 T__3 +T__4 +T__5 +T__6 COMMAND FLAG ARROW @@ -157,4 +166,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 44, 481, 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, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 3, 5, 144, 8, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 3, 39, 235, 8, 39, 1, 39, 4, 39, 238, 8, 39, 11, 39, 12, 39, 239, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 250, 8, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 283, 8, 46, 1, 47, 4, 47, 286, 8, 47, 11, 47, 12, 47, 287, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 296, 8, 48, 10, 48, 12, 48, 299, 9, 48, 1, 48, 1, 48, 1, 49, 4, 49, 304, 8, 49, 11, 49, 12, 49, 305, 1, 49, 1, 49, 4, 49, 310, 8, 49, 11, 49, 12, 49, 311, 1, 49, 3, 49, 315, 8, 49, 1, 49, 4, 49, 318, 8, 49, 11, 49, 12, 49, 319, 1, 49, 1, 49, 1, 49, 1, 49, 4, 49, 326, 8, 49, 11, 49, 12, 49, 327, 1, 49, 3, 49, 331, 8, 49, 3, 49, 333, 8, 49, 1, 50, 4, 50, 336, 8, 50, 11, 50, 12, 50, 337, 1, 50, 1, 50, 1, 50, 1, 50, 4, 50, 344, 8, 50, 11, 50, 12, 50, 345, 3, 50, 348, 8, 50, 1, 51, 4, 51, 351, 8, 51, 11, 51, 12, 51, 352, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 4, 51, 361, 8, 51, 11, 51, 12, 51, 362, 1, 51, 1, 51, 3, 51, 367, 8, 51, 1, 52, 1, 52, 1, 52, 5, 52, 372, 8, 52, 10, 52, 12, 52, 375, 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 381, 8, 52, 10, 52, 12, 52, 384, 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 393, 8, 52, 10, 52, 12, 52, 396, 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 407, 8, 52, 10, 52, 12, 52, 410, 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 418, 8, 52, 10, 52, 12, 52, 421, 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 428, 8, 52, 10, 52, 12, 52, 431, 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 441, 8, 52, 10, 52, 12, 52, 444, 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 456, 8, 52, 10, 52, 12, 52, 459, 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 465, 8, 52, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 3, 54, 472, 8, 54, 1, 54, 1, 54, 1, 54, 5, 54, 477, 8, 54, 10, 54, 12, 54, 480, 9, 54, 4, 394, 408, 442, 457, 0, 55, 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, 0, 75, 0, 77, 0, 79, 0, 81, 0, 83, 0, 85, 0, 87, 0, 89, 0, 91, 0, 93, 0, 95, 37, 97, 38, 99, 39, 101, 40, 103, 41, 105, 42, 107, 43, 109, 44, 1, 0, 16, 2, 0, 65, 90, 97, 122, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 82, 82, 114, 114, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 96, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 88, 88, 120, 120, 3, 0, 9, 10, 12, 13, 32, 32, 1, 0, 10, 10, 2, 0, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 1, 0, 92, 92, 3, 0, 10, 10, 13, 13, 34, 34, 3, 0, 10, 10, 13, 13, 39, 39, 2, 0, 66, 66, 98, 98, 515, 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, 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, 1, 111, 1, 0, 0, 0, 3, 116, 1, 0, 0, 0, 5, 125, 1, 0, 0, 0, 7, 133, 1, 0, 0, 0, 9, 139, 1, 0, 0, 0, 11, 143, 1, 0, 0, 0, 13, 148, 1, 0, 0, 0, 15, 151, 1, 0, 0, 0, 17, 153, 1, 0, 0, 0, 19, 156, 1, 0, 0, 0, 21, 159, 1, 0, 0, 0, 23, 162, 1, 0, 0, 0, 25, 164, 1, 0, 0, 0, 27, 167, 1, 0, 0, 0, 29, 170, 1, 0, 0, 0, 31, 172, 1, 0, 0, 0, 33, 175, 1, 0, 0, 0, 35, 178, 1, 0, 0, 0, 37, 180, 1, 0, 0, 0, 39, 182, 1, 0, 0, 0, 41, 184, 1, 0, 0, 0, 43, 186, 1, 0, 0, 0, 45, 188, 1, 0, 0, 0, 47, 190, 1, 0, 0, 0, 49, 192, 1, 0, 0, 0, 51, 194, 1, 0, 0, 0, 53, 196, 1, 0, 0, 0, 55, 198, 1, 0, 0, 0, 57, 200, 1, 0, 0, 0, 59, 202, 1, 0, 0, 0, 61, 204, 1, 0, 0, 0, 63, 206, 1, 0, 0, 0, 65, 208, 1, 0, 0, 0, 67, 210, 1, 0, 0, 0, 69, 215, 1, 0, 0, 0, 71, 221, 1, 0, 0, 0, 73, 226, 1, 0, 0, 0, 75, 228, 1, 0, 0, 0, 77, 230, 1, 0, 0, 0, 79, 232, 1, 0, 0, 0, 81, 241, 1, 0, 0, 0, 83, 243, 1, 0, 0, 0, 85, 249, 1, 0, 0, 0, 87, 251, 1, 0, 0, 0, 89, 254, 1, 0, 0, 0, 91, 259, 1, 0, 0, 0, 93, 282, 1, 0, 0, 0, 95, 285, 1, 0, 0, 0, 97, 291, 1, 0, 0, 0, 99, 332, 1, 0, 0, 0, 101, 347, 1, 0, 0, 0, 103, 366, 1, 0, 0, 0, 105, 464, 1, 0, 0, 0, 107, 466, 1, 0, 0, 0, 109, 471, 1, 0, 0, 0, 111, 112, 5, 37, 0, 0, 112, 113, 5, 108, 0, 0, 113, 114, 5, 101, 0, 0, 114, 115, 5, 116, 0, 0, 115, 2, 1, 0, 0, 0, 116, 117, 5, 37, 0, 0, 117, 118, 5, 100, 0, 0, 118, 119, 5, 101, 0, 0, 119, 120, 5, 99, 0, 0, 120, 121, 5, 108, 0, 0, 121, 122, 5, 97, 0, 0, 122, 123, 5, 114, 0, 0, 123, 124, 5, 101, 0, 0, 124, 4, 1, 0, 0, 0, 125, 126, 5, 37, 0, 0, 126, 127, 5, 100, 0, 0, 127, 128, 5, 101, 0, 0, 128, 129, 5, 108, 0, 0, 129, 130, 5, 101, 0, 0, 130, 131, 5, 116, 0, 0, 131, 132, 5, 101, 0, 0, 132, 6, 1, 0, 0, 0, 133, 134, 5, 37, 0, 0, 134, 135, 5, 101, 0, 0, 135, 136, 5, 118, 0, 0, 136, 137, 5, 97, 0, 0, 137, 138, 5, 108, 0, 0, 138, 8, 1, 0, 0, 0, 139, 140, 5, 37, 0, 0, 140, 141, 3, 109, 54, 0, 141, 10, 1, 0, 0, 0, 142, 144, 5, 45, 0, 0, 143, 142, 1, 0, 0, 0, 143, 144, 1, 0, 0, 0, 144, 145, 1, 0, 0, 0, 145, 146, 5, 45, 0, 0, 146, 147, 3, 109, 54, 0, 147, 12, 1, 0, 0, 0, 148, 149, 5, 45, 0, 0, 149, 150, 5, 62, 0, 0, 150, 14, 1, 0, 0, 0, 151, 152, 5, 61, 0, 0, 152, 16, 1, 0, 0, 0, 153, 154, 5, 61, 0, 0, 154, 155, 5, 61, 0, 0, 155, 18, 1, 0, 0, 0, 156, 157, 5, 33, 0, 0, 157, 158, 5, 61, 0, 0, 158, 20, 1, 0, 0, 0, 159, 160, 5, 105, 0, 0, 160, 161, 5, 110, 0, 0, 161, 22, 1, 0, 0, 0, 162, 163, 5, 60, 0, 0, 163, 24, 1, 0, 0, 0, 164, 165, 5, 60, 0, 0, 165, 166, 5, 61, 0, 0, 166, 26, 1, 0, 0, 0, 167, 168, 5, 62, 0, 0, 168, 169, 5, 61, 0, 0, 169, 28, 1, 0, 0, 0, 170, 171, 5, 62, 0, 0, 171, 30, 1, 0, 0, 0, 172, 173, 5, 38, 0, 0, 173, 174, 5, 38, 0, 0, 174, 32, 1, 0, 0, 0, 175, 176, 5, 124, 0, 0, 176, 177, 5, 124, 0, 0, 177, 34, 1, 0, 0, 0, 178, 179, 5, 91, 0, 0, 179, 36, 1, 0, 0, 0, 180, 181, 5, 93, 0, 0, 181, 38, 1, 0, 0, 0, 182, 183, 5, 123, 0, 0, 183, 40, 1, 0, 0, 0, 184, 185, 5, 125, 0, 0, 185, 42, 1, 0, 0, 0, 186, 187, 5, 40, 0, 0, 187, 44, 1, 0, 0, 0, 188, 189, 5, 41, 0, 0, 189, 46, 1, 0, 0, 0, 190, 191, 5, 46, 0, 0, 191, 48, 1, 0, 0, 0, 192, 193, 5, 44, 0, 0, 193, 50, 1, 0, 0, 0, 194, 195, 5, 45, 0, 0, 195, 52, 1, 0, 0, 0, 196, 197, 5, 33, 0, 0, 197, 54, 1, 0, 0, 0, 198, 199, 5, 63, 0, 0, 199, 56, 1, 0, 0, 0, 200, 201, 5, 58, 0, 0, 201, 58, 1, 0, 0, 0, 202, 203, 5, 43, 0, 0, 203, 60, 1, 0, 0, 0, 204, 205, 5, 42, 0, 0, 205, 62, 1, 0, 0, 0, 206, 207, 5, 47, 0, 0, 207, 64, 1, 0, 0, 0, 208, 209, 5, 37, 0, 0, 209, 66, 1, 0, 0, 0, 210, 211, 5, 116, 0, 0, 211, 212, 5, 114, 0, 0, 212, 213, 5, 117, 0, 0, 213, 214, 5, 101, 0, 0, 214, 68, 1, 0, 0, 0, 215, 216, 5, 102, 0, 0, 216, 217, 5, 97, 0, 0, 217, 218, 5, 108, 0, 0, 218, 219, 5, 115, 0, 0, 219, 220, 5, 101, 0, 0, 220, 70, 1, 0, 0, 0, 221, 222, 5, 110, 0, 0, 222, 223, 5, 117, 0, 0, 223, 224, 5, 108, 0, 0, 224, 225, 5, 108, 0, 0, 225, 72, 1, 0, 0, 0, 226, 227, 5, 92, 0, 0, 227, 74, 1, 0, 0, 0, 228, 229, 7, 0, 0, 0, 229, 76, 1, 0, 0, 0, 230, 231, 2, 48, 57, 0, 231, 78, 1, 0, 0, 0, 232, 234, 7, 1, 0, 0, 233, 235, 7, 2, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 1, 0, 0, 0, 236, 238, 3, 77, 38, 0, 237, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 237, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 80, 1, 0, 0, 0, 241, 242, 7, 3, 0, 0, 242, 82, 1, 0, 0, 0, 243, 244, 7, 4, 0, 0, 244, 84, 1, 0, 0, 0, 245, 250, 3, 87, 43, 0, 246, 250, 3, 91, 45, 0, 247, 250, 3, 93, 46, 0, 248, 250, 3, 89, 44, 0, 249, 245, 1, 0, 0, 0, 249, 246, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 248, 1, 0, 0, 0, 250, 86, 1, 0, 0, 0, 251, 252, 3, 73, 36, 0, 252, 253, 7, 5, 0, 0, 253, 88, 1, 0, 0, 0, 254, 255, 3, 73, 36, 0, 255, 256, 2, 48, 51, 0, 256, 257, 2, 48, 55, 0, 257, 258, 2, 48, 55, 0, 258, 90, 1, 0, 0, 0, 259, 260, 3, 73, 36, 0, 260, 261, 7, 6, 0, 0, 261, 262, 3, 81, 40, 0, 262, 263, 3, 81, 40, 0, 263, 92, 1, 0, 0, 0, 264, 265, 3, 73, 36, 0, 265, 266, 5, 117, 0, 0, 266, 267, 3, 81, 40, 0, 267, 268, 3, 81, 40, 0, 268, 269, 3, 81, 40, 0, 269, 270, 3, 81, 40, 0, 270, 283, 1, 0, 0, 0, 271, 272, 3, 73, 36, 0, 272, 273, 5, 85, 0, 0, 273, 274, 3, 81, 40, 0, 274, 275, 3, 81, 40, 0, 275, 276, 3, 81, 40, 0, 276, 277, 3, 81, 40, 0, 277, 278, 3, 81, 40, 0, 278, 279, 3, 81, 40, 0, 279, 280, 3, 81, 40, 0, 280, 281, 3, 81, 40, 0, 281, 283, 1, 0, 0, 0, 282, 264, 1, 0, 0, 0, 282, 271, 1, 0, 0, 0, 283, 94, 1, 0, 0, 0, 284, 286, 7, 7, 0, 0, 285, 284, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 285, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 290, 6, 47, 0, 0, 290, 96, 1, 0, 0, 0, 291, 292, 5, 47, 0, 0, 292, 293, 5, 47, 0, 0, 293, 297, 1, 0, 0, 0, 294, 296, 8, 8, 0, 0, 295, 294, 1, 0, 0, 0, 296, 299, 1, 0, 0, 0, 297, 295, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 300, 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 300, 301, 6, 48, 0, 0, 301, 98, 1, 0, 0, 0, 302, 304, 3, 77, 38, 0, 303, 302, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 303, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 309, 5, 46, 0, 0, 308, 310, 3, 77, 38, 0, 309, 308, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 309, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 314, 1, 0, 0, 0, 313, 315, 3, 79, 39, 0, 314, 313, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 333, 1, 0, 0, 0, 316, 318, 3, 77, 38, 0, 317, 316, 1, 0, 0, 0, 318, 319, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 322, 3, 79, 39, 0, 322, 333, 1, 0, 0, 0, 323, 325, 5, 46, 0, 0, 324, 326, 3, 77, 38, 0, 325, 324, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 330, 1, 0, 0, 0, 329, 331, 3, 79, 39, 0, 330, 329, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 303, 1, 0, 0, 0, 332, 317, 1, 0, 0, 0, 332, 323, 1, 0, 0, 0, 333, 100, 1, 0, 0, 0, 334, 336, 3, 77, 38, 0, 335, 334, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 348, 1, 0, 0, 0, 339, 340, 5, 48, 0, 0, 340, 341, 5, 120, 0, 0, 341, 343, 1, 0, 0, 0, 342, 344, 3, 81, 40, 0, 343, 342, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, 0, 347, 335, 1, 0, 0, 0, 347, 339, 1, 0, 0, 0, 348, 102, 1, 0, 0, 0, 349, 351, 3, 77, 38, 0, 350, 349, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 350, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 355, 7, 9, 0, 0, 355, 367, 1, 0, 0, 0, 356, 357, 5, 48, 0, 0, 357, 358, 5, 120, 0, 0, 358, 360, 1, 0, 0, 0, 359, 361, 3, 81, 40, 0, 360, 359, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 360, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 364, 1, 0, 0, 0, 364, 365, 7, 9, 0, 0, 365, 367, 1, 0, 0, 0, 366, 350, 1, 0, 0, 0, 366, 356, 1, 0, 0, 0, 367, 104, 1, 0, 0, 0, 368, 373, 5, 34, 0, 0, 369, 372, 3, 85, 42, 0, 370, 372, 8, 10, 0, 0, 371, 369, 1, 0, 0, 0, 371, 370, 1, 0, 0, 0, 372, 375, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 373, 374, 1, 0, 0, 0, 374, 376, 1, 0, 0, 0, 375, 373, 1, 0, 0, 0, 376, 465, 5, 34, 0, 0, 377, 382, 5, 39, 0, 0, 378, 381, 3, 85, 42, 0, 379, 381, 8, 11, 0, 0, 380, 378, 1, 0, 0, 0, 380, 379, 1, 0, 0, 0, 381, 384, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 385, 1, 0, 0, 0, 384, 382, 1, 0, 0, 0, 385, 465, 5, 39, 0, 0, 386, 387, 5, 34, 0, 0, 387, 388, 5, 34, 0, 0, 388, 389, 5, 34, 0, 0, 389, 394, 1, 0, 0, 0, 390, 393, 3, 85, 42, 0, 391, 393, 8, 12, 0, 0, 392, 390, 1, 0, 0, 0, 392, 391, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 395, 397, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 398, 5, 34, 0, 0, 398, 399, 5, 34, 0, 0, 399, 465, 5, 34, 0, 0, 400, 401, 5, 39, 0, 0, 401, 402, 5, 39, 0, 0, 402, 403, 5, 39, 0, 0, 403, 408, 1, 0, 0, 0, 404, 407, 3, 85, 42, 0, 405, 407, 8, 12, 0, 0, 406, 404, 1, 0, 0, 0, 406, 405, 1, 0, 0, 0, 407, 410, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 408, 406, 1, 0, 0, 0, 409, 411, 1, 0, 0, 0, 410, 408, 1, 0, 0, 0, 411, 412, 5, 39, 0, 0, 412, 413, 5, 39, 0, 0, 413, 465, 5, 39, 0, 0, 414, 415, 3, 83, 41, 0, 415, 419, 5, 34, 0, 0, 416, 418, 8, 13, 0, 0, 417, 416, 1, 0, 0, 0, 418, 421, 1, 0, 0, 0, 419, 417, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 422, 1, 0, 0, 0, 421, 419, 1, 0, 0, 0, 422, 423, 5, 34, 0, 0, 423, 465, 1, 0, 0, 0, 424, 425, 3, 83, 41, 0, 425, 429, 5, 39, 0, 0, 426, 428, 8, 14, 0, 0, 427, 426, 1, 0, 0, 0, 428, 431, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 432, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 432, 433, 5, 39, 0, 0, 433, 465, 1, 0, 0, 0, 434, 435, 3, 83, 41, 0, 435, 436, 5, 34, 0, 0, 436, 437, 5, 34, 0, 0, 437, 438, 5, 34, 0, 0, 438, 442, 1, 0, 0, 0, 439, 441, 9, 0, 0, 0, 440, 439, 1, 0, 0, 0, 441, 444, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 443, 445, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 445, 446, 5, 34, 0, 0, 446, 447, 5, 34, 0, 0, 447, 448, 5, 34, 0, 0, 448, 465, 1, 0, 0, 0, 449, 450, 3, 83, 41, 0, 450, 451, 5, 39, 0, 0, 451, 452, 5, 39, 0, 0, 452, 453, 5, 39, 0, 0, 453, 457, 1, 0, 0, 0, 454, 456, 9, 0, 0, 0, 455, 454, 1, 0, 0, 0, 456, 459, 1, 0, 0, 0, 457, 458, 1, 0, 0, 0, 457, 455, 1, 0, 0, 0, 458, 460, 1, 0, 0, 0, 459, 457, 1, 0, 0, 0, 460, 461, 5, 39, 0, 0, 461, 462, 5, 39, 0, 0, 462, 463, 5, 39, 0, 0, 463, 465, 1, 0, 0, 0, 464, 368, 1, 0, 0, 0, 464, 377, 1, 0, 0, 0, 464, 386, 1, 0, 0, 0, 464, 400, 1, 0, 0, 0, 464, 414, 1, 0, 0, 0, 464, 424, 1, 0, 0, 0, 464, 434, 1, 0, 0, 0, 464, 449, 1, 0, 0, 0, 465, 106, 1, 0, 0, 0, 466, 467, 7, 15, 0, 0, 467, 468, 3, 105, 52, 0, 468, 108, 1, 0, 0, 0, 469, 472, 3, 75, 37, 0, 470, 472, 5, 95, 0, 0, 471, 469, 1, 0, 0, 0, 471, 470, 1, 0, 0, 0, 472, 478, 1, 0, 0, 0, 473, 477, 3, 75, 37, 0, 474, 477, 3, 77, 38, 0, 475, 477, 5, 95, 0, 0, 476, 473, 1, 0, 0, 0, 476, 474, 1, 0, 0, 0, 476, 475, 1, 0, 0, 0, 477, 480, 1, 0, 0, 0, 478, 476, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 110, 1, 0, 0, 0, 480, 478, 1, 0, 0, 0, 37, 0, 143, 234, 239, 249, 282, 287, 297, 305, 311, 314, 319, 327, 330, 332, 337, 345, 347, 352, 362, 366, 371, 373, 380, 382, 392, 394, 406, 408, 419, 429, 442, 457, 464, 471, 476, 478, 1, 0, 1, 0] \ No newline at end of file +[4, 0, 47, 505, 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, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 3, 8, 168, 8, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 3, 42, 259, 8, 42, 1, 42, 4, 42, 262, 8, 42, 11, 42, 12, 42, 263, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 274, 8, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 307, 8, 49, 1, 50, 4, 50, 310, 8, 50, 11, 50, 12, 50, 311, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 5, 51, 320, 8, 51, 10, 51, 12, 51, 323, 9, 51, 1, 51, 1, 51, 1, 52, 4, 52, 328, 8, 52, 11, 52, 12, 52, 329, 1, 52, 1, 52, 4, 52, 334, 8, 52, 11, 52, 12, 52, 335, 1, 52, 3, 52, 339, 8, 52, 1, 52, 4, 52, 342, 8, 52, 11, 52, 12, 52, 343, 1, 52, 1, 52, 1, 52, 1, 52, 4, 52, 350, 8, 52, 11, 52, 12, 52, 351, 1, 52, 3, 52, 355, 8, 52, 3, 52, 357, 8, 52, 1, 53, 4, 53, 360, 8, 53, 11, 53, 12, 53, 361, 1, 53, 1, 53, 1, 53, 1, 53, 4, 53, 368, 8, 53, 11, 53, 12, 53, 369, 3, 53, 372, 8, 53, 1, 54, 4, 54, 375, 8, 54, 11, 54, 12, 54, 376, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 4, 54, 385, 8, 54, 11, 54, 12, 54, 386, 1, 54, 1, 54, 3, 54, 391, 8, 54, 1, 55, 1, 55, 1, 55, 5, 55, 396, 8, 55, 10, 55, 12, 55, 399, 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 405, 8, 55, 10, 55, 12, 55, 408, 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 417, 8, 55, 10, 55, 12, 55, 420, 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 431, 8, 55, 10, 55, 12, 55, 434, 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 442, 8, 55, 10, 55, 12, 55, 445, 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 452, 8, 55, 10, 55, 12, 55, 455, 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 465, 8, 55, 10, 55, 12, 55, 468, 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 480, 8, 55, 10, 55, 12, 55, 483, 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 489, 8, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 3, 57, 496, 8, 57, 1, 57, 1, 57, 1, 57, 5, 57, 501, 8, 57, 10, 57, 12, 57, 504, 9, 57, 4, 418, 432, 466, 481, 0, 58, 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, 0, 81, 0, 83, 0, 85, 0, 87, 0, 89, 0, 91, 0, 93, 0, 95, 0, 97, 0, 99, 0, 101, 40, 103, 41, 105, 42, 107, 43, 109, 44, 111, 45, 113, 46, 115, 47, 1, 0, 16, 2, 0, 65, 90, 97, 122, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 82, 82, 114, 114, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 96, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 88, 88, 120, 120, 3, 0, 9, 10, 12, 13, 32, 32, 1, 0, 10, 10, 2, 0, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 1, 0, 92, 92, 3, 0, 10, 10, 13, 13, 34, 34, 3, 0, 10, 10, 13, 13, 39, 39, 2, 0, 66, 66, 98, 98, 539, 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, 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, 1, 117, 1, 0, 0, 0, 3, 123, 1, 0, 0, 0, 5, 126, 1, 0, 0, 0, 7, 131, 1, 0, 0, 0, 9, 140, 1, 0, 0, 0, 11, 148, 1, 0, 0, 0, 13, 157, 1, 0, 0, 0, 15, 163, 1, 0, 0, 0, 17, 167, 1, 0, 0, 0, 19, 172, 1, 0, 0, 0, 21, 175, 1, 0, 0, 0, 23, 177, 1, 0, 0, 0, 25, 180, 1, 0, 0, 0, 27, 183, 1, 0, 0, 0, 29, 186, 1, 0, 0, 0, 31, 188, 1, 0, 0, 0, 33, 191, 1, 0, 0, 0, 35, 194, 1, 0, 0, 0, 37, 196, 1, 0, 0, 0, 39, 199, 1, 0, 0, 0, 41, 202, 1, 0, 0, 0, 43, 204, 1, 0, 0, 0, 45, 206, 1, 0, 0, 0, 47, 208, 1, 0, 0, 0, 49, 210, 1, 0, 0, 0, 51, 212, 1, 0, 0, 0, 53, 214, 1, 0, 0, 0, 55, 216, 1, 0, 0, 0, 57, 218, 1, 0, 0, 0, 59, 220, 1, 0, 0, 0, 61, 222, 1, 0, 0, 0, 63, 224, 1, 0, 0, 0, 65, 226, 1, 0, 0, 0, 67, 228, 1, 0, 0, 0, 69, 230, 1, 0, 0, 0, 71, 232, 1, 0, 0, 0, 73, 234, 1, 0, 0, 0, 75, 239, 1, 0, 0, 0, 77, 245, 1, 0, 0, 0, 79, 250, 1, 0, 0, 0, 81, 252, 1, 0, 0, 0, 83, 254, 1, 0, 0, 0, 85, 256, 1, 0, 0, 0, 87, 265, 1, 0, 0, 0, 89, 267, 1, 0, 0, 0, 91, 273, 1, 0, 0, 0, 93, 275, 1, 0, 0, 0, 95, 278, 1, 0, 0, 0, 97, 283, 1, 0, 0, 0, 99, 306, 1, 0, 0, 0, 101, 309, 1, 0, 0, 0, 103, 315, 1, 0, 0, 0, 105, 356, 1, 0, 0, 0, 107, 371, 1, 0, 0, 0, 109, 390, 1, 0, 0, 0, 111, 488, 1, 0, 0, 0, 113, 490, 1, 0, 0, 0, 115, 495, 1, 0, 0, 0, 117, 118, 5, 37, 0, 0, 118, 119, 5, 104, 0, 0, 119, 120, 5, 101, 0, 0, 120, 121, 5, 108, 0, 0, 121, 122, 5, 112, 0, 0, 122, 2, 1, 0, 0, 0, 123, 124, 5, 37, 0, 0, 124, 125, 5, 63, 0, 0, 125, 4, 1, 0, 0, 0, 126, 127, 5, 37, 0, 0, 127, 128, 5, 108, 0, 0, 128, 129, 5, 101, 0, 0, 129, 130, 5, 116, 0, 0, 130, 6, 1, 0, 0, 0, 131, 132, 5, 37, 0, 0, 132, 133, 5, 100, 0, 0, 133, 134, 5, 101, 0, 0, 134, 135, 5, 99, 0, 0, 135, 136, 5, 108, 0, 0, 136, 137, 5, 97, 0, 0, 137, 138, 5, 114, 0, 0, 138, 139, 5, 101, 0, 0, 139, 8, 1, 0, 0, 0, 140, 141, 5, 37, 0, 0, 141, 142, 5, 100, 0, 0, 142, 143, 5, 101, 0, 0, 143, 144, 5, 108, 0, 0, 144, 145, 5, 101, 0, 0, 145, 146, 5, 116, 0, 0, 146, 147, 5, 101, 0, 0, 147, 10, 1, 0, 0, 0, 148, 149, 5, 37, 0, 0, 149, 150, 5, 99, 0, 0, 150, 151, 5, 111, 0, 0, 151, 152, 5, 109, 0, 0, 152, 153, 5, 112, 0, 0, 153, 154, 5, 105, 0, 0, 154, 155, 5, 108, 0, 0, 155, 156, 5, 101, 0, 0, 156, 12, 1, 0, 0, 0, 157, 158, 5, 37, 0, 0, 158, 159, 5, 101, 0, 0, 159, 160, 5, 118, 0, 0, 160, 161, 5, 97, 0, 0, 161, 162, 5, 108, 0, 0, 162, 14, 1, 0, 0, 0, 163, 164, 5, 37, 0, 0, 164, 165, 3, 115, 57, 0, 165, 16, 1, 0, 0, 0, 166, 168, 5, 45, 0, 0, 167, 166, 1, 0, 0, 0, 167, 168, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 170, 5, 45, 0, 0, 170, 171, 3, 115, 57, 0, 171, 18, 1, 0, 0, 0, 172, 173, 5, 45, 0, 0, 173, 174, 5, 62, 0, 0, 174, 20, 1, 0, 0, 0, 175, 176, 5, 61, 0, 0, 176, 22, 1, 0, 0, 0, 177, 178, 5, 61, 0, 0, 178, 179, 5, 61, 0, 0, 179, 24, 1, 0, 0, 0, 180, 181, 5, 33, 0, 0, 181, 182, 5, 61, 0, 0, 182, 26, 1, 0, 0, 0, 183, 184, 5, 105, 0, 0, 184, 185, 5, 110, 0, 0, 185, 28, 1, 0, 0, 0, 186, 187, 5, 60, 0, 0, 187, 30, 1, 0, 0, 0, 188, 189, 5, 60, 0, 0, 189, 190, 5, 61, 0, 0, 190, 32, 1, 0, 0, 0, 191, 192, 5, 62, 0, 0, 192, 193, 5, 61, 0, 0, 193, 34, 1, 0, 0, 0, 194, 195, 5, 62, 0, 0, 195, 36, 1, 0, 0, 0, 196, 197, 5, 38, 0, 0, 197, 198, 5, 38, 0, 0, 198, 38, 1, 0, 0, 0, 199, 200, 5, 124, 0, 0, 200, 201, 5, 124, 0, 0, 201, 40, 1, 0, 0, 0, 202, 203, 5, 91, 0, 0, 203, 42, 1, 0, 0, 0, 204, 205, 5, 93, 0, 0, 205, 44, 1, 0, 0, 0, 206, 207, 5, 123, 0, 0, 207, 46, 1, 0, 0, 0, 208, 209, 5, 125, 0, 0, 209, 48, 1, 0, 0, 0, 210, 211, 5, 40, 0, 0, 211, 50, 1, 0, 0, 0, 212, 213, 5, 41, 0, 0, 213, 52, 1, 0, 0, 0, 214, 215, 5, 46, 0, 0, 215, 54, 1, 0, 0, 0, 216, 217, 5, 44, 0, 0, 217, 56, 1, 0, 0, 0, 218, 219, 5, 45, 0, 0, 219, 58, 1, 0, 0, 0, 220, 221, 5, 33, 0, 0, 221, 60, 1, 0, 0, 0, 222, 223, 5, 63, 0, 0, 223, 62, 1, 0, 0, 0, 224, 225, 5, 58, 0, 0, 225, 64, 1, 0, 0, 0, 226, 227, 5, 43, 0, 0, 227, 66, 1, 0, 0, 0, 228, 229, 5, 42, 0, 0, 229, 68, 1, 0, 0, 0, 230, 231, 5, 47, 0, 0, 231, 70, 1, 0, 0, 0, 232, 233, 5, 37, 0, 0, 233, 72, 1, 0, 0, 0, 234, 235, 5, 116, 0, 0, 235, 236, 5, 114, 0, 0, 236, 237, 5, 117, 0, 0, 237, 238, 5, 101, 0, 0, 238, 74, 1, 0, 0, 0, 239, 240, 5, 102, 0, 0, 240, 241, 5, 97, 0, 0, 241, 242, 5, 108, 0, 0, 242, 243, 5, 115, 0, 0, 243, 244, 5, 101, 0, 0, 244, 76, 1, 0, 0, 0, 245, 246, 5, 110, 0, 0, 246, 247, 5, 117, 0, 0, 247, 248, 5, 108, 0, 0, 248, 249, 5, 108, 0, 0, 249, 78, 1, 0, 0, 0, 250, 251, 5, 92, 0, 0, 251, 80, 1, 0, 0, 0, 252, 253, 7, 0, 0, 0, 253, 82, 1, 0, 0, 0, 254, 255, 2, 48, 57, 0, 255, 84, 1, 0, 0, 0, 256, 258, 7, 1, 0, 0, 257, 259, 7, 2, 0, 0, 258, 257, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 261, 1, 0, 0, 0, 260, 262, 3, 83, 41, 0, 261, 260, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 261, 1, 0, 0, 0, 263, 264, 1, 0, 0, 0, 264, 86, 1, 0, 0, 0, 265, 266, 7, 3, 0, 0, 266, 88, 1, 0, 0, 0, 267, 268, 7, 4, 0, 0, 268, 90, 1, 0, 0, 0, 269, 274, 3, 93, 46, 0, 270, 274, 3, 97, 48, 0, 271, 274, 3, 99, 49, 0, 272, 274, 3, 95, 47, 0, 273, 269, 1, 0, 0, 0, 273, 270, 1, 0, 0, 0, 273, 271, 1, 0, 0, 0, 273, 272, 1, 0, 0, 0, 274, 92, 1, 0, 0, 0, 275, 276, 3, 79, 39, 0, 276, 277, 7, 5, 0, 0, 277, 94, 1, 0, 0, 0, 278, 279, 3, 79, 39, 0, 279, 280, 2, 48, 51, 0, 280, 281, 2, 48, 55, 0, 281, 282, 2, 48, 55, 0, 282, 96, 1, 0, 0, 0, 283, 284, 3, 79, 39, 0, 284, 285, 7, 6, 0, 0, 285, 286, 3, 87, 43, 0, 286, 287, 3, 87, 43, 0, 287, 98, 1, 0, 0, 0, 288, 289, 3, 79, 39, 0, 289, 290, 5, 117, 0, 0, 290, 291, 3, 87, 43, 0, 291, 292, 3, 87, 43, 0, 292, 293, 3, 87, 43, 0, 293, 294, 3, 87, 43, 0, 294, 307, 1, 0, 0, 0, 295, 296, 3, 79, 39, 0, 296, 297, 5, 85, 0, 0, 297, 298, 3, 87, 43, 0, 298, 299, 3, 87, 43, 0, 299, 300, 3, 87, 43, 0, 300, 301, 3, 87, 43, 0, 301, 302, 3, 87, 43, 0, 302, 303, 3, 87, 43, 0, 303, 304, 3, 87, 43, 0, 304, 305, 3, 87, 43, 0, 305, 307, 1, 0, 0, 0, 306, 288, 1, 0, 0, 0, 306, 295, 1, 0, 0, 0, 307, 100, 1, 0, 0, 0, 308, 310, 7, 7, 0, 0, 309, 308, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 309, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 314, 6, 50, 0, 0, 314, 102, 1, 0, 0, 0, 315, 316, 5, 47, 0, 0, 316, 317, 5, 47, 0, 0, 317, 321, 1, 0, 0, 0, 318, 320, 8, 8, 0, 0, 319, 318, 1, 0, 0, 0, 320, 323, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 324, 1, 0, 0, 0, 323, 321, 1, 0, 0, 0, 324, 325, 6, 51, 0, 0, 325, 104, 1, 0, 0, 0, 326, 328, 3, 83, 41, 0, 327, 326, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 329, 330, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 5, 46, 0, 0, 332, 334, 3, 83, 41, 0, 333, 332, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 333, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 338, 1, 0, 0, 0, 337, 339, 3, 85, 42, 0, 338, 337, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 357, 1, 0, 0, 0, 340, 342, 3, 83, 41, 0, 341, 340, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 341, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 346, 3, 85, 42, 0, 346, 357, 1, 0, 0, 0, 347, 349, 5, 46, 0, 0, 348, 350, 3, 83, 41, 0, 349, 348, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 349, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 354, 1, 0, 0, 0, 353, 355, 3, 85, 42, 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 357, 1, 0, 0, 0, 356, 327, 1, 0, 0, 0, 356, 341, 1, 0, 0, 0, 356, 347, 1, 0, 0, 0, 357, 106, 1, 0, 0, 0, 358, 360, 3, 83, 41, 0, 359, 358, 1, 0, 0, 0, 360, 361, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 372, 1, 0, 0, 0, 363, 364, 5, 48, 0, 0, 364, 365, 5, 120, 0, 0, 365, 367, 1, 0, 0, 0, 366, 368, 3, 87, 43, 0, 367, 366, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 372, 1, 0, 0, 0, 371, 359, 1, 0, 0, 0, 371, 363, 1, 0, 0, 0, 372, 108, 1, 0, 0, 0, 373, 375, 3, 83, 41, 0, 374, 373, 1, 0, 0, 0, 375, 376, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 378, 1, 0, 0, 0, 378, 379, 7, 9, 0, 0, 379, 391, 1, 0, 0, 0, 380, 381, 5, 48, 0, 0, 381, 382, 5, 120, 0, 0, 382, 384, 1, 0, 0, 0, 383, 385, 3, 87, 43, 0, 384, 383, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 384, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 388, 1, 0, 0, 0, 388, 389, 7, 9, 0, 0, 389, 391, 1, 0, 0, 0, 390, 374, 1, 0, 0, 0, 390, 380, 1, 0, 0, 0, 391, 110, 1, 0, 0, 0, 392, 397, 5, 34, 0, 0, 393, 396, 3, 91, 45, 0, 394, 396, 8, 10, 0, 0, 395, 393, 1, 0, 0, 0, 395, 394, 1, 0, 0, 0, 396, 399, 1, 0, 0, 0, 397, 395, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 400, 1, 0, 0, 0, 399, 397, 1, 0, 0, 0, 400, 489, 5, 34, 0, 0, 401, 406, 5, 39, 0, 0, 402, 405, 3, 91, 45, 0, 403, 405, 8, 11, 0, 0, 404, 402, 1, 0, 0, 0, 404, 403, 1, 0, 0, 0, 405, 408, 1, 0, 0, 0, 406, 404, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 409, 1, 0, 0, 0, 408, 406, 1, 0, 0, 0, 409, 489, 5, 39, 0, 0, 410, 411, 5, 34, 0, 0, 411, 412, 5, 34, 0, 0, 412, 413, 5, 34, 0, 0, 413, 418, 1, 0, 0, 0, 414, 417, 3, 91, 45, 0, 415, 417, 8, 12, 0, 0, 416, 414, 1, 0, 0, 0, 416, 415, 1, 0, 0, 0, 417, 420, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 418, 416, 1, 0, 0, 0, 419, 421, 1, 0, 0, 0, 420, 418, 1, 0, 0, 0, 421, 422, 5, 34, 0, 0, 422, 423, 5, 34, 0, 0, 423, 489, 5, 34, 0, 0, 424, 425, 5, 39, 0, 0, 425, 426, 5, 39, 0, 0, 426, 427, 5, 39, 0, 0, 427, 432, 1, 0, 0, 0, 428, 431, 3, 91, 45, 0, 429, 431, 8, 12, 0, 0, 430, 428, 1, 0, 0, 0, 430, 429, 1, 0, 0, 0, 431, 434, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 432, 430, 1, 0, 0, 0, 433, 435, 1, 0, 0, 0, 434, 432, 1, 0, 0, 0, 435, 436, 5, 39, 0, 0, 436, 437, 5, 39, 0, 0, 437, 489, 5, 39, 0, 0, 438, 439, 3, 89, 44, 0, 439, 443, 5, 34, 0, 0, 440, 442, 8, 13, 0, 0, 441, 440, 1, 0, 0, 0, 442, 445, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 443, 444, 1, 0, 0, 0, 444, 446, 1, 0, 0, 0, 445, 443, 1, 0, 0, 0, 446, 447, 5, 34, 0, 0, 447, 489, 1, 0, 0, 0, 448, 449, 3, 89, 44, 0, 449, 453, 5, 39, 0, 0, 450, 452, 8, 14, 0, 0, 451, 450, 1, 0, 0, 0, 452, 455, 1, 0, 0, 0, 453, 451, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 456, 1, 0, 0, 0, 455, 453, 1, 0, 0, 0, 456, 457, 5, 39, 0, 0, 457, 489, 1, 0, 0, 0, 458, 459, 3, 89, 44, 0, 459, 460, 5, 34, 0, 0, 460, 461, 5, 34, 0, 0, 461, 462, 5, 34, 0, 0, 462, 466, 1, 0, 0, 0, 463, 465, 9, 0, 0, 0, 464, 463, 1, 0, 0, 0, 465, 468, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 466, 464, 1, 0, 0, 0, 467, 469, 1, 0, 0, 0, 468, 466, 1, 0, 0, 0, 469, 470, 5, 34, 0, 0, 470, 471, 5, 34, 0, 0, 471, 472, 5, 34, 0, 0, 472, 489, 1, 0, 0, 0, 473, 474, 3, 89, 44, 0, 474, 475, 5, 39, 0, 0, 475, 476, 5, 39, 0, 0, 476, 477, 5, 39, 0, 0, 477, 481, 1, 0, 0, 0, 478, 480, 9, 0, 0, 0, 479, 478, 1, 0, 0, 0, 480, 483, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 481, 479, 1, 0, 0, 0, 482, 484, 1, 0, 0, 0, 483, 481, 1, 0, 0, 0, 484, 485, 5, 39, 0, 0, 485, 486, 5, 39, 0, 0, 486, 487, 5, 39, 0, 0, 487, 489, 1, 0, 0, 0, 488, 392, 1, 0, 0, 0, 488, 401, 1, 0, 0, 0, 488, 410, 1, 0, 0, 0, 488, 424, 1, 0, 0, 0, 488, 438, 1, 0, 0, 0, 488, 448, 1, 0, 0, 0, 488, 458, 1, 0, 0, 0, 488, 473, 1, 0, 0, 0, 489, 112, 1, 0, 0, 0, 490, 491, 7, 15, 0, 0, 491, 492, 3, 111, 55, 0, 492, 114, 1, 0, 0, 0, 493, 496, 3, 81, 40, 0, 494, 496, 5, 95, 0, 0, 495, 493, 1, 0, 0, 0, 495, 494, 1, 0, 0, 0, 496, 502, 1, 0, 0, 0, 497, 501, 3, 81, 40, 0, 498, 501, 3, 83, 41, 0, 499, 501, 5, 95, 0, 0, 500, 497, 1, 0, 0, 0, 500, 498, 1, 0, 0, 0, 500, 499, 1, 0, 0, 0, 501, 504, 1, 0, 0, 0, 502, 500, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 116, 1, 0, 0, 0, 504, 502, 1, 0, 0, 0, 37, 0, 167, 258, 263, 273, 306, 311, 321, 329, 335, 338, 343, 351, 354, 356, 361, 369, 371, 376, 386, 390, 395, 397, 404, 406, 416, 418, 430, 432, 443, 453, 466, 481, 488, 495, 500, 502, 1, 0, 1, 0] \ No newline at end of file diff --git a/repl/parser/CommandsLexer.tokens b/repl/parser/CommandsLexer.tokens index 7cdeb421..86c6bdb6 100644 --- a/repl/parser/CommandsLexer.tokens +++ b/repl/parser/CommandsLexer.tokens @@ -2,77 +2,83 @@ T__0=1 T__1=2 T__2=3 T__3=4 -COMMAND=5 -FLAG=6 -ARROW=7 -EQUAL_ASSIGN=8 -EQUALS=9 -NOT_EQUALS=10 -IN=11 -LESS=12 -LESS_EQUALS=13 -GREATER_EQUALS=14 -GREATER=15 -LOGICAL_AND=16 -LOGICAL_OR=17 -LBRACKET=18 -RPRACKET=19 -LBRACE=20 -RBRACE=21 -LPAREN=22 -RPAREN=23 -DOT=24 -COMMA=25 -MINUS=26 -EXCLAM=27 -QUESTIONMARK=28 -COLON=29 -PLUS=30 -STAR=31 -SLASH=32 -PERCENT=33 -CEL_TRUE=34 -CEL_FALSE=35 -NUL=36 -WHITESPACE=37 -COMMENT=38 -NUM_FLOAT=39 -NUM_INT=40 -NUM_UINT=41 -STRING=42 -BYTES=43 -IDENTIFIER=44 -'%let'=1 -'%declare'=2 -'%delete'=3 -'%eval'=4 -'->'=7 -'='=8 -'=='=9 -'!='=10 -'in'=11 -'<'=12 -'<='=13 -'>='=14 -'>'=15 -'&&'=16 -'||'=17 -'['=18 -']'=19 -'{'=20 -'}'=21 -'('=22 -')'=23 -'.'=24 -','=25 -'-'=26 -'!'=27 -'?'=28 -':'=29 -'+'=30 -'*'=31 -'/'=32 -'%'=33 -'true'=34 -'false'=35 -'null'=36 +T__4=5 +T__5=6 +T__6=7 +COMMAND=8 +FLAG=9 +ARROW=10 +EQUAL_ASSIGN=11 +EQUALS=12 +NOT_EQUALS=13 +IN=14 +LESS=15 +LESS_EQUALS=16 +GREATER_EQUALS=17 +GREATER=18 +LOGICAL_AND=19 +LOGICAL_OR=20 +LBRACKET=21 +RPRACKET=22 +LBRACE=23 +RBRACE=24 +LPAREN=25 +RPAREN=26 +DOT=27 +COMMA=28 +MINUS=29 +EXCLAM=30 +QUESTIONMARK=31 +COLON=32 +PLUS=33 +STAR=34 +SLASH=35 +PERCENT=36 +CEL_TRUE=37 +CEL_FALSE=38 +NUL=39 +WHITESPACE=40 +COMMENT=41 +NUM_FLOAT=42 +NUM_INT=43 +NUM_UINT=44 +STRING=45 +BYTES=46 +IDENTIFIER=47 +'%help'=1 +'%?'=2 +'%let'=3 +'%declare'=4 +'%delete'=5 +'%compile'=6 +'%eval'=7 +'->'=10 +'='=11 +'=='=12 +'!='=13 +'in'=14 +'<'=15 +'<='=16 +'>='=17 +'>'=18 +'&&'=19 +'||'=20 +'['=21 +']'=22 +'{'=23 +'}'=24 +'('=25 +')'=26 +'.'=27 +','=28 +'-'=29 +'!'=30 +'?'=31 +':'=32 +'+'=33 +'*'=34 +'/'=35 +'%'=36 +'true'=37 +'false'=38 +'null'=39 diff --git a/repl/parser/commands_base_listener.go b/repl/parser/commands_base_listener.go index 8879f395..68372a5e 100644 --- a/repl/parser/commands_base_listener.go +++ b/repl/parser/commands_base_listener.go @@ -32,6 +32,12 @@ func (s *BaseCommandsListener) EnterCommand(ctx *CommandContext) {} // ExitCommand is called when production command is exited. func (s *BaseCommandsListener) ExitCommand(ctx *CommandContext) {} +// EnterHelp is called when production help is entered. +func (s *BaseCommandsListener) EnterHelp(ctx *HelpContext) {} + +// ExitHelp is called when production help is exited. +func (s *BaseCommandsListener) ExitHelp(ctx *HelpContext) {} + // EnterLet is called when production let is entered. func (s *BaseCommandsListener) EnterLet(ctx *LetContext) {} @@ -80,6 +86,12 @@ func (s *BaseCommandsListener) EnterEmpty(ctx *EmptyContext) {} // ExitEmpty is called when production empty is exited. func (s *BaseCommandsListener) ExitEmpty(ctx *EmptyContext) {} +// EnterCompile is called when production compile is entered. +func (s *BaseCommandsListener) EnterCompile(ctx *CompileContext) {} + +// ExitCompile is called when production compile is exited. +func (s *BaseCommandsListener) ExitCompile(ctx *CompileContext) {} + // EnterExprCmd is called when production exprCmd is entered. func (s *BaseCommandsListener) EnterExprCmd(ctx *ExprCmdContext) {} diff --git a/repl/parser/commands_base_visitor.go b/repl/parser/commands_base_visitor.go index ddd3bf48..375b7b3a 100644 --- a/repl/parser/commands_base_visitor.go +++ b/repl/parser/commands_base_visitor.go @@ -15,6 +15,10 @@ func (v *BaseCommandsVisitor) VisitCommand(ctx *CommandContext) interface{} { return v.VisitChildren(ctx) } +func (v *BaseCommandsVisitor) VisitHelp(ctx *HelpContext) interface{} { + return v.VisitChildren(ctx) +} + func (v *BaseCommandsVisitor) VisitLet(ctx *LetContext) interface{} { return v.VisitChildren(ctx) } @@ -47,6 +51,10 @@ func (v *BaseCommandsVisitor) VisitEmpty(ctx *EmptyContext) interface{} { return v.VisitChildren(ctx) } +func (v *BaseCommandsVisitor) VisitCompile(ctx *CompileContext) interface{} { + return v.VisitChildren(ctx) +} + func (v *BaseCommandsVisitor) VisitExprCmd(ctx *ExprCmdContext) interface{} { return v.VisitChildren(ctx) } diff --git a/repl/parser/commands_lexer.go b/repl/parser/commands_lexer.go index 516f6131..6b6bf668 100644 --- a/repl/parser/commands_lexer.go +++ b/repl/parser/commands_lexer.go @@ -44,35 +44,35 @@ func commandslexerLexerInit() { "DEFAULT_MODE", } staticData.literalNames = []string{ - "", "'%let'", "'%declare'", "'%delete'", "'%eval'", "", "", "'->'", - "'='", "'=='", "'!='", "'in'", "'<'", "'<='", "'>='", "'>'", "'&&'", - "'||'", "'['", "']'", "'{'", "'}'", "'('", "')'", "'.'", "','", "'-'", - "'!'", "'?'", "':'", "'+'", "'*'", "'/'", "'%'", "'true'", "'false'", - "'null'", + "", "'%help'", "'%?'", "'%let'", "'%declare'", "'%delete'", "'%compile'", + "'%eval'", "", "", "'->'", "'='", "'=='", "'!='", "'in'", "'<'", "'<='", + "'>='", "'>'", "'&&'", "'||'", "'['", "']'", "'{'", "'}'", "'('", "')'", + "'.'", "','", "'-'", "'!'", "'?'", "':'", "'+'", "'*'", "'/'", "'%'", + "'true'", "'false'", "'null'", } staticData.symbolicNames = []string{ - "", "", "", "", "", "COMMAND", "FLAG", "ARROW", "EQUAL_ASSIGN", "EQUALS", - "NOT_EQUALS", "IN", "LESS", "LESS_EQUALS", "GREATER_EQUALS", "GREATER", - "LOGICAL_AND", "LOGICAL_OR", "LBRACKET", "RPRACKET", "LBRACE", "RBRACE", - "LPAREN", "RPAREN", "DOT", "COMMA", "MINUS", "EXCLAM", "QUESTIONMARK", + "", "", "", "", "", "", "", "", "COMMAND", "FLAG", "ARROW", "EQUAL_ASSIGN", + "EQUALS", "NOT_EQUALS", "IN", "LESS", "LESS_EQUALS", "GREATER_EQUALS", + "GREATER", "LOGICAL_AND", "LOGICAL_OR", "LBRACKET", "RPRACKET", "LBRACE", + "RBRACE", "LPAREN", "RPAREN", "DOT", "COMMA", "MINUS", "EXCLAM", "QUESTIONMARK", "COLON", "PLUS", "STAR", "SLASH", "PERCENT", "CEL_TRUE", "CEL_FALSE", "NUL", "WHITESPACE", "COMMENT", "NUM_FLOAT", "NUM_INT", "NUM_UINT", "STRING", "BYTES", "IDENTIFIER", } staticData.ruleNames = []string{ - "T__0", "T__1", "T__2", "T__3", "COMMAND", "FLAG", "ARROW", "EQUAL_ASSIGN", - "EQUALS", "NOT_EQUALS", "IN", "LESS", "LESS_EQUALS", "GREATER_EQUALS", - "GREATER", "LOGICAL_AND", "LOGICAL_OR", "LBRACKET", "RPRACKET", "LBRACE", - "RBRACE", "LPAREN", "RPAREN", "DOT", "COMMA", "MINUS", "EXCLAM", "QUESTIONMARK", - "COLON", "PLUS", "STAR", "SLASH", "PERCENT", "CEL_TRUE", "CEL_FALSE", - "NUL", "BACKSLASH", "LETTER", "DIGIT", "EXPONENT", "HEXDIGIT", "RAW", - "ESC_SEQ", "ESC_CHAR_SEQ", "ESC_OCT_SEQ", "ESC_BYTE_SEQ", "ESC_UNI_SEQ", - "WHITESPACE", "COMMENT", "NUM_FLOAT", "NUM_INT", "NUM_UINT", "STRING", - "BYTES", "IDENTIFIER", + "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "COMMAND", "FLAG", + "ARROW", "EQUAL_ASSIGN", "EQUALS", "NOT_EQUALS", "IN", "LESS", "LESS_EQUALS", + "GREATER_EQUALS", "GREATER", "LOGICAL_AND", "LOGICAL_OR", "LBRACKET", + "RPRACKET", "LBRACE", "RBRACE", "LPAREN", "RPAREN", "DOT", "COMMA", + "MINUS", "EXCLAM", "QUESTIONMARK", "COLON", "PLUS", "STAR", "SLASH", + "PERCENT", "CEL_TRUE", "CEL_FALSE", "NUL", "BACKSLASH", "LETTER", "DIGIT", + "EXPONENT", "HEXDIGIT", "RAW", "ESC_SEQ", "ESC_CHAR_SEQ", "ESC_OCT_SEQ", + "ESC_BYTE_SEQ", "ESC_UNI_SEQ", "WHITESPACE", "COMMENT", "NUM_FLOAT", + "NUM_INT", "NUM_UINT", "STRING", "BYTES", "IDENTIFIER", } staticData.predictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 0, 44, 481, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, + 4, 0, 47, 505, 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, @@ -82,219 +82,228 @@ func commandslexerLexerInit() { 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, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, - 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, - 4, 1, 4, 1, 5, 3, 5, 144, 8, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, - 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, - 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, - 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, - 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, - 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, - 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, - 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, - 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 3, 39, 235, 8, - 39, 1, 39, 4, 39, 238, 8, 39, 11, 39, 12, 39, 239, 1, 40, 1, 40, 1, 41, - 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 250, 8, 42, 1, 43, 1, 43, 1, - 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, - 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, - 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 283, 8, 46, - 1, 47, 4, 47, 286, 8, 47, 11, 47, 12, 47, 287, 1, 47, 1, 47, 1, 48, 1, - 48, 1, 48, 1, 48, 5, 48, 296, 8, 48, 10, 48, 12, 48, 299, 9, 48, 1, 48, - 1, 48, 1, 49, 4, 49, 304, 8, 49, 11, 49, 12, 49, 305, 1, 49, 1, 49, 4, - 49, 310, 8, 49, 11, 49, 12, 49, 311, 1, 49, 3, 49, 315, 8, 49, 1, 49, 4, - 49, 318, 8, 49, 11, 49, 12, 49, 319, 1, 49, 1, 49, 1, 49, 1, 49, 4, 49, - 326, 8, 49, 11, 49, 12, 49, 327, 1, 49, 3, 49, 331, 8, 49, 3, 49, 333, - 8, 49, 1, 50, 4, 50, 336, 8, 50, 11, 50, 12, 50, 337, 1, 50, 1, 50, 1, - 50, 1, 50, 4, 50, 344, 8, 50, 11, 50, 12, 50, 345, 3, 50, 348, 8, 50, 1, - 51, 4, 51, 351, 8, 51, 11, 51, 12, 51, 352, 1, 51, 1, 51, 1, 51, 1, 51, - 1, 51, 1, 51, 4, 51, 361, 8, 51, 11, 51, 12, 51, 362, 1, 51, 1, 51, 3, - 51, 367, 8, 51, 1, 52, 1, 52, 1, 52, 5, 52, 372, 8, 52, 10, 52, 12, 52, - 375, 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 381, 8, 52, 10, 52, 12, - 52, 384, 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, - 393, 8, 52, 10, 52, 12, 52, 396, 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, - 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 407, 8, 52, 10, 52, 12, 52, 410, - 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 418, 8, 52, 10, - 52, 12, 52, 421, 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 428, - 8, 52, 10, 52, 12, 52, 431, 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, - 52, 1, 52, 1, 52, 5, 52, 441, 8, 52, 10, 52, 12, 52, 444, 9, 52, 1, 52, - 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 456, - 8, 52, 10, 52, 12, 52, 459, 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 465, - 8, 52, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 3, 54, 472, 8, 54, 1, 54, 1, - 54, 1, 54, 5, 54, 477, 8, 54, 10, 54, 12, 54, 480, 9, 54, 4, 394, 408, - 442, 457, 0, 55, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, + 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, + 7, 57, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, + 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, + 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, + 1, 7, 1, 7, 1, 8, 3, 8, 168, 8, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, + 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, + 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, + 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, + 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, + 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, + 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, + 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, + 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 3, 42, + 259, 8, 42, 1, 42, 4, 42, 262, 8, 42, 11, 42, 12, 42, 263, 1, 43, 1, 43, + 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 274, 8, 45, 1, 46, 1, + 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, + 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, + 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 307, + 8, 49, 1, 50, 4, 50, 310, 8, 50, 11, 50, 12, 50, 311, 1, 50, 1, 50, 1, + 51, 1, 51, 1, 51, 1, 51, 5, 51, 320, 8, 51, 10, 51, 12, 51, 323, 9, 51, + 1, 51, 1, 51, 1, 52, 4, 52, 328, 8, 52, 11, 52, 12, 52, 329, 1, 52, 1, + 52, 4, 52, 334, 8, 52, 11, 52, 12, 52, 335, 1, 52, 3, 52, 339, 8, 52, 1, + 52, 4, 52, 342, 8, 52, 11, 52, 12, 52, 343, 1, 52, 1, 52, 1, 52, 1, 52, + 4, 52, 350, 8, 52, 11, 52, 12, 52, 351, 1, 52, 3, 52, 355, 8, 52, 3, 52, + 357, 8, 52, 1, 53, 4, 53, 360, 8, 53, 11, 53, 12, 53, 361, 1, 53, 1, 53, + 1, 53, 1, 53, 4, 53, 368, 8, 53, 11, 53, 12, 53, 369, 3, 53, 372, 8, 53, + 1, 54, 4, 54, 375, 8, 54, 11, 54, 12, 54, 376, 1, 54, 1, 54, 1, 54, 1, + 54, 1, 54, 1, 54, 4, 54, 385, 8, 54, 11, 54, 12, 54, 386, 1, 54, 1, 54, + 3, 54, 391, 8, 54, 1, 55, 1, 55, 1, 55, 5, 55, 396, 8, 55, 10, 55, 12, + 55, 399, 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 405, 8, 55, 10, 55, + 12, 55, 408, 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, + 55, 417, 8, 55, 10, 55, 12, 55, 420, 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, + 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 431, 8, 55, 10, 55, 12, 55, 434, + 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 442, 8, 55, 10, + 55, 12, 55, 445, 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 452, + 8, 55, 10, 55, 12, 55, 455, 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, + 55, 1, 55, 1, 55, 5, 55, 465, 8, 55, 10, 55, 12, 55, 468, 9, 55, 1, 55, + 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 480, + 8, 55, 10, 55, 12, 55, 483, 9, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 489, + 8, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 3, 57, 496, 8, 57, 1, 57, 1, + 57, 1, 57, 5, 57, 501, 8, 57, 10, 57, 12, 57, 504, 9, 57, 4, 418, 432, + 466, 481, 0, 58, 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, 0, 75, 0, 77, 0, 79, 0, 81, 0, 83, 0, 85, 0, 87, 0, 89, 0, 91, - 0, 93, 0, 95, 37, 97, 38, 99, 39, 101, 40, 103, 41, 105, 42, 107, 43, 109, - 44, 1, 0, 16, 2, 0, 65, 90, 97, 122, 2, 0, 69, 69, 101, 101, 2, 0, 43, - 43, 45, 45, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 82, 82, 114, 114, 10, - 0, 34, 34, 39, 39, 63, 63, 92, 92, 96, 98, 102, 102, 110, 110, 114, 114, - 116, 116, 118, 118, 2, 0, 88, 88, 120, 120, 3, 0, 9, 10, 12, 13, 32, 32, - 1, 0, 10, 10, 2, 0, 85, 85, 117, 117, 4, 0, 10, 10, 13, 13, 34, 34, 92, - 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 1, 0, 92, 92, 3, 0, 10, 10, 13, - 13, 34, 34, 3, 0, 10, 10, 13, 13, 39, 39, 2, 0, 66, 66, 98, 98, 515, 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, 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, 1, 111, 1, 0, 0, 0, 3, 116, 1, 0, 0, 0, - 5, 125, 1, 0, 0, 0, 7, 133, 1, 0, 0, 0, 9, 139, 1, 0, 0, 0, 11, 143, 1, - 0, 0, 0, 13, 148, 1, 0, 0, 0, 15, 151, 1, 0, 0, 0, 17, 153, 1, 0, 0, 0, - 19, 156, 1, 0, 0, 0, 21, 159, 1, 0, 0, 0, 23, 162, 1, 0, 0, 0, 25, 164, - 1, 0, 0, 0, 27, 167, 1, 0, 0, 0, 29, 170, 1, 0, 0, 0, 31, 172, 1, 0, 0, - 0, 33, 175, 1, 0, 0, 0, 35, 178, 1, 0, 0, 0, 37, 180, 1, 0, 0, 0, 39, 182, - 1, 0, 0, 0, 41, 184, 1, 0, 0, 0, 43, 186, 1, 0, 0, 0, 45, 188, 1, 0, 0, - 0, 47, 190, 1, 0, 0, 0, 49, 192, 1, 0, 0, 0, 51, 194, 1, 0, 0, 0, 53, 196, - 1, 0, 0, 0, 55, 198, 1, 0, 0, 0, 57, 200, 1, 0, 0, 0, 59, 202, 1, 0, 0, - 0, 61, 204, 1, 0, 0, 0, 63, 206, 1, 0, 0, 0, 65, 208, 1, 0, 0, 0, 67, 210, - 1, 0, 0, 0, 69, 215, 1, 0, 0, 0, 71, 221, 1, 0, 0, 0, 73, 226, 1, 0, 0, - 0, 75, 228, 1, 0, 0, 0, 77, 230, 1, 0, 0, 0, 79, 232, 1, 0, 0, 0, 81, 241, - 1, 0, 0, 0, 83, 243, 1, 0, 0, 0, 85, 249, 1, 0, 0, 0, 87, 251, 1, 0, 0, - 0, 89, 254, 1, 0, 0, 0, 91, 259, 1, 0, 0, 0, 93, 282, 1, 0, 0, 0, 95, 285, - 1, 0, 0, 0, 97, 291, 1, 0, 0, 0, 99, 332, 1, 0, 0, 0, 101, 347, 1, 0, 0, - 0, 103, 366, 1, 0, 0, 0, 105, 464, 1, 0, 0, 0, 107, 466, 1, 0, 0, 0, 109, - 471, 1, 0, 0, 0, 111, 112, 5, 37, 0, 0, 112, 113, 5, 108, 0, 0, 113, 114, - 5, 101, 0, 0, 114, 115, 5, 116, 0, 0, 115, 2, 1, 0, 0, 0, 116, 117, 5, - 37, 0, 0, 117, 118, 5, 100, 0, 0, 118, 119, 5, 101, 0, 0, 119, 120, 5, - 99, 0, 0, 120, 121, 5, 108, 0, 0, 121, 122, 5, 97, 0, 0, 122, 123, 5, 114, - 0, 0, 123, 124, 5, 101, 0, 0, 124, 4, 1, 0, 0, 0, 125, 126, 5, 37, 0, 0, - 126, 127, 5, 100, 0, 0, 127, 128, 5, 101, 0, 0, 128, 129, 5, 108, 0, 0, - 129, 130, 5, 101, 0, 0, 130, 131, 5, 116, 0, 0, 131, 132, 5, 101, 0, 0, - 132, 6, 1, 0, 0, 0, 133, 134, 5, 37, 0, 0, 134, 135, 5, 101, 0, 0, 135, - 136, 5, 118, 0, 0, 136, 137, 5, 97, 0, 0, 137, 138, 5, 108, 0, 0, 138, - 8, 1, 0, 0, 0, 139, 140, 5, 37, 0, 0, 140, 141, 3, 109, 54, 0, 141, 10, - 1, 0, 0, 0, 142, 144, 5, 45, 0, 0, 143, 142, 1, 0, 0, 0, 143, 144, 1, 0, - 0, 0, 144, 145, 1, 0, 0, 0, 145, 146, 5, 45, 0, 0, 146, 147, 3, 109, 54, - 0, 147, 12, 1, 0, 0, 0, 148, 149, 5, 45, 0, 0, 149, 150, 5, 62, 0, 0, 150, - 14, 1, 0, 0, 0, 151, 152, 5, 61, 0, 0, 152, 16, 1, 0, 0, 0, 153, 154, 5, - 61, 0, 0, 154, 155, 5, 61, 0, 0, 155, 18, 1, 0, 0, 0, 156, 157, 5, 33, - 0, 0, 157, 158, 5, 61, 0, 0, 158, 20, 1, 0, 0, 0, 159, 160, 5, 105, 0, - 0, 160, 161, 5, 110, 0, 0, 161, 22, 1, 0, 0, 0, 162, 163, 5, 60, 0, 0, - 163, 24, 1, 0, 0, 0, 164, 165, 5, 60, 0, 0, 165, 166, 5, 61, 0, 0, 166, - 26, 1, 0, 0, 0, 167, 168, 5, 62, 0, 0, 168, 169, 5, 61, 0, 0, 169, 28, - 1, 0, 0, 0, 170, 171, 5, 62, 0, 0, 171, 30, 1, 0, 0, 0, 172, 173, 5, 38, - 0, 0, 173, 174, 5, 38, 0, 0, 174, 32, 1, 0, 0, 0, 175, 176, 5, 124, 0, - 0, 176, 177, 5, 124, 0, 0, 177, 34, 1, 0, 0, 0, 178, 179, 5, 91, 0, 0, - 179, 36, 1, 0, 0, 0, 180, 181, 5, 93, 0, 0, 181, 38, 1, 0, 0, 0, 182, 183, - 5, 123, 0, 0, 183, 40, 1, 0, 0, 0, 184, 185, 5, 125, 0, 0, 185, 42, 1, - 0, 0, 0, 186, 187, 5, 40, 0, 0, 187, 44, 1, 0, 0, 0, 188, 189, 5, 41, 0, - 0, 189, 46, 1, 0, 0, 0, 190, 191, 5, 46, 0, 0, 191, 48, 1, 0, 0, 0, 192, - 193, 5, 44, 0, 0, 193, 50, 1, 0, 0, 0, 194, 195, 5, 45, 0, 0, 195, 52, - 1, 0, 0, 0, 196, 197, 5, 33, 0, 0, 197, 54, 1, 0, 0, 0, 198, 199, 5, 63, - 0, 0, 199, 56, 1, 0, 0, 0, 200, 201, 5, 58, 0, 0, 201, 58, 1, 0, 0, 0, - 202, 203, 5, 43, 0, 0, 203, 60, 1, 0, 0, 0, 204, 205, 5, 42, 0, 0, 205, - 62, 1, 0, 0, 0, 206, 207, 5, 47, 0, 0, 207, 64, 1, 0, 0, 0, 208, 209, 5, - 37, 0, 0, 209, 66, 1, 0, 0, 0, 210, 211, 5, 116, 0, 0, 211, 212, 5, 114, - 0, 0, 212, 213, 5, 117, 0, 0, 213, 214, 5, 101, 0, 0, 214, 68, 1, 0, 0, - 0, 215, 216, 5, 102, 0, 0, 216, 217, 5, 97, 0, 0, 217, 218, 5, 108, 0, - 0, 218, 219, 5, 115, 0, 0, 219, 220, 5, 101, 0, 0, 220, 70, 1, 0, 0, 0, - 221, 222, 5, 110, 0, 0, 222, 223, 5, 117, 0, 0, 223, 224, 5, 108, 0, 0, - 224, 225, 5, 108, 0, 0, 225, 72, 1, 0, 0, 0, 226, 227, 5, 92, 0, 0, 227, - 74, 1, 0, 0, 0, 228, 229, 7, 0, 0, 0, 229, 76, 1, 0, 0, 0, 230, 231, 2, - 48, 57, 0, 231, 78, 1, 0, 0, 0, 232, 234, 7, 1, 0, 0, 233, 235, 7, 2, 0, - 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 1, 0, 0, 0, 236, - 238, 3, 77, 38, 0, 237, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 237, - 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 80, 1, 0, 0, 0, 241, 242, 7, 3, - 0, 0, 242, 82, 1, 0, 0, 0, 243, 244, 7, 4, 0, 0, 244, 84, 1, 0, 0, 0, 245, - 250, 3, 87, 43, 0, 246, 250, 3, 91, 45, 0, 247, 250, 3, 93, 46, 0, 248, - 250, 3, 89, 44, 0, 249, 245, 1, 0, 0, 0, 249, 246, 1, 0, 0, 0, 249, 247, - 1, 0, 0, 0, 249, 248, 1, 0, 0, 0, 250, 86, 1, 0, 0, 0, 251, 252, 3, 73, - 36, 0, 252, 253, 7, 5, 0, 0, 253, 88, 1, 0, 0, 0, 254, 255, 3, 73, 36, - 0, 255, 256, 2, 48, 51, 0, 256, 257, 2, 48, 55, 0, 257, 258, 2, 48, 55, - 0, 258, 90, 1, 0, 0, 0, 259, 260, 3, 73, 36, 0, 260, 261, 7, 6, 0, 0, 261, - 262, 3, 81, 40, 0, 262, 263, 3, 81, 40, 0, 263, 92, 1, 0, 0, 0, 264, 265, - 3, 73, 36, 0, 265, 266, 5, 117, 0, 0, 266, 267, 3, 81, 40, 0, 267, 268, - 3, 81, 40, 0, 268, 269, 3, 81, 40, 0, 269, 270, 3, 81, 40, 0, 270, 283, - 1, 0, 0, 0, 271, 272, 3, 73, 36, 0, 272, 273, 5, 85, 0, 0, 273, 274, 3, - 81, 40, 0, 274, 275, 3, 81, 40, 0, 275, 276, 3, 81, 40, 0, 276, 277, 3, - 81, 40, 0, 277, 278, 3, 81, 40, 0, 278, 279, 3, 81, 40, 0, 279, 280, 3, - 81, 40, 0, 280, 281, 3, 81, 40, 0, 281, 283, 1, 0, 0, 0, 282, 264, 1, 0, - 0, 0, 282, 271, 1, 0, 0, 0, 283, 94, 1, 0, 0, 0, 284, 286, 7, 7, 0, 0, - 285, 284, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 285, 1, 0, 0, 0, 287, - 288, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 290, 6, 47, 0, 0, 290, 96, - 1, 0, 0, 0, 291, 292, 5, 47, 0, 0, 292, 293, 5, 47, 0, 0, 293, 297, 1, - 0, 0, 0, 294, 296, 8, 8, 0, 0, 295, 294, 1, 0, 0, 0, 296, 299, 1, 0, 0, - 0, 297, 295, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 300, 1, 0, 0, 0, 299, - 297, 1, 0, 0, 0, 300, 301, 6, 48, 0, 0, 301, 98, 1, 0, 0, 0, 302, 304, - 3, 77, 38, 0, 303, 302, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 303, 1, - 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 309, 5, 46, 0, - 0, 308, 310, 3, 77, 38, 0, 309, 308, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, - 311, 309, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 314, 1, 0, 0, 0, 313, - 315, 3, 79, 39, 0, 314, 313, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 333, - 1, 0, 0, 0, 316, 318, 3, 77, 38, 0, 317, 316, 1, 0, 0, 0, 318, 319, 1, - 0, 0, 0, 319, 317, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 1, 0, 0, - 0, 321, 322, 3, 79, 39, 0, 322, 333, 1, 0, 0, 0, 323, 325, 5, 46, 0, 0, - 324, 326, 3, 77, 38, 0, 325, 324, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, - 325, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 330, 1, 0, 0, 0, 329, 331, - 3, 79, 39, 0, 330, 329, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, - 0, 0, 0, 332, 303, 1, 0, 0, 0, 332, 317, 1, 0, 0, 0, 332, 323, 1, 0, 0, - 0, 333, 100, 1, 0, 0, 0, 334, 336, 3, 77, 38, 0, 335, 334, 1, 0, 0, 0, - 336, 337, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, - 348, 1, 0, 0, 0, 339, 340, 5, 48, 0, 0, 340, 341, 5, 120, 0, 0, 341, 343, - 1, 0, 0, 0, 342, 344, 3, 81, 40, 0, 343, 342, 1, 0, 0, 0, 344, 345, 1, - 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, - 0, 347, 335, 1, 0, 0, 0, 347, 339, 1, 0, 0, 0, 348, 102, 1, 0, 0, 0, 349, - 351, 3, 77, 38, 0, 350, 349, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 350, - 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 355, 7, 9, - 0, 0, 355, 367, 1, 0, 0, 0, 356, 357, 5, 48, 0, 0, 357, 358, 5, 120, 0, - 0, 358, 360, 1, 0, 0, 0, 359, 361, 3, 81, 40, 0, 360, 359, 1, 0, 0, 0, - 361, 362, 1, 0, 0, 0, 362, 360, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, - 364, 1, 0, 0, 0, 364, 365, 7, 9, 0, 0, 365, 367, 1, 0, 0, 0, 366, 350, - 1, 0, 0, 0, 366, 356, 1, 0, 0, 0, 367, 104, 1, 0, 0, 0, 368, 373, 5, 34, - 0, 0, 369, 372, 3, 85, 42, 0, 370, 372, 8, 10, 0, 0, 371, 369, 1, 0, 0, - 0, 371, 370, 1, 0, 0, 0, 372, 375, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 373, - 374, 1, 0, 0, 0, 374, 376, 1, 0, 0, 0, 375, 373, 1, 0, 0, 0, 376, 465, - 5, 34, 0, 0, 377, 382, 5, 39, 0, 0, 378, 381, 3, 85, 42, 0, 379, 381, 8, - 11, 0, 0, 380, 378, 1, 0, 0, 0, 380, 379, 1, 0, 0, 0, 381, 384, 1, 0, 0, - 0, 382, 380, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 385, 1, 0, 0, 0, 384, - 382, 1, 0, 0, 0, 385, 465, 5, 39, 0, 0, 386, 387, 5, 34, 0, 0, 387, 388, - 5, 34, 0, 0, 388, 389, 5, 34, 0, 0, 389, 394, 1, 0, 0, 0, 390, 393, 3, - 85, 42, 0, 391, 393, 8, 12, 0, 0, 392, 390, 1, 0, 0, 0, 392, 391, 1, 0, - 0, 0, 393, 396, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, - 395, 397, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 398, 5, 34, 0, 0, 398, - 399, 5, 34, 0, 0, 399, 465, 5, 34, 0, 0, 400, 401, 5, 39, 0, 0, 401, 402, - 5, 39, 0, 0, 402, 403, 5, 39, 0, 0, 403, 408, 1, 0, 0, 0, 404, 407, 3, - 85, 42, 0, 405, 407, 8, 12, 0, 0, 406, 404, 1, 0, 0, 0, 406, 405, 1, 0, - 0, 0, 407, 410, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 408, 406, 1, 0, 0, 0, - 409, 411, 1, 0, 0, 0, 410, 408, 1, 0, 0, 0, 411, 412, 5, 39, 0, 0, 412, - 413, 5, 39, 0, 0, 413, 465, 5, 39, 0, 0, 414, 415, 3, 83, 41, 0, 415, 419, - 5, 34, 0, 0, 416, 418, 8, 13, 0, 0, 417, 416, 1, 0, 0, 0, 418, 421, 1, - 0, 0, 0, 419, 417, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 422, 1, 0, 0, - 0, 421, 419, 1, 0, 0, 0, 422, 423, 5, 34, 0, 0, 423, 465, 1, 0, 0, 0, 424, - 425, 3, 83, 41, 0, 425, 429, 5, 39, 0, 0, 426, 428, 8, 14, 0, 0, 427, 426, - 1, 0, 0, 0, 428, 431, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 430, 1, 0, - 0, 0, 430, 432, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 432, 433, 5, 39, 0, 0, - 433, 465, 1, 0, 0, 0, 434, 435, 3, 83, 41, 0, 435, 436, 5, 34, 0, 0, 436, - 437, 5, 34, 0, 0, 437, 438, 5, 34, 0, 0, 438, 442, 1, 0, 0, 0, 439, 441, - 9, 0, 0, 0, 440, 439, 1, 0, 0, 0, 441, 444, 1, 0, 0, 0, 442, 443, 1, 0, - 0, 0, 442, 440, 1, 0, 0, 0, 443, 445, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, - 445, 446, 5, 34, 0, 0, 446, 447, 5, 34, 0, 0, 447, 448, 5, 34, 0, 0, 448, - 465, 1, 0, 0, 0, 449, 450, 3, 83, 41, 0, 450, 451, 5, 39, 0, 0, 451, 452, - 5, 39, 0, 0, 452, 453, 5, 39, 0, 0, 453, 457, 1, 0, 0, 0, 454, 456, 9, - 0, 0, 0, 455, 454, 1, 0, 0, 0, 456, 459, 1, 0, 0, 0, 457, 458, 1, 0, 0, - 0, 457, 455, 1, 0, 0, 0, 458, 460, 1, 0, 0, 0, 459, 457, 1, 0, 0, 0, 460, - 461, 5, 39, 0, 0, 461, 462, 5, 39, 0, 0, 462, 463, 5, 39, 0, 0, 463, 465, - 1, 0, 0, 0, 464, 368, 1, 0, 0, 0, 464, 377, 1, 0, 0, 0, 464, 386, 1, 0, - 0, 0, 464, 400, 1, 0, 0, 0, 464, 414, 1, 0, 0, 0, 464, 424, 1, 0, 0, 0, - 464, 434, 1, 0, 0, 0, 464, 449, 1, 0, 0, 0, 465, 106, 1, 0, 0, 0, 466, - 467, 7, 15, 0, 0, 467, 468, 3, 105, 52, 0, 468, 108, 1, 0, 0, 0, 469, 472, - 3, 75, 37, 0, 470, 472, 5, 95, 0, 0, 471, 469, 1, 0, 0, 0, 471, 470, 1, - 0, 0, 0, 472, 478, 1, 0, 0, 0, 473, 477, 3, 75, 37, 0, 474, 477, 3, 77, - 38, 0, 475, 477, 5, 95, 0, 0, 476, 473, 1, 0, 0, 0, 476, 474, 1, 0, 0, - 0, 476, 475, 1, 0, 0, 0, 477, 480, 1, 0, 0, 0, 478, 476, 1, 0, 0, 0, 478, - 479, 1, 0, 0, 0, 479, 110, 1, 0, 0, 0, 480, 478, 1, 0, 0, 0, 37, 0, 143, - 234, 239, 249, 282, 287, 297, 305, 311, 314, 319, 327, 330, 332, 337, 345, - 347, 352, 362, 366, 371, 373, 380, 382, 392, 394, 406, 408, 419, 429, 442, - 457, 464, 471, 476, 478, 1, 0, 1, 0, + 36, 73, 37, 75, 38, 77, 39, 79, 0, 81, 0, 83, 0, 85, 0, 87, 0, 89, 0, 91, + 0, 93, 0, 95, 0, 97, 0, 99, 0, 101, 40, 103, 41, 105, 42, 107, 43, 109, + 44, 111, 45, 113, 46, 115, 47, 1, 0, 16, 2, 0, 65, 90, 97, 122, 2, 0, 69, + 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, + 82, 82, 114, 114, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 96, 98, 102, 102, + 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 88, 88, 120, 120, 3, 0, 9, + 10, 12, 13, 32, 32, 1, 0, 10, 10, 2, 0, 85, 85, 117, 117, 4, 0, 10, 10, + 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 1, 0, 92, + 92, 3, 0, 10, 10, 13, 13, 34, 34, 3, 0, 10, 10, 13, 13, 39, 39, 2, 0, 66, + 66, 98, 98, 539, 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, 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, 1, 117, 1, 0, 0, 0, 3, 123, + 1, 0, 0, 0, 5, 126, 1, 0, 0, 0, 7, 131, 1, 0, 0, 0, 9, 140, 1, 0, 0, 0, + 11, 148, 1, 0, 0, 0, 13, 157, 1, 0, 0, 0, 15, 163, 1, 0, 0, 0, 17, 167, + 1, 0, 0, 0, 19, 172, 1, 0, 0, 0, 21, 175, 1, 0, 0, 0, 23, 177, 1, 0, 0, + 0, 25, 180, 1, 0, 0, 0, 27, 183, 1, 0, 0, 0, 29, 186, 1, 0, 0, 0, 31, 188, + 1, 0, 0, 0, 33, 191, 1, 0, 0, 0, 35, 194, 1, 0, 0, 0, 37, 196, 1, 0, 0, + 0, 39, 199, 1, 0, 0, 0, 41, 202, 1, 0, 0, 0, 43, 204, 1, 0, 0, 0, 45, 206, + 1, 0, 0, 0, 47, 208, 1, 0, 0, 0, 49, 210, 1, 0, 0, 0, 51, 212, 1, 0, 0, + 0, 53, 214, 1, 0, 0, 0, 55, 216, 1, 0, 0, 0, 57, 218, 1, 0, 0, 0, 59, 220, + 1, 0, 0, 0, 61, 222, 1, 0, 0, 0, 63, 224, 1, 0, 0, 0, 65, 226, 1, 0, 0, + 0, 67, 228, 1, 0, 0, 0, 69, 230, 1, 0, 0, 0, 71, 232, 1, 0, 0, 0, 73, 234, + 1, 0, 0, 0, 75, 239, 1, 0, 0, 0, 77, 245, 1, 0, 0, 0, 79, 250, 1, 0, 0, + 0, 81, 252, 1, 0, 0, 0, 83, 254, 1, 0, 0, 0, 85, 256, 1, 0, 0, 0, 87, 265, + 1, 0, 0, 0, 89, 267, 1, 0, 0, 0, 91, 273, 1, 0, 0, 0, 93, 275, 1, 0, 0, + 0, 95, 278, 1, 0, 0, 0, 97, 283, 1, 0, 0, 0, 99, 306, 1, 0, 0, 0, 101, + 309, 1, 0, 0, 0, 103, 315, 1, 0, 0, 0, 105, 356, 1, 0, 0, 0, 107, 371, + 1, 0, 0, 0, 109, 390, 1, 0, 0, 0, 111, 488, 1, 0, 0, 0, 113, 490, 1, 0, + 0, 0, 115, 495, 1, 0, 0, 0, 117, 118, 5, 37, 0, 0, 118, 119, 5, 104, 0, + 0, 119, 120, 5, 101, 0, 0, 120, 121, 5, 108, 0, 0, 121, 122, 5, 112, 0, + 0, 122, 2, 1, 0, 0, 0, 123, 124, 5, 37, 0, 0, 124, 125, 5, 63, 0, 0, 125, + 4, 1, 0, 0, 0, 126, 127, 5, 37, 0, 0, 127, 128, 5, 108, 0, 0, 128, 129, + 5, 101, 0, 0, 129, 130, 5, 116, 0, 0, 130, 6, 1, 0, 0, 0, 131, 132, 5, + 37, 0, 0, 132, 133, 5, 100, 0, 0, 133, 134, 5, 101, 0, 0, 134, 135, 5, + 99, 0, 0, 135, 136, 5, 108, 0, 0, 136, 137, 5, 97, 0, 0, 137, 138, 5, 114, + 0, 0, 138, 139, 5, 101, 0, 0, 139, 8, 1, 0, 0, 0, 140, 141, 5, 37, 0, 0, + 141, 142, 5, 100, 0, 0, 142, 143, 5, 101, 0, 0, 143, 144, 5, 108, 0, 0, + 144, 145, 5, 101, 0, 0, 145, 146, 5, 116, 0, 0, 146, 147, 5, 101, 0, 0, + 147, 10, 1, 0, 0, 0, 148, 149, 5, 37, 0, 0, 149, 150, 5, 99, 0, 0, 150, + 151, 5, 111, 0, 0, 151, 152, 5, 109, 0, 0, 152, 153, 5, 112, 0, 0, 153, + 154, 5, 105, 0, 0, 154, 155, 5, 108, 0, 0, 155, 156, 5, 101, 0, 0, 156, + 12, 1, 0, 0, 0, 157, 158, 5, 37, 0, 0, 158, 159, 5, 101, 0, 0, 159, 160, + 5, 118, 0, 0, 160, 161, 5, 97, 0, 0, 161, 162, 5, 108, 0, 0, 162, 14, 1, + 0, 0, 0, 163, 164, 5, 37, 0, 0, 164, 165, 3, 115, 57, 0, 165, 16, 1, 0, + 0, 0, 166, 168, 5, 45, 0, 0, 167, 166, 1, 0, 0, 0, 167, 168, 1, 0, 0, 0, + 168, 169, 1, 0, 0, 0, 169, 170, 5, 45, 0, 0, 170, 171, 3, 115, 57, 0, 171, + 18, 1, 0, 0, 0, 172, 173, 5, 45, 0, 0, 173, 174, 5, 62, 0, 0, 174, 20, + 1, 0, 0, 0, 175, 176, 5, 61, 0, 0, 176, 22, 1, 0, 0, 0, 177, 178, 5, 61, + 0, 0, 178, 179, 5, 61, 0, 0, 179, 24, 1, 0, 0, 0, 180, 181, 5, 33, 0, 0, + 181, 182, 5, 61, 0, 0, 182, 26, 1, 0, 0, 0, 183, 184, 5, 105, 0, 0, 184, + 185, 5, 110, 0, 0, 185, 28, 1, 0, 0, 0, 186, 187, 5, 60, 0, 0, 187, 30, + 1, 0, 0, 0, 188, 189, 5, 60, 0, 0, 189, 190, 5, 61, 0, 0, 190, 32, 1, 0, + 0, 0, 191, 192, 5, 62, 0, 0, 192, 193, 5, 61, 0, 0, 193, 34, 1, 0, 0, 0, + 194, 195, 5, 62, 0, 0, 195, 36, 1, 0, 0, 0, 196, 197, 5, 38, 0, 0, 197, + 198, 5, 38, 0, 0, 198, 38, 1, 0, 0, 0, 199, 200, 5, 124, 0, 0, 200, 201, + 5, 124, 0, 0, 201, 40, 1, 0, 0, 0, 202, 203, 5, 91, 0, 0, 203, 42, 1, 0, + 0, 0, 204, 205, 5, 93, 0, 0, 205, 44, 1, 0, 0, 0, 206, 207, 5, 123, 0, + 0, 207, 46, 1, 0, 0, 0, 208, 209, 5, 125, 0, 0, 209, 48, 1, 0, 0, 0, 210, + 211, 5, 40, 0, 0, 211, 50, 1, 0, 0, 0, 212, 213, 5, 41, 0, 0, 213, 52, + 1, 0, 0, 0, 214, 215, 5, 46, 0, 0, 215, 54, 1, 0, 0, 0, 216, 217, 5, 44, + 0, 0, 217, 56, 1, 0, 0, 0, 218, 219, 5, 45, 0, 0, 219, 58, 1, 0, 0, 0, + 220, 221, 5, 33, 0, 0, 221, 60, 1, 0, 0, 0, 222, 223, 5, 63, 0, 0, 223, + 62, 1, 0, 0, 0, 224, 225, 5, 58, 0, 0, 225, 64, 1, 0, 0, 0, 226, 227, 5, + 43, 0, 0, 227, 66, 1, 0, 0, 0, 228, 229, 5, 42, 0, 0, 229, 68, 1, 0, 0, + 0, 230, 231, 5, 47, 0, 0, 231, 70, 1, 0, 0, 0, 232, 233, 5, 37, 0, 0, 233, + 72, 1, 0, 0, 0, 234, 235, 5, 116, 0, 0, 235, 236, 5, 114, 0, 0, 236, 237, + 5, 117, 0, 0, 237, 238, 5, 101, 0, 0, 238, 74, 1, 0, 0, 0, 239, 240, 5, + 102, 0, 0, 240, 241, 5, 97, 0, 0, 241, 242, 5, 108, 0, 0, 242, 243, 5, + 115, 0, 0, 243, 244, 5, 101, 0, 0, 244, 76, 1, 0, 0, 0, 245, 246, 5, 110, + 0, 0, 246, 247, 5, 117, 0, 0, 247, 248, 5, 108, 0, 0, 248, 249, 5, 108, + 0, 0, 249, 78, 1, 0, 0, 0, 250, 251, 5, 92, 0, 0, 251, 80, 1, 0, 0, 0, + 252, 253, 7, 0, 0, 0, 253, 82, 1, 0, 0, 0, 254, 255, 2, 48, 57, 0, 255, + 84, 1, 0, 0, 0, 256, 258, 7, 1, 0, 0, 257, 259, 7, 2, 0, 0, 258, 257, 1, + 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 261, 1, 0, 0, 0, 260, 262, 3, 83, 41, + 0, 261, 260, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 261, 1, 0, 0, 0, 263, + 264, 1, 0, 0, 0, 264, 86, 1, 0, 0, 0, 265, 266, 7, 3, 0, 0, 266, 88, 1, + 0, 0, 0, 267, 268, 7, 4, 0, 0, 268, 90, 1, 0, 0, 0, 269, 274, 3, 93, 46, + 0, 270, 274, 3, 97, 48, 0, 271, 274, 3, 99, 49, 0, 272, 274, 3, 95, 47, + 0, 273, 269, 1, 0, 0, 0, 273, 270, 1, 0, 0, 0, 273, 271, 1, 0, 0, 0, 273, + 272, 1, 0, 0, 0, 274, 92, 1, 0, 0, 0, 275, 276, 3, 79, 39, 0, 276, 277, + 7, 5, 0, 0, 277, 94, 1, 0, 0, 0, 278, 279, 3, 79, 39, 0, 279, 280, 2, 48, + 51, 0, 280, 281, 2, 48, 55, 0, 281, 282, 2, 48, 55, 0, 282, 96, 1, 0, 0, + 0, 283, 284, 3, 79, 39, 0, 284, 285, 7, 6, 0, 0, 285, 286, 3, 87, 43, 0, + 286, 287, 3, 87, 43, 0, 287, 98, 1, 0, 0, 0, 288, 289, 3, 79, 39, 0, 289, + 290, 5, 117, 0, 0, 290, 291, 3, 87, 43, 0, 291, 292, 3, 87, 43, 0, 292, + 293, 3, 87, 43, 0, 293, 294, 3, 87, 43, 0, 294, 307, 1, 0, 0, 0, 295, 296, + 3, 79, 39, 0, 296, 297, 5, 85, 0, 0, 297, 298, 3, 87, 43, 0, 298, 299, + 3, 87, 43, 0, 299, 300, 3, 87, 43, 0, 300, 301, 3, 87, 43, 0, 301, 302, + 3, 87, 43, 0, 302, 303, 3, 87, 43, 0, 303, 304, 3, 87, 43, 0, 304, 305, + 3, 87, 43, 0, 305, 307, 1, 0, 0, 0, 306, 288, 1, 0, 0, 0, 306, 295, 1, + 0, 0, 0, 307, 100, 1, 0, 0, 0, 308, 310, 7, 7, 0, 0, 309, 308, 1, 0, 0, + 0, 310, 311, 1, 0, 0, 0, 311, 309, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, + 313, 1, 0, 0, 0, 313, 314, 6, 50, 0, 0, 314, 102, 1, 0, 0, 0, 315, 316, + 5, 47, 0, 0, 316, 317, 5, 47, 0, 0, 317, 321, 1, 0, 0, 0, 318, 320, 8, + 8, 0, 0, 319, 318, 1, 0, 0, 0, 320, 323, 1, 0, 0, 0, 321, 319, 1, 0, 0, + 0, 321, 322, 1, 0, 0, 0, 322, 324, 1, 0, 0, 0, 323, 321, 1, 0, 0, 0, 324, + 325, 6, 51, 0, 0, 325, 104, 1, 0, 0, 0, 326, 328, 3, 83, 41, 0, 327, 326, + 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 329, 330, 1, 0, + 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 5, 46, 0, 0, 332, 334, 3, 83, 41, + 0, 333, 332, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 333, 1, 0, 0, 0, 335, + 336, 1, 0, 0, 0, 336, 338, 1, 0, 0, 0, 337, 339, 3, 85, 42, 0, 338, 337, + 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 357, 1, 0, 0, 0, 340, 342, 3, 83, + 41, 0, 341, 340, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 341, 1, 0, 0, 0, + 343, 344, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 346, 3, 85, 42, 0, 346, + 357, 1, 0, 0, 0, 347, 349, 5, 46, 0, 0, 348, 350, 3, 83, 41, 0, 349, 348, + 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 349, 1, 0, 0, 0, 351, 352, 1, 0, + 0, 0, 352, 354, 1, 0, 0, 0, 353, 355, 3, 85, 42, 0, 354, 353, 1, 0, 0, + 0, 354, 355, 1, 0, 0, 0, 355, 357, 1, 0, 0, 0, 356, 327, 1, 0, 0, 0, 356, + 341, 1, 0, 0, 0, 356, 347, 1, 0, 0, 0, 357, 106, 1, 0, 0, 0, 358, 360, + 3, 83, 41, 0, 359, 358, 1, 0, 0, 0, 360, 361, 1, 0, 0, 0, 361, 359, 1, + 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 372, 1, 0, 0, 0, 363, 364, 5, 48, 0, + 0, 364, 365, 5, 120, 0, 0, 365, 367, 1, 0, 0, 0, 366, 368, 3, 87, 43, 0, + 367, 366, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 369, + 370, 1, 0, 0, 0, 370, 372, 1, 0, 0, 0, 371, 359, 1, 0, 0, 0, 371, 363, + 1, 0, 0, 0, 372, 108, 1, 0, 0, 0, 373, 375, 3, 83, 41, 0, 374, 373, 1, + 0, 0, 0, 375, 376, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, + 0, 377, 378, 1, 0, 0, 0, 378, 379, 7, 9, 0, 0, 379, 391, 1, 0, 0, 0, 380, + 381, 5, 48, 0, 0, 381, 382, 5, 120, 0, 0, 382, 384, 1, 0, 0, 0, 383, 385, + 3, 87, 43, 0, 384, 383, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 384, 1, + 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 388, 1, 0, 0, 0, 388, 389, 7, 9, 0, + 0, 389, 391, 1, 0, 0, 0, 390, 374, 1, 0, 0, 0, 390, 380, 1, 0, 0, 0, 391, + 110, 1, 0, 0, 0, 392, 397, 5, 34, 0, 0, 393, 396, 3, 91, 45, 0, 394, 396, + 8, 10, 0, 0, 395, 393, 1, 0, 0, 0, 395, 394, 1, 0, 0, 0, 396, 399, 1, 0, + 0, 0, 397, 395, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 400, 1, 0, 0, 0, + 399, 397, 1, 0, 0, 0, 400, 489, 5, 34, 0, 0, 401, 406, 5, 39, 0, 0, 402, + 405, 3, 91, 45, 0, 403, 405, 8, 11, 0, 0, 404, 402, 1, 0, 0, 0, 404, 403, + 1, 0, 0, 0, 405, 408, 1, 0, 0, 0, 406, 404, 1, 0, 0, 0, 406, 407, 1, 0, + 0, 0, 407, 409, 1, 0, 0, 0, 408, 406, 1, 0, 0, 0, 409, 489, 5, 39, 0, 0, + 410, 411, 5, 34, 0, 0, 411, 412, 5, 34, 0, 0, 412, 413, 5, 34, 0, 0, 413, + 418, 1, 0, 0, 0, 414, 417, 3, 91, 45, 0, 415, 417, 8, 12, 0, 0, 416, 414, + 1, 0, 0, 0, 416, 415, 1, 0, 0, 0, 417, 420, 1, 0, 0, 0, 418, 419, 1, 0, + 0, 0, 418, 416, 1, 0, 0, 0, 419, 421, 1, 0, 0, 0, 420, 418, 1, 0, 0, 0, + 421, 422, 5, 34, 0, 0, 422, 423, 5, 34, 0, 0, 423, 489, 5, 34, 0, 0, 424, + 425, 5, 39, 0, 0, 425, 426, 5, 39, 0, 0, 426, 427, 5, 39, 0, 0, 427, 432, + 1, 0, 0, 0, 428, 431, 3, 91, 45, 0, 429, 431, 8, 12, 0, 0, 430, 428, 1, + 0, 0, 0, 430, 429, 1, 0, 0, 0, 431, 434, 1, 0, 0, 0, 432, 433, 1, 0, 0, + 0, 432, 430, 1, 0, 0, 0, 433, 435, 1, 0, 0, 0, 434, 432, 1, 0, 0, 0, 435, + 436, 5, 39, 0, 0, 436, 437, 5, 39, 0, 0, 437, 489, 5, 39, 0, 0, 438, 439, + 3, 89, 44, 0, 439, 443, 5, 34, 0, 0, 440, 442, 8, 13, 0, 0, 441, 440, 1, + 0, 0, 0, 442, 445, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 443, 444, 1, 0, 0, + 0, 444, 446, 1, 0, 0, 0, 445, 443, 1, 0, 0, 0, 446, 447, 5, 34, 0, 0, 447, + 489, 1, 0, 0, 0, 448, 449, 3, 89, 44, 0, 449, 453, 5, 39, 0, 0, 450, 452, + 8, 14, 0, 0, 451, 450, 1, 0, 0, 0, 452, 455, 1, 0, 0, 0, 453, 451, 1, 0, + 0, 0, 453, 454, 1, 0, 0, 0, 454, 456, 1, 0, 0, 0, 455, 453, 1, 0, 0, 0, + 456, 457, 5, 39, 0, 0, 457, 489, 1, 0, 0, 0, 458, 459, 3, 89, 44, 0, 459, + 460, 5, 34, 0, 0, 460, 461, 5, 34, 0, 0, 461, 462, 5, 34, 0, 0, 462, 466, + 1, 0, 0, 0, 463, 465, 9, 0, 0, 0, 464, 463, 1, 0, 0, 0, 465, 468, 1, 0, + 0, 0, 466, 467, 1, 0, 0, 0, 466, 464, 1, 0, 0, 0, 467, 469, 1, 0, 0, 0, + 468, 466, 1, 0, 0, 0, 469, 470, 5, 34, 0, 0, 470, 471, 5, 34, 0, 0, 471, + 472, 5, 34, 0, 0, 472, 489, 1, 0, 0, 0, 473, 474, 3, 89, 44, 0, 474, 475, + 5, 39, 0, 0, 475, 476, 5, 39, 0, 0, 476, 477, 5, 39, 0, 0, 477, 481, 1, + 0, 0, 0, 478, 480, 9, 0, 0, 0, 479, 478, 1, 0, 0, 0, 480, 483, 1, 0, 0, + 0, 481, 482, 1, 0, 0, 0, 481, 479, 1, 0, 0, 0, 482, 484, 1, 0, 0, 0, 483, + 481, 1, 0, 0, 0, 484, 485, 5, 39, 0, 0, 485, 486, 5, 39, 0, 0, 486, 487, + 5, 39, 0, 0, 487, 489, 1, 0, 0, 0, 488, 392, 1, 0, 0, 0, 488, 401, 1, 0, + 0, 0, 488, 410, 1, 0, 0, 0, 488, 424, 1, 0, 0, 0, 488, 438, 1, 0, 0, 0, + 488, 448, 1, 0, 0, 0, 488, 458, 1, 0, 0, 0, 488, 473, 1, 0, 0, 0, 489, + 112, 1, 0, 0, 0, 490, 491, 7, 15, 0, 0, 491, 492, 3, 111, 55, 0, 492, 114, + 1, 0, 0, 0, 493, 496, 3, 81, 40, 0, 494, 496, 5, 95, 0, 0, 495, 493, 1, + 0, 0, 0, 495, 494, 1, 0, 0, 0, 496, 502, 1, 0, 0, 0, 497, 501, 3, 81, 40, + 0, 498, 501, 3, 83, 41, 0, 499, 501, 5, 95, 0, 0, 500, 497, 1, 0, 0, 0, + 500, 498, 1, 0, 0, 0, 500, 499, 1, 0, 0, 0, 501, 504, 1, 0, 0, 0, 502, + 500, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 116, 1, 0, 0, 0, 504, 502, + 1, 0, 0, 0, 37, 0, 167, 258, 263, 273, 306, 311, 321, 329, 335, 338, 343, + 351, 354, 356, 361, 369, 371, 376, 386, 390, 395, 397, 404, 406, 416, 418, + 430, 432, 443, 453, 466, 481, 488, 495, 500, 502, 1, 0, 1, 0, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -339,44 +348,47 @@ const ( CommandsLexerT__1 = 2 CommandsLexerT__2 = 3 CommandsLexerT__3 = 4 - CommandsLexerCOMMAND = 5 - CommandsLexerFLAG = 6 - CommandsLexerARROW = 7 - CommandsLexerEQUAL_ASSIGN = 8 - CommandsLexerEQUALS = 9 - CommandsLexerNOT_EQUALS = 10 - CommandsLexerIN = 11 - CommandsLexerLESS = 12 - CommandsLexerLESS_EQUALS = 13 - CommandsLexerGREATER_EQUALS = 14 - CommandsLexerGREATER = 15 - CommandsLexerLOGICAL_AND = 16 - CommandsLexerLOGICAL_OR = 17 - CommandsLexerLBRACKET = 18 - CommandsLexerRPRACKET = 19 - CommandsLexerLBRACE = 20 - CommandsLexerRBRACE = 21 - CommandsLexerLPAREN = 22 - CommandsLexerRPAREN = 23 - CommandsLexerDOT = 24 - CommandsLexerCOMMA = 25 - CommandsLexerMINUS = 26 - CommandsLexerEXCLAM = 27 - CommandsLexerQUESTIONMARK = 28 - CommandsLexerCOLON = 29 - CommandsLexerPLUS = 30 - CommandsLexerSTAR = 31 - CommandsLexerSLASH = 32 - CommandsLexerPERCENT = 33 - CommandsLexerCEL_TRUE = 34 - CommandsLexerCEL_FALSE = 35 - CommandsLexerNUL = 36 - CommandsLexerWHITESPACE = 37 - CommandsLexerCOMMENT = 38 - CommandsLexerNUM_FLOAT = 39 - CommandsLexerNUM_INT = 40 - CommandsLexerNUM_UINT = 41 - CommandsLexerSTRING = 42 - CommandsLexerBYTES = 43 - CommandsLexerIDENTIFIER = 44 + CommandsLexerT__4 = 5 + CommandsLexerT__5 = 6 + CommandsLexerT__6 = 7 + CommandsLexerCOMMAND = 8 + CommandsLexerFLAG = 9 + CommandsLexerARROW = 10 + CommandsLexerEQUAL_ASSIGN = 11 + CommandsLexerEQUALS = 12 + CommandsLexerNOT_EQUALS = 13 + CommandsLexerIN = 14 + CommandsLexerLESS = 15 + CommandsLexerLESS_EQUALS = 16 + CommandsLexerGREATER_EQUALS = 17 + CommandsLexerGREATER = 18 + CommandsLexerLOGICAL_AND = 19 + CommandsLexerLOGICAL_OR = 20 + CommandsLexerLBRACKET = 21 + CommandsLexerRPRACKET = 22 + CommandsLexerLBRACE = 23 + CommandsLexerRBRACE = 24 + CommandsLexerLPAREN = 25 + CommandsLexerRPAREN = 26 + CommandsLexerDOT = 27 + CommandsLexerCOMMA = 28 + CommandsLexerMINUS = 29 + CommandsLexerEXCLAM = 30 + CommandsLexerQUESTIONMARK = 31 + CommandsLexerCOLON = 32 + CommandsLexerPLUS = 33 + CommandsLexerSTAR = 34 + CommandsLexerSLASH = 35 + CommandsLexerPERCENT = 36 + CommandsLexerCEL_TRUE = 37 + CommandsLexerCEL_FALSE = 38 + CommandsLexerNUL = 39 + CommandsLexerWHITESPACE = 40 + CommandsLexerCOMMENT = 41 + CommandsLexerNUM_FLOAT = 42 + CommandsLexerNUM_INT = 43 + CommandsLexerNUM_UINT = 44 + CommandsLexerSTRING = 45 + CommandsLexerBYTES = 46 + CommandsLexerIDENTIFIER = 47 ) diff --git a/repl/parser/commands_listener.go b/repl/parser/commands_listener.go index 68054f1d..8640a6a6 100644 --- a/repl/parser/commands_listener.go +++ b/repl/parser/commands_listener.go @@ -13,6 +13,9 @@ type CommandsListener interface { // EnterCommand is called when entering the command production. EnterCommand(c *CommandContext) + // EnterHelp is called when entering the help production. + EnterHelp(c *HelpContext) + // EnterLet is called when entering the let production. EnterLet(c *LetContext) @@ -37,6 +40,9 @@ type CommandsListener interface { // EnterEmpty is called when entering the empty production. EnterEmpty(c *EmptyContext) + // EnterCompile is called when entering the compile production. + EnterCompile(c *CompileContext) + // EnterExprCmd is called when entering the exprCmd production. EnterExprCmd(c *ExprCmdContext) @@ -160,6 +166,9 @@ type CommandsListener interface { // ExitCommand is called when exiting the command production. ExitCommand(c *CommandContext) + // ExitHelp is called when exiting the help production. + ExitHelp(c *HelpContext) + // ExitLet is called when exiting the let production. ExitLet(c *LetContext) @@ -184,6 +193,9 @@ type CommandsListener interface { // ExitEmpty is called when exiting the empty production. ExitEmpty(c *EmptyContext) + // ExitCompile is called when exiting the compile production. + ExitCompile(c *CompileContext) + // ExitExprCmd is called when exiting the exprCmd production. ExitExprCmd(c *ExprCmdContext) diff --git a/repl/parser/commands_parser.go b/repl/parser/commands_parser.go index 6c3162fa..dd898f98 100644 --- a/repl/parser/commands_parser.go +++ b/repl/parser/commands_parser.go @@ -32,211 +32,216 @@ var commandsParserStaticData struct { func commandsParserInit() { staticData := &commandsParserStaticData staticData.literalNames = []string{ - "", "'%let'", "'%declare'", "'%delete'", "'%eval'", "", "", "'->'", - "'='", "'=='", "'!='", "'in'", "'<'", "'<='", "'>='", "'>'", "'&&'", - "'||'", "'['", "']'", "'{'", "'}'", "'('", "')'", "'.'", "','", "'-'", - "'!'", "'?'", "':'", "'+'", "'*'", "'/'", "'%'", "'true'", "'false'", - "'null'", + "", "'%help'", "'%?'", "'%let'", "'%declare'", "'%delete'", "'%compile'", + "'%eval'", "", "", "'->'", "'='", "'=='", "'!='", "'in'", "'<'", "'<='", + "'>='", "'>'", "'&&'", "'||'", "'['", "']'", "'{'", "'}'", "'('", "')'", + "'.'", "','", "'-'", "'!'", "'?'", "':'", "'+'", "'*'", "'/'", "'%'", + "'true'", "'false'", "'null'", } staticData.symbolicNames = []string{ - "", "", "", "", "", "COMMAND", "FLAG", "ARROW", "EQUAL_ASSIGN", "EQUALS", - "NOT_EQUALS", "IN", "LESS", "LESS_EQUALS", "GREATER_EQUALS", "GREATER", - "LOGICAL_AND", "LOGICAL_OR", "LBRACKET", "RPRACKET", "LBRACE", "RBRACE", - "LPAREN", "RPAREN", "DOT", "COMMA", "MINUS", "EXCLAM", "QUESTIONMARK", + "", "", "", "", "", "", "", "", "COMMAND", "FLAG", "ARROW", "EQUAL_ASSIGN", + "EQUALS", "NOT_EQUALS", "IN", "LESS", "LESS_EQUALS", "GREATER_EQUALS", + "GREATER", "LOGICAL_AND", "LOGICAL_OR", "LBRACKET", "RPRACKET", "LBRACE", + "RBRACE", "LPAREN", "RPAREN", "DOT", "COMMA", "MINUS", "EXCLAM", "QUESTIONMARK", "COLON", "PLUS", "STAR", "SLASH", "PERCENT", "CEL_TRUE", "CEL_FALSE", "NUL", "WHITESPACE", "COMMENT", "NUM_FLOAT", "NUM_INT", "NUM_UINT", "STRING", "BYTES", "IDENTIFIER", } staticData.ruleNames = []string{ - "startCommand", "command", "let", "declare", "varDecl", "fnDecl", "param", - "delete", "simple", "empty", "exprCmd", "qualId", "startType", "type", - "typeId", "typeParamList", "start", "expr", "conditionalOr", "conditionalAnd", - "relation", "calc", "unary", "member", "primary", "exprList", "listInit", - "fieldInitializerList", "optField", "mapInitializerList", "optExpr", - "literal", + "startCommand", "command", "help", "let", "declare", "varDecl", "fnDecl", + "param", "delete", "simple", "empty", "compile", "exprCmd", "qualId", + "startType", "type", "typeId", "typeParamList", "start", "expr", "conditionalOr", + "conditionalAnd", "relation", "calc", "unary", "member", "primary", + "exprList", "listInit", "fieldInitializerList", "optField", "mapInitializerList", + "optExpr", "literal", } staticData.predictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 1, 44, 395, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, + 4, 1, 47, 406, 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, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 74, 8, - 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 83, 8, 2, 1, 2, 1, 2, - 1, 3, 1, 3, 1, 3, 3, 3, 90, 8, 3, 1, 4, 1, 4, 1, 4, 3, 4, 95, 8, 4, 1, - 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 102, 8, 5, 10, 5, 12, 5, 105, 9, 5, 3, - 5, 107, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, - 7, 1, 7, 3, 7, 120, 8, 7, 1, 8, 1, 8, 1, 8, 5, 8, 125, 8, 8, 10, 8, 12, - 8, 128, 9, 8, 1, 9, 1, 9, 1, 10, 3, 10, 133, 8, 10, 1, 10, 1, 10, 1, 11, - 3, 11, 138, 8, 11, 1, 11, 1, 11, 1, 11, 5, 11, 143, 8, 11, 10, 11, 12, - 11, 146, 9, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 153, 8, 13, 1, - 14, 3, 14, 156, 8, 14, 1, 14, 1, 14, 1, 14, 5, 14, 161, 8, 14, 10, 14, - 12, 14, 164, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 170, 8, 15, 10, - 15, 12, 15, 173, 9, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, - 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 186, 8, 17, 1, 18, 1, 18, 1, 18, 5, - 18, 191, 8, 18, 10, 18, 12, 18, 194, 9, 18, 1, 19, 1, 19, 1, 19, 5, 19, - 199, 8, 19, 10, 19, 12, 19, 202, 9, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, - 20, 1, 20, 5, 20, 210, 8, 20, 10, 20, 12, 20, 213, 9, 20, 1, 21, 1, 21, - 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 224, 8, 21, 10, - 21, 12, 21, 227, 9, 21, 1, 22, 1, 22, 4, 22, 231, 8, 22, 11, 22, 12, 22, - 232, 1, 22, 1, 22, 4, 22, 237, 8, 22, 11, 22, 12, 22, 238, 1, 22, 3, 22, - 242, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 250, 8, 23, - 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 258, 8, 23, 1, 23, 1, - 23, 1, 23, 1, 23, 3, 23, 264, 8, 23, 1, 23, 1, 23, 1, 23, 5, 23, 269, 8, - 23, 10, 23, 12, 23, 272, 9, 23, 1, 24, 3, 24, 275, 8, 24, 1, 24, 1, 24, - 1, 24, 3, 24, 280, 8, 24, 1, 24, 3, 24, 283, 8, 24, 1, 24, 1, 24, 1, 24, - 1, 24, 1, 24, 1, 24, 3, 24, 291, 8, 24, 1, 24, 3, 24, 294, 8, 24, 1, 24, - 1, 24, 1, 24, 3, 24, 299, 8, 24, 1, 24, 3, 24, 302, 8, 24, 1, 24, 1, 24, - 3, 24, 306, 8, 24, 1, 24, 1, 24, 1, 24, 5, 24, 311, 8, 24, 10, 24, 12, - 24, 314, 9, 24, 1, 24, 1, 24, 3, 24, 318, 8, 24, 1, 24, 3, 24, 321, 8, - 24, 1, 24, 1, 24, 3, 24, 325, 8, 24, 1, 25, 1, 25, 1, 25, 5, 25, 330, 8, - 25, 10, 25, 12, 25, 333, 9, 25, 1, 26, 1, 26, 1, 26, 5, 26, 338, 8, 26, - 10, 26, 12, 26, 341, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, - 27, 1, 27, 5, 27, 351, 8, 27, 10, 27, 12, 27, 354, 9, 27, 1, 28, 3, 28, - 357, 8, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, - 29, 1, 29, 5, 29, 369, 8, 29, 10, 29, 12, 29, 372, 9, 29, 1, 30, 3, 30, - 375, 8, 30, 1, 30, 1, 30, 1, 31, 3, 31, 380, 8, 31, 1, 31, 1, 31, 1, 31, - 3, 31, 385, 8, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 393, - 8, 31, 1, 31, 0, 3, 40, 42, 46, 32, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, + 31, 2, 32, 7, 32, 2, 33, 7, 33, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 80, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, + 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 91, 8, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 3, + 4, 98, 8, 4, 1, 5, 1, 5, 1, 5, 3, 5, 103, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, + 1, 6, 5, 6, 110, 8, 6, 10, 6, 12, 6, 113, 9, 6, 3, 6, 115, 8, 6, 1, 6, + 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 3, 8, 128, + 8, 8, 1, 9, 1, 9, 1, 9, 5, 9, 133, 8, 9, 10, 9, 12, 9, 136, 9, 9, 1, 10, + 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 3, 12, 144, 8, 12, 1, 12, 1, 12, 1, + 13, 3, 13, 149, 8, 13, 1, 13, 1, 13, 1, 13, 5, 13, 154, 8, 13, 10, 13, + 12, 13, 157, 9, 13, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 3, 15, 164, 8, 15, + 1, 16, 3, 16, 167, 8, 16, 1, 16, 1, 16, 1, 16, 5, 16, 172, 8, 16, 10, 16, + 12, 16, 175, 9, 16, 1, 17, 1, 17, 1, 17, 1, 17, 5, 17, 181, 8, 17, 10, + 17, 12, 17, 184, 9, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, + 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 197, 8, 19, 1, 20, 1, 20, 1, 20, 5, + 20, 202, 8, 20, 10, 20, 12, 20, 205, 9, 20, 1, 21, 1, 21, 1, 21, 5, 21, + 210, 8, 21, 10, 21, 12, 21, 213, 9, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, + 22, 1, 22, 5, 22, 221, 8, 22, 10, 22, 12, 22, 224, 9, 22, 1, 23, 1, 23, + 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 235, 8, 23, 10, + 23, 12, 23, 238, 9, 23, 1, 24, 1, 24, 4, 24, 242, 8, 24, 11, 24, 12, 24, + 243, 1, 24, 1, 24, 4, 24, 248, 8, 24, 11, 24, 12, 24, 249, 1, 24, 3, 24, + 253, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 261, 8, 25, + 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 269, 8, 25, 1, 25, 1, + 25, 1, 25, 1, 25, 3, 25, 275, 8, 25, 1, 25, 1, 25, 1, 25, 5, 25, 280, 8, + 25, 10, 25, 12, 25, 283, 9, 25, 1, 26, 3, 26, 286, 8, 26, 1, 26, 1, 26, + 1, 26, 3, 26, 291, 8, 26, 1, 26, 3, 26, 294, 8, 26, 1, 26, 1, 26, 1, 26, + 1, 26, 1, 26, 1, 26, 3, 26, 302, 8, 26, 1, 26, 3, 26, 305, 8, 26, 1, 26, + 1, 26, 1, 26, 3, 26, 310, 8, 26, 1, 26, 3, 26, 313, 8, 26, 1, 26, 1, 26, + 3, 26, 317, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 322, 8, 26, 10, 26, 12, + 26, 325, 9, 26, 1, 26, 1, 26, 3, 26, 329, 8, 26, 1, 26, 3, 26, 332, 8, + 26, 1, 26, 1, 26, 3, 26, 336, 8, 26, 1, 27, 1, 27, 1, 27, 5, 27, 341, 8, + 27, 10, 27, 12, 27, 344, 9, 27, 1, 28, 1, 28, 1, 28, 5, 28, 349, 8, 28, + 10, 28, 12, 28, 352, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, + 29, 1, 29, 5, 29, 362, 8, 29, 10, 29, 12, 29, 365, 9, 29, 1, 30, 3, 30, + 368, 8, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, + 31, 1, 31, 5, 31, 380, 8, 31, 10, 31, 12, 31, 383, 9, 31, 1, 32, 3, 32, + 386, 8, 32, 1, 32, 1, 32, 1, 33, 3, 33, 391, 8, 33, 1, 33, 1, 33, 1, 33, + 3, 33, 396, 8, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 404, + 8, 33, 1, 33, 0, 3, 44, 46, 50, 34, 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, 0, 4, 2, 0, 36, 36, 44, 44, 1, 0, 9, 15, 1, 0, 31, 33, - 2, 0, 26, 26, 30, 30, 429, 0, 64, 1, 0, 0, 0, 2, 73, 1, 0, 0, 0, 4, 75, - 1, 0, 0, 0, 6, 86, 1, 0, 0, 0, 8, 91, 1, 0, 0, 0, 10, 96, 1, 0, 0, 0, 12, - 112, 1, 0, 0, 0, 14, 116, 1, 0, 0, 0, 16, 121, 1, 0, 0, 0, 18, 129, 1, - 0, 0, 0, 20, 132, 1, 0, 0, 0, 22, 137, 1, 0, 0, 0, 24, 147, 1, 0, 0, 0, - 26, 150, 1, 0, 0, 0, 28, 155, 1, 0, 0, 0, 30, 165, 1, 0, 0, 0, 32, 176, - 1, 0, 0, 0, 34, 179, 1, 0, 0, 0, 36, 187, 1, 0, 0, 0, 38, 195, 1, 0, 0, - 0, 40, 203, 1, 0, 0, 0, 42, 214, 1, 0, 0, 0, 44, 241, 1, 0, 0, 0, 46, 243, - 1, 0, 0, 0, 48, 324, 1, 0, 0, 0, 50, 326, 1, 0, 0, 0, 52, 334, 1, 0, 0, - 0, 54, 342, 1, 0, 0, 0, 56, 356, 1, 0, 0, 0, 58, 360, 1, 0, 0, 0, 60, 374, - 1, 0, 0, 0, 62, 392, 1, 0, 0, 0, 64, 65, 3, 2, 1, 0, 65, 66, 5, 0, 0, 1, - 66, 1, 1, 0, 0, 0, 67, 74, 3, 4, 2, 0, 68, 74, 3, 6, 3, 0, 69, 74, 3, 14, - 7, 0, 70, 74, 3, 16, 8, 0, 71, 74, 3, 20, 10, 0, 72, 74, 3, 18, 9, 0, 73, - 67, 1, 0, 0, 0, 73, 68, 1, 0, 0, 0, 73, 69, 1, 0, 0, 0, 73, 70, 1, 0, 0, - 0, 73, 71, 1, 0, 0, 0, 73, 72, 1, 0, 0, 0, 74, 3, 1, 0, 0, 0, 75, 82, 5, - 1, 0, 0, 76, 77, 3, 8, 4, 0, 77, 78, 5, 8, 0, 0, 78, 83, 1, 0, 0, 0, 79, - 80, 3, 10, 5, 0, 80, 81, 5, 7, 0, 0, 81, 83, 1, 0, 0, 0, 82, 76, 1, 0, - 0, 0, 82, 79, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 85, 3, 34, 17, 0, 85, - 5, 1, 0, 0, 0, 86, 89, 5, 2, 0, 0, 87, 90, 3, 8, 4, 0, 88, 90, 3, 10, 5, - 0, 89, 87, 1, 0, 0, 0, 89, 88, 1, 0, 0, 0, 90, 7, 1, 0, 0, 0, 91, 94, 3, - 22, 11, 0, 92, 93, 5, 29, 0, 0, 93, 95, 3, 26, 13, 0, 94, 92, 1, 0, 0, - 0, 94, 95, 1, 0, 0, 0, 95, 9, 1, 0, 0, 0, 96, 97, 3, 22, 11, 0, 97, 106, - 5, 22, 0, 0, 98, 103, 3, 12, 6, 0, 99, 100, 5, 25, 0, 0, 100, 102, 3, 12, - 6, 0, 101, 99, 1, 0, 0, 0, 102, 105, 1, 0, 0, 0, 103, 101, 1, 0, 0, 0, - 103, 104, 1, 0, 0, 0, 104, 107, 1, 0, 0, 0, 105, 103, 1, 0, 0, 0, 106, - 98, 1, 0, 0, 0, 106, 107, 1, 0, 0, 0, 107, 108, 1, 0, 0, 0, 108, 109, 5, - 23, 0, 0, 109, 110, 5, 29, 0, 0, 110, 111, 3, 26, 13, 0, 111, 11, 1, 0, - 0, 0, 112, 113, 5, 44, 0, 0, 113, 114, 5, 29, 0, 0, 114, 115, 3, 26, 13, - 0, 115, 13, 1, 0, 0, 0, 116, 119, 5, 3, 0, 0, 117, 120, 3, 8, 4, 0, 118, - 120, 3, 10, 5, 0, 119, 117, 1, 0, 0, 0, 119, 118, 1, 0, 0, 0, 120, 15, - 1, 0, 0, 0, 121, 126, 5, 5, 0, 0, 122, 125, 5, 6, 0, 0, 123, 125, 5, 42, - 0, 0, 124, 122, 1, 0, 0, 0, 124, 123, 1, 0, 0, 0, 125, 128, 1, 0, 0, 0, - 126, 124, 1, 0, 0, 0, 126, 127, 1, 0, 0, 0, 127, 17, 1, 0, 0, 0, 128, 126, - 1, 0, 0, 0, 129, 130, 1, 0, 0, 0, 130, 19, 1, 0, 0, 0, 131, 133, 5, 4, - 0, 0, 132, 131, 1, 0, 0, 0, 132, 133, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, - 134, 135, 3, 34, 17, 0, 135, 21, 1, 0, 0, 0, 136, 138, 5, 24, 0, 0, 137, - 136, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 139, 1, 0, 0, 0, 139, 144, - 5, 44, 0, 0, 140, 141, 5, 24, 0, 0, 141, 143, 5, 44, 0, 0, 142, 140, 1, - 0, 0, 0, 143, 146, 1, 0, 0, 0, 144, 142, 1, 0, 0, 0, 144, 145, 1, 0, 0, - 0, 145, 23, 1, 0, 0, 0, 146, 144, 1, 0, 0, 0, 147, 148, 3, 26, 13, 0, 148, - 149, 5, 0, 0, 1, 149, 25, 1, 0, 0, 0, 150, 152, 3, 28, 14, 0, 151, 153, - 3, 30, 15, 0, 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 27, 1, 0, - 0, 0, 154, 156, 5, 24, 0, 0, 155, 154, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, - 156, 157, 1, 0, 0, 0, 157, 162, 7, 0, 0, 0, 158, 159, 5, 24, 0, 0, 159, - 161, 5, 44, 0, 0, 160, 158, 1, 0, 0, 0, 161, 164, 1, 0, 0, 0, 162, 160, - 1, 0, 0, 0, 162, 163, 1, 0, 0, 0, 163, 29, 1, 0, 0, 0, 164, 162, 1, 0, - 0, 0, 165, 166, 5, 22, 0, 0, 166, 171, 3, 26, 13, 0, 167, 168, 5, 25, 0, - 0, 168, 170, 3, 26, 13, 0, 169, 167, 1, 0, 0, 0, 170, 173, 1, 0, 0, 0, - 171, 169, 1, 0, 0, 0, 171, 172, 1, 0, 0, 0, 172, 174, 1, 0, 0, 0, 173, - 171, 1, 0, 0, 0, 174, 175, 5, 23, 0, 0, 175, 31, 1, 0, 0, 0, 176, 177, - 3, 34, 17, 0, 177, 178, 5, 0, 0, 1, 178, 33, 1, 0, 0, 0, 179, 185, 3, 36, - 18, 0, 180, 181, 5, 28, 0, 0, 181, 182, 3, 36, 18, 0, 182, 183, 5, 29, - 0, 0, 183, 184, 3, 34, 17, 0, 184, 186, 1, 0, 0, 0, 185, 180, 1, 0, 0, - 0, 185, 186, 1, 0, 0, 0, 186, 35, 1, 0, 0, 0, 187, 192, 3, 38, 19, 0, 188, - 189, 5, 17, 0, 0, 189, 191, 3, 38, 19, 0, 190, 188, 1, 0, 0, 0, 191, 194, - 1, 0, 0, 0, 192, 190, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 37, 1, 0, - 0, 0, 194, 192, 1, 0, 0, 0, 195, 200, 3, 40, 20, 0, 196, 197, 5, 16, 0, - 0, 197, 199, 3, 40, 20, 0, 198, 196, 1, 0, 0, 0, 199, 202, 1, 0, 0, 0, - 200, 198, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 39, 1, 0, 0, 0, 202, 200, - 1, 0, 0, 0, 203, 204, 6, 20, -1, 0, 204, 205, 3, 42, 21, 0, 205, 211, 1, - 0, 0, 0, 206, 207, 10, 1, 0, 0, 207, 208, 7, 1, 0, 0, 208, 210, 3, 40, - 20, 2, 209, 206, 1, 0, 0, 0, 210, 213, 1, 0, 0, 0, 211, 209, 1, 0, 0, 0, - 211, 212, 1, 0, 0, 0, 212, 41, 1, 0, 0, 0, 213, 211, 1, 0, 0, 0, 214, 215, - 6, 21, -1, 0, 215, 216, 3, 44, 22, 0, 216, 225, 1, 0, 0, 0, 217, 218, 10, - 2, 0, 0, 218, 219, 7, 2, 0, 0, 219, 224, 3, 42, 21, 3, 220, 221, 10, 1, - 0, 0, 221, 222, 7, 3, 0, 0, 222, 224, 3, 42, 21, 2, 223, 217, 1, 0, 0, - 0, 223, 220, 1, 0, 0, 0, 224, 227, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 225, - 226, 1, 0, 0, 0, 226, 43, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 228, 242, 3, - 46, 23, 0, 229, 231, 5, 27, 0, 0, 230, 229, 1, 0, 0, 0, 231, 232, 1, 0, - 0, 0, 232, 230, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, - 234, 242, 3, 46, 23, 0, 235, 237, 5, 26, 0, 0, 236, 235, 1, 0, 0, 0, 237, - 238, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 240, - 1, 0, 0, 0, 240, 242, 3, 46, 23, 0, 241, 228, 1, 0, 0, 0, 241, 230, 1, - 0, 0, 0, 241, 236, 1, 0, 0, 0, 242, 45, 1, 0, 0, 0, 243, 244, 6, 23, -1, - 0, 244, 245, 3, 48, 24, 0, 245, 270, 1, 0, 0, 0, 246, 247, 10, 3, 0, 0, - 247, 249, 5, 24, 0, 0, 248, 250, 5, 28, 0, 0, 249, 248, 1, 0, 0, 0, 249, - 250, 1, 0, 0, 0, 250, 251, 1, 0, 0, 0, 251, 269, 5, 44, 0, 0, 252, 253, - 10, 2, 0, 0, 253, 254, 5, 24, 0, 0, 254, 255, 5, 44, 0, 0, 255, 257, 5, - 22, 0, 0, 256, 258, 3, 50, 25, 0, 257, 256, 1, 0, 0, 0, 257, 258, 1, 0, - 0, 0, 258, 259, 1, 0, 0, 0, 259, 269, 5, 23, 0, 0, 260, 261, 10, 1, 0, - 0, 261, 263, 5, 18, 0, 0, 262, 264, 5, 28, 0, 0, 263, 262, 1, 0, 0, 0, - 263, 264, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 266, 3, 34, 17, 0, 266, - 267, 5, 19, 0, 0, 267, 269, 1, 0, 0, 0, 268, 246, 1, 0, 0, 0, 268, 252, - 1, 0, 0, 0, 268, 260, 1, 0, 0, 0, 269, 272, 1, 0, 0, 0, 270, 268, 1, 0, - 0, 0, 270, 271, 1, 0, 0, 0, 271, 47, 1, 0, 0, 0, 272, 270, 1, 0, 0, 0, - 273, 275, 5, 24, 0, 0, 274, 273, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, - 276, 1, 0, 0, 0, 276, 282, 5, 44, 0, 0, 277, 279, 5, 22, 0, 0, 278, 280, - 3, 50, 25, 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, 325, 1, 0, 0, 0, 284, 285, 5, 22, 0, 0, 285, 286, 3, 34, 17, 0, - 286, 287, 5, 23, 0, 0, 287, 325, 1, 0, 0, 0, 288, 290, 5, 18, 0, 0, 289, - 291, 3, 52, 26, 0, 290, 289, 1, 0, 0, 0, 290, 291, 1, 0, 0, 0, 291, 293, - 1, 0, 0, 0, 292, 294, 5, 25, 0, 0, 293, 292, 1, 0, 0, 0, 293, 294, 1, 0, - 0, 0, 294, 295, 1, 0, 0, 0, 295, 325, 5, 19, 0, 0, 296, 298, 5, 20, 0, - 0, 297, 299, 3, 58, 29, 0, 298, 297, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, - 299, 301, 1, 0, 0, 0, 300, 302, 5, 25, 0, 0, 301, 300, 1, 0, 0, 0, 301, - 302, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 325, 5, 21, 0, 0, 304, 306, - 5, 24, 0, 0, 305, 304, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 307, 1, 0, - 0, 0, 307, 312, 5, 44, 0, 0, 308, 309, 5, 24, 0, 0, 309, 311, 5, 44, 0, - 0, 310, 308, 1, 0, 0, 0, 311, 314, 1, 0, 0, 0, 312, 310, 1, 0, 0, 0, 312, - 313, 1, 0, 0, 0, 313, 315, 1, 0, 0, 0, 314, 312, 1, 0, 0, 0, 315, 317, - 5, 20, 0, 0, 316, 318, 3, 54, 27, 0, 317, 316, 1, 0, 0, 0, 317, 318, 1, - 0, 0, 0, 318, 320, 1, 0, 0, 0, 319, 321, 5, 25, 0, 0, 320, 319, 1, 0, 0, - 0, 320, 321, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 325, 5, 21, 0, 0, 323, - 325, 3, 62, 31, 0, 324, 274, 1, 0, 0, 0, 324, 284, 1, 0, 0, 0, 324, 288, - 1, 0, 0, 0, 324, 296, 1, 0, 0, 0, 324, 305, 1, 0, 0, 0, 324, 323, 1, 0, - 0, 0, 325, 49, 1, 0, 0, 0, 326, 331, 3, 34, 17, 0, 327, 328, 5, 25, 0, - 0, 328, 330, 3, 34, 17, 0, 329, 327, 1, 0, 0, 0, 330, 333, 1, 0, 0, 0, - 331, 329, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 51, 1, 0, 0, 0, 333, 331, - 1, 0, 0, 0, 334, 339, 3, 60, 30, 0, 335, 336, 5, 25, 0, 0, 336, 338, 3, - 60, 30, 0, 337, 335, 1, 0, 0, 0, 338, 341, 1, 0, 0, 0, 339, 337, 1, 0, - 0, 0, 339, 340, 1, 0, 0, 0, 340, 53, 1, 0, 0, 0, 341, 339, 1, 0, 0, 0, - 342, 343, 3, 56, 28, 0, 343, 344, 5, 29, 0, 0, 344, 352, 3, 34, 17, 0, - 345, 346, 5, 25, 0, 0, 346, 347, 3, 56, 28, 0, 347, 348, 5, 29, 0, 0, 348, - 349, 3, 34, 17, 0, 349, 351, 1, 0, 0, 0, 350, 345, 1, 0, 0, 0, 351, 354, - 1, 0, 0, 0, 352, 350, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 55, 1, 0, - 0, 0, 354, 352, 1, 0, 0, 0, 355, 357, 5, 28, 0, 0, 356, 355, 1, 0, 0, 0, - 356, 357, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 359, 5, 44, 0, 0, 359, - 57, 1, 0, 0, 0, 360, 361, 3, 60, 30, 0, 361, 362, 5, 29, 0, 0, 362, 370, - 3, 34, 17, 0, 363, 364, 5, 25, 0, 0, 364, 365, 3, 60, 30, 0, 365, 366, - 5, 29, 0, 0, 366, 367, 3, 34, 17, 0, 367, 369, 1, 0, 0, 0, 368, 363, 1, - 0, 0, 0, 369, 372, 1, 0, 0, 0, 370, 368, 1, 0, 0, 0, 370, 371, 1, 0, 0, - 0, 371, 59, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 373, 375, 5, 28, 0, 0, 374, - 373, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 376, 1, 0, 0, 0, 376, 377, - 3, 34, 17, 0, 377, 61, 1, 0, 0, 0, 378, 380, 5, 26, 0, 0, 379, 378, 1, - 0, 0, 0, 379, 380, 1, 0, 0, 0, 380, 381, 1, 0, 0, 0, 381, 393, 5, 40, 0, - 0, 382, 393, 5, 41, 0, 0, 383, 385, 5, 26, 0, 0, 384, 383, 1, 0, 0, 0, - 384, 385, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 393, 5, 39, 0, 0, 387, - 393, 5, 42, 0, 0, 388, 393, 5, 43, 0, 0, 389, 393, 5, 34, 0, 0, 390, 393, - 5, 35, 0, 0, 391, 393, 5, 36, 0, 0, 392, 379, 1, 0, 0, 0, 392, 382, 1, - 0, 0, 0, 392, 384, 1, 0, 0, 0, 392, 387, 1, 0, 0, 0, 392, 388, 1, 0, 0, - 0, 392, 389, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 392, 391, 1, 0, 0, 0, 393, - 63, 1, 0, 0, 0, 51, 73, 82, 89, 94, 103, 106, 119, 124, 126, 132, 137, - 144, 152, 155, 162, 171, 185, 192, 200, 211, 223, 225, 232, 238, 241, 249, - 257, 263, 268, 270, 274, 279, 282, 290, 293, 298, 301, 305, 312, 317, 320, - 324, 331, 339, 352, 356, 370, 374, 379, 384, 392, + 56, 58, 60, 62, 64, 66, 0, 5, 1, 0, 1, 2, 2, 0, 39, 39, 47, 47, 1, 0, 12, + 18, 1, 0, 34, 36, 2, 0, 29, 29, 33, 33, 440, 0, 68, 1, 0, 0, 0, 2, 79, + 1, 0, 0, 0, 4, 81, 1, 0, 0, 0, 6, 83, 1, 0, 0, 0, 8, 94, 1, 0, 0, 0, 10, + 99, 1, 0, 0, 0, 12, 104, 1, 0, 0, 0, 14, 120, 1, 0, 0, 0, 16, 124, 1, 0, + 0, 0, 18, 129, 1, 0, 0, 0, 20, 137, 1, 0, 0, 0, 22, 139, 1, 0, 0, 0, 24, + 143, 1, 0, 0, 0, 26, 148, 1, 0, 0, 0, 28, 158, 1, 0, 0, 0, 30, 161, 1, + 0, 0, 0, 32, 166, 1, 0, 0, 0, 34, 176, 1, 0, 0, 0, 36, 187, 1, 0, 0, 0, + 38, 190, 1, 0, 0, 0, 40, 198, 1, 0, 0, 0, 42, 206, 1, 0, 0, 0, 44, 214, + 1, 0, 0, 0, 46, 225, 1, 0, 0, 0, 48, 252, 1, 0, 0, 0, 50, 254, 1, 0, 0, + 0, 52, 335, 1, 0, 0, 0, 54, 337, 1, 0, 0, 0, 56, 345, 1, 0, 0, 0, 58, 353, + 1, 0, 0, 0, 60, 367, 1, 0, 0, 0, 62, 371, 1, 0, 0, 0, 64, 385, 1, 0, 0, + 0, 66, 403, 1, 0, 0, 0, 68, 69, 3, 2, 1, 0, 69, 70, 5, 0, 0, 1, 70, 1, + 1, 0, 0, 0, 71, 80, 3, 4, 2, 0, 72, 80, 3, 6, 3, 0, 73, 80, 3, 8, 4, 0, + 74, 80, 3, 16, 8, 0, 75, 80, 3, 18, 9, 0, 76, 80, 3, 22, 11, 0, 77, 80, + 3, 24, 12, 0, 78, 80, 3, 20, 10, 0, 79, 71, 1, 0, 0, 0, 79, 72, 1, 0, 0, + 0, 79, 73, 1, 0, 0, 0, 79, 74, 1, 0, 0, 0, 79, 75, 1, 0, 0, 0, 79, 76, + 1, 0, 0, 0, 79, 77, 1, 0, 0, 0, 79, 78, 1, 0, 0, 0, 80, 3, 1, 0, 0, 0, + 81, 82, 7, 0, 0, 0, 82, 5, 1, 0, 0, 0, 83, 90, 5, 3, 0, 0, 84, 85, 3, 10, + 5, 0, 85, 86, 5, 11, 0, 0, 86, 91, 1, 0, 0, 0, 87, 88, 3, 12, 6, 0, 88, + 89, 5, 10, 0, 0, 89, 91, 1, 0, 0, 0, 90, 84, 1, 0, 0, 0, 90, 87, 1, 0, + 0, 0, 91, 92, 1, 0, 0, 0, 92, 93, 3, 38, 19, 0, 93, 7, 1, 0, 0, 0, 94, + 97, 5, 4, 0, 0, 95, 98, 3, 10, 5, 0, 96, 98, 3, 12, 6, 0, 97, 95, 1, 0, + 0, 0, 97, 96, 1, 0, 0, 0, 98, 9, 1, 0, 0, 0, 99, 102, 3, 26, 13, 0, 100, + 101, 5, 32, 0, 0, 101, 103, 3, 30, 15, 0, 102, 100, 1, 0, 0, 0, 102, 103, + 1, 0, 0, 0, 103, 11, 1, 0, 0, 0, 104, 105, 3, 26, 13, 0, 105, 114, 5, 25, + 0, 0, 106, 111, 3, 14, 7, 0, 107, 108, 5, 28, 0, 0, 108, 110, 3, 14, 7, + 0, 109, 107, 1, 0, 0, 0, 110, 113, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 111, + 112, 1, 0, 0, 0, 112, 115, 1, 0, 0, 0, 113, 111, 1, 0, 0, 0, 114, 106, + 1, 0, 0, 0, 114, 115, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 117, 5, 26, + 0, 0, 117, 118, 5, 32, 0, 0, 118, 119, 3, 30, 15, 0, 119, 13, 1, 0, 0, + 0, 120, 121, 5, 47, 0, 0, 121, 122, 5, 32, 0, 0, 122, 123, 3, 30, 15, 0, + 123, 15, 1, 0, 0, 0, 124, 127, 5, 5, 0, 0, 125, 128, 3, 10, 5, 0, 126, + 128, 3, 12, 6, 0, 127, 125, 1, 0, 0, 0, 127, 126, 1, 0, 0, 0, 128, 17, + 1, 0, 0, 0, 129, 134, 5, 8, 0, 0, 130, 133, 5, 9, 0, 0, 131, 133, 5, 45, + 0, 0, 132, 130, 1, 0, 0, 0, 132, 131, 1, 0, 0, 0, 133, 136, 1, 0, 0, 0, + 134, 132, 1, 0, 0, 0, 134, 135, 1, 0, 0, 0, 135, 19, 1, 0, 0, 0, 136, 134, + 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 21, 1, 0, 0, 0, 139, 140, 5, 6, + 0, 0, 140, 141, 3, 38, 19, 0, 141, 23, 1, 0, 0, 0, 142, 144, 5, 7, 0, 0, + 143, 142, 1, 0, 0, 0, 143, 144, 1, 0, 0, 0, 144, 145, 1, 0, 0, 0, 145, + 146, 3, 38, 19, 0, 146, 25, 1, 0, 0, 0, 147, 149, 5, 27, 0, 0, 148, 147, + 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 155, 5, 47, + 0, 0, 151, 152, 5, 27, 0, 0, 152, 154, 5, 47, 0, 0, 153, 151, 1, 0, 0, + 0, 154, 157, 1, 0, 0, 0, 155, 153, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, + 27, 1, 0, 0, 0, 157, 155, 1, 0, 0, 0, 158, 159, 3, 30, 15, 0, 159, 160, + 5, 0, 0, 1, 160, 29, 1, 0, 0, 0, 161, 163, 3, 32, 16, 0, 162, 164, 3, 34, + 17, 0, 163, 162, 1, 0, 0, 0, 163, 164, 1, 0, 0, 0, 164, 31, 1, 0, 0, 0, + 165, 167, 5, 27, 0, 0, 166, 165, 1, 0, 0, 0, 166, 167, 1, 0, 0, 0, 167, + 168, 1, 0, 0, 0, 168, 173, 7, 1, 0, 0, 169, 170, 5, 27, 0, 0, 170, 172, + 5, 47, 0, 0, 171, 169, 1, 0, 0, 0, 172, 175, 1, 0, 0, 0, 173, 171, 1, 0, + 0, 0, 173, 174, 1, 0, 0, 0, 174, 33, 1, 0, 0, 0, 175, 173, 1, 0, 0, 0, + 176, 177, 5, 25, 0, 0, 177, 182, 3, 30, 15, 0, 178, 179, 5, 28, 0, 0, 179, + 181, 3, 30, 15, 0, 180, 178, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, + 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 185, 1, 0, 0, 0, 184, 182, 1, 0, + 0, 0, 185, 186, 5, 26, 0, 0, 186, 35, 1, 0, 0, 0, 187, 188, 3, 38, 19, + 0, 188, 189, 5, 0, 0, 1, 189, 37, 1, 0, 0, 0, 190, 196, 3, 40, 20, 0, 191, + 192, 5, 31, 0, 0, 192, 193, 3, 40, 20, 0, 193, 194, 5, 32, 0, 0, 194, 195, + 3, 38, 19, 0, 195, 197, 1, 0, 0, 0, 196, 191, 1, 0, 0, 0, 196, 197, 1, + 0, 0, 0, 197, 39, 1, 0, 0, 0, 198, 203, 3, 42, 21, 0, 199, 200, 5, 20, + 0, 0, 200, 202, 3, 42, 21, 0, 201, 199, 1, 0, 0, 0, 202, 205, 1, 0, 0, + 0, 203, 201, 1, 0, 0, 0, 203, 204, 1, 0, 0, 0, 204, 41, 1, 0, 0, 0, 205, + 203, 1, 0, 0, 0, 206, 211, 3, 44, 22, 0, 207, 208, 5, 19, 0, 0, 208, 210, + 3, 44, 22, 0, 209, 207, 1, 0, 0, 0, 210, 213, 1, 0, 0, 0, 211, 209, 1, + 0, 0, 0, 211, 212, 1, 0, 0, 0, 212, 43, 1, 0, 0, 0, 213, 211, 1, 0, 0, + 0, 214, 215, 6, 22, -1, 0, 215, 216, 3, 46, 23, 0, 216, 222, 1, 0, 0, 0, + 217, 218, 10, 1, 0, 0, 218, 219, 7, 2, 0, 0, 219, 221, 3, 44, 22, 2, 220, + 217, 1, 0, 0, 0, 221, 224, 1, 0, 0, 0, 222, 220, 1, 0, 0, 0, 222, 223, + 1, 0, 0, 0, 223, 45, 1, 0, 0, 0, 224, 222, 1, 0, 0, 0, 225, 226, 6, 23, + -1, 0, 226, 227, 3, 48, 24, 0, 227, 236, 1, 0, 0, 0, 228, 229, 10, 2, 0, + 0, 229, 230, 7, 3, 0, 0, 230, 235, 3, 46, 23, 3, 231, 232, 10, 1, 0, 0, + 232, 233, 7, 4, 0, 0, 233, 235, 3, 46, 23, 2, 234, 228, 1, 0, 0, 0, 234, + 231, 1, 0, 0, 0, 235, 238, 1, 0, 0, 0, 236, 234, 1, 0, 0, 0, 236, 237, + 1, 0, 0, 0, 237, 47, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 239, 253, 3, 50, + 25, 0, 240, 242, 5, 30, 0, 0, 241, 240, 1, 0, 0, 0, 242, 243, 1, 0, 0, + 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, + 253, 3, 50, 25, 0, 246, 248, 5, 29, 0, 0, 247, 246, 1, 0, 0, 0, 248, 249, + 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 251, 1, 0, + 0, 0, 251, 253, 3, 50, 25, 0, 252, 239, 1, 0, 0, 0, 252, 241, 1, 0, 0, + 0, 252, 247, 1, 0, 0, 0, 253, 49, 1, 0, 0, 0, 254, 255, 6, 25, -1, 0, 255, + 256, 3, 52, 26, 0, 256, 281, 1, 0, 0, 0, 257, 258, 10, 3, 0, 0, 258, 260, + 5, 27, 0, 0, 259, 261, 5, 31, 0, 0, 260, 259, 1, 0, 0, 0, 260, 261, 1, + 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 280, 5, 47, 0, 0, 263, 264, 10, 2, + 0, 0, 264, 265, 5, 27, 0, 0, 265, 266, 5, 47, 0, 0, 266, 268, 5, 25, 0, + 0, 267, 269, 3, 54, 27, 0, 268, 267, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, + 269, 270, 1, 0, 0, 0, 270, 280, 5, 26, 0, 0, 271, 272, 10, 1, 0, 0, 272, + 274, 5, 21, 0, 0, 273, 275, 5, 31, 0, 0, 274, 273, 1, 0, 0, 0, 274, 275, + 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 277, 3, 38, 19, 0, 277, 278, 5, + 22, 0, 0, 278, 280, 1, 0, 0, 0, 279, 257, 1, 0, 0, 0, 279, 263, 1, 0, 0, + 0, 279, 271, 1, 0, 0, 0, 280, 283, 1, 0, 0, 0, 281, 279, 1, 0, 0, 0, 281, + 282, 1, 0, 0, 0, 282, 51, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 284, 286, 5, + 27, 0, 0, 285, 284, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 287, 1, 0, 0, + 0, 287, 293, 5, 47, 0, 0, 288, 290, 5, 25, 0, 0, 289, 291, 3, 54, 27, 0, + 290, 289, 1, 0, 0, 0, 290, 291, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, + 294, 5, 26, 0, 0, 293, 288, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 336, + 1, 0, 0, 0, 295, 296, 5, 25, 0, 0, 296, 297, 3, 38, 19, 0, 297, 298, 5, + 26, 0, 0, 298, 336, 1, 0, 0, 0, 299, 301, 5, 21, 0, 0, 300, 302, 3, 56, + 28, 0, 301, 300, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 304, 1, 0, 0, 0, + 303, 305, 5, 28, 0, 0, 304, 303, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, + 306, 1, 0, 0, 0, 306, 336, 5, 22, 0, 0, 307, 309, 5, 23, 0, 0, 308, 310, + 3, 62, 31, 0, 309, 308, 1, 0, 0, 0, 309, 310, 1, 0, 0, 0, 310, 312, 1, + 0, 0, 0, 311, 313, 5, 28, 0, 0, 312, 311, 1, 0, 0, 0, 312, 313, 1, 0, 0, + 0, 313, 314, 1, 0, 0, 0, 314, 336, 5, 24, 0, 0, 315, 317, 5, 27, 0, 0, + 316, 315, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, + 323, 5, 47, 0, 0, 319, 320, 5, 27, 0, 0, 320, 322, 5, 47, 0, 0, 321, 319, + 1, 0, 0, 0, 322, 325, 1, 0, 0, 0, 323, 321, 1, 0, 0, 0, 323, 324, 1, 0, + 0, 0, 324, 326, 1, 0, 0, 0, 325, 323, 1, 0, 0, 0, 326, 328, 5, 23, 0, 0, + 327, 329, 3, 58, 29, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, + 331, 1, 0, 0, 0, 330, 332, 5, 28, 0, 0, 331, 330, 1, 0, 0, 0, 331, 332, + 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 336, 5, 24, 0, 0, 334, 336, 3, 66, + 33, 0, 335, 285, 1, 0, 0, 0, 335, 295, 1, 0, 0, 0, 335, 299, 1, 0, 0, 0, + 335, 307, 1, 0, 0, 0, 335, 316, 1, 0, 0, 0, 335, 334, 1, 0, 0, 0, 336, + 53, 1, 0, 0, 0, 337, 342, 3, 38, 19, 0, 338, 339, 5, 28, 0, 0, 339, 341, + 3, 38, 19, 0, 340, 338, 1, 0, 0, 0, 341, 344, 1, 0, 0, 0, 342, 340, 1, + 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 55, 1, 0, 0, 0, 344, 342, 1, 0, 0, + 0, 345, 350, 3, 64, 32, 0, 346, 347, 5, 28, 0, 0, 347, 349, 3, 64, 32, + 0, 348, 346, 1, 0, 0, 0, 349, 352, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 350, + 351, 1, 0, 0, 0, 351, 57, 1, 0, 0, 0, 352, 350, 1, 0, 0, 0, 353, 354, 3, + 60, 30, 0, 354, 355, 5, 32, 0, 0, 355, 363, 3, 38, 19, 0, 356, 357, 5, + 28, 0, 0, 357, 358, 3, 60, 30, 0, 358, 359, 5, 32, 0, 0, 359, 360, 3, 38, + 19, 0, 360, 362, 1, 0, 0, 0, 361, 356, 1, 0, 0, 0, 362, 365, 1, 0, 0, 0, + 363, 361, 1, 0, 0, 0, 363, 364, 1, 0, 0, 0, 364, 59, 1, 0, 0, 0, 365, 363, + 1, 0, 0, 0, 366, 368, 5, 31, 0, 0, 367, 366, 1, 0, 0, 0, 367, 368, 1, 0, + 0, 0, 368, 369, 1, 0, 0, 0, 369, 370, 5, 47, 0, 0, 370, 61, 1, 0, 0, 0, + 371, 372, 3, 64, 32, 0, 372, 373, 5, 32, 0, 0, 373, 381, 3, 38, 19, 0, + 374, 375, 5, 28, 0, 0, 375, 376, 3, 64, 32, 0, 376, 377, 5, 32, 0, 0, 377, + 378, 3, 38, 19, 0, 378, 380, 1, 0, 0, 0, 379, 374, 1, 0, 0, 0, 380, 383, + 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 381, 382, 1, 0, 0, 0, 382, 63, 1, 0, + 0, 0, 383, 381, 1, 0, 0, 0, 384, 386, 5, 31, 0, 0, 385, 384, 1, 0, 0, 0, + 385, 386, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 388, 3, 38, 19, 0, 388, + 65, 1, 0, 0, 0, 389, 391, 5, 29, 0, 0, 390, 389, 1, 0, 0, 0, 390, 391, + 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 404, 5, 43, 0, 0, 393, 404, 5, 44, + 0, 0, 394, 396, 5, 29, 0, 0, 395, 394, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, + 396, 397, 1, 0, 0, 0, 397, 404, 5, 42, 0, 0, 398, 404, 5, 45, 0, 0, 399, + 404, 5, 46, 0, 0, 400, 404, 5, 37, 0, 0, 401, 404, 5, 38, 0, 0, 402, 404, + 5, 39, 0, 0, 403, 390, 1, 0, 0, 0, 403, 393, 1, 0, 0, 0, 403, 395, 1, 0, + 0, 0, 403, 398, 1, 0, 0, 0, 403, 399, 1, 0, 0, 0, 403, 400, 1, 0, 0, 0, + 403, 401, 1, 0, 0, 0, 403, 402, 1, 0, 0, 0, 404, 67, 1, 0, 0, 0, 51, 79, + 90, 97, 102, 111, 114, 127, 132, 134, 143, 148, 155, 163, 166, 173, 182, + 196, 203, 211, 222, 234, 236, 243, 249, 252, 260, 268, 274, 279, 281, 285, + 290, 293, 301, 304, 309, 312, 316, 323, 328, 331, 335, 342, 350, 363, 367, + 381, 385, 390, 395, 403, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -279,82 +284,87 @@ const ( CommandsParserT__1 = 2 CommandsParserT__2 = 3 CommandsParserT__3 = 4 - CommandsParserCOMMAND = 5 - CommandsParserFLAG = 6 - CommandsParserARROW = 7 - CommandsParserEQUAL_ASSIGN = 8 - CommandsParserEQUALS = 9 - CommandsParserNOT_EQUALS = 10 - CommandsParserIN = 11 - CommandsParserLESS = 12 - CommandsParserLESS_EQUALS = 13 - CommandsParserGREATER_EQUALS = 14 - CommandsParserGREATER = 15 - CommandsParserLOGICAL_AND = 16 - CommandsParserLOGICAL_OR = 17 - CommandsParserLBRACKET = 18 - CommandsParserRPRACKET = 19 - CommandsParserLBRACE = 20 - CommandsParserRBRACE = 21 - CommandsParserLPAREN = 22 - CommandsParserRPAREN = 23 - CommandsParserDOT = 24 - CommandsParserCOMMA = 25 - CommandsParserMINUS = 26 - CommandsParserEXCLAM = 27 - CommandsParserQUESTIONMARK = 28 - CommandsParserCOLON = 29 - CommandsParserPLUS = 30 - CommandsParserSTAR = 31 - CommandsParserSLASH = 32 - CommandsParserPERCENT = 33 - CommandsParserCEL_TRUE = 34 - CommandsParserCEL_FALSE = 35 - CommandsParserNUL = 36 - CommandsParserWHITESPACE = 37 - CommandsParserCOMMENT = 38 - CommandsParserNUM_FLOAT = 39 - CommandsParserNUM_INT = 40 - CommandsParserNUM_UINT = 41 - CommandsParserSTRING = 42 - CommandsParserBYTES = 43 - CommandsParserIDENTIFIER = 44 + CommandsParserT__4 = 5 + CommandsParserT__5 = 6 + CommandsParserT__6 = 7 + CommandsParserCOMMAND = 8 + CommandsParserFLAG = 9 + CommandsParserARROW = 10 + CommandsParserEQUAL_ASSIGN = 11 + CommandsParserEQUALS = 12 + CommandsParserNOT_EQUALS = 13 + CommandsParserIN = 14 + CommandsParserLESS = 15 + CommandsParserLESS_EQUALS = 16 + CommandsParserGREATER_EQUALS = 17 + CommandsParserGREATER = 18 + CommandsParserLOGICAL_AND = 19 + CommandsParserLOGICAL_OR = 20 + CommandsParserLBRACKET = 21 + CommandsParserRPRACKET = 22 + CommandsParserLBRACE = 23 + CommandsParserRBRACE = 24 + CommandsParserLPAREN = 25 + CommandsParserRPAREN = 26 + CommandsParserDOT = 27 + CommandsParserCOMMA = 28 + CommandsParserMINUS = 29 + CommandsParserEXCLAM = 30 + CommandsParserQUESTIONMARK = 31 + CommandsParserCOLON = 32 + CommandsParserPLUS = 33 + CommandsParserSTAR = 34 + CommandsParserSLASH = 35 + CommandsParserPERCENT = 36 + CommandsParserCEL_TRUE = 37 + CommandsParserCEL_FALSE = 38 + CommandsParserNUL = 39 + CommandsParserWHITESPACE = 40 + CommandsParserCOMMENT = 41 + CommandsParserNUM_FLOAT = 42 + CommandsParserNUM_INT = 43 + CommandsParserNUM_UINT = 44 + CommandsParserSTRING = 45 + CommandsParserBYTES = 46 + CommandsParserIDENTIFIER = 47 ) // CommandsParser rules. const ( CommandsParserRULE_startCommand = 0 CommandsParserRULE_command = 1 - CommandsParserRULE_let = 2 - CommandsParserRULE_declare = 3 - CommandsParserRULE_varDecl = 4 - CommandsParserRULE_fnDecl = 5 - CommandsParserRULE_param = 6 - CommandsParserRULE_delete = 7 - CommandsParserRULE_simple = 8 - CommandsParserRULE_empty = 9 - CommandsParserRULE_exprCmd = 10 - CommandsParserRULE_qualId = 11 - CommandsParserRULE_startType = 12 - CommandsParserRULE_type = 13 - CommandsParserRULE_typeId = 14 - CommandsParserRULE_typeParamList = 15 - CommandsParserRULE_start = 16 - CommandsParserRULE_expr = 17 - CommandsParserRULE_conditionalOr = 18 - CommandsParserRULE_conditionalAnd = 19 - CommandsParserRULE_relation = 20 - CommandsParserRULE_calc = 21 - CommandsParserRULE_unary = 22 - CommandsParserRULE_member = 23 - CommandsParserRULE_primary = 24 - CommandsParserRULE_exprList = 25 - CommandsParserRULE_listInit = 26 - CommandsParserRULE_fieldInitializerList = 27 - CommandsParserRULE_optField = 28 - CommandsParserRULE_mapInitializerList = 29 - CommandsParserRULE_optExpr = 30 - CommandsParserRULE_literal = 31 + CommandsParserRULE_help = 2 + CommandsParserRULE_let = 3 + CommandsParserRULE_declare = 4 + CommandsParserRULE_varDecl = 5 + CommandsParserRULE_fnDecl = 6 + CommandsParserRULE_param = 7 + CommandsParserRULE_delete = 8 + CommandsParserRULE_simple = 9 + CommandsParserRULE_empty = 10 + CommandsParserRULE_compile = 11 + CommandsParserRULE_exprCmd = 12 + CommandsParserRULE_qualId = 13 + CommandsParserRULE_startType = 14 + CommandsParserRULE_type = 15 + CommandsParserRULE_typeId = 16 + CommandsParserRULE_typeParamList = 17 + CommandsParserRULE_start = 18 + CommandsParserRULE_expr = 19 + CommandsParserRULE_conditionalOr = 20 + CommandsParserRULE_conditionalAnd = 21 + CommandsParserRULE_relation = 22 + CommandsParserRULE_calc = 23 + CommandsParserRULE_unary = 24 + CommandsParserRULE_member = 25 + CommandsParserRULE_primary = 26 + CommandsParserRULE_exprList = 27 + CommandsParserRULE_listInit = 28 + CommandsParserRULE_fieldInitializerList = 29 + CommandsParserRULE_optField = 30 + CommandsParserRULE_mapInitializerList = 31 + CommandsParserRULE_optExpr = 32 + CommandsParserRULE_literal = 33 ) // IStartCommandContext is an interface to support dynamic dispatch. @@ -474,11 +484,11 @@ func (p *CommandsParser) StartCommand() (localctx IStartCommandContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(64) + p.SetState(68) p.Command() } { - p.SetState(65) + p.SetState(69) p.Match(CommandsParserEOF) } @@ -493,10 +503,12 @@ type ICommandContext interface { GetParser() antlr.Parser // Getter signatures + Help() IHelpContext Let() ILetContext Declare() IDeclareContext Delete_() IDeleteContext Simple() ISimpleContext + Compile() ICompileContext ExprCmd() IExprCmdContext Empty() IEmptyContext @@ -531,6 +543,22 @@ func NewCommandContext(parser antlr.Parser, parent antlr.ParserRuleContext, invo func (s *CommandContext) GetParser() antlr.Parser { return s.parser } +func (s *CommandContext) Help() IHelpContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IHelpContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IHelpContext) +} + func (s *CommandContext) Let() ILetContext { var t antlr.RuleContext for _, ctx := range s.GetChildren() { @@ -595,6 +623,22 @@ func (s *CommandContext) Simple() ISimpleContext { return t.(ISimpleContext) } +func (s *CommandContext) Compile() ICompileContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ICompileContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(ICompileContext) +} + func (s *CommandContext) ExprCmd() IExprCmdContext { var t antlr.RuleContext for _, ctx := range s.GetChildren() { @@ -680,49 +724,63 @@ func (p *CommandsParser) Command() (localctx ICommandContext) { } }() - p.SetState(73) + p.SetState(79) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { - case CommandsParserT__0: + case CommandsParserT__0, CommandsParserT__1: p.EnterOuterAlt(localctx, 1) { - p.SetState(67) - p.Let() + p.SetState(71) + p.Help() } - case CommandsParserT__1: + case CommandsParserT__2: p.EnterOuterAlt(localctx, 2) { - p.SetState(68) - p.Declare() + p.SetState(72) + p.Let() } - case CommandsParserT__2: + case CommandsParserT__3: p.EnterOuterAlt(localctx, 3) { - p.SetState(69) + p.SetState(73) + p.Declare() + } + + case CommandsParserT__4: + p.EnterOuterAlt(localctx, 4) + { + p.SetState(74) p.Delete_() } case CommandsParserCOMMAND: - p.EnterOuterAlt(localctx, 4) + p.EnterOuterAlt(localctx, 5) { - p.SetState(70) + p.SetState(75) p.Simple() } - case CommandsParserT__3, CommandsParserLBRACKET, CommandsParserLBRACE, CommandsParserLPAREN, CommandsParserDOT, CommandsParserMINUS, CommandsParserEXCLAM, CommandsParserCEL_TRUE, CommandsParserCEL_FALSE, CommandsParserNUL, CommandsParserNUM_FLOAT, CommandsParserNUM_INT, CommandsParserNUM_UINT, CommandsParserSTRING, CommandsParserBYTES, CommandsParserIDENTIFIER: - p.EnterOuterAlt(localctx, 5) + case CommandsParserT__5: + p.EnterOuterAlt(localctx, 6) { - p.SetState(71) + p.SetState(76) + p.Compile() + } + + case CommandsParserT__6, CommandsParserLBRACKET, CommandsParserLBRACE, CommandsParserLPAREN, CommandsParserDOT, CommandsParserMINUS, CommandsParserEXCLAM, CommandsParserCEL_TRUE, CommandsParserCEL_FALSE, CommandsParserNUL, CommandsParserNUM_FLOAT, CommandsParserNUM_INT, CommandsParserNUM_UINT, CommandsParserSTRING, CommandsParserBYTES, CommandsParserIDENTIFIER: + p.EnterOuterAlt(localctx, 7) + { + p.SetState(77) p.ExprCmd() } case CommandsParserEOF: - p.EnterOuterAlt(localctx, 6) + p.EnterOuterAlt(localctx, 8) { - p.SetState(72) + p.SetState(78) p.Empty() } @@ -733,6 +791,112 @@ func (p *CommandsParser) Command() (localctx ICommandContext) { return localctx } +// IHelpContext is an interface to support dynamic dispatch. +type IHelpContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + // IsHelpContext differentiates from other interfaces. + IsHelpContext() +} + +type HelpContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyHelpContext() *HelpContext { + var p = new(HelpContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = CommandsParserRULE_help + return p +} + +func (*HelpContext) IsHelpContext() {} + +func NewHelpContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *HelpContext { + var p = new(HelpContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = CommandsParserRULE_help + + return p +} + +func (s *HelpContext) GetParser() antlr.Parser { return s.parser } +func (s *HelpContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *HelpContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *HelpContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(CommandsListener); ok { + listenerT.EnterHelp(s) + } +} + +func (s *HelpContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(CommandsListener); ok { + listenerT.ExitHelp(s) + } +} + +func (s *HelpContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case CommandsVisitor: + return t.VisitHelp(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *CommandsParser) Help() (localctx IHelpContext) { + this := p + _ = this + + localctx = NewHelpContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 4, CommandsParserRULE_help) + 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(81) + _la = p.GetTokenStream().LA(1) + + if !(_la == CommandsParserT__0 || _la == CommandsParserT__1) { + p.GetErrorHandler().RecoverInline(p) + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + + return localctx +} + // ILetContext is an interface to support dynamic dispatch. type ILetContext interface { antlr.ParserRuleContext @@ -902,7 +1066,7 @@ func (p *CommandsParser) Let() (localctx ILetContext) { _ = this localctx = NewLetContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 4, CommandsParserRULE_let) + p.EnterRule(localctx, 6, CommandsParserRULE_let) defer func() { p.ExitRule() @@ -922,41 +1086,41 @@ func (p *CommandsParser) Let() (localctx ILetContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(75) - p.Match(CommandsParserT__0) + p.SetState(83) + p.Match(CommandsParserT__2) } - p.SetState(82) + p.SetState(90) p.GetErrorHandler().Sync(p) switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 1, p.GetParserRuleContext()) { case 1: { - p.SetState(76) + p.SetState(84) var _x = p.VarDecl() localctx.(*LetContext).var_ = _x } { - p.SetState(77) + p.SetState(85) p.Match(CommandsParserEQUAL_ASSIGN) } case 2: { - p.SetState(79) + p.SetState(87) var _x = p.FnDecl() localctx.(*LetContext).fn = _x } { - p.SetState(80) + p.SetState(88) p.Match(CommandsParserARROW) } } { - p.SetState(84) + p.SetState(92) var _x = p.Expr() @@ -1097,7 +1261,7 @@ func (p *CommandsParser) Declare() (localctx IDeclareContext) { _ = this localctx = NewDeclareContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 6, CommandsParserRULE_declare) + p.EnterRule(localctx, 8, CommandsParserRULE_declare) defer func() { p.ExitRule() @@ -1117,15 +1281,15 @@ func (p *CommandsParser) Declare() (localctx IDeclareContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(86) - p.Match(CommandsParserT__1) + p.SetState(94) + p.Match(CommandsParserT__3) } - p.SetState(89) + p.SetState(97) p.GetErrorHandler().Sync(p) switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 2, p.GetParserRuleContext()) { case 1: { - p.SetState(87) + p.SetState(95) var _x = p.VarDecl() @@ -1134,7 +1298,7 @@ func (p *CommandsParser) Declare() (localctx IDeclareContext) { case 2: { - p.SetState(88) + p.SetState(96) var _x = p.FnDecl() @@ -1282,7 +1446,7 @@ func (p *CommandsParser) VarDecl() (localctx IVarDeclContext) { _ = this localctx = NewVarDeclContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 8, CommandsParserRULE_varDecl) + p.EnterRule(localctx, 10, CommandsParserRULE_varDecl) var _la int defer func() { @@ -1303,23 +1467,23 @@ func (p *CommandsParser) VarDecl() (localctx IVarDeclContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(91) + p.SetState(99) var _x = p.QualId() localctx.(*VarDeclContext).id = _x } - p.SetState(94) + p.SetState(102) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserCOLON { { - p.SetState(92) + p.SetState(100) p.Match(CommandsParserCOLON) } { - p.SetState(93) + p.SetState(101) var _x = p.Type_() @@ -1552,7 +1716,7 @@ func (p *CommandsParser) FnDecl() (localctx IFnDeclContext) { _ = this localctx = NewFnDeclContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 10, CommandsParserRULE_fnDecl) + p.EnterRule(localctx, 12, CommandsParserRULE_fnDecl) var _la int defer func() { @@ -1573,40 +1737,40 @@ func (p *CommandsParser) FnDecl() (localctx IFnDeclContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(96) + p.SetState(104) var _x = p.QualId() localctx.(*FnDeclContext).id = _x } { - p.SetState(97) + p.SetState(105) p.Match(CommandsParserLPAREN) } - p.SetState(106) + p.SetState(114) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserIDENTIFIER { { - p.SetState(98) + p.SetState(106) var _x = p.Param() localctx.(*FnDeclContext)._param = _x } localctx.(*FnDeclContext).params = append(localctx.(*FnDeclContext).params, localctx.(*FnDeclContext)._param) - p.SetState(103) + p.SetState(111) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) for _la == CommandsParserCOMMA { { - p.SetState(99) + p.SetState(107) p.Match(CommandsParserCOMMA) } { - p.SetState(100) + p.SetState(108) var _x = p.Param() @@ -1614,22 +1778,22 @@ func (p *CommandsParser) FnDecl() (localctx IFnDeclContext) { } localctx.(*FnDeclContext).params = append(localctx.(*FnDeclContext).params, localctx.(*FnDeclContext)._param) - p.SetState(105) + p.SetState(113) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) } } { - p.SetState(108) + p.SetState(116) p.Match(CommandsParserRPAREN) } { - p.SetState(109) + p.SetState(117) p.Match(CommandsParserCOLON) } { - p.SetState(110) + p.SetState(118) var _x = p.Type_() @@ -1763,7 +1927,7 @@ func (p *CommandsParser) Param() (localctx IParamContext) { _ = this localctx = NewParamContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 12, CommandsParserRULE_param) + p.EnterRule(localctx, 14, CommandsParserRULE_param) defer func() { p.ExitRule() @@ -1783,18 +1947,18 @@ func (p *CommandsParser) Param() (localctx IParamContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(112) + p.SetState(120) var _m = p.Match(CommandsParserIDENTIFIER) localctx.(*ParamContext).pid = _m } { - p.SetState(113) + p.SetState(121) p.Match(CommandsParserCOLON) } { - p.SetState(114) + p.SetState(122) var _x = p.Type_() @@ -1935,7 +2099,7 @@ func (p *CommandsParser) Delete_() (localctx IDeleteContext) { _ = this localctx = NewDeleteContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 14, CommandsParserRULE_delete) + p.EnterRule(localctx, 16, CommandsParserRULE_delete) defer func() { p.ExitRule() @@ -1955,15 +2119,15 @@ func (p *CommandsParser) Delete_() (localctx IDeleteContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(116) - p.Match(CommandsParserT__2) + p.SetState(124) + p.Match(CommandsParserT__4) } - p.SetState(119) + p.SetState(127) p.GetErrorHandler().Sync(p) switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 6, p.GetParserRuleContext()) { case 1: { - p.SetState(117) + p.SetState(125) var _x = p.VarDecl() @@ -1972,7 +2136,7 @@ func (p *CommandsParser) Delete_() (localctx IDeleteContext) { case 2: { - p.SetState(118) + p.SetState(126) var _x = p.FnDecl() @@ -2128,7 +2292,7 @@ func (p *CommandsParser) Simple() (localctx ISimpleContext) { _ = this localctx = NewSimpleContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 16, CommandsParserRULE_simple) + p.EnterRule(localctx, 18, CommandsParserRULE_simple) var _la int defer func() { @@ -2149,24 +2313,24 @@ func (p *CommandsParser) Simple() (localctx ISimpleContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(121) + p.SetState(129) var _m = p.Match(CommandsParserCOMMAND) localctx.(*SimpleContext).cmd = _m } - p.SetState(126) + p.SetState(134) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) for _la == CommandsParserFLAG || _la == CommandsParserSTRING { - p.SetState(124) + p.SetState(132) p.GetErrorHandler().Sync(p) switch p.GetTokenStream().LA(1) { case CommandsParserFLAG: { - p.SetState(122) + p.SetState(130) var _m = p.Match(CommandsParserFLAG) @@ -2176,7 +2340,7 @@ func (p *CommandsParser) Simple() (localctx ISimpleContext) { case CommandsParserSTRING: { - p.SetState(123) + p.SetState(131) var _m = p.Match(CommandsParserSTRING) @@ -2188,7 +2352,7 @@ func (p *CommandsParser) Simple() (localctx ISimpleContext) { panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) } - p.SetState(128) + p.SetState(136) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) } @@ -2267,7 +2431,7 @@ func (p *CommandsParser) Empty() (localctx IEmptyContext) { _ = this localctx = NewEmptyContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 18, CommandsParserRULE_empty) + p.EnterRule(localctx, 20, CommandsParserRULE_empty) defer func() { p.ExitRule() @@ -2290,6 +2454,143 @@ func (p *CommandsParser) Empty() (localctx IEmptyContext) { return localctx } +// ICompileContext is an interface to support dynamic dispatch. +type ICompileContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // GetE returns the e rule contexts. + GetE() IExprContext + + // SetE sets the e rule contexts. + SetE(IExprContext) + + // Getter signatures + Expr() IExprContext + + // IsCompileContext differentiates from other interfaces. + IsCompileContext() +} + +type CompileContext struct { + *antlr.BaseParserRuleContext + parser antlr.Parser + e IExprContext +} + +func NewEmptyCompileContext() *CompileContext { + var p = new(CompileContext) + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + p.RuleIndex = CommandsParserRULE_compile + return p +} + +func (*CompileContext) IsCompileContext() {} + +func NewCompileContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *CompileContext { + var p = new(CompileContext) + + p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + + p.parser = parser + p.RuleIndex = CommandsParserRULE_compile + + return p +} + +func (s *CompileContext) GetParser() antlr.Parser { return s.parser } + +func (s *CompileContext) GetE() IExprContext { return s.e } + +func (s *CompileContext) SetE(v IExprContext) { s.e = v } + +func (s *CompileContext) Expr() IExprContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExprContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IExprContext) +} + +func (s *CompileContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *CompileContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *CompileContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(CommandsListener); ok { + listenerT.EnterCompile(s) + } +} + +func (s *CompileContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(CommandsListener); ok { + listenerT.ExitCompile(s) + } +} + +func (s *CompileContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case CommandsVisitor: + return t.VisitCompile(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *CommandsParser) Compile() (localctx ICompileContext) { + this := p + _ = this + + localctx = NewCompileContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 22, CommandsParserRULE_compile) + + 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(139) + p.Match(CommandsParserT__5) + } + { + p.SetState(140) + + var _x = p.Expr() + + localctx.(*CompileContext).e = _x + } + + return localctx +} + // IExprCmdContext is an interface to support dynamic dispatch. type IExprCmdContext interface { antlr.ParserRuleContext @@ -2393,7 +2694,7 @@ func (p *CommandsParser) ExprCmd() (localctx IExprCmdContext) { _ = this localctx = NewExprCmdContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 20, CommandsParserRULE_exprCmd) + p.EnterRule(localctx, 24, CommandsParserRULE_exprCmd) var _la int defer func() { @@ -2413,19 +2714,19 @@ func (p *CommandsParser) ExprCmd() (localctx IExprCmdContext) { }() p.EnterOuterAlt(localctx, 1) - p.SetState(132) + p.SetState(143) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) - if _la == CommandsParserT__3 { + if _la == CommandsParserT__6 { { - p.SetState(131) - p.Match(CommandsParserT__3) + p.SetState(142) + p.Match(CommandsParserT__6) } } { - p.SetState(134) + p.SetState(145) var _x = p.Expr() @@ -2574,7 +2875,7 @@ func (p *CommandsParser) QualId() (localctx IQualIdContext) { _ = this localctx = NewQualIdContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 22, CommandsParserRULE_qualId) + p.EnterRule(localctx, 26, CommandsParserRULE_qualId) var _la int defer func() { @@ -2594,13 +2895,13 @@ func (p *CommandsParser) QualId() (localctx IQualIdContext) { }() p.EnterOuterAlt(localctx, 1) - p.SetState(137) + p.SetState(148) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserDOT { { - p.SetState(136) + p.SetState(147) var _m = p.Match(CommandsParserDOT) @@ -2609,23 +2910,23 @@ func (p *CommandsParser) QualId() (localctx IQualIdContext) { } { - p.SetState(139) + p.SetState(150) var _m = p.Match(CommandsParserIDENTIFIER) localctx.(*QualIdContext).rid = _m } - p.SetState(144) + p.SetState(155) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) for _la == CommandsParserDOT { { - p.SetState(140) + p.SetState(151) p.Match(CommandsParserDOT) } { - p.SetState(141) + p.SetState(152) var _m = p.Match(CommandsParserIDENTIFIER) @@ -2633,7 +2934,7 @@ func (p *CommandsParser) QualId() (localctx IQualIdContext) { } localctx.(*QualIdContext).qualifiers = append(localctx.(*QualIdContext).qualifiers, localctx.(*QualIdContext)._IDENTIFIER) - p.SetState(146) + p.SetState(157) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) } @@ -2749,7 +3050,7 @@ func (p *CommandsParser) StartType() (localctx IStartTypeContext) { _ = this localctx = NewStartTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 24, CommandsParserRULE_startType) + p.EnterRule(localctx, 28, CommandsParserRULE_startType) defer func() { p.ExitRule() @@ -2769,14 +3070,14 @@ func (p *CommandsParser) StartType() (localctx IStartTypeContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(147) + p.SetState(158) var _x = p.Type_() localctx.(*StartTypeContext).t = _x } { - p.SetState(148) + p.SetState(159) p.Match(CommandsParserEOF) } @@ -2914,7 +3215,7 @@ func (p *CommandsParser) Type_() (localctx ITypeContext) { _ = this localctx = NewTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 26, CommandsParserRULE_type) + p.EnterRule(localctx, 30, CommandsParserRULE_type) var _la int defer func() { @@ -2935,19 +3236,19 @@ func (p *CommandsParser) Type_() (localctx ITypeContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(150) + p.SetState(161) var _x = p.TypeId() localctx.(*TypeContext).id = _x } - p.SetState(152) + p.SetState(163) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserLPAREN { { - p.SetState(151) + p.SetState(162) var _x = p.TypeParamList() @@ -3103,7 +3404,7 @@ func (p *CommandsParser) TypeId() (localctx ITypeIdContext) { _ = this localctx = NewTypeIdContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 28, CommandsParserRULE_typeId) + p.EnterRule(localctx, 32, CommandsParserRULE_typeId) var _la int defer func() { @@ -3123,13 +3424,13 @@ func (p *CommandsParser) TypeId() (localctx ITypeIdContext) { }() p.EnterOuterAlt(localctx, 1) - p.SetState(155) + p.SetState(166) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserDOT { { - p.SetState(154) + p.SetState(165) var _m = p.Match(CommandsParserDOT) @@ -3138,7 +3439,7 @@ func (p *CommandsParser) TypeId() (localctx ITypeIdContext) { } { - p.SetState(157) + p.SetState(168) var _lt = p.GetTokenStream().LT(1) @@ -3155,17 +3456,17 @@ func (p *CommandsParser) TypeId() (localctx ITypeIdContext) { p.Consume() } } - p.SetState(162) + p.SetState(173) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) for _la == CommandsParserDOT { { - p.SetState(158) + p.SetState(169) p.Match(CommandsParserDOT) } { - p.SetState(159) + p.SetState(170) var _m = p.Match(CommandsParserIDENTIFIER) @@ -3173,7 +3474,7 @@ func (p *CommandsParser) TypeId() (localctx ITypeIdContext) { } localctx.(*TypeIdContext).qualifiers = append(localctx.(*TypeIdContext).qualifiers, localctx.(*TypeIdContext)._IDENTIFIER) - p.SetState(164) + p.SetState(175) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) } @@ -3341,7 +3642,7 @@ func (p *CommandsParser) TypeParamList() (localctx ITypeParamListContext) { _ = this localctx = NewTypeParamListContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 30, CommandsParserRULE_typeParamList) + p.EnterRule(localctx, 34, CommandsParserRULE_typeParamList) var _la int defer func() { @@ -3362,28 +3663,28 @@ func (p *CommandsParser) TypeParamList() (localctx ITypeParamListContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(165) + p.SetState(176) p.Match(CommandsParserLPAREN) } { - p.SetState(166) + p.SetState(177) var _x = p.Type_() localctx.(*TypeParamListContext)._type = _x } localctx.(*TypeParamListContext).types = append(localctx.(*TypeParamListContext).types, localctx.(*TypeParamListContext)._type) - p.SetState(171) + p.SetState(182) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) for _la == CommandsParserCOMMA { { - p.SetState(167) + p.SetState(178) p.Match(CommandsParserCOMMA) } { - p.SetState(168) + p.SetState(179) var _x = p.Type_() @@ -3391,12 +3692,12 @@ func (p *CommandsParser) TypeParamList() (localctx ITypeParamListContext) { } localctx.(*TypeParamListContext).types = append(localctx.(*TypeParamListContext).types, localctx.(*TypeParamListContext)._type) - p.SetState(173) + p.SetState(184) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) } { - p.SetState(174) + p.SetState(185) p.Match(CommandsParserRPAREN) } @@ -3511,7 +3812,7 @@ func (p *CommandsParser) Start() (localctx IStartContext) { _ = this localctx = NewStartContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 32, CommandsParserRULE_start) + p.EnterRule(localctx, 36, CommandsParserRULE_start) defer func() { p.ExitRule() @@ -3531,14 +3832,14 @@ func (p *CommandsParser) Start() (localctx IStartContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(176) + p.SetState(187) var _x = p.Expr() localctx.(*StartContext).e = _x } { - p.SetState(177) + p.SetState(188) p.Match(CommandsParserEOF) } @@ -3734,7 +4035,7 @@ func (p *CommandsParser) Expr() (localctx IExprContext) { _ = this localctx = NewExprContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 34, CommandsParserRULE_expr) + p.EnterRule(localctx, 38, CommandsParserRULE_expr) var _la int defer func() { @@ -3755,37 +4056,37 @@ func (p *CommandsParser) Expr() (localctx IExprContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(179) + p.SetState(190) var _x = p.ConditionalOr() localctx.(*ExprContext).e = _x } - p.SetState(185) + p.SetState(196) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserQUESTIONMARK { { - p.SetState(180) + p.SetState(191) var _m = p.Match(CommandsParserQUESTIONMARK) localctx.(*ExprContext).op = _m } { - p.SetState(181) + p.SetState(192) var _x = p.ConditionalOr() localctx.(*ExprContext).e1 = _x } { - p.SetState(182) + p.SetState(193) p.Match(CommandsParserCOLON) } { - p.SetState(183) + p.SetState(194) var _x = p.Expr() @@ -3804,11 +4105,11 @@ type IConditionalOrContext interface { // GetParser returns the parser. GetParser() antlr.Parser - // GetS17 returns the s17 token. - GetS17() antlr.Token + // GetS20 returns the s20 token. + GetS20() antlr.Token - // SetS17 sets the s17 token. - SetS17(antlr.Token) + // SetS20 sets the s20 token. + SetS20(antlr.Token) // GetOps returns the ops token list. GetOps() []antlr.Token @@ -3848,7 +4149,7 @@ type ConditionalOrContext struct { *antlr.BaseParserRuleContext parser antlr.Parser e IConditionalAndContext - s17 antlr.Token + s20 antlr.Token ops []antlr.Token _conditionalAnd IConditionalAndContext e1 []IConditionalAndContext @@ -3876,9 +4177,9 @@ func NewConditionalOrContext(parser antlr.Parser, parent antlr.ParserRuleContext func (s *ConditionalOrContext) GetParser() antlr.Parser { return s.parser } -func (s *ConditionalOrContext) GetS17() antlr.Token { return s.s17 } +func (s *ConditionalOrContext) GetS20() antlr.Token { return s.s20 } -func (s *ConditionalOrContext) SetS17(v antlr.Token) { s.s17 = v } +func (s *ConditionalOrContext) SetS20(v antlr.Token) { s.s20 = v } func (s *ConditionalOrContext) GetOps() []antlr.Token { return s.ops } @@ -3980,7 +4281,7 @@ func (p *CommandsParser) ConditionalOr() (localctx IConditionalOrContext) { _ = this localctx = NewConditionalOrContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 36, CommandsParserRULE_conditionalOr) + p.EnterRule(localctx, 40, CommandsParserRULE_conditionalOr) var _la int defer func() { @@ -4001,27 +4302,27 @@ func (p *CommandsParser) ConditionalOr() (localctx IConditionalOrContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(187) + p.SetState(198) var _x = p.ConditionalAnd() localctx.(*ConditionalOrContext).e = _x } - p.SetState(192) + p.SetState(203) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) for _la == CommandsParserLOGICAL_OR { { - p.SetState(188) + p.SetState(199) var _m = p.Match(CommandsParserLOGICAL_OR) - localctx.(*ConditionalOrContext).s17 = _m + localctx.(*ConditionalOrContext).s20 = _m } - localctx.(*ConditionalOrContext).ops = append(localctx.(*ConditionalOrContext).ops, localctx.(*ConditionalOrContext).s17) + localctx.(*ConditionalOrContext).ops = append(localctx.(*ConditionalOrContext).ops, localctx.(*ConditionalOrContext).s20) { - p.SetState(189) + p.SetState(200) var _x = p.ConditionalAnd() @@ -4029,7 +4330,7 @@ func (p *CommandsParser) ConditionalOr() (localctx IConditionalOrContext) { } localctx.(*ConditionalOrContext).e1 = append(localctx.(*ConditionalOrContext).e1, localctx.(*ConditionalOrContext)._conditionalAnd) - p.SetState(194) + p.SetState(205) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) } @@ -4044,11 +4345,11 @@ type IConditionalAndContext interface { // GetParser returns the parser. GetParser() antlr.Parser - // GetS16 returns the s16 token. - GetS16() antlr.Token + // GetS19 returns the s19 token. + GetS19() antlr.Token - // SetS16 sets the s16 token. - SetS16(antlr.Token) + // SetS19 sets the s19 token. + SetS19(antlr.Token) // GetOps returns the ops token list. GetOps() []antlr.Token @@ -4088,7 +4389,7 @@ type ConditionalAndContext struct { *antlr.BaseParserRuleContext parser antlr.Parser e IRelationContext - s16 antlr.Token + s19 antlr.Token ops []antlr.Token _relation IRelationContext e1 []IRelationContext @@ -4116,9 +4417,9 @@ func NewConditionalAndContext(parser antlr.Parser, parent antlr.ParserRuleContex func (s *ConditionalAndContext) GetParser() antlr.Parser { return s.parser } -func (s *ConditionalAndContext) GetS16() antlr.Token { return s.s16 } +func (s *ConditionalAndContext) GetS19() antlr.Token { return s.s19 } -func (s *ConditionalAndContext) SetS16(v antlr.Token) { s.s16 = v } +func (s *ConditionalAndContext) SetS19(v antlr.Token) { s.s19 = v } func (s *ConditionalAndContext) GetOps() []antlr.Token { return s.ops } @@ -4220,7 +4521,7 @@ func (p *CommandsParser) ConditionalAnd() (localctx IConditionalAndContext) { _ = this localctx = NewConditionalAndContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 38, CommandsParserRULE_conditionalAnd) + p.EnterRule(localctx, 42, CommandsParserRULE_conditionalAnd) var _la int defer func() { @@ -4241,27 +4542,27 @@ func (p *CommandsParser) ConditionalAnd() (localctx IConditionalAndContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(195) + p.SetState(206) var _x = p.relation(0) localctx.(*ConditionalAndContext).e = _x } - p.SetState(200) + p.SetState(211) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) for _la == CommandsParserLOGICAL_AND { { - p.SetState(196) + p.SetState(207) var _m = p.Match(CommandsParserLOGICAL_AND) - localctx.(*ConditionalAndContext).s16 = _m + localctx.(*ConditionalAndContext).s19 = _m } - localctx.(*ConditionalAndContext).ops = append(localctx.(*ConditionalAndContext).ops, localctx.(*ConditionalAndContext).s16) + localctx.(*ConditionalAndContext).ops = append(localctx.(*ConditionalAndContext).ops, localctx.(*ConditionalAndContext).s19) { - p.SetState(197) + p.SetState(208) var _x = p.relation(0) @@ -4269,7 +4570,7 @@ func (p *CommandsParser) ConditionalAnd() (localctx IConditionalAndContext) { } localctx.(*ConditionalAndContext).e1 = append(localctx.(*ConditionalAndContext).e1, localctx.(*ConditionalAndContext)._relation) - p.SetState(202) + p.SetState(213) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) } @@ -4466,8 +4767,8 @@ func (p *CommandsParser) relation(_p int) (localctx IRelationContext) { localctx = NewRelationContext(p, p.GetParserRuleContext(), _parentState) var _prevctx IRelationContext = localctx var _ antlr.ParserRuleContext = _prevctx // TODO: To prevent unused variable warning. - _startState := 40 - p.EnterRecursionRule(localctx, 40, CommandsParserRULE_relation, _p) + _startState := 44 + p.EnterRecursionRule(localctx, 44, CommandsParserRULE_relation, _p) var _la int defer func() { @@ -4490,12 +4791,12 @@ func (p *CommandsParser) relation(_p int) (localctx IRelationContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(204) + p.SetState(215) p.calc(0) } p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) - p.SetState(211) + p.SetState(222) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 19, p.GetParserRuleContext()) @@ -4507,13 +4808,13 @@ func (p *CommandsParser) relation(_p int) (localctx IRelationContext) { _prevctx = localctx localctx = NewRelationContext(p, _parentctx, _parentState) p.PushNewRecursionContext(localctx, _startState, CommandsParserRULE_relation) - p.SetState(206) + p.SetState(217) if !(p.Precpred(p.GetParserRuleContext(), 1)) { panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 1)", "")) } { - p.SetState(207) + p.SetState(218) var _lt = p.GetTokenStream().LT(1) @@ -4521,7 +4822,7 @@ func (p *CommandsParser) relation(_p int) (localctx IRelationContext) { _la = p.GetTokenStream().LA(1) - if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&65024) != 0) { + if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&520192) != 0) { var _ri = p.GetErrorHandler().RecoverInline(p) localctx.(*RelationContext).op = _ri @@ -4531,12 +4832,12 @@ func (p *CommandsParser) relation(_p int) (localctx IRelationContext) { } } { - p.SetState(208) + p.SetState(219) p.relation(2) } } - p.SetState(213) + p.SetState(224) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 19, p.GetParserRuleContext()) } @@ -4723,8 +5024,8 @@ func (p *CommandsParser) calc(_p int) (localctx ICalcContext) { localctx = NewCalcContext(p, p.GetParserRuleContext(), _parentState) var _prevctx ICalcContext = localctx var _ antlr.ParserRuleContext = _prevctx // TODO: To prevent unused variable warning. - _startState := 42 - p.EnterRecursionRule(localctx, 42, CommandsParserRULE_calc, _p) + _startState := 46 + p.EnterRecursionRule(localctx, 46, CommandsParserRULE_calc, _p) var _la int defer func() { @@ -4747,12 +5048,12 @@ func (p *CommandsParser) calc(_p int) (localctx ICalcContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(215) + p.SetState(226) p.Unary() } p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) - p.SetState(225) + p.SetState(236) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 21, p.GetParserRuleContext()) @@ -4762,19 +5063,19 @@ func (p *CommandsParser) calc(_p int) (localctx ICalcContext) { p.TriggerExitRuleEvent() } _prevctx = localctx - p.SetState(223) + p.SetState(234) p.GetErrorHandler().Sync(p) switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 20, p.GetParserRuleContext()) { case 1: localctx = NewCalcContext(p, _parentctx, _parentState) p.PushNewRecursionContext(localctx, _startState, CommandsParserRULE_calc) - p.SetState(217) + p.SetState(228) if !(p.Precpred(p.GetParserRuleContext(), 2)) { panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 2)", "")) } { - p.SetState(218) + p.SetState(229) var _lt = p.GetTokenStream().LT(1) @@ -4782,7 +5083,7 @@ func (p *CommandsParser) calc(_p int) (localctx ICalcContext) { _la = p.GetTokenStream().LA(1) - if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&15032385536) != 0) { + if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&120259084288) != 0) { var _ri = p.GetErrorHandler().RecoverInline(p) localctx.(*CalcContext).op = _ri @@ -4792,20 +5093,20 @@ func (p *CommandsParser) calc(_p int) (localctx ICalcContext) { } } { - p.SetState(219) + p.SetState(230) p.calc(3) } case 2: localctx = NewCalcContext(p, _parentctx, _parentState) p.PushNewRecursionContext(localctx, _startState, CommandsParserRULE_calc) - p.SetState(220) + p.SetState(231) if !(p.Precpred(p.GetParserRuleContext(), 1)) { panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 1)", "")) } { - p.SetState(221) + p.SetState(232) var _lt = p.GetTokenStream().LT(1) @@ -4823,14 +5124,14 @@ func (p *CommandsParser) calc(_p int) (localctx ICalcContext) { } } { - p.SetState(222) + p.SetState(233) p.calc(2) } } } - p.SetState(227) + p.SetState(238) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 21, p.GetParserRuleContext()) } @@ -4889,7 +5190,7 @@ func (s *UnaryContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) type LogicalNotContext struct { *UnaryContext - s27 antlr.Token + s30 antlr.Token ops []antlr.Token } @@ -4903,9 +5204,9 @@ func NewLogicalNotContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *Log return p } -func (s *LogicalNotContext) GetS27() antlr.Token { return s.s27 } +func (s *LogicalNotContext) GetS30() antlr.Token { return s.s30 } -func (s *LogicalNotContext) SetS27(v antlr.Token) { s.s27 = v } +func (s *LogicalNotContext) SetS30(v antlr.Token) { s.s30 = v } func (s *LogicalNotContext) GetOps() []antlr.Token { return s.ops } @@ -5019,7 +5320,7 @@ func (s *MemberExprContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { type NegateContext struct { *UnaryContext - s26 antlr.Token + s29 antlr.Token ops []antlr.Token } @@ -5033,9 +5334,9 @@ func NewNegateContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *NegateC return p } -func (s *NegateContext) GetS26() antlr.Token { return s.s26 } +func (s *NegateContext) GetS29() antlr.Token { return s.s29 } -func (s *NegateContext) SetS26(v antlr.Token) { s.s26 = v } +func (s *NegateContext) SetS29(v antlr.Token) { s.s29 = v } func (s *NegateContext) GetOps() []antlr.Token { return s.ops } @@ -5096,7 +5397,7 @@ func (p *CommandsParser) Unary() (localctx IUnaryContext) { _ = this localctx = NewUnaryContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 44, CommandsParserRULE_unary) + p.EnterRule(localctx, 48, CommandsParserRULE_unary) var _la int defer func() { @@ -5117,71 +5418,71 @@ func (p *CommandsParser) Unary() (localctx IUnaryContext) { var _alt int - p.SetState(241) + p.SetState(252) p.GetErrorHandler().Sync(p) switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 24, p.GetParserRuleContext()) { case 1: localctx = NewMemberExprContext(p, localctx) p.EnterOuterAlt(localctx, 1) { - p.SetState(228) + p.SetState(239) p.member(0) } case 2: localctx = NewLogicalNotContext(p, localctx) p.EnterOuterAlt(localctx, 2) - p.SetState(230) + p.SetState(241) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) for ok := true; ok; ok = _la == CommandsParserEXCLAM { { - p.SetState(229) + p.SetState(240) var _m = p.Match(CommandsParserEXCLAM) - localctx.(*LogicalNotContext).s27 = _m + localctx.(*LogicalNotContext).s30 = _m } - localctx.(*LogicalNotContext).ops = append(localctx.(*LogicalNotContext).ops, localctx.(*LogicalNotContext).s27) + localctx.(*LogicalNotContext).ops = append(localctx.(*LogicalNotContext).ops, localctx.(*LogicalNotContext).s30) - p.SetState(232) + p.SetState(243) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) } { - p.SetState(234) + p.SetState(245) p.member(0) } case 3: localctx = NewNegateContext(p, localctx) p.EnterOuterAlt(localctx, 3) - p.SetState(236) + p.SetState(247) p.GetErrorHandler().Sync(p) _alt = 1 for ok := true; ok; ok = _alt != 2 && _alt != antlr.ATNInvalidAltNumber { switch _alt { case 1: { - p.SetState(235) + p.SetState(246) var _m = p.Match(CommandsParserMINUS) - localctx.(*NegateContext).s26 = _m + localctx.(*NegateContext).s29 = _m } - localctx.(*NegateContext).ops = append(localctx.(*NegateContext).ops, localctx.(*NegateContext).s26) + localctx.(*NegateContext).ops = append(localctx.(*NegateContext).ops, localctx.(*NegateContext).s29) default: panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) } - p.SetState(238) + p.SetState(249) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 23, p.GetParserRuleContext()) } { - p.SetState(240) + p.SetState(251) p.member(0) } @@ -5598,8 +5899,8 @@ func (p *CommandsParser) member(_p int) (localctx IMemberContext) { localctx = NewMemberContext(p, p.GetParserRuleContext(), _parentState) var _prevctx IMemberContext = localctx var _ antlr.ParserRuleContext = _prevctx // TODO: To prevent unused variable warning. - _startState := 46 - p.EnterRecursionRule(localctx, 46, CommandsParserRULE_member, _p) + _startState := 50 + p.EnterRecursionRule(localctx, 50, CommandsParserRULE_member, _p) var _la int defer func() { @@ -5626,12 +5927,12 @@ func (p *CommandsParser) member(_p int) (localctx IMemberContext) { _prevctx = localctx { - p.SetState(244) + p.SetState(255) p.Primary() } p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) - p.SetState(270) + p.SetState(281) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 29, p.GetParserRuleContext()) @@ -5641,31 +5942,31 @@ func (p *CommandsParser) member(_p int) (localctx IMemberContext) { p.TriggerExitRuleEvent() } _prevctx = localctx - p.SetState(268) + p.SetState(279) p.GetErrorHandler().Sync(p) switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 28, p.GetParserRuleContext()) { case 1: localctx = NewSelectContext(p, NewMemberContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, CommandsParserRULE_member) - p.SetState(246) + p.SetState(257) if !(p.Precpred(p.GetParserRuleContext(), 3)) { panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 3)", "")) } { - p.SetState(247) + p.SetState(258) var _m = p.Match(CommandsParserDOT) localctx.(*SelectContext).op = _m } - p.SetState(249) + p.SetState(260) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserQUESTIONMARK { { - p.SetState(248) + p.SetState(259) var _m = p.Match(CommandsParserQUESTIONMARK) @@ -5674,7 +5975,7 @@ func (p *CommandsParser) member(_p int) (localctx IMemberContext) { } { - p.SetState(251) + p.SetState(262) var _m = p.Match(CommandsParserIDENTIFIER) @@ -5684,39 +5985,39 @@ func (p *CommandsParser) member(_p int) (localctx IMemberContext) { case 2: localctx = NewMemberCallContext(p, NewMemberContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, CommandsParserRULE_member) - p.SetState(252) + p.SetState(263) if !(p.Precpred(p.GetParserRuleContext(), 2)) { panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 2)", "")) } { - p.SetState(253) + p.SetState(264) var _m = p.Match(CommandsParserDOT) localctx.(*MemberCallContext).op = _m } { - p.SetState(254) + p.SetState(265) var _m = p.Match(CommandsParserIDENTIFIER) localctx.(*MemberCallContext).id = _m } { - p.SetState(255) + p.SetState(266) var _m = p.Match(CommandsParserLPAREN) localctx.(*MemberCallContext).open = _m } - p.SetState(257) + p.SetState(268) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) - if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&34755098968064) != 0 { + if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&278040791744512) != 0 { { - p.SetState(256) + p.SetState(267) var _x = p.ExprList() @@ -5725,32 +6026,32 @@ func (p *CommandsParser) member(_p int) (localctx IMemberContext) { } { - p.SetState(259) + p.SetState(270) p.Match(CommandsParserRPAREN) } case 3: localctx = NewIndexContext(p, NewMemberContext(p, _parentctx, _parentState)) p.PushNewRecursionContext(localctx, _startState, CommandsParserRULE_member) - p.SetState(260) + p.SetState(271) if !(p.Precpred(p.GetParserRuleContext(), 1)) { panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 1)", "")) } { - p.SetState(261) + p.SetState(272) var _m = p.Match(CommandsParserLBRACKET) localctx.(*IndexContext).op = _m } - p.SetState(263) + p.SetState(274) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserQUESTIONMARK { { - p.SetState(262) + p.SetState(273) var _m = p.Match(CommandsParserQUESTIONMARK) @@ -5759,21 +6060,21 @@ func (p *CommandsParser) member(_p int) (localctx IMemberContext) { } { - p.SetState(265) + p.SetState(276) var _x = p.Expr() localctx.(*IndexContext).index = _x } { - p.SetState(266) + p.SetState(277) p.Match(CommandsParserRPRACKET) } } } - p.SetState(272) + p.SetState(283) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 29, p.GetParserRuleContext()) } @@ -6116,7 +6417,7 @@ type CreateMessageContext struct { leadingDot antlr.Token _IDENTIFIER antlr.Token ids []antlr.Token - s24 antlr.Token + s27 antlr.Token ops []antlr.Token op antlr.Token entries IFieldInitializerListContext @@ -6136,7 +6437,7 @@ func (s *CreateMessageContext) GetLeadingDot() antlr.Token { return s.leadingDot func (s *CreateMessageContext) Get_IDENTIFIER() antlr.Token { return s._IDENTIFIER } -func (s *CreateMessageContext) GetS24() antlr.Token { return s.s24 } +func (s *CreateMessageContext) GetS27() antlr.Token { return s.s27 } func (s *CreateMessageContext) GetOp() antlr.Token { return s.op } @@ -6144,7 +6445,7 @@ func (s *CreateMessageContext) SetLeadingDot(v antlr.Token) { s.leadingDot = v } func (s *CreateMessageContext) Set_IDENTIFIER(v antlr.Token) { s._IDENTIFIER = v } -func (s *CreateMessageContext) SetS24(v antlr.Token) { s.s24 = v } +func (s *CreateMessageContext) SetS27(v antlr.Token) { s.s27 = v } func (s *CreateMessageContext) SetOp(v antlr.Token) { s.op = v } @@ -6327,7 +6628,7 @@ func (p *CommandsParser) Primary() (localctx IPrimaryContext) { _ = this localctx = NewPrimaryContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 48, CommandsParserRULE_primary) + p.EnterRule(localctx, 52, CommandsParserRULE_primary) var _la int defer func() { @@ -6346,19 +6647,19 @@ func (p *CommandsParser) Primary() (localctx IPrimaryContext) { } }() - p.SetState(324) + p.SetState(335) p.GetErrorHandler().Sync(p) switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 41, p.GetParserRuleContext()) { case 1: localctx = NewIdentOrGlobalCallContext(p, localctx) p.EnterOuterAlt(localctx, 1) - p.SetState(274) + p.SetState(285) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserDOT { { - p.SetState(273) + p.SetState(284) var _m = p.Match(CommandsParserDOT) @@ -6367,30 +6668,30 @@ func (p *CommandsParser) Primary() (localctx IPrimaryContext) { } { - p.SetState(276) + p.SetState(287) var _m = p.Match(CommandsParserIDENTIFIER) localctx.(*IdentOrGlobalCallContext).id = _m } - p.SetState(282) + p.SetState(293) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 32, p.GetParserRuleContext()) == 1 { { - p.SetState(277) + p.SetState(288) var _m = p.Match(CommandsParserLPAREN) localctx.(*IdentOrGlobalCallContext).op = _m } - p.SetState(279) + p.SetState(290) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) - if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&34755098968064) != 0 { + if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&278040791744512) != 0 { { - p.SetState(278) + p.SetState(289) var _x = p.ExprList() @@ -6399,7 +6700,7 @@ func (p *CommandsParser) Primary() (localctx IPrimaryContext) { } { - p.SetState(281) + p.SetState(292) p.Match(CommandsParserRPAREN) } @@ -6409,18 +6710,18 @@ func (p *CommandsParser) Primary() (localctx IPrimaryContext) { localctx = NewNestedContext(p, localctx) p.EnterOuterAlt(localctx, 2) { - p.SetState(284) + p.SetState(295) p.Match(CommandsParserLPAREN) } { - p.SetState(285) + p.SetState(296) var _x = p.Expr() localctx.(*NestedContext).e = _x } { - p.SetState(286) + p.SetState(297) p.Match(CommandsParserRPAREN) } @@ -6428,19 +6729,19 @@ func (p *CommandsParser) Primary() (localctx IPrimaryContext) { localctx = NewCreateListContext(p, localctx) p.EnterOuterAlt(localctx, 3) { - p.SetState(288) + p.SetState(299) var _m = p.Match(CommandsParserLBRACKET) localctx.(*CreateListContext).op = _m } - p.SetState(290) + p.SetState(301) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) - if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&34755367403520) != 0 { + if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&278042939228160) != 0 { { - p.SetState(289) + p.SetState(300) var _x = p.ListInit() @@ -6448,19 +6749,19 @@ func (p *CommandsParser) Primary() (localctx IPrimaryContext) { } } - p.SetState(293) + p.SetState(304) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserCOMMA { { - p.SetState(292) + p.SetState(303) p.Match(CommandsParserCOMMA) } } { - p.SetState(295) + p.SetState(306) p.Match(CommandsParserRPRACKET) } @@ -6468,19 +6769,19 @@ func (p *CommandsParser) Primary() (localctx IPrimaryContext) { localctx = NewCreateStructContext(p, localctx) p.EnterOuterAlt(localctx, 4) { - p.SetState(296) + p.SetState(307) var _m = p.Match(CommandsParserLBRACE) localctx.(*CreateStructContext).op = _m } - p.SetState(298) + p.SetState(309) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) - if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&34755367403520) != 0 { + if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&278042939228160) != 0 { { - p.SetState(297) + p.SetState(308) var _x = p.MapInitializerList() @@ -6488,32 +6789,32 @@ func (p *CommandsParser) Primary() (localctx IPrimaryContext) { } } - p.SetState(301) + p.SetState(312) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserCOMMA { { - p.SetState(300) + p.SetState(311) p.Match(CommandsParserCOMMA) } } { - p.SetState(303) + p.SetState(314) p.Match(CommandsParserRBRACE) } case 5: localctx = NewCreateMessageContext(p, localctx) p.EnterOuterAlt(localctx, 5) - p.SetState(305) + p.SetState(316) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserDOT { { - p.SetState(304) + p.SetState(315) var _m = p.Match(CommandsParserDOT) @@ -6522,28 +6823,28 @@ func (p *CommandsParser) Primary() (localctx IPrimaryContext) { } { - p.SetState(307) + p.SetState(318) var _m = p.Match(CommandsParserIDENTIFIER) localctx.(*CreateMessageContext)._IDENTIFIER = _m } localctx.(*CreateMessageContext).ids = append(localctx.(*CreateMessageContext).ids, localctx.(*CreateMessageContext)._IDENTIFIER) - p.SetState(312) + p.SetState(323) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) for _la == CommandsParserDOT { { - p.SetState(308) + p.SetState(319) var _m = p.Match(CommandsParserDOT) - localctx.(*CreateMessageContext).s24 = _m + localctx.(*CreateMessageContext).s27 = _m } - localctx.(*CreateMessageContext).ops = append(localctx.(*CreateMessageContext).ops, localctx.(*CreateMessageContext).s24) + localctx.(*CreateMessageContext).ops = append(localctx.(*CreateMessageContext).ops, localctx.(*CreateMessageContext).s27) { - p.SetState(309) + p.SetState(320) var _m = p.Match(CommandsParserIDENTIFIER) @@ -6551,24 +6852,24 @@ func (p *CommandsParser) Primary() (localctx IPrimaryContext) { } localctx.(*CreateMessageContext).ids = append(localctx.(*CreateMessageContext).ids, localctx.(*CreateMessageContext)._IDENTIFIER) - p.SetState(314) + p.SetState(325) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) } { - p.SetState(315) + p.SetState(326) var _m = p.Match(CommandsParserLBRACE) localctx.(*CreateMessageContext).op = _m } - p.SetState(317) + p.SetState(328) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserQUESTIONMARK || _la == CommandsParserIDENTIFIER { { - p.SetState(316) + p.SetState(327) var _x = p.FieldInitializerList() @@ -6576,19 +6877,19 @@ func (p *CommandsParser) Primary() (localctx IPrimaryContext) { } } - p.SetState(320) + p.SetState(331) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserCOMMA { { - p.SetState(319) + p.SetState(330) p.Match(CommandsParserCOMMA) } } { - p.SetState(322) + p.SetState(333) p.Match(CommandsParserRBRACE) } @@ -6596,7 +6897,7 @@ func (p *CommandsParser) Primary() (localctx IPrimaryContext) { localctx = NewConstantLiteralContext(p, localctx) p.EnterOuterAlt(localctx, 6) { - p.SetState(323) + p.SetState(334) p.Literal() } @@ -6755,7 +7056,7 @@ func (p *CommandsParser) ExprList() (localctx IExprListContext) { _ = this localctx = NewExprListContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 50, CommandsParserRULE_exprList) + p.EnterRule(localctx, 54, CommandsParserRULE_exprList) var _la int defer func() { @@ -6776,24 +7077,24 @@ func (p *CommandsParser) ExprList() (localctx IExprListContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(326) + p.SetState(337) var _x = p.Expr() localctx.(*ExprListContext)._expr = _x } localctx.(*ExprListContext).e = append(localctx.(*ExprListContext).e, localctx.(*ExprListContext)._expr) - p.SetState(331) + p.SetState(342) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) for _la == CommandsParserCOMMA { { - p.SetState(327) + p.SetState(338) p.Match(CommandsParserCOMMA) } { - p.SetState(328) + p.SetState(339) var _x = p.Expr() @@ -6801,7 +7102,7 @@ func (p *CommandsParser) ExprList() (localctx IExprListContext) { } localctx.(*ExprListContext).e = append(localctx.(*ExprListContext).e, localctx.(*ExprListContext)._expr) - p.SetState(333) + p.SetState(344) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) } @@ -6959,7 +7260,7 @@ func (p *CommandsParser) ListInit() (localctx IListInitContext) { _ = this localctx = NewListInitContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 52, CommandsParserRULE_listInit) + p.EnterRule(localctx, 56, CommandsParserRULE_listInit) defer func() { p.ExitRule() @@ -6981,25 +7282,25 @@ func (p *CommandsParser) ListInit() (localctx IListInitContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(334) + p.SetState(345) var _x = p.OptExpr() localctx.(*ListInitContext)._optExpr = _x } localctx.(*ListInitContext).elems = append(localctx.(*ListInitContext).elems, localctx.(*ListInitContext)._optExpr) - p.SetState(339) + p.SetState(350) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 43, p.GetParserRuleContext()) for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(335) + p.SetState(346) p.Match(CommandsParserCOMMA) } { - p.SetState(336) + p.SetState(347) var _x = p.OptExpr() @@ -7008,7 +7309,7 @@ func (p *CommandsParser) ListInit() (localctx IListInitContext) { localctx.(*ListInitContext).elems = append(localctx.(*ListInitContext).elems, localctx.(*ListInitContext)._optExpr) } - p.SetState(341) + p.SetState(352) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 43, p.GetParserRuleContext()) } @@ -7023,11 +7324,11 @@ type IFieldInitializerListContext interface { // GetParser returns the parser. GetParser() antlr.Parser - // GetS29 returns the s29 token. - GetS29() antlr.Token + // GetS32 returns the s32 token. + GetS32() antlr.Token - // SetS29 sets the s29 token. - SetS29(antlr.Token) + // SetS32 sets the s32 token. + SetS32(antlr.Token) // GetCols returns the cols token list. GetCols() []antlr.Token @@ -7078,7 +7379,7 @@ type FieldInitializerListContext struct { parser antlr.Parser _optField IOptFieldContext fields []IOptFieldContext - s29 antlr.Token + s32 antlr.Token cols []antlr.Token _expr IExprContext values []IExprContext @@ -7106,9 +7407,9 @@ func NewFieldInitializerListContext(parser antlr.Parser, parent antlr.ParserRule func (s *FieldInitializerListContext) GetParser() antlr.Parser { return s.parser } -func (s *FieldInitializerListContext) GetS29() antlr.Token { return s.s29 } +func (s *FieldInitializerListContext) GetS32() antlr.Token { return s.s32 } -func (s *FieldInitializerListContext) SetS29(v antlr.Token) { s.s29 = v } +func (s *FieldInitializerListContext) SetS32(v antlr.Token) { s.s32 = v } func (s *FieldInitializerListContext) GetCols() []antlr.Token { return s.cols } @@ -7263,7 +7564,7 @@ func (p *CommandsParser) FieldInitializerList() (localctx IFieldInitializerListC _ = this localctx = NewFieldInitializerListContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 54, CommandsParserRULE_fieldInitializerList) + p.EnterRule(localctx, 58, CommandsParserRULE_fieldInitializerList) defer func() { p.ExitRule() @@ -7285,7 +7586,7 @@ func (p *CommandsParser) FieldInitializerList() (localctx IFieldInitializerListC p.EnterOuterAlt(localctx, 1) { - p.SetState(342) + p.SetState(353) var _x = p.OptField() @@ -7293,33 +7594,33 @@ func (p *CommandsParser) FieldInitializerList() (localctx IFieldInitializerListC } localctx.(*FieldInitializerListContext).fields = append(localctx.(*FieldInitializerListContext).fields, localctx.(*FieldInitializerListContext)._optField) { - p.SetState(343) + p.SetState(354) var _m = p.Match(CommandsParserCOLON) - localctx.(*FieldInitializerListContext).s29 = _m + localctx.(*FieldInitializerListContext).s32 = _m } - localctx.(*FieldInitializerListContext).cols = append(localctx.(*FieldInitializerListContext).cols, localctx.(*FieldInitializerListContext).s29) + localctx.(*FieldInitializerListContext).cols = append(localctx.(*FieldInitializerListContext).cols, localctx.(*FieldInitializerListContext).s32) { - p.SetState(344) + p.SetState(355) var _x = p.Expr() localctx.(*FieldInitializerListContext)._expr = _x } localctx.(*FieldInitializerListContext).values = append(localctx.(*FieldInitializerListContext).values, localctx.(*FieldInitializerListContext)._expr) - p.SetState(352) + p.SetState(363) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 44, p.GetParserRuleContext()) for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(345) + p.SetState(356) p.Match(CommandsParserCOMMA) } { - p.SetState(346) + p.SetState(357) var _x = p.OptField() @@ -7327,15 +7628,15 @@ func (p *CommandsParser) FieldInitializerList() (localctx IFieldInitializerListC } localctx.(*FieldInitializerListContext).fields = append(localctx.(*FieldInitializerListContext).fields, localctx.(*FieldInitializerListContext)._optField) { - p.SetState(347) + p.SetState(358) var _m = p.Match(CommandsParserCOLON) - localctx.(*FieldInitializerListContext).s29 = _m + localctx.(*FieldInitializerListContext).s32 = _m } - localctx.(*FieldInitializerListContext).cols = append(localctx.(*FieldInitializerListContext).cols, localctx.(*FieldInitializerListContext).s29) + localctx.(*FieldInitializerListContext).cols = append(localctx.(*FieldInitializerListContext).cols, localctx.(*FieldInitializerListContext).s32) { - p.SetState(348) + p.SetState(359) var _x = p.Expr() @@ -7344,7 +7645,7 @@ func (p *CommandsParser) FieldInitializerList() (localctx IFieldInitializerListC localctx.(*FieldInitializerListContext).values = append(localctx.(*FieldInitializerListContext).values, localctx.(*FieldInitializerListContext)._expr) } - p.SetState(354) + p.SetState(365) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 44, p.GetParserRuleContext()) } @@ -7448,7 +7749,7 @@ func (p *CommandsParser) OptField() (localctx IOptFieldContext) { _ = this localctx = NewOptFieldContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 56, CommandsParserRULE_optField) + p.EnterRule(localctx, 60, CommandsParserRULE_optField) var _la int defer func() { @@ -7468,13 +7769,13 @@ func (p *CommandsParser) OptField() (localctx IOptFieldContext) { }() p.EnterOuterAlt(localctx, 1) - p.SetState(356) + p.SetState(367) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserQUESTIONMARK { { - p.SetState(355) + p.SetState(366) var _m = p.Match(CommandsParserQUESTIONMARK) @@ -7483,7 +7784,7 @@ func (p *CommandsParser) OptField() (localctx IOptFieldContext) { } { - p.SetState(358) + p.SetState(369) p.Match(CommandsParserIDENTIFIER) } @@ -7497,11 +7798,11 @@ type IMapInitializerListContext interface { // GetParser returns the parser. GetParser() antlr.Parser - // GetS29 returns the s29 token. - GetS29() antlr.Token + // GetS32 returns the s32 token. + GetS32() antlr.Token - // SetS29 sets the s29 token. - SetS29(antlr.Token) + // SetS32 sets the s32 token. + SetS32(antlr.Token) // GetCols returns the cols token list. GetCols() []antlr.Token @@ -7552,7 +7853,7 @@ type MapInitializerListContext struct { parser antlr.Parser _optExpr IOptExprContext keys []IOptExprContext - s29 antlr.Token + s32 antlr.Token cols []antlr.Token _expr IExprContext values []IExprContext @@ -7580,9 +7881,9 @@ func NewMapInitializerListContext(parser antlr.Parser, parent antlr.ParserRuleCo func (s *MapInitializerListContext) GetParser() antlr.Parser { return s.parser } -func (s *MapInitializerListContext) GetS29() antlr.Token { return s.s29 } +func (s *MapInitializerListContext) GetS32() antlr.Token { return s.s32 } -func (s *MapInitializerListContext) SetS29(v antlr.Token) { s.s29 = v } +func (s *MapInitializerListContext) SetS32(v antlr.Token) { s.s32 = v } func (s *MapInitializerListContext) GetCols() []antlr.Token { return s.cols } @@ -7737,7 +8038,7 @@ func (p *CommandsParser) MapInitializerList() (localctx IMapInitializerListConte _ = this localctx = NewMapInitializerListContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 58, CommandsParserRULE_mapInitializerList) + p.EnterRule(localctx, 62, CommandsParserRULE_mapInitializerList) defer func() { p.ExitRule() @@ -7759,7 +8060,7 @@ func (p *CommandsParser) MapInitializerList() (localctx IMapInitializerListConte p.EnterOuterAlt(localctx, 1) { - p.SetState(360) + p.SetState(371) var _x = p.OptExpr() @@ -7767,33 +8068,33 @@ func (p *CommandsParser) MapInitializerList() (localctx IMapInitializerListConte } localctx.(*MapInitializerListContext).keys = append(localctx.(*MapInitializerListContext).keys, localctx.(*MapInitializerListContext)._optExpr) { - p.SetState(361) + p.SetState(372) var _m = p.Match(CommandsParserCOLON) - localctx.(*MapInitializerListContext).s29 = _m + localctx.(*MapInitializerListContext).s32 = _m } - localctx.(*MapInitializerListContext).cols = append(localctx.(*MapInitializerListContext).cols, localctx.(*MapInitializerListContext).s29) + localctx.(*MapInitializerListContext).cols = append(localctx.(*MapInitializerListContext).cols, localctx.(*MapInitializerListContext).s32) { - p.SetState(362) + p.SetState(373) var _x = p.Expr() localctx.(*MapInitializerListContext)._expr = _x } localctx.(*MapInitializerListContext).values = append(localctx.(*MapInitializerListContext).values, localctx.(*MapInitializerListContext)._expr) - p.SetState(370) + p.SetState(381) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 46, p.GetParserRuleContext()) for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(363) + p.SetState(374) p.Match(CommandsParserCOMMA) } { - p.SetState(364) + p.SetState(375) var _x = p.OptExpr() @@ -7801,15 +8102,15 @@ func (p *CommandsParser) MapInitializerList() (localctx IMapInitializerListConte } localctx.(*MapInitializerListContext).keys = append(localctx.(*MapInitializerListContext).keys, localctx.(*MapInitializerListContext)._optExpr) { - p.SetState(365) + p.SetState(376) var _m = p.Match(CommandsParserCOLON) - localctx.(*MapInitializerListContext).s29 = _m + localctx.(*MapInitializerListContext).s32 = _m } - localctx.(*MapInitializerListContext).cols = append(localctx.(*MapInitializerListContext).cols, localctx.(*MapInitializerListContext).s29) + localctx.(*MapInitializerListContext).cols = append(localctx.(*MapInitializerListContext).cols, localctx.(*MapInitializerListContext).s32) { - p.SetState(366) + p.SetState(377) var _x = p.Expr() @@ -7818,7 +8119,7 @@ func (p *CommandsParser) MapInitializerList() (localctx IMapInitializerListConte localctx.(*MapInitializerListContext).values = append(localctx.(*MapInitializerListContext).values, localctx.(*MapInitializerListContext)._expr) } - p.SetState(372) + p.SetState(383) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 46, p.GetParserRuleContext()) } @@ -7945,7 +8246,7 @@ func (p *CommandsParser) OptExpr() (localctx IOptExprContext) { _ = this localctx = NewOptExprContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 60, CommandsParserRULE_optExpr) + p.EnterRule(localctx, 64, CommandsParserRULE_optExpr) var _la int defer func() { @@ -7965,13 +8266,13 @@ func (p *CommandsParser) OptExpr() (localctx IOptExprContext) { }() p.EnterOuterAlt(localctx, 1) - p.SetState(374) + p.SetState(385) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserQUESTIONMARK { { - p.SetState(373) + p.SetState(384) var _m = p.Match(CommandsParserQUESTIONMARK) @@ -7980,7 +8281,7 @@ func (p *CommandsParser) OptExpr() (localctx IOptExprContext) { } { - p.SetState(376) + p.SetState(387) var _x = p.Expr() @@ -8454,7 +8755,7 @@ func (p *CommandsParser) Literal() (localctx ILiteralContext) { _ = this localctx = NewLiteralContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 62, CommandsParserRULE_literal) + p.EnterRule(localctx, 66, CommandsParserRULE_literal) var _la int defer func() { @@ -8473,19 +8774,19 @@ func (p *CommandsParser) Literal() (localctx ILiteralContext) { } }() - p.SetState(392) + p.SetState(403) p.GetErrorHandler().Sync(p) switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 50, p.GetParserRuleContext()) { case 1: localctx = NewIntContext(p, localctx) p.EnterOuterAlt(localctx, 1) - p.SetState(379) + p.SetState(390) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserMINUS { { - p.SetState(378) + p.SetState(389) var _m = p.Match(CommandsParserMINUS) @@ -8494,7 +8795,7 @@ func (p *CommandsParser) Literal() (localctx ILiteralContext) { } { - p.SetState(381) + p.SetState(392) var _m = p.Match(CommandsParserNUM_INT) @@ -8505,7 +8806,7 @@ func (p *CommandsParser) Literal() (localctx ILiteralContext) { localctx = NewUintContext(p, localctx) p.EnterOuterAlt(localctx, 2) { - p.SetState(382) + p.SetState(393) var _m = p.Match(CommandsParserNUM_UINT) @@ -8515,13 +8816,13 @@ func (p *CommandsParser) Literal() (localctx ILiteralContext) { case 3: localctx = NewDoubleContext(p, localctx) p.EnterOuterAlt(localctx, 3) - p.SetState(384) + p.SetState(395) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) if _la == CommandsParserMINUS { { - p.SetState(383) + p.SetState(394) var _m = p.Match(CommandsParserMINUS) @@ -8530,7 +8831,7 @@ func (p *CommandsParser) Literal() (localctx ILiteralContext) { } { - p.SetState(386) + p.SetState(397) var _m = p.Match(CommandsParserNUM_FLOAT) @@ -8541,7 +8842,7 @@ func (p *CommandsParser) Literal() (localctx ILiteralContext) { localctx = NewStringContext(p, localctx) p.EnterOuterAlt(localctx, 4) { - p.SetState(387) + p.SetState(398) var _m = p.Match(CommandsParserSTRING) @@ -8552,7 +8853,7 @@ func (p *CommandsParser) Literal() (localctx ILiteralContext) { localctx = NewBytesContext(p, localctx) p.EnterOuterAlt(localctx, 5) { - p.SetState(388) + p.SetState(399) var _m = p.Match(CommandsParserBYTES) @@ -8563,7 +8864,7 @@ func (p *CommandsParser) Literal() (localctx ILiteralContext) { localctx = NewBoolTrueContext(p, localctx) p.EnterOuterAlt(localctx, 6) { - p.SetState(389) + p.SetState(400) var _m = p.Match(CommandsParserCEL_TRUE) @@ -8574,7 +8875,7 @@ func (p *CommandsParser) Literal() (localctx ILiteralContext) { localctx = NewBoolFalseContext(p, localctx) p.EnterOuterAlt(localctx, 7) { - p.SetState(390) + p.SetState(401) var _m = p.Match(CommandsParserCEL_FALSE) @@ -8585,7 +8886,7 @@ func (p *CommandsParser) Literal() (localctx ILiteralContext) { localctx = NewNullContext(p, localctx) p.EnterOuterAlt(localctx, 8) { - p.SetState(391) + p.SetState(402) var _m = p.Match(CommandsParserNUL) @@ -8599,21 +8900,21 @@ func (p *CommandsParser) Literal() (localctx ILiteralContext) { func (p *CommandsParser) Sempred(localctx antlr.RuleContext, ruleIndex, predIndex int) bool { switch ruleIndex { - case 20: + case 22: var t *RelationContext = nil if localctx != nil { t = localctx.(*RelationContext) } return p.Relation_Sempred(t, predIndex) - case 21: + case 23: var t *CalcContext = nil if localctx != nil { t = localctx.(*CalcContext) } return p.Calc_Sempred(t, predIndex) - case 23: + case 25: var t *MemberContext = nil if localctx != nil { t = localctx.(*MemberContext) diff --git a/repl/parser/commands_visitor.go b/repl/parser/commands_visitor.go index 6aa3b7dd..6d293090 100644 --- a/repl/parser/commands_visitor.go +++ b/repl/parser/commands_visitor.go @@ -13,6 +13,9 @@ type CommandsVisitor interface { // Visit a parse tree produced by CommandsParser#command. VisitCommand(ctx *CommandContext) interface{} + // Visit a parse tree produced by CommandsParser#help. + VisitHelp(ctx *HelpContext) interface{} + // Visit a parse tree produced by CommandsParser#let. VisitLet(ctx *LetContext) interface{} @@ -37,6 +40,9 @@ type CommandsVisitor interface { // Visit a parse tree produced by CommandsParser#empty. VisitEmpty(ctx *EmptyContext) interface{} + // Visit a parse tree produced by CommandsParser#compile. + VisitCompile(ctx *CompileContext) interface{} + // Visit a parse tree produced by CommandsParser#exprCmd. VisitExprCmd(ctx *ExprCmdContext) interface{} From ff455d005bd56edae8c18da6c854dd46d6a8b67f Mon Sep 17 00:00:00 2001 From: TristonianJones Date: Wed, 5 Apr 2023 18:13:05 -0700 Subject: [PATCH 2/7] Add compilation test output --- repl/evaluator_test.go | 58 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 7 deletions(-) diff --git a/repl/evaluator_test.go b/repl/evaluator_test.go index 70a3044a..0c365368 100644 --- a/repl/evaluator_test.go +++ b/repl/evaluator_test.go @@ -15,6 +15,7 @@ package repl import ( + "strings" "testing" "github.com/google/cel-go/cel" @@ -489,12 +490,44 @@ func TestSetOptionError(t *testing.T) { func TestProcess(t *testing.T) { var testCases = []struct { - name string - commands []Cmder - wantText string - wantExit bool - wantError bool + name string + commands []Cmder + wantText string + wantExit bool + wantError bool + ignoreWhitespace bool }{ + { + name: "CompileResult", + commands: []Cmder{ + &compileCmd{ + expr: "3u", + }, + }, + wantText: `type_map: { + key: 1 + value: { + primitive: UINT64 + } + } + source_info: { + location: "" + line_offsets: 3 + positions: { + key: 1 + value: 0 + } + } + expr: { + id: 1 + const_expr: { + uint64_value: 3 + } + }`, + wantExit: false, + wantError: false, + ignoreWhitespace: true, + }, { name: "FormatNumberResult", commands: []Cmder{ @@ -820,8 +853,12 @@ func TestProcess(t *testing.T) { if err != nil { gotErr = true } - - if text != tc.wantText || exit != tc.wantExit || (gotErr != tc.wantError) { + wantText := tc.wantText + if tc.ignoreWhitespace { + text = stripWhitespace(text) + wantText = stripWhitespace(wantText) + } + if text != wantText || exit != tc.wantExit || (gotErr != tc.wantError) { t.Errorf("For command %s got (output: '%s' exit: %v err: %v (%v)) wanted (output: '%s' exit: %v err: %v)", tc.commands[n-1], text, exit, gotErr, err, tc.wantText, tc.wantExit, tc.wantError) } @@ -888,3 +925,10 @@ func TestProcessOptionError(t *testing.T) { }) } } + +func stripWhitespace(a string) string { + a = strings.Replace(a, " ", "", -1) + a = strings.Replace(a, "\n", "", -1) + a = strings.Replace(a, "\t", "", -1) + return strings.Replace(a, "\r", "", -1) +} From 7ce1c02ee38245e37716990fc21400728ff4bf86 Mon Sep 17 00:00:00 2001 From: TristonianJones Date: Wed, 5 Apr 2023 18:21:38 -0700 Subject: [PATCH 3/7] Add README example --- repl/main/README.md | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/repl/main/README.md b/repl/main/README.md index 1e7d0d20..ba3f0f45 100644 --- a/repl/main/README.md +++ b/repl/main/README.md @@ -43,6 +43,39 @@ cel-repl> %exit ### Commands +#### compile + +`%compile` compiles the input expression using the currently configured state +into a protocol buffer text format representing the type-checked AST. + +`%compile ` + +Example: + +``` +> %compile 3u +type_map: { + key: 1 + value: { + primitive: UINT64 + } +} +source_info: { + location: "" + line_offsets: 3 + positions: { + key: 1 + value: 0 + } +} +expr: { + id: 1 + const_expr: { + uint64_value: 3 + } +} +``` + #### let `%let` introduces or update a variable or function declaration and provide a definition (as another CEL expression). A type hint is optionally provided to @@ -118,7 +151,8 @@ may take string arguments. `--container ` sets the expression container for name resolution. -`--extension ` enables CEL extensions. Valid options are: `strings`, `protos`, `math`, `encoders`, `all`. +`--extension ` enables CEL extensions. Valid options are: +`strings`, `protos`, `math`, `encoders`, `optional`, `all`. example: @@ -126,7 +160,7 @@ example: `%option --extension 'strings'` -`%option --extension 'all'` (Loads all 4 extensions) +`%option --extension 'all'` (Loads all extensions) #### reset From a11f868bc01a40193b757531dc062c1401e47915 Mon Sep 17 00:00:00 2001 From: TristonianJones Date: Thu, 6 Apr 2023 13:12:48 -0700 Subject: [PATCH 4/7] Fix help command test and add more context to the help message --- repl/commands.go | 27 +++++++++++++++++++++------ repl/commands_test.go | 31 ++++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/repl/commands.go b/repl/commands.go index ac89e10c..cc70f869 100644 --- a/repl/commands.go +++ b/repl/commands.go @@ -27,19 +27,31 @@ import ( ) var ( - letUsage = `Let introduces a variable or function defined by a sub-CEL expression. -%let (: )? = -%let ( : , ...) : -> ` + compileUsage = `Compile emits a textproto representation of the compiled expression. +%compile ` - declareUsage = `Declare introduces a variable or function for type checking, but doesn't define a value for it. + declareUsage = `Declare introduces a variable or function for type checking, but +doesn't define a value for it: %declare : %declare ( : , ...) : ` deleteUsage = `Delete removes a variable or function declaration from the evaluation context. %delete ` - compileUsage = `Compile emits a textproto representation of the compiled expression. -%compile ` + letUsage = `Let introduces a variable or function defined by a sub-CEL expression. +%let (: )? = +%let ( : , ...) : -> ` + + optionUsage = `Option enables a CEL environment option which enables configuration and +optional language features. +%option --container 'google.protobuf' +%option --extension 'all'` + + exitUsage = `Exit terminates the REPL. +%exit` + + helpUsage = `Help prints usage information for the commands supported by the REPL. +%help` ) type letVarCmd struct { @@ -171,6 +183,9 @@ func Parse(line string) (Cmder, error) { declareUsage, deleteUsage, letUsage, + optionUsage, + helpUsage, + exitUsage, }, "\n\n")) } return listener.cmd, nil diff --git a/repl/commands_test.go b/repl/commands_test.go index 444a1021..57a322b3 100644 --- a/repl/commands_test.go +++ b/repl/commands_test.go @@ -15,6 +15,7 @@ package repl import ( + "errors" "fmt" "strings" "testing" @@ -114,6 +115,7 @@ func TestParse(t *testing.T) { var testCases = []struct { commandLine string wantCmd Cmder + wantErr error }{ { commandLine: "%let x = 1", @@ -157,7 +159,31 @@ func TestParse(t *testing.T) { }, { commandLine: `%help`, - wantCmd: &simpleCmd{cmd: "help"}, + wantErr: errors.New(`Compile emits a textproto representation of the compiled expression. + %compile + + Declare introduces a variable or function for type checking, but + doesn't define a value for it: + %declare : + %declare ( : , ...) : + + Delete removes a variable or function declaration from the evaluation context. + %delete + + Let introduces a variable or function defined by a sub-CEL expression. + %let (: )? = + %let ( : , ...) : -> + + Option enables a CEL environment option which enables configuration and + optional language features. + %option --container 'google.protobuf' + %option --extension 'all' + + Help prints usage information for the commands supported by the REPL. + %help + + Exit terminates the REPL. + %exit`), }, { commandLine: `%arbitrary --flag -FLAG 'string literal\n'`, @@ -248,6 +274,9 @@ func TestParse(t *testing.T) { t.Run(tc.commandLine, func(t *testing.T) { cmd, err := Parse(tc.commandLine) if err != nil { + if tc.wantErr != nil && stripWhitespace(tc.wantErr.Error()) == stripWhitespace(err.Error()) { + return + } t.Errorf("Parse(\"%s\") failed: %s", tc.commandLine, err) } if cmd == nil || !cmdMatches(t, cmd, tc.wantCmd) { From 7c9f569e7e9f49c4d056ac07e9014a8afd2f2d63 Mon Sep 17 00:00:00 2001 From: TristonianJones Date: Thu, 6 Apr 2023 13:25:26 -0700 Subject: [PATCH 5/7] Update go.mod for AppEngine app --- repl/appengine/go.mod | 6 ++++-- repl/appengine/go.sum | 18 +++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/repl/appengine/go.mod b/repl/appengine/go.mod index c265ae93..c10c447c 100644 --- a/repl/appengine/go.mod +++ b/repl/appengine/go.mod @@ -6,9 +6,11 @@ require github.com/google/cel-go/repl v0.0.0-20230215224331-739dcddbb53f require ( github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 // indirect - github.com/google/cel-go v0.13.0 // indirect + github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect + github.com/google/cel-go v0.14.0 // indirect github.com/stoewer/go-strcase v1.2.0 // indirect - golang.org/x/text v0.4.0 // indirect + golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect + golang.org/x/text v0.6.0 // indirect google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9 // indirect google.golang.org/protobuf v1.28.1 // indirect ) diff --git a/repl/appengine/go.sum b/repl/appengine/go.sum index 17eca8b8..691b7160 100644 --- a/repl/appengine/go.sum +++ b/repl/appengine/go.sum @@ -1,17 +1,16 @@ github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 h1:yL7+Jz0jTC6yykIK/Wh74gnTJnrGr5AyrNMXuA0gves= github.com/antlr/antlr4/runtime/Go/antlr v1.4.10/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df h1:7RFfzj4SSt6nnvCPbCqijJi1nWCd+TqAT3bYCStRC18= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/google/cel-go v0.12.5 h1:DmzaiSgoaqGCjtpPQWl26/gND+yRpim56H1jCVev6d8= -github.com/google/cel-go v0.12.5/go.mod h1:Jk7ljRzLBhkmiAwBoUxB1sZSCVBAzkqPF25olK/iRDw= -github.com/google/cel-go v0.13.0 h1:z+8OBOcmh7IeKyqwT/6IlnMvy621fYUqnTVPEdegGlU= -github.com/google/cel-go v0.13.0/go.mod h1:K2hpQgEjDp18J76a2DKFRlPBPpgRZgi6EbnpDgIhJ8s= +github.com/google/cel-go v0.14.0 h1:LFobwuUDslWUHdQ48SXVXvQgPH2X1XVhsgOGNioAEZ4= +github.com/google/cel-go v0.14.0/go.mod h1:YzWEoI07MC/a/wj9in8GeVatqfypkldgBlwXh9bCwqY= github.com/google/cel-go/repl v0.0.0-20230215224331-739dcddbb53f h1:dLZBVQxd0lWCFcSe8QrX4AyE4QtbluOajcFG9uM6x9Q= github.com/google/cel-go/repl v0.0.0-20230215224331-739dcddbb53f/go.mod h1:LzcdDpGx1CNEvTDxbxThsW0X/Hj9jdylS1/1FJBkQD0= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= @@ -19,9 +18,10 @@ github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9 h1:3wPBShTLWQnEkZ9VW/HZZ8zT/9LLtleBtq7l8SKtJIA= google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= From 639f019ae6034991f15b6c542d649561d83eb134 Mon Sep 17 00:00:00 2001 From: TristonianJones Date: Thu, 6 Apr 2023 15:26:07 -0700 Subject: [PATCH 6/7] Updates to the go.mod deps --- repl/appengine/go.mod | 17 +++++++++-------- repl/appengine/go.sum | 44 ++++++++++++++++++++++--------------------- repl/go.mod | 14 +++++++------- repl/go.sum | 28 +++++++++++++-------------- 4 files changed, 53 insertions(+), 50 deletions(-) diff --git a/repl/appengine/go.mod b/repl/appengine/go.mod index c10c447c..a7edaa68 100644 --- a/repl/appengine/go.mod +++ b/repl/appengine/go.mod @@ -2,15 +2,16 @@ module github.com/google/cel-go/repl/appengine go 1.18 -require github.com/google/cel-go/repl v0.0.0-20230215224331-739dcddbb53f +require github.com/google/cel-go/repl v0.0.0-20230406155237-b081aea03865 require ( - github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 // indirect - github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect + github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1 // indirect github.com/google/cel-go v0.14.0 // indirect - github.com/stoewer/go-strcase v1.2.0 // indirect - golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect - golang.org/x/text v0.6.0 // indirect - google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9 // indirect - google.golang.org/protobuf v1.28.1 // indirect + github.com/stoewer/go-strcase v1.3.0 // indirect + golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect + golang.org/x/text v0.9.0 // indirect + google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd // indirect + google.golang.org/protobuf v1.30.0 // indirect ) + +replace github.com/google/cel-go/repl => ../. diff --git a/repl/appengine/go.sum b/repl/appengine/go.sum index 691b7160..36344e53 100644 --- a/repl/appengine/go.sum +++ b/repl/appengine/go.sum @@ -1,33 +1,35 @@ -github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 h1:yL7+Jz0jTC6yykIK/Wh74gnTJnrGr5AyrNMXuA0gves= -github.com/antlr/antlr4/runtime/Go/antlr v1.4.10/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= -github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df h1:7RFfzj4SSt6nnvCPbCqijJi1nWCd+TqAT3bYCStRC18= -github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1 h1:X8MJ0fnN5FPdcGF5Ij2/OW+HgiJrRg3AfHAx1PJtIzM= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/google/cel-go v0.14.0 h1:LFobwuUDslWUHdQ48SXVXvQgPH2X1XVhsgOGNioAEZ4= github.com/google/cel-go v0.14.0/go.mod h1:YzWEoI07MC/a/wj9in8GeVatqfypkldgBlwXh9bCwqY= -github.com/google/cel-go/repl v0.0.0-20230215224331-739dcddbb53f h1:dLZBVQxd0lWCFcSe8QrX4AyE4QtbluOajcFG9uM6x9Q= -github.com/google/cel-go/repl v0.0.0-20230215224331-739dcddbb53f/go.mod h1:LzcdDpGx1CNEvTDxbxThsW0X/Hj9jdylS1/1FJBkQD0= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs= +github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9 h1:3wPBShTLWQnEkZ9VW/HZZ8zT/9LLtleBtq7l8SKtJIA= -google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd h1:sLpv7bNL1AsX3fdnWh9WVh7ejIzXdOc1RRHGeAmeStU= +google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/repl/go.mod b/repl/go.mod index bcf117bf..8943754c 100644 --- a/repl/go.mod +++ b/repl/go.mod @@ -3,18 +3,18 @@ module github.com/google/cel-go/repl go 1.18 require ( - github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df + github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1 github.com/chzyer/readline v1.5.1 github.com/google/cel-go v0.14.0 - google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 - google.golang.org/protobuf v1.29.1 + google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd + google.golang.org/protobuf v1.30.0 ) require ( - github.com/stoewer/go-strcase v1.2.1 // indirect - golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/text v0.8.0 // indirect + github.com/stoewer/go-strcase v1.3.0 // indirect + golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect + golang.org/x/sys v0.7.0 // indirect + golang.org/x/text v0.9.0 // indirect ) replace github.com/google/cel-go => ../. diff --git a/repl/go.sum b/repl/go.sum index 4a4e9386..19b7365a 100644 --- a/repl/go.sum +++ b/repl/go.sum @@ -1,5 +1,5 @@ -github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df h1:7RFfzj4SSt6nnvCPbCqijJi1nWCd+TqAT3bYCStRC18= -github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1 h1:X8MJ0fnN5FPdcGF5Ij2/OW+HgiJrRg3AfHAx1PJtIzM= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= @@ -14,8 +14,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stoewer/go-strcase v1.2.1 h1:/1JWd+AcWPzkcGLEmjUCka99YqGOtTnp1H/wcP+uap4= -github.com/stoewer/go-strcase v1.2.1/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= +github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs= +github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -23,19 +23,19 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= -golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd h1:sLpv7bNL1AsX3fdnWh9WVh7ejIzXdOc1RRHGeAmeStU= +google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= From 8643b1db79c13d3b820e7a3bfa131e737219c223 Mon Sep 17 00:00:00 2001 From: TristonianJones Date: Thu, 6 Apr 2023 15:44:29 -0700 Subject: [PATCH 7/7] Fixed test --- repl/appengine/app/api_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repl/appengine/app/api_test.go b/repl/appengine/app/api_test.go index c5203cd2..23acf1e4 100644 --- a/repl/appengine/app/api_test.go +++ b/repl/appengine/app/api_test.go @@ -85,7 +85,7 @@ func TestAPIEvaluate(t *testing.T) { }, { ReplOutput: "", - Issue: "(1:0) no viable alternative at input '}'", + Issue: "invalid command: (1:0) no viable alternative at input '}'", Evaluated: false, }, },