diff --git a/go/test/endtoend/mysqlserver/mysql_server_test.go b/go/test/endtoend/mysqlserver/mysql_server_test.go index ee6e973593b..3464a4d7712 100644 --- a/go/test/endtoend/mysqlserver/mysql_server_test.go +++ b/go/test/endtoend/mysqlserver/mysql_server_test.go @@ -63,7 +63,7 @@ func TestMultiStatement(t *testing.T) { _, err = db.QueryContext(ctx, "SELECT 1; SELECT 2; SELECT 3") require.NotNilf(t, err, "error expected, got nil error") - assert.Containsf(t, err.Error(), "syntax error", "expected syntax error, got %v", err) + assert.Containsf(t, err.Error(), "Error 1149 (42000): Expected a single statement", "expected error, got %v", err) } // TestLargeComment add large comment in insert stmt and validate the insert process. diff --git a/go/test/endtoend/onlineddl/scheduler/onlineddl_scheduler_test.go b/go/test/endtoend/onlineddl/scheduler/onlineddl_scheduler_test.go index 5ba9e9b2d76..bbbeb3d6abf 100644 --- a/go/test/endtoend/onlineddl/scheduler/onlineddl_scheduler_test.go +++ b/go/test/endtoend/onlineddl/scheduler/onlineddl_scheduler_test.go @@ -18,10 +18,8 @@ package scheduler import ( "context" - "errors" "flag" "fmt" - "io" "math/rand/v2" "os" "path" @@ -130,13 +128,9 @@ deletesAttempts=%d, deletesFailures=%d, deletesNoops=%d, deletes=%d, func parseTableName(t *testing.T, sql string) (tableName string) { // ddlStatement could possibly be composed of multiple DDL statements parser := sqlparser.NewTestParser() - tokenizer := parser.NewStringTokenizer(sql) - for { - stmt, err := sqlparser.ParseNextStrictDDL(tokenizer) - if err != nil && errors.Is(err, io.EOF) { - break - } - require.NoErrorf(t, err, "parsing sql: [%v]", sql) + stmts, err := parser.ParseMultiple(sql) + require.NoError(t, err) + for _, stmt := range stmts { ddlStmt, ok := stmt.(sqlparser.DDLStatement) require.True(t, ok) tableName = ddlStmt.GetTable().Name.String() diff --git a/go/test/endtoend/transaction/twopc/twopc_test.go b/go/test/endtoend/transaction/twopc/twopc_test.go index 89dfe2c3548..c54dc6b1f98 100644 --- a/go/test/endtoend/transaction/twopc/twopc_test.go +++ b/go/test/endtoend/transaction/twopc/twopc_test.go @@ -96,7 +96,7 @@ func TestDTCommit(t *testing.T) { utils.Exec(t, conn, "begin") utils.Exec(t, conn, "insert into twopc_user(id, name) values(7,'foo')") utils.Exec(t, conn, "insert into twopc_user(id, name) values(8,'bar')") - utils.Exec(t, conn, `set @@time_zone="+10:30"`) + utils.Exec(t, conn, `set time_zone="+10:30"`) utils.Exec(t, conn, "insert into twopc_user(id, name) values(9,'baz')") utils.Exec(t, conn, "insert into twopc_user(id, name) values(10,'apa')") utils.Exec(t, conn, "commit") @@ -125,16 +125,16 @@ func TestDTCommit(t *testing.T) { "delete:[VARCHAR(\"dtid-1\") VARCHAR(\"PREPARE\")]", }, "ks.redo_statement:-40": { - "insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"set @@time_zone = '+10:30'\")]", + "insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"set time_zone = '+10:30'\")]", "insert:[VARCHAR(\"dtid-1\") INT64(2) BLOB(\"insert into twopc_user(id, `name`) values (10, 'apa')\")]", - "delete:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"set @@time_zone = '+10:30'\")]", + "delete:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"set time_zone = '+10:30'\")]", "delete:[VARCHAR(\"dtid-1\") INT64(2) BLOB(\"insert into twopc_user(id, `name`) values (10, 'apa')\")]", }, "ks.redo_statement:40-80": { "insert:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (8, 'bar')\")]", - "insert:[VARCHAR(\"dtid-1\") INT64(2) BLOB(\"set @@time_zone = '+10:30'\")]", + "insert:[VARCHAR(\"dtid-1\") INT64(2) BLOB(\"set time_zone = '+10:30'\")]", "delete:[VARCHAR(\"dtid-1\") INT64(1) BLOB(\"insert into twopc_user(id, `name`) values (8, 'bar')\")]", - "delete:[VARCHAR(\"dtid-1\") INT64(2) BLOB(\"set @@time_zone = '+10:30'\")]", + "delete:[VARCHAR(\"dtid-1\") INT64(2) BLOB(\"set time_zone = '+10:30'\")]", }, "ks.twopc_user:-40": { `insert:[INT64(10) VARCHAR("apa")]`, @@ -172,9 +172,9 @@ func TestDTCommit(t *testing.T) { "delete:[VARCHAR(\"dtid-2\") VARCHAR(\"PREPARE\")]", }, "ks.redo_statement:40-80": { - "insert:[VARCHAR(\"dtid-2\") INT64(1) BLOB(\"set @@time_zone = '+10:30'\")]", + "insert:[VARCHAR(\"dtid-2\") INT64(1) BLOB(\"set time_zone = '+10:30'\")]", "insert:[VARCHAR(\"dtid-2\") INT64(2) BLOB(\"update twopc_user set `name` = 'newfoo' where id = 8 limit 10001 /* INT64 */\")]", - "delete:[VARCHAR(\"dtid-2\") INT64(1) BLOB(\"set @@time_zone = '+10:30'\")]", + "delete:[VARCHAR(\"dtid-2\") INT64(1) BLOB(\"set time_zone = '+10:30'\")]", "delete:[VARCHAR(\"dtid-2\") INT64(2) BLOB(\"update twopc_user set `name` = 'newfoo' where id = 8 limit 10001 /* INT64 */\")]", }, "ks.twopc_user:40-80": {"update:[INT64(8) VARCHAR(\"newfoo\")]"}, @@ -205,9 +205,9 @@ func TestDTCommit(t *testing.T) { "delete:[VARCHAR(\"dtid-3\") VARCHAR(\"PREPARE\")]", }, "ks.redo_statement:-40": { - "insert:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"set @@time_zone = '+10:30'\")]", + "insert:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"set time_zone = '+10:30'\")]", "insert:[VARCHAR(\"dtid-3\") INT64(2) BLOB(\"delete from twopc_user where id = 10 limit 10001 /* INT64 */\")]", - "delete:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"set @@time_zone = '+10:30'\")]", + "delete:[VARCHAR(\"dtid-3\") INT64(1) BLOB(\"set time_zone = '+10:30'\")]", "delete:[VARCHAR(\"dtid-3\") INT64(2) BLOB(\"delete from twopc_user where id = 10 limit 10001 /* INT64 */\")]", }, "ks.twopc_user:-40": {"delete:[INT64(10) VARCHAR(\"apa\")]"}, diff --git a/go/test/endtoend/vtgate/unsharded/main_test.go b/go/test/endtoend/vtgate/unsharded/main_test.go index 307bb7fcf23..7fe8b864fd8 100644 --- a/go/test/endtoend/vtgate/unsharded/main_test.go +++ b/go/test/endtoend/vtgate/unsharded/main_test.go @@ -38,6 +38,7 @@ import ( var ( clusterInstance *cluster.LocalProcessCluster + vtParams mysql.ConnParams cell = "zone1" hostname = "localhost" KeyspaceName = "customer" @@ -56,7 +57,43 @@ CREATE TABLE t1 ( CREATE TABLE allDefaults ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) -) ENGINE=Innodb;` +) ENGINE=Innodb; + +CREATE PROCEDURE sp_insert() +BEGIN + insert into allDefaults () values (); +END; + +CREATE PROCEDURE sp_delete() +BEGIN + delete from allDefaults; +END; + +CREATE PROCEDURE sp_multi_dml() +BEGIN + insert into allDefaults () values (); + delete from allDefaults; +END; + +CREATE PROCEDURE sp_variable() +BEGIN + insert into allDefaults () values (); + SELECT min(id) INTO @myvar FROM allDefaults; + DELETE FROM allDefaults WHERE id = @myvar; +END; + +CREATE PROCEDURE sp_select() +BEGIN + SELECT * FROM allDefaults; +END; + +CREATE PROCEDURE sp_all() +BEGIN + insert into allDefaults () values (); + select * from allDefaults; + delete from allDefaults; +END;` + VSchema = ` { "sharded": false, @@ -98,41 +135,6 @@ CREATE TABLE allDefaults ( ` createProcSQL = []string{` -CREATE PROCEDURE sp_insert() -BEGIN - insert into allDefaults () values (); -END; -`, ` -CREATE PROCEDURE sp_delete() -BEGIN - delete from allDefaults; -END; -`, ` -CREATE PROCEDURE sp_multi_dml() -BEGIN - insert into allDefaults () values (); - delete from allDefaults; -END; -`, ` -CREATE PROCEDURE sp_variable() -BEGIN - insert into allDefaults () values (); - SELECT min(id) INTO @myvar FROM allDefaults; - DELETE FROM allDefaults WHERE id = @myvar; -END; -`, ` -CREATE PROCEDURE sp_select() -BEGIN - SELECT * FROM allDefaults; -END; -`, ` -CREATE PROCEDURE sp_all() -BEGIN - insert into allDefaults () values (); - select * from allDefaults; - delete from allDefaults; -END; -`, ` CREATE PROCEDURE in_parameter(IN val int) BEGIN insert into allDefaults(id) values(val); @@ -177,8 +179,20 @@ func TestMain(m *testing.M) { return 1 } - primaryTablet := clusterInstance.Keyspaces[0].Shards[0].PrimaryTablet().VttabletProcess - if err := primaryTablet.QueryTabletMultiple(createProcSQL, KeyspaceName, true); err != nil { + // Also check we can create procedures through the vtgate. + vtParams = mysql.ConnParams{ + Host: "localhost", + Port: clusterInstance.VtgateMySQLPort, + } + conn, err := mysql.Connect(context.Background(), &vtParams) + if err != nil { + log.Fatal(err.Error()) + return 1 + } + defer conn.Close() + + err = runCreateProcedures(conn) + if err != nil { log.Fatal(err.Error()) return 1 } @@ -188,14 +202,20 @@ func TestMain(m *testing.M) { os.Exit(exitCode) } +func runCreateProcedures(conn *mysql.Conn) error { + for _, sql := range createProcSQL { + _, err := conn.ExecuteFetch(sql, 1000, true) + if err != nil { + return err + } + } + return nil +} + func TestSelectIntoAndLoadFrom(t *testing.T) { // Test is skipped because it requires secure-file-priv variable to be set to not NULL or empty. t.Skip() ctx := context.Background() - vtParams := mysql.ConnParams{ - Host: "localhost", - Port: clusterInstance.VtgateMySQLPort, - } conn, err := mysql.Connect(ctx, &vtParams) require.Nil(t, err) defer conn.Close() @@ -226,10 +246,6 @@ func TestSelectIntoAndLoadFrom(t *testing.T) { func TestEmptyStatement(t *testing.T) { ctx := context.Background() - vtParams := mysql.ConnParams{ - Host: "localhost", - Port: clusterInstance.VtgateMySQLPort, - } conn, err := mysql.Connect(ctx, &vtParams) require.Nil(t, err) defer conn.Close() @@ -242,10 +258,6 @@ func TestEmptyStatement(t *testing.T) { func TestTopoDownServingQuery(t *testing.T) { ctx := context.Background() - vtParams := mysql.ConnParams{ - Host: "localhost", - Port: clusterInstance.VtgateMySQLPort, - } conn, err := mysql.Connect(ctx, &vtParams) require.Nil(t, err) defer conn.Close() @@ -261,10 +273,6 @@ func TestTopoDownServingQuery(t *testing.T) { func TestInsertAllDefaults(t *testing.T) { ctx := context.Background() - vtParams := mysql.ConnParams{ - Host: "localhost", - Port: clusterInstance.VtgateMySQLPort, - } conn, err := mysql.Connect(ctx, &vtParams) require.NoError(t, err) defer conn.Close() @@ -275,10 +283,6 @@ func TestInsertAllDefaults(t *testing.T) { func TestDDLUnsharded(t *testing.T) { ctx := context.Background() - vtParams := mysql.ConnParams{ - Host: "localhost", - Port: clusterInstance.VtgateMySQLPort, - } conn, err := mysql.Connect(ctx, &vtParams) require.NoError(t, err) defer conn.Close() @@ -341,10 +345,6 @@ func TestCallProcedure(t *testing.T) { func TestTempTable(t *testing.T) { ctx := context.Background() - vtParams := mysql.ConnParams{ - Host: "localhost", - Port: clusterInstance.VtgateMySQLPort, - } conn1, err := mysql.Connect(ctx, &vtParams) require.NoError(t, err) defer conn1.Close() @@ -365,10 +365,6 @@ func TestTempTable(t *testing.T) { func TestReservedConnDML(t *testing.T) { ctx := context.Background() - vtParams := mysql.ConnParams{ - Host: "localhost", - Port: clusterInstance.VtgateMySQLPort, - } conn, err := mysql.Connect(ctx, &vtParams) require.NoError(t, err) defer conn.Close() @@ -387,10 +383,6 @@ func TestReservedConnDML(t *testing.T) { func TestNumericPrecisionScale(t *testing.T) { ctx := context.Background() - vtParams := mysql.ConnParams{ - Host: "localhost", - Port: clusterInstance.VtgateMySQLPort, - } conn, err := mysql.Connect(ctx, &vtParams) require.NoError(t, err) defer conn.Close() @@ -424,10 +416,6 @@ func TestNumericPrecisionScale(t *testing.T) { } func TestDeleteAlias(t *testing.T) { - vtParams := mysql.ConnParams{ - Host: "localhost", - Port: clusterInstance.VtgateMySQLPort, - } conn, err := mysql.Connect(context.Background(), &vtParams) require.NoError(t, err) defer conn.Close() @@ -437,10 +425,6 @@ func TestDeleteAlias(t *testing.T) { } func TestFloatValueDefault(t *testing.T) { - vtParams := mysql.ConnParams{ - Host: "localhost", - Port: clusterInstance.VtgateMySQLPort, - } conn, err := mysql.Connect(context.Background(), &vtParams) require.NoError(t, err) defer conn.Close() diff --git a/go/test/vschemawrapper/vschema_wrapper.go b/go/test/vschemawrapper/vschema_wrapper.go index 0eefe18e5b8..96b9663dc6f 100644 --- a/go/test/vschemawrapper/vschema_wrapper.go +++ b/go/test/vschemawrapper/vschema_wrapper.go @@ -224,21 +224,7 @@ func (vw *VSchemaWrapper) SysVarSetEnabled() bool { } func (vw *VSchemaWrapper) TargetDestination(qualifier string) (key.ShardDestination, *vindexes.Keyspace, topodatapb.TabletType, error) { - var keyspaceName string - if vw.Keyspace != nil { - keyspaceName = vw.Keyspace.Name - } - if vw.Dest == nil && qualifier != "" { - keyspaceName = qualifier - } - if keyspaceName == "" { - return nil, nil, 0, vterrors.VT03007() - } - keyspace := vw.V.Keyspaces[keyspaceName] - if keyspace == nil { - return nil, nil, 0, vterrors.VT05003(keyspaceName) - } - return vw.Dest, keyspace.Keyspace, vw.TabletType_, nil + return vw.Vcursor.TargetDestination(qualifier) } func (vw *VSchemaWrapper) TabletType() topodatapb.TabletType { diff --git a/go/vt/schemadiff/schema.go b/go/vt/schemadiff/schema.go index 658fdab37c5..5291ab256f6 100644 --- a/go/vt/schemadiff/schema.go +++ b/go/vt/schemadiff/schema.go @@ -114,7 +114,7 @@ func NewSchemaFromQueries(env *Environment, queries []string) (*Schema, error) { // NewSchemaFromSQL creates a valid and normalized schema based on a SQL blob that contains // CREATE statements for various objects (tables, views) func NewSchemaFromSQL(env *Environment, sql string) (*Schema, error) { - statements, err := env.Parser().SplitStatements(sql) + statements, err := env.Parser().ParseMultipleIgnoreEmpty(sql) if err != nil { return nil, err } diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 806784c27e8..a81e2f276f4 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -43,6 +43,12 @@ type ( SQLNode } + // CompoundStatement represents a compound statement that can be part of a create procedure call. + CompoundStatement interface { + iCompoundStatement() + SQLNode + } + Commented interface { SetComments(comments Comments) GetParsedComments() *ParsedComments @@ -309,6 +315,7 @@ type ( // SelectInto is a struct that represent the INTO part of a select query SelectInto struct { Type SelectIntoType + VarList []*Variable FileName string Charset ColumnCharset FormatOption string @@ -522,6 +529,16 @@ type ( Shards string } + // CreateProcedure represents a CREATE PROCEDURE statement. + CreateProcedure struct { + Name TableName + Comments *ParsedComments + IfNotExists bool + Definer *Definer + Params []*ProcParameter + Body CompoundStatement + } + // AlterTable represents a ALTER TABLE statement. AlterTable struct { Table TableName @@ -548,6 +565,13 @@ type ( Comments *ParsedComments } + // DropProcedure represents a DROP procedure statement. + DropProcedure struct { + Comments *ParsedComments + Name TableName + IfExists bool + } + // CreateTable represents a CREATE TABLE statement. CreateTable struct { Temp bool @@ -745,8 +769,124 @@ type ( // IndexType is the type of index in a DDL statement IndexType int8 + + // HandlerAction is the type of action for the DeclareHandler statement + HandlerAction int8 +) + +// Compound Statements +type ( + // CompoundStatements represents a list of compound statements. + CompoundStatements struct { + Statements []CompoundStatement + } + + // SingleStatement represents a single statement. + SingleStatement struct { + Statement Statement + } + + // BeginEndStatement represents a BEGIN ... END block. + BeginEndStatement struct { + Statements *CompoundStatements + } + + // IfStatement represents a IF ... ELSEIF ... ELSE ... END IF block. + IfStatement struct { + SearchCondition Expr + ThenStatements *CompoundStatements + ElseIfBlocks []*ElseIfBlock + ElseStatements *CompoundStatements + } + + // ElseIfBlock represents a ELSEIF block in an IF statement. + ElseIfBlock struct { + SearchCondition Expr + ThenStatements *CompoundStatements + } + + // DeclareVar represents a Local Variable DECLARE Statement + DeclareVar struct { + VarNames []IdentifierCI + Type *ColumnType + } + + // DeclareHandler represents a DECLARE...HANDLER statement + DeclareHandler struct { + Action HandlerAction + Conditions []HandlerCondition + Statement CompoundStatement + } + + // DeclareCondition represents a DECLARE...CONDITION statement + DeclareCondition struct { + Name IdentifierCI + Condition HandlerCondition + } + + // Signal represents a SIGNAL statement + Signal struct { + Condition HandlerCondition + SetValues []*SignalSet + } +) + +func (*SingleStatement) iCompoundStatement() {} +func (*BeginEndStatement) iCompoundStatement() {} +func (*IfStatement) iCompoundStatement() {} +func (*DeclareVar) iCompoundStatement() {} +func (*DeclareHandler) iCompoundStatement() {} +func (*DeclareCondition) iCompoundStatement() {} +func (*Signal) iCompoundStatement() {} + +// SignalConditionName is an enum for the name of the condition variable being set in SIGNAL statement +type SignalConditionName int8 + +// SignalSet represents a set condition in a SIGNAL statement +type SignalSet struct { + ConditionName SignalConditionName + Value Expr +} + +// HandlerCondition represents a condition in a DECLARE HANDLER statement +type ( + HandlerCondition interface { + iHandlerCondition() + SQLNode + } + + // HandlerConditionSQLState represents a SQLSTATE condition in a DECLARE HANDLER statement + HandlerConditionSQLState struct { + SQLStateValue *Literal + } + + // HandlerConditionNamed represents a named condition in a DECLARE HANDLER statement + HandlerConditionNamed struct { + Name IdentifierCI + } + + // HandlerConditionErrorCode represents an error code condition in a DECLARE HANDLER statement + HandlerConditionErrorCode struct { + ErrorCode int + } + + // HandlerConditionSQLException represents a SQLEXCEPTION condition in a DECLARE HANDLER statement + HandlerConditionSQLException struct{} + + // HandlerConditionSQLWarning represents a SQLWARNING condition in a DECLARE HANDLER statement + HandlerConditionSQLWarning struct{} + + // HandlerConditionNotFound represents a NOT FOUND condition in a DECLARE HANDLER statement + HandlerConditionNotFound struct{} ) +func (*HandlerConditionSQLState) iHandlerCondition() {} +func (*HandlerConditionNamed) iHandlerCondition() {} +func (*HandlerConditionErrorCode) iHandlerCondition() {} +func (*HandlerConditionSQLException) iHandlerCondition() {} +func (*HandlerConditionSQLWarning) iHandlerCondition() {} +func (*HandlerConditionNotFound) iHandlerCondition() {} + var _ OrderAndLimit = (*Select)(nil) var _ OrderAndLimit = (*Update)(nil) var _ OrderAndLimit = (*Delete)(nil) @@ -790,6 +930,7 @@ func (*UnlockTables) iStatement() {} func (*AlterTable) iStatement() {} func (*AlterVschema) iStatement() {} func (*AlterMigration) iStatement() {} +func (*CreateProcedure) iStatement() {} func (*RevertMigration) iStatement() {} func (*ShowMigrationLogs) iStatement() {} func (*ShowThrottledApps) iStatement() {} @@ -807,15 +948,18 @@ func (*ExecuteStmt) iStatement() {} func (*DeallocateStmt) iStatement() {} func (*PurgeBinaryLogs) iStatement() {} func (*Kill) iStatement() {} - -func (*CreateView) iDDLStatement() {} -func (*AlterView) iDDLStatement() {} -func (*CreateTable) iDDLStatement() {} -func (*DropTable) iDDLStatement() {} -func (*DropView) iDDLStatement() {} -func (*AlterTable) iDDLStatement() {} -func (*TruncateTable) iDDLStatement() {} -func (*RenameTable) iDDLStatement() {} +func (*DropProcedure) iStatement() {} + +func (*CreateView) iDDLStatement() {} +func (*AlterView) iDDLStatement() {} +func (*CreateTable) iDDLStatement() {} +func (*DropTable) iDDLStatement() {} +func (*DropView) iDDLStatement() {} +func (*AlterTable) iDDLStatement() {} +func (*TruncateTable) iDDLStatement() {} +func (*RenameTable) iDDLStatement() {} +func (*CreateProcedure) iDDLStatement() {} +func (*DropProcedure) iDDLStatement() {} func (*AddConstraintDefinition) iAlterOption() {} func (*AddIndexDefinition) iAlterOption() {} @@ -864,6 +1008,18 @@ func (*RenameTable) IsFullyParsed() bool { return true } +// IsFullyParsed implements the DDLStatement interface +func (node *CreateProcedure) IsFullyParsed() bool { return true } + +// IsFullyParsed implements the DDLStatement interface +func (node *DropProcedure) IsFullyParsed() bool { return true } + +// SetFullyParsed implements the DDL interface +func (node *DropProcedure) SetFullyParsed(fullyParsed bool) {} + +// SetFullyParsed implements the DDLStatement interface +func (node *CreateProcedure) SetFullyParsed(bool) {} + // SetFullyParsed implements the DDLStatement interface func (node *RenameTable) SetFullyParsed(fullyParsed bool) {} @@ -924,6 +1080,14 @@ func (*TruncateTable) IsTemporary() bool { return false } +// IsTemporary implements the DDLStatement interface +func (node *CreateProcedure) IsTemporary() bool { return false } + +// IsTemporary implements the DDL interface +func (node *DropProcedure) IsTemporary() bool { + return false +} + // IsTemporary implements the DDLStatement interface func (*RenameTable) IsTemporary() bool { return false @@ -999,6 +1163,14 @@ func (node *RenameTable) GetTable() TableName { return TableName{} } +// GetTable implements the DDLStatement interface +func (node *CreateProcedure) GetTable() TableName { return node.Name } + +// GetTable implements the DDL interface +func (node *DropProcedure) GetTable() TableName { + return node.Name +} + // GetAction implements the DDLStatement interface func (node *TruncateTable) GetAction() DDLAction { return TruncateDDLAction @@ -1039,6 +1211,16 @@ func (node *DropView) GetAction() DDLAction { return DropDDLAction } +// GetAction implements the DDL interface +func (node *DropProcedure) GetAction() DDLAction { + return DropDDLAction +} + +// GetAction implements the DDLStatement interface +func (node *CreateProcedure) GetAction() DDLAction { + return CreateProcedureAction +} + // GetOptLike implements the DDLStatement interface func (node *CreateTable) GetOptLike() *OptLike { return node.OptLike @@ -1079,6 +1261,16 @@ func (node *DropView) GetOptLike() *OptLike { return nil } +// GetOptLike implements the DDLStatement interface +func (node *CreateProcedure) GetOptLike() *OptLike { + return nil +} + +// GetOptLike implements the DDL interface +func (node *DropProcedure) GetOptLike() *OptLike { + return nil +} + // GetIfExists implements the DDLStatement interface func (node *RenameTable) GetIfExists() bool { return false @@ -1119,6 +1311,16 @@ func (node *DropView) GetIfExists() bool { return node.IfExists } +// GetIfExists implements the DDL interface +func (node *DropProcedure) GetIfExists() bool { + return node.IfExists +} + +// GetIfExists implements the DDLStatement interface +func (node *CreateProcedure) GetIfExists() bool { + return false +} + // GetIfNotExists implements the DDLStatement interface func (node *RenameTable) GetIfNotExists() bool { return false @@ -1159,6 +1361,16 @@ func (node *DropView) GetIfNotExists() bool { return false } +// GetIfNotExists implements the DDLStatement interface +func (node *CreateProcedure) GetIfNotExists() bool { + return node.IfNotExists +} + +// GetIfNotExists implements the DDL interface +func (node *DropProcedure) GetIfNotExists() bool { + return false +} + // GetIsReplace implements the DDLStatement interface func (node *RenameTable) GetIsReplace() bool { return false @@ -1199,6 +1411,16 @@ func (node *DropView) GetIsReplace() bool { return false } +// GetIsReplace implements the DDLStatement interface +func (node *CreateProcedure) GetIsReplace() bool { + return false +} + +// GetIsReplace implements the DDL interface +func (node *DropProcedure) GetIsReplace() bool { + return false +} + // GetTableSpec implements the DDLStatement interface func (node *CreateTable) GetTableSpec() *TableSpec { return node.TableSpec @@ -1239,6 +1461,16 @@ func (node *DropView) GetTableSpec() *TableSpec { return nil } +// GetTableSpec implements the DDLStatement interface +func (node *CreateProcedure) GetTableSpec() *TableSpec { + return nil +} + +// GetTableSpec implements the DDL interface +func (node *DropProcedure) GetTableSpec() *TableSpec { + return nil +} + // GetFromTables implements the DDLStatement interface func (node *RenameTable) GetFromTables() TableNames { var fromTables TableNames @@ -1283,6 +1515,16 @@ func (node *AlterView) GetFromTables() TableNames { return nil } +// GetFromTables implements the DDLStatement interface +func (node *CreateProcedure) GetFromTables() TableNames { + return nil +} + +// GetFromTables implements the DDL interface +func (node *DropProcedure) GetFromTables() TableNames { + return nil +} + // SetFromTables implements DDLStatement. func (node *RenameTable) SetFromTables(tables TableNames) { if len(node.TablePairs) != len(tables) { @@ -1328,6 +1570,14 @@ func (node *AlterView) SetFromTables(tables TableNames) { // irrelevant } +// SetFromTables implements the DDLStatement interface +func (node *CreateProcedure) SetFromTables(tables TableNames) { + // irrelevant +} + +// SetFromTables implements the DDL interface +func (node *DropProcedure) SetFromTables(tables TableNames) {} + // SetComments implements Commented interface. func (node *RenameTable) SetComments(comments Comments) { // irrelevant @@ -1408,6 +1658,16 @@ func (node *VStream) SetComments(comments Comments) { node.Comments = comments.Parsed() } +// SetComments for CreateProcedure +func (node *CreateProcedure) SetComments(comments Comments) { + node.Comments = comments.Parsed() +} + +// SetComments implements the DDL interface +func (node *DropProcedure) SetComments(comments Comments) { + node.Comments = comments.Parsed() +} + // GetParsedComments implements Commented interface. func (node *RenameTable) GetParsedComments() *ParsedComments { // irrelevant @@ -1493,6 +1753,14 @@ func (node *VStream) GetParsedComments() *ParsedComments { return node.Comments } +// GetParsedComments implements Commented interface. +func (node *CreateProcedure) GetParsedComments() *ParsedComments { return node.Comments } + +// GetParsedComments implements the DDL interface +func (node *DropProcedure) GetParsedComments() *ParsedComments { + return node.Comments +} + // GetToTables implements the DDLStatement interface func (node *RenameTable) GetToTables() TableNames { var toTables TableNames @@ -1543,6 +1811,16 @@ func (node *DropView) GetToTables() TableNames { return nil } +// GetToTables implements the DDLStatement interface +func (node *CreateProcedure) GetToTables() TableNames { + return nil +} + +// GetToTables implements the DDL interface +func (node *DropProcedure) GetToTables() TableNames { + return nil +} + // AffectedTables returns the list table names affected by the DDLStatement. func (node *RenameTable) AffectedTables() TableNames { list := make(TableNames, 0, 2*len(node.TablePairs)) @@ -1595,6 +1873,16 @@ func (node *DropView) AffectedTables() TableNames { return node.FromTables } +// AffectedTables implements the DDLStatement interface +func (node *CreateProcedure) AffectedTables() TableNames { + return TableNames{node.GetTable()} +} + +// AffectedTables implements the DDL interface +func (node *DropProcedure) AffectedTables() TableNames { + return TableNames{node.GetTable()} +} + // SetTable implements DDLStatement. func (node *TruncateTable) SetTable(qualifier string, name string) { node.Table.Qualifier = NewIdentifierCS(qualifier) @@ -1634,6 +1922,18 @@ func (node *DropTable) SetTable(qualifier string, name string) {} // SetTable implements DDLStatement. func (node *DropView) SetTable(qualifier string, name string) {} +// SetTable implements the DDLStatement interface +func (node *CreateProcedure) SetTable(qualifier string, name string) { + node.Name.Qualifier = NewIdentifierCS(qualifier) + node.Name.Name = NewIdentifierCS(name) +} + +// SetTable implements the DDL interface +func (node *DropProcedure) SetTable(qualifier string, name string) { + node.Name.Qualifier = NewIdentifierCS(qualifier) + node.Name.Name = NewIdentifierCS(name) +} + func (*DropDatabase) iDBDDLStatement() {} func (*CreateDatabase) iDBDDLStatement() {} func (*AlterDatabase) iDBDDLStatement() {} @@ -1740,6 +2040,16 @@ type OptLike struct { LikeTable TableName } +// ProcParameter represents a procedure parameter +type ProcParameter struct { + Mode ProcParameterMode + Name IdentifierCI + Type *ColumnType +} + +// ProcParameterMode is an enum for ProcParameter.Mode +type ProcParameterMode int8 + // PartitionSpec describe partition actions (for alter statements) type PartitionSpec struct { Action PartitionSpecAction diff --git a/go/vt/sqlparser/ast_clone.go b/go/vt/sqlparser/ast_clone.go index 9d476801eaf..b3dec01897e 100644 --- a/go/vt/sqlparser/ast_clone.go +++ b/go/vt/sqlparser/ast_clone.go @@ -71,6 +71,8 @@ func CloneSQLNode(in SQLNode) SQLNode { return CloneRefOfAvg(in) case *Begin: return CloneRefOfBegin(in) + case *BeginEndStatement: + return CloneRefOfBeginEndStatement(in) case *BetweenExpr: return CloneRefOfBetweenExpr(in) case *BinaryExpr: @@ -113,6 +115,8 @@ func CloneSQLNode(in SQLNode) SQLNode { return CloneRefOfCommonTableExpr(in) case *ComparisonExpr: return CloneRefOfComparisonExpr(in) + case *CompoundStatements: + return CloneRefOfCompoundStatements(in) case *ConstraintDefinition: return CloneRefOfConstraintDefinition(in) case *ConvertExpr: @@ -127,6 +131,8 @@ func CloneSQLNode(in SQLNode) SQLNode { return CloneRefOfCountStar(in) case *CreateDatabase: return CloneRefOfCreateDatabase(in) + case *CreateProcedure: + return CloneRefOfCreateProcedure(in) case *CreateTable: return CloneRefOfCreateTable(in) case *CreateView: @@ -135,6 +141,12 @@ func CloneSQLNode(in SQLNode) SQLNode { return CloneRefOfCurTimeFuncExpr(in) case *DeallocateStmt: return CloneRefOfDeallocateStmt(in) + case *DeclareCondition: + return CloneRefOfDeclareCondition(in) + case *DeclareHandler: + return CloneRefOfDeclareHandler(in) + case *DeclareVar: + return CloneRefOfDeclareVar(in) case *Default: return CloneRefOfDefault(in) case *Definer: @@ -149,10 +161,14 @@ func CloneSQLNode(in SQLNode) SQLNode { return CloneRefOfDropDatabase(in) case *DropKey: return CloneRefOfDropKey(in) + case *DropProcedure: + return CloneRefOfDropProcedure(in) case *DropTable: return CloneRefOfDropTable(in) case *DropView: return CloneRefOfDropView(in) + case *ElseIfBlock: + return CloneRefOfElseIfBlock(in) case *ExecuteStmt: return CloneRefOfExecuteStmt(in) case *ExistsExpr: @@ -209,10 +225,24 @@ func CloneSQLNode(in SQLNode) SQLNode { return CloneRefOfGroupBy(in) case *GroupConcatExpr: return CloneRefOfGroupConcatExpr(in) + case *HandlerConditionErrorCode: + return CloneRefOfHandlerConditionErrorCode(in) + case *HandlerConditionNamed: + return CloneRefOfHandlerConditionNamed(in) + case *HandlerConditionNotFound: + return CloneRefOfHandlerConditionNotFound(in) + case *HandlerConditionSQLException: + return CloneRefOfHandlerConditionSQLException(in) + case *HandlerConditionSQLState: + return CloneRefOfHandlerConditionSQLState(in) + case *HandlerConditionSQLWarning: + return CloneRefOfHandlerConditionSQLWarning(in) case IdentifierCI: return CloneIdentifierCI(in) case IdentifierCS: return CloneIdentifierCS(in) + case *IfStatement: + return CloneRefOfIfStatement(in) case *IndexDefinition: return CloneRefOfIndexDefinition(in) case *IndexHint: @@ -397,6 +427,8 @@ func CloneSQLNode(in SQLNode) SQLNode { return CloneRefOfPolygonPropertyFuncExpr(in) case *PrepareStmt: return CloneRefOfPrepareStmt(in) + case *ProcParameter: + return CloneRefOfProcParameter(in) case *PurgeBinaryLogs: return CloneRefOfPurgeBinaryLogs(in) case ReferenceAction: @@ -463,6 +495,12 @@ func CloneSQLNode(in SQLNode) SQLNode { return CloneRefOfShowThrottlerStatus(in) case *ShowTransactionStatus: return CloneRefOfShowTransactionStatus(in) + case *Signal: + return CloneRefOfSignal(in) + case *SignalSet: + return CloneRefOfSignalSet(in) + case *SingleStatement: + return CloneRefOfSingleStatement(in) case *StarExpr: return CloneRefOfStarExpr(in) case *Std: @@ -824,6 +862,16 @@ func CloneRefOfBegin(n *Begin) *Begin { return &out } +// CloneRefOfBeginEndStatement creates a deep clone of the input. +func CloneRefOfBeginEndStatement(n *BeginEndStatement) *BeginEndStatement { + if n == nil { + return nil + } + out := *n + out.Statements = CloneRefOfCompoundStatements(n.Statements) + return &out +} + // CloneRefOfBetweenExpr creates a deep clone of the input. func CloneRefOfBetweenExpr(n *BetweenExpr) *BetweenExpr { if n == nil { @@ -1041,6 +1089,16 @@ func CloneRefOfComparisonExpr(n *ComparisonExpr) *ComparisonExpr { return &out } +// CloneRefOfCompoundStatements creates a deep clone of the input. +func CloneRefOfCompoundStatements(n *CompoundStatements) *CompoundStatements { + if n == nil { + return nil + } + out := *n + out.Statements = CloneSliceOfCompoundStatement(n.Statements) + return &out +} + // CloneRefOfConstraintDefinition creates a deep clone of the input. func CloneRefOfConstraintDefinition(n *ConstraintDefinition) *ConstraintDefinition { if n == nil { @@ -1118,6 +1176,20 @@ func CloneRefOfCreateDatabase(n *CreateDatabase) *CreateDatabase { return &out } +// CloneRefOfCreateProcedure creates a deep clone of the input. +func CloneRefOfCreateProcedure(n *CreateProcedure) *CreateProcedure { + if n == nil { + return nil + } + out := *n + out.Name = CloneTableName(n.Name) + out.Comments = CloneRefOfParsedComments(n.Comments) + out.Definer = CloneRefOfDefiner(n.Definer) + out.Params = CloneSliceOfRefOfProcParameter(n.Params) + out.Body = CloneCompoundStatement(n.Body) + return &out +} + // CloneRefOfCreateTable creates a deep clone of the input. func CloneRefOfCreateTable(n *CreateTable) *CreateTable { if n == nil { @@ -1166,6 +1238,39 @@ func CloneRefOfDeallocateStmt(n *DeallocateStmt) *DeallocateStmt { return &out } +// CloneRefOfDeclareCondition creates a deep clone of the input. +func CloneRefOfDeclareCondition(n *DeclareCondition) *DeclareCondition { + if n == nil { + return nil + } + out := *n + out.Name = CloneIdentifierCI(n.Name) + out.Condition = CloneHandlerCondition(n.Condition) + return &out +} + +// CloneRefOfDeclareHandler creates a deep clone of the input. +func CloneRefOfDeclareHandler(n *DeclareHandler) *DeclareHandler { + if n == nil { + return nil + } + out := *n + out.Conditions = CloneSliceOfHandlerCondition(n.Conditions) + out.Statement = CloneCompoundStatement(n.Statement) + return &out +} + +// CloneRefOfDeclareVar creates a deep clone of the input. +func CloneRefOfDeclareVar(n *DeclareVar) *DeclareVar { + if n == nil { + return nil + } + out := *n + out.VarNames = CloneSliceOfIdentifierCI(n.VarNames) + out.Type = CloneRefOfColumnType(n.Type) + return &out +} + // CloneRefOfDefault creates a deep clone of the input. func CloneRefOfDefault(n *Default) *Default { if n == nil { @@ -1242,6 +1347,17 @@ func CloneRefOfDropKey(n *DropKey) *DropKey { return &out } +// CloneRefOfDropProcedure creates a deep clone of the input. +func CloneRefOfDropProcedure(n *DropProcedure) *DropProcedure { + if n == nil { + return nil + } + out := *n + out.Comments = CloneRefOfParsedComments(n.Comments) + out.Name = CloneTableName(n.Name) + return &out +} + // CloneRefOfDropTable creates a deep clone of the input. func CloneRefOfDropTable(n *DropTable) *DropTable { if n == nil { @@ -1264,6 +1380,17 @@ func CloneRefOfDropView(n *DropView) *DropView { return &out } +// CloneRefOfElseIfBlock creates a deep clone of the input. +func CloneRefOfElseIfBlock(n *ElseIfBlock) *ElseIfBlock { + if n == nil { + return nil + } + out := *n + out.SearchCondition = CloneExpr(n.SearchCondition) + out.ThenStatements = CloneRefOfCompoundStatements(n.ThenStatements) + return &out +} + // CloneRefOfExecuteStmt creates a deep clone of the input. func CloneRefOfExecuteStmt(n *ExecuteStmt) *ExecuteStmt { if n == nil { @@ -1573,6 +1700,62 @@ func CloneRefOfGroupConcatExpr(n *GroupConcatExpr) *GroupConcatExpr { return &out } +// CloneRefOfHandlerConditionErrorCode creates a deep clone of the input. +func CloneRefOfHandlerConditionErrorCode(n *HandlerConditionErrorCode) *HandlerConditionErrorCode { + if n == nil { + return nil + } + out := *n + return &out +} + +// CloneRefOfHandlerConditionNamed creates a deep clone of the input. +func CloneRefOfHandlerConditionNamed(n *HandlerConditionNamed) *HandlerConditionNamed { + if n == nil { + return nil + } + out := *n + out.Name = CloneIdentifierCI(n.Name) + return &out +} + +// CloneRefOfHandlerConditionNotFound creates a deep clone of the input. +func CloneRefOfHandlerConditionNotFound(n *HandlerConditionNotFound) *HandlerConditionNotFound { + if n == nil { + return nil + } + out := *n + return &out +} + +// CloneRefOfHandlerConditionSQLException creates a deep clone of the input. +func CloneRefOfHandlerConditionSQLException(n *HandlerConditionSQLException) *HandlerConditionSQLException { + if n == nil { + return nil + } + out := *n + return &out +} + +// CloneRefOfHandlerConditionSQLState creates a deep clone of the input. +func CloneRefOfHandlerConditionSQLState(n *HandlerConditionSQLState) *HandlerConditionSQLState { + if n == nil { + return nil + } + out := *n + out.SQLStateValue = CloneRefOfLiteral(n.SQLStateValue) + return &out +} + +// CloneRefOfHandlerConditionSQLWarning creates a deep clone of the input. +func CloneRefOfHandlerConditionSQLWarning(n *HandlerConditionSQLWarning) *HandlerConditionSQLWarning { + if n == nil { + return nil + } + out := *n + return &out +} + // CloneIdentifierCI creates a deep clone of the input. func CloneIdentifierCI(n IdentifierCI) IdentifierCI { return *CloneRefOfIdentifierCI(&n) @@ -1583,6 +1766,19 @@ func CloneIdentifierCS(n IdentifierCS) IdentifierCS { return *CloneRefOfIdentifierCS(&n) } +// CloneRefOfIfStatement creates a deep clone of the input. +func CloneRefOfIfStatement(n *IfStatement) *IfStatement { + if n == nil { + return nil + } + out := *n + out.SearchCondition = CloneExpr(n.SearchCondition) + out.ThenStatements = CloneRefOfCompoundStatements(n.ThenStatements) + out.ElseIfBlocks = CloneSliceOfRefOfElseIfBlock(n.ElseIfBlocks) + out.ElseStatements = CloneRefOfCompoundStatements(n.ElseStatements) + return &out +} + // CloneRefOfIndexDefinition creates a deep clone of the input. func CloneRefOfIndexDefinition(n *IndexDefinition) *IndexDefinition { if n == nil { @@ -2571,6 +2767,17 @@ func CloneRefOfPrepareStmt(n *PrepareStmt) *PrepareStmt { return &out } +// CloneRefOfProcParameter creates a deep clone of the input. +func CloneRefOfProcParameter(n *ProcParameter) *ProcParameter { + if n == nil { + return nil + } + out := *n + out.Name = CloneIdentifierCI(n.Name) + out.Type = CloneRefOfColumnType(n.Type) + return &out +} + // CloneRefOfPurgeBinaryLogs creates a deep clone of the input. func CloneRefOfPurgeBinaryLogs(n *PurgeBinaryLogs) *PurgeBinaryLogs { if n == nil { @@ -2791,6 +2998,7 @@ func CloneRefOfSelectInto(n *SelectInto) *SelectInto { return nil } out := *n + out.VarList = CloneSliceOfRefOfVariable(n.VarList) out.Charset = CloneColumnCharset(n.Charset) return &out } @@ -2919,6 +3127,37 @@ func CloneRefOfShowTransactionStatus(n *ShowTransactionStatus) *ShowTransactionS return &out } +// CloneRefOfSignal creates a deep clone of the input. +func CloneRefOfSignal(n *Signal) *Signal { + if n == nil { + return nil + } + out := *n + out.Condition = CloneHandlerCondition(n.Condition) + out.SetValues = CloneSliceOfRefOfSignalSet(n.SetValues) + return &out +} + +// CloneRefOfSignalSet creates a deep clone of the input. +func CloneRefOfSignalSet(n *SignalSet) *SignalSet { + if n == nil { + return nil + } + out := *n + out.Value = CloneExpr(n.Value) + return &out +} + +// CloneRefOfSingleStatement creates a deep clone of the input. +func CloneRefOfSingleStatement(n *SingleStatement) *SingleStatement { + if n == nil { + return nil + } + out := *n + out.Statement = CloneStatement(n.Statement) + return &out +} + // CloneRefOfStarExpr creates a deep clone of the input. func CloneRefOfStarExpr(n *StarExpr) *StarExpr { if n == nil { @@ -3783,6 +4022,32 @@ func CloneColTuple(in ColTuple) ColTuple { } } +// CloneCompoundStatement creates a deep clone of the input. +func CloneCompoundStatement(in CompoundStatement) CompoundStatement { + if in == nil { + return nil + } + switch in := in.(type) { + case *BeginEndStatement: + return CloneRefOfBeginEndStatement(in) + case *DeclareCondition: + return CloneRefOfDeclareCondition(in) + case *DeclareHandler: + return CloneRefOfDeclareHandler(in) + case *DeclareVar: + return CloneRefOfDeclareVar(in) + case *IfStatement: + return CloneRefOfIfStatement(in) + case *Signal: + return CloneRefOfSignal(in) + case *SingleStatement: + return CloneRefOfSingleStatement(in) + default: + // this should never happen + return nil + } +} + // CloneConstraintInfo creates a deep clone of the input. func CloneConstraintInfo(in ConstraintInfo) ConstraintInfo { if in == nil { @@ -3827,10 +4092,14 @@ func CloneDDLStatement(in DDLStatement) DDLStatement { return CloneRefOfAlterTable(in) case *AlterView: return CloneRefOfAlterView(in) + case *CreateProcedure: + return CloneRefOfCreateProcedure(in) case *CreateTable: return CloneRefOfCreateTable(in) case *CreateView: return CloneRefOfCreateView(in) + case *DropProcedure: + return CloneRefOfDropProcedure(in) case *DropTable: return CloneRefOfDropTable(in) case *DropView: @@ -4107,6 +4376,30 @@ func CloneExpr(in Expr) Expr { } } +// CloneHandlerCondition creates a deep clone of the input. +func CloneHandlerCondition(in HandlerCondition) HandlerCondition { + if in == nil { + return nil + } + switch in := in.(type) { + case *HandlerConditionErrorCode: + return CloneRefOfHandlerConditionErrorCode(in) + case *HandlerConditionNamed: + return CloneRefOfHandlerConditionNamed(in) + case *HandlerConditionNotFound: + return CloneRefOfHandlerConditionNotFound(in) + case *HandlerConditionSQLException: + return CloneRefOfHandlerConditionSQLException(in) + case *HandlerConditionSQLState: + return CloneRefOfHandlerConditionSQLState(in) + case *HandlerConditionSQLWarning: + return CloneRefOfHandlerConditionSQLWarning(in) + default: + // this should never happen + return nil + } +} + // CloneInsertRows creates a deep clone of the input. func CloneInsertRows(in InsertRows) InsertRows { if in == nil { @@ -4225,6 +4518,8 @@ func CloneStatement(in Statement) Statement { return CloneRefOfCommit(in) case *CreateDatabase: return CloneRefOfCreateDatabase(in) + case *CreateProcedure: + return CloneRefOfCreateProcedure(in) case *CreateTable: return CloneRefOfCreateTable(in) case *CreateView: @@ -4235,6 +4530,8 @@ func CloneStatement(in Statement) Statement { return CloneRefOfDelete(in) case *DropDatabase: return CloneRefOfDropDatabase(in) + case *DropProcedure: + return CloneRefOfDropProcedure(in) case *DropTable: return CloneRefOfDropTable(in) case *DropView: @@ -4481,6 +4778,42 @@ func CloneSliceOfString(n []string) []string { return res } +// CloneSliceOfCompoundStatement creates a deep clone of the input. +func CloneSliceOfCompoundStatement(n []CompoundStatement) []CompoundStatement { + if n == nil { + return nil + } + res := make([]CompoundStatement, len(n)) + for i, x := range n { + res[i] = CloneCompoundStatement(x) + } + return res +} + +// CloneSliceOfRefOfProcParameter creates a deep clone of the input. +func CloneSliceOfRefOfProcParameter(n []*ProcParameter) []*ProcParameter { + if n == nil { + return nil + } + res := make([]*ProcParameter, len(n)) + for i, x := range n { + res[i] = CloneRefOfProcParameter(x) + } + return res +} + +// CloneSliceOfHandlerCondition creates a deep clone of the input. +func CloneSliceOfHandlerCondition(n []HandlerCondition) []HandlerCondition { + if n == nil { + return nil + } + res := make([]HandlerCondition, len(n)) + for i, x := range n { + res[i] = CloneHandlerCondition(x) + } + return res +} + // CloneSliceOfTableExpr creates a deep clone of the input. func CloneSliceOfTableExpr(n []TableExpr) []TableExpr { if n == nil { @@ -4523,6 +4856,18 @@ func CloneRefOfIdentifierCS(n *IdentifierCS) *IdentifierCS { return &out } +// CloneSliceOfRefOfElseIfBlock creates a deep clone of the input. +func CloneSliceOfRefOfElseIfBlock(n []*ElseIfBlock) []*ElseIfBlock { + if n == nil { + return nil + } + res := make([]*ElseIfBlock, len(n)) + for i, x := range n { + res[i] = CloneRefOfElseIfBlock(x) + } + return res +} + // CloneSliceOfRefOfIndexColumn creates a deep clone of the input. func CloneSliceOfRefOfIndexColumn(n []*IndexColumn) []*IndexColumn { if n == nil { @@ -4688,6 +5033,18 @@ func CloneSliceOfSelectExpr(n []SelectExpr) []SelectExpr { return res } +// CloneSliceOfRefOfSignalSet creates a deep clone of the input. +func CloneSliceOfRefOfSignalSet(n []*SignalSet) []*SignalSet { + if n == nil { + return nil + } + res := make([]*SignalSet, len(n)) + for i, x := range n { + res[i] = CloneRefOfSignalSet(x) + } + return res +} + // CloneRefOfTableName creates a deep clone of the input. func CloneRefOfTableName(n *TableName) *TableName { if n == nil { diff --git a/go/vt/sqlparser/ast_copy_on_rewrite.go b/go/vt/sqlparser/ast_copy_on_rewrite.go index 7293e154293..6430d84abf4 100644 --- a/go/vt/sqlparser/ast_copy_on_rewrite.go +++ b/go/vt/sqlparser/ast_copy_on_rewrite.go @@ -70,6 +70,8 @@ func (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, chan return c.copyOnRewriteRefOfAvg(n, parent) case *Begin: return c.copyOnRewriteRefOfBegin(n, parent) + case *BeginEndStatement: + return c.copyOnRewriteRefOfBeginEndStatement(n, parent) case *BetweenExpr: return c.copyOnRewriteRefOfBetweenExpr(n, parent) case *BinaryExpr: @@ -112,6 +114,8 @@ func (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, chan return c.copyOnRewriteRefOfCommonTableExpr(n, parent) case *ComparisonExpr: return c.copyOnRewriteRefOfComparisonExpr(n, parent) + case *CompoundStatements: + return c.copyOnRewriteRefOfCompoundStatements(n, parent) case *ConstraintDefinition: return c.copyOnRewriteRefOfConstraintDefinition(n, parent) case *ConvertExpr: @@ -126,6 +130,8 @@ func (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, chan return c.copyOnRewriteRefOfCountStar(n, parent) case *CreateDatabase: return c.copyOnRewriteRefOfCreateDatabase(n, parent) + case *CreateProcedure: + return c.copyOnRewriteRefOfCreateProcedure(n, parent) case *CreateTable: return c.copyOnRewriteRefOfCreateTable(n, parent) case *CreateView: @@ -134,6 +140,12 @@ func (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, chan return c.copyOnRewriteRefOfCurTimeFuncExpr(n, parent) case *DeallocateStmt: return c.copyOnRewriteRefOfDeallocateStmt(n, parent) + case *DeclareCondition: + return c.copyOnRewriteRefOfDeclareCondition(n, parent) + case *DeclareHandler: + return c.copyOnRewriteRefOfDeclareHandler(n, parent) + case *DeclareVar: + return c.copyOnRewriteRefOfDeclareVar(n, parent) case *Default: return c.copyOnRewriteRefOfDefault(n, parent) case *Definer: @@ -148,10 +160,14 @@ func (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, chan return c.copyOnRewriteRefOfDropDatabase(n, parent) case *DropKey: return c.copyOnRewriteRefOfDropKey(n, parent) + case *DropProcedure: + return c.copyOnRewriteRefOfDropProcedure(n, parent) case *DropTable: return c.copyOnRewriteRefOfDropTable(n, parent) case *DropView: return c.copyOnRewriteRefOfDropView(n, parent) + case *ElseIfBlock: + return c.copyOnRewriteRefOfElseIfBlock(n, parent) case *ExecuteStmt: return c.copyOnRewriteRefOfExecuteStmt(n, parent) case *ExistsExpr: @@ -208,10 +224,24 @@ func (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, chan return c.copyOnRewriteRefOfGroupBy(n, parent) case *GroupConcatExpr: return c.copyOnRewriteRefOfGroupConcatExpr(n, parent) + case *HandlerConditionErrorCode: + return c.copyOnRewriteRefOfHandlerConditionErrorCode(n, parent) + case *HandlerConditionNamed: + return c.copyOnRewriteRefOfHandlerConditionNamed(n, parent) + case *HandlerConditionNotFound: + return c.copyOnRewriteRefOfHandlerConditionNotFound(n, parent) + case *HandlerConditionSQLException: + return c.copyOnRewriteRefOfHandlerConditionSQLException(n, parent) + case *HandlerConditionSQLState: + return c.copyOnRewriteRefOfHandlerConditionSQLState(n, parent) + case *HandlerConditionSQLWarning: + return c.copyOnRewriteRefOfHandlerConditionSQLWarning(n, parent) case IdentifierCI: return c.copyOnRewriteIdentifierCI(n, parent) case IdentifierCS: return c.copyOnRewriteIdentifierCS(n, parent) + case *IfStatement: + return c.copyOnRewriteRefOfIfStatement(n, parent) case *IndexDefinition: return c.copyOnRewriteRefOfIndexDefinition(n, parent) case *IndexHint: @@ -396,6 +426,8 @@ func (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, chan return c.copyOnRewriteRefOfPolygonPropertyFuncExpr(n, parent) case *PrepareStmt: return c.copyOnRewriteRefOfPrepareStmt(n, parent) + case *ProcParameter: + return c.copyOnRewriteRefOfProcParameter(n, parent) case *PurgeBinaryLogs: return c.copyOnRewriteRefOfPurgeBinaryLogs(n, parent) case ReferenceAction: @@ -462,6 +494,12 @@ func (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, chan return c.copyOnRewriteRefOfShowThrottlerStatus(n, parent) case *ShowTransactionStatus: return c.copyOnRewriteRefOfShowTransactionStatus(n, parent) + case *Signal: + return c.copyOnRewriteRefOfSignal(n, parent) + case *SignalSet: + return c.copyOnRewriteRefOfSignalSet(n, parent) + case *SingleStatement: + return c.copyOnRewriteRefOfSingleStatement(n, parent) case *StarExpr: return c.copyOnRewriteRefOfStarExpr(n, parent) case *Std: @@ -1117,6 +1155,28 @@ func (c *cow) copyOnRewriteRefOfBegin(n *Begin, parent SQLNode) (out SQLNode, ch } return } +func (c *cow) copyOnRewriteRefOfBeginEndStatement(n *BeginEndStatement, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + _Statements, changedStatements := c.copyOnRewriteRefOfCompoundStatements(n.Statements, n) + if changedStatements { + res := *n + res.Statements, _ = _Statements.(*CompoundStatements) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} func (c *cow) copyOnRewriteRefOfBetweenExpr(n *BetweenExpr, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -1588,6 +1648,36 @@ func (c *cow) copyOnRewriteRefOfComparisonExpr(n *ComparisonExpr, parent SQLNode } return } +func (c *cow) copyOnRewriteRefOfCompoundStatements(n *CompoundStatements, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + var changedStatements bool + _Statements := make([]CompoundStatement, len(n.Statements)) + for x, el := range n.Statements { + this, changed := c.copyOnRewriteCompoundStatement(el, n) + _Statements[x] = this.(CompoundStatement) + if changed { + changedStatements = true + } + } + if changedStatements { + res := *n + res.Statements = _Statements + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} func (c *cow) copyOnRewriteRefOfConstraintDefinition(n *ConstraintDefinition, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -1748,6 +1838,44 @@ func (c *cow) copyOnRewriteRefOfCreateDatabase(n *CreateDatabase, parent SQLNode } return } +func (c *cow) copyOnRewriteRefOfCreateProcedure(n *CreateProcedure, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + _Name, changedName := c.copyOnRewriteTableName(n.Name, n) + _Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n) + _Definer, changedDefiner := c.copyOnRewriteRefOfDefiner(n.Definer, n) + var changedParams bool + _Params := make([]*ProcParameter, len(n.Params)) + for x, el := range n.Params { + this, changed := c.copyOnRewriteRefOfProcParameter(el, n) + _Params[x] = this.(*ProcParameter) + if changed { + changedParams = true + } + } + _Body, changedBody := c.copyOnRewriteCompoundStatement(n.Body, n) + if changedName || changedComments || changedDefiner || changedParams || changedBody { + res := *n + res.Name, _ = _Name.(TableName) + res.Comments, _ = _Comments.(*ParsedComments) + res.Definer, _ = _Definer.(*Definer) + res.Params = _Params + res.Body, _ = _Body.(CompoundStatement) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} func (c *cow) copyOnRewriteRefOfCreateTable(n *CreateTable, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -1852,6 +1980,94 @@ func (c *cow) copyOnRewriteRefOfDeallocateStmt(n *DeallocateStmt, parent SQLNode } return } +func (c *cow) copyOnRewriteRefOfDeclareCondition(n *DeclareCondition, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + _Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n) + _Condition, changedCondition := c.copyOnRewriteHandlerCondition(n.Condition, n) + if changedName || changedCondition { + res := *n + res.Name, _ = _Name.(IdentifierCI) + res.Condition, _ = _Condition.(HandlerCondition) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} +func (c *cow) copyOnRewriteRefOfDeclareHandler(n *DeclareHandler, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + var changedConditions bool + _Conditions := make([]HandlerCondition, len(n.Conditions)) + for x, el := range n.Conditions { + this, changed := c.copyOnRewriteHandlerCondition(el, n) + _Conditions[x] = this.(HandlerCondition) + if changed { + changedConditions = true + } + } + _Statement, changedStatement := c.copyOnRewriteCompoundStatement(n.Statement, n) + if changedConditions || changedStatement { + res := *n + res.Conditions = _Conditions + res.Statement, _ = _Statement.(CompoundStatement) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} +func (c *cow) copyOnRewriteRefOfDeclareVar(n *DeclareVar, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + var changedVarNames bool + _VarNames := make([]IdentifierCI, len(n.VarNames)) + for x, el := range n.VarNames { + this, changed := c.copyOnRewriteIdentifierCI(el, n) + _VarNames[x] = this.(IdentifierCI) + if changed { + changedVarNames = true + } + } + _Type, changedType := c.copyOnRewriteRefOfColumnType(n.Type, n) + if changedVarNames || changedType { + res := *n + res.VarNames = _VarNames + res.Type, _ = _Type.(*ColumnType) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} func (c *cow) copyOnRewriteRefOfDefault(n *Default, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -2010,6 +2226,30 @@ func (c *cow) copyOnRewriteRefOfDropKey(n *DropKey, parent SQLNode) (out SQLNode } return } +func (c *cow) copyOnRewriteRefOfDropProcedure(n *DropProcedure, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + _Comments, changedComments := c.copyOnRewriteRefOfParsedComments(n.Comments, n) + _Name, changedName := c.copyOnRewriteTableName(n.Name, n) + if changedComments || changedName { + res := *n + res.Comments, _ = _Comments.(*ParsedComments) + res.Name, _ = _Name.(TableName) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} func (c *cow) copyOnRewriteRefOfDropTable(n *DropTable, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -2058,6 +2298,30 @@ func (c *cow) copyOnRewriteRefOfDropView(n *DropView, parent SQLNode) (out SQLNo } return } +func (c *cow) copyOnRewriteRefOfElseIfBlock(n *ElseIfBlock, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + _SearchCondition, changedSearchCondition := c.copyOnRewriteExpr(n.SearchCondition, n) + _ThenStatements, changedThenStatements := c.copyOnRewriteRefOfCompoundStatements(n.ThenStatements, n) + if changedSearchCondition || changedThenStatements { + res := *n + res.SearchCondition, _ = _SearchCondition.(Expr) + res.ThenStatements, _ = _ThenStatements.(*CompoundStatements) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} func (c *cow) copyOnRewriteRefOfExecuteStmt(n *ExecuteStmt, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -2754,6 +3018,98 @@ func (c *cow) copyOnRewriteRefOfGroupConcatExpr(n *GroupConcatExpr, parent SQLNo } return } +func (c *cow) copyOnRewriteRefOfHandlerConditionErrorCode(n *HandlerConditionErrorCode, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} +func (c *cow) copyOnRewriteRefOfHandlerConditionNamed(n *HandlerConditionNamed, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + _Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n) + if changedName { + res := *n + res.Name, _ = _Name.(IdentifierCI) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} +func (c *cow) copyOnRewriteRefOfHandlerConditionNotFound(n *HandlerConditionNotFound, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} +func (c *cow) copyOnRewriteRefOfHandlerConditionSQLException(n *HandlerConditionSQLException, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} +func (c *cow) copyOnRewriteRefOfHandlerConditionSQLState(n *HandlerConditionSQLState, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + _SQLStateValue, changedSQLStateValue := c.copyOnRewriteRefOfLiteral(n.SQLStateValue, n) + if changedSQLStateValue { + res := *n + res.SQLStateValue, _ = _SQLStateValue.(*Literal) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} +func (c *cow) copyOnRewriteRefOfHandlerConditionSQLWarning(n *HandlerConditionSQLWarning, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} func (c *cow) copyOnRewriteIdentifierCI(n IdentifierCI, parent SQLNode) (out SQLNode, changed bool) { out = n if c.pre == nil || c.pre(n, parent) { @@ -2772,6 +3128,42 @@ func (c *cow) copyOnRewriteIdentifierCS(n IdentifierCS, parent SQLNode) (out SQL } return } +func (c *cow) copyOnRewriteRefOfIfStatement(n *IfStatement, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + _SearchCondition, changedSearchCondition := c.copyOnRewriteExpr(n.SearchCondition, n) + _ThenStatements, changedThenStatements := c.copyOnRewriteRefOfCompoundStatements(n.ThenStatements, n) + var changedElseIfBlocks bool + _ElseIfBlocks := make([]*ElseIfBlock, len(n.ElseIfBlocks)) + for x, el := range n.ElseIfBlocks { + this, changed := c.copyOnRewriteRefOfElseIfBlock(el, n) + _ElseIfBlocks[x] = this.(*ElseIfBlock) + if changed { + changedElseIfBlocks = true + } + } + _ElseStatements, changedElseStatements := c.copyOnRewriteRefOfCompoundStatements(n.ElseStatements, n) + if changedSearchCondition || changedThenStatements || changedElseIfBlocks || changedElseStatements { + res := *n + res.SearchCondition, _ = _SearchCondition.(Expr) + res.ThenStatements, _ = _ThenStatements.(*CompoundStatements) + res.ElseIfBlocks = _ElseIfBlocks + res.ElseStatements, _ = _ElseStatements.(*CompoundStatements) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} func (c *cow) copyOnRewriteRefOfIndexDefinition(n *IndexDefinition, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -4959,6 +5351,30 @@ func (c *cow) copyOnRewriteRefOfPrepareStmt(n *PrepareStmt, parent SQLNode) (out } return } +func (c *cow) copyOnRewriteRefOfProcParameter(n *ProcParameter, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + _Name, changedName := c.copyOnRewriteIdentifierCI(n.Name, n) + _Type, changedType := c.copyOnRewriteRefOfColumnType(n.Type, n) + if changedName || changedType { + res := *n + res.Name, _ = _Name.(IdentifierCI) + res.Type, _ = _Type.(*ColumnType) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} func (c *cow) copyOnRewriteRefOfPurgeBinaryLogs(n *PurgeBinaryLogs, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -5432,6 +5848,24 @@ func (c *cow) copyOnRewriteRefOfSelectInto(n *SelectInto, parent SQLNode) (out S } out = n if c.pre == nil || c.pre(n, parent) { + var changedVarList bool + _VarList := make([]*Variable, len(n.VarList)) + for x, el := range n.VarList { + this, changed := c.copyOnRewriteRefOfVariable(el, n) + _VarList[x] = this.(*Variable) + if changed { + changedVarList = true + } + } + if changedVarList { + res := *n + res.VarList = _VarList + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } } if c.post != nil { out, changed = c.postVisit(out, parent, changed) @@ -5671,6 +6105,82 @@ func (c *cow) copyOnRewriteRefOfShowTransactionStatus(n *ShowTransactionStatus, } return } +func (c *cow) copyOnRewriteRefOfSignal(n *Signal, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + _Condition, changedCondition := c.copyOnRewriteHandlerCondition(n.Condition, n) + var changedSetValues bool + _SetValues := make([]*SignalSet, len(n.SetValues)) + for x, el := range n.SetValues { + this, changed := c.copyOnRewriteRefOfSignalSet(el, n) + _SetValues[x] = this.(*SignalSet) + if changed { + changedSetValues = true + } + } + if changedCondition || changedSetValues { + res := *n + res.Condition, _ = _Condition.(HandlerCondition) + res.SetValues = _SetValues + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} +func (c *cow) copyOnRewriteRefOfSignalSet(n *SignalSet, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + _Value, changedValue := c.copyOnRewriteExpr(n.Value, n) + if changedValue { + res := *n + res.Value, _ = _Value.(Expr) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} +func (c *cow) copyOnRewriteRefOfSingleStatement(n *SingleStatement, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + _Statement, changedStatement := c.copyOnRewriteStatement(n.Statement, n) + if changedStatement { + res := *n + res.Statement, _ = _Statement.(Statement) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} func (c *cow) copyOnRewriteRefOfStarExpr(n *StarExpr, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -7219,6 +7729,32 @@ func (c *cow) copyOnRewriteColTuple(n ColTuple, parent SQLNode) (out SQLNode, ch return nil, false } } +func (c *cow) copyOnRewriteCompoundStatement(n CompoundStatement, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + switch n := n.(type) { + case *BeginEndStatement: + return c.copyOnRewriteRefOfBeginEndStatement(n, parent) + case *DeclareCondition: + return c.copyOnRewriteRefOfDeclareCondition(n, parent) + case *DeclareHandler: + return c.copyOnRewriteRefOfDeclareHandler(n, parent) + case *DeclareVar: + return c.copyOnRewriteRefOfDeclareVar(n, parent) + case *IfStatement: + return c.copyOnRewriteRefOfIfStatement(n, parent) + case *Signal: + return c.copyOnRewriteRefOfSignal(n, parent) + case *SingleStatement: + return c.copyOnRewriteRefOfSingleStatement(n, parent) + case Visitable: + return c.copyOnRewriteVisitable(n, parent) + default: + // this should never happen + return nil, false + } +} func (c *cow) copyOnRewriteConstraintInfo(n ConstraintInfo, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -7262,10 +7798,14 @@ func (c *cow) copyOnRewriteDDLStatement(n DDLStatement, parent SQLNode) (out SQL return c.copyOnRewriteRefOfAlterTable(n, parent) case *AlterView: return c.copyOnRewriteRefOfAlterView(n, parent) + case *CreateProcedure: + return c.copyOnRewriteRefOfCreateProcedure(n, parent) case *CreateTable: return c.copyOnRewriteRefOfCreateTable(n, parent) case *CreateView: return c.copyOnRewriteRefOfCreateView(n, parent) + case *DropProcedure: + return c.copyOnRewriteRefOfDropProcedure(n, parent) case *DropTable: return c.copyOnRewriteRefOfDropTable(n, parent) case *DropView: @@ -7543,6 +8083,30 @@ func (c *cow) copyOnRewriteExpr(n Expr, parent SQLNode) (out SQLNode, changed bo return nil, false } } +func (c *cow) copyOnRewriteHandlerCondition(n HandlerCondition, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + switch n := n.(type) { + case *HandlerConditionErrorCode: + return c.copyOnRewriteRefOfHandlerConditionErrorCode(n, parent) + case *HandlerConditionNamed: + return c.copyOnRewriteRefOfHandlerConditionNamed(n, parent) + case *HandlerConditionNotFound: + return c.copyOnRewriteRefOfHandlerConditionNotFound(n, parent) + case *HandlerConditionSQLException: + return c.copyOnRewriteRefOfHandlerConditionSQLException(n, parent) + case *HandlerConditionSQLState: + return c.copyOnRewriteRefOfHandlerConditionSQLState(n, parent) + case *HandlerConditionSQLWarning: + return c.copyOnRewriteRefOfHandlerConditionSQLWarning(n, parent) + case Visitable: + return c.copyOnRewriteVisitable(n, parent) + default: + // this should never happen + return nil, false + } +} func (c *cow) copyOnRewriteInsertRows(n InsertRows, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -7660,6 +8224,8 @@ func (c *cow) copyOnRewriteStatement(n Statement, parent SQLNode) (out SQLNode, return c.copyOnRewriteRefOfCommit(n, parent) case *CreateDatabase: return c.copyOnRewriteRefOfCreateDatabase(n, parent) + case *CreateProcedure: + return c.copyOnRewriteRefOfCreateProcedure(n, parent) case *CreateTable: return c.copyOnRewriteRefOfCreateTable(n, parent) case *CreateView: @@ -7670,6 +8236,8 @@ func (c *cow) copyOnRewriteStatement(n Statement, parent SQLNode) (out SQLNode, return c.copyOnRewriteRefOfDelete(n, parent) case *DropDatabase: return c.copyOnRewriteRefOfDropDatabase(n, parent) + case *DropProcedure: + return c.copyOnRewriteRefOfDropProcedure(n, parent) case *DropTable: return c.copyOnRewriteRefOfDropTable(n, parent) case *DropView: diff --git a/go/vt/sqlparser/ast_equals.go b/go/vt/sqlparser/ast_equals.go index 1e5fbb1f6d3..0af55f326b2 100644 --- a/go/vt/sqlparser/ast_equals.go +++ b/go/vt/sqlparser/ast_equals.go @@ -170,6 +170,12 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool { return false } return cmp.RefOfBegin(a, b) + case *BeginEndStatement: + b, ok := inB.(*BeginEndStatement) + if !ok { + return false + } + return cmp.RefOfBeginEndStatement(a, b) case *BetweenExpr: b, ok := inB.(*BetweenExpr) if !ok { @@ -296,6 +302,12 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool { return false } return cmp.RefOfComparisonExpr(a, b) + case *CompoundStatements: + b, ok := inB.(*CompoundStatements) + if !ok { + return false + } + return cmp.RefOfCompoundStatements(a, b) case *ConstraintDefinition: b, ok := inB.(*ConstraintDefinition) if !ok { @@ -338,6 +350,12 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool { return false } return cmp.RefOfCreateDatabase(a, b) + case *CreateProcedure: + b, ok := inB.(*CreateProcedure) + if !ok { + return false + } + return cmp.RefOfCreateProcedure(a, b) case *CreateTable: b, ok := inB.(*CreateTable) if !ok { @@ -362,6 +380,24 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool { return false } return cmp.RefOfDeallocateStmt(a, b) + case *DeclareCondition: + b, ok := inB.(*DeclareCondition) + if !ok { + return false + } + return cmp.RefOfDeclareCondition(a, b) + case *DeclareHandler: + b, ok := inB.(*DeclareHandler) + if !ok { + return false + } + return cmp.RefOfDeclareHandler(a, b) + case *DeclareVar: + b, ok := inB.(*DeclareVar) + if !ok { + return false + } + return cmp.RefOfDeclareVar(a, b) case *Default: b, ok := inB.(*Default) if !ok { @@ -404,6 +440,12 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool { return false } return cmp.RefOfDropKey(a, b) + case *DropProcedure: + b, ok := inB.(*DropProcedure) + if !ok { + return false + } + return cmp.RefOfDropProcedure(a, b) case *DropTable: b, ok := inB.(*DropTable) if !ok { @@ -416,6 +458,12 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool { return false } return cmp.RefOfDropView(a, b) + case *ElseIfBlock: + b, ok := inB.(*ElseIfBlock) + if !ok { + return false + } + return cmp.RefOfElseIfBlock(a, b) case *ExecuteStmt: b, ok := inB.(*ExecuteStmt) if !ok { @@ -584,6 +632,42 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool { return false } return cmp.RefOfGroupConcatExpr(a, b) + case *HandlerConditionErrorCode: + b, ok := inB.(*HandlerConditionErrorCode) + if !ok { + return false + } + return cmp.RefOfHandlerConditionErrorCode(a, b) + case *HandlerConditionNamed: + b, ok := inB.(*HandlerConditionNamed) + if !ok { + return false + } + return cmp.RefOfHandlerConditionNamed(a, b) + case *HandlerConditionNotFound: + b, ok := inB.(*HandlerConditionNotFound) + if !ok { + return false + } + return cmp.RefOfHandlerConditionNotFound(a, b) + case *HandlerConditionSQLException: + b, ok := inB.(*HandlerConditionSQLException) + if !ok { + return false + } + return cmp.RefOfHandlerConditionSQLException(a, b) + case *HandlerConditionSQLState: + b, ok := inB.(*HandlerConditionSQLState) + if !ok { + return false + } + return cmp.RefOfHandlerConditionSQLState(a, b) + case *HandlerConditionSQLWarning: + b, ok := inB.(*HandlerConditionSQLWarning) + if !ok { + return false + } + return cmp.RefOfHandlerConditionSQLWarning(a, b) case IdentifierCI: b, ok := inB.(IdentifierCI) if !ok { @@ -596,6 +680,12 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool { return false } return cmp.IdentifierCS(a, b) + case *IfStatement: + b, ok := inB.(*IfStatement) + if !ok { + return false + } + return cmp.RefOfIfStatement(a, b) case *IndexDefinition: b, ok := inB.(*IndexDefinition) if !ok { @@ -1148,6 +1238,12 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool { return false } return cmp.RefOfPrepareStmt(a, b) + case *ProcParameter: + b, ok := inB.(*ProcParameter) + if !ok { + return false + } + return cmp.RefOfProcParameter(a, b) case *PurgeBinaryLogs: b, ok := inB.(*PurgeBinaryLogs) if !ok { @@ -1346,6 +1442,24 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool { return false } return cmp.RefOfShowTransactionStatus(a, b) + case *Signal: + b, ok := inB.(*Signal) + if !ok { + return false + } + return cmp.RefOfSignal(a, b) + case *SignalSet: + b, ok := inB.(*SignalSet) + if !ok { + return false + } + return cmp.RefOfSignalSet(a, b) + case *SingleStatement: + b, ok := inB.(*SingleStatement) + if !ok { + return false + } + return cmp.RefOfSingleStatement(a, b) case *StarExpr: b, ok := inB.(*StarExpr) if !ok { @@ -1960,6 +2074,17 @@ func (cmp *Comparator) RefOfBegin(a, b *Begin) bool { return cmp.SliceOfTxAccessMode(a.TxAccessModes, b.TxAccessModes) } +// RefOfBeginEndStatement does deep equals between the two objects. +func (cmp *Comparator) RefOfBeginEndStatement(a, b *BeginEndStatement) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return cmp.RefOfCompoundStatements(a.Statements, b.Statements) +} + // RefOfBetweenExpr does deep equals between the two objects. func (cmp *Comparator) RefOfBetweenExpr(a, b *BetweenExpr) bool { if a == b { @@ -2219,6 +2344,17 @@ func (cmp *Comparator) RefOfComparisonExpr(a, b *ComparisonExpr) bool { cmp.Expr(a.Escape, b.Escape) } +// RefOfCompoundStatements does deep equals between the two objects. +func (cmp *Comparator) RefOfCompoundStatements(a, b *CompoundStatements) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return cmp.SliceOfCompoundStatement(a.Statements, b.Statements) +} + // RefOfConstraintDefinition does deep equals between the two objects. func (cmp *Comparator) RefOfConstraintDefinition(a, b *ConstraintDefinition) bool { if a == b { @@ -2308,6 +2444,22 @@ func (cmp *Comparator) RefOfCreateDatabase(a, b *CreateDatabase) bool { cmp.SliceOfDatabaseOption(a.CreateOptions, b.CreateOptions) } +// RefOfCreateProcedure does deep equals between the two objects. +func (cmp *Comparator) RefOfCreateProcedure(a, b *CreateProcedure) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return a.IfNotExists == b.IfNotExists && + cmp.TableName(a.Name, b.Name) && + cmp.RefOfParsedComments(a.Comments, b.Comments) && + cmp.RefOfDefiner(a.Definer, b.Definer) && + cmp.SliceOfRefOfProcParameter(a.Params, b.Params) && + cmp.CompoundStatement(a.Body, b.Body) +} + // RefOfCreateTable does deep equals between the two objects. func (cmp *Comparator) RefOfCreateTable(a, b *CreateTable) bool { if a == b { @@ -2368,6 +2520,43 @@ func (cmp *Comparator) RefOfDeallocateStmt(a, b *DeallocateStmt) bool { cmp.IdentifierCI(a.Name, b.Name) } +// RefOfDeclareCondition does deep equals between the two objects. +func (cmp *Comparator) RefOfDeclareCondition(a, b *DeclareCondition) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return cmp.IdentifierCI(a.Name, b.Name) && + cmp.HandlerCondition(a.Condition, b.Condition) +} + +// RefOfDeclareHandler does deep equals between the two objects. +func (cmp *Comparator) RefOfDeclareHandler(a, b *DeclareHandler) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return a.Action == b.Action && + cmp.SliceOfHandlerCondition(a.Conditions, b.Conditions) && + cmp.CompoundStatement(a.Statement, b.Statement) +} + +// RefOfDeclareVar does deep equals between the two objects. +func (cmp *Comparator) RefOfDeclareVar(a, b *DeclareVar) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return cmp.SliceOfIdentifierCI(a.VarNames, b.VarNames) && + cmp.RefOfColumnType(a.Type, b.Type) +} + // RefOfDefault does deep equals between the two objects. func (cmp *Comparator) RefOfDefault(a, b *Default) bool { if a == b { @@ -2458,6 +2647,19 @@ func (cmp *Comparator) RefOfDropKey(a, b *DropKey) bool { cmp.IdentifierCI(a.Name, b.Name) } +// RefOfDropProcedure does deep equals between the two objects. +func (cmp *Comparator) RefOfDropProcedure(a, b *DropProcedure) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return a.IfExists == b.IfExists && + cmp.RefOfParsedComments(a.Comments, b.Comments) && + cmp.TableName(a.Name, b.Name) +} + // RefOfDropTable does deep equals between the two objects. func (cmp *Comparator) RefOfDropTable(a, b *DropTable) bool { if a == b { @@ -2485,6 +2687,18 @@ func (cmp *Comparator) RefOfDropView(a, b *DropView) bool { cmp.RefOfParsedComments(a.Comments, b.Comments) } +// RefOfElseIfBlock does deep equals between the two objects. +func (cmp *Comparator) RefOfElseIfBlock(a, b *ElseIfBlock) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return cmp.Expr(a.SearchCondition, b.SearchCondition) && + cmp.RefOfCompoundStatements(a.ThenStatements, b.ThenStatements) +} + // RefOfExecuteStmt does deep equals between the two objects. func (cmp *Comparator) RefOfExecuteStmt(a, b *ExecuteStmt) bool { if a == b { @@ -2844,6 +3058,72 @@ func (cmp *Comparator) RefOfGroupConcatExpr(a, b *GroupConcatExpr) bool { cmp.RefOfLimit(a.Limit, b.Limit) } +// RefOfHandlerConditionErrorCode does deep equals between the two objects. +func (cmp *Comparator) RefOfHandlerConditionErrorCode(a, b *HandlerConditionErrorCode) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return a.ErrorCode == b.ErrorCode +} + +// RefOfHandlerConditionNamed does deep equals between the two objects. +func (cmp *Comparator) RefOfHandlerConditionNamed(a, b *HandlerConditionNamed) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return cmp.IdentifierCI(a.Name, b.Name) +} + +// RefOfHandlerConditionNotFound does deep equals between the two objects. +func (cmp *Comparator) RefOfHandlerConditionNotFound(a, b *HandlerConditionNotFound) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return true +} + +// RefOfHandlerConditionSQLException does deep equals between the two objects. +func (cmp *Comparator) RefOfHandlerConditionSQLException(a, b *HandlerConditionSQLException) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return true +} + +// RefOfHandlerConditionSQLState does deep equals between the two objects. +func (cmp *Comparator) RefOfHandlerConditionSQLState(a, b *HandlerConditionSQLState) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return cmp.RefOfLiteral(a.SQLStateValue, b.SQLStateValue) +} + +// RefOfHandlerConditionSQLWarning does deep equals between the two objects. +func (cmp *Comparator) RefOfHandlerConditionSQLWarning(a, b *HandlerConditionSQLWarning) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return true +} + // IdentifierCI does deep equals between the two objects. func (cmp *Comparator) IdentifierCI(a, b IdentifierCI) bool { return a.val == b.val && @@ -2855,6 +3135,20 @@ func (cmp *Comparator) IdentifierCS(a, b IdentifierCS) bool { return a.v == b.v } +// RefOfIfStatement does deep equals between the two objects. +func (cmp *Comparator) RefOfIfStatement(a, b *IfStatement) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return cmp.Expr(a.SearchCondition, b.SearchCondition) && + cmp.RefOfCompoundStatements(a.ThenStatements, b.ThenStatements) && + cmp.SliceOfRefOfElseIfBlock(a.ElseIfBlocks, b.ElseIfBlocks) && + cmp.RefOfCompoundStatements(a.ElseStatements, b.ElseStatements) +} + // RefOfIndexDefinition does deep equals between the two objects. func (cmp *Comparator) RefOfIndexDefinition(a, b *IndexDefinition) bool { if a == b { @@ -3981,6 +4275,19 @@ func (cmp *Comparator) RefOfPrepareStmt(a, b *PrepareStmt) bool { cmp.RefOfParsedComments(a.Comments, b.Comments) } +// RefOfProcParameter does deep equals between the two objects. +func (cmp *Comparator) RefOfProcParameter(a, b *ProcParameter) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return a.Mode == b.Mode && + cmp.IdentifierCI(a.Name, b.Name) && + cmp.RefOfColumnType(a.Type, b.Type) +} + // RefOfPurgeBinaryLogs does deep equals between the two objects. func (cmp *Comparator) RefOfPurgeBinaryLogs(a, b *PurgeBinaryLogs) bool { if a == b { @@ -4242,6 +4549,7 @@ func (cmp *Comparator) RefOfSelectInto(a, b *SelectInto) bool { a.Manifest == b.Manifest && a.Overwrite == b.Overwrite && a.Type == b.Type && + cmp.SliceOfRefOfVariable(a.VarList, b.VarList) && cmp.ColumnCharset(a.Charset, b.Charset) } @@ -4389,6 +4697,41 @@ func (cmp *Comparator) RefOfShowTransactionStatus(a, b *ShowTransactionStatus) b a.TransactionID == b.TransactionID } +// RefOfSignal does deep equals between the two objects. +func (cmp *Comparator) RefOfSignal(a, b *Signal) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return cmp.HandlerCondition(a.Condition, b.Condition) && + cmp.SliceOfRefOfSignalSet(a.SetValues, b.SetValues) +} + +// RefOfSignalSet does deep equals between the two objects. +func (cmp *Comparator) RefOfSignalSet(a, b *SignalSet) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return a.ConditionName == b.ConditionName && + cmp.Expr(a.Value, b.Value) +} + +// RefOfSingleStatement does deep equals between the two objects. +func (cmp *Comparator) RefOfSingleStatement(a, b *SingleStatement) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return cmp.Statement(a.Statement, b.Statement) +} + // RefOfStarExpr does deep equals between the two objects. func (cmp *Comparator) RefOfStarExpr(a, b *StarExpr) bool { if a == b { @@ -5829,6 +6172,63 @@ func (cmp *Comparator) ColTuple(inA, inB ColTuple) bool { } } +// CompoundStatement does deep equals between the two objects. +func (cmp *Comparator) CompoundStatement(inA, inB CompoundStatement) bool { + if inA == nil && inB == nil { + return true + } + if inA == nil || inB == nil { + return false + } + switch a := inA.(type) { + case *BeginEndStatement: + b, ok := inB.(*BeginEndStatement) + if !ok { + return false + } + return cmp.RefOfBeginEndStatement(a, b) + case *DeclareCondition: + b, ok := inB.(*DeclareCondition) + if !ok { + return false + } + return cmp.RefOfDeclareCondition(a, b) + case *DeclareHandler: + b, ok := inB.(*DeclareHandler) + if !ok { + return false + } + return cmp.RefOfDeclareHandler(a, b) + case *DeclareVar: + b, ok := inB.(*DeclareVar) + if !ok { + return false + } + return cmp.RefOfDeclareVar(a, b) + case *IfStatement: + b, ok := inB.(*IfStatement) + if !ok { + return false + } + return cmp.RefOfIfStatement(a, b) + case *Signal: + b, ok := inB.(*Signal) + if !ok { + return false + } + return cmp.RefOfSignal(a, b) + case *SingleStatement: + b, ok := inB.(*SingleStatement) + if !ok { + return false + } + return cmp.RefOfSingleStatement(a, b) + default: + // this should never happen + return false + } +} + // ConstraintInfo does deep equals between the two objects. func (cmp *Comparator) ConstraintInfo(inA, inB ConstraintInfo) bool { if inA == nil && inB == nil { @@ -5910,6 +6310,12 @@ func (cmp *Comparator) DDLStatement(inA, inB DDLStatement) bool { return false } return cmp.RefOfAlterView(a, b) + case *CreateProcedure: + b, ok := inB.(*CreateProcedure) + if !ok { + return false + } + return cmp.RefOfCreateProcedure(a, b) case *CreateTable: b, ok := inB.(*CreateTable) if !ok { @@ -5922,6 +6328,12 @@ func (cmp *Comparator) DDLStatement(inA, inB DDLStatement) bool { return false } return cmp.RefOfCreateView(a, b) + case *DropProcedure: + b, ok := inB.(*DropProcedure) + if !ok { + return false + } + return cmp.RefOfDropProcedure(a, b) case *DropTable: b, ok := inB.(*DropTable) if !ok { @@ -6696,6 +7108,57 @@ func (cmp *Comparator) Expr(inA, inB Expr) bool { } } +// HandlerCondition does deep equals between the two objects. +func (cmp *Comparator) HandlerCondition(inA, inB HandlerCondition) bool { + if inA == nil && inB == nil { + return true + } + if inA == nil || inB == nil { + return false + } + switch a := inA.(type) { + case *HandlerConditionErrorCode: + b, ok := inB.(*HandlerConditionErrorCode) + if !ok { + return false + } + return cmp.RefOfHandlerConditionErrorCode(a, b) + case *HandlerConditionNamed: + b, ok := inB.(*HandlerConditionNamed) + if !ok { + return false + } + return cmp.RefOfHandlerConditionNamed(a, b) + case *HandlerConditionNotFound: + b, ok := inB.(*HandlerConditionNotFound) + if !ok { + return false + } + return cmp.RefOfHandlerConditionNotFound(a, b) + case *HandlerConditionSQLException: + b, ok := inB.(*HandlerConditionSQLException) + if !ok { + return false + } + return cmp.RefOfHandlerConditionSQLException(a, b) + case *HandlerConditionSQLState: + b, ok := inB.(*HandlerConditionSQLState) + if !ok { + return false + } + return cmp.RefOfHandlerConditionSQLState(a, b) + case *HandlerConditionSQLWarning: + b, ok := inB.(*HandlerConditionSQLWarning) + if !ok { + return false + } + return cmp.RefOfHandlerConditionSQLWarning(a, b) + default: + // this should never happen + return false + } +} + // InsertRows does deep equals between the two objects. func (cmp *Comparator) InsertRows(inA, inB InsertRows) bool { if inA == nil && inB == nil { @@ -6936,6 +7399,12 @@ func (cmp *Comparator) Statement(inA, inB Statement) bool { return false } return cmp.RefOfCreateDatabase(a, b) + case *CreateProcedure: + b, ok := inB.(*CreateProcedure) + if !ok { + return false + } + return cmp.RefOfCreateProcedure(a, b) case *CreateTable: b, ok := inB.(*CreateTable) if !ok { @@ -6966,6 +7435,12 @@ func (cmp *Comparator) Statement(inA, inB Statement) bool { return false } return cmp.RefOfDropDatabase(a, b) + case *DropProcedure: + b, ok := inB.(*DropProcedure) + if !ok { + return false + } + return cmp.RefOfDropProcedure(a, b) case *DropTable: b, ok := inB.(*DropTable) if !ok { @@ -7406,6 +7881,45 @@ func (cmp *Comparator) SliceOfString(a, b []string) bool { return true } +// SliceOfCompoundStatement does deep equals between the two objects. +func (cmp *Comparator) SliceOfCompoundStatement(a, b []CompoundStatement) bool { + if len(a) != len(b) { + return false + } + for i := 0; i < len(a); i++ { + if !cmp.CompoundStatement(a[i], b[i]) { + return false + } + } + return true +} + +// SliceOfRefOfProcParameter does deep equals between the two objects. +func (cmp *Comparator) SliceOfRefOfProcParameter(a, b []*ProcParameter) bool { + if len(a) != len(b) { + return false + } + for i := 0; i < len(a); i++ { + if !cmp.RefOfProcParameter(a[i], b[i]) { + return false + } + } + return true +} + +// SliceOfHandlerCondition does deep equals between the two objects. +func (cmp *Comparator) SliceOfHandlerCondition(a, b []HandlerCondition) bool { + if len(a) != len(b) { + return false + } + for i := 0; i < len(a); i++ { + if !cmp.HandlerCondition(a[i], b[i]) { + return false + } + } + return true +} + // SliceOfTableExpr does deep equals between the two objects. func (cmp *Comparator) SliceOfTableExpr(a, b []TableExpr) bool { if len(a) != len(b) { @@ -7455,6 +7969,19 @@ func (cmp *Comparator) RefOfIdentifierCS(a, b *IdentifierCS) bool { return a.v == b.v } +// SliceOfRefOfElseIfBlock does deep equals between the two objects. +func (cmp *Comparator) SliceOfRefOfElseIfBlock(a, b []*ElseIfBlock) bool { + if len(a) != len(b) { + return false + } + for i := 0; i < len(a); i++ { + if !cmp.RefOfElseIfBlock(a[i], b[i]) { + return false + } + } + return true +} + // SliceOfRefOfIndexColumn does deep equals between the two objects. func (cmp *Comparator) SliceOfRefOfIndexColumn(a, b []*IndexColumn) bool { if len(a) != len(b) { @@ -7635,6 +8162,19 @@ func (cmp *Comparator) SliceOfSelectExpr(a, b []SelectExpr) bool { return true } +// SliceOfRefOfSignalSet does deep equals between the two objects. +func (cmp *Comparator) SliceOfRefOfSignalSet(a, b []*SignalSet) bool { + if len(a) != len(b) { + return false + } + for i := 0; i < len(a); i++ { + if !cmp.RefOfSignalSet(a[i], b[i]) { + return false + } + } + return true +} + // RefOfTableName does deep equals between the two objects. func (cmp *Comparator) RefOfTableName(a, b *TableName) bool { if a == b { diff --git a/go/vt/sqlparser/ast_format.go b/go/vt/sqlparser/ast_format.go index 8939af71f51..d5567a2a925 100644 --- a/go/vt/sqlparser/ast_format.go +++ b/go/vt/sqlparser/ast_format.go @@ -360,6 +360,151 @@ func (node *AlterMigration) Format(buf *TrackedBuffer) { } } +// Format formats the node. +func (node *CreateProcedure) Format(buf *TrackedBuffer) { + buf.astPrintf(node, "create %v", node.Comments) + if node.Definer != nil { + buf.astPrintf(node, "definer = %v ", node.Definer) + } + buf.literal("procedure ") + if node.IfNotExists { + buf.literal("if not exists ") + } + buf.astPrintf(node, "%v (", node.Name) + prefix := "" + for _, param := range node.Params { + buf.astPrintf(node, "%s%v", prefix, param) + prefix = ", " + } + buf.literal(") ") + buf.astPrintf(node, "%v", node.Body) +} + +// Format formats the node. +func (node *DropProcedure) Format(buf *TrackedBuffer) { + exists := "" + if node.IfExists { + exists = "if exists " + } + buf.astPrintf(node, "%s %vprocedure %s%v", DropStr, node.Comments, exists, node.Name) +} + +// Format formats the node. +func (pp *ProcParameter) Format(buf *TrackedBuffer) { + buf.astPrintf(pp, "%s %v %v", pp.Mode.ToString(), pp.Name, pp.Type) +} + +// Format formats the node. +func (s *SingleStatement) Format(buf *TrackedBuffer) { + buf.astPrintf(s, "%v;", s.Statement) +} + +// Format formats the node. +func (bes *BeginEndStatement) Format(buf *TrackedBuffer) { + buf.astPrintf(bes, "begin%v end;", bes.Statements) +} + +// Format formats the node. +func (cs *CompoundStatements) Format(buf *TrackedBuffer) { + if cs == nil { + return + } + for _, stmt := range cs.Statements { + buf.astPrintf(cs, " %v", stmt) + } +} + +// Format formats the node. +func (is *IfStatement) Format(buf *TrackedBuffer) { + buf.astPrintf(is, "if %v then%v", is.SearchCondition, is.ThenStatements) + + for _, elifBlock := range is.ElseIfBlocks { + buf.astPrintf(is, " %v", elifBlock) + } + if is.ElseStatements != nil { + buf.astPrintf(is, " else%v", is.ElseStatements) + } + buf.literal(" end if;") +} + +// Format formats the node. +func (eib *ElseIfBlock) Format(buf *TrackedBuffer) { + buf.astPrintf(eib, "elseif %v then%v", eib.SearchCondition, eib.ThenStatements) +} + +// Format formats the node. +func (dv *DeclareVar) Format(buf *TrackedBuffer) { + buf.literal("declare") + prefix := " " + for _, varName := range dv.VarNames { + buf.astPrintf(dv, "%s%v", prefix, varName) + prefix = ", " + } + buf.astPrintf(dv, " %v;", dv.Type) +} + +// Format formats the node. +func (dh *DeclareHandler) Format(buf *TrackedBuffer) { + buf.astPrintf(dh, "declare %s handler for", dh.Action.ToString()) + prefix := " " + for _, condition := range dh.Conditions { + buf.astPrintf(dh, "%s%v", prefix, condition) + prefix = ", " + } + buf.astPrintf(dh, " %v", dh.Statement) +} + +// Format formats the node. +func (dc *DeclareCondition) Format(buf *TrackedBuffer) { + buf.astPrintf(dc, "declare %v condition for %v;", dc.Name, dc.Condition) +} + +// Format formats the node. +func (s *Signal) Format(buf *TrackedBuffer) { + buf.astPrintf(s, "signal %v", s.Condition) + prefix := " set " + for _, sv := range s.SetValues { + buf.astPrintf(s, "%s%v", prefix, sv) + prefix = ", " + } + buf.literal(";") +} + +// Format formats the node. +func (s *SignalSet) Format(buf *TrackedBuffer) { + buf.astPrintf(s, "%s = %v", s.ConditionName.ToString(), s.Value) +} + +// Format formats the node. +func (hcss *HandlerConditionSQLState) Format(buf *TrackedBuffer) { + buf.astPrintf(hcss, "sqlstate %v", hcss.SQLStateValue) +} + +// Format formats the node. +func (hcn *HandlerConditionNamed) Format(buf *TrackedBuffer) { + buf.astPrintf(hcn, "%v", hcn.Name) +} + +// Format formats the node. +func (hcec *HandlerConditionErrorCode) Format(buf *TrackedBuffer) { + buf.astPrintf(hcec, "%d", hcec.ErrorCode) +} + +// Format formats the node. +func (hcse *HandlerConditionSQLException) Format(buf *TrackedBuffer) { + buf.literal("sqlexception") +} + +// Format formats the node. +func (hcsw *HandlerConditionSQLWarning) Format(buf *TrackedBuffer) { + buf.literal("sqlwarning") +} + +// Format formats the node. +func (hcnf *HandlerConditionNotFound) Format(buf *TrackedBuffer) { + buf.literal("not found") +} + // Format formats the node. func (node *RevertMigration) Format(buf *TrackedBuffer) { buf.astPrintf(node, "revert %vvitess_migration '%#s'", node.Comments, node.UUID) @@ -2208,6 +2353,15 @@ func (node *SelectInto) Format(buf *TrackedBuffer) { if node == nil { return } + if node.Type == IntoVariables { + buf.literal(" into") + prefix := " " + for _, intoVar := range node.VarList { + buf.astPrintf(node, "%s%v", prefix, intoVar) + prefix = ", " + } + return + } buf.astPrintf(node, "%s%#s", node.Type.ToString(), node.FileName) if node.Charset.Name != "" { buf.astPrintf(node, " character set %#s", node.Charset.Name) diff --git a/go/vt/sqlparser/ast_format_fast.go b/go/vt/sqlparser/ast_format_fast.go index 2a6797871eb..ec4ace98774 100644 --- a/go/vt/sqlparser/ast_format_fast.go +++ b/go/vt/sqlparser/ast_format_fast.go @@ -498,6 +498,193 @@ func (node *AlterMigration) FormatFast(buf *TrackedBuffer) { } } +// FormatFast formats the node. +func (node *CreateProcedure) FormatFast(buf *TrackedBuffer) { + buf.WriteString("create ") + node.Comments.FormatFast(buf) + if node.Definer != nil { + buf.WriteString("definer = ") + node.Definer.FormatFast(buf) + buf.WriteByte(' ') + } + buf.WriteString("procedure ") + if node.IfNotExists { + buf.WriteString("if not exists ") + } + node.Name.FormatFast(buf) + buf.WriteString(" (") + prefix := "" + for _, param := range node.Params { + buf.WriteString(prefix) + param.FormatFast(buf) + prefix = ", " + } + buf.WriteString(") ") + node.Body.FormatFast(buf) +} + +// FormatFast formats the node. +func (node *DropProcedure) FormatFast(buf *TrackedBuffer) { + exists := "" + if node.IfExists { + exists = "if exists " + } + buf.WriteString(DropStr) + buf.WriteByte(' ') + node.Comments.FormatFast(buf) + buf.WriteString("procedure ") + buf.WriteString(exists) + node.Name.FormatFast(buf) +} + +// FormatFast formats the node. +func (pp *ProcParameter) FormatFast(buf *TrackedBuffer) { + buf.WriteString(pp.Mode.ToString()) + buf.WriteByte(' ') + pp.Name.FormatFast(buf) + buf.WriteByte(' ') + pp.Type.FormatFast(buf) +} + +// FormatFast formats the node. +func (s *SingleStatement) FormatFast(buf *TrackedBuffer) { + s.Statement.FormatFast(buf) + buf.WriteByte(';') +} + +// FormatFast formats the node. +func (bes *BeginEndStatement) FormatFast(buf *TrackedBuffer) { + buf.WriteString("begin") + bes.Statements.FormatFast(buf) + buf.WriteString(" end;") +} + +// FormatFast formats the node. +func (cs *CompoundStatements) FormatFast(buf *TrackedBuffer) { + if cs == nil { + return + } + for _, stmt := range cs.Statements { + buf.WriteByte(' ') + stmt.FormatFast(buf) + } +} + +// FormatFast formats the node. +func (is *IfStatement) FormatFast(buf *TrackedBuffer) { + buf.WriteString("if ") + is.SearchCondition.FormatFast(buf) + buf.WriteString(" then") + is.ThenStatements.FormatFast(buf) + + for _, elifBlock := range is.ElseIfBlocks { + buf.WriteByte(' ') + elifBlock.FormatFast(buf) + } + if is.ElseStatements != nil { + buf.WriteString(" else") + is.ElseStatements.FormatFast(buf) + } + buf.WriteString(" end if;") +} + +// FormatFast formats the node. +func (eib *ElseIfBlock) FormatFast(buf *TrackedBuffer) { + buf.WriteString("elseif ") + eib.SearchCondition.FormatFast(buf) + buf.WriteString(" then") + eib.ThenStatements.FormatFast(buf) +} + +// FormatFast formats the node. +func (dv *DeclareVar) FormatFast(buf *TrackedBuffer) { + buf.WriteString("declare") + prefix := " " + for _, varName := range dv.VarNames { + buf.WriteString(prefix) + varName.FormatFast(buf) + prefix = ", " + } + buf.WriteByte(' ') + dv.Type.FormatFast(buf) + buf.WriteByte(';') +} + +// FormatFast formats the node. +func (dh *DeclareHandler) FormatFast(buf *TrackedBuffer) { + buf.WriteString("declare ") + buf.WriteString(dh.Action.ToString()) + buf.WriteString(" handler for") + prefix := " " + for _, condition := range dh.Conditions { + buf.WriteString(prefix) + condition.FormatFast(buf) + prefix = ", " + } + buf.WriteByte(' ') + dh.Statement.FormatFast(buf) +} + +// FormatFast formats the node. +func (dc *DeclareCondition) FormatFast(buf *TrackedBuffer) { + buf.WriteString("declare ") + dc.Name.FormatFast(buf) + buf.WriteString(" condition for ") + dc.Condition.FormatFast(buf) + buf.WriteByte(';') +} + +// FormatFast formats the node. +func (s *Signal) FormatFast(buf *TrackedBuffer) { + buf.WriteString("signal ") + s.Condition.FormatFast(buf) + prefix := " set " + for _, sv := range s.SetValues { + buf.WriteString(prefix) + sv.FormatFast(buf) + prefix = ", " + } + buf.WriteString(";") +} + +// FormatFast formats the node. +func (s *SignalSet) FormatFast(buf *TrackedBuffer) { + buf.WriteString(s.ConditionName.ToString()) + buf.WriteString(" = ") + s.Value.FormatFast(buf) +} + +// FormatFast formats the node. +func (hcss *HandlerConditionSQLState) FormatFast(buf *TrackedBuffer) { + buf.WriteString("sqlstate ") + hcss.SQLStateValue.FormatFast(buf) +} + +// FormatFast formats the node. +func (hcn *HandlerConditionNamed) FormatFast(buf *TrackedBuffer) { + hcn.Name.FormatFast(buf) +} + +// FormatFast formats the node. +func (hcec *HandlerConditionErrorCode) FormatFast(buf *TrackedBuffer) { + buf.WriteString(fmt.Sprintf("%d", hcec.ErrorCode)) +} + +// FormatFast formats the node. +func (hcse *HandlerConditionSQLException) FormatFast(buf *TrackedBuffer) { + buf.WriteString("sqlexception") +} + +// FormatFast formats the node. +func (hcsw *HandlerConditionSQLWarning) FormatFast(buf *TrackedBuffer) { + buf.WriteString("sqlwarning") +} + +// FormatFast formats the node. +func (hcnf *HandlerConditionNotFound) FormatFast(buf *TrackedBuffer) { + buf.WriteString("not found") +} + // FormatFast formats the node. func (node *RevertMigration) FormatFast(buf *TrackedBuffer) { buf.WriteString("revert ") @@ -2900,6 +3087,16 @@ func (node *SelectInto) FormatFast(buf *TrackedBuffer) { if node == nil { return } + if node.Type == IntoVariables { + buf.WriteString(" into") + prefix := " " + for _, intoVar := range node.VarList { + buf.WriteString(prefix) + intoVar.FormatFast(buf) + prefix = ", " + } + return + } buf.WriteString(node.Type.ToString()) buf.WriteString(node.FileName) if node.Charset.Name != "" { diff --git a/go/vt/sqlparser/ast_funcs.go b/go/vt/sqlparser/ast_funcs.go index ba7648778e3..90d73df9691 100644 --- a/go/vt/sqlparser/ast_funcs.go +++ b/go/vt/sqlparser/ast_funcs.go @@ -1458,6 +1458,8 @@ func (action DDLAction) ToString() string { return RenameStr case TruncateDDLAction: return TruncateStr + case CreateProcedureAction: + return CreateProcStr case CreateVindexDDLAction: return CreateVindexStr case DropVindexDDLAction: @@ -1483,6 +1485,66 @@ func (action DDLAction) ToString() string { } } +// ToString returns the string associated with the ProcParameterMode Enum +func (action ProcParameterMode) ToString() string { + switch action { + case InMode: + return InStr + case OutMode: + return OutStr + case InoutMode: + return InoutStr + default: + return "Unknown Proc Parameter Mode" + } +} + +// ToString returns the type as a string +func (scn SignalConditionName) ToString() string { + switch scn { + case ClassOriginType: + return ClassOriginTypeStr + case SubclassOriginType: + return SubclassOriginTypeStr + case MessageTextType: + return MessageTextTypeStr + case MySQLErrNoType: + return MySQLErrNoTypeStr + case ConstraintCatalogType: + return ConstraintCatalogTypeStr + case ConstraintSchemaType: + return ConstraintSchemaTypeStr + case ConstraintNameType: + return ConstraintNameTypeStr + case CatalogNameType: + return CatalogNameTypeStr + case SchemaNameType: + return SchemaNameTypeStr + case TableNameType: + return TableNameTypeStr + case ColumnNameType: + return ColumnNameTypeStr + case CursorNameType: + return CursorNameTypeStr + default: + return "Unknown SignalConditionName" + } +} + +// ToString returns the string associated with the HandlerAction Enum +func (ha HandlerAction) ToString() string { + switch ha { + case ContinueAction: + return ContinueStr + case ExitAction: + return ExitStr + case UndoAction: + return UndoStr + default: + return "Unknown Handler Action" + } +} + // ToString returns the string associated with the Scope enum func (scope Scope) ToString() string { switch scope { diff --git a/go/vt/sqlparser/ast_path.go b/go/vt/sqlparser/ast_path.go index 0218f7ca9e9..43353977ce1 100644 --- a/go/vt/sqlparser/ast_path.go +++ b/go/vt/sqlparser/ast_path.go @@ -63,6 +63,7 @@ const ( RefOfAutoIncSpecSequence RefOfAvgArg RefOfAvgOverClause + RefOfBeginEndStatementStatements RefOfBetweenExprLeft RefOfBetweenExprFrom RefOfBetweenExprTo @@ -98,6 +99,7 @@ const ( RefOfComparisonExprLeft RefOfComparisonExprRight RefOfComparisonExprEscape + RefOfCompoundStatementsStatementsOffset RefOfConstraintDefinitionName RefOfConstraintDefinitionDetails RefOfConvertExprExpr @@ -108,6 +110,11 @@ const ( RefOfCountStarOverClause RefOfCreateDatabaseComments RefOfCreateDatabaseDBName + RefOfCreateProcedureName + RefOfCreateProcedureComments + RefOfCreateProcedureDefiner + RefOfCreateProcedureParamsOffset + RefOfCreateProcedureBody RefOfCreateTableTable RefOfCreateTableTableSpec RefOfCreateTableOptLike @@ -120,6 +127,12 @@ const ( RefOfCurTimeFuncExprName RefOfDeallocateStmtComments RefOfDeallocateStmtName + RefOfDeclareConditionName + RefOfDeclareConditionCondition + RefOfDeclareHandlerConditionsOffset + RefOfDeclareHandlerStatement + RefOfDeclareVarVarNamesOffset + RefOfDeclareVarType RefOfDeleteWith RefOfDeleteComments RefOfDeleteTableExprsOffset @@ -133,10 +146,14 @@ const ( RefOfDropDatabaseComments RefOfDropDatabaseDBName RefOfDropKeyName + RefOfDropProcedureComments + RefOfDropProcedureName RefOfDropTableFromTables RefOfDropTableComments RefOfDropViewFromTables RefOfDropViewComments + RefOfElseIfBlockSearchCondition + RefOfElseIfBlockThenStatements RefOfExecuteStmtName RefOfExecuteStmtComments RefOfExecuteStmtArgumentsOffset @@ -193,6 +210,12 @@ const ( RefOfGroupConcatExprExprsOffset RefOfGroupConcatExprOrderBy RefOfGroupConcatExprLimit + RefOfHandlerConditionNamedName + RefOfHandlerConditionSQLStateSQLStateValue + RefOfIfStatementSearchCondition + RefOfIfStatementThenStatements + RefOfIfStatementElseIfBlocksOffset + RefOfIfStatementElseStatements RefOfIndexDefinitionInfo RefOfIndexHintIndexesOffset IndexHintsOffset @@ -352,6 +375,8 @@ const ( RefOfPrepareStmtName RefOfPrepareStmtStatement RefOfPrepareStmtComments + RefOfProcParameterName + RefOfProcParameterType RefOfReferenceDefinitionReferencedTable RefOfReferenceDefinitionReferencedColumns RefOfReferenceDefinitionMatch @@ -401,6 +426,7 @@ const ( RefOfSelectLimit RefOfSelectInto RefOfSelectExprsExprsOffset + RefOfSelectIntoVarListOffset RefOfSetComments RefOfSetExprs RefOfSetExprVar @@ -413,6 +439,10 @@ const ( RefOfShowCreateOp RefOfShowFilterFilter RefOfShowMigrationLogsComments + RefOfSignalCondition + RefOfSignalSetValuesOffset + RefOfSignalSetValue + RefOfSingleStatementStatement RefOfStarExprTableName RefOfStdArg RefOfStdOverClause @@ -530,8 +560,12 @@ const ( RefOfColumnTypeOptionsEngineAttribute RefOfColumnTypeOptionsSecondaryEngineAttribute RefOfColumnTypeOptionsSRID + SliceOfCompoundStatementOffset + SliceOfRefOfProcParameterOffset + SliceOfHandlerConditionOffset SliceOfTableExprOffset SliceOfRefOfVariableOffset + SliceOfRefOfElseIfBlockOffset SliceOfRefOfJSONObjectParamOffset SliceOfRefOfJtColumnDefinitionOffset RefOfJtOrdinalColDefName @@ -546,6 +580,7 @@ const ( SliceOfRefOfPartitionDefinitionOffset RefOfRootNodeSQLNode SliceOfSelectExprOffset + SliceOfRefOfSignalSetOffset RefOfTableNameName RefOfTableNameQualifier RefOfTableOptionValue @@ -651,6 +686,8 @@ func (s ASTStep) DebugString() string { return "(*Avg).Arg" case RefOfAvgOverClause: return "(*Avg).OverClause" + case RefOfBeginEndStatementStatements: + return "(*BeginEndStatement).Statements" case RefOfBetweenExprLeft: return "(*BetweenExpr).Left" case RefOfBetweenExprFrom: @@ -721,6 +758,8 @@ func (s ASTStep) DebugString() string { return "(*ComparisonExpr).Right" case RefOfComparisonExprEscape: return "(*ComparisonExpr).Escape" + case RefOfCompoundStatementsStatementsOffset: + return "(*CompoundStatements).StatementsOffset" case RefOfConstraintDefinitionName: return "(*ConstraintDefinition).Name" case RefOfConstraintDefinitionDetails: @@ -741,6 +780,16 @@ func (s ASTStep) DebugString() string { return "(*CreateDatabase).Comments" case RefOfCreateDatabaseDBName: return "(*CreateDatabase).DBName" + case RefOfCreateProcedureName: + return "(*CreateProcedure).Name" + case RefOfCreateProcedureComments: + return "(*CreateProcedure).Comments" + case RefOfCreateProcedureDefiner: + return "(*CreateProcedure).Definer" + case RefOfCreateProcedureParamsOffset: + return "(*CreateProcedure).ParamsOffset" + case RefOfCreateProcedureBody: + return "(*CreateProcedure).Body" case RefOfCreateTableTable: return "(*CreateTable).Table" case RefOfCreateTableTableSpec: @@ -765,6 +814,18 @@ func (s ASTStep) DebugString() string { return "(*DeallocateStmt).Comments" case RefOfDeallocateStmtName: return "(*DeallocateStmt).Name" + case RefOfDeclareConditionName: + return "(*DeclareCondition).Name" + case RefOfDeclareConditionCondition: + return "(*DeclareCondition).Condition" + case RefOfDeclareHandlerConditionsOffset: + return "(*DeclareHandler).ConditionsOffset" + case RefOfDeclareHandlerStatement: + return "(*DeclareHandler).Statement" + case RefOfDeclareVarVarNamesOffset: + return "(*DeclareVar).VarNamesOffset" + case RefOfDeclareVarType: + return "(*DeclareVar).Type" case RefOfDeleteWith: return "(*Delete).With" case RefOfDeleteComments: @@ -791,6 +852,10 @@ func (s ASTStep) DebugString() string { return "(*DropDatabase).DBName" case RefOfDropKeyName: return "(*DropKey).Name" + case RefOfDropProcedureComments: + return "(*DropProcedure).Comments" + case RefOfDropProcedureName: + return "(*DropProcedure).Name" case RefOfDropTableFromTables: return "(*DropTable).FromTables" case RefOfDropTableComments: @@ -799,6 +864,10 @@ func (s ASTStep) DebugString() string { return "(*DropView).FromTables" case RefOfDropViewComments: return "(*DropView).Comments" + case RefOfElseIfBlockSearchCondition: + return "(*ElseIfBlock).SearchCondition" + case RefOfElseIfBlockThenStatements: + return "(*ElseIfBlock).ThenStatements" case RefOfExecuteStmtName: return "(*ExecuteStmt).Name" case RefOfExecuteStmtComments: @@ -911,6 +980,18 @@ func (s ASTStep) DebugString() string { return "(*GroupConcatExpr).OrderBy" case RefOfGroupConcatExprLimit: return "(*GroupConcatExpr).Limit" + case RefOfHandlerConditionNamedName: + return "(*HandlerConditionNamed).Name" + case RefOfHandlerConditionSQLStateSQLStateValue: + return "(*HandlerConditionSQLState).SQLStateValue" + case RefOfIfStatementSearchCondition: + return "(*IfStatement).SearchCondition" + case RefOfIfStatementThenStatements: + return "(*IfStatement).ThenStatements" + case RefOfIfStatementElseIfBlocksOffset: + return "(*IfStatement).ElseIfBlocksOffset" + case RefOfIfStatementElseStatements: + return "(*IfStatement).ElseStatements" case RefOfIndexDefinitionInfo: return "(*IndexDefinition).Info" case RefOfIndexHintIndexesOffset: @@ -1229,6 +1310,10 @@ func (s ASTStep) DebugString() string { return "(*PrepareStmt).Statement" case RefOfPrepareStmtComments: return "(*PrepareStmt).Comments" + case RefOfProcParameterName: + return "(*ProcParameter).Name" + case RefOfProcParameterType: + return "(*ProcParameter).Type" case RefOfReferenceDefinitionReferencedTable: return "(*ReferenceDefinition).ReferencedTable" case RefOfReferenceDefinitionReferencedColumns: @@ -1327,6 +1412,8 @@ func (s ASTStep) DebugString() string { return "(*Select).Into" case RefOfSelectExprsExprsOffset: return "(*SelectExprs).ExprsOffset" + case RefOfSelectIntoVarListOffset: + return "(*SelectInto).VarListOffset" case RefOfSetComments: return "(*Set).Comments" case RefOfSetExprs: @@ -1351,6 +1438,14 @@ func (s ASTStep) DebugString() string { return "(*ShowFilter).Filter" case RefOfShowMigrationLogsComments: return "(*ShowMigrationLogs).Comments" + case RefOfSignalCondition: + return "(*Signal).Condition" + case RefOfSignalSetValuesOffset: + return "(*Signal).SetValuesOffset" + case RefOfSignalSetValue: + return "(*SignalSet).Value" + case RefOfSingleStatementStatement: + return "(*SingleStatement).Statement" case RefOfStarExprTableName: return "(*StarExpr).TableName" case RefOfStdArg: @@ -1585,10 +1680,18 @@ func (s ASTStep) DebugString() string { return "(*ColumnTypeOptions).SecondaryEngineAttribute" case RefOfColumnTypeOptionsSRID: return "(*ColumnTypeOptions).SRID" + case SliceOfCompoundStatementOffset: + return "([]CompoundStatement)[]Offset" + case SliceOfRefOfProcParameterOffset: + return "([]*ProcParameter)[]Offset" + case SliceOfHandlerConditionOffset: + return "([]HandlerCondition)[]Offset" case SliceOfTableExprOffset: return "([]TableExpr)[]Offset" case SliceOfRefOfVariableOffset: return "([]*Variable)[]Offset" + case SliceOfRefOfElseIfBlockOffset: + return "([]*ElseIfBlock)[]Offset" case SliceOfRefOfJSONObjectParamOffset: return "([]*JSONObjectParam)[]Offset" case SliceOfRefOfJtColumnDefinitionOffset: @@ -1617,6 +1720,8 @@ func (s ASTStep) DebugString() string { return "(*RootNode).SQLNode" case SliceOfSelectExprOffset: return "([]SelectExpr)[]Offset" + case SliceOfRefOfSignalSetOffset: + return "([]*SignalSet)[]Offset" case RefOfTableNameName: return "(*TableName).Name" case RefOfTableNameQualifier: @@ -1747,6 +1852,8 @@ func GetNodeFromPath(node SQLNode, path ASTPath) SQLNode { node = node.(*Avg).Arg case RefOfAvgOverClause: node = node.(*Avg).OverClause + case RefOfBeginEndStatementStatements: + node = node.(*BeginEndStatement).Statements case RefOfBetweenExprLeft: node = node.(*BetweenExpr).Left case RefOfBetweenExprFrom: @@ -1825,6 +1932,10 @@ func GetNodeFromPath(node SQLNode, path ASTPath) SQLNode { node = node.(*ComparisonExpr).Right case RefOfComparisonExprEscape: node = node.(*ComparisonExpr).Escape + case RefOfCompoundStatementsStatementsOffset: + idx, bytesRead := path.nextPathOffset() + path = path[bytesRead:] + node = node.(*CompoundStatements).Statements[idx] case RefOfConstraintDefinitionName: node = node.(*ConstraintDefinition).Name case RefOfConstraintDefinitionDetails: @@ -1847,6 +1958,18 @@ func GetNodeFromPath(node SQLNode, path ASTPath) SQLNode { node = node.(*CreateDatabase).Comments case RefOfCreateDatabaseDBName: node = node.(*CreateDatabase).DBName + case RefOfCreateProcedureName: + node = node.(*CreateProcedure).Name + case RefOfCreateProcedureComments: + node = node.(*CreateProcedure).Comments + case RefOfCreateProcedureDefiner: + node = node.(*CreateProcedure).Definer + case RefOfCreateProcedureParamsOffset: + idx, bytesRead := path.nextPathOffset() + path = path[bytesRead:] + node = node.(*CreateProcedure).Params[idx] + case RefOfCreateProcedureBody: + node = node.(*CreateProcedure).Body case RefOfCreateTableTable: node = node.(*CreateTable).Table case RefOfCreateTableTableSpec: @@ -1871,6 +1994,22 @@ func GetNodeFromPath(node SQLNode, path ASTPath) SQLNode { node = node.(*DeallocateStmt).Comments case RefOfDeallocateStmtName: node = node.(*DeallocateStmt).Name + case RefOfDeclareConditionName: + node = node.(*DeclareCondition).Name + case RefOfDeclareConditionCondition: + node = node.(*DeclareCondition).Condition + case RefOfDeclareHandlerConditionsOffset: + idx, bytesRead := path.nextPathOffset() + path = path[bytesRead:] + node = node.(*DeclareHandler).Conditions[idx] + case RefOfDeclareHandlerStatement: + node = node.(*DeclareHandler).Statement + case RefOfDeclareVarVarNamesOffset: + idx, bytesRead := path.nextPathOffset() + path = path[bytesRead:] + node = node.(*DeclareVar).VarNames[idx] + case RefOfDeclareVarType: + node = node.(*DeclareVar).Type case RefOfDeleteWith: node = node.(*Delete).With case RefOfDeleteComments: @@ -1899,6 +2038,10 @@ func GetNodeFromPath(node SQLNode, path ASTPath) SQLNode { node = node.(*DropDatabase).DBName case RefOfDropKeyName: node = node.(*DropKey).Name + case RefOfDropProcedureComments: + node = node.(*DropProcedure).Comments + case RefOfDropProcedureName: + node = node.(*DropProcedure).Name case RefOfDropTableFromTables: node = node.(*DropTable).FromTables case RefOfDropTableComments: @@ -1907,6 +2050,10 @@ func GetNodeFromPath(node SQLNode, path ASTPath) SQLNode { node = node.(*DropView).FromTables case RefOfDropViewComments: node = node.(*DropView).Comments + case RefOfElseIfBlockSearchCondition: + node = node.(*ElseIfBlock).SearchCondition + case RefOfElseIfBlockThenStatements: + node = node.(*ElseIfBlock).ThenStatements case RefOfExecuteStmtName: node = node.(*ExecuteStmt).Name case RefOfExecuteStmtComments: @@ -2029,6 +2176,20 @@ func GetNodeFromPath(node SQLNode, path ASTPath) SQLNode { node = node.(*GroupConcatExpr).OrderBy case RefOfGroupConcatExprLimit: node = node.(*GroupConcatExpr).Limit + case RefOfHandlerConditionNamedName: + node = node.(*HandlerConditionNamed).Name + case RefOfHandlerConditionSQLStateSQLStateValue: + node = node.(*HandlerConditionSQLState).SQLStateValue + case RefOfIfStatementSearchCondition: + node = node.(*IfStatement).SearchCondition + case RefOfIfStatementThenStatements: + node = node.(*IfStatement).ThenStatements + case RefOfIfStatementElseIfBlocksOffset: + idx, bytesRead := path.nextPathOffset() + path = path[bytesRead:] + node = node.(*IfStatement).ElseIfBlocks[idx] + case RefOfIfStatementElseStatements: + node = node.(*IfStatement).ElseStatements case RefOfIndexDefinitionInfo: node = node.(*IndexDefinition).Info case RefOfIndexHintIndexesOffset: @@ -2397,6 +2558,10 @@ func GetNodeFromPath(node SQLNode, path ASTPath) SQLNode { node = node.(*PrepareStmt).Statement case RefOfPrepareStmtComments: node = node.(*PrepareStmt).Comments + case RefOfProcParameterName: + node = node.(*ProcParameter).Name + case RefOfProcParameterType: + node = node.(*ProcParameter).Type case RefOfReferenceDefinitionReferencedTable: node = node.(*ReferenceDefinition).ReferencedTable case RefOfReferenceDefinitionReferencedColumns: @@ -2499,6 +2664,10 @@ func GetNodeFromPath(node SQLNode, path ASTPath) SQLNode { idx, bytesRead := path.nextPathOffset() path = path[bytesRead:] node = node.(*SelectExprs).Exprs[idx] + case RefOfSelectIntoVarListOffset: + idx, bytesRead := path.nextPathOffset() + path = path[bytesRead:] + node = node.(*SelectInto).VarList[idx] case RefOfSetComments: node = node.(*Set).Comments case RefOfSetExprs: @@ -2525,6 +2694,16 @@ func GetNodeFromPath(node SQLNode, path ASTPath) SQLNode { node = node.(*ShowFilter).Filter case RefOfShowMigrationLogsComments: node = node.(*ShowMigrationLogs).Comments + case RefOfSignalCondition: + node = node.(*Signal).Condition + case RefOfSignalSetValuesOffset: + idx, bytesRead := path.nextPathOffset() + path = path[bytesRead:] + node = node.(*Signal).SetValues[idx] + case RefOfSignalSetValue: + node = node.(*SignalSet).Value + case RefOfSingleStatementStatement: + node = node.(*SingleStatement).Statement case RefOfStarExprTableName: node = node.(*StarExpr).TableName case RefOfStdArg: diff --git a/go/vt/sqlparser/ast_rewrite.go b/go/vt/sqlparser/ast_rewrite.go index 7eb4fad4b9c..c136c8a63ba 100644 --- a/go/vt/sqlparser/ast_rewrite.go +++ b/go/vt/sqlparser/ast_rewrite.go @@ -71,6 +71,8 @@ func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer repl return a.rewriteRefOfAvg(parent, node, replacer) case *Begin: return a.rewriteRefOfBegin(parent, node, replacer) + case *BeginEndStatement: + return a.rewriteRefOfBeginEndStatement(parent, node, replacer) case *BetweenExpr: return a.rewriteRefOfBetweenExpr(parent, node, replacer) case *BinaryExpr: @@ -113,6 +115,8 @@ func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer repl return a.rewriteRefOfCommonTableExpr(parent, node, replacer) case *ComparisonExpr: return a.rewriteRefOfComparisonExpr(parent, node, replacer) + case *CompoundStatements: + return a.rewriteRefOfCompoundStatements(parent, node, replacer) case *ConstraintDefinition: return a.rewriteRefOfConstraintDefinition(parent, node, replacer) case *ConvertExpr: @@ -127,6 +131,8 @@ func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer repl return a.rewriteRefOfCountStar(parent, node, replacer) case *CreateDatabase: return a.rewriteRefOfCreateDatabase(parent, node, replacer) + case *CreateProcedure: + return a.rewriteRefOfCreateProcedure(parent, node, replacer) case *CreateTable: return a.rewriteRefOfCreateTable(parent, node, replacer) case *CreateView: @@ -135,6 +141,12 @@ func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer repl return a.rewriteRefOfCurTimeFuncExpr(parent, node, replacer) case *DeallocateStmt: return a.rewriteRefOfDeallocateStmt(parent, node, replacer) + case *DeclareCondition: + return a.rewriteRefOfDeclareCondition(parent, node, replacer) + case *DeclareHandler: + return a.rewriteRefOfDeclareHandler(parent, node, replacer) + case *DeclareVar: + return a.rewriteRefOfDeclareVar(parent, node, replacer) case *Default: return a.rewriteRefOfDefault(parent, node, replacer) case *Definer: @@ -149,10 +161,14 @@ func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer repl return a.rewriteRefOfDropDatabase(parent, node, replacer) case *DropKey: return a.rewriteRefOfDropKey(parent, node, replacer) + case *DropProcedure: + return a.rewriteRefOfDropProcedure(parent, node, replacer) case *DropTable: return a.rewriteRefOfDropTable(parent, node, replacer) case *DropView: return a.rewriteRefOfDropView(parent, node, replacer) + case *ElseIfBlock: + return a.rewriteRefOfElseIfBlock(parent, node, replacer) case *ExecuteStmt: return a.rewriteRefOfExecuteStmt(parent, node, replacer) case *ExistsExpr: @@ -209,10 +225,24 @@ func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer repl return a.rewriteRefOfGroupBy(parent, node, replacer) case *GroupConcatExpr: return a.rewriteRefOfGroupConcatExpr(parent, node, replacer) + case *HandlerConditionErrorCode: + return a.rewriteRefOfHandlerConditionErrorCode(parent, node, replacer) + case *HandlerConditionNamed: + return a.rewriteRefOfHandlerConditionNamed(parent, node, replacer) + case *HandlerConditionNotFound: + return a.rewriteRefOfHandlerConditionNotFound(parent, node, replacer) + case *HandlerConditionSQLException: + return a.rewriteRefOfHandlerConditionSQLException(parent, node, replacer) + case *HandlerConditionSQLState: + return a.rewriteRefOfHandlerConditionSQLState(parent, node, replacer) + case *HandlerConditionSQLWarning: + return a.rewriteRefOfHandlerConditionSQLWarning(parent, node, replacer) case IdentifierCI: return a.rewriteIdentifierCI(parent, node, replacer) case IdentifierCS: return a.rewriteIdentifierCS(parent, node, replacer) + case *IfStatement: + return a.rewriteRefOfIfStatement(parent, node, replacer) case *IndexDefinition: return a.rewriteRefOfIndexDefinition(parent, node, replacer) case *IndexHint: @@ -397,6 +427,8 @@ func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer repl return a.rewriteRefOfPolygonPropertyFuncExpr(parent, node, replacer) case *PrepareStmt: return a.rewriteRefOfPrepareStmt(parent, node, replacer) + case *ProcParameter: + return a.rewriteRefOfProcParameter(parent, node, replacer) case *PurgeBinaryLogs: return a.rewriteRefOfPurgeBinaryLogs(parent, node, replacer) case ReferenceAction: @@ -463,6 +495,12 @@ func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer repl return a.rewriteRefOfShowThrottlerStatus(parent, node, replacer) case *ShowTransactionStatus: return a.rewriteRefOfShowTransactionStatus(parent, node, replacer) + case *Signal: + return a.rewriteRefOfSignal(parent, node, replacer) + case *SignalSet: + return a.rewriteRefOfSignalSet(parent, node, replacer) + case *SingleStatement: + return a.rewriteRefOfSingleStatement(parent, node, replacer) case *StarExpr: return a.rewriteRefOfStarExpr(parent, node, replacer) case *Std: @@ -1701,6 +1739,46 @@ func (a *application) rewriteRefOfBegin(parent SQLNode, node *Begin, replacer re return true } +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfBeginEndStatement(parent SQLNode, node *BeginEndStatement, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.collectPaths { + a.cur.current.AddStep(uint16(RefOfBeginEndStatementStatements)) + } + if !a.rewriteRefOfCompoundStatements(node, node.Statements, func(newNode, parent SQLNode) { + parent.(*BeginEndStatement).Statements = newNode.(*CompoundStatements) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.post(&a.cur) { + return false + } + } + return true +} + // Function Generation Source: PtrToStructMethod func (a *application) rewriteRefOfBetweenExpr(parent SQLNode, node *BetweenExpr, replacer replacerFunc) bool { if node == nil { @@ -2672,6 +2750,54 @@ func (a *application) rewriteRefOfComparisonExpr(parent SQLNode, node *Compariso return true } +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfCompoundStatements(parent SQLNode, node *CompoundStatements, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + for x, el := range node.Statements { + if a.collectPaths { + if x == 0 { + a.cur.current.AddStepWithOffset(uint16(RefOfCompoundStatementsStatementsOffset)) + } else { + a.cur.current.ChangeOffset(x) + } + } + if !a.rewriteCompoundStatement(node, el, func(idx int) replacerFunc { + return func(newNode, parent SQLNode) { + parent.(*CompoundStatements).Statements[idx] = newNode.(CompoundStatement) + } + }(x)) { + return false + } + } + if a.collectPaths { + a.cur.current.Pop() + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.post(&a.cur) { + return false + } + } + return true +} + // Function Generation Source: PtrToStructMethod func (a *application) rewriteRefOfConstraintDefinition(parent SQLNode, node *ConstraintDefinition, replacer replacerFunc) bool { if node == nil { @@ -2987,6 +3113,92 @@ func (a *application) rewriteRefOfCreateDatabase(parent SQLNode, node *CreateDat return true } +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfCreateProcedure(parent SQLNode, node *CreateProcedure, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.collectPaths { + a.cur.current.AddStep(uint16(RefOfCreateProcedureName)) + } + if !a.rewriteTableName(node, node.Name, func(newNode, parent SQLNode) { + parent.(*CreateProcedure).Name = newNode.(TableName) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + a.cur.current.AddStep(uint16(RefOfCreateProcedureComments)) + } + if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) { + parent.(*CreateProcedure).Comments = newNode.(*ParsedComments) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + a.cur.current.AddStep(uint16(RefOfCreateProcedureDefiner)) + } + if !a.rewriteRefOfDefiner(node, node.Definer, func(newNode, parent SQLNode) { + parent.(*CreateProcedure).Definer = newNode.(*Definer) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + for x, el := range node.Params { + if a.collectPaths { + if x == 0 { + a.cur.current.AddStepWithOffset(uint16(RefOfCreateProcedureParamsOffset)) + } else { + a.cur.current.ChangeOffset(x) + } + } + if !a.rewriteRefOfProcParameter(node, el, func(idx int) replacerFunc { + return func(newNode, parent SQLNode) { + parent.(*CreateProcedure).Params[idx] = newNode.(*ProcParameter) + } + }(x)) { + return false + } + } + if a.collectPaths && len(node.Params) > 0 { + a.cur.current.Pop() + a.cur.current.AddStep(uint16(RefOfCreateProcedureBody)) + } + if !a.rewriteCompoundStatement(node, node.Body, func(newNode, parent SQLNode) { + parent.(*CreateProcedure).Body = newNode.(CompoundStatement) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.post(&a.cur) { + return false + } + } + return true +} + // Function Generation Source: PtrToStructMethod func (a *application) rewriteRefOfCreateTable(parent SQLNode, node *CreateTable, replacer replacerFunc) bool { if node == nil { @@ -3220,7 +3432,7 @@ func (a *application) rewriteRefOfDeallocateStmt(parent SQLNode, node *Deallocat } // Function Generation Source: PtrToStructMethod -func (a *application) rewriteRefOfDefault(parent SQLNode, node *Default, replacer replacerFunc) bool { +func (a *application) rewriteRefOfDeclareCondition(parent SQLNode, node *DeclareCondition, replacer replacerFunc) bool { if node == nil { return true } @@ -3237,12 +3449,30 @@ func (a *application) rewriteRefOfDefault(parent SQLNode, node *Default, replace return true } } + if a.collectPaths { + a.cur.current.AddStep(uint16(RefOfDeclareConditionName)) + } + if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) { + parent.(*DeclareCondition).Name = newNode.(IdentifierCI) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + a.cur.current.AddStep(uint16(RefOfDeclareConditionCondition)) + } + if !a.rewriteHandlerCondition(node, node.Condition, func(newNode, parent SQLNode) { + parent.(*DeclareCondition).Condition = newNode.(HandlerCondition) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } if a.post != nil { - if a.pre == nil { - a.cur.replacer = replacer - a.cur.parent = parent - a.cur.node = node - } + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node if !a.post(&a.cur) { return false } @@ -3251,7 +3481,7 @@ func (a *application) rewriteRefOfDefault(parent SQLNode, node *Default, replace } // Function Generation Source: PtrToStructMethod -func (a *application) rewriteRefOfDefiner(parent SQLNode, node *Definer, replacer replacerFunc) bool { +func (a *application) rewriteRefOfDeclareHandler(parent SQLNode, node *DeclareHandler, replacer replacerFunc) bool { if node == nil { return true } @@ -3268,12 +3498,38 @@ func (a *application) rewriteRefOfDefiner(parent SQLNode, node *Definer, replace return true } } - if a.post != nil { - if a.pre == nil { - a.cur.replacer = replacer - a.cur.parent = parent - a.cur.node = node + for x, el := range node.Conditions { + if a.collectPaths { + if x == 0 { + a.cur.current.AddStepWithOffset(uint16(RefOfDeclareHandlerConditionsOffset)) + } else { + a.cur.current.ChangeOffset(x) + } + } + if !a.rewriteHandlerCondition(node, el, func(idx int) replacerFunc { + return func(newNode, parent SQLNode) { + parent.(*DeclareHandler).Conditions[idx] = newNode.(HandlerCondition) + } + }(x)) { + return false } + } + if a.collectPaths && len(node.Conditions) > 0 { + a.cur.current.Pop() + a.cur.current.AddStep(uint16(RefOfDeclareHandlerStatement)) + } + if !a.rewriteCompoundStatement(node, node.Statement, func(newNode, parent SQLNode) { + parent.(*DeclareHandler).Statement = newNode.(CompoundStatement) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node if !a.post(&a.cur) { return false } @@ -3282,7 +3538,7 @@ func (a *application) rewriteRefOfDefiner(parent SQLNode, node *Definer, replace } // Function Generation Source: PtrToStructMethod -func (a *application) rewriteRefOfDelete(parent SQLNode, node *Delete, replacer replacerFunc) bool { +func (a *application) rewriteRefOfDeclareVar(parent SQLNode, node *DeclareVar, replacer replacerFunc) bool { if node == nil { return true } @@ -3299,68 +3555,187 @@ func (a *application) rewriteRefOfDelete(parent SQLNode, node *Delete, replacer return true } } - if a.collectPaths { - a.cur.current.AddStep(uint16(RefOfDeleteWith)) - } - if !a.rewriteRefOfWith(node, node.With, func(newNode, parent SQLNode) { - parent.(*Delete).With = newNode.(*With) - }) { - return false - } - if a.collectPaths { - a.cur.current.Pop() - a.cur.current.AddStep(uint16(RefOfDeleteComments)) - } - if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) { - parent.(*Delete).Comments = newNode.(*ParsedComments) - }) { - return false - } - if a.collectPaths { - a.cur.current.Pop() - } - for x, el := range node.TableExprs { + for x, el := range node.VarNames { if a.collectPaths { if x == 0 { - a.cur.current.AddStepWithOffset(uint16(RefOfDeleteTableExprsOffset)) + a.cur.current.AddStepWithOffset(uint16(RefOfDeclareVarVarNamesOffset)) } else { a.cur.current.ChangeOffset(x) } } - if !a.rewriteTableExpr(node, el, func(idx int) replacerFunc { + if !a.rewriteIdentifierCI(node, el, func(idx int) replacerFunc { return func(newNode, parent SQLNode) { - parent.(*Delete).TableExprs[idx] = newNode.(TableExpr) + parent.(*DeclareVar).VarNames[idx] = newNode.(IdentifierCI) } }(x)) { return false } } - if a.collectPaths && len(node.TableExprs) > 0 { - a.cur.current.Pop() - a.cur.current.AddStep(uint16(RefOfDeleteTargets)) - } - if !a.rewriteTableNames(node, node.Targets, func(newNode, parent SQLNode) { - parent.(*Delete).Targets = newNode.(TableNames) - }) { - return false - } - if a.collectPaths { + if a.collectPaths && len(node.VarNames) > 0 { a.cur.current.Pop() - a.cur.current.AddStep(uint16(RefOfDeletePartitions)) + a.cur.current.AddStep(uint16(RefOfDeclareVarType)) } - if !a.rewritePartitions(node, node.Partitions, func(newNode, parent SQLNode) { - parent.(*Delete).Partitions = newNode.(Partitions) + if !a.rewriteRefOfColumnType(node, node.Type, func(newNode, parent SQLNode) { + parent.(*DeclareVar).Type = newNode.(*ColumnType) }) { return false } if a.collectPaths { a.cur.current.Pop() - a.cur.current.AddStep(uint16(RefOfDeleteWhere)) } - if !a.rewriteRefOfWhere(node, node.Where, func(newNode, parent SQLNode) { - parent.(*Delete).Where = newNode.(*Where) - }) { - return false + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.post(&a.cur) { + return false + } + } + return true +} + +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfDefault(parent SQLNode, node *Default, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.post != nil { + if a.pre == nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + } + if !a.post(&a.cur) { + return false + } + } + return true +} + +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfDefiner(parent SQLNode, node *Definer, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.post != nil { + if a.pre == nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + } + if !a.post(&a.cur) { + return false + } + } + return true +} + +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfDelete(parent SQLNode, node *Delete, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.collectPaths { + a.cur.current.AddStep(uint16(RefOfDeleteWith)) + } + if !a.rewriteRefOfWith(node, node.With, func(newNode, parent SQLNode) { + parent.(*Delete).With = newNode.(*With) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + a.cur.current.AddStep(uint16(RefOfDeleteComments)) + } + if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) { + parent.(*Delete).Comments = newNode.(*ParsedComments) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + for x, el := range node.TableExprs { + if a.collectPaths { + if x == 0 { + a.cur.current.AddStepWithOffset(uint16(RefOfDeleteTableExprsOffset)) + } else { + a.cur.current.ChangeOffset(x) + } + } + if !a.rewriteTableExpr(node, el, func(idx int) replacerFunc { + return func(newNode, parent SQLNode) { + parent.(*Delete).TableExprs[idx] = newNode.(TableExpr) + } + }(x)) { + return false + } + } + if a.collectPaths && len(node.TableExprs) > 0 { + a.cur.current.Pop() + a.cur.current.AddStep(uint16(RefOfDeleteTargets)) + } + if !a.rewriteTableNames(node, node.Targets, func(newNode, parent SQLNode) { + parent.(*Delete).Targets = newNode.(TableNames) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + a.cur.current.AddStep(uint16(RefOfDeletePartitions)) + } + if !a.rewritePartitions(node, node.Partitions, func(newNode, parent SQLNode) { + parent.(*Delete).Partitions = newNode.(Partitions) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + a.cur.current.AddStep(uint16(RefOfDeleteWhere)) + } + if !a.rewriteRefOfWhere(node, node.Where, func(newNode, parent SQLNode) { + parent.(*Delete).Where = newNode.(*Where) + }) { + return false } if a.collectPaths { a.cur.current.Pop() @@ -3563,6 +3938,55 @@ func (a *application) rewriteRefOfDropKey(parent SQLNode, node *DropKey, replace return true } +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfDropProcedure(parent SQLNode, node *DropProcedure, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.collectPaths { + a.cur.current.AddStep(uint16(RefOfDropProcedureComments)) + } + if !a.rewriteRefOfParsedComments(node, node.Comments, func(newNode, parent SQLNode) { + parent.(*DropProcedure).Comments = newNode.(*ParsedComments) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + a.cur.current.AddStep(uint16(RefOfDropProcedureName)) + } + if !a.rewriteTableName(node, node.Name, func(newNode, parent SQLNode) { + parent.(*DropProcedure).Name = newNode.(TableName) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.post(&a.cur) { + return false + } + } + return true +} + // Function Generation Source: PtrToStructMethod func (a *application) rewriteRefOfDropTable(parent SQLNode, node *DropTable, replacer replacerFunc) bool { if node == nil { @@ -3661,6 +4085,55 @@ func (a *application) rewriteRefOfDropView(parent SQLNode, node *DropView, repla return true } +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfElseIfBlock(parent SQLNode, node *ElseIfBlock, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.collectPaths { + a.cur.current.AddStep(uint16(RefOfElseIfBlockSearchCondition)) + } + if !a.rewriteExpr(node, node.SearchCondition, func(newNode, parent SQLNode) { + parent.(*ElseIfBlock).SearchCondition = newNode.(Expr) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + a.cur.current.AddStep(uint16(RefOfElseIfBlockThenStatements)) + } + if !a.rewriteRefOfCompoundStatements(node, node.ThenStatements, func(newNode, parent SQLNode) { + parent.(*ElseIfBlock).ThenStatements = newNode.(*CompoundStatements) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.post(&a.cur) { + return false + } + } + return true +} + // Function Generation Source: PtrToStructMethod func (a *application) rewriteRefOfExecuteStmt(parent SQLNode, node *ExecuteStmt, replacer replacerFunc) bool { if node == nil { @@ -5077,6 +5550,210 @@ func (a *application) rewriteRefOfGroupConcatExpr(parent SQLNode, node *GroupCon return true } +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfHandlerConditionErrorCode(parent SQLNode, node *HandlerConditionErrorCode, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.post != nil { + if a.pre == nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + } + if !a.post(&a.cur) { + return false + } + } + return true +} + +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfHandlerConditionNamed(parent SQLNode, node *HandlerConditionNamed, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.collectPaths { + a.cur.current.AddStep(uint16(RefOfHandlerConditionNamedName)) + } + if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) { + parent.(*HandlerConditionNamed).Name = newNode.(IdentifierCI) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.post(&a.cur) { + return false + } + } + return true +} + +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfHandlerConditionNotFound(parent SQLNode, node *HandlerConditionNotFound, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.post != nil { + if a.pre == nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + } + if !a.post(&a.cur) { + return false + } + } + return true +} + +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfHandlerConditionSQLException(parent SQLNode, node *HandlerConditionSQLException, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.post != nil { + if a.pre == nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + } + if !a.post(&a.cur) { + return false + } + } + return true +} + +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfHandlerConditionSQLState(parent SQLNode, node *HandlerConditionSQLState, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.collectPaths { + a.cur.current.AddStep(uint16(RefOfHandlerConditionSQLStateSQLStateValue)) + } + if !a.rewriteRefOfLiteral(node, node.SQLStateValue, func(newNode, parent SQLNode) { + parent.(*HandlerConditionSQLState).SQLStateValue = newNode.(*Literal) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.post(&a.cur) { + return false + } + } + return true +} + +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfHandlerConditionSQLWarning(parent SQLNode, node *HandlerConditionSQLWarning, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.post != nil { + if a.pre == nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + } + if !a.post(&a.cur) { + return false + } + } + return true +} + // Function Generation Source: StructMethod func (a *application) rewriteIdentifierCI(parent SQLNode, node IdentifierCI, replacer replacerFunc) bool { if a.pre != nil { @@ -5098,34 +5775,111 @@ func (a *application) rewriteIdentifierCI(parent SQLNode, node IdentifierCI, rep a.cur.parent = parent a.cur.node = node } - if !a.post(&a.cur) { + if !a.post(&a.cur) { + return false + } + } + return true +} + +// Function Generation Source: StructMethod +func (a *application) rewriteIdentifierCS(parent SQLNode, node IdentifierCS, replacer replacerFunc) bool { + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.post != nil { + if a.pre == nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + } + if !a.post(&a.cur) { + return false + } + } + return true +} + +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfIfStatement(parent SQLNode, node *IfStatement, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.collectPaths { + a.cur.current.AddStep(uint16(RefOfIfStatementSearchCondition)) + } + if !a.rewriteExpr(node, node.SearchCondition, func(newNode, parent SQLNode) { + parent.(*IfStatement).SearchCondition = newNode.(Expr) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + a.cur.current.AddStep(uint16(RefOfIfStatementThenStatements)) + } + if !a.rewriteRefOfCompoundStatements(node, node.ThenStatements, func(newNode, parent SQLNode) { + parent.(*IfStatement).ThenStatements = newNode.(*CompoundStatements) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + for x, el := range node.ElseIfBlocks { + if a.collectPaths { + if x == 0 { + a.cur.current.AddStepWithOffset(uint16(RefOfIfStatementElseIfBlocksOffset)) + } else { + a.cur.current.ChangeOffset(x) + } + } + if !a.rewriteRefOfElseIfBlock(node, el, func(idx int) replacerFunc { + return func(newNode, parent SQLNode) { + parent.(*IfStatement).ElseIfBlocks[idx] = newNode.(*ElseIfBlock) + } + }(x)) { return false } } - return true -} - -// Function Generation Source: StructMethod -func (a *application) rewriteIdentifierCS(parent SQLNode, node IdentifierCS, replacer replacerFunc) bool { - if a.pre != nil { + if a.collectPaths && len(node.ElseIfBlocks) > 0 { + a.cur.current.Pop() + a.cur.current.AddStep(uint16(RefOfIfStatementElseStatements)) + } + if !a.rewriteRefOfCompoundStatements(node, node.ElseStatements, func(newNode, parent SQLNode) { + parent.(*IfStatement).ElseStatements = newNode.(*CompoundStatements) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + if a.post != nil { a.cur.replacer = replacer a.cur.parent = parent a.cur.node = node - kontinue := !a.pre(&a.cur) - if a.cur.revisit { - a.cur.revisit = false - return a.rewriteSQLNode(parent, a.cur.node, replacer) - } - if kontinue { - return true - } - } - if a.post != nil { - if a.pre == nil { - a.cur.replacer = replacer - a.cur.parent = parent - a.cur.node = node - } if !a.post(&a.cur) { return false } @@ -9576,6 +10330,55 @@ func (a *application) rewriteRefOfPrepareStmt(parent SQLNode, node *PrepareStmt, return true } +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfProcParameter(parent SQLNode, node *ProcParameter, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.collectPaths { + a.cur.current.AddStep(uint16(RefOfProcParameterName)) + } + if !a.rewriteIdentifierCI(node, node.Name, func(newNode, parent SQLNode) { + parent.(*ProcParameter).Name = newNode.(IdentifierCI) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + a.cur.current.AddStep(uint16(RefOfProcParameterType)) + } + if !a.rewriteRefOfColumnType(node, node.Type, func(newNode, parent SQLNode) { + parent.(*ProcParameter).Type = newNode.(*ColumnType) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.post(&a.cur) { + return false + } + } + return true +} + // Function Generation Source: PtrToStructMethod func (a *application) rewriteRefOfPurgeBinaryLogs(parent SQLNode, node *PurgeBinaryLogs, replacer replacerFunc) bool { if node == nil { @@ -10639,12 +11442,29 @@ func (a *application) rewriteRefOfSelectInto(parent SQLNode, node *SelectInto, r return true } } - if a.post != nil { - if a.pre == nil { - a.cur.replacer = replacer - a.cur.parent = parent - a.cur.node = node + for x, el := range node.VarList { + if a.collectPaths { + if x == 0 { + a.cur.current.AddStepWithOffset(uint16(RefOfSelectIntoVarListOffset)) + } else { + a.cur.current.ChangeOffset(x) + } + } + if !a.rewriteRefOfVariable(node, el, func(idx int) replacerFunc { + return func(newNode, parent SQLNode) { + parent.(*SelectInto).VarList[idx] = newNode.(*Variable) + } + }(x)) { + return false } + } + if a.collectPaths { + a.cur.current.Pop() + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node if !a.post(&a.cur) { return false } @@ -11140,6 +11960,145 @@ func (a *application) rewriteRefOfShowTransactionStatus(parent SQLNode, node *Sh return true } +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfSignal(parent SQLNode, node *Signal, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.collectPaths { + a.cur.current.AddStep(uint16(RefOfSignalCondition)) + } + if !a.rewriteHandlerCondition(node, node.Condition, func(newNode, parent SQLNode) { + parent.(*Signal).Condition = newNode.(HandlerCondition) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + for x, el := range node.SetValues { + if a.collectPaths { + if x == 0 { + a.cur.current.AddStepWithOffset(uint16(RefOfSignalSetValuesOffset)) + } else { + a.cur.current.ChangeOffset(x) + } + } + if !a.rewriteRefOfSignalSet(node, el, func(idx int) replacerFunc { + return func(newNode, parent SQLNode) { + parent.(*Signal).SetValues[idx] = newNode.(*SignalSet) + } + }(x)) { + return false + } + } + if a.collectPaths { + a.cur.current.Pop() + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.post(&a.cur) { + return false + } + } + return true +} + +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfSignalSet(parent SQLNode, node *SignalSet, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.collectPaths { + a.cur.current.AddStep(uint16(RefOfSignalSetValue)) + } + if !a.rewriteExpr(node, node.Value, func(newNode, parent SQLNode) { + parent.(*SignalSet).Value = newNode.(Expr) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.post(&a.cur) { + return false + } + } + return true +} + +// Function Generation Source: PtrToStructMethod +func (a *application) rewriteRefOfSingleStatement(parent SQLNode, node *SingleStatement, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + kontinue := !a.pre(&a.cur) + if a.cur.revisit { + a.cur.revisit = false + return a.rewriteSQLNode(parent, a.cur.node, replacer) + } + if kontinue { + return true + } + } + if a.collectPaths { + a.cur.current.AddStep(uint16(RefOfSingleStatementStatement)) + } + if !a.rewriteStatement(node, node.Statement, func(newNode, parent SQLNode) { + parent.(*SingleStatement).Statement = newNode.(Statement) + }) { + return false + } + if a.collectPaths { + a.cur.current.Pop() + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.post(&a.cur) { + return false + } + } + return true +} + // Function Generation Source: PtrToStructMethod func (a *application) rewriteRefOfStarExpr(parent SQLNode, node *StarExpr, replacer replacerFunc) bool { if node == nil { @@ -14075,6 +15034,34 @@ func (a *application) rewriteColTuple(parent SQLNode, node ColTuple, replacer re } } +// Function Generation Source: InterfaceMethod +func (a *application) rewriteCompoundStatement(parent SQLNode, node CompoundStatement, replacer replacerFunc) bool { + if node == nil { + return true + } + switch node := node.(type) { + case *BeginEndStatement: + return a.rewriteRefOfBeginEndStatement(parent, node, replacer) + case *DeclareCondition: + return a.rewriteRefOfDeclareCondition(parent, node, replacer) + case *DeclareHandler: + return a.rewriteRefOfDeclareHandler(parent, node, replacer) + case *DeclareVar: + return a.rewriteRefOfDeclareVar(parent, node, replacer) + case *IfStatement: + return a.rewriteRefOfIfStatement(parent, node, replacer) + case *Signal: + return a.rewriteRefOfSignal(parent, node, replacer) + case *SingleStatement: + return a.rewriteRefOfSingleStatement(parent, node, replacer) + case Visitable: + return a.rewriteVisitable(parent, node, replacer) + default: + // this should never happen + return true + } +} + // Function Generation Source: InterfaceMethod func (a *application) rewriteConstraintInfo(parent SQLNode, node ConstraintInfo, replacer replacerFunc) bool { if node == nil { @@ -14123,10 +15110,14 @@ func (a *application) rewriteDDLStatement(parent SQLNode, node DDLStatement, rep return a.rewriteRefOfAlterTable(parent, node, replacer) case *AlterView: return a.rewriteRefOfAlterView(parent, node, replacer) + case *CreateProcedure: + return a.rewriteRefOfCreateProcedure(parent, node, replacer) case *CreateTable: return a.rewriteRefOfCreateTable(parent, node, replacer) case *CreateView: return a.rewriteRefOfCreateView(parent, node, replacer) + case *DropProcedure: + return a.rewriteRefOfDropProcedure(parent, node, replacer) case *DropTable: return a.rewriteRefOfDropTable(parent, node, replacer) case *DropView: @@ -14409,6 +15400,32 @@ func (a *application) rewriteExpr(parent SQLNode, node Expr, replacer replacerFu } } +// Function Generation Source: InterfaceMethod +func (a *application) rewriteHandlerCondition(parent SQLNode, node HandlerCondition, replacer replacerFunc) bool { + if node == nil { + return true + } + switch node := node.(type) { + case *HandlerConditionErrorCode: + return a.rewriteRefOfHandlerConditionErrorCode(parent, node, replacer) + case *HandlerConditionNamed: + return a.rewriteRefOfHandlerConditionNamed(parent, node, replacer) + case *HandlerConditionNotFound: + return a.rewriteRefOfHandlerConditionNotFound(parent, node, replacer) + case *HandlerConditionSQLException: + return a.rewriteRefOfHandlerConditionSQLException(parent, node, replacer) + case *HandlerConditionSQLState: + return a.rewriteRefOfHandlerConditionSQLState(parent, node, replacer) + case *HandlerConditionSQLWarning: + return a.rewriteRefOfHandlerConditionSQLWarning(parent, node, replacer) + case Visitable: + return a.rewriteVisitable(parent, node, replacer) + default: + // this should never happen + return true + } +} + // Function Generation Source: InterfaceMethod func (a *application) rewriteInsertRows(parent SQLNode, node InsertRows, replacer replacerFunc) bool { if node == nil { @@ -14537,6 +15554,8 @@ func (a *application) rewriteStatement(parent SQLNode, node Statement, replacer return a.rewriteRefOfCommit(parent, node, replacer) case *CreateDatabase: return a.rewriteRefOfCreateDatabase(parent, node, replacer) + case *CreateProcedure: + return a.rewriteRefOfCreateProcedure(parent, node, replacer) case *CreateTable: return a.rewriteRefOfCreateTable(parent, node, replacer) case *CreateView: @@ -14547,6 +15566,8 @@ func (a *application) rewriteStatement(parent SQLNode, node Statement, replacer return a.rewriteRefOfDelete(parent, node, replacer) case *DropDatabase: return a.rewriteRefOfDropDatabase(parent, node, replacer) + case *DropProcedure: + return a.rewriteRefOfDropProcedure(parent, node, replacer) case *DropTable: return a.rewriteRefOfDropTable(parent, node, replacer) case *DropView: diff --git a/go/vt/sqlparser/ast_test.go b/go/vt/sqlparser/ast_test.go index f01b47cbd7b..98ba742afa8 100644 --- a/go/vt/sqlparser/ast_test.go +++ b/go/vt/sqlparser/ast_test.go @@ -697,7 +697,7 @@ func TestColumns_FindColumn(t *testing.T) { } } -func TestSplitStatements(t *testing.T) { +func TestParseMultipleIgnoreEmpty(t *testing.T) { testcases := []struct { input string stmts int @@ -706,6 +706,9 @@ func TestSplitStatements(t *testing.T) { { input: "select * from table1; \t; \n; \n\t\t ;select * from table1;", stmts: 2, + }, { + input: "select 1; ; ; select 2; /* Comment only */; /* Comment */; select 3;;;; /* Comment */", + stmts: 3, }, { input: "select * from table1", stmts: 1, @@ -757,7 +760,7 @@ func TestSplitStatements(t *testing.T) { parser := NewTestParser() for _, tcase := range testcases { t.Run(tcase.input, func(t *testing.T) { - statements, err := parser.SplitStatements(tcase.input) + statements, err := parser.ParseMultipleIgnoreEmpty(tcase.input) if tcase.wantErr { assert.Error(t, err) } else { @@ -768,77 +771,6 @@ func TestSplitStatements(t *testing.T) { } } -func TestSplitStatementToPieces(t *testing.T) { - testcases := []struct { - input string - output string - }{{ - input: "select * from table1; \t; \n; \n\t\t ;select * from table1;", - output: "select * from table1;select * from table1", - }, { - input: "select * from table", - }, { - input: "select * from table;", - output: "select * from table", - }, { - input: "select * from table; ", - output: "select * from table", - }, { - input: "select * from table1; select * from table2;", - output: "select * from table1; select * from table2", - }, { - input: "select * from /* comment ; */ table;", - output: "select * from /* comment ; */ table", - }, { - input: "select * from table where semi = ';';", - output: "select * from table where semi = ';'", - }, { - input: "select * from table1;--comment;\nselect * from table2;", - output: "select * from table1;--comment;\nselect * from table2", - }, { - input: "CREATE TABLE `total_data` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', " + - "`region` varchar(32) NOT NULL COMMENT 'region name, like zh; th; kepler'," + - "`data_size` bigint NOT NULL DEFAULT '0' COMMENT 'data size;'," + - "`createtime` datetime NOT NULL DEFAULT NOW() COMMENT 'create time;'," + - "`comment` varchar(100) NOT NULL DEFAULT '' COMMENT 'comment'," + - "PRIMARY KEY (`id`))", - }, { - input: "create table t1 (id int primary key); create table t2 (id int primary key);", - output: "create table t1 (id int primary key); create table t2 (id int primary key)", - }, { - input: ";;; create table t1 (id int primary key);;; ;create table t2 (id int primary key);", - output: " create table t1 (id int primary key);create table t2 (id int primary key)", - }, { - // The input doesn't have to be valid SQL statements! - input: ";create table t1 ;create table t2 (id;", - output: "create table t1 ;create table t2 (id", - }, { - // Ignore quoted semicolon - input: ";create table t1 ';';;;create table t2 (id;", - output: "create table t1 ';';create table t2 (id", - }, { - // Ignore quoted semicolon - input: "stop replica; start replica", - output: "stop replica; start replica", - }, - } - - parser := NewTestParser() - for _, tcase := range testcases { - t.Run(tcase.input, func(t *testing.T) { - if tcase.output == "" { - tcase.output = tcase.input - } - - stmtPieces, err := parser.SplitStatementToPieces(tcase.input) - require.NoError(t, err) - - out := strings.Join(stmtPieces, ";") - require.Equal(t, tcase.output, out) - }) - } -} - func TestTypeConversion(t *testing.T) { ct1 := &ColumnType{Type: "BIGINT"} ct2 := &ColumnType{Type: "bigint"} diff --git a/go/vt/sqlparser/ast_visit.go b/go/vt/sqlparser/ast_visit.go index 575d563cfd3..1592975af27 100644 --- a/go/vt/sqlparser/ast_visit.go +++ b/go/vt/sqlparser/ast_visit.go @@ -70,6 +70,8 @@ func VisitSQLNode(in SQLNode, f Visit) error { return VisitRefOfAvg(in, f) case *Begin: return VisitRefOfBegin(in, f) + case *BeginEndStatement: + return VisitRefOfBeginEndStatement(in, f) case *BetweenExpr: return VisitRefOfBetweenExpr(in, f) case *BinaryExpr: @@ -112,6 +114,8 @@ func VisitSQLNode(in SQLNode, f Visit) error { return VisitRefOfCommonTableExpr(in, f) case *ComparisonExpr: return VisitRefOfComparisonExpr(in, f) + case *CompoundStatements: + return VisitRefOfCompoundStatements(in, f) case *ConstraintDefinition: return VisitRefOfConstraintDefinition(in, f) case *ConvertExpr: @@ -126,6 +130,8 @@ func VisitSQLNode(in SQLNode, f Visit) error { return VisitRefOfCountStar(in, f) case *CreateDatabase: return VisitRefOfCreateDatabase(in, f) + case *CreateProcedure: + return VisitRefOfCreateProcedure(in, f) case *CreateTable: return VisitRefOfCreateTable(in, f) case *CreateView: @@ -134,6 +140,12 @@ func VisitSQLNode(in SQLNode, f Visit) error { return VisitRefOfCurTimeFuncExpr(in, f) case *DeallocateStmt: return VisitRefOfDeallocateStmt(in, f) + case *DeclareCondition: + return VisitRefOfDeclareCondition(in, f) + case *DeclareHandler: + return VisitRefOfDeclareHandler(in, f) + case *DeclareVar: + return VisitRefOfDeclareVar(in, f) case *Default: return VisitRefOfDefault(in, f) case *Definer: @@ -148,10 +160,14 @@ func VisitSQLNode(in SQLNode, f Visit) error { return VisitRefOfDropDatabase(in, f) case *DropKey: return VisitRefOfDropKey(in, f) + case *DropProcedure: + return VisitRefOfDropProcedure(in, f) case *DropTable: return VisitRefOfDropTable(in, f) case *DropView: return VisitRefOfDropView(in, f) + case *ElseIfBlock: + return VisitRefOfElseIfBlock(in, f) case *ExecuteStmt: return VisitRefOfExecuteStmt(in, f) case *ExistsExpr: @@ -208,10 +224,24 @@ func VisitSQLNode(in SQLNode, f Visit) error { return VisitRefOfGroupBy(in, f) case *GroupConcatExpr: return VisitRefOfGroupConcatExpr(in, f) + case *HandlerConditionErrorCode: + return VisitRefOfHandlerConditionErrorCode(in, f) + case *HandlerConditionNamed: + return VisitRefOfHandlerConditionNamed(in, f) + case *HandlerConditionNotFound: + return VisitRefOfHandlerConditionNotFound(in, f) + case *HandlerConditionSQLException: + return VisitRefOfHandlerConditionSQLException(in, f) + case *HandlerConditionSQLState: + return VisitRefOfHandlerConditionSQLState(in, f) + case *HandlerConditionSQLWarning: + return VisitRefOfHandlerConditionSQLWarning(in, f) case IdentifierCI: return VisitIdentifierCI(in, f) case IdentifierCS: return VisitIdentifierCS(in, f) + case *IfStatement: + return VisitRefOfIfStatement(in, f) case *IndexDefinition: return VisitRefOfIndexDefinition(in, f) case *IndexHint: @@ -396,6 +426,8 @@ func VisitSQLNode(in SQLNode, f Visit) error { return VisitRefOfPolygonPropertyFuncExpr(in, f) case *PrepareStmt: return VisitRefOfPrepareStmt(in, f) + case *ProcParameter: + return VisitRefOfProcParameter(in, f) case *PurgeBinaryLogs: return VisitRefOfPurgeBinaryLogs(in, f) case ReferenceAction: @@ -462,6 +494,12 @@ func VisitSQLNode(in SQLNode, f Visit) error { return VisitRefOfShowThrottlerStatus(in, f) case *ShowTransactionStatus: return VisitRefOfShowTransactionStatus(in, f) + case *Signal: + return VisitRefOfSignal(in, f) + case *SignalSet: + return VisitRefOfSignalSet(in, f) + case *SingleStatement: + return VisitRefOfSingleStatement(in, f) case *StarExpr: return VisitRefOfStarExpr(in, f) case *Std: @@ -913,6 +951,18 @@ func VisitRefOfBegin(in *Begin, f Visit) error { } return nil } +func VisitRefOfBeginEndStatement(in *BeginEndStatement, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + if err := VisitRefOfCompoundStatements(in.Statements, f); err != nil { + return err + } + return nil +} func VisitRefOfBetweenExpr(in *BetweenExpr, f Visit) error { if in == nil { return nil @@ -1206,6 +1256,20 @@ func VisitRefOfComparisonExpr(in *ComparisonExpr, f Visit) error { } return nil } +func VisitRefOfCompoundStatements(in *CompoundStatements, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + for _, el := range in.Statements { + if err := VisitCompoundStatement(el, f); err != nil { + return err + } + } + return nil +} func VisitRefOfConstraintDefinition(in *ConstraintDefinition, f Visit) error { if in == nil { return nil @@ -1301,6 +1365,32 @@ func VisitRefOfCreateDatabase(in *CreateDatabase, f Visit) error { } return nil } +func VisitRefOfCreateProcedure(in *CreateProcedure, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + if err := VisitTableName(in.Name, f); err != nil { + return err + } + if err := VisitRefOfParsedComments(in.Comments, f); err != nil { + return err + } + if err := VisitRefOfDefiner(in.Definer, f); err != nil { + return err + } + for _, el := range in.Params { + if err := VisitRefOfProcParameter(el, f); err != nil { + return err + } + } + if err := VisitCompoundStatement(in.Body, f); err != nil { + return err + } + return nil +} func VisitRefOfCreateTable(in *CreateTable, f Visit) error { if in == nil { return nil @@ -1373,6 +1463,55 @@ func VisitRefOfDeallocateStmt(in *DeallocateStmt, f Visit) error { } return nil } +func VisitRefOfDeclareCondition(in *DeclareCondition, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + if err := VisitIdentifierCI(in.Name, f); err != nil { + return err + } + if err := VisitHandlerCondition(in.Condition, f); err != nil { + return err + } + return nil +} +func VisitRefOfDeclareHandler(in *DeclareHandler, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + for _, el := range in.Conditions { + if err := VisitHandlerCondition(el, f); err != nil { + return err + } + } + if err := VisitCompoundStatement(in.Statement, f); err != nil { + return err + } + return nil +} +func VisitRefOfDeclareVar(in *DeclareVar, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + for _, el := range in.VarNames { + if err := VisitIdentifierCI(el, f); err != nil { + return err + } + } + if err := VisitRefOfColumnType(in.Type, f); err != nil { + return err + } + return nil +} func VisitRefOfDefault(in *Default, f Visit) error { if in == nil { return nil @@ -1477,6 +1616,21 @@ func VisitRefOfDropKey(in *DropKey, f Visit) error { } return nil } +func VisitRefOfDropProcedure(in *DropProcedure, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + if err := VisitRefOfParsedComments(in.Comments, f); err != nil { + return err + } + if err := VisitTableName(in.Name, f); err != nil { + return err + } + return nil +} func VisitRefOfDropTable(in *DropTable, f Visit) error { if in == nil { return nil @@ -1507,6 +1661,21 @@ func VisitRefOfDropView(in *DropView, f Visit) error { } return nil } +func VisitRefOfElseIfBlock(in *ElseIfBlock, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + if err := VisitExpr(in.SearchCondition, f); err != nil { + return err + } + if err := VisitRefOfCompoundStatements(in.ThenStatements, f); err != nil { + return err + } + return nil +} func VisitRefOfExecuteStmt(in *ExecuteStmt, f Visit) error { if in == nil { return nil @@ -1937,6 +2106,66 @@ func VisitRefOfGroupConcatExpr(in *GroupConcatExpr, f Visit) error { } return nil } +func VisitRefOfHandlerConditionErrorCode(in *HandlerConditionErrorCode, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + return nil +} +func VisitRefOfHandlerConditionNamed(in *HandlerConditionNamed, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + if err := VisitIdentifierCI(in.Name, f); err != nil { + return err + } + return nil +} +func VisitRefOfHandlerConditionNotFound(in *HandlerConditionNotFound, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + return nil +} +func VisitRefOfHandlerConditionSQLException(in *HandlerConditionSQLException, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + return nil +} +func VisitRefOfHandlerConditionSQLState(in *HandlerConditionSQLState, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + if err := VisitRefOfLiteral(in.SQLStateValue, f); err != nil { + return err + } + return nil +} +func VisitRefOfHandlerConditionSQLWarning(in *HandlerConditionSQLWarning, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + return nil +} func VisitIdentifierCI(in IdentifierCI, f Visit) error { if cont, err := f(in); err != nil || !cont { return err @@ -1949,6 +2178,29 @@ func VisitIdentifierCS(in IdentifierCS, f Visit) error { } return nil } +func VisitRefOfIfStatement(in *IfStatement, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + if err := VisitExpr(in.SearchCondition, f); err != nil { + return err + } + if err := VisitRefOfCompoundStatements(in.ThenStatements, f); err != nil { + return err + } + for _, el := range in.ElseIfBlocks { + if err := VisitRefOfElseIfBlock(el, f); err != nil { + return err + } + } + if err := VisitRefOfCompoundStatements(in.ElseStatements, f); err != nil { + return err + } + return nil +} func VisitRefOfIndexDefinition(in *IndexDefinition, f Visit) error { if in == nil { return nil @@ -3286,6 +3538,21 @@ func VisitRefOfPrepareStmt(in *PrepareStmt, f Visit) error { } return nil } +func VisitRefOfProcParameter(in *ProcParameter, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + if err := VisitIdentifierCI(in.Name, f); err != nil { + return err + } + if err := VisitRefOfColumnType(in.Type, f); err != nil { + return err + } + return nil +} func VisitRefOfPurgeBinaryLogs(in *PurgeBinaryLogs, f Visit) error { if in == nil { return nil @@ -3612,6 +3879,11 @@ func VisitRefOfSelectInto(in *SelectInto, f Visit) error { if cont, err := f(in); err != nil || !cont { return err } + for _, el := range in.VarList { + if err := VisitRefOfVariable(el, f); err != nil { + return err + } + } return nil } func VisitRefOfSet(in *Set, f Visit) error { @@ -3760,6 +4032,47 @@ func VisitRefOfShowTransactionStatus(in *ShowTransactionStatus, f Visit) error { } return nil } +func VisitRefOfSignal(in *Signal, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + if err := VisitHandlerCondition(in.Condition, f); err != nil { + return err + } + for _, el := range in.SetValues { + if err := VisitRefOfSignalSet(el, f); err != nil { + return err + } + } + return nil +} +func VisitRefOfSignalSet(in *SignalSet, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + if err := VisitExpr(in.Value, f); err != nil { + return err + } + return nil +} +func VisitRefOfSingleStatement(in *SingleStatement, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + if err := VisitStatement(in.Statement, f); err != nil { + return err + } + return nil +} func VisitRefOfStarExpr(in *StarExpr, f Visit) error { if in == nil { return nil @@ -4842,6 +5155,32 @@ func VisitColTuple(in ColTuple, f Visit) error { return nil } } +func VisitCompoundStatement(in CompoundStatement, f Visit) error { + if in == nil { + return nil + } + switch in := in.(type) { + case *BeginEndStatement: + return VisitRefOfBeginEndStatement(in, f) + case *DeclareCondition: + return VisitRefOfDeclareCondition(in, f) + case *DeclareHandler: + return VisitRefOfDeclareHandler(in, f) + case *DeclareVar: + return VisitRefOfDeclareVar(in, f) + case *IfStatement: + return VisitRefOfIfStatement(in, f) + case *Signal: + return VisitRefOfSignal(in, f) + case *SingleStatement: + return VisitRefOfSingleStatement(in, f) + case Visitable: + return VisitVisitable(in, f) + default: + // this should never happen + return nil + } +} func VisitConstraintInfo(in ConstraintInfo, f Visit) error { if in == nil { return nil @@ -4885,10 +5224,14 @@ func VisitDDLStatement(in DDLStatement, f Visit) error { return VisitRefOfAlterTable(in, f) case *AlterView: return VisitRefOfAlterView(in, f) + case *CreateProcedure: + return VisitRefOfCreateProcedure(in, f) case *CreateTable: return VisitRefOfCreateTable(in, f) case *CreateView: return VisitRefOfCreateView(in, f) + case *DropProcedure: + return VisitRefOfDropProcedure(in, f) case *DropTable: return VisitRefOfDropTable(in, f) case *DropView: @@ -5166,6 +5509,30 @@ func VisitExpr(in Expr, f Visit) error { return nil } } +func VisitHandlerCondition(in HandlerCondition, f Visit) error { + if in == nil { + return nil + } + switch in := in.(type) { + case *HandlerConditionErrorCode: + return VisitRefOfHandlerConditionErrorCode(in, f) + case *HandlerConditionNamed: + return VisitRefOfHandlerConditionNamed(in, f) + case *HandlerConditionNotFound: + return VisitRefOfHandlerConditionNotFound(in, f) + case *HandlerConditionSQLException: + return VisitRefOfHandlerConditionSQLException(in, f) + case *HandlerConditionSQLState: + return VisitRefOfHandlerConditionSQLState(in, f) + case *HandlerConditionSQLWarning: + return VisitRefOfHandlerConditionSQLWarning(in, f) + case Visitable: + return VisitVisitable(in, f) + default: + // this should never happen + return nil + } +} func VisitInsertRows(in InsertRows, f Visit) error { if in == nil { return nil @@ -5283,6 +5650,8 @@ func VisitStatement(in Statement, f Visit) error { return VisitRefOfCommit(in, f) case *CreateDatabase: return VisitRefOfCreateDatabase(in, f) + case *CreateProcedure: + return VisitRefOfCreateProcedure(in, f) case *CreateTable: return VisitRefOfCreateTable(in, f) case *CreateView: @@ -5293,6 +5662,8 @@ func VisitStatement(in Statement, f Visit) error { return VisitRefOfDelete(in, f) case *DropDatabase: return VisitRefOfDropDatabase(in, f) + case *DropProcedure: + return VisitRefOfDropProcedure(in, f) case *DropTable: return VisitRefOfDropTable(in, f) case *DropView: diff --git a/go/vt/sqlparser/cached_size.go b/go/vt/sqlparser/cached_size.go index ffab0863f8e..7743a86172b 100644 --- a/go/vt/sqlparser/cached_size.go +++ b/go/vt/sqlparser/cached_size.go @@ -429,6 +429,18 @@ func (cached *Begin) CachedSize(alloc bool) int64 { } return size } +func (cached *BeginEndStatement) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(8) + } + // field Statements *vitess.io/vitess/go/vt/sqlparser.CompoundStatements + size += cached.Statements.CachedSize(true) + return size +} func (cached *BetweenExpr) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) @@ -892,6 +904,25 @@ func (cached *ComparisonExpr) CachedSize(alloc bool) int64 { } return size } +func (cached *CompoundStatements) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(24) + } + // field Statements []vitess.io/vitess/go/vt/sqlparser.CompoundStatement + { + size += hack.RuntimeAllocSize(int64(cap(cached.Statements)) * int64(16)) + for _, elem := range cached.Statements { + if cc, ok := elem.(cachedObject); ok { + size += cc.CachedSize(true) + } + } + } + return size +} func (cached *ConstraintDefinition) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) @@ -1012,6 +1043,33 @@ func (cached *CreateDatabase) CachedSize(alloc bool) int64 { } return size } +func (cached *CreateProcedure) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(96) + } + // field Name vitess.io/vitess/go/vt/sqlparser.TableName + size += cached.Name.CachedSize(false) + // field Comments *vitess.io/vitess/go/vt/sqlparser.ParsedComments + size += cached.Comments.CachedSize(true) + // field Definer *vitess.io/vitess/go/vt/sqlparser.Definer + size += cached.Definer.CachedSize(true) + // field Params []*vitess.io/vitess/go/vt/sqlparser.ProcParameter + { + size += hack.RuntimeAllocSize(int64(cap(cached.Params)) * int64(8)) + for _, elem := range cached.Params { + size += elem.CachedSize(true) + } + } + // field Body vitess.io/vitess/go/vt/sqlparser.CompoundStatement + if cc, ok := cached.Body.(cachedObject); ok { + size += cc.CachedSize(true) + } + return size +} func (cached *CreateTable) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) @@ -1101,6 +1159,64 @@ func (cached *DeallocateStmt) CachedSize(alloc bool) int64 { size += cached.Name.CachedSize(false) return size } +func (cached *DeclareCondition) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(48) + } + // field Name vitess.io/vitess/go/vt/sqlparser.IdentifierCI + size += cached.Name.CachedSize(false) + // field Condition vitess.io/vitess/go/vt/sqlparser.HandlerCondition + if cc, ok := cached.Condition.(cachedObject); ok { + size += cc.CachedSize(true) + } + return size +} +func (cached *DeclareHandler) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(48) + } + // field Conditions []vitess.io/vitess/go/vt/sqlparser.HandlerCondition + { + size += hack.RuntimeAllocSize(int64(cap(cached.Conditions)) * int64(16)) + for _, elem := range cached.Conditions { + if cc, ok := elem.(cachedObject); ok { + size += cc.CachedSize(true) + } + } + } + // field Statement vitess.io/vitess/go/vt/sqlparser.CompoundStatement + if cc, ok := cached.Statement.(cachedObject); ok { + size += cc.CachedSize(true) + } + return size +} +func (cached *DeclareVar) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(32) + } + // field VarNames []vitess.io/vitess/go/vt/sqlparser.IdentifierCI + { + size += hack.RuntimeAllocSize(int64(cap(cached.VarNames)) * int64(32)) + for _, elem := range cached.VarNames { + size += elem.CachedSize(false) + } + } + // field Type *vitess.io/vitess/go/vt/sqlparser.ColumnType + size += cached.Type.CachedSize(true) + return size +} func (cached *Default) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) @@ -1227,6 +1343,20 @@ func (cached *DropKey) CachedSize(alloc bool) int64 { size += cached.Name.CachedSize(false) return size } +func (cached *DropProcedure) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(48) + } + // field Comments *vitess.io/vitess/go/vt/sqlparser.ParsedComments + size += cached.Comments.CachedSize(true) + // field Name vitess.io/vitess/go/vt/sqlparser.TableName + size += cached.Name.CachedSize(false) + return size +} func (cached *DropTable) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) @@ -1265,6 +1395,22 @@ func (cached *DropView) CachedSize(alloc bool) int64 { size += cached.Comments.CachedSize(true) return size } +func (cached *ElseIfBlock) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(24) + } + // field SearchCondition vitess.io/vitess/go/vt/sqlparser.Expr + if cc, ok := cached.SearchCondition.(cachedObject); ok { + size += cc.CachedSize(true) + } + // field ThenStatements *vitess.io/vitess/go/vt/sqlparser.CompoundStatements + size += cached.ThenStatements.CachedSize(true) + return size +} func (cached *ExecuteStmt) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) @@ -1747,6 +1893,40 @@ func (cached *GroupConcatExpr) CachedSize(alloc bool) int64 { size += cached.Limit.CachedSize(true) return size } +func (cached *HandlerConditionErrorCode) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(8) + } + return size +} +func (cached *HandlerConditionNamed) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(32) + } + // field Name vitess.io/vitess/go/vt/sqlparser.IdentifierCI + size += cached.Name.CachedSize(false) + return size +} +func (cached *HandlerConditionSQLState) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(8) + } + // field SQLStateValue *vitess.io/vitess/go/vt/sqlparser.Literal + size += cached.SQLStateValue.CachedSize(true) + return size +} func (cached *IdentifierCI) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) @@ -1773,6 +1953,31 @@ func (cached *IdentifierCS) CachedSize(alloc bool) int64 { size += hack.RuntimeAllocSize(int64(len(cached.v))) return size } +func (cached *IfStatement) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(64) + } + // field SearchCondition vitess.io/vitess/go/vt/sqlparser.Expr + if cc, ok := cached.SearchCondition.(cachedObject); ok { + size += cc.CachedSize(true) + } + // field ThenStatements *vitess.io/vitess/go/vt/sqlparser.CompoundStatements + size += cached.ThenStatements.CachedSize(true) + // field ElseIfBlocks []*vitess.io/vitess/go/vt/sqlparser.ElseIfBlock + { + size += hack.RuntimeAllocSize(int64(cap(cached.ElseIfBlocks)) * int64(8)) + for _, elem := range cached.ElseIfBlocks { + size += elem.CachedSize(true) + } + } + // field ElseStatements *vitess.io/vitess/go/vt/sqlparser.CompoundStatements + size += cached.ElseStatements.CachedSize(true) + return size +} func (cached *IndexColumn) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) @@ -3498,6 +3703,20 @@ func (cached *PrepareStmt) CachedSize(alloc bool) int64 { size += cached.Comments.CachedSize(true) return size } +func (cached *ProcParameter) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(48) + } + // field Name vitess.io/vitess/go/vt/sqlparser.IdentifierCI + size += cached.Name.CachedSize(false) + // field Type *vitess.io/vitess/go/vt/sqlparser.ColumnType + size += cached.Type.CachedSize(true) + return size +} func (cached *PurgeBinaryLogs) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) @@ -3885,7 +4104,14 @@ func (cached *SelectInto) CachedSize(alloc bool) int64 { } size := int64(0) if alloc { - size += int64(112) + size += int64(144) + } + // field VarList []*vitess.io/vitess/go/vt/sqlparser.Variable + { + size += hack.RuntimeAllocSize(int64(cap(cached.VarList)) * int64(8)) + for _, elem := range cached.VarList { + size += elem.CachedSize(true) + } } // field FileName string size += hack.RuntimeAllocSize(int64(len(cached.FileName))) @@ -4082,6 +4308,55 @@ func (cached *ShowTransactionStatus) CachedSize(alloc bool) int64 { size += hack.RuntimeAllocSize(int64(len(cached.TransactionID))) return size } +func (cached *Signal) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(48) + } + // field Condition vitess.io/vitess/go/vt/sqlparser.HandlerCondition + if cc, ok := cached.Condition.(cachedObject); ok { + size += cc.CachedSize(true) + } + // field SetValues []*vitess.io/vitess/go/vt/sqlparser.SignalSet + { + size += hack.RuntimeAllocSize(int64(cap(cached.SetValues)) * int64(8)) + for _, elem := range cached.SetValues { + size += elem.CachedSize(true) + } + } + return size +} +func (cached *SignalSet) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(24) + } + // field Value vitess.io/vitess/go/vt/sqlparser.Expr + if cc, ok := cached.Value.(cachedObject); ok { + size += cc.CachedSize(true) + } + return size +} +func (cached *SingleStatement) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(16) + } + // field Statement vitess.io/vitess/go/vt/sqlparser.Statement + if cc, ok := cached.Statement.(cachedObject); ok { + size += cc.CachedSize(true) + } + return size +} func (cached *StarExpr) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) diff --git a/go/vt/sqlparser/constants.go b/go/vt/sqlparser/constants.go index 49955b8d4d8..6889141c9d2 100644 --- a/go/vt/sqlparser/constants.go +++ b/go/vt/sqlparser/constants.go @@ -160,6 +160,29 @@ const ( RegexpStr = "regexp" NotRegexpStr = "not regexp" + // ProcParameterMode + OutStr = "out" + InoutStr = "inout" + + // SignalConditionName + ClassOriginTypeStr = "class_origin" + SubclassOriginTypeStr = "subclass_origin" + MessageTextTypeStr = "message_text" + MySQLErrNoTypeStr = "mysql_errno" + ConstraintCatalogTypeStr = "constraint_catalog" + ConstraintSchemaTypeStr = "constraint_schema" + ConstraintNameTypeStr = "constraint_name" + CatalogNameTypeStr = "catalog_name" + SchemaNameTypeStr = "schema_name" + TableNameTypeStr = "table_name" + ColumnNameTypeStr = "column_name" + CursorNameTypeStr = "cursor_name" + + // HandlerAction + ContinueStr = "continue" + ExitStr = "exit" + UndoStr = "undo" + // IsExpr.Operator IsNullStr = "is null" IsNotNullStr = "is not null" @@ -511,6 +534,7 @@ const ( AddAutoIncDDLAction DropAutoIncDDLAction RevertDDLAction + CreateProcedureAction ) // Constants for scope of variables @@ -538,6 +562,13 @@ const ( ForUpdateLockSkipLocked ) +// Constants for Enum Type - HandlerAction +const ( + ContinueAction HandlerAction = iota + ExitAction + UndoAction +) + // Constants for Enum Type - TrimType const ( NoTrimType TrimType = iota @@ -775,6 +806,29 @@ const ( UpgradeAction ) +// Constant for Enum Type - ProcParameterMode +const ( + InMode ProcParameterMode = iota + OutMode + InoutMode +) + +// Constant for Enum Type - SignalConditionName +const ( + ClassOriginType SignalConditionName = iota + SubclassOriginType + MessageTextType + MySQLErrNoType + ConstraintCatalogType + ConstraintSchemaType + ConstraintNameType + CatalogNameType + SchemaNameType + TableNameType + ColumnNameType + CursorNameType +) + // Constant for Enum Type - PartitionByType const ( HashType PartitionByType = iota @@ -812,6 +866,7 @@ const ( IntoOutfile SelectIntoType = iota IntoOutfileS3 IntoDumpfile + IntoVariables ) // Constant for Enum Type - JtOnResponseType diff --git a/go/vt/sqlparser/keywords.go b/go/vt/sqlparser/keywords.go index 2f1a220066d..c851eed64cf 100644 --- a/go/vt/sqlparser/keywords.go +++ b/go/vt/sqlparser/keywords.go @@ -158,6 +158,7 @@ var keywords = []keyword{ {"cascaded", CASCADED}, {"case", CASE}, {"cast", CAST}, + {"catalog_name", CATALOG_NAME}, {"channel", CHANNEL}, {"change", CHANGE}, {"char", CHAR}, @@ -165,12 +166,14 @@ var keywords = []keyword{ {"charset", CHARSET}, {"check", CHECK}, {"checksum", CHECKSUM}, + {"class_origin", CLASS_ORIGIN}, {"cleanup", CLEANUP}, {"coalesce", COALESCE}, {"code", CODE}, {"collate", COLLATE}, {"collation", COLLATION}, {"column", COLUMN}, + {"column_name", COLUMN_NAME}, {"column_format", COLUMN_FORMAT}, {"columns", COLUMNS}, {"comment", COMMENT_KEYWORD}, @@ -180,11 +183,14 @@ var keywords = []keyword{ {"complete", COMPLETE}, {"compressed", COMPRESSED}, {"compression", COMPRESSION}, - {"condition", UNUSED}, + {"condition", CONDITION}, {"connection", CONNECTION}, {"consistent", CONSISTENT}, {"constraint", CONSTRAINT}, - {"continue", UNUSED}, + {"constraint_catalog", CONSTRAINT_CATALOG}, + {"constraint_name", CONSTRAINT_NAME}, + {"constraint_schema", CONSTRAINT_SCHEMA}, + {"continue", CONTINUE}, {"convert", CONVERT}, {"copy", COPY}, {"count", COUNT}, @@ -205,6 +211,7 @@ var keywords = []keyword{ {"current_timestamp", CURRENT_TIMESTAMP}, {"current_user", CURRENT_USER}, {"cursor", UNUSED}, + {"cursor_name", CURSOR_NAME}, {"cutover_threshold", CUTOVER_THRESHOLD}, {"data", DATA}, {"database", DATABASE}, @@ -221,7 +228,7 @@ var keywords = []keyword{ {"deallocate", DEALLOCATE}, {"dec", UNUSED}, {"decimal", DECIMAL_TYPE}, - {"declare", UNUSED}, + {"declare", DECLARE}, {"default", DEFAULT}, {"definer", DEFINER}, {"delay_key_write", DELAY_KEY_WRITE}, @@ -246,7 +253,7 @@ var keywords = []keyword{ {"dynamic", DYNAMIC}, {"each", UNUSED}, {"else", ELSE}, - {"elseif", UNUSED}, + {"elseif", ELSEIF}, {"empty", EMPTY}, {"enable", ENABLE}, {"enclosed", ENCLOSED}, @@ -266,7 +273,7 @@ var keywords = []keyword{ {"exclusive", EXCLUSIVE}, {"execute", EXECUTE}, {"exists", EXISTS}, - {"exit", UNUSED}, + {"exit", EXIT}, {"explain", EXPLAIN}, {"expansion", EXPANSION}, {"expire", EXPIRE}, @@ -292,6 +299,7 @@ var keywords = []keyword{ {"format", FORMAT}, {"format_bytes", FORMAT_BYTES}, {"format_pico_time", FORMAT_PICO_TIME}, + {"found", FOUND}, {"from", FROM}, {"full", FULL}, {"fulltext", FULLTEXT}, @@ -313,6 +321,7 @@ var keywords = []keyword{ {"grouping", UNUSED}, {"groups", UNUSED}, {"group_concat", GROUP_CONCAT}, + {"handler", HANDLER}, {"hash", HASH}, {"having", HAVING}, {"header", HEADER}, @@ -329,7 +338,7 @@ var keywords = []keyword{ {"index", INDEX}, {"indexes", INDEXES}, {"infile", UNUSED}, - {"inout", UNUSED}, + {"inout", INOUT}, {"inner", INNER}, {"inplace", INPLACE}, {"insensitive", UNUSED}, @@ -441,6 +450,7 @@ var keywords = []keyword{ {"memory", MEMORY}, {"member", MEMBER}, {"merge", MERGE}, + {"message_text", MESSAGE_TEXT}, {"microsecond", MICROSECOND}, {"middleint", UNUSED}, {"min_rows", MIN_ROWS}, @@ -455,6 +465,7 @@ var keywords = []keyword{ {"multipoint", MULTIPOINT}, {"multipolygon", MULTIPOLYGON}, {"month", MONTH}, + {"mysql_errno", MYSQL_ERRNO}, {"name", NAME}, {"names", NAMES}, {"natural", NATURAL}, @@ -486,7 +497,7 @@ var keywords = []keyword{ {"or", OR}, {"order", ORDER}, {"ordinality", ORDINALITY}, - {"out", UNUSED}, + {"out", OUT}, {"outer", OUTER}, {"outfile", OUTFILE}, {"over", OVER}, @@ -569,6 +580,7 @@ var keywords = []keyword{ {"s3", S3}, {"savepoint", SAVEPOINT}, {"schema", SCHEMA}, + {"schema_name", SCHEMA_NAME}, {"schemas", SCHEMAS}, {"second", SECOND}, {"second_microsecond", SECOND_MICROSECOND}, @@ -584,7 +596,7 @@ var keywords = []keyword{ {"share", SHARE}, {"shared", SHARED}, {"show", SHOW}, - {"signal", UNUSED}, + {"signal", SIGNAL}, {"signed", SIGNED}, {"simple", SIMPLE}, {"skip", SKIP}, @@ -595,9 +607,9 @@ var keywords = []keyword{ {"spatial", SPATIAL}, {"specific", UNUSED}, {"sql", SQL}, - {"sqlexception", UNUSED}, - {"sqlstate", UNUSED}, - {"sqlwarning", UNUSED}, + {"sqlexception", SQLEXCEPTION}, + {"sqlstate", SQLSTATE}, + {"sqlwarning", SQLWARNING}, {"sql_big_result", SQL_BIG_RESULT}, {"sql_cache", SQL_CACHE}, {"sql_calc_found_rows", SQL_CALC_FOUND_ROWS}, @@ -693,11 +705,13 @@ var keywords = []keyword{ {"st_startpoint", ST_StartPoint}, {"st_x", ST_X}, {"st_y", ST_Y}, + {"subclass_origin", SUBCLASS_ORIGIN}, {"subdate", SUBDATE}, {"sum", SUM}, {"sysdate", SYSDATE}, {"system", UNUSED}, {"table", TABLE}, + {"table_name", TABLE_NAME}, {"tables", TABLES}, {"tablesample", TABLESAMPLE}, {"tablespace", TABLESPACE}, @@ -730,7 +744,7 @@ var keywords = []keyword{ {"unbounded", UNBOUNDED}, {"uncommitted", UNCOMMITTED}, {"undefined", UNDEFINED}, - {"undo", UNUSED}, + {"undo", UNDO}, {"unicode", UNICODE}, {"union", UNION}, {"unique", UNIQUE}, diff --git a/go/vt/sqlparser/normalizer.go b/go/vt/sqlparser/normalizer.go index c0d0d8000ed..e435ad0957d 100644 --- a/go/vt/sqlparser/normalizer.go +++ b/go/vt/sqlparser/normalizer.go @@ -648,14 +648,22 @@ func (nz *normalizer) rewriteNotExpr(cursor *Cursor, node *NotExpr) { // rewriteVariable handles the rewriting of variable expressions to bind variables. func (nz *normalizer) rewriteVariable(cursor *Cursor, node *Variable) { - // Do not rewrite variables on the left side of SET assignments. + // Only rewrite scope for variables on the left side of SET assignments. if v, isSet := cursor.Parent().(*SetExpr); isSet && v.Var == node { + if node.Scope == NoScope { + // We rewrite the NoScope to session scope for SET statements + // that we plan. Previously we used to do this during parsing itself, + // but we needed to change that to allow for set statements in a + // create procedure statement that sometimes set locally defined variables + // that aren't in the session scope. + node.Scope = SessionScope + } return } switch node.Scope { case VariableScope: nz.udvRewrite(cursor, node) - case SessionScope, NextTxScope: + case SessionScope, NextTxScope, NoScope: nz.sysVarRewrite(cursor, node) } } diff --git a/go/vt/sqlparser/parse_next_test.go b/go/vt/sqlparser/parse_next_test.go deleted file mode 100644 index 687bb7fbb51..00000000000 --- a/go/vt/sqlparser/parse_next_test.go +++ /dev/null @@ -1,196 +0,0 @@ -/* -Copyright 2019 The Vitess Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package sqlparser - -import ( - "io" - "strings" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -// TestParseNextValid concatenates all the valid SQL test cases and check it can read -// them as one long string. -func TestParseNextValid(t *testing.T) { - var sql strings.Builder - for _, tcase := range validSQL { - sql.WriteString(strings.TrimSuffix(tcase.input, ";")) - sql.WriteRune(';') - } - - parser := NewTestParser() - tokens := parser.NewStringTokenizer(sql.String()) - for _, tcase := range validSQL { - want := tcase.output - if want == "" { - want = tcase.input - } - - tree, err := ParseNext(tokens) - require.NoError(t, err) - require.Equal(t, want, String(tree)) - } - - // Read once more and it should be EOF. - tree, err := ParseNext(tokens) - require.ErrorIsf(t, err, io.EOF, "ParseNext(tokens) = (%q, %v) want io.EOF", String(tree), err) -} - -func TestIgnoreSpecialComments(t *testing.T) { - input := `SELECT 1;/*! ALTER TABLE foo DISABLE KEYS */;SELECT 2;` - - parser := NewTestParser() - tokenizer := parser.NewStringTokenizer(input) - tokenizer.SkipSpecialComments = true - one, err := ParseNextStrictDDL(tokenizer) - require.NoError(t, err) - require.Equal(t, "select 1 from dual", String(one)) - two, err := ParseNextStrictDDL(tokenizer) - require.NoError(t, err) - require.Equal(t, "select 2 from dual", String(two)) -} - -// TestParseNextErrors tests all the error cases, and ensures a valid -// SQL statement can be passed afterwards. -func TestParseNextErrors(t *testing.T) { - parser := NewTestParser() - for _, tcase := range invalidSQL { - if tcase.excludeMulti { - // Skip tests which leave unclosed strings, or comments. - continue - } - t.Run(tcase.input, func(t *testing.T) { - sql := tcase.input + "; select 1 from t" - tokens := parser.NewStringTokenizer(sql) - - // The first statement should be an error - _, err := ParseNextStrictDDL(tokens) - require.EqualError(t, err, tcase.output) - - // The second should be valid - tree, err := ParseNextStrictDDL(tokens) - require.NoError(t, err) - - want := "select 1 from t" - assert.Equal(t, want, String(tree)) - - // Read once more and it should be EOF. - _, err = ParseNextStrictDDL(tokens) - require.Same(t, io.EOF, err) - }) - } -} - -// TestParseNextEdgeCases tests various ParseNext edge cases. -func TestParseNextEdgeCases(t *testing.T) { - tests := []struct { - name string - input string - want []string - }{{ - name: "Trailing ;", - input: "select 1 from a; update a set b = 2;", - want: []string{"select 1 from a", "update a set b = 2"}, - }, { - name: "No trailing ;", - input: "select 1 from a; update a set b = 2", - want: []string{"select 1 from a", "update a set b = 2"}, - }, { - name: "Trailing whitespace", - input: "select 1 from a; update a set b = 2 ", - want: []string{"select 1 from a", "update a set b = 2"}, - }, { - name: "Trailing whitespace and ;", - input: "select 1 from a; update a set b = 2 ; ", - want: []string{"select 1 from a", "update a set b = 2"}, - }, { - name: "Handle SkipToEnd statements", - input: "set character set utf8; select 1 from a", - want: []string{"set charset 'utf8'", "select 1 from a"}, - }, { - name: "Semicolin inside a string", - input: "set character set ';'; select 1 from a", - want: []string{"set charset ';'", "select 1 from a"}, - }, { - name: "Partial DDL", - input: "create table a; select 1 from a", - want: []string{"create table a", "select 1 from a"}, - }, { - name: "Partial DDL", - input: "create table a ignore me this is garbage; select 1 from a", - want: []string{"create table a", "select 1 from a"}, - }} - parser := NewTestParser() - for _, test := range tests { - tokens := parser.NewStringTokenizer(test.input) - - for i, want := range test.want { - tree, err := ParseNext(tokens) - require.NoError(t, err) - - if got := String(tree); got != want { - t.Fatalf("[%d] ParseNext(%q) = %q, want %q", i, test.input, got, want) - } - } - - // Read once more and it should be EOF. - if tree, err := ParseNext(tokens); err != io.EOF { - t.Errorf("ParseNext(%q) = (%q, %v) want io.EOF", test.input, String(tree), err) - } - - // And again, once more should be EOF. - if tree, err := ParseNext(tokens); err != io.EOF { - t.Errorf("ParseNext(%q) = (%q, %v) want io.EOF", test.input, String(tree), err) - } - } -} - -// TestParseNextEdgeCases tests various ParseNext edge cases. -func TestParseNextStrictNonStrict(t *testing.T) { - // This is one of the edge cases above. - input := "create table a ignore me this is garbage; select 1 from a" - want := []string{"create table a", "select 1 from a"} - - // First go through as expected with non-strict DDL parsing. - parser := NewTestParser() - tokens := parser.NewStringTokenizer(input) - for i, want := range want { - tree, err := ParseNext(tokens) - if err != nil { - t.Fatalf("[%d] ParseNext(%q) err = %q, want nil", i, input, err) - } - if got := String(tree); got != want { - t.Fatalf("[%d] ParseNext(%q) = %q, want %q", i, input, got, want) - } - } - - // Now try again with strict parsing and observe the expected error. - tokens = parser.NewStringTokenizer(input) - _, err := ParseNextStrictDDL(tokens) - if err == nil || !strings.Contains(err.Error(), "ignore") { - t.Fatalf("ParseNext(%q) err = %q, want ignore", input, err) - } - tree, err := ParseNextStrictDDL(tokens) - if err != nil { - t.Fatalf("ParseNext(%q) err = %q, want nil", input, err) - } - if got := String(tree); got != want[1] { - t.Fatalf("ParseNext(%q) = %q, want %q", input, got, want) - } -} diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index 6206507f8a2..d0fddcce7a1 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -1402,14 +1402,11 @@ var ( input: "delete from a1, a2 using t1 as a1 inner join t2 as a2 where a1.id=a2.id", output: "delete a1, a2 from t1 as a1 join t2 as a2 where a1.id = a2.id", }, { - input: "set /* simple */ a = 3", - output: "set /* simple */ @@a = 3", + input: "set /* simple */ a = 3", }, { - input: "set #simple\n b = 4", - output: "set #simple\n @@b = 4", + input: "set #simple\n b = 4", }, { - input: "set character_set_results = utf8", - output: "set @@character_set_results = utf8", + input: "set character_set_results = utf8", }, { input: "set @@session.autocommit = true", output: "set @@autocommit = true", @@ -1424,10 +1421,10 @@ var ( output: "set @@autocommit = 'off'", }, { input: "set autocommit = on", - output: "set @@autocommit = 'on'", + output: "set autocommit = 'on'", }, { input: "set autocommit = off", - output: "set @@autocommit = 'off'", + output: "set autocommit = 'off'", }, { input: "set names utf8 collate foo", output: "set names 'utf8'", @@ -1442,7 +1439,7 @@ var ( output: "set charset 'utf8'", }, { input: "set s = 1--4", - output: "set @@s = 1 - -4", + output: "set s = 1 - -4", }, { input: "set character set \"utf8\"", output: "set charset 'utf8'", @@ -1465,11 +1462,9 @@ var ( input: "set @@local.wait_timeout = 3600", output: "set @@wait_timeout = 3600", }, { - input: "set /* list */ a = 3, b = 4", - output: "set /* list */ @@a = 3, @@b = 4", + input: "set /* list */ a = 3, b = 4", }, { - input: "set /* mixed list */ a = 3, names 'utf8', charset 'ascii', b = 4", - output: "set /* mixed list */ @@a = 3, names 'utf8', charset 'ascii', @@b = 4", + input: "set /* mixed list */ a = 3, names 'utf8', charset 'ascii', b = 4", }, { input: "set session transaction isolation level repeatable read", output: "set @@session.transaction_isolation = 'repeatable-read'", @@ -1501,39 +1496,29 @@ var ( input: "set session transaction read only, isolation level serializable", output: "set @@session.transaction_read_only = 'on', @@session.transaction_isolation = 'serializable'", }, { - input: "set tx_read_only = 1", - output: "set @@tx_read_only = 1", + input: "set tx_read_only = 1", }, { - input: "set tx_read_only = 0", - output: "set @@tx_read_only = 0", + input: "set tx_read_only = 0", }, { - input: "set transaction_read_only = 1", - output: "set @@session.transaction_read_only = 1", + input: "set transaction_read_only = 1", }, { - input: "set transaction_read_only = 0", - output: "set @@session.transaction_read_only = 0", + input: "set transaction_read_only = 0", }, { input: "set @@transaction_read_only = 1", }, { input: "set @@transaction_isolation = 'read-committed'", }, { - input: "set tx_isolation = 'repeatable read'", - output: "set @@tx_isolation = 'repeatable read'", + input: "set tx_isolation = 'repeatable read'", }, { - input: "set tx_isolation = 'read committed'", - output: "set @@tx_isolation = 'read committed'", + input: "set tx_isolation = 'read committed'", }, { - input: "set tx_isolation = 'read uncommitted'", - output: "set @@tx_isolation = 'read uncommitted'", + input: "set tx_isolation = 'read uncommitted'", }, { - input: "set tx_isolation = 'serializable'", - output: "set @@tx_isolation = 'serializable'", + input: "set tx_isolation = 'serializable'", }, { - input: "set sql_safe_updates = 0", - output: "set @@sql_safe_updates = 0", + input: "set sql_safe_updates = 0", }, { - input: "set sql_safe_updates = 1", - output: "set @@sql_safe_updates = 1", + input: "set sql_safe_updates = 1", }, { input: "set @variable = 42", }, { @@ -1541,10 +1526,10 @@ var ( output: "set @`period.variable` = 42", }, { input: "set S= +++-++-+(4+1)", - output: "set @@S = - -(4 + 1)", + output: "set S = - -(4 + 1)", }, { input: "set S= +- - - - -(4+1)", - output: "set @@S = - - - - -(4 + 1)", + output: "set S = - - - - -(4 + 1)", }, { input: "alter table a add foo int references b (a) on delete restrict first", output: "alter table a add column foo int references b (a) on delete restrict first", @@ -2132,6 +2117,95 @@ var ( }, { input: "create definer = 'sa'@b.c.d view a(b,c,d) as select * from e", output: "create definer = 'sa'@`b.c.d` view a(b, c, d) as select * from e", + }, { + input: "create procedure p1 (in country CHAR(3), out cities INT) begin select count(*) from x where d = e; end;", + }, { + input: "create procedure p1 (country CHAR(3), out cities INT) begin select count(*) from x where d = e; end;", + output: "create procedure p1 (in country CHAR(3), out cities INT) begin select count(*) from x where d = e; end;", + }, { + input: `CREATE PROCEDURE p1 (IN a CHAR(3), OUT b INT) SELECT COUNT(*) FROM x WHERE d = e;`, + output: "create procedure p1 (in a CHAR(3), out b INT) select count(*) from x where d = e;", + }, { + input: `CREATE PROCEDURE p1 (IN country CHAR(3), OUT cities INT) begin create table t1(a int); begin end; end;`, + output: "create procedure p1 (in country CHAR(3), out cities INT) begin create table t1 (\n\ta int\n); begin end; end;", + }, { + input: `CREATE PROCEDURE compare (IN n INT, IN m INT, INOUT s VARCHAR(50)) BEGIN IF n = m THEN SET s = 'equals'; ELSE IF n > m THEN SET s = 'greater'; ELSE SET s = 'less'; END IF; SET s = CONCAT('is ', s, ' than'); END IF; SET s = CONCAT(n, ' ', s, ' ', m, '.'); END;`, + output: `create procedure compare (in n INT, in m INT, inout s VARCHAR(50)) begin if n = m then set s = 'equals'; else if n > m then set s = 'greater'; else set s = 'less'; end if; set s = CONCAT('is ', s, ' than'); end if; set s = CONCAT(n, ' ', s, ' ', m, '.'); end;`, + }, { + input: "create procedure SimpleProcedure() begin select 'Hello, World!'; end;", + output: "create procedure SimpleProcedure () begin select 'Hello, World!' from dual; end;", + }, { + input: "create procedure DeclareVariableProcedure() begin declare message varchar(100); set message = 'Test Message'; select message; end;", + output: "create procedure DeclareVariableProcedure () begin declare message varchar(100); set message = 'Test Message'; select message from dual; end;", + }, { + input: "create procedure IfBlockProcedure(in input_value int) begin if input_value > 0 then select 'Positive'; elseif input_value < 0 then select 'Negative'; else select 'Zero'; end if; end;", + output: "create procedure IfBlockProcedure (in input_value int) begin if input_value > 0 then select 'Positive' from dual; elseif input_value < 0 then select 'Negative' from dual; else select 'Zero' from dual; end if; end;", + }, { + input: "create procedure DeclareAndIfProcedure(in input_value int) begin declare message varchar(50); if input_value > 100 then set message = 'High'; elseif input_value > 50 then set message = 'Medium'; else set message = 'Low'; end if; select message; end;", + output: "create procedure DeclareAndIfProcedure (in input_value int) begin declare message varchar(50); if input_value > 100 then set message = 'High'; elseif input_value > 50 then set message = 'Medium'; else set message = 'Low'; end if; select message from dual; end;", + }, { + input: "create procedure NestedIfProcedure(in value int) begin if value > 0 then if value > 100 then select 'Very High'; else select 'High'; end if; else select 'Low or Negative'; end if; end;", + output: "create procedure NestedIfProcedure (in value int) begin if value > 0 then if value > 100 then select 'Very High' from dual; else select 'High' from dual; end if; else select 'Low or Negative' from dual; end if; end;", + }, { + input: "create procedure MultipleDeclareProcedure(in val1 int, in val2 int) begin declare sum_result int; declare diff_result int; set sum_result = val1 + val2; set diff_result = val1 - val2; select sum_result as Sum, diff_result as Difference; end;", + output: "create procedure MultipleDeclareProcedure (in val1 int, in val2 int) begin declare sum_result int; declare diff_result int; set sum_result = val1 + val2; set diff_result = val1 - val2; select sum_result as `Sum`, diff_result as Difference from dual; end;", + }, { + input: "create procedure ErrorHandlingProcedure(in value int) begin declare exit handler for sqlexception begin select 'An error occurred'; end; if value < 0 then signal sqlstate '45000' set message_text = 'Negative values not allowed'; else select 'Valid value'; end if; end;", + output: "create procedure ErrorHandlingProcedure (in value int) begin declare exit handler for sqlexception begin select 'An error occurred' from dual; end; if value < 0 then signal sqlstate '45000' set message_text = 'Negative values not allowed'; else select 'Valid value' from dual; end if; end;", + }, { + input: "create procedure HandlerWithSQLEXCEPTION() begin declare undo handler for sqlexception begin select 'SQL Exception occurred'; end; insert into non_existing_table values (1); end;", + output: "create procedure HandlerWithSQLEXCEPTION () begin declare undo handler for sqlexception begin select 'SQL Exception occurred' from dual; end; insert into non_existing_table values (1); end;", + }, { + input: "create procedure HandlerWithNOTFOUND() begin declare exit handler for not found begin select 'No data found'; end; select * from employees where id = -1; end;", + output: "create procedure HandlerWithNOTFOUND () begin declare exit handler for not found begin select 'No data found' from dual; end; select * from employees where id = -1; end;", + }, { + input: "create procedure HandlerWithSQLWARNING() begin declare continue handler for sqlwarning begin select 'A warning occurred'; end; insert into employees (id, name) values (null, 'John'); end;", + output: "create procedure HandlerWithSQLWARNING () begin declare continue handler for sqlwarning begin select 'A warning occurred' from dual; end; insert into employees(id, `name`) values (null, 'John'); end;", + }, { + input: "create procedure HandlerWithMySQLErrorCode() begin declare exit handler for 1062 begin select 'Duplicate entry error'; end; insert into employees (id, name) values (1, 'John'); end;", + output: "create procedure HandlerWithMySQLErrorCode () begin declare exit handler for 1062 begin select 'Duplicate entry error' from dual; end; insert into employees(id, `name`) values (1, 'John'); end;", + }, { + input: "create procedure HandlerWithSQLSTATEValue() begin declare exit handler for sqlstate '23000' begin select 'Integrity constraint violation'; end; insert into employees (id, name) values (1, 'John'); end;", + output: "create procedure HandlerWithSQLSTATEValue () begin declare exit handler for sqlstate '23000' begin select 'Integrity constraint violation' from dual; end; insert into employees(id, `name`) values (1, 'John'); end;", + }, { + input: "create procedure HandlerWithMultipleConditions() begin declare exit handler for not found, 1062, sqlwarning begin select 'Error or warning occurred'; end; insert into employees (id, name) values (1, 'John'); end;", + output: "create procedure HandlerWithMultipleConditions () begin declare exit handler for not found, 1062, sqlwarning begin select 'Error or warning occurred' from dual; end; insert into employees(id, `name`) values (1, 'John'); end;", + }, { + input: "create procedure HandlerWithContinueAndExit() begin declare continue handler for sqlwarning begin select 'Warning handled, continuing execution'; end; declare exit handler for sqlexception begin select 'Exception handled, exiting'; end; insert into non_existing_table values (1); end;", + output: "create procedure HandlerWithContinueAndExit () begin declare continue handler for sqlwarning begin select 'Warning handled, continuing execution' from dual; end; declare exit handler for sqlexception begin select 'Exception handled, exiting' from dual; end; insert into non_existing_table values (1); end;", + }, { + input: "create procedure ProcedureWithDefaultValue() begin declare myVar int; set myVar = 100; select myVar; end;", + output: "create procedure ProcedureWithDefaultValue () begin declare myVar int; set myVar = 100; select myVar from dual; end;", + }, { + input: "create procedure ProcedureWithDefaultValueNewSyntax() begin declare myVar int default 200; select myVar; end;", + output: "create procedure ProcedureWithDefaultValueNewSyntax () begin declare myVar int default 200; select myVar from dual; end;", + }, { + input: "create procedure MultipleDefaults() begin declare var1 int default 10; declare var2 varchar(50) default 'Hello World'; select var1, var2; end;", + output: "create procedure MultipleDefaults () begin declare var1 int default 10; declare var2 varchar(50) default 'Hello World'; select var1, var2 from dual; end;", + }, { + input: "create procedure DefaultValueWithExpression() begin declare currentTime datetime default now(); select currentTime; end;", + output: "create procedure DefaultValueWithExpression () begin declare currentTime datetime default now(); select currentTime from dual; end;", + }, { + input: "create procedure UpdateSalaryProcedure(in emp_id int, in bonus decimal(10,2)) begin declare current_salary decimal(10,2); select salary into current_salary from employees where id = emp_id; if current_salary is not null then update employees set salary = current_salary + bonus where id = emp_id; else select 'Employee Not Found'; end if; end;", + output: "create procedure UpdateSalaryProcedure (in emp_id int, in bonus decimal(10,2)) begin declare current_salary decimal(10,2); select salary from employees where id = emp_id into current_salary; if current_salary is not null then update employees set salary = current_salary + bonus where id = emp_id; else select 'Employee Not Found' from dual; end if; end;", + }, { + input: "create procedure ConditionWithCustomError() begin declare custom_error condition for sqlstate '45000'; declare exit handler for custom_error begin select 'Custom error handled'; end; signal sqlstate '45000' set message_text = 'Triggering custom error'; end;", + output: "create procedure ConditionWithCustomError () begin declare custom_error condition for sqlstate '45000'; declare exit handler for custom_error begin select 'Custom error handled' from dual; end; signal sqlstate '45000' set message_text = 'Triggering custom error'; end;", + }, { + input: "create procedure ConditionWithDuplicateEntryError() begin declare duplicate_entry condition for 1062; declare exit handler for duplicate_entry begin select 'Duplicate entry error handled'; end; insert into employees (id, name) values (1, 'John'); end;", + output: "create procedure ConditionWithDuplicateEntryError () begin declare duplicate_entry condition for 1062; declare exit handler for duplicate_entry begin select 'Duplicate entry error handled' from dual; end; insert into employees(id, `name`) values (1, 'John'); end;", + }, { + input: "create procedure ConditionWithMultipleConditions() begin declare custom_error condition for sqlstate '45000'; declare integrity_error condition for sqlstate '23000'; declare exit handler for custom_error, integrity_error begin select 'Custom or Integrity error handled'; end; signal sqlstate '23000' set message_text = 'Integrity constraint violation'; end;", + output: "create procedure ConditionWithMultipleConditions () begin declare custom_error condition for sqlstate '45000'; declare integrity_error condition for sqlstate '23000'; declare exit handler for custom_error, integrity_error begin select 'Custom or Integrity error handled' from dual; end; signal sqlstate '23000' set message_text = 'Integrity constraint violation'; end;", + }, { + input: "create procedure ConditionWithCaseInsensitiveName() begin declare Custom_Error condition for sqlstate '45000'; declare exit handler for custom_error begin select 'Case-insensitive condition name handled'; end; signal sqlstate '45000' set message_text = 'Triggering error'; end;", + output: "create procedure ConditionWithCaseInsensitiveName () begin declare Custom_Error condition for sqlstate '45000'; declare exit handler for custom_error begin select 'Case-insensitive condition name handled' from dual; end; signal sqlstate '45000' set message_text = 'Triggering error'; end;", + }, { + input: "create procedure ConditionWithContinueHandler() begin declare custom_error condition for sqlstate '45000'; declare continue handler for custom_error begin select 'Continuing after handling custom error'; end; signal sqlstate '45000' set message_text = 'Triggering custom error'; select 'Continued Execution'; end;", + output: "create procedure ConditionWithContinueHandler () begin declare custom_error condition for sqlstate '45000'; declare continue handler for custom_error begin select 'Continuing after handling custom error' from dual; end; signal sqlstate '45000' set message_text = 'Triggering custom error'; select 'Continued Execution' from dual; end;", + }, { + input: "create procedure ConditionWithSignalAndHandler() begin declare custom_error condition for sqlstate '45000'; declare exit handler for custom_error begin select 'Handled with custom condition and signal'; end; signal sqlstate '45000' set message_text = 'Custom signal triggered'; end;", + output: "create procedure ConditionWithSignalAndHandler () begin declare custom_error condition for sqlstate '45000'; declare exit handler for custom_error begin select 'Handled with custom condition and signal' from dual; end; signal sqlstate '45000' set message_text = 'Custom signal triggered'; end;", }, { input: "create /*vt+ strategy=online */ or replace view v as select a, b, c from t", }, { @@ -2149,6 +2223,10 @@ var ( }, { input: "drop view a,B,c", output: "drop view a, B, c", + }, { + input: "drop procedure a", + }, { + input: "drop procedure if exists a", }, { input: "drop /*vt+ strategy=online */ view if exists v", }, { @@ -4636,6 +4714,9 @@ func TestSelectInto(t *testing.T) { output: `select * from TestPerson into outfile s3 's3://test-bucket/export_import/export/users.csv' fields terminated by ',' enclosed by '"' escaped by '\\' overwrite on`, }, { input: "select * from t into dumpfile 'out_file_name'", + }, { + input: "SELECT id, data INTO @x, @y FROM test.t1 LIMIT 1;", + output: "select id, `data` from test.t1 limit 1 into @x, @y", }, { input: "select * from t into outfile 'out_file_name' character set binary fields terminated by 'term' optionally enclosed by 'c' escaped by 'e' lines starting by 'a' terminated by '\\n'", }, { @@ -4721,7 +4802,7 @@ func TestPositionedErr(t *testing.T) { parser := NewTestParser() for _, tcase := range invalidSQL { tkn := parser.NewStringTokenizer(tcase.input) - _, err := ParseNext(tkn) + _, err := parse(tkn) if posErr, ok := err.(PositionedErr); !ok { t.Errorf("%s: %v expected PositionedErr, got (%T) %v", tcase.input, err, err, tcase.output) @@ -6106,9 +6187,8 @@ func TestCreateTableEscaped(t *testing.T) { var ( invalidSQL = []struct { - input string - output string - excludeMulti bool // Don't use in the ParseNext multi-statement parsing tests. + input string + output string }{{ input: "select : from t", output: "syntax error at position 9 near ':'", @@ -6205,26 +6285,22 @@ var ( input: "select /* straight_join using */ 1 from t1 straight_join t2 using (a)", output: "syntax error at position 66 near 'using'", }, { - input: "select 'aa", - output: "syntax error at position 11 near 'aa'", - excludeMulti: true, + input: "select 'aa", + output: "syntax error at position 11 near 'aa'", }, { - input: "select 'aa\\", - output: "syntax error at position 12 near 'aa'", - excludeMulti: true, + input: "select 'aa\\", + output: "syntax error at position 12 near 'aa'", }, { - input: "select /* aa", - output: "syntax error at position 13 near '/* aa'", - excludeMulti: true, + input: "select /* aa", + output: "syntax error at position 13 near '/* aa'", }, { // This is a valid MySQL query but does not yet work with Vitess. // The problem is that the tokenizer takes .3 as a single token which causes parsing error // We should instead be using . as a separate token and then 3t2 as an identifier. // This highlights another problem, the tokenization has to be aware of the context of parsing! // Since in an alternate query like `select .3e3t`, we should use .3e3 as a single token FLOAT and then t as ID. - input: "create table 2t.3t2 (c1 bigint not null, c2 text, primary key(c1))", - output: "syntax error at position 18 near '.3'", - excludeMulti: true, + input: "create table 2t.3t2 (c1 bigint not null, c2 text, primary key(c1))", + output: "syntax error at position 18 near '.3'", }, { input: "ALTER TABLE t ADD PARTITION (PARTITION p10 VALUES LESS THAN (10)), ADD PARTITION (PARTITION p20 VALUES LESS THAN (20))", output: "syntax error at position 67", @@ -6287,7 +6363,7 @@ func TestSkipToEnd(t *testing.T) { }, { // Partial DDL should get reset for valid DDLs also. input: "create table a(id int); select * from t", - output: "syntax error at position 31 near 'select'", + output: ErrMultipleStatements.Error(), }, { // Partial DDL does not get reset here. But we allow the // DDL only if there are no new tokens after skipping to end. @@ -6377,14 +6453,7 @@ partition by range (id) }, { input: "CREATE TABLE `TABLE_NAME` (\n `col1` longblob /*!50633 COLUMN_FORMAT COMPRESSED */,\n `id` bigint unsigned NOT NULL,\n PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPRESSED", mysqlVersion: "8.0.1", - output: `create table TABLE_NAME ( - col1 longblob column_format compressed, - id bigint unsigned not null, - primary key (id) -) ENGINE InnoDB, - CHARSET utf8mb4, - COLLATE utf8mb4_bin, - ROW_FORMAT COMPRESSED`, + output: "create table `TABLE_NAME` (\n\tcol1 longblob column_format compressed,\n\tid bigint unsigned not null,\n\tprimary key (id)\n) ENGINE InnoDB,\n CHARSET utf8mb4,\n COLLATE utf8mb4_bin,\n ROW_FORMAT COMPRESSED", }, } @@ -6504,6 +6573,112 @@ func TestValidSelectCases(t *testing.T) { testFile(t, "select_cases.txt", makeTestOutput(t)) } +// TestParseMultiple concatenates all the valid SQL test cases and check it can read +// them as one long string. +func TestParseMultiple(t *testing.T) { + var sql strings.Builder + totalCases := len(validSQL) + for _, tcase := range validSQL { + if tcase.partialDDL { + totalCases-- + continue + } + sql.WriteString(tcase.input) + sql.WriteRune(';') + } + + parser := NewTestParser() + sqlString := sql.String() + stmts, err := parser.ParseMultiple(sqlString) + require.NoError(t, err) + var finalStmts []Statement + for _, stmt := range stmts { + if stmt != nil { + finalStmts = append(finalStmts, stmt) + } + } + require.EqualValues(t, totalCases, len(finalStmts)) + idx := 0 + for _, tcase := range validSQL { + if tcase.partialDDL { + continue + } + want := tcase.output + if want == "" { + want = tcase.input + } + require.Equal(t, want, String(finalStmts[idx])) + idx++ + } +} + +func TestIgnoreSpecialComments(t *testing.T) { + input := `SELECT 1;/*! ALTER TABLE foo DISABLE KEYS; */ SELECT 2;` + + parser := NewTestParser() + tokenizer := parser.NewStringTokenizer(input) + tokenizer.SkipSpecialComments = true + stmts, err := parse(tokenizer) + require.NoError(t, err) + require.Len(t, stmts, 2) + require.Equal(t, "select 1 from dual", String(stmts[0])) + require.Equal(t, "select 2 from dual", String(stmts[1])) +} + +// TestParseMultipleEdgeCases tests various ParseMultiple edge cases. +func TestParseMultipleEdgeCases(t *testing.T) { + tests := []struct { + name string + input string + wantErr string + want []string + }{{ + name: "Trailing ;", + input: "select 1 from a; update a set b = 2;", + want: []string{"select 1 from a", "update a set b = 2"}, + }, { + name: "No trailing ;", + input: "select 1 from a; update a set b = 2", + want: []string{"select 1 from a", "update a set b = 2"}, + }, { + name: "Trailing whitespace", + input: "select 1 from a; update a set b = 2 ", + want: []string{"select 1 from a", "update a set b = 2"}, + }, { + name: "Trailing whitespace and ;", + input: "select 1 from a; update a set b = 2 ; ", + want: []string{"select 1 from a", "update a set b = 2"}, + }, { + name: "Handle SkipToEnd statements", + input: "set character set utf8; select 1 from a", + want: []string{"set charset 'utf8'", "select 1 from a"}, + }, { + name: "Semicolin inside a string", + input: "set character set ';'; select 1 from a", + want: []string{"set charset ';'", "select 1 from a"}, + }, { + name: "Partial DDL", + input: "create table a ignore me this is garbage; select 1 from a", + wantErr: "syntax error at position 22 near 'ignore'", + }} + parser := NewTestParser() + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + stmts, err := parser.ParseMultiple(test.input) + if test.wantErr != "" { + require.Error(t, err) + require.Contains(t, err.Error(), test.wantErr) + return + } + require.NoError(t, err) + require.EqualValues(t, len(test.want), len(stmts)) + for i, stmt := range stmts { + require.Equal(t, test.want[i], String(stmt)) + } + }) + } +} + func makeTestOutput(t *testing.T) string { testOutputTempDir := utils.MakeTestOutput(t, "testdata", "parse_test") diff --git a/go/vt/sqlparser/parser.go b/go/vt/sqlparser/parser.go index c8850559cdc..0fe43db947a 100644 --- a/go/vt/sqlparser/parser.go +++ b/go/vt/sqlparser/parser.go @@ -19,7 +19,6 @@ package sqlparser import ( "errors" "fmt" - "io" "strconv" "strings" "sync" @@ -89,15 +88,64 @@ func (p *Parser) Parse2(sql string) (Statement, BindVars, error) { case DDLStatement: x.SetFullyParsed(false) } - tokenizer.ParseTree = tokenizer.partialDDL - return tokenizer.ParseTree, tokenizer.BindVars, nil + tokenizer.ParseTrees = []Statement{tokenizer.partialDDL} + return tokenizer.ParseTrees[0], tokenizer.BindVars, nil } return nil, nil, vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, tokenizer.LastError.Error()) } - if tokenizer.ParseTree == nil { - return nil, nil, ErrEmpty + err := checkParseTreesError(tokenizer) + if err != nil { + return nil, nil, err + } + return tokenizer.ParseTrees[0], tokenizer.BindVars, nil +} + +// ParseMultiple parses the SQL in full and returns a list of Statements, which +// are the AST representation of the query. This command is meant to parse more than +// one SQL statement at a time. +func (p *Parser) ParseMultiple(sql string) ([]Statement, error) { + tokenizer := p.NewStringTokenizer(sql) + if yyParsePooled(tokenizer) != 0 { + return nil, tokenizer.LastError + } + return tokenizer.ParseTrees, nil +} + +// ParseMultipleIgnoreEmpty parses multiple statements, but ignores empty statements. +func (p *Parser) ParseMultipleIgnoreEmpty(sql string) ([]Statement, error) { + stmts, err := p.ParseMultiple(sql) + if err != nil { + return nil, err + } + newStmts := make([]Statement, 0) + for _, stmt := range stmts { + // Only keep non-empty non comment only statements. + if _, isCommentOnly := stmt.(*CommentOnly); stmt != nil && !isCommentOnly { + newStmts = append(newStmts, stmt) + } } - return tokenizer.ParseTree, tokenizer.BindVars, nil + return newStmts, nil +} + +// parse parses the SQL in full and returns a list of Statements, which +// are the AST representation of the query. This command is meant to parse more than +// one SQL statement at a time. +func parse(tokenizer *Tokenizer) ([]Statement, error) { + if yyParsePooled(tokenizer) != 0 { + return nil, tokenizer.LastError + } + return tokenizer.ParseTrees, nil +} + +// checkParseTreesError checks for errors that need to be sent based on the parseTrees generated. +func checkParseTreesError(tokenizer *Tokenizer) error { + if len(tokenizer.ParseTrees) > 1 { + return ErrMultipleStatements + } + if len(tokenizer.ParseTrees) == 0 || tokenizer.ParseTrees[0] == nil { + return ErrEmpty + } + return nil } // ConvertMySQLVersionToCommentVersion converts the MySQL version into comment version format. @@ -161,55 +209,19 @@ func (p *Parser) ParseStrictDDL(sql string) (Statement, error) { if yyParsePooled(tokenizer) != 0 { return nil, tokenizer.LastError } - if tokenizer.ParseTree == nil { - return nil, ErrEmpty - } - return tokenizer.ParseTree, nil -} - -// ParseNext parses a single SQL statement from the tokenizer -// returning a Statement which is the AST representation of the query. -// The tokenizer will always read up to the end of the statement, allowing for -// the next call to ParseNext to parse any subsequent SQL statements. When -// there are no more statements to parse, an error of io.EOF is returned. -func ParseNext(tokenizer *Tokenizer) (Statement, error) { - return parseNext(tokenizer, false) -} - -// ParseNextStrictDDL is the same as ParseNext except it errors on -// partially parsed DDL statements. -func ParseNextStrictDDL(tokenizer *Tokenizer) (Statement, error) { - return parseNext(tokenizer, true) -} - -func parseNext(tokenizer *Tokenizer, strict bool) (Statement, error) { - if tokenizer.cur() == ';' { - tokenizer.skip(1) - tokenizer.skipBlank() - } - if tokenizer.cur() == eofChar { - return nil, io.EOF - } - - tokenizer.reset() - tokenizer.multi = true - if yyParsePooled(tokenizer) != 0 { - if tokenizer.partialDDL != nil && !strict { - tokenizer.ParseTree = tokenizer.partialDDL - return tokenizer.ParseTree, nil - } - return nil, tokenizer.LastError - } - _, isCommentOnly := tokenizer.ParseTree.(*CommentOnly) - if tokenizer.ParseTree == nil || isCommentOnly { - return ParseNext(tokenizer) + err := checkParseTreesError(tokenizer) + if err != nil { + return nil, err } - return tokenizer.ParseTree, nil + return tokenizer.ParseTrees[0], nil } // ErrEmpty is a sentinel error returned when parsing empty statements. var ErrEmpty = vterrors.NewErrorf(vtrpcpb.Code_INVALID_ARGUMENT, vterrors.EmptyQuery, "Query was empty") +// ErrMultipleStatements is a sentinel error returned when we parsed multiple statements when we were expecting one. +var ErrMultipleStatements = vterrors.NewErrorf(vtrpcpb.Code_INVALID_ARGUMENT, vterrors.SyntaxError, "Expected a single statement") + // SplitStatement returns the first sql statement up to either a ';' or EOF // and the remainder from the given buffer func (p *Parser) SplitStatement(blob string) (string, string, error) { @@ -230,24 +242,8 @@ func (p *Parser) SplitStatement(blob string) (string, string, error) { return blob, "", nil } -// SplitStatements splits a given blob into multiple SQL statements. -func (p *Parser) SplitStatements(blob string) (statements []Statement, err error) { - tokenizer := p.NewStringTokenizer(blob) - for { - stmt, err := ParseNext(tokenizer) - if err != nil { - if errors.Is(err, io.EOF) { - break - } - return nil, err - } - statements = append(statements, stmt) - } - return statements, nil -} - -// SplitStatementToPieces split raw sql statement that may have multi sql pieces to sql pieces -// returns the sql pieces blob contains; or error if sql cannot be parsed +// SplitStatementToPieces splits raw sql statement that may have multi sql pieces to sql pieces +// returns the sql pieces blob contains; or error if sql cannot be parsed. func (p *Parser) SplitStatementToPieces(blob string) (pieces []string, err error) { // fast path: the vast majority of SQL statements do not have semicolons in them if blob == "" { @@ -261,24 +257,33 @@ func (p *Parser) SplitStatementToPieces(blob string) (pieces []string, err error } pieces = make([]string, 0, 16) - // It's safe here to not case about version specific tokenization - // because we are only interested in semicolons and splitting - // statements. tokenizer := p.NewStringTokenizer(blob) tkn := 0 var stmt string stmtBegin := 0 emptyStatement := true + var prevToken int + var isCreateProcedureStatement bool loop: for { tkn, _ = tokenizer.Scan() switch tkn { case ';': stmt = blob[stmtBegin : tokenizer.Pos-1] + // We now try to parse the statement to see if its complete. + // If it is a create procedure, then it might not be complete, and we + // would need to scan to the next ; + if isCreateProcedureStatement && p.IsStatementIncomplete(stmt) { + continue + } if !emptyStatement { pieces = append(pieces, stmt) + // We can now reset the variables for the next statement. + // It starts off as an empty statement and we don't know if it is + // a create procedure statement yet. emptyStatement = true + isCreateProcedureStatement = false } stmtBegin = tokenizer.Pos case 0, eofChar: @@ -290,7 +295,17 @@ loop: } } break loop + case COMMENT: + // We want to ignore comments and not store them in the prevToken for knowing + // if the current statement is a create procedure statement. + continue + case PROCEDURE: + if prevToken == CREATE { + isCreateProcedureStatement = true + } + fallthrough default: + prevToken = tkn emptyStatement = false } } @@ -299,6 +314,21 @@ loop: return } +// IsStatementIncomplete returns true if the statement is incomplete. +func (p *Parser) IsStatementIncomplete(stmt string) bool { + tkn := p.NewStringTokenizer(stmt) + yyParsePooled(tkn) + if tkn.LastError != nil { + var pe PositionedErr + isPe := errors.As(tkn.LastError, &pe) + if isPe && pe.Pos == len(stmt)+1 { + // The error is at the end of the statement, which means it is incomplete. + return true + } + } + return false +} + func (p *Parser) IsMySQL80AndAbove() bool { return p.version >= "80000" } diff --git a/go/vt/sqlparser/parser_test.go b/go/vt/sqlparser/parser_test.go index 5cb15317f29..107bb5ae34c 100644 --- a/go/vt/sqlparser/parser_test.go +++ b/go/vt/sqlparser/parser_test.go @@ -17,6 +17,7 @@ limitations under the License. package sqlparser import ( + "strings" "testing" "github.com/stretchr/testify/require" @@ -74,3 +75,90 @@ func TestEmptyErrorAndComments(t *testing.T) { }) } } + +func TestSplitStatementToPieces(t *testing.T) { + testcases := []struct { + input string + output string + lenWanted int + }{{ + input: "select * from table1; \t; \n; \n\t\t ;select * from table1;", + output: "select * from table1;select * from table1", + }, { + input: "select * from table", + }, { + input: "select * from table;", + output: "select * from table", + }, { + input: "select * from table1; ", + output: "select * from table1", + }, { + input: "select * from table1; select * from table2;", + output: "select * from table1; select * from table2", + }, { + input: "select * from /* comment ; */ table1;", + output: "select * from /* comment ; */ table1", + }, { + input: "select * from table where semi = ';';", + output: "select * from table where semi = ';'", + }, { + input: "select * from table1;--comment;\nselect * from table2;", + output: "select * from table1;--comment;\nselect * from table2", + }, { + input: "CREATE TABLE `total_data` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', " + + "`region` varchar(32) NOT NULL COMMENT 'region name, like zh; th; kepler'," + + "`data_size` bigint NOT NULL DEFAULT '0' COMMENT 'data size;'," + + "`createtime` datetime NOT NULL DEFAULT NOW() COMMENT 'create time;'," + + "`comment` varchar(100) NOT NULL DEFAULT '' COMMENT 'comment'," + + "PRIMARY KEY (`id`))", + }, { + input: "create table t1 (id int primary key); create table t2 (id int primary key);", + output: "create table t1 (id int primary key); create table t2 (id int primary key)", + }, { + input: ";;; create table t1 (id int primary key);;; ;create table t2 (id int primary key);", + output: " create table t1 (id int primary key);create table t2 (id int primary key)", + }, { + // The input doesn't have to be valid SQL statements! + input: ";create table t1 ;create table t2 (id;", + output: "create table t1 ;create table t2 (id", + }, { + // Ignore quoted semicolon + input: ";create table t1 ';';;;create table t2 (id;", + output: "create table t1 ';';create table t2 (id", + }, { + // Ignore quoted semicolon + input: "stop replica; start replica", + output: "stop replica; start replica", + }, { + // Test that we don't split on semicolons inside create procedure calls. + input: "create procedure p1 (in country CHAR(3), out cities INT) begin select count(*) from x where d = e; end", + lenWanted: 1, + }, { + // Test that we don't split on semicolons inside create procedure calls. + input: "select * from t1;create procedure p1 (in country CHAR(3), out cities INT) begin select count(*) from x where d = e; end;select * from t2", + lenWanted: 3, + }, + { + // Create procedure with comments. + input: "select * from t1; /* comment1 */ create /* comment2 */ procedure /* comment3 */ p1 (in country CHAR(3), out cities INT) begin select count(*) from x where d = e; end;select * from t2", + lenWanted: 3, + }, + } + + parser := NewTestParser() + for _, tcase := range testcases { + t.Run(tcase.input, func(t *testing.T) { + if tcase.output == "" { + tcase.output = tcase.input + } + + stmtPieces, err := parser.SplitStatementToPieces(tcase.input) + require.NoError(t, err) + if tcase.lenWanted != 0 { + require.Equal(t, tcase.lenWanted, len(stmtPieces)) + } + out := strings.Join(stmtPieces, ";") + require.Equal(t, tcase.output, out) + }) + } +} diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index d17c621d8c4..38c2b7e8527 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -12,8 +12,15 @@ import ( //line sql.y:17 -func setParseTree(yylex yyLexer, stmt Statement) { - yylex.(*Tokenizer).ParseTree = stmt +func setParseTrees(yylex yyLexer, stmts []Statement) { + if len(stmts) > 1 && stmts[len(stmts)-1] == nil { + stmts = stmts[:len(stmts)-1] + } + yylex.(*Tokenizer).ParseTrees = stmts +} + +func resetTokenizer(yylex yyLexer) { + yylex.(*Tokenizer).reset() } func setAllowComments(yylex yyLexer, allow bool) { @@ -190,591 +197,617 @@ const CASE = 57497 const WHEN = 57498 const THEN = 57499 const ELSE = 57500 -const END = 57501 -const LE = 57502 -const GE = 57503 -const NE = 57504 -const NULL_SAFE_EQUAL = 57505 -const IS = 57506 -const LIKE = 57507 -const REGEXP = 57508 -const RLIKE = 57509 -const IN = 57510 -const ASSIGNMENT_OPT = 57511 -const SHIFT_LEFT = 57512 -const SHIFT_RIGHT = 57513 -const DIV = 57514 -const MOD = 57515 -const UNARY = 57516 -const COLLATE = 57517 -const BINARY = 57518 -const UNDERSCORE_ARMSCII8 = 57519 -const UNDERSCORE_ASCII = 57520 -const UNDERSCORE_BIG5 = 57521 -const UNDERSCORE_BINARY = 57522 -const UNDERSCORE_CP1250 = 57523 -const UNDERSCORE_CP1251 = 57524 -const UNDERSCORE_CP1256 = 57525 -const UNDERSCORE_CP1257 = 57526 -const UNDERSCORE_CP850 = 57527 -const UNDERSCORE_CP852 = 57528 -const UNDERSCORE_CP866 = 57529 -const UNDERSCORE_CP932 = 57530 -const UNDERSCORE_DEC8 = 57531 -const UNDERSCORE_EUCJPMS = 57532 -const UNDERSCORE_EUCKR = 57533 -const UNDERSCORE_GB18030 = 57534 -const UNDERSCORE_GB2312 = 57535 -const UNDERSCORE_GBK = 57536 -const UNDERSCORE_GEOSTD8 = 57537 -const UNDERSCORE_GREEK = 57538 -const UNDERSCORE_HEBREW = 57539 -const UNDERSCORE_HP8 = 57540 -const UNDERSCORE_KEYBCS2 = 57541 -const UNDERSCORE_KOI8R = 57542 -const UNDERSCORE_KOI8U = 57543 -const UNDERSCORE_LATIN1 = 57544 -const UNDERSCORE_LATIN2 = 57545 -const UNDERSCORE_LATIN5 = 57546 -const UNDERSCORE_LATIN7 = 57547 -const UNDERSCORE_MACCE = 57548 -const UNDERSCORE_MACROMAN = 57549 -const UNDERSCORE_SJIS = 57550 -const UNDERSCORE_SWE7 = 57551 -const UNDERSCORE_TIS620 = 57552 -const UNDERSCORE_UCS2 = 57553 -const UNDERSCORE_UJIS = 57554 -const UNDERSCORE_UTF16 = 57555 -const UNDERSCORE_UTF16LE = 57556 -const UNDERSCORE_UTF32 = 57557 -const UNDERSCORE_UTF8 = 57558 -const UNDERSCORE_UTF8MB4 = 57559 -const UNDERSCORE_UTF8MB3 = 57560 -const INTERVAL = 57561 -const WINDOW_EXPR = 57562 -const JSON_EXTRACT_OP = 57563 -const JSON_UNQUOTE_EXTRACT_OP = 57564 -const CREATE = 57565 -const ALTER = 57566 -const DROP = 57567 -const RENAME = 57568 -const ANALYZE = 57569 -const ADD = 57570 -const FLUSH = 57571 -const CHANGE = 57572 -const MODIFY = 57573 -const DEALLOCATE = 57574 -const REVERT = 57575 -const QUERIES = 57576 -const SCHEMA = 57577 -const TABLE = 57578 -const INDEX = 57579 -const VIEW = 57580 -const TO = 57581 -const IGNORE = 57582 -const IF = 57583 -const PRIMARY = 57584 -const COLUMN = 57585 -const SPATIAL = 57586 -const FULLTEXT = 57587 -const KEY_BLOCK_SIZE = 57588 -const CHECK = 57589 -const INDEXES = 57590 -const ACTION = 57591 -const CASCADE = 57592 -const CONSTRAINT = 57593 -const FOREIGN = 57594 -const NO = 57595 -const REFERENCES = 57596 -const RESTRICT = 57597 -const SHOW = 57598 -const DESCRIBE = 57599 -const EXPLAIN = 57600 -const DATE = 57601 -const ESCAPE = 57602 -const REPAIR = 57603 -const OPTIMIZE = 57604 -const TRUNCATE = 57605 -const COALESCE = 57606 -const EXCHANGE = 57607 -const REBUILD = 57608 -const PARTITIONING = 57609 -const REMOVE = 57610 -const PREPARE = 57611 -const EXECUTE = 57612 -const MAXVALUE = 57613 -const PARTITION = 57614 -const REORGANIZE = 57615 -const LESS = 57616 -const THAN = 57617 -const PROCEDURE = 57618 -const TRIGGER = 57619 -const VINDEX = 57620 -const VINDEXES = 57621 -const DIRECTORY = 57622 -const NAME = 57623 -const UPGRADE = 57624 -const STATUS = 57625 -const VARIABLES = 57626 -const WARNINGS = 57627 -const CASCADED = 57628 -const DEFINER = 57629 -const OPTION = 57630 -const SQL = 57631 -const UNDEFINED = 57632 -const SEQUENCE = 57633 -const MERGE = 57634 -const TEMPORARY = 57635 -const TEMPTABLE = 57636 -const INVOKER = 57637 -const SECURITY = 57638 -const FIRST = 57639 -const AFTER = 57640 -const LAST = 57641 -const VITESS_MIGRATION = 57642 -const CANCEL = 57643 -const RETRY = 57644 -const LAUNCH = 57645 -const COMPLETE = 57646 -const CLEANUP = 57647 -const THROTTLE = 57648 -const UNTHROTTLE = 57649 -const FORCE_CUTOVER = 57650 -const CUTOVER_THRESHOLD = 57651 -const EXPIRE = 57652 -const RATIO = 57653 -const VITESS_THROTTLER = 57654 -const BEGIN = 57655 -const START = 57656 -const TRANSACTION = 57657 -const COMMIT = 57658 -const ROLLBACK = 57659 -const SAVEPOINT = 57660 -const RELEASE = 57661 -const WORK = 57662 -const CONSISTENT = 57663 -const SNAPSHOT = 57664 -const UNRESOLVED = 57665 -const TRANSACTIONS = 57666 -const BIT = 57667 -const TINYINT = 57668 -const SMALLINT = 57669 -const MEDIUMINT = 57670 -const INT = 57671 -const INTEGER = 57672 -const BIGINT = 57673 -const INTNUM = 57674 -const REAL = 57675 -const DOUBLE = 57676 -const FLOAT_TYPE = 57677 -const FLOAT4_TYPE = 57678 -const FLOAT8_TYPE = 57679 -const DECIMAL_TYPE = 57680 -const NUMERIC = 57681 -const TIME = 57682 -const TIMESTAMP = 57683 -const DATETIME = 57684 -const YEAR = 57685 -const CHAR = 57686 -const VARCHAR = 57687 -const BOOL = 57688 -const CHARACTER = 57689 -const VARBINARY = 57690 -const NCHAR = 57691 -const TEXT = 57692 -const TINYTEXT = 57693 -const MEDIUMTEXT = 57694 -const LONGTEXT = 57695 -const BLOB = 57696 -const TINYBLOB = 57697 -const MEDIUMBLOB = 57698 -const LONGBLOB = 57699 -const JSON = 57700 -const JSON_SCHEMA_VALID = 57701 -const JSON_SCHEMA_VALIDATION_REPORT = 57702 -const ENUM = 57703 -const GEOMETRY = 57704 -const POINT = 57705 -const LINESTRING = 57706 -const POLYGON = 57707 -const GEOMCOLLECTION = 57708 -const GEOMETRYCOLLECTION = 57709 -const MULTIPOINT = 57710 -const MULTILINESTRING = 57711 -const MULTIPOLYGON = 57712 -const ASCII = 57713 -const UNICODE = 57714 -const VECTOR = 57715 -const NULLX = 57716 -const AUTO_INCREMENT = 57717 -const APPROXNUM = 57718 -const SIGNED = 57719 -const UNSIGNED = 57720 -const ZEROFILL = 57721 -const PURGE = 57722 -const BEFORE = 57723 -const CODE = 57724 -const COLLATION = 57725 -const COLUMNS = 57726 -const DATABASES = 57727 -const ENGINES = 57728 -const EVENT = 57729 -const EXTENDED = 57730 -const FIELDS = 57731 -const FULL = 57732 -const FUNCTION = 57733 -const GTID_EXECUTED = 57734 -const KEYSPACES = 57735 -const OPEN = 57736 -const PLUGINS = 57737 -const PRIVILEGES = 57738 -const PROCESSLIST = 57739 -const SCHEMAS = 57740 -const TABLES = 57741 -const TRIGGERS = 57742 -const USER = 57743 -const VGTID_EXECUTED = 57744 -const VITESS_KEYSPACES = 57745 -const VITESS_METADATA = 57746 -const VITESS_MIGRATIONS = 57747 -const VITESS_REPLICATION_STATUS = 57748 -const VITESS_SHARDS = 57749 -const VITESS_TABLETS = 57750 -const VITESS_TARGET = 57751 -const VSCHEMA = 57752 -const VITESS_THROTTLED_APPS = 57753 -const NAMES = 57754 -const GLOBAL = 57755 -const SESSION = 57756 -const ISOLATION = 57757 -const LEVEL = 57758 -const READ = 57759 -const WRITE = 57760 -const ONLY = 57761 -const REPEATABLE = 57762 -const COMMITTED = 57763 -const UNCOMMITTED = 57764 -const SERIALIZABLE = 57765 -const ADDDATE = 57766 -const CURRENT_TIMESTAMP = 57767 -const DATABASE = 57768 -const CURRENT_DATE = 57769 -const CURDATE = 57770 -const DATE_ADD = 57771 -const DATE_SUB = 57772 -const NOW = 57773 -const SUBDATE = 57774 -const CURTIME = 57775 -const CURRENT_TIME = 57776 -const LOCALTIME = 57777 -const LOCALTIMESTAMP = 57778 -const CURRENT_USER = 57779 -const UTC_DATE = 57780 -const UTC_TIME = 57781 -const UTC_TIMESTAMP = 57782 -const SYSDATE = 57783 -const DAY = 57784 -const DAY_HOUR = 57785 -const DAY_MICROSECOND = 57786 -const DAY_MINUTE = 57787 -const DAY_SECOND = 57788 -const HOUR = 57789 -const HOUR_MICROSECOND = 57790 -const HOUR_MINUTE = 57791 -const HOUR_SECOND = 57792 -const MICROSECOND = 57793 -const MINUTE = 57794 -const MINUTE_MICROSECOND = 57795 -const MINUTE_SECOND = 57796 -const MONTH = 57797 -const QUARTER = 57798 -const SECOND = 57799 -const SECOND_MICROSECOND = 57800 -const YEAR_MONTH = 57801 -const WEEK = 57802 -const SQL_TSI_DAY = 57803 -const SQL_TSI_WEEK = 57804 -const SQL_TSI_HOUR = 57805 -const SQL_TSI_MINUTE = 57806 -const SQL_TSI_MONTH = 57807 -const SQL_TSI_QUARTER = 57808 -const SQL_TSI_SECOND = 57809 -const SQL_TSI_MICROSECOND = 57810 -const SQL_TSI_YEAR = 57811 -const REPLACE = 57812 -const CONVERT = 57813 -const CAST = 57814 -const SUBSTR = 57815 -const SUBSTRING = 57816 -const MID = 57817 -const SEPARATOR = 57818 -const TIMESTAMPADD = 57819 -const TIMESTAMPDIFF = 57820 -const WEIGHT_STRING = 57821 -const LTRIM = 57822 -const RTRIM = 57823 -const TRIM = 57824 -const JSON_ARRAY = 57825 -const JSON_OBJECT = 57826 -const JSON_QUOTE = 57827 -const JSON_DEPTH = 57828 -const JSON_TYPE = 57829 -const JSON_LENGTH = 57830 -const JSON_VALID = 57831 -const JSON_ARRAY_APPEND = 57832 -const JSON_ARRAY_INSERT = 57833 -const JSON_INSERT = 57834 -const JSON_MERGE = 57835 -const JSON_MERGE_PATCH = 57836 -const JSON_MERGE_PRESERVE = 57837 -const JSON_REMOVE = 57838 -const JSON_REPLACE = 57839 -const JSON_SET = 57840 -const JSON_UNQUOTE = 57841 -const COUNT = 57842 -const AVG = 57843 -const MAX = 57844 -const MIN = 57845 -const SUM = 57846 -const GROUP_CONCAT = 57847 -const BIT_AND = 57848 -const BIT_OR = 57849 -const BIT_XOR = 57850 -const STD = 57851 -const STDDEV = 57852 -const STDDEV_POP = 57853 -const STDDEV_SAMP = 57854 -const VAR_POP = 57855 -const VAR_SAMP = 57856 -const VARIANCE = 57857 -const ANY_VALUE = 57858 -const REGEXP_INSTR = 57859 -const REGEXP_LIKE = 57860 -const REGEXP_REPLACE = 57861 -const REGEXP_SUBSTR = 57862 -const ExtractValue = 57863 -const UpdateXML = 57864 -const GET_LOCK = 57865 -const RELEASE_LOCK = 57866 -const RELEASE_ALL_LOCKS = 57867 -const IS_FREE_LOCK = 57868 -const IS_USED_LOCK = 57869 -const LOCATE = 57870 -const POSITION = 57871 -const ST_GeometryCollectionFromText = 57872 -const ST_GeometryFromText = 57873 -const ST_LineStringFromText = 57874 -const ST_MultiLineStringFromText = 57875 -const ST_MultiPointFromText = 57876 -const ST_MultiPolygonFromText = 57877 -const ST_PointFromText = 57878 -const ST_PolygonFromText = 57879 -const ST_GeometryCollectionFromWKB = 57880 -const ST_GeometryFromWKB = 57881 -const ST_LineStringFromWKB = 57882 -const ST_MultiLineStringFromWKB = 57883 -const ST_MultiPointFromWKB = 57884 -const ST_MultiPolygonFromWKB = 57885 -const ST_PointFromWKB = 57886 -const ST_PolygonFromWKB = 57887 -const ST_AsBinary = 57888 -const ST_AsText = 57889 -const ST_Dimension = 57890 -const ST_Envelope = 57891 -const ST_IsSimple = 57892 -const ST_IsEmpty = 57893 -const ST_GeometryType = 57894 -const ST_X = 57895 -const ST_Y = 57896 -const ST_Latitude = 57897 -const ST_Longitude = 57898 -const ST_EndPoint = 57899 -const ST_IsClosed = 57900 -const ST_Length = 57901 -const ST_NumPoints = 57902 -const ST_StartPoint = 57903 -const ST_PointN = 57904 -const ST_Area = 57905 -const ST_Centroid = 57906 -const ST_ExteriorRing = 57907 -const ST_InteriorRingN = 57908 -const ST_NumInteriorRings = 57909 -const ST_NumGeometries = 57910 -const ST_GeometryN = 57911 -const ST_LongFromGeoHash = 57912 -const ST_PointFromGeoHash = 57913 -const ST_LatFromGeoHash = 57914 -const ST_GeoHash = 57915 -const ST_AsGeoJSON = 57916 -const ST_GeomFromGeoJSON = 57917 -const MATCH = 57918 -const AGAINST = 57919 -const BOOLEAN = 57920 -const LANGUAGE = 57921 -const WITH = 57922 -const QUERY = 57923 -const EXPANSION = 57924 -const WITHOUT = 57925 -const VALIDATION = 57926 -const ROLLUP = 57927 -const UNUSED = 57928 -const ARRAY = 57929 -const BYTE = 57930 -const CUME_DIST = 57931 -const DESCRIPTION = 57932 -const DENSE_RANK = 57933 -const EMPTY = 57934 -const EXCEPT = 57935 -const FIRST_VALUE = 57936 -const GROUPING = 57937 -const GROUPS = 57938 -const JSON_TABLE = 57939 -const LAG = 57940 -const LAST_VALUE = 57941 -const LATERAL = 57942 -const LEAD = 57943 -const NTH_VALUE = 57944 -const NTILE = 57945 -const OF = 57946 -const OVER = 57947 -const PERCENT_RANK = 57948 -const RANK = 57949 -const RECURSIVE = 57950 -const ROW_NUMBER = 57951 -const SYSTEM = 57952 -const WINDOW = 57953 -const ACTIVE = 57954 -const ADMIN = 57955 -const AUTOEXTEND_SIZE = 57956 -const BUCKETS = 57957 -const CLONE = 57958 -const COLUMN_FORMAT = 57959 -const COMPONENT = 57960 -const DEFINITION = 57961 -const ENFORCED = 57962 -const ENGINE_ATTRIBUTE = 57963 -const EXCLUDE = 57964 -const FOLLOWING = 57965 -const GET_MASTER_PUBLIC_KEY = 57966 -const GET_SOURCE_PUBLIC_KEY = 57967 -const HISTOGRAM = 57968 -const HISTORY = 57969 -const INACTIVE = 57970 -const INVISIBLE = 57971 -const LOCKED = 57972 -const MASTER_COMPRESSION_ALGORITHMS = 57973 -const MASTER_PUBLIC_KEY_PATH = 57974 -const MASTER_TLS_CIPHERSUITES = 57975 -const MASTER_ZSTD_COMPRESSION_LEVEL = 57976 -const NESTED = 57977 -const NETWORK_NAMESPACE = 57978 -const NOWAIT = 57979 -const NULLS = 57980 -const OJ = 57981 -const OLD = 57982 -const OPTIONAL = 57983 -const ORDINALITY = 57984 -const ORGANIZATION = 57985 -const OTHERS = 57986 -const PARTIAL = 57987 -const PATH = 57988 -const PERSIST = 57989 -const PERSIST_ONLY = 57990 -const PRECEDING = 57991 -const PRIVILEGE_CHECKS_USER = 57992 -const PROCESS = 57993 -const RANDOM = 57994 -const REFERENCE = 57995 -const REQUIRE_ROW_FORMAT = 57996 -const RESOURCE = 57997 -const RESPECT = 57998 -const RESTART = 57999 -const RETAIN = 58000 -const REUSE = 58001 -const ROLE = 58002 -const SECONDARY = 58003 -const SECONDARY_ENGINE = 58004 -const SECONDARY_ENGINE_ATTRIBUTE = 58005 -const SECONDARY_LOAD = 58006 -const SECONDARY_UNLOAD = 58007 -const SIMPLE = 58008 -const SKIP = 58009 -const SOURCE_COMPRESSION_ALGORITHMS = 58010 -const SOURCE_PUBLIC_KEY_PATH = 58011 -const SOURCE_TLS_CIPHERSUITES = 58012 -const SOURCE_ZSTD_COMPRESSION_LEVEL = 58013 -const SRID = 58014 -const THREAD_PRIORITY = 58015 -const TIES = 58016 -const UNBOUNDED = 58017 -const VCPU = 58018 -const VISIBLE = 58019 -const RETURNING = 58020 -const MANUAL = 58021 -const PARALLEL = 58022 -const QUALIFY = 58023 -const TABLESAMPLE = 58024 -const FORMAT_BYTES = 58025 -const FORMAT_PICO_TIME = 58026 -const PS_CURRENT_THREAD_ID = 58027 -const PS_THREAD_ID = 58028 -const GTID_SUBSET = 58029 -const GTID_SUBTRACT = 58030 -const WAIT_FOR_EXECUTED_GTID_SET = 58031 -const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 58032 -const FORMAT = 58033 -const TREE = 58034 -const VITESS = 58035 -const TRADITIONAL = 58036 -const VTEXPLAIN = 58037 -const VEXPLAIN = 58038 -const PLAN = 58039 -const LOCAL = 58040 -const LOW_PRIORITY = 58041 -const NO_WRITE_TO_BINLOG = 58042 -const LOGS = 58043 -const ERROR = 58044 -const GENERAL = 58045 -const HOSTS = 58046 -const OPTIMIZER_COSTS = 58047 -const USER_RESOURCES = 58048 -const SLOW = 58049 -const CHANNEL = 58050 -const RELAY = 58051 -const EXPORT = 58052 -const CURRENT = 58053 -const ROW = 58054 -const ROWS = 58055 -const AVG_ROW_LENGTH = 58056 -const CONNECTION = 58057 -const CHECKSUM = 58058 -const DELAY_KEY_WRITE = 58059 -const ENCRYPTION = 58060 -const ENGINE = 58061 -const INSERT_METHOD = 58062 -const MAX_ROWS = 58063 -const MIN_ROWS = 58064 -const PACK_KEYS = 58065 -const PASSWORD = 58066 -const FIXED = 58067 -const DYNAMIC = 58068 -const COMPRESSED = 58069 -const REDUNDANT = 58070 -const COMPACT = 58071 -const ROW_FORMAT = 58072 -const STATS_AUTO_RECALC = 58073 -const STATS_PERSISTENT = 58074 -const STATS_SAMPLE_PAGES = 58075 -const STORAGE = 58076 -const MEMORY = 58077 -const DISK = 58078 -const PARTITIONS = 58079 -const LINEAR = 58080 -const RANGE = 58081 -const LIST = 58082 -const SUBPARTITION = 58083 -const SUBPARTITIONS = 58084 -const HASH = 58085 +const ELSEIF = 57501 +const END = 57502 +const LE = 57503 +const GE = 57504 +const NE = 57505 +const NULL_SAFE_EQUAL = 57506 +const IS = 57507 +const LIKE = 57508 +const REGEXP = 57509 +const RLIKE = 57510 +const IN = 57511 +const ASSIGNMENT_OPT = 57512 +const SHIFT_LEFT = 57513 +const SHIFT_RIGHT = 57514 +const DIV = 57515 +const MOD = 57516 +const UNARY = 57517 +const COLLATE = 57518 +const BINARY = 57519 +const UNDERSCORE_ARMSCII8 = 57520 +const UNDERSCORE_ASCII = 57521 +const UNDERSCORE_BIG5 = 57522 +const UNDERSCORE_BINARY = 57523 +const UNDERSCORE_CP1250 = 57524 +const UNDERSCORE_CP1251 = 57525 +const UNDERSCORE_CP1256 = 57526 +const UNDERSCORE_CP1257 = 57527 +const UNDERSCORE_CP850 = 57528 +const UNDERSCORE_CP852 = 57529 +const UNDERSCORE_CP866 = 57530 +const UNDERSCORE_CP932 = 57531 +const UNDERSCORE_DEC8 = 57532 +const UNDERSCORE_EUCJPMS = 57533 +const UNDERSCORE_EUCKR = 57534 +const UNDERSCORE_GB18030 = 57535 +const UNDERSCORE_GB2312 = 57536 +const UNDERSCORE_GBK = 57537 +const UNDERSCORE_GEOSTD8 = 57538 +const UNDERSCORE_GREEK = 57539 +const UNDERSCORE_HEBREW = 57540 +const UNDERSCORE_HP8 = 57541 +const UNDERSCORE_KEYBCS2 = 57542 +const UNDERSCORE_KOI8R = 57543 +const UNDERSCORE_KOI8U = 57544 +const UNDERSCORE_LATIN1 = 57545 +const UNDERSCORE_LATIN2 = 57546 +const UNDERSCORE_LATIN5 = 57547 +const UNDERSCORE_LATIN7 = 57548 +const UNDERSCORE_MACCE = 57549 +const UNDERSCORE_MACROMAN = 57550 +const UNDERSCORE_SJIS = 57551 +const UNDERSCORE_SWE7 = 57552 +const UNDERSCORE_TIS620 = 57553 +const UNDERSCORE_UCS2 = 57554 +const UNDERSCORE_UJIS = 57555 +const UNDERSCORE_UTF16 = 57556 +const UNDERSCORE_UTF16LE = 57557 +const UNDERSCORE_UTF32 = 57558 +const UNDERSCORE_UTF8 = 57559 +const UNDERSCORE_UTF8MB4 = 57560 +const UNDERSCORE_UTF8MB3 = 57561 +const INTERVAL = 57562 +const WINDOW_EXPR = 57563 +const JSON_EXTRACT_OP = 57564 +const JSON_UNQUOTE_EXTRACT_OP = 57565 +const CREATE = 57566 +const ALTER = 57567 +const DROP = 57568 +const RENAME = 57569 +const ANALYZE = 57570 +const ADD = 57571 +const FLUSH = 57572 +const CHANGE = 57573 +const MODIFY = 57574 +const DEALLOCATE = 57575 +const REVERT = 57576 +const QUERIES = 57577 +const DECLARE = 57578 +const FOUND = 57579 +const HANDLER = 57580 +const CONTINUE = 57581 +const EXIT = 57582 +const UNDO = 57583 +const SQLEXCEPTION = 57584 +const SQLSTATE = 57585 +const SQLWARNING = 57586 +const CONDITION = 57587 +const SCHEMA = 57588 +const TABLE = 57589 +const INDEX = 57590 +const VIEW = 57591 +const TO = 57592 +const IGNORE = 57593 +const IF = 57594 +const PRIMARY = 57595 +const COLUMN = 57596 +const SPATIAL = 57597 +const FULLTEXT = 57598 +const KEY_BLOCK_SIZE = 57599 +const CHECK = 57600 +const INDEXES = 57601 +const ACTION = 57602 +const CASCADE = 57603 +const CONSTRAINT = 57604 +const FOREIGN = 57605 +const NO = 57606 +const REFERENCES = 57607 +const RESTRICT = 57608 +const SIGNAL = 57609 +const SHOW = 57610 +const DESCRIBE = 57611 +const EXPLAIN = 57612 +const DATE = 57613 +const ESCAPE = 57614 +const REPAIR = 57615 +const OPTIMIZE = 57616 +const TRUNCATE = 57617 +const COALESCE = 57618 +const EXCHANGE = 57619 +const REBUILD = 57620 +const PARTITIONING = 57621 +const REMOVE = 57622 +const PREPARE = 57623 +const EXECUTE = 57624 +const MAXVALUE = 57625 +const PARTITION = 57626 +const REORGANIZE = 57627 +const LESS = 57628 +const THAN = 57629 +const PROCEDURE = 57630 +const TRIGGER = 57631 +const VINDEX = 57632 +const VINDEXES = 57633 +const DIRECTORY = 57634 +const NAME = 57635 +const UPGRADE = 57636 +const STATUS = 57637 +const VARIABLES = 57638 +const WARNINGS = 57639 +const CASCADED = 57640 +const DEFINER = 57641 +const OPTION = 57642 +const SQL = 57643 +const UNDEFINED = 57644 +const SEQUENCE = 57645 +const MERGE = 57646 +const TEMPORARY = 57647 +const TEMPTABLE = 57648 +const INVOKER = 57649 +const SECURITY = 57650 +const FIRST = 57651 +const AFTER = 57652 +const LAST = 57653 +const VITESS_MIGRATION = 57654 +const CANCEL = 57655 +const RETRY = 57656 +const LAUNCH = 57657 +const COMPLETE = 57658 +const CLEANUP = 57659 +const THROTTLE = 57660 +const UNTHROTTLE = 57661 +const FORCE_CUTOVER = 57662 +const CUTOVER_THRESHOLD = 57663 +const EXPIRE = 57664 +const RATIO = 57665 +const VITESS_THROTTLER = 57666 +const BEGIN = 57667 +const START = 57668 +const TRANSACTION = 57669 +const COMMIT = 57670 +const ROLLBACK = 57671 +const SAVEPOINT = 57672 +const RELEASE = 57673 +const WORK = 57674 +const CONSISTENT = 57675 +const SNAPSHOT = 57676 +const UNRESOLVED = 57677 +const TRANSACTIONS = 57678 +const BIT = 57679 +const TINYINT = 57680 +const SMALLINT = 57681 +const MEDIUMINT = 57682 +const INT = 57683 +const INTEGER = 57684 +const BIGINT = 57685 +const INTNUM = 57686 +const REAL = 57687 +const DOUBLE = 57688 +const FLOAT_TYPE = 57689 +const FLOAT4_TYPE = 57690 +const FLOAT8_TYPE = 57691 +const DECIMAL_TYPE = 57692 +const NUMERIC = 57693 +const TIME = 57694 +const TIMESTAMP = 57695 +const DATETIME = 57696 +const YEAR = 57697 +const CHAR = 57698 +const VARCHAR = 57699 +const BOOL = 57700 +const CHARACTER = 57701 +const VARBINARY = 57702 +const NCHAR = 57703 +const TEXT = 57704 +const TINYTEXT = 57705 +const MEDIUMTEXT = 57706 +const LONGTEXT = 57707 +const BLOB = 57708 +const TINYBLOB = 57709 +const MEDIUMBLOB = 57710 +const LONGBLOB = 57711 +const JSON = 57712 +const JSON_SCHEMA_VALID = 57713 +const JSON_SCHEMA_VALIDATION_REPORT = 57714 +const ENUM = 57715 +const GEOMETRY = 57716 +const POINT = 57717 +const LINESTRING = 57718 +const POLYGON = 57719 +const GEOMCOLLECTION = 57720 +const GEOMETRYCOLLECTION = 57721 +const MULTIPOINT = 57722 +const MULTILINESTRING = 57723 +const MULTIPOLYGON = 57724 +const ASCII = 57725 +const UNICODE = 57726 +const VECTOR = 57727 +const NULLX = 57728 +const AUTO_INCREMENT = 57729 +const APPROXNUM = 57730 +const SIGNED = 57731 +const UNSIGNED = 57732 +const ZEROFILL = 57733 +const PURGE = 57734 +const BEFORE = 57735 +const CODE = 57736 +const COLLATION = 57737 +const COLUMNS = 57738 +const DATABASES = 57739 +const ENGINES = 57740 +const EVENT = 57741 +const EXTENDED = 57742 +const FIELDS = 57743 +const FULL = 57744 +const FUNCTION = 57745 +const GTID_EXECUTED = 57746 +const KEYSPACES = 57747 +const OPEN = 57748 +const PLUGINS = 57749 +const PRIVILEGES = 57750 +const PROCESSLIST = 57751 +const SCHEMAS = 57752 +const TABLES = 57753 +const TRIGGERS = 57754 +const USER = 57755 +const VGTID_EXECUTED = 57756 +const VITESS_KEYSPACES = 57757 +const VITESS_METADATA = 57758 +const VITESS_MIGRATIONS = 57759 +const VITESS_REPLICATION_STATUS = 57760 +const VITESS_SHARDS = 57761 +const VITESS_TABLETS = 57762 +const VITESS_TARGET = 57763 +const VSCHEMA = 57764 +const VITESS_THROTTLED_APPS = 57765 +const NAMES = 57766 +const GLOBAL = 57767 +const SESSION = 57768 +const ISOLATION = 57769 +const LEVEL = 57770 +const READ = 57771 +const WRITE = 57772 +const ONLY = 57773 +const REPEATABLE = 57774 +const COMMITTED = 57775 +const UNCOMMITTED = 57776 +const SERIALIZABLE = 57777 +const CLASS_ORIGIN = 57778 +const SUBCLASS_ORIGIN = 57779 +const MESSAGE_TEXT = 57780 +const MYSQL_ERRNO = 57781 +const CONSTRAINT_CATALOG = 57782 +const CONSTRAINT_SCHEMA = 57783 +const CONSTRAINT_NAME = 57784 +const CATALOG_NAME = 57785 +const SCHEMA_NAME = 57786 +const TABLE_NAME = 57787 +const COLUMN_NAME = 57788 +const CURSOR_NAME = 57789 +const ADDDATE = 57790 +const CURRENT_TIMESTAMP = 57791 +const DATABASE = 57792 +const CURRENT_DATE = 57793 +const CURDATE = 57794 +const DATE_ADD = 57795 +const DATE_SUB = 57796 +const NOW = 57797 +const SUBDATE = 57798 +const CURTIME = 57799 +const CURRENT_TIME = 57800 +const LOCALTIME = 57801 +const LOCALTIMESTAMP = 57802 +const CURRENT_USER = 57803 +const UTC_DATE = 57804 +const UTC_TIME = 57805 +const UTC_TIMESTAMP = 57806 +const SYSDATE = 57807 +const DAY = 57808 +const DAY_HOUR = 57809 +const DAY_MICROSECOND = 57810 +const DAY_MINUTE = 57811 +const DAY_SECOND = 57812 +const HOUR = 57813 +const HOUR_MICROSECOND = 57814 +const HOUR_MINUTE = 57815 +const HOUR_SECOND = 57816 +const MICROSECOND = 57817 +const MINUTE = 57818 +const MINUTE_MICROSECOND = 57819 +const MINUTE_SECOND = 57820 +const MONTH = 57821 +const QUARTER = 57822 +const SECOND = 57823 +const SECOND_MICROSECOND = 57824 +const YEAR_MONTH = 57825 +const WEEK = 57826 +const SQL_TSI_DAY = 57827 +const SQL_TSI_WEEK = 57828 +const SQL_TSI_HOUR = 57829 +const SQL_TSI_MINUTE = 57830 +const SQL_TSI_MONTH = 57831 +const SQL_TSI_QUARTER = 57832 +const SQL_TSI_SECOND = 57833 +const SQL_TSI_MICROSECOND = 57834 +const SQL_TSI_YEAR = 57835 +const REPLACE = 57836 +const CONVERT = 57837 +const CAST = 57838 +const SUBSTR = 57839 +const SUBSTRING = 57840 +const MID = 57841 +const SEPARATOR = 57842 +const TIMESTAMPADD = 57843 +const TIMESTAMPDIFF = 57844 +const WEIGHT_STRING = 57845 +const LTRIM = 57846 +const RTRIM = 57847 +const TRIM = 57848 +const JSON_ARRAY = 57849 +const JSON_OBJECT = 57850 +const JSON_QUOTE = 57851 +const JSON_DEPTH = 57852 +const JSON_TYPE = 57853 +const JSON_LENGTH = 57854 +const JSON_VALID = 57855 +const JSON_ARRAY_APPEND = 57856 +const JSON_ARRAY_INSERT = 57857 +const JSON_INSERT = 57858 +const JSON_MERGE = 57859 +const JSON_MERGE_PATCH = 57860 +const JSON_MERGE_PRESERVE = 57861 +const JSON_REMOVE = 57862 +const JSON_REPLACE = 57863 +const JSON_SET = 57864 +const JSON_UNQUOTE = 57865 +const COUNT = 57866 +const AVG = 57867 +const MAX = 57868 +const MIN = 57869 +const SUM = 57870 +const GROUP_CONCAT = 57871 +const BIT_AND = 57872 +const BIT_OR = 57873 +const BIT_XOR = 57874 +const STD = 57875 +const STDDEV = 57876 +const STDDEV_POP = 57877 +const STDDEV_SAMP = 57878 +const VAR_POP = 57879 +const VAR_SAMP = 57880 +const VARIANCE = 57881 +const ANY_VALUE = 57882 +const REGEXP_INSTR = 57883 +const REGEXP_LIKE = 57884 +const REGEXP_REPLACE = 57885 +const REGEXP_SUBSTR = 57886 +const ExtractValue = 57887 +const UpdateXML = 57888 +const GET_LOCK = 57889 +const RELEASE_LOCK = 57890 +const RELEASE_ALL_LOCKS = 57891 +const IS_FREE_LOCK = 57892 +const IS_USED_LOCK = 57893 +const LOCATE = 57894 +const POSITION = 57895 +const ST_GeometryCollectionFromText = 57896 +const ST_GeometryFromText = 57897 +const ST_LineStringFromText = 57898 +const ST_MultiLineStringFromText = 57899 +const ST_MultiPointFromText = 57900 +const ST_MultiPolygonFromText = 57901 +const ST_PointFromText = 57902 +const ST_PolygonFromText = 57903 +const ST_GeometryCollectionFromWKB = 57904 +const ST_GeometryFromWKB = 57905 +const ST_LineStringFromWKB = 57906 +const ST_MultiLineStringFromWKB = 57907 +const ST_MultiPointFromWKB = 57908 +const ST_MultiPolygonFromWKB = 57909 +const ST_PointFromWKB = 57910 +const ST_PolygonFromWKB = 57911 +const ST_AsBinary = 57912 +const ST_AsText = 57913 +const ST_Dimension = 57914 +const ST_Envelope = 57915 +const ST_IsSimple = 57916 +const ST_IsEmpty = 57917 +const ST_GeometryType = 57918 +const ST_X = 57919 +const ST_Y = 57920 +const ST_Latitude = 57921 +const ST_Longitude = 57922 +const ST_EndPoint = 57923 +const ST_IsClosed = 57924 +const ST_Length = 57925 +const ST_NumPoints = 57926 +const ST_StartPoint = 57927 +const ST_PointN = 57928 +const ST_Area = 57929 +const ST_Centroid = 57930 +const ST_ExteriorRing = 57931 +const ST_InteriorRingN = 57932 +const ST_NumInteriorRings = 57933 +const ST_NumGeometries = 57934 +const ST_GeometryN = 57935 +const ST_LongFromGeoHash = 57936 +const ST_PointFromGeoHash = 57937 +const ST_LatFromGeoHash = 57938 +const ST_GeoHash = 57939 +const ST_AsGeoJSON = 57940 +const ST_GeomFromGeoJSON = 57941 +const MATCH = 57942 +const AGAINST = 57943 +const BOOLEAN = 57944 +const LANGUAGE = 57945 +const WITH = 57946 +const QUERY = 57947 +const EXPANSION = 57948 +const WITHOUT = 57949 +const VALIDATION = 57950 +const ROLLUP = 57951 +const UNUSED = 57952 +const ARRAY = 57953 +const BYTE = 57954 +const CUME_DIST = 57955 +const DESCRIPTION = 57956 +const DENSE_RANK = 57957 +const EMPTY = 57958 +const EXCEPT = 57959 +const FIRST_VALUE = 57960 +const GROUPING = 57961 +const GROUPS = 57962 +const JSON_TABLE = 57963 +const LAG = 57964 +const LAST_VALUE = 57965 +const LATERAL = 57966 +const LEAD = 57967 +const NTH_VALUE = 57968 +const NTILE = 57969 +const OF = 57970 +const OVER = 57971 +const PERCENT_RANK = 57972 +const RANK = 57973 +const RECURSIVE = 57974 +const ROW_NUMBER = 57975 +const SYSTEM = 57976 +const WINDOW = 57977 +const ACTIVE = 57978 +const ADMIN = 57979 +const AUTOEXTEND_SIZE = 57980 +const BUCKETS = 57981 +const CLONE = 57982 +const COLUMN_FORMAT = 57983 +const COMPONENT = 57984 +const DEFINITION = 57985 +const ENFORCED = 57986 +const ENGINE_ATTRIBUTE = 57987 +const EXCLUDE = 57988 +const FOLLOWING = 57989 +const GET_MASTER_PUBLIC_KEY = 57990 +const GET_SOURCE_PUBLIC_KEY = 57991 +const HISTOGRAM = 57992 +const HISTORY = 57993 +const INACTIVE = 57994 +const INVISIBLE = 57995 +const LOCKED = 57996 +const MASTER_COMPRESSION_ALGORITHMS = 57997 +const MASTER_PUBLIC_KEY_PATH = 57998 +const MASTER_TLS_CIPHERSUITES = 57999 +const MASTER_ZSTD_COMPRESSION_LEVEL = 58000 +const NESTED = 58001 +const NETWORK_NAMESPACE = 58002 +const NOWAIT = 58003 +const NULLS = 58004 +const OJ = 58005 +const OLD = 58006 +const OPTIONAL = 58007 +const ORDINALITY = 58008 +const ORGANIZATION = 58009 +const OTHERS = 58010 +const PARTIAL = 58011 +const PATH = 58012 +const PERSIST = 58013 +const PERSIST_ONLY = 58014 +const PRECEDING = 58015 +const PRIVILEGE_CHECKS_USER = 58016 +const PROCESS = 58017 +const RANDOM = 58018 +const REFERENCE = 58019 +const REQUIRE_ROW_FORMAT = 58020 +const RESOURCE = 58021 +const RESPECT = 58022 +const RESTART = 58023 +const RETAIN = 58024 +const REUSE = 58025 +const ROLE = 58026 +const SECONDARY = 58027 +const SECONDARY_ENGINE = 58028 +const SECONDARY_ENGINE_ATTRIBUTE = 58029 +const SECONDARY_LOAD = 58030 +const SECONDARY_UNLOAD = 58031 +const SIMPLE = 58032 +const SKIP = 58033 +const SOURCE_COMPRESSION_ALGORITHMS = 58034 +const SOURCE_PUBLIC_KEY_PATH = 58035 +const SOURCE_TLS_CIPHERSUITES = 58036 +const SOURCE_ZSTD_COMPRESSION_LEVEL = 58037 +const SRID = 58038 +const THREAD_PRIORITY = 58039 +const TIES = 58040 +const UNBOUNDED = 58041 +const VCPU = 58042 +const VISIBLE = 58043 +const RETURNING = 58044 +const MANUAL = 58045 +const PARALLEL = 58046 +const QUALIFY = 58047 +const TABLESAMPLE = 58048 +const OUT = 58049 +const INOUT = 58050 +const FORMAT_BYTES = 58051 +const FORMAT_PICO_TIME = 58052 +const PS_CURRENT_THREAD_ID = 58053 +const PS_THREAD_ID = 58054 +const GTID_SUBSET = 58055 +const GTID_SUBTRACT = 58056 +const WAIT_FOR_EXECUTED_GTID_SET = 58057 +const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 58058 +const FORMAT = 58059 +const TREE = 58060 +const VITESS = 58061 +const TRADITIONAL = 58062 +const VTEXPLAIN = 58063 +const VEXPLAIN = 58064 +const PLAN = 58065 +const LOCAL = 58066 +const LOW_PRIORITY = 58067 +const NO_WRITE_TO_BINLOG = 58068 +const LOGS = 58069 +const ERROR = 58070 +const GENERAL = 58071 +const HOSTS = 58072 +const OPTIMIZER_COSTS = 58073 +const USER_RESOURCES = 58074 +const SLOW = 58075 +const CHANNEL = 58076 +const RELAY = 58077 +const EXPORT = 58078 +const CURRENT = 58079 +const ROW = 58080 +const ROWS = 58081 +const AVG_ROW_LENGTH = 58082 +const CONNECTION = 58083 +const CHECKSUM = 58084 +const DELAY_KEY_WRITE = 58085 +const ENCRYPTION = 58086 +const ENGINE = 58087 +const INSERT_METHOD = 58088 +const MAX_ROWS = 58089 +const MIN_ROWS = 58090 +const PACK_KEYS = 58091 +const PASSWORD = 58092 +const FIXED = 58093 +const DYNAMIC = 58094 +const COMPRESSED = 58095 +const REDUNDANT = 58096 +const COMPACT = 58097 +const ROW_FORMAT = 58098 +const STATS_AUTO_RECALC = 58099 +const STATS_PERSISTENT = 58100 +const STATS_SAMPLE_PAGES = 58101 +const STORAGE = 58102 +const MEMORY = 58103 +const DISK = 58104 +const PARTITIONS = 58105 +const LINEAR = 58106 +const RANGE = 58107 +const LIST = 58108 +const SUBPARTITION = 58109 +const SUBPARTITIONS = 58110 +const HASH = 58111 var yyToknames = [...]string{ "$end", @@ -940,6 +973,7 @@ var yyToknames = [...]string{ "WHEN", "THEN", "ELSE", + "ELSEIF", "END", "'='", "'<'", @@ -1028,6 +1062,16 @@ var yyToknames = [...]string{ "DEALLOCATE", "REVERT", "QUERIES", + "DECLARE", + "FOUND", + "HANDLER", + "CONTINUE", + "EXIT", + "UNDO", + "SQLEXCEPTION", + "SQLSTATE", + "SQLWARNING", + "CONDITION", "SCHEMA", "TABLE", "INDEX", @@ -1049,6 +1093,7 @@ var yyToknames = [...]string{ "NO", "REFERENCES", "RESTRICT", + "SIGNAL", "SHOW", "DESCRIBE", "EXPLAIN", @@ -1217,6 +1262,18 @@ var yyToknames = [...]string{ "COMMITTED", "UNCOMMITTED", "SERIALIZABLE", + "CLASS_ORIGIN", + "SUBCLASS_ORIGIN", + "MESSAGE_TEXT", + "MYSQL_ERRNO", + "CONSTRAINT_CATALOG", + "CONSTRAINT_SCHEMA", + "CONSTRAINT_NAME", + "CATALOG_NAME", + "SCHEMA_NAME", + "TABLE_NAME", + "COLUMN_NAME", + "CURSOR_NAME", "ADDDATE", "CURRENT_TIMESTAMP", "DATABASE", @@ -1476,6 +1533,8 @@ var yyToknames = [...]string{ "PARALLEL", "QUALIFY", "TABLESAMPLE", + "OUT", + "INOUT", "FORMAT_BYTES", "FORMAT_PICO_TIME", "PS_CURRENT_THREAD_ID", @@ -1551,1271 +1610,1525 @@ var yyExca = [...]int{ -1, 1, 1, -1, -2, 0, - -1, 2, - 16, 49, - 17, 49, - -2, 40, - -1, 52, - 1, 160, - 761, 160, - -2, 168, - -1, 53, - 149, 168, - 191, 168, - 364, 168, - -2, 528, - -1, 61, - 38, 789, - 254, 789, - 265, 789, - 300, 803, - 301, 803, - -2, 791, + -1, 4, + 16, 110, + 17, 110, + -2, 6, + -1, 57, + 1, 225, + 787, 225, + -2, 233, + -1, 58, + 149, 233, + 192, 233, + 376, 233, + -2, 593, -1, 66, - 256, 827, - -2, 825, - -1, 124, - 253, 1632, - -2, 134, - -1, 126, - 1, 161, - 761, 161, - -2, 168, - -1, 137, - 150, 413, - 259, 413, - -2, 517, - -1, 156, - 149, 168, - 191, 168, - 364, 168, - -2, 537, - -1, 760, - 177, 41, - -2, 43, - -1, 969, - 95, 1649, - -2, 1487, - -1, 970, - 95, 1650, - 236, 1654, - -2, 1488, - -1, 971, - 236, 1653, - -2, 42, - -1, 1057, - 65, 901, - -2, 914, - -1, 1146, - 264, 1114, - 269, 1114, - -2, 424, - -1, 1231, - 1, 585, - 761, 585, - -2, 168, - -1, 1542, - 236, 1654, - -2, 1488, - -1, 1755, - 65, 902, - -2, 918, - -1, 1756, - 65, 903, - -2, 919, - -1, 1821, - 149, 168, - 191, 168, - 364, 168, - -2, 463, - -1, 1904, - 150, 413, - 259, 413, - -2, 517, - -1, 1913, - 264, 1115, - 269, 1115, - -2, 425, - -1, 2362, - 236, 1658, - -2, 1652, - -1, 2363, - 236, 1654, - -2, 1650, - -1, 2468, - 149, 168, - 191, 168, - 364, 168, - -2, 464, - -1, 2475, - 28, 189, - -2, 191, - -1, 2942, - 86, 99, - 96, 99, - -2, 981, - -1, 3011, - 736, 707, - -2, 681, - -1, 3236, - 55, 1591, - -2, 1585, - -1, 4074, - 736, 707, - -2, 695, - -1, 4166, - 98, 639, - 104, 639, - 114, 639, - 193, 639, - 194, 639, - 195, 639, - 196, 639, - 197, 639, - 198, 639, - 199, 639, - 200, 639, - 201, 639, - 202, 639, - 203, 639, - 204, 639, - 205, 639, - 206, 639, - 207, 639, - 208, 639, - 209, 639, - 210, 639, - 211, 639, - 212, 639, - 213, 639, - 214, 639, - 215, 639, - 216, 639, - 217, 639, - 218, 639, - 219, 639, - 220, 639, - 221, 639, - 222, 639, - 223, 639, - 224, 639, - 225, 639, - 226, 639, - 227, 639, - 228, 639, - 229, 639, - 230, 639, - 231, 639, - 232, 639, - 233, 639, - 234, 639, - -2, 2032, + 38, 855, + 265, 855, + 276, 855, + 312, 869, + 313, 869, + -2, 857, + -1, 71, + 267, 893, + -2, 891, + -1, 132, + 1, 226, + 787, 226, + -2, 233, + -1, 143, + 150, 478, + 270, 478, + -2, 582, + -1, 162, + 149, 233, + 192, 233, + 376, 233, + -2, 602, + -1, 780, + 178, 102, + -2, 104, + -1, 989, + 95, 1731, + -2, 1553, + -1, 990, + 95, 1732, + 237, 1736, + -2, 1554, + -1, 991, + 237, 1735, + -2, 103, + -1, 1077, + 65, 967, + -2, 980, + -1, 1082, + 264, 1714, + -2, 1623, + -1, 1164, + 275, 1180, + 280, 1180, + -2, 489, + -1, 1252, + 1, 650, + 787, 650, + -2, 233, + -1, 1577, + 237, 1736, + -2, 1554, + -1, 1790, + 65, 968, + -2, 984, + -1, 1791, + 65, 969, + -2, 985, + -1, 1868, + 149, 233, + 192, 233, + 376, 233, + -2, 528, + -1, 1945, + 150, 478, + 270, 478, + -2, 582, + -1, 1954, + 275, 1181, + 280, 1181, + -2, 490, + -1, 2402, + 237, 1740, + -2, 1734, + -1, 2403, + 237, 1736, + -2, 1732, + -1, 2521, + 149, 233, + 192, 233, + 376, 233, + -2, 529, + -1, 2528, + 28, 254, + -2, 256, + -1, 3004, + 86, 160, + 96, 160, + -2, 1047, + -1, 3069, + 762, 772, + -2, 746, + -1, 3303, + 55, 1673, + -2, 1667, + -1, 3622, + 97, 1614, + -2, 1619, + -1, 4147, + 762, 772, + -2, 760, + -1, 4187, + 16, 110, + 17, 110, + 165, 91, + -2, 881, + -1, 4244, + 165, 92, + -2, 110, + -1, 4264, + 98, 704, + 104, 704, + 114, 704, + 194, 704, + 195, 704, + 196, 704, + 197, 704, + 198, 704, + 199, 704, + 200, 704, + 201, 704, + 202, 704, + 203, 704, + 204, 704, + 205, 704, + 206, 704, + 207, 704, + 208, 704, + 209, 704, + 210, 704, + 211, 704, + 212, 704, + 213, 704, + 214, 704, + 215, 704, + 216, 704, + 217, 704, + 218, 704, + 219, 704, + 220, 704, + 221, 704, + 222, 704, + 223, 704, + 224, 704, + 225, 704, + 226, 704, + 227, 704, + 228, 704, + 229, 704, + 230, 704, + 231, 704, + 232, 704, + 233, 704, + 234, 704, + 235, 704, + -2, 2137, + -1, 4337, + 163, 97, + 165, 97, + -2, 110, + -1, 4421, + 165, 96, + -2, 110, + -1, 4427, + 16, 110, + 17, 110, + -2, 101, } const yyPrivate = 57344 -const yyLast = 56818 +const yyLast = 62988 var yyAct = [...]int{ - 985, 3725, 3726, 87, 3724, 4145, 933, 4256, 4164, 4243, - 4055, 2167, 3387, 4037, 4133, 2391, 3674, 4209, 980, 2155, - 4210, 972, 3288, 3295, 3345, 1299, 2465, 3350, 3960, 3336, - 3249, 3347, 3523, 3346, 1297, 3344, 4035, 3365, 3349, 3348, - 3102, 1824, 3303, 2541, 3187, 2093, 3661, 2034, 5, 764, - 3364, 3253, 2393, 3250, 3569, 3563, 3767, 3076, 3237, 2420, - 3101, 2902, 973, 934, 792, 3367, 2504, 3058, 759, 1775, - 2436, 3247, 2439, 1881, 758, 3394, 2977, 3008, 4106, 2528, - 2509, 1108, 2979, 2978, 2453, 3553, 1055, 2572, 87, 165, - 1076, 1052, 2441, 43, 3591, 2927, 2908, 1083, 2440, 3049, - 2892, 2876, 41, 1154, 1929, 2315, 2189, 2151, 2101, 1055, - 2347, 2314, 2550, 1911, 151, 2527, 2428, 2589, 1178, 2511, - 2970, 1141, 1813, 1136, 1118, 2944, 1793, 987, 1779, 102, - 2443, 1555, 1736, 106, 107, 2195, 2126, 2115, 1480, 1463, - 2030, 1918, 1115, 1112, 1890, 1147, 2010, 1116, 3252, 2500, - 2915, 774, 1142, 1143, 2501, 1144, 1812, 769, 1798, 1093, - 1095, 1064, 2421, 1758, 761, 2222, 2203, 1538, 101, 3762, - 1061, 2874, 109, 85, 2092, 2042, 3524, 1287, 1903, 938, - 1514, 1060, 42, 1227, 134, 3754, 1564, 135, 108, 129, - 1059, 169, 127, 128, 1088, 1062, 1050, 751, 1075, 762, - 1559, 100, 4244, 2543, 2544, 2545, 2543, 3580, 93, 1295, - 1273, 3662, 1087, 935, 3333, 4090, 3031, 3030, 2587, 2999, - 3654, 1049, 4192, 1781, 694, 3066, 1481, 3067, 4085, 4086, - 2108, 1068, 136, 2107, 2106, 84, 2105, 1481, 2104, 3729, - 1995, 4091, 1158, 1109, 130, 3616, 1183, 2388, 2389, 2103, - 2073, 1243, 691, 4186, 692, 2872, 2641, 3233, 1477, 3191, - 4266, 1474, 4208, 4234, 1191, 1054, 3527, 1058, 4213, 3526, - 752, 1069, 1180, 1051, 2417, 2416, 1102, 2904, 1066, 2, - 3024, 1103, 2574, 4038, 2837, 1197, 1198, 1199, 1078, 1202, - 1203, 1204, 1205, 1133, 1157, 1208, 1209, 1210, 1211, 1212, - 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, - 1223, 1224, 1244, 1184, 1187, 1188, 1132, 1077, 130, 1131, - 1130, 1053, 736, 113, 114, 115, 4064, 118, 3355, 3001, - 124, 2412, 1200, 193, 1491, 3728, 686, 730, 4086, 3729, - 1125, 3352, 1784, 3355, 1782, 1491, 986, 2113, 749, 750, - 4249, 2576, 1120, 3413, 4196, 1048, 4160, 4194, 1043, 1044, - 1045, 1046, 1777, 3021, 3956, 1057, 1476, 3955, 3667, 1182, - 1181, 3668, 1785, 95, 1783, 1497, 4248, 4224, 3966, 1134, - 4195, 4190, 736, 4193, 1037, 3686, 130, 3675, 3353, 975, - 1038, 989, 990, 991, 976, 1090, 1091, 977, 978, 2575, - 979, 1465, 1769, 3353, 1101, 1105, 937, 1101, 1105, 937, - 4169, 4134, 4142, 2569, 3965, 2160, 3439, 3359, 992, 993, - 1892, 2953, 3285, 3286, 2952, 2873, 1280, 2954, 1282, 2460, - 2461, 730, 3359, 2085, 2086, 3728, 2459, 3038, 1493, 3039, - 1814, 3284, 1815, 3065, 2645, 4146, 3048, 1487, 1268, 1269, - 1479, 1263, 1041, 730, 1040, 3002, 730, 1251, 1487, 1292, - 1251, 4056, 1252, 2038, 3685, 1252, 1279, 1281, 2965, 3123, - 2648, 1475, 3391, 1250, 725, 1249, 2478, 2477, 3566, 994, - 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, - 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, + 1005, 3786, 3787, 3785, 2196, 92, 4379, 1000, 4368, 992, + 4245, 4244, 4246, 4397, 953, 4129, 954, 812, 4385, 4384, + 4226, 3430, 4315, 4314, 2518, 4262, 4342, 2208, 3580, 1322, + 2075, 3735, 4179, 4386, 3444, 3355, 4391, 1871, 3362, 4108, + 4031, 3399, 90, 2431, 1320, 9, 2433, 2578, 3154, 3239, + 3428, 3370, 2588, 3408, 3413, 3410, 3409, 3723, 3407, 3412, + 3411, 3427, 958, 784, 3320, 1196, 3317, 46, 3828, 3316, + 3634, 3620, 2977, 3839, 3128, 3153, 129, 993, 2492, 2472, + 4106, 3656, 2489, 3304, 3314, 2964, 778, 2557, 779, 1928, + 3039, 1075, 3610, 92, 3110, 3451, 3066, 2949, 2562, 3040, + 2619, 3041, 2506, 1134, 1102, 171, 2989, 47, 2493, 2970, + 1072, 2494, 2922, 2388, 1075, 2451, 2938, 45, 2230, 2356, + 2192, 1109, 2948, 3101, 2142, 2355, 2597, 1952, 2481, 1144, + 157, 2564, 1172, 1970, 3032, 1081, 1154, 1860, 1159, 3006, + 781, 1840, 3645, 1101, 1007, 1808, 2496, 955, 1825, 3319, + 2460, 111, 1771, 1074, 2236, 1078, 1590, 112, 2167, 2156, + 107, 1515, 1498, 2070, 1959, 1141, 782, 1162, 1138, 1142, + 1165, 1160, 2553, 794, 1161, 1859, 1104, 2554, 789, 2473, + 1119, 3823, 1121, 2920, 1845, 1097, 1085, 1245, 1793, 3815, + 2244, 2231, 106, 2263, 1573, 1549, 1310, 1098, 2083, 14, + 1080, 135, 2133, 13, 12, 133, 1070, 114, 175, 134, + 1079, 3581, 140, 1944, 141, 1114, 1083, 89, 771, 1296, + 4242, 113, 1256, 1250, 1318, 1198, 99, 1594, 6, 4369, + 2590, 2591, 2592, 2590, 3724, 3396, 3057, 1599, 1215, 1216, + 1217, 1113, 1220, 1221, 1222, 1223, 714, 4163, 1226, 1227, + 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, + 1238, 1239, 1240, 1241, 1242, 1135, 136, 1089, 1201, 2634, + 3681, 774, 142, 4164, 3089, 3088, 3716, 1176, 1069, 2036, + 4286, 1827, 3118, 1244, 3119, 3790, 4159, 2428, 2429, 2149, + 4158, 1267, 2148, 2147, 2146, 2145, 772, 1087, 4, 1209, + 1090, 2144, 1128, 1129, 4, 2114, 1823, 1266, 1073, 4137, + 3054, 1071, 1175, 3059, 2918, 711, 1151, 712, 3300, 2623, + 2966, 1830, 4318, 2687, 1828, 756, 3243, 1127, 1131, 957, + 1146, 1202, 1205, 1206, 1150, 4416, 4373, 4313, 1149, 4290, + 1103, 136, 1148, 750, 4288, 4359, 118, 119, 120, 3584, + 123, 1831, 3418, 3583, 1829, 1218, 3418, 199, 1512, 3079, + 706, 1509, 4372, 3790, 2469, 4289, 1006, 2622, 2468, 3415, + 4287, 3082, 769, 770, 4109, 2883, 750, 2154, 3470, 4241, + 4027, 3789, 1063, 1064, 1065, 1066, 1152, 4026, 756, 1077, + 1057, 1532, 91, 1082, 1200, 995, 1058, 1009, 1010, 1011, + 996, 101, 4159, 997, 998, 3729, 999, 1199, 3730, 136, + 4328, 4037, 3416, 4284, 1068, 2980, 3416, 3747, 3736, 1116, + 1117, 1127, 1131, 957, 1012, 1013, 1804, 3830, 4223, 2579, + 1500, 1528, 4272, 2616, 4036, 2201, 3746, 750, 4267, 3496, + 2462, 3422, 1303, 2981, 1305, 3422, 2919, 3015, 3352, 3353, + 3014, 4227, 4270, 3016, 2513, 2514, 2126, 2127, 1861, 3789, + 1862, 3351, 4277, 4278, 3117, 2691, 1511, 2512, 3100, 1516, + 750, 1286, 3372, 3373, 2694, 101, 1291, 1292, 1061, 4271, + 1060, 745, 4130, 1302, 1304, 91, 1014, 1015, 1016, 1017, + 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, + 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, + 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, + 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 4231, 730, + 1274, 91, 2621, 1516, 93, 1275, 103, 1315, 1287, 91, + 1529, 1274, 1530, 1531, 2692, 1280, 1275, 3027, 2531, 2530, + 3448, 3446, 728, 3175, 1273, 3478, 1272, 2973, 2974, 3476, + 1493, 2685, 750, 2573, 750, 2125, 764, 3419, 101, 2129, + 751, 3419, 1510, 3102, 1249, 2079, 1257, 1258, 768, 762, + 3439, 3452, 103, 2430, 4079, 1293, 4080, 2567, 1526, 4319, + 3853, 2026, 3371, 725, 1300, 1294, 1775, 3067, 1301, 2598, + 2944, 2452, 740, 751, 3374, 1499, 3703, 1219, 1306, 1261, + 4320, 2958, 3286, 2959, 101, 1819, 1260, 735, 2450, 2660, + 3287, 2661, 101, 2662, 1289, 1290, 1253, 1307, 1492, 738, + 1312, 2452, 748, 1262, 3105, 1295, 2027, 1288, 2028, 3718, + 749, 3717, 2641, 2663, 1281, 1299, 1225, 3449, 3447, 1550, + 2272, 1314, 1526, 1224, 2637, 4011, 1155, 1313, 2601, 3794, + 1156, 3440, 3441, 2639, 751, 1120, 3714, 2490, 1130, 1124, + 1122, 2688, 3467, 2689, 1551, 1552, 1553, 1554, 1555, 1556, + 1557, 1559, 1558, 1560, 1561, 4344, 4345, 4346, 4347, 4348, + 4349, 4350, 4351, 4352, 4353, 4354, 4355, 751, 2642, 1156, + 715, 1522, 717, 731, 1514, 753, 2638, 752, 721, 3060, + 719, 723, 732, 724, 1778, 718, 1937, 729, 2080, 2640, + 720, 733, 734, 737, 741, 742, 743, 739, 736, 3631, + 727, 754, 1194, 3176, 1193, 1192, 3055, 1191, 1190, 1189, + 1188, 1187, 1182, 1195, 3374, 1319, 1139, 1319, 1319, 1857, + 1137, 2566, 4417, 1139, 3394, 3242, 1139, 1167, 1168, 4426, + 2461, 2264, 1130, 1124, 1122, 1522, 2266, 1204, 2071, 1115, + 2271, 2267, 3106, 1167, 2268, 2269, 2270, 1203, 1248, 2265, + 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 751, + 2627, 751, 3713, 2626, 3077, 2067, 1501, 1075, 1574, 1579, + 1580, 1212, 1583, 1585, 1586, 1587, 1588, 1589, 3623, 1592, + 1593, 1595, 1595, 101, 1595, 1595, 1600, 1600, 1600, 1603, + 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, + 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, + 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, + 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, + 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, + 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, + 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, + 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, + 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, + 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, + 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, + 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, + 1724, 1725, 1726, 1584, 4136, 1575, 1827, 1727, 3058, 1729, + 1730, 1731, 1732, 1733, 1308, 1153, 4182, 1567, 1568, 1569, + 1570, 1600, 1600, 1600, 1600, 1600, 1600, 1581, 1123, 1489, + 1571, 1490, 1491, 3745, 3832, 3831, 1740, 1741, 1742, 1743, + 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, + 1259, 2956, 4276, 1858, 1185, 3081, 3788, 1174, 1251, 1174, + 1183, 100, 1564, 750, 3679, 3680, 3682, 1270, 4229, 1276, + 1277, 1278, 1279, 2038, 2037, 2039, 2040, 2041, 4142, 4401, + 1521, 1518, 1519, 1520, 1525, 1527, 1524, 3061, 1523, 755, + 94, 1284, 3290, 1316, 1317, 4274, 2620, 1271, 1517, 1596, + 4275, 1597, 1598, 3080, 1564, 1174, 4228, 2476, 1081, 3091, + 746, 3632, 2943, 2692, 1601, 1602, 1958, 1768, 2459, 2458, + 1508, 1251, 1123, 1774, 1174, 747, 3420, 3421, 1764, 2693, + 3420, 3421, 1075, 2457, 3788, 2453, 1075, 3109, 2068, 3424, + 1265, 705, 1075, 3424, 1521, 1518, 1519, 1520, 1525, 1527, + 1524, 4302, 1523, 4390, 100, 4301, 1174, 4414, 2570, 3122, + 2618, 4282, 1517, 2923, 2925, 2056, 3568, 4125, 750, 3099, + 3358, 1173, 3098, 1173, 3670, 2055, 3468, 3251, 1081, 1565, + 1566, 1815, 3652, 1765, 1818, 2648, 2644, 2646, 2647, 2645, + 2649, 2650, 2651, 2652, 1782, 3011, 2976, 2895, 1786, 2571, + 100, 2709, 2204, 3250, 1074, 2971, 92, 2569, 100, 1849, + 2519, 1728, 2476, 3270, 1264, 3268, 1186, 713, 1564, 1173, + 132, 3359, 1184, 1822, 1561, 1167, 1170, 1171, 1804, 1139, + 3350, 1249, 1243, 1164, 1168, 1544, 1957, 2245, 1173, 1784, + 2720, 2572, 1093, 111, 126, 1785, 3361, 1311, 1081, 112, + 1269, 1931, 1211, 1765, 2246, 2568, 4420, 1766, 1734, 1735, + 1736, 1737, 1738, 1739, 4393, 1297, 3356, 1772, 46, 4150, + 1173, 1197, 3709, 3644, 1780, 1177, 1167, 1934, 1935, 1936, + 1179, 2463, 2138, 2064, 1180, 1178, 3372, 3373, 1863, 4297, + 751, 2084, 1826, 3357, 1249, 3112, 1812, 1247, 3149, 114, + 3111, 4380, 4408, 1814, 1813, 2237, 1181, 2729, 4257, 1174, + 2954, 2237, 4329, 2720, 2474, 2475, 3129, 1531, 1283, 3112, + 1530, 1531, 4399, 127, 3111, 4400, 1950, 4398, 3363, 1285, + 3848, 2052, 1806, 2053, 3687, 2021, 2054, 3686, 1769, 2605, + 1783, 1967, 2228, 1966, 2011, 2012, 1956, 1819, 2924, 1943, + 2017, 2018, 2615, 1262, 2077, 1071, 2172, 2613, 1781, 1073, + 1962, 1821, 1185, 1960, 1960, 1809, 1811, 1319, 2617, 1183, + 2003, 2173, 1562, 1563, 2171, 1174, 1972, 1088, 1973, 2610, + 1975, 1977, 2610, 1964, 1981, 1983, 1985, 1987, 1989, 4403, + 4321, 3671, 1854, 1855, 2243, 751, 1961, 2060, 4323, 2058, + 2059, 2057, 2061, 2062, 2063, 1268, 3371, 1246, 4019, 1923, + 1999, 3131, 4418, 2002, 3742, 2004, 3743, 4018, 3374, 2474, + 2475, 1252, 2614, 1173, 1298, 2612, 1816, 1532, 1177, 1167, + 1941, 1940, 1939, 1179, 1787, 1248, 1953, 1180, 1178, 1552, + 1553, 1554, 1555, 1556, 1557, 1559, 1558, 1560, 1561, 198, + 2085, 2051, 2007, 2220, 2209, 2210, 2211, 2212, 2222, 2213, + 2214, 2215, 2227, 2223, 2216, 2217, 2224, 2225, 2226, 2218, + 2219, 2221, 137, 1174, 1554, 1555, 1556, 1557, 1559, 1558, + 1560, 1561, 4193, 2072, 2073, 3141, 3140, 3139, 180, 1173, + 3133, 1210, 3137, 4117, 3132, 1207, 3130, 101, 1248, 1100, + 4009, 3135, 1556, 1557, 1559, 1558, 1560, 1561, 4419, 2046, + 3134, 2044, 1804, 2033, 1150, 1100, 3759, 2170, 1149, 2390, + 2242, 136, 1148, 198, 2160, 2161, 2699, 2700, 2392, 3136, + 3138, 4194, 3758, 3694, 3020, 3693, 2160, 2161, 2158, 2159, + 3360, 2090, 4118, 3029, 1004, 3683, 137, 3397, 177, 1319, + 1319, 178, 2086, 2087, 1538, 1539, 1540, 1541, 1542, 1543, + 1537, 1534, 180, 2157, 2112, 92, 2091, 3390, 92, 1009, + 1010, 1011, 3037, 2098, 2099, 2100, 1529, 197, 1530, 1531, + 2045, 3036, 2043, 3035, 2032, 4422, 2576, 1173, 2047, 2031, + 2030, 2111, 2029, 1167, 1170, 1171, 2019, 1139, 1760, 2013, + 2010, 1164, 1168, 1758, 2009, 756, 2008, 1979, 1756, 1779, + 2134, 1757, 1755, 2134, 1759, 1099, 1100, 3676, 3298, 756, + 4357, 1495, 177, 1163, 3018, 178, 756, 46, 1857, 1532, + 46, 2200, 2088, 2199, 2199, 2197, 2197, 1833, 4322, 2092, + 1532, 2094, 2095, 2096, 2097, 1933, 4370, 1550, 2101, 4145, + 1546, 197, 1547, 1094, 4309, 1804, 1532, 2586, 4144, 2585, + 2113, 1095, 4121, 2584, 1550, 2583, 4120, 1548, 1562, 1563, + 1545, 4119, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1559, + 1558, 1560, 1561, 2582, 2162, 2581, 1834, 4014, 1081, 1551, + 1552, 1553, 1554, 1555, 1556, 1557, 1559, 1558, 1560, 1561, + 1550, 3999, 3121, 181, 3998, 1099, 1100, 3847, 1764, 3845, + 2283, 1550, 187, 2708, 1551, 1552, 1553, 1554, 1555, 1556, + 1557, 1559, 1558, 1560, 1561, 1551, 1552, 1553, 1554, 1555, + 1556, 1557, 1559, 1558, 1560, 1561, 1551, 1552, 1553, 1554, + 1555, 1556, 1557, 1559, 1558, 1560, 1561, 3755, 2175, 1763, + 2177, 2178, 2179, 2180, 2181, 2182, 2184, 2186, 2187, 2188, + 2189, 2190, 2191, 1765, 2137, 1762, 2232, 2137, 2135, 2136, + 2139, 2135, 2136, 2119, 2120, 2176, 1532, 181, 1529, 2169, + 1530, 1531, 1575, 1933, 1804, 1532, 187, 4299, 117, 1529, + 2725, 1530, 1531, 1532, 3364, 1528, 1804, 2389, 3368, 116, + 2238, 115, 2174, 1933, 4222, 1529, 3367, 1530, 1531, 110, + 1532, 1933, 4203, 2768, 3151, 1761, 108, 3691, 2402, 2401, + 3675, 2307, 110, 1528, 1804, 117, 109, 1532, 1592, 2203, + 1933, 4199, 1804, 2400, 108, 2299, 116, 1766, 115, 3453, + 3369, 3450, 172, 3393, 109, 4099, 1804, 3727, 4135, 3365, + 4022, 1804, 1933, 4010, 3366, 2247, 2248, 2249, 2250, 3727, + 1804, 1933, 3725, 2610, 1804, 3007, 1550, 2391, 2724, 2261, + 3650, 1804, 2850, 1804, 1804, 2282, 3392, 4334, 1804, 3383, + 3382, 4138, 2228, 3103, 2297, 4332, 1804, 1804, 2467, 2770, + 1803, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1559, 1558, + 1560, 1561, 4237, 1804, 4046, 1804, 2399, 3046, 1532, 2405, + 2406, 1804, 3380, 3381, 4045, 2498, 172, 3378, 3379, 4235, + 1804, 4003, 1532, 3378, 3377, 1529, 3033, 1530, 1531, 111, + 2986, 1804, 2756, 3008, 1529, 112, 1530, 1531, 1760, 2402, + 2487, 2941, 1529, 3010, 1530, 1531, 2692, 3090, 1927, 3071, + 4002, 111, 1754, 2435, 2400, 110, 2528, 112, 1532, 1529, + 2682, 1530, 1531, 1532, 2380, 2381, 2382, 2383, 2384, 2674, + 1532, 2447, 2168, 3064, 3065, 3007, 1529, 2500, 1530, 1531, + 2673, 2404, 2632, 1098, 2407, 2408, 1532, 2441, 1144, 2442, + 2202, 1804, 3485, 2220, 2209, 2210, 2211, 2212, 2222, 2213, + 2214, 2215, 2227, 2223, 2216, 2217, 2224, 2225, 2226, 2218, + 2219, 2221, 2631, 1532, 4233, 1804, 1144, 2455, 2423, 2939, + 2425, 3643, 2471, 2538, 2539, 2540, 2532, 1089, 2533, 2534, + 2535, 2536, 2537, 2523, 2522, 2436, 2541, 110, 2115, 2081, + 2504, 2448, 2543, 3008, 2042, 2545, 2546, 2547, 2548, 2034, + 4092, 1804, 3647, 2692, 2024, 4090, 1804, 1529, 2454, 1530, + 1531, 2020, 2599, 1804, 101, 2016, 2015, 2464, 2526, 2014, + 2559, 1529, 1835, 1530, 1531, 1933, 1932, 3629, 4087, 1804, + 1532, 1309, 2477, 2978, 2565, 3068, 1532, 1927, 1926, 1869, + 1868, 2485, 2978, 173, 2510, 1128, 1129, 2509, 1550, 2508, + 185, 2525, 1804, 116, 2524, 4069, 1804, 1529, 3345, 1530, + 1531, 3051, 1529, 2596, 1530, 1531, 1532, 2575, 2692, 1529, + 3646, 1530, 1531, 1551, 1552, 1553, 1554, 1555, 1556, 1557, + 1559, 1558, 1560, 1561, 3315, 1529, 2527, 1530, 1531, 1528, + 1076, 1176, 193, 4177, 2604, 3643, 2985, 2607, 1532, 2608, + 4149, 1960, 2560, 2556, 2549, 2551, 2552, 2574, 2611, 1532, + 2986, 1933, 1529, 1532, 1530, 1531, 2624, 173, 1532, 3643, + 4113, 2986, 3609, 1804, 185, 3588, 1175, 1528, 3602, 1804, + 3380, 2603, 2560, 2606, 2602, 3273, 2511, 2850, 2628, 1532, + 2625, 103, 2629, 2630, 1532, 174, 179, 176, 182, 183, + 184, 186, 188, 189, 190, 191, 2753, 2986, 3599, 1804, + 2752, 192, 194, 195, 196, 2697, 193, 2610, 2593, 2480, + 2482, 2483, 2610, 101, 1075, 1075, 1075, 2636, 2466, 1529, + 1532, 1530, 1531, 1820, 2635, 1529, 1532, 1530, 1531, 2426, + 3597, 1804, 1532, 2202, 1585, 3695, 1585, 2140, 2124, 2066, + 1856, 3560, 1804, 1836, 1158, 3558, 1804, 1532, 1157, 3445, + 3554, 1804, 2712, 1532, 4280, 1529, 4205, 1530, 1531, 174, + 179, 176, 182, 183, 184, 186, 188, 189, 190, 191, + 3663, 3551, 1804, 1532, 4033, 192, 194, 195, 196, 4000, + 3860, 130, 2666, 3708, 2402, 2401, 3705, 1529, 3689, 1530, + 1531, 1995, 3696, 3697, 3698, 3501, 3400, 2716, 1529, 2715, + 1530, 1531, 1529, 3500, 1530, 1531, 1929, 1529, 2558, 1530, + 1531, 4034, 3549, 1804, 1532, 3402, 3398, 2573, 3547, 1804, + 1532, 3296, 3072, 3043, 3545, 1804, 1532, 2555, 1529, 2550, + 1530, 1531, 2544, 1529, 2542, 1530, 1531, 2684, 1532, 3543, + 1804, 2049, 1532, 1955, 1251, 3541, 1804, 1951, 1996, 1997, + 1998, 1925, 2690, 1532, 128, 3042, 2439, 1532, 3657, 3658, + 2117, 1532, 3699, 2705, 4365, 2707, 1532, 2698, 4363, 1529, + 1532, 1530, 1531, 4316, 2710, 1529, 2711, 1530, 1531, 4157, + 2704, 1529, 4074, 1530, 1531, 3660, 3628, 2701, 2702, 2703, + 2706, 3627, 3626, 3315, 3291, 2169, 1529, 2667, 1530, 1531, + 2713, 710, 1529, 4307, 1530, 1531, 3539, 1804, 1532, 3043, + 3662, 3334, 3537, 1804, 3333, 3700, 3701, 3702, 3535, 1804, + 4153, 3337, 1529, 4035, 1530, 1531, 3338, 2118, 2676, 2677, + 3533, 1804, 1532, 2679, 3531, 1804, 2470, 1091, 3335, 1832, + 2728, 1532, 2680, 3336, 2445, 3529, 1804, 3305, 3307, 3527, + 1804, 2894, 2718, 3525, 1804, 1532, 3308, 3840, 3523, 1804, + 3651, 3278, 2717, 1529, 1532, 1530, 1531, 3838, 1532, 1529, + 3277, 1530, 1531, 1532, 1991, 1529, 3636, 1530, 1531, 1532, + 773, 3639, 2766, 2926, 3635, 2882, 2735, 1529, 1092, 1530, + 1531, 1529, 2929, 1530, 1531, 2199, 3814, 2197, 3813, 2764, + 3521, 1804, 1529, 2750, 1530, 1531, 1529, 1532, 1530, 1531, + 1529, 3302, 1530, 1531, 4116, 1529, 1075, 1530, 1531, 1529, + 2065, 1530, 1531, 1059, 3507, 1804, 3376, 1992, 1993, 1994, + 3025, 2927, 3047, 3483, 1804, 2659, 3339, 2245, 2995, 2996, + 2983, 2984, 2165, 2163, 2164, 1532, 2658, 2915, 1804, 2498, + 1108, 3812, 1075, 3003, 2246, 2657, 4041, 1529, 2656, 1530, + 1531, 1804, 2655, 2654, 1107, 2913, 1804, 2653, 1214, 1213, + 108, 2888, 1804, 3461, 2930, 3042, 2932, 4339, 3115, 1532, + 109, 1529, 1081, 1530, 1531, 2982, 4305, 1532, 2168, 1494, + 1529, 1081, 1530, 1531, 3078, 137, 3641, 110, 1532, 2865, + 1804, 2963, 46, 4395, 1529, 3295, 1530, 1531, 1532, 2482, + 2483, 3000, 1532, 1529, 3002, 1530, 1531, 1529, 2670, 1530, + 1531, 2947, 1529, 1772, 1530, 1531, 1532, 3001, 1529, 2917, + 1530, 1531, 4341, 108, 117, 2972, 4340, 2857, 1804, 110, + 4240, 1532, 4029, 109, 3375, 116, 2999, 115, 1532, 2465, + 2946, 2942, 1145, 3611, 2945, 110, 1529, 2937, 1530, 1531, + 1532, 1826, 3076, 3028, 3030, 2961, 1765, 3031, 3276, 2696, + 115, 3665, 2975, 2123, 1532, 2122, 3275, 3021, 3005, 2848, + 1804, 1532, 3045, 4098, 4097, 4077, 3846, 3048, 3049, 2960, + 2846, 1804, 3844, 116, 1529, 3009, 1530, 1531, 3843, 3012, + 2833, 1804, 1532, 3087, 2831, 1804, 3825, 3019, 3706, 2425, + 1532, 2565, 3022, 117, 3640, 3638, 3403, 2594, 2829, 1804, + 1938, 117, 1106, 3621, 116, 3824, 115, 1532, 1529, 3034, + 1530, 1531, 116, 2827, 1804, 2978, 1529, 3798, 1530, 1531, + 2825, 1804, 1532, 4367, 4366, 3044, 1532, 1529, 2941, 1530, + 1531, 3179, 2823, 1804, 2754, 2437, 3052, 1529, 1850, 1530, + 1531, 1529, 1842, 1530, 1531, 1532, 2821, 1804, 121, 122, + 4366, 1532, 3084, 3604, 1943, 1529, 4367, 1530, 1531, 4122, + 3674, 4186, 5, 3073, 3074, 1, 8, 1067, 3125, 3126, + 1529, 1532, 1530, 1531, 2819, 1804, 1497, 1529, 1532, 1530, + 1531, 3083, 2817, 1804, 1496, 3678, 4269, 1532, 3, 1529, + 726, 1530, 1531, 1532, 2427, 105, 1770, 1532, 4317, 2815, + 1804, 4265, 1532, 1529, 3085, 1530, 1531, 1532, 4266, 2035, + 1529, 3104, 1530, 1531, 2813, 1804, 2025, 1532, 2811, 1804, + 3737, 3107, 3142, 2354, 1532, 4030, 3826, 3123, 1838, 3827, + 3829, 1529, 1532, 1530, 1531, 3406, 2600, 2809, 1804, 1529, + 1532, 1530, 1531, 2807, 1804, 1532, 3160, 3161, 3162, 3163, + 3164, 3165, 3166, 3167, 3168, 3169, 1529, 1532, 1530, 1531, + 3704, 2563, 1166, 2805, 1804, 162, 3177, 2520, 2521, 3143, + 3600, 1529, 4217, 1530, 1531, 1529, 125, 1530, 1531, 2803, + 1804, 1132, 124, 3127, 1169, 2801, 1804, 1532, 1282, 2799, + 1804, 3144, 2595, 1532, 1529, 1804, 1530, 1531, 3728, 1837, + 1529, 3026, 1530, 1531, 2529, 1875, 3124, 1873, 1532, 2794, + 1804, 1874, 1872, 1877, 3237, 1876, 2790, 1804, 1532, 3181, + 1529, 4181, 1530, 1531, 3566, 3113, 3469, 1529, 3114, 1530, + 1531, 2755, 3562, 2389, 3567, 2389, 1529, 3498, 1530, 1531, + 1805, 1807, 1529, 3145, 1530, 1531, 1529, 2128, 1530, 1531, + 4324, 1529, 763, 1530, 1531, 3063, 1529, 2998, 1530, 1531, + 1532, 757, 200, 1864, 3244, 1532, 1529, 3246, 1530, 1531, + 3255, 1532, 2498, 1529, 1843, 1530, 1531, 2121, 1208, 2788, + 1804, 1529, 716, 1530, 1531, 2781, 1804, 3170, 3384, 1529, + 2633, 1530, 1531, 722, 1529, 1582, 1530, 1531, 4310, 2116, + 3217, 4134, 3274, 2391, 3013, 2391, 1529, 1893, 1530, 1531, + 2779, 1804, 3322, 1126, 92, 1118, 1096, 2498, 2498, 2498, + 2498, 2498, 3227, 3228, 3229, 3230, 3231, 1532, 2438, 2931, + 3245, 1125, 3247, 4007, 2500, 3323, 1529, 2498, 1530, 1531, + 2498, 3280, 1529, 3254, 1530, 1531, 3633, 3301, 3303, 2965, + 3282, 3255, 1532, 4006, 3306, 3299, 1081, 1529, 3710, 1530, + 1531, 4115, 1532, 3497, 3266, 3837, 4338, 1529, 1532, 1530, + 1531, 2077, 1532, 4204, 3023, 3219, 1078, 3221, 3344, 2500, + 2500, 2500, 2500, 2500, 3279, 3327, 3267, 3269, 3271, 1839, + 3272, 3281, 3289, 3232, 3233, 3234, 3235, 3587, 2727, 2500, + 3423, 2235, 2500, 3292, 3293, 3294, 1572, 3309, 3310, 1529, + 3431, 1530, 1531, 788, 1529, 3346, 1530, 1531, 3347, 3489, + 1529, 1080, 1530, 1531, 3436, 3328, 3435, 3432, 3331, 3329, + 3330, 1079, 3332, 1532, 3340, 111, 2497, 959, 3388, 3389, + 1824, 112, 1532, 3348, 3487, 3793, 1532, 2155, 3326, 786, + 785, 3312, 783, 2933, 1532, 3038, 3354, 2979, 3318, 1536, + 2911, 1532, 1535, 3318, 2910, 1880, 994, 2921, 1851, 3385, + 2990, 3387, 3386, 2988, 2987, 2668, 1529, 2505, 1530, 1531, + 2991, 2994, 2995, 2996, 2992, 3659, 2993, 2997, 3655, 4261, + 3657, 3658, 2499, 2495, 2940, 945, 944, 795, 3404, 2565, + 3425, 1529, 787, 1530, 1531, 777, 1008, 943, 942, 3433, + 3442, 1529, 3434, 1530, 1531, 2955, 1817, 1529, 4306, 1530, + 1531, 1529, 3297, 1530, 1531, 2906, 2957, 3024, 1532, 3457, + 3454, 3285, 3456, 1513, 2905, 1789, 1792, 2446, 2904, 1810, + 3464, 3466, 4140, 2695, 3495, 3405, 2903, 1788, 4147, 3471, + 3472, 3474, 3473, 2902, 3414, 3475, 3722, 3477, 3395, 3479, + 1894, 3490, 3491, 3492, 3493, 3494, 2991, 2994, 2995, 2996, + 2992, 3069, 2993, 2997, 2587, 1532, 74, 50, 4107, 1585, + 4178, 937, 1529, 1585, 1530, 1531, 934, 3795, 3796, 3797, + 3240, 1529, 3241, 1530, 1531, 1529, 4160, 1530, 1531, 3612, + 4161, 3614, 933, 1529, 4162, 1530, 1531, 2292, 1507, 1504, + 1529, 3053, 1530, 1531, 3622, 2130, 104, 1532, 3582, 3465, + 2901, 1532, 40, 39, 38, 3586, 1907, 1910, 1911, 1912, + 1913, 1914, 1915, 1532, 1916, 1917, 1919, 1920, 1918, 1921, + 1922, 1895, 1896, 1897, 1898, 1878, 1879, 1908, 37, 1881, + 36, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, + 30, 29, 1891, 1899, 1900, 1901, 1902, 2892, 1903, 1904, + 1905, 1906, 28, 27, 1892, 1532, 2498, 1529, 3321, 1530, + 1531, 26, 3619, 1532, 33, 23, 25, 1532, 24, 3672, + 3617, 1532, 3613, 22, 3615, 4377, 4378, 4407, 4243, 4183, + 1532, 3417, 4312, 3436, 1532, 3435, 3432, 4394, 1532, 2891, + 3673, 131, 1532, 2890, 4343, 3630, 1532, 3637, 4304, 3589, + 4303, 3591, 3592, 3593, 1529, 2889, 1530, 1531, 4254, 1532, + 3654, 3642, 4383, 3426, 4249, 3459, 3460, 1532, 2500, 60, + 57, 1532, 55, 3661, 139, 1532, 138, 58, 3664, 3668, + 3669, 56, 54, 53, 3667, 1532, 2240, 3666, 1254, 51, + 102, 2241, 1532, 35, 3684, 3685, 1529, 2886, 1530, 1531, + 1529, 34, 1530, 1531, 21, 2881, 20, 19, 18, 2874, + 1532, 17, 1529, 2873, 1530, 1531, 16, 3690, 15, 3692, + 11, 1532, 2872, 10, 43, 42, 2871, 41, 32, 2303, + 2870, 31, 44, 1532, 2869, 7, 2, 1532, 2868, 3056, + 2589, 1532, 3715, 0, 0, 0, 3719, 3720, 3721, 0, + 0, 2867, 0, 1532, 1529, 0, 1530, 1531, 0, 2866, + 0, 0, 1529, 2860, 1530, 1531, 1529, 2859, 1530, 1531, + 1529, 0, 1530, 1531, 1766, 3732, 3733, 2858, 0, 1529, + 3734, 1530, 1531, 1529, 2855, 1530, 1531, 1529, 0, 1530, + 1531, 1529, 0, 1530, 1531, 1529, 0, 1530, 1531, 0, + 0, 0, 2854, 0, 0, 0, 0, 0, 1529, 2386, + 1530, 1531, 3749, 2853, 0, 0, 1529, 0, 1530, 1531, + 1529, 1909, 1530, 1531, 1529, 2851, 1530, 1531, 0, 2844, + 1532, 0, 0, 2841, 1529, 1532, 1530, 1531, 3760, 2417, + 1532, 1529, 0, 1530, 1531, 2839, 0, 0, 0, 0, + 0, 0, 1532, 0, 0, 0, 1805, 2424, 1532, 1529, + 0, 1530, 1531, 0, 1532, 0, 0, 0, 0, 0, + 1529, 3811, 1530, 1531, 3818, 0, 3820, 3801, 0, 3802, + 3803, 3804, 1529, 0, 1530, 1531, 1529, 0, 1530, 1531, + 1529, 0, 1530, 1531, 0, 0, 0, 2449, 0, 3754, + 0, 0, 1529, 3791, 1530, 1531, 0, 3322, 0, 0, + 92, 0, 3322, 0, 1532, 0, 0, 0, 0, 1532, + 3821, 0, 2837, 0, 0, 1532, 0, 2796, 0, 0, + 3862, 1532, 2776, 2199, 0, 2197, 0, 0, 0, 0, + 0, 0, 0, 0, 2775, 0, 0, 0, 0, 0, + 2771, 3822, 1081, 0, 3852, 3854, 2769, 0, 0, 0, + 0, 0, 0, 0, 3842, 0, 3841, 0, 0, 0, + 3849, 3851, 46, 0, 0, 4013, 0, 0, 0, 1529, + 0, 1530, 1531, 0, 1529, 0, 1530, 1531, 0, 1529, + 0, 1530, 1531, 3711, 3712, 0, 0, 0, 3866, 3863, + 3864, 1529, 0, 1530, 1531, 0, 2761, 1529, 0, 1530, + 1531, 2732, 0, 1529, 3782, 1530, 1531, 2726, 0, 4005, + 0, 2577, 0, 2721, 0, 0, 0, 4004, 4020, 0, + 0, 0, 0, 0, 0, 0, 0, 4024, 4025, 0, + 0, 4032, 4015, 4016, 4017, 1794, 0, 4071, 4072, 0, + 0, 3318, 0, 0, 0, 4075, 0, 0, 2199, 1802, + 2197, 3856, 1795, 1529, 3819, 1530, 1531, 0, 1529, 0, + 1530, 1531, 0, 0, 1529, 0, 1530, 1531, 0, 0, + 1529, 0, 1530, 1531, 0, 0, 0, 2443, 2444, 1801, + 1799, 1800, 1796, 0, 1797, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4078, 0, 0, 0, 4081, + 0, 0, 0, 4123, 3322, 0, 0, 1798, 0, 0, + 0, 3858, 0, 0, 0, 0, 0, 0, 1603, 1604, + 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, + 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1623, 1624, 1625, + 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, + 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, + 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, + 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, + 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, + 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, + 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, + 1696, 1697, 1698, 1699, 1700, 1702, 1703, 1704, 1705, 1706, + 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, + 1717, 1723, 1724, 1725, 1726, 1740, 1741, 1742, 1743, 1744, + 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 4126, + 4076, 4095, 4127, 4124, 4105, 4104, 1794, 0, 4101, 0, + 4103, 0, 4141, 3321, 0, 0, 0, 4111, 3321, 0, + 1802, 0, 0, 1795, 0, 0, 0, 0, 0, 0, + 92, 0, 0, 0, 2714, 0, 0, 0, 2719, 4008, + 0, 0, 0, 0, 0, 0, 0, 0, 1790, 1791, + 1801, 1799, 1800, 1796, 0, 1797, 0, 0, 0, 0, + 0, 2722, 4143, 2723, 0, 0, 0, 0, 0, 2731, + 4131, 0, 1081, 2733, 2734, 4148, 0, 0, 1798, 0, + 4146, 4012, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, + 2748, 2749, 46, 2751, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 92, 0, 0, 2757, 2758, 2759, 2760, + 0, 2762, 2763, 4185, 2765, 4184, 0, 4166, 2767, 0, + 4167, 4201, 2772, 2773, 0, 2774, 0, 0, 2777, 2778, + 2780, 2782, 2783, 2784, 2785, 2786, 2787, 2789, 2791, 2792, + 2793, 2795, 4192, 2797, 2798, 2800, 2802, 2804, 2806, 2808, + 2810, 2812, 2814, 2816, 2818, 2820, 2822, 2824, 2826, 2828, + 2830, 2832, 2834, 2835, 2836, 46, 2838, 4230, 2840, 4206, + 2842, 2843, 4191, 2845, 2847, 2849, 4176, 0, 92, 2852, + 4216, 4128, 4195, 2856, 4032, 4219, 4215, 2861, 2862, 2863, + 2864, 4209, 4214, 4211, 4210, 1766, 4208, 4213, 4212, 0, + 2875, 2876, 2877, 2878, 2879, 2880, 0, 4238, 2884, 2885, + 3321, 0, 0, 0, 4256, 2887, 0, 4255, 0, 0, + 2893, 0, 0, 0, 0, 2896, 2897, 2898, 2899, 2900, + 4268, 4296, 4230, 4273, 4260, 92, 2907, 2908, 4285, 2909, + 46, 0, 2912, 2914, 2449, 4298, 2916, 4283, 0, 0, + 0, 4155, 0, 0, 0, 0, 2928, 4197, 0, 4165, + 3318, 0, 4295, 0, 0, 4202, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4300, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2962, 0, + 92, 4311, 0, 0, 0, 0, 0, 46, 0, 0, + 0, 4337, 2077, 4326, 0, 4327, 0, 4361, 0, 4330, + 2199, 0, 2197, 0, 0, 4336, 0, 0, 0, 0, + 0, 4133, 4356, 1766, 0, 4358, 4360, 4362, 92, 4364, + 4381, 0, 0, 0, 4230, 0, 0, 0, 4298, 0, + 4371, 0, 0, 0, 3436, 0, 3435, 3432, 0, 0, + 4392, 4382, 46, 0, 4151, 0, 0, 0, 0, 0, + 0, 0, 4291, 0, 0, 0, 0, 4396, 4139, 4404, + 0, 4402, 0, 0, 92, 4409, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4412, 0, 0, 0, + 46, 0, 0, 0, 0, 0, 0, 0, 4415, 92, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4421, 4425, 92, 92, 2199, 0, 2197, 4429, 92, 4428, + 4430, 4072, 4298, 4424, 4427, 0, 0, 0, 4298, 0, + 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, + 0, 0, 0, 0, 4196, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 46, 0, 0, 0, 0, 0, 0, 0, 198, + 0, 0, 0, 0, 46, 46, 0, 0, 0, 0, + 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 137, 0, 159, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, + 4248, 0, 0, 0, 0, 0, 0, 0, 0, 1893, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 170, 0, 0, 0, 0, 0, 158, 0, + 0, 0, 0, 0, 0, 0, 3155, 3156, 3157, 3158, + 3159, 0, 0, 198, 0, 0, 0, 0, 177, 1773, + 1893, 178, 0, 0, 3062, 0, 3174, 0, 0, 0, + 1933, 0, 0, 0, 0, 0, 137, 0, 159, 775, + 0, 0, 0, 146, 147, 169, 168, 197, 0, 0, + 0, 4325, 180, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 708, 0, 0, 170, 0, 0, 0, + 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1062, 0, 0, 0, 0, 0, 0, + 0, 0, 177, 0, 0, 178, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1880, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1946, 1947, 169, + 168, 197, 0, 0, 0, 0, 0, 1140, 0, 0, + 163, 144, 166, 151, 143, 1105, 164, 165, 1111, 1111, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 181, 0, 0, 0, 0, 1880, 0, + 0, 0, 187, 152, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 155, 153, + 148, 149, 150, 154, 0, 0, 0, 0, 0, 0, + 145, 0, 0, 0, 0, 0, 0, 0, 0, 156, + 0, 0, 1894, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 163, 1948, 166, 0, 1945, 0, + 164, 165, 0, 0, 3324, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, + 0, 0, 3342, 1894, 0, 0, 187, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1907, 1910, + 1911, 1912, 1913, 1914, 1915, 0, 1916, 1917, 1919, 1920, + 1918, 1921, 1922, 1895, 1896, 1897, 1898, 1878, 1879, 1908, + 0, 1881, 172, 1882, 1883, 1884, 1885, 1886, 1887, 1888, + 1889, 1890, 0, 0, 1891, 1899, 1900, 1901, 1902, 0, + 1903, 1904, 1905, 1906, 0, 0, 1892, 0, 0, 1907, + 1910, 1911, 1912, 1913, 1914, 1915, 0, 1916, 1917, 1919, + 1920, 1918, 1921, 1922, 1895, 1896, 1897, 1898, 1878, 1879, + 1908, 0, 1881, 0, 1882, 1883, 1884, 1885, 1886, 1887, + 1888, 1889, 1890, 0, 0, 1891, 1899, 1900, 1901, 1902, + 0, 1903, 1904, 1905, 1906, 0, 0, 1892, 0, 0, + 0, 3463, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, + 0, 0, 0, 3480, 3481, 0, 3482, 3484, 3486, 0, + 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3499, 0, 0, 0, 0, 3502, + 0, 3504, 3505, 3506, 3508, 3509, 3510, 3511, 3512, 3513, + 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3522, 3524, 3526, + 3528, 3530, 3532, 3534, 3536, 3538, 3540, 3542, 3544, 3546, + 3548, 3550, 3552, 3553, 3555, 3556, 3557, 3559, 0, 0, + 3561, 0, 3563, 3564, 3565, 0, 0, 3569, 3570, 3571, + 3572, 3573, 3574, 3575, 3576, 3577, 3578, 3579, 0, 0, + 0, 0, 0, 0, 167, 0, 3585, 0, 0, 0, + 3590, 0, 0, 0, 3594, 3595, 0, 3596, 3598, 160, + 3601, 3603, 161, 3605, 3606, 3607, 3608, 0, 0, 0, + 0, 0, 0, 3616, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1909, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, + 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3648, 3649, 0, 0, 3653, 0, 0, + 0, 0, 0, 0, 1909, 0, 0, 0, 0, 0, + 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 160, 0, 0, 161, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, + 0, 0, 0, 0, 185, 174, 179, 176, 182, 183, + 184, 186, 188, 189, 190, 191, 0, 0, 0, 0, + 0, 192, 194, 195, 196, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3726, 0, + 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1255, 0, 1263, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3744, 0, 0, + 3748, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, + 179, 176, 182, 183, 184, 186, 188, 189, 190, 191, + 0, 0, 0, 0, 3761, 192, 194, 195, 196, 0, + 0, 0, 0, 0, 0, 0, 0, 1057, 0, 1503, + 0, 0, 995, 1058, 1009, 1010, 1011, 996, 0, 0, + 997, 998, 0, 999, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1533, 0, 0, 0, + 0, 1012, 1013, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3784, 0, + 0, 0, 0, 0, 0, 0, 0, 1591, 0, 0, + 0, 3792, 0, 0, 0, 0, 0, 0, 3799, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1014, 1015, 1016, 1017, 1018, 1019, 1020, + 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, + 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, + 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, + 1051, 1052, 1053, 1054, 1055, 4231, 0, 0, 0, 0, + 0, 0, 0, 0, 91, 48, 49, 93, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 98, 0, 0, 0, 52, 81, 82, + 0, 79, 83, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 80, 0, 0, 0, 3439, 0, 0, + 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, + 0, 0, 0, 4021, 0, 0, 0, 0, 0, 0, + 0, 0, 4028, 0, 0, 67, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 101, 4413, 0, + 0, 4038, 4039, 4040, 0, 4042, 0, 4043, 4044, 0, + 0, 0, 0, 4047, 4048, 4049, 4050, 4051, 4052, 4053, + 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062, 4063, + 4064, 4065, 4066, 4067, 4068, 0, 4070, 4073, 3440, 3441, + 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, + 0, 0, 4082, 4083, 4084, 4085, 4086, 4088, 4089, 4091, + 4093, 4094, 4096, 0, 0, 0, 4100, 0, 0, 0, + 4102, 0, 0, 0, 0, 0, 0, 4112, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1853, 0, 4132, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1841, 0, 0, 0, + 0, 0, 0, 1870, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 95, 59, 62, 61, 64, 0, 78, + 0, 0, 87, 84, 0, 4189, 0, 0, 0, 0, + 0, 0, 0, 0, 1930, 0, 0, 0, 0, 0, + 0, 4188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4190, 66, 97, 96, + 0, 0, 76, 77, 63, 0, 0, 0, 0, 0, + 85, 86, 0, 0, 0, 0, 0, 0, 2005, 0, + 0, 0, 990, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2050, 4187, 69, 0, 70, 71, 72, + 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2078, 0, 0, 0, 0, + 0, 0, 0, 203, 0, 0, 203, 0, 0, 0, + 761, 2089, 0, 0, 0, 767, 0, 0, 2093, 2082, + 0, 0, 0, 0, 0, 0, 203, 0, 0, 2104, + 2105, 2106, 2107, 2108, 2109, 2110, 0, 0, 0, 0, + 0, 65, 0, 203, 0, 0, 0, 0, 0, 0, + 0, 0, 4156, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, + 203, 767, 0, 767, 0, 0, 4171, 0, 0, 0, + 0, 0, 4174, 0, 4175, 0, 0, 0, 198, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1942, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4200, 137, 0, 159, 0, 4229, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, + 0, 0, 0, 0, 0, 4224, 4225, 0, 0, 0, + 0, 0, 0, 94, 0, 0, 0, 0, 0, 4232, + 4234, 4236, 0, 4228, 0, 0, 0, 0, 0, 0, + 0, 170, 0, 0, 0, 0, 0, 158, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4259, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 177, 4281, 0, + 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1946, 1947, 169, 168, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4308, 0, 2143, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4331, 4333, 4335, 0, 0, 2150, 2151, + 2152, 2153, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2166, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4376, 0, 163, + 1948, 166, 0, 1945, 0, 164, 165, 0, 0, 2205, + 2206, 0, 0, 0, 0, 2229, 0, 0, 2233, 2234, + 0, 0, 181, 2239, 0, 0, 0, 0, 0, 0, + 0, 187, 0, 0, 0, 4405, 4406, 0, 2251, 2252, + 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 0, 2262, + 0, 75, 0, 2284, 2285, 2286, 2287, 2288, 2289, 2290, + 2291, 2293, 0, 2298, 0, 2300, 2301, 2302, 0, 2304, + 2305, 2306, 4423, 2308, 2309, 2310, 2311, 2312, 2313, 2314, + 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, + 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, + 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, + 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2357, + 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, + 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, + 2378, 2379, 0, 0, 0, 0, 0, 2385, 0, 2387, + 0, 2393, 2394, 2395, 2396, 2397, 2398, 0, 0, 0, + 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, + 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 0, 2418, + 2419, 2420, 2421, 2422, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 91, 48, 49, 93, 0, 0, 0, 1111, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 98, 0, 0, 0, 52, 81, 82, 0, 79, + 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 80, 2484, 0, 0, 0, 0, 0, 0, 0, + 2488, 0, 2491, 103, 0, 2143, 0, 2478, 2479, 167, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2517, 0, 101, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, + 203, 0, 0, 0, 0, 0, 0, 0, 91, 48, + 49, 93, 0, 0, 0, 88, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2561, 0, 98, 0, 0, + 0, 52, 81, 82, 4380, 79, 83, 767, 0, 767, + 767, 0, 0, 0, 0, 0, 0, 80, 160, 0, + 0, 161, 0, 0, 0, 0, 0, 0, 0, 103, + 0, 767, 203, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, + 0, 0, 173, 0, 0, 0, 0, 0, 0, 185, + 1577, 101, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 95, 59, 62, 61, 64, 0, 78, 0, 0, + 87, 84, 0, 4189, 0, 0, 0, 0, 0, 2143, + 0, 193, 0, 0, 0, 2643, 0, 0, 0, 4188, + 0, 88, 0, 0, 0, 0, 2664, 2665, 0, 0, + 2669, 0, 0, 2672, 4190, 66, 97, 96, 0, 0, + 76, 77, 63, 2675, 0, 0, 0, 0, 85, 86, + 2678, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 174, 179, 176, 182, 183, 184, + 186, 188, 189, 190, 191, 0, 2681, 0, 0, 0, + 192, 194, 195, 196, 0, 0, 0, 0, 0, 0, + 0, 0, 4187, 69, 0, 70, 71, 72, 73, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 95, 59, 62, + 61, 64, 0, 78, 0, 0, 87, 84, 0, 4189, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4188, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, + 4190, 66, 97, 96, 0, 0, 76, 77, 63, 0, + 0, 0, 0, 0, 85, 86, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2730, 4187, 69, + 0, 70, 71, 72, 73, 0, 0, 2736, 2737, 2738, + 2739, 0, 0, 203, 0, 0, 0, 767, 767, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, + 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1591, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 767, 65, 0, 203, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, + 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, + 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 767, 0, 767, 0, 0, + 0, 0, 0, 0, 0, 767, 0, 0, 1577, 767, + 0, 0, 767, 767, 767, 767, 0, 767, 0, 767, + 767, 0, 767, 767, 767, 767, 767, 767, 0, 0, + 0, 100, 0, 0, 0, 1577, 767, 767, 1577, 767, + 1577, 203, 767, 0, 0, 0, 0, 94, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1057, 767, 0, 203, 0, 995, 1058, + 1009, 1010, 1011, 996, 0, 0, 997, 998, 0, 999, + 767, 0, 0, 0, 767, 0, 0, 203, 203, 0, + 0, 0, 0, 0, 0, 0, 0, 1012, 1013, 0, + 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, + 1841, 203, 0, 3004, 0, 0, 0, 0, 0, 0, + 203, 203, 203, 203, 203, 203, 203, 203, 203, 767, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, + 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, - 1035, 4150, 710, 4214, 1494, 4174, 1495, 1496, 1264, 2390, - 1257, 3389, 3356, 730, 1226, 708, 86, 86, 86, 2520, - 2646, 2911, 2912, 3421, 4215, 4172, 3419, 3356, 2639, 1458, - 86, 2084, 731, 88, 744, 4179, 4180, 1270, 2088, 2918, - 730, 730, 3376, 2514, 1464, 3305, 3306, 1271, 1129, 3392, - 1236, 1237, 4173, 1291, 748, 705, 2424, 1277, 742, 1290, - 3395, 1278, 3050, 4008, 720, 4009, 3009, 2919, 97, 3781, - 2642, 1283, 2643, 1985, 2551, 2590, 1740, 3034, 3382, 715, - 4246, 97, 1239, 1201, 2011, 2039, 3383, 2596, 2615, 1284, - 2616, 718, 2617, 1457, 728, 1289, 1276, 1272, 2594, 95, - 95, 95, 729, 1232, 3053, 1515, 1127, 1265, 3390, 1258, - 1266, 1267, 3656, 95, 3655, 2618, 1094, 1986, 3124, 1987, - 1207, 1206, 2592, 3377, 3378, 3940, 731, 3410, 2554, 1516, - 1517, 1518, 1519, 1520, 1521, 1522, 1524, 1523, 1525, 1526, - 2593, 3733, 2597, 1137, 2437, 4187, 1138, 1138, 731, 1176, - 1175, 731, 1174, 2595, 3304, 3190, 1173, 1172, 1171, 1170, - 1169, 1164, 695, 1743, 697, 711, 3307, 733, 1896, 732, - 701, 1177, 699, 703, 712, 704, 3307, 698, 4267, 709, - 4221, 1113, 700, 713, 714, 717, 721, 722, 723, 719, - 716, 1113, 707, 734, 1113, 1111, 2513, 1149, 2031, 1150, - 1186, 1891, 1089, 3054, 2580, 1296, 1149, 1296, 1296, 2579, - 1185, 2027, 1466, 1104, 1098, 1096, 1104, 1098, 1096, 1194, - 3327, 3033, 1889, 1888, 1887, 3019, 2028, 1810, 731, 1885, - 1242, 685, 1486, 1483, 1484, 1485, 1490, 1492, 1489, 1128, - 1488, 3003, 2573, 1486, 1483, 1484, 1485, 1490, 1492, 1489, - 1482, 1488, 2422, 2423, 3199, 731, 731, 1055, 1539, 1544, - 1545, 1482, 1548, 1550, 1551, 1552, 1553, 1554, 3567, 1557, - 1558, 1560, 1560, 3036, 1560, 1560, 1565, 1565, 1565, 1568, - 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, - 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, - 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, - 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, - 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, - 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, - 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, - 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, - 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, - 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, - 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, - 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, - 1689, 1690, 1691, 1135, 3727, 1285, 1167, 1692, 1536, 1694, - 1695, 1696, 1697, 1698, 1473, 4063, 1455, 1456, 3000, 4109, - 1454, 1565, 1565, 1565, 1565, 1565, 1565, 1549, 1997, 1996, - 1998, 1999, 2000, 3614, 3615, 3617, 1705, 1706, 1707, 1708, - 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, - 1532, 1533, 1534, 1535, 1248, 3023, 1781, 3684, 4148, 1811, - 1546, 1529, 1156, 1566, 1567, 3652, 1165, 1529, 95, 2967, - 2016, 1540, 1561, 1156, 1562, 1563, 3291, 735, 1917, 1124, - 3047, 4188, 1126, 3046, 4051, 1230, 3605, 1261, 1247, 3587, - 1253, 1254, 1255, 1256, 4147, 2571, 3357, 3358, 726, 1097, - 2949, 1156, 1097, 3022, 3727, 89, 3198, 1238, 2914, 3361, - 2849, 3357, 3358, 727, 1293, 1294, 730, 1733, 2163, 1235, - 1768, 2647, 1802, 1739, 3361, 126, 927, 3292, 2646, 3057, - 2517, 1693, 1055, 2877, 2879, 2909, 1055, 1530, 1531, 1241, - 693, 4178, 1055, 2466, 1529, 1526, 3511, 3070, 3411, 3283, - 2674, 1769, 3294, 2663, 1509, 1072, 1168, 1288, 1274, 2424, - 4260, 2043, 4077, 2231, 1246, 1155, 121, 1179, 1730, 3647, - 3579, 2518, 3289, 2591, 2097, 2024, 1155, 1816, 3097, 2516, - 3651, 1129, 195, 1121, 4176, 689, 1193, 1916, 2196, 4177, - 1123, 1122, 3305, 3306, 2533, 86, 44, 45, 88, 3290, - 4225, 94, 94, 94, 1155, 689, 3218, 1699, 1700, 1701, - 1702, 1703, 1704, 2519, 92, 94, 1166, 3216, 48, 76, - 77, 1065, 74, 78, 1496, 1749, 1750, 2515, 3776, 106, - 107, 1495, 1496, 3296, 75, 2674, 1497, 3622, 1730, 1127, - 1086, 1086, 3621, 2558, 122, 1729, 97, 1129, 1225, 689, - 1926, 1737, 2603, 2599, 2601, 2602, 2600, 2604, 2605, 2606, - 2607, 4069, 2223, 2196, 1925, 2683, 62, 2225, 109, 1915, - 2568, 2230, 2226, 1156, 1780, 2227, 2228, 2229, 95, 4216, - 2224, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, - 2020, 2566, 2018, 2019, 2017, 2021, 2022, 2023, 1497, 3060, - 3060, 3304, 2570, 1260, 3059, 3059, 1909, 2878, 1771, 1156, - 1167, 1747, 1229, 3307, 1262, 1751, 1275, 1734, 1245, 2044, - 1231, 1054, 1051, 1165, 2429, 2430, 2563, 1156, 83, 1745, - 1748, 731, 1893, 1894, 1895, 1902, 1919, 1919, 1497, 1774, - 1746, 4262, 2190, 1980, 4110, 4268, 2563, 2036, 1921, 1931, - 1962, 1932, 2015, 1934, 1936, 2422, 2423, 1940, 1942, 1944, - 1946, 1948, 1156, 3606, 1296, 1807, 1808, 2204, 1876, 2567, - 1067, 4043, 1128, 2352, 4218, 1920, 1155, 1053, 989, 990, - 991, 1159, 1149, 1884, 2205, 1494, 1161, 1495, 1496, 2565, - 1162, 1160, 4258, 4111, 3099, 4259, 95, 4257, 1899, 1970, - 1971, 1769, 3948, 1912, 1900, 1976, 1977, 1898, 3681, 2201, - 3682, 1163, 1155, 2005, 1192, 1752, 2129, 754, 1189, 1156, - 4044, 3947, 1228, 51, 54, 57, 56, 59, 3938, 73, - 1155, 1769, 82, 79, 3293, 1159, 1149, 1966, 1128, 736, - 1161, 4269, 3698, 3697, 1162, 1160, 3629, 1494, 3628, 1495, - 1496, 1923, 2119, 2120, 2653, 2654, 61, 91, 90, 2032, - 2003, 71, 72, 58, 3618, 1155, 3386, 1992, 3334, 80, - 81, 1149, 1152, 1153, 3323, 1113, 2975, 2974, 1958, 1146, - 1150, 1961, 2973, 1963, 2004, 2523, 1037, 1494, 1460, 1495, - 1496, 975, 1038, 989, 990, 991, 976, 2006, 1990, 977, - 978, 1132, 979, 130, 1131, 1130, 1989, 2012, 1988, 2013, - 2131, 1978, 2014, 63, 64, 2049, 65, 66, 67, 68, - 992, 993, 1155, 2202, 2132, 1527, 1528, 2130, 1149, 1152, - 1153, 2002, 1113, 1497, 1296, 1296, 1146, 1150, 1991, 1972, - 2045, 2046, 2071, 1969, 1521, 1522, 1524, 1523, 1525, 1526, - 87, 1968, 3077, 87, 2050, 1967, 1938, 1145, 1744, 4217, - 1810, 2057, 2058, 2059, 1519, 1520, 1521, 1522, 1524, 1523, - 1525, 1526, 3611, 2070, 736, 2956, 2539, 736, 2538, 1787, - 60, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, - 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, - 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, - 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, - 1033, 1034, 1035, 4150, 1497, 4230, 1769, 3578, 1788, 2158, - 2158, 2159, 2156, 2156, 2898, 4245, 3079, 1516, 1517, 1518, - 1519, 1520, 1521, 1522, 1524, 1523, 1525, 1526, 4072, 2121, - 2047, 2537, 2352, 2536, 4204, 1769, 2349, 2051, 4071, 2053, - 2054, 2055, 2056, 2722, 3376, 2351, 2060, 2535, 4047, 2534, - 89, 1497, 1515, 1493, 1769, 1511, 3297, 1512, 2072, 2242, - 3301, 984, 1494, 4046, 1495, 1496, 1497, 4045, 3300, 3943, - 1497, 1513, 1527, 1528, 1510, 2710, 1516, 1517, 1518, 1519, - 1520, 1521, 1522, 1524, 1523, 1525, 1526, 3927, 1497, 3926, - 3089, 3088, 3087, 3775, 1497, 3081, 3970, 3085, 103, 3080, - 85, 3078, 3302, 85, 105, 3773, 3083, 2098, 104, 42, - 3694, 3298, 42, 1730, 1728, 3082, 3299, 1727, 2670, 2191, - 112, 1497, 2128, 2078, 2079, 3377, 3378, 2119, 2120, 2117, - 2118, 111, 1726, 110, 3084, 3086, 3626, 2134, 1497, 2136, - 2137, 2138, 2139, 2140, 2141, 2143, 2145, 2146, 2147, 2148, - 2149, 2150, 2133, 1494, 2116, 1495, 1496, 3610, 4228, 1769, - 94, 103, 4156, 1769, 1497, 2898, 1769, 2162, 3396, 1769, - 105, 104, 3393, 2135, 2266, 1493, 1769, 1769, 2720, 2362, - 1503, 1504, 1505, 1506, 1507, 1508, 1502, 1499, 2360, 3326, - 1729, 3325, 689, 1557, 689, 3051, 2206, 2207, 2208, 2209, - 1494, 2361, 1495, 1496, 2898, 4141, 1769, 2898, 4120, 2348, - 2220, 2984, 2241, 1540, 4219, 1494, 2971, 1495, 1496, 1494, - 2350, 1495, 1496, 1725, 2258, 192, 2898, 4116, 4028, 1769, - 3600, 2197, 1769, 3665, 4062, 1769, 3004, 1494, 1719, 1495, - 1496, 2636, 2415, 1494, 2628, 1495, 1496, 1497, 131, 4065, - 153, 3951, 1769, 3975, 1497, 2627, 689, 1769, 3974, 2359, - 2585, 1725, 2365, 2366, 174, 2584, 1723, 2419, 2445, 3428, - 1494, 1721, 1495, 1496, 1722, 1720, 70, 1724, 2898, 3939, - 106, 107, 1497, 2396, 1543, 3665, 1769, 1494, 2362, 1495, - 1496, 2898, 3663, 2563, 1769, 3931, 2679, 2360, 164, 2074, - 1497, 2040, 106, 107, 152, 1515, 2395, 3069, 3585, 1769, - 2434, 2475, 2407, 1494, 2001, 1495, 1496, 2127, 1497, 2804, - 1769, 3316, 3315, 1497, 171, 3313, 3314, 172, 1993, 1516, - 1517, 1518, 1519, 1520, 1521, 1522, 1524, 1523, 1525, 1526, - 1769, 1118, 3311, 3312, 3311, 3310, 4154, 1769, 3930, 1905, - 1906, 163, 162, 191, 1983, 1979, 2485, 2486, 2487, 2383, - 1975, 1068, 1497, 2479, 2470, 2480, 2481, 2482, 2483, 2484, - 1974, 2469, 1973, 2488, 2678, 1118, 3673, 2451, 1789, 2490, - 1497, 2408, 2492, 2493, 2494, 2495, 2924, 1769, 2646, 3032, - 1880, 3013, 4152, 1769, 3010, 2410, 1494, 1286, 1495, 1496, - 2989, 112, 2506, 1494, 2473, 1495, 1496, 2401, 2552, 2402, - 4021, 1769, 111, 1497, 110, 4019, 1769, 1497, 2432, 2512, - 3006, 3007, 105, 2898, 2897, 2161, 1769, 1102, 2457, 2456, - 2455, 1494, 1103, 1495, 1496, 2472, 2471, 1517, 1518, 1519, - 1520, 1521, 1522, 1524, 1523, 1525, 1526, 2447, 1497, 1494, - 2549, 1495, 1496, 3582, 3547, 157, 1907, 160, 2522, 1904, - 4148, 158, 159, 2564, 2895, 2945, 1497, 1494, 175, 1495, - 1496, 1158, 1494, 4060, 1495, 1496, 2474, 181, 105, 1493, - 2507, 1919, 3248, 2503, 2496, 2498, 2499, 1769, 2521, 2557, - 2526, 2525, 2560, 3578, 2561, 1497, 4147, 1880, 1879, 1822, - 1821, 2916, 2916, 2577, 1497, 4016, 1769, 111, 4104, 3998, - 1769, 1494, 3278, 1495, 1496, 2923, 2507, 2556, 2555, 2559, - 4076, 3581, 2646, 1157, 1515, 2898, 2945, 2563, 2924, 1494, - 3531, 1495, 1496, 2946, 2581, 2578, 3313, 1497, 2582, 2583, - 3552, 1769, 2893, 2948, 3221, 2458, 2724, 689, 1516, 1517, - 1518, 1519, 1520, 1521, 1522, 1524, 1523, 1525, 1526, 3935, - 1770, 1772, 1494, 2804, 1495, 1496, 1494, 1497, 1495, 1496, - 1065, 2707, 2706, 1497, 2651, 2563, 2924, 2588, 2924, 3578, - 2546, 1493, 2427, 1055, 1055, 1055, 2672, 3545, 1769, 2414, - 3388, 1773, 1497, 2386, 2946, 689, 2671, 1494, 2161, 1495, - 1496, 1497, 2099, 1550, 2646, 1550, 166, 1515, 1497, 2083, - 3630, 2026, 1497, 1809, 689, 1494, 1140, 1495, 1496, 1139, - 95, 2666, 1791, 4183, 4123, 3962, 1776, 3928, 1497, 2621, - 3648, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1524, 1523, - 1525, 1526, 3788, 3646, 1494, 3643, 1495, 1496, 1515, 2362, - 2662, 3624, 1954, 1494, 3444, 1495, 1496, 3443, 2669, 3542, - 1769, 1882, 2505, 3384, 1543, 3540, 1769, 3631, 3632, 3633, - 3339, 2361, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1524, - 1523, 1525, 1526, 2638, 3503, 1769, 1494, 3335, 1495, 1496, - 3014, 1543, 3337, 1790, 1543, 1056, 1543, 689, 2644, 1497, - 3501, 1769, 161, 2981, 3497, 1769, 2502, 2497, 1731, 1955, - 1956, 1957, 2491, 1497, 2652, 2489, 1494, 1981, 1495, 1496, - 3494, 1769, 1494, 2008, 1495, 1496, 1914, 2658, 1910, 1878, - 123, 1230, 689, 1497, 2655, 2656, 2657, 1497, 3963, 2980, - 2520, 1494, 2128, 1495, 1496, 2399, 97, 4240, 2035, 689, - 1494, 4238, 1495, 1496, 4211, 3634, 2659, 1494, 2661, 1495, - 1496, 1494, 1950, 1495, 1496, 689, 2076, 2664, 4080, 2665, - 1515, 4084, 689, 3592, 3593, 4003, 3595, 1494, 95, 1495, - 1496, 2061, 2062, 689, 689, 689, 689, 689, 689, 689, - 2682, 3543, 2660, 2981, 1516, 1517, 1518, 1519, 1520, 1521, - 1522, 1524, 1523, 1525, 1526, 3492, 1769, 1497, 3635, 3636, - 3637, 154, 3331, 2187, 155, 1951, 1952, 1953, 2630, 2631, - 3330, 2848, 3329, 2633, 3248, 3490, 1769, 2993, 2622, 3488, - 1769, 3270, 2634, 2077, 3268, 2667, 3271, 3598, 3272, 3269, - 2933, 2934, 3597, 2718, 3267, 167, 2836, 3753, 1494, 3752, - 1495, 1496, 179, 2880, 2929, 2932, 2933, 2934, 2930, 3266, - 2931, 2935, 1494, 3964, 1495, 1496, 690, 2418, 1786, 2405, - 3586, 3226, 1055, 3225, 4042, 1497, 2158, 2883, 3766, 2156, - 1497, 3768, 1494, 3574, 1495, 1496, 1494, 3571, 1495, 1496, - 1070, 1497, 3238, 3240, 187, 3570, 1497, 2921, 2922, 3486, - 1769, 3241, 3751, 1073, 3235, 1497, 2445, 2881, 2025, 1055, - 2941, 1074, 2179, 2168, 2169, 2170, 2171, 2181, 2172, 2173, - 2174, 2186, 2182, 2175, 2176, 2183, 2184, 2185, 2177, 2178, - 2180, 1039, 2884, 3309, 2886, 2963, 2985, 2127, 2614, 2901, - 753, 1071, 2920, 2204, 1497, 168, 173, 170, 176, 177, - 178, 180, 182, 183, 184, 185, 1494, 1196, 1495, 1496, - 2205, 186, 188, 189, 190, 2613, 1497, 3484, 1769, 2124, - 2122, 2123, 3482, 1769, 2612, 2611, 2610, 1737, 2939, 2871, - 2910, 1082, 2609, 3480, 1769, 2608, 689, 1195, 3478, 1769, - 1497, 3404, 2980, 3063, 1497, 1081, 2891, 3476, 1769, 103, - 2966, 2968, 1780, 2899, 2969, 105, 103, 1459, 1730, 104, - 3020, 131, 3576, 105, 2913, 4159, 104, 4254, 2959, 2943, - 4061, 2429, 2430, 2896, 1494, 3018, 1495, 1496, 2997, 1494, - 1497, 1495, 1496, 2625, 1497, 3958, 3474, 1769, 2947, 3308, - 1494, 2950, 1495, 1496, 2937, 1494, 1543, 1495, 1496, 112, - 2512, 2957, 2960, 2187, 1494, 1497, 1495, 1496, 3472, 1769, - 111, 2199, 110, 2411, 1543, 3224, 2200, 3554, 3029, 2650, - 105, 2082, 2972, 3223, 2081, 4027, 42, 110, 112, 4026, - 4006, 3774, 3470, 1769, 3772, 2938, 3468, 1769, 2940, 111, - 2982, 110, 2983, 1494, 3771, 1495, 1496, 2986, 2987, 3764, - 1497, 2990, 3644, 2991, 2262, 2994, 2995, 2996, 3575, 3573, - 3340, 1497, 2547, 1897, 112, 1494, 3026, 1495, 1496, 1497, - 1080, 1902, 3466, 1769, 111, 111, 3464, 1769, 2916, 3763, - 3564, 3737, 3015, 3016, 1497, 2895, 3073, 3074, 3127, 1494, - 2708, 1495, 1496, 1494, 1497, 1495, 1496, 3450, 1769, 2397, - 3025, 1803, 2179, 2168, 2169, 2170, 2171, 2181, 2172, 2173, - 2174, 2186, 2182, 2175, 2176, 2183, 2184, 2185, 2177, 2178, - 2180, 1795, 3052, 1497, 4242, 4241, 4241, 1497, 4242, 1494, - 4048, 1495, 1496, 1494, 2345, 1495, 1496, 116, 117, 3090, - 3055, 3071, 3426, 1769, 3609, 2096, 1497, 3, 10, 99, - 2035, 1, 1497, 3509, 1494, 1047, 1495, 1496, 1497, 1462, - 2094, 2869, 1769, 9, 2377, 3108, 3109, 3110, 3111, 3112, - 3113, 3114, 3115, 3116, 3117, 2095, 2867, 1769, 8, 1461, - 3613, 1770, 2384, 4171, 706, 3125, 2842, 1769, 2387, 1735, - 3091, 4212, 4167, 4168, 1994, 1981, 1984, 3676, 2313, 1494, - 3959, 1495, 1496, 3027, 3343, 2553, 3642, 2510, 1148, 156, - 1494, 1086, 1495, 1496, 2467, 2819, 1769, 2468, 1494, 3505, - 1495, 1496, 2409, 1731, 4136, 1497, 120, 1106, 119, 1151, - 1065, 1497, 1259, 1494, 2548, 1495, 1496, 1497, 2811, 1769, - 3129, 3075, 3666, 1494, 3441, 1495, 1496, 2964, 3185, 3092, - 3061, 2976, 689, 3062, 2476, 1828, 1497, 1826, 1827, 2035, - 689, 1825, 689, 1830, 689, 2454, 1829, 4108, 3412, 2709, - 2256, 3510, 1494, 3072, 1495, 1496, 1494, 2087, 1495, 1496, - 743, 2929, 2932, 2933, 2934, 2930, 2936, 2931, 2935, 3005, - 3192, 3592, 3593, 737, 3203, 1494, 3194, 1495, 1496, 194, - 1817, 1494, 1796, 1495, 1496, 1497, 2445, 1494, 2080, 1495, - 1496, 3118, 1190, 696, 2348, 3317, 2348, 2802, 1769, 2586, - 3165, 702, 1547, 2800, 1769, 2350, 1497, 2350, 2075, 3440, - 3255, 3222, 87, 2951, 2524, 2445, 2445, 2445, 2445, 2445, - 1100, 1092, 3175, 3176, 3177, 3178, 3179, 2532, 2787, 1769, - 2339, 2340, 2341, 2342, 2343, 2445, 1497, 2398, 2445, 3203, - 2885, 3193, 1099, 3195, 3260, 3202, 3936, 2364, 3277, 3256, - 2367, 2368, 3568, 3234, 1494, 3236, 1495, 1496, 3230, 2903, - 1494, 3239, 1495, 1496, 3232, 2036, 1494, 3214, 1495, 1496, - 4041, 3215, 3217, 3219, 3765, 3220, 4121, 2785, 1769, 2961, - 1497, 3229, 3227, 1792, 3530, 1494, 2385, 1495, 1496, 2681, - 2194, 1537, 3242, 3243, 768, 2444, 939, 1778, 2783, 1769, - 3732, 2114, 3360, 766, 765, 1060, 763, 3279, 3262, 3263, - 3280, 3265, 3368, 3261, 1059, 1497, 3264, 3259, 3373, 106, - 107, 3273, 2887, 3281, 1497, 2917, 1501, 1500, 2781, 1769, - 974, 2875, 1497, 3228, 1494, 1804, 1495, 1496, 3287, 2928, - 2926, 2925, 2623, 1497, 2452, 689, 3594, 3590, 4163, 2446, - 2442, 3319, 689, 3320, 3318, 1494, 2894, 1495, 1496, 925, - 924, 775, 767, 689, 689, 2447, 757, 689, 988, 2626, - 923, 922, 2779, 1769, 3370, 3372, 3369, 3371, 3341, 689, - 3035, 3385, 3037, 2512, 3362, 1494, 689, 1495, 1496, 3321, - 3322, 1058, 2962, 3379, 2447, 2447, 2447, 2447, 2447, 3381, - 1478, 1754, 1757, 2406, 3245, 1119, 3409, 2777, 1769, 4067, - 1497, 2649, 689, 3399, 2447, 3438, 3432, 2447, 3397, 2637, - 1753, 4074, 3251, 3400, 2775, 1769, 3351, 3251, 3407, 1494, - 3660, 1495, 1496, 3332, 3011, 2773, 1769, 2540, 3417, 69, - 46, 3414, 3415, 4036, 3416, 4105, 917, 3418, 914, 3420, - 3734, 3422, 3735, 3736, 3433, 3434, 3435, 3436, 3437, 3188, - 3189, 4087, 4088, 913, 1494, 4089, 1495, 1496, 2251, 1472, - 1469, 4185, 2089, 1494, 98, 1495, 1496, 36, 35, 34, - 33, 1494, 32, 1495, 1496, 26, 25, 1550, 24, 23, - 22, 1550, 1494, 2668, 1495, 1496, 29, 2673, 1543, 19, - 2035, 21, 2771, 1769, 20, 18, 3354, 3555, 4207, 3557, - 4253, 125, 55, 3342, 52, 50, 133, 132, 3525, 53, - 2676, 49, 2677, 1233, 47, 3529, 96, 31, 2685, 30, - 17, 16, 2687, 2688, 15, 14, 13, 12, 11, 7, - 6, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702, - 2703, 39, 2705, 38, 37, 28, 3254, 27, 40, 1494, - 3408, 1495, 1496, 4, 2998, 2542, 0, 0, 0, 2445, - 0, 0, 0, 0, 0, 2711, 2712, 2713, 2714, 0, - 2716, 2717, 3607, 2719, 3565, 3572, 3560, 2721, 3373, 0, - 1497, 2726, 2727, 3556, 2728, 3558, 0, 2731, 2732, 2734, - 2736, 2737, 2738, 2739, 2740, 2741, 2743, 2745, 2746, 2747, - 2749, 3577, 2751, 2752, 2754, 2756, 2758, 2760, 2762, 2764, - 2766, 2768, 2770, 2772, 2774, 2776, 2778, 2780, 2782, 2784, - 2786, 2788, 2789, 2790, 3599, 2792, 3363, 2794, 3601, 2796, - 2797, 3602, 2799, 2801, 2803, 3372, 3369, 3608, 2806, 3596, - 0, 3532, 2810, 3534, 3535, 3536, 2815, 2816, 2817, 2818, - 3625, 1497, 3627, 0, 3402, 3403, 1497, 0, 3562, 2829, - 2830, 2831, 2832, 2833, 2834, 0, 0, 2838, 2839, 1497, - 0, 0, 2769, 1769, 0, 2841, 0, 0, 0, 0, - 2847, 1497, 0, 0, 0, 2850, 2851, 2852, 2853, 2854, - 0, 3589, 1497, 0, 0, 0, 2861, 2862, 0, 2863, - 3619, 3620, 2866, 2868, 2409, 1497, 2870, 0, 0, 1497, - 3603, 3604, 0, 689, 0, 0, 2882, 3670, 3671, 1497, - 0, 1981, 0, 1497, 0, 0, 0, 1497, 0, 1494, - 3672, 1495, 1496, 0, 0, 0, 2900, 0, 2447, 1497, - 0, 0, 0, 2767, 1769, 0, 2689, 0, 2765, 1769, - 0, 0, 3653, 0, 0, 3688, 3657, 3658, 3659, 0, - 0, 2763, 1769, 2704, 0, 0, 0, 0, 0, 0, - 0, 0, 689, 2761, 1769, 0, 0, 689, 0, 0, - 0, 0, 0, 0, 2759, 1769, 3699, 0, 0, 1497, - 0, 0, 0, 1497, 0, 0, 0, 2757, 1769, 0, - 1494, 3430, 1495, 1496, 1497, 1494, 0, 1495, 1496, 0, - 0, 2755, 1769, 0, 0, 2753, 1769, 0, 1494, 2865, - 1495, 1496, 0, 0, 3740, 0, 3741, 3742, 3743, 0, - 1494, 2864, 1495, 1496, 3750, 0, 0, 3757, 0, 3759, - 0, 1494, 1497, 1495, 1496, 0, 0, 0, 0, 3730, - 0, 1497, 0, 689, 1494, 3760, 1495, 1496, 1494, 0, - 1495, 1496, 3255, 0, 0, 87, 0, 3255, 1494, 1497, - 1495, 1496, 1494, 1497, 1495, 1496, 1494, 0, 1495, 1496, - 0, 2748, 1769, 0, 0, 2744, 1769, 1497, 1494, 0, - 1495, 1496, 0, 0, 0, 0, 2742, 1769, 3761, 2158, - 3790, 0, 2156, 3770, 3769, 0, 1543, 0, 0, 0, - 3782, 0, 3777, 3779, 0, 3780, 1497, 3693, 0, 689, - 689, 689, 689, 689, 689, 0, 0, 0, 0, 0, - 0, 0, 0, 3942, 2735, 1769, 0, 0, 1494, 3794, - 1495, 1496, 1494, 2860, 1495, 1496, 0, 0, 689, 689, - 0, 3649, 3650, 1494, 0, 1495, 1496, 0, 2385, 0, - 0, 2733, 1769, 0, 0, 2859, 0, 0, 3934, 0, - 0, 0, 0, 689, 3933, 0, 0, 0, 0, 2858, - 0, 0, 0, 3954, 0, 0, 3953, 0, 3932, 0, - 3961, 1494, 3949, 1495, 1496, 0, 0, 0, 0, 0, - 1494, 0, 1495, 1496, 0, 0, 4000, 4001, 2857, 0, - 3103, 3104, 3105, 3106, 3107, 3784, 0, 0, 1494, 0, - 1495, 1496, 1494, 3758, 1495, 1496, 0, 0, 2158, 4004, - 3122, 2156, 3791, 3792, 0, 0, 1494, 0, 1495, 1496, - 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, - 0, 0, 0, 3944, 3945, 3946, 0, 0, 0, 4007, - 0, 4049, 3255, 4010, 0, 1494, 3786, 1495, 1496, 0, - 0, 0, 3251, 0, 0, 0, 1568, 1569, 1570, 1571, - 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, - 1582, 1583, 1584, 1585, 1586, 1588, 1589, 1590, 1591, 1592, - 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, - 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, - 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, - 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, - 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, - 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, - 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, - 1663, 1664, 1665, 1667, 1668, 1669, 1670, 1671, 1672, 1673, - 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1688, - 1689, 1690, 1691, 1705, 1706, 1707, 1708, 1709, 1710, 1711, - 1712, 1713, 1714, 1715, 1716, 1717, 1718, 755, 3254, 4005, - 4050, 4034, 4033, 3254, 1497, 0, 4024, 0, 3093, 0, - 1086, 4068, 689, 4030, 0, 4032, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, - 0, 0, 3257, 0, 0, 1543, 0, 1759, 0, 0, - 1543, 689, 689, 689, 689, 689, 0, 0, 3937, 0, - 3275, 1767, 0, 3274, 1760, 4053, 1759, 0, 4057, 1981, - 1497, 689, 4052, 0, 689, 3282, 2035, 4070, 4073, 3941, - 1767, 0, 0, 1760, 4075, 0, 1497, 0, 0, 2403, - 2404, 1766, 1764, 1765, 1761, 0, 1762, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2856, 0, 1755, 1756, - 1766, 1764, 1765, 1761, 0, 1762, 0, 0, 1079, 1763, - 689, 1085, 1085, 0, 0, 0, 0, 0, 4093, 0, - 0, 4094, 0, 0, 0, 0, 1543, 4118, 1763, 0, - 0, 0, 87, 0, 0, 0, 689, 0, 0, 0, - 3167, 4103, 3169, 0, 0, 0, 0, 0, 0, 4112, - 689, 0, 2855, 1494, 0, 1495, 1496, 0, 3180, 3181, - 3182, 3183, 0, 0, 4124, 0, 4149, 0, 2846, 4127, - 0, 689, 4132, 0, 689, 4135, 4129, 4122, 4128, 3406, - 4126, 3961, 4138, 4131, 4130, 0, 0, 0, 4157, 0, - 4054, 0, 0, 0, 0, 0, 0, 0, 3254, 0, - 0, 3423, 3424, 4162, 3425, 3427, 3429, 4181, 42, 1494, - 0, 1495, 1496, 0, 4170, 4175, 0, 0, 0, 0, - 0, 0, 4191, 4149, 4189, 1494, 0, 1495, 1496, 0, - 4202, 0, 3442, 0, 0, 1497, 0, 3445, 0, 3447, - 3448, 3449, 3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, - 3459, 3460, 3461, 3462, 3463, 3465, 3467, 3469, 3471, 3473, - 3475, 3477, 3479, 3481, 3483, 3485, 3487, 3489, 3491, 3493, - 3495, 3496, 3498, 3499, 3500, 3502, 4223, 4206, 3504, 4226, - 3506, 3507, 3508, 4233, 2036, 3512, 3513, 3514, 3515, 3516, - 3517, 3518, 3519, 3520, 3521, 3522, 2158, 4236, 4239, 2156, - 4237, 4247, 4149, 4235, 3528, 4232, 4222, 4201, 3533, 1497, - 192, 42, 3537, 3538, 1497, 3539, 3541, 4255, 3544, 3546, - 4261, 3548, 3549, 3550, 3551, 4263, 4119, 2845, 4114, 1497, - 4059, 3559, 3251, 131, 0, 153, 0, 1497, 0, 689, - 0, 0, 4272, 4273, 4001, 4271, 0, 0, 0, 174, - 0, 0, 0, 0, 0, 2158, 4270, 4066, 2156, 0, - 1497, 0, 0, 0, 4078, 1497, 3583, 3584, 0, 0, - 3588, 0, 0, 0, 0, 1497, 0, 0, 0, 0, - 0, 1497, 0, 164, 1494, 4197, 1495, 1496, 0, 152, - 0, 0, 0, 0, 0, 689, 0, 0, 0, 1497, - 192, 2844, 0, 1497, 0, 0, 2843, 0, 0, 171, - 0, 0, 172, 0, 0, 1497, 0, 0, 0, 0, - 0, 2840, 0, 131, 689, 0, 0, 0, 0, 2835, - 0, 0, 0, 0, 140, 141, 163, 162, 191, 174, - 0, 0, 0, 0, 689, 0, 689, 689, 689, 0, - 0, 4113, 2828, 1497, 0, 0, 0, 2827, 1494, 0, - 1495, 1496, 0, 1494, 1497, 1495, 1496, 2826, 0, 0, - 0, 0, 0, 2825, 0, 3664, 1497, 0, 1494, 0, - 1495, 1496, 0, 0, 1497, 2958, 1494, 0, 1495, 1496, - 0, 2824, 192, 0, 0, 2823, 0, 0, 1497, 171, - 0, 0, 172, 0, 1497, 0, 0, 2822, 1497, 1494, - 0, 1495, 1496, 0, 1494, 131, 1495, 1496, 1497, 0, - 3683, 0, 1497, 3687, 1494, 0, 1495, 1496, 191, 0, - 1494, 174, 1495, 1496, 1497, 0, 0, 0, 1497, 0, - 157, 138, 160, 145, 137, 2821, 158, 159, 1494, 0, - 1495, 1496, 1494, 175, 1495, 1496, 2820, 3700, 0, 1497, - 0, 0, 181, 146, 1494, 0, 1495, 1496, 2814, 1497, - 0, 0, 0, 1497, 0, 0, 2813, 149, 147, 142, - 143, 144, 148, 0, 0, 4220, 0, 1497, 1731, 139, - 2812, 171, 0, 0, 172, 0, 2809, 0, 150, 0, - 2808, 1497, 1494, 0, 1495, 1496, 1497, 0, 0, 0, - 2807, 1497, 0, 1494, 2805, 1495, 1496, 1497, 0, 0, - 191, 3723, 4205, 1497, 0, 1494, 2798, 1495, 1496, 0, - 2795, 1846, 0, 1494, 3731, 1495, 1496, 0, 0, 0, - 1497, 3738, 0, 175, 0, 1497, 0, 1494, 0, 1495, - 1496, 2793, 181, 1494, 0, 1495, 1496, 1494, 0, 1495, - 1496, 2791, 0, 0, 0, 2750, 0, 1494, 0, 1495, - 1496, 1494, 0, 1495, 1496, 0, 1981, 0, 0, 2730, - 0, 0, 0, 1494, 0, 1495, 1496, 1494, 0, 1495, - 1496, 166, 0, 2729, 0, 1543, 0, 0, 2725, 1981, - 0, 0, 0, 2723, 0, 0, 0, 0, 1494, 2715, - 1495, 1496, 0, 0, 0, 2686, 0, 0, 1494, 0, - 1495, 1496, 1494, 0, 1495, 1496, 0, 0, 0, 0, - 0, 0, 2680, 0, 0, 175, 1494, 2675, 1495, 1496, - 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, - 1494, 0, 1495, 1496, 1498, 1494, 0, 1495, 1496, 0, - 1494, 0, 1495, 1496, 0, 0, 1494, 0, 1495, 1496, - 0, 3950, 1494, 0, 1495, 1496, 1981, 0, 0, 0, - 3957, 166, 0, 0, 0, 1556, 0, 161, 1833, 1494, - 0, 1495, 1496, 0, 1494, 0, 1495, 1496, 0, 0, - 3967, 3968, 3969, 0, 3971, 0, 3972, 3973, 0, 0, - 0, 0, 3976, 3977, 3978, 3979, 3980, 3981, 3982, 3983, - 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3992, 3993, - 3994, 3995, 3996, 3997, 0, 3999, 4002, 0, 3721, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4011, 4012, 4013, 4014, 4015, 4017, 4018, 4020, 4022, - 4023, 4025, 0, 0, 0, 4029, 0, 0, 0, 4031, - 0, 0, 1847, 166, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 154, 0, 0, 155, - 0, 0, 0, 0, 4058, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 167, 0, 0, 0, 0, 0, 0, 179, 1860, 1863, - 1864, 1865, 1866, 1867, 1868, 0, 1869, 1870, 1872, 1873, - 1871, 1874, 1875, 1848, 1849, 1850, 1851, 1831, 1832, 1861, - 0, 1834, 0, 1835, 1836, 1837, 1838, 1839, 1840, 1841, - 1842, 1843, 0, 0, 1844, 1852, 1853, 1854, 1855, 187, - 1856, 1857, 1858, 1859, 0, 0, 1845, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 167, 0, 0, 0, 0, 0, 0, 179, 0, 0, - 168, 173, 170, 176, 177, 178, 180, 182, 183, 184, - 185, 0, 0, 0, 0, 0, 186, 188, 189, 190, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1981, 0, 0, 0, 0, 0, 0, 0, 187, - 0, 0, 0, 0, 0, 0, 0, 0, 1794, 0, - 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4040, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4083, 167, 0, 0, 0, 1883, 0, 0, 179, - 168, 173, 170, 176, 177, 178, 180, 182, 183, 184, - 185, 1846, 0, 0, 0, 4098, 186, 188, 189, 190, - 0, 4101, 0, 4102, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 187, 0, 0, 0, 1543, 4117, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1862, 4143, 4144, 4137, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4151, 4153, 4155, 0, - 0, 0, 168, 173, 170, 176, 177, 178, 180, 182, - 183, 184, 185, 0, 4161, 0, 0, 0, 186, 188, - 189, 190, 0, 0, 1981, 0, 4184, 0, 0, 0, - 0, 0, 0, 0, 2041, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 970, 0, 0, 0, 0, - 0, 0, 0, 0, 4203, 1731, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1833, 0, - 0, 0, 0, 0, 0, 0, 1738, 192, 0, 0, - 0, 0, 0, 0, 0, 2035, 0, 0, 1901, 4227, - 4229, 4231, 0, 0, 0, 0, 0, 0, 0, 0, - 131, 197, 153, 0, 197, 0, 0, 0, 741, 0, - 0, 4082, 0, 747, 0, 0, 174, 0, 0, 4092, - 0, 0, 0, 4252, 197, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, - 197, 4264, 4265, 0, 0, 0, 0, 0, 0, 0, - 164, 0, 1847, 0, 0, 1042, 152, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 747, 197, 747, - 0, 0, 0, 0, 0, 0, 171, 0, 0, 172, - 0, 1731, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1114, - 0, 1905, 1906, 163, 162, 191, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1860, 1863, - 1864, 1865, 1866, 1867, 1868, 0, 1869, 1870, 1872, 1873, - 1871, 1874, 1875, 1848, 1849, 1850, 1851, 1831, 1832, 1861, - 0, 1834, 0, 1835, 1836, 1837, 1838, 1839, 1840, 1841, - 1842, 1843, 0, 0, 1844, 1852, 1853, 1854, 1855, 0, - 1856, 1857, 1858, 1859, 0, 0, 1845, 0, 0, 0, - 0, 2109, 2110, 2111, 2112, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 157, 1907, 160, - 0, 1904, 0, 158, 159, 0, 0, 0, 0, 0, - 175, 0, 2164, 2165, 0, 0, 0, 0, 2188, 181, - 0, 2192, 2193, 0, 0, 0, 2198, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, - 2219, 0, 2221, 0, 0, 0, 2243, 2244, 2245, 2246, - 2247, 2248, 2249, 2250, 2252, 0, 2257, 0, 2259, 2260, - 2261, 0, 2263, 2264, 2265, 0, 2267, 2268, 2269, 2270, - 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, - 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, - 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, - 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, - 2311, 2312, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, - 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, - 2334, 2335, 2336, 2337, 2338, 0, 0, 0, 166, 0, - 2344, 0, 2346, 0, 2353, 2354, 2355, 2356, 2357, 2358, - 0, 1862, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2369, 2370, 2371, 2372, 2373, 2374, 2375, - 2376, 0, 2378, 2379, 2380, 2381, 2382, 0, 95, 0, - 0, 1037, 0, 0, 0, 0, 975, 1038, 989, 990, - 991, 976, 0, 0, 977, 978, 0, 979, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1085, 984, 0, 992, 993, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2425, 2426, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3374, 3375, 0, 0, 0, 0, - 0, 0, 0, 0, 2464, 0, 994, 995, 996, 997, - 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, - 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, + 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, + 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, + 1055, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3092, 3093, 3094, + 3095, 3096, 3097, 3439, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2143, 3108, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3116, 0, 0, 0, 0, 0, 0, 0, + 0, 767, 767, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 767, 3120, 0, 0, + 0, 0, 0, 0, 3440, 3441, 0, 203, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3146, 3147, 3148, 0, 0, 3150, + 0, 0, 3152, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3171, 3172, 3173, 0, 0, 767, 0, 0, + 0, 3178, 0, 0, 0, 0, 3180, 1577, 0, 3182, + 3183, 3184, 0, 0, 0, 3185, 3186, 0, 0, 3187, + 0, 3188, 0, 0, 0, 1577, 0, 0, 3189, 0, + 3190, 0, 0, 0, 3191, 0, 3192, 0, 0, 3193, + 0, 3194, 0, 3195, 0, 3196, 0, 3197, 0, 3198, + 0, 3199, 0, 3200, 0, 3201, 0, 3202, 0, 3203, + 0, 3204, 0, 3205, 0, 3206, 0, 3207, 0, 3208, + 0, 3209, 0, 3210, 0, 0, 0, 3211, 0, 3212, + 0, 3213, 0, 0, 3214, 0, 3215, 0, 3216, 0, + 2357, 3218, 0, 0, 3220, 0, 0, 3222, 3223, 3224, + 3225, 0, 0, 0, 0, 3226, 2357, 2357, 2357, 2357, + 2357, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3236, 0, 0, 0, 0, 0, 0, 0, 3249, + 0, 0, 3253, 0, 0, 0, 0, 0, 0, 0, + 0, 3256, 3257, 3258, 3259, 3260, 3261, 0, 0, 0, + 3262, 3263, 0, 3264, 0, 3265, 0, 0, 0, 0, + 0, 2403, 3283, 3284, 0, 3288, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1111, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, + 0, 767, 0, 0, 0, 0, 0, 0, 3313, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3343, 0, 767, 0, 0, 0, 0, + 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 0, 0, 0, 767, + 0, 0, 2403, 203, 0, 203, 0, 203, 203, 0, + 0, 0, 0, 0, 0, 0, 0, 3429, 0, 0, + 3401, 0, 767, 0, 0, 0, 0, 0, 0, 0, + 0, 3443, 0, 91, 48, 49, 93, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3455, 0, 0, 3458, + 0, 0, 98, 0, 0, 0, 52, 81, 82, 0, + 79, 83, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, + 767, 0, 0, 0, 103, 0, 767, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 767, 0, 67, 0, 0, 0, 767, 767, + 0, 3488, 767, 0, 767, 0, 101, 0, 0, 0, + 767, 0, 989, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3503, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, + 767, 0, 0, 0, 767, 767, 88, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 744, + 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, + 0, 0, 203, 0, 0, 0, 0, 0, 203, 0, + 0, 0, 0, 0, 3618, 0, 0, 0, 0, 203, + 203, 0, 0, 203, 0, 203, 203, 0, 0, 0, + 3624, 3625, 0, 0, 0, 0, 203, 0, 0, 0, + 0, 0, 0, 203, 0, 0, 0, 0, 0, 766, + 0, 766, 0, 766, 0, 0, 0, 0, 0, 0, + 0, 0, 95, 59, 62, 61, 64, 0, 78, 203, + 0, 87, 84, 0, 0, 0, 203, 0, 0, 0, + 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 66, 97, 96, 0, + 0, 76, 77, 63, 3688, 0, 0, 0, 0, 85, + 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1577, 0, 2403, 3707, 0, + 0, 0, 0, 68, 69, 0, 70, 71, 72, 73, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3731, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3750, 0, 3751, 0, 3752, 0, 3753, + 0, 0, 0, 0, 0, 0, 0, 3756, 3757, 0, + 0, 0, 0, 0, 0, 0, 946, 3762, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3763, 0, 3764, 0, 3765, 0, 3766, 0, 3767, + 0, 3768, 0, 3769, 0, 3770, 0, 3771, 0, 3772, + 0, 3773, 0, 3774, 0, 3775, 0, 3776, 0, 3777, + 0, 3778, 0, 0, 3779, 0, 0, 0, 3780, 0, + 3781, 0, 0, 0, 0, 0, 3783, 0, 0, 0, + 0, 0, 94, 0, 0, 0, 0, 0, 0, 765, + 0, 0, 0, 0, 0, 0, 0, 0, 3800, 0, + 0, 0, 0, 0, 0, 0, 0, 3805, 0, 3806, + 3807, 0, 3808, 3833, 3809, 0, 3834, 3835, 3836, 3810, + 1057, 0, 0, 1100, 0, 0, 1058, 0, 0, 203, + 0, 0, 0, 0, 0, 0, 2198, 203, 0, 0, + 0, 0, 0, 1136, 0, 1143, 0, 1147, 767, 0, + 0, 0, 0, 0, 3850, 0, 0, 0, 0, 0, + 767, 767, 767, 203, 0, 0, 0, 3859, 0, 0, + 3861, 0, 0, 0, 0, 0, 767, 0, 0, 0, + 0, 0, 3865, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 100, 0, 0, 0, 0, 0, 0, 4001, + 0, 203, 0, 0, 0, 0, 203, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, - 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 0, 0, + 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, + 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, + 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2508, 0, 0, 0, - 0, 0, 0, 154, 0, 0, 155, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3376, + 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, - 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, + 0, 0, 0, 0, 767, 0, 0, 0, 767, 767, + 75, 0, 0, 767, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1577, + 767, 0, 0, 0, 4110, 0, 0, 0, 0, 0, + 203, 203, 203, 203, 203, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, + 203, 0, 0, 0, 0, 0, 1057, 0, 0, 0, + 0, 0, 1058, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2198, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 197, 0, 197, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 766, 1488, 766, + 766, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3377, 3378, 1234, 0, 1240, 0, 0, 0, 1037, 0, - 747, 2352, 747, 747, 1038, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2157, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 747, 197, 0, 168, 173, 170, - 176, 177, 178, 180, 182, 183, 184, 185, 0, 0, - 0, 1037, 0, 186, 188, 189, 190, 1038, 0, 0, - 0, 0, 0, 1542, 0, 0, 1468, 2157, 0, 0, + 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 940, 0, 0, 0, 0, - 0, 944, 0, 0, 0, 941, 942, 0, 0, 0, - 943, 945, 0, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, - 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, - 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, - 1031, 1032, 1033, 1034, 1035, 0, 994, 995, 996, 997, - 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, - 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, - 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, - 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1576, 767, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, + 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, + 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, + 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, + 1052, 1053, 1054, 1055, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2684, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2690, 2691, 2692, 2693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1556, + 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4168, 767, 0, + 4169, 0, 4170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 203, 203, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, + 0, 0, 0, 1577, 0, 0, 767, 767, 1577, 203, + 203, 203, 203, 203, 0, 0, 0, 0, 4247, 0, + 0, 203, 0, 0, 0, 0, 0, 203, 0, 203, + 0, 0, 203, 203, 203, 4279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, - 747, 747, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, + 0, 0, 0, 0, 0, 0, 0, 766, 766, 0, + 0, 0, 0, 4292, 0, 4293, 0, 4294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1321, 0, 1321, 1321, 0, 0, 767, 0, 0, + 1577, 0, 0, 0, 0, 767, 0, 0, 0, 0, + 203, 0, 0, 0, 766, 1502, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 0, 0, 0, 0, 766, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, + 766, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 747, 0, 0, 197, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, - 0, 0, 0, 197, 0, 0, 0, 747, 0, 0, - 0, 0, 0, 0, 0, 1806, 0, 747, 0, 0, + 0, 0, 0, 0, 0, 766, 0, 766, 0, 0, + 0, 0, 4374, 0, 4375, 766, 0, 0, 1576, 766, + 0, 0, 766, 766, 766, 766, 0, 766, 0, 766, + 766, 0, 766, 766, 766, 766, 766, 766, 0, 0, + 0, 0, 0, 0, 0, 1576, 766, 766, 1576, 766, + 1576, 0, 766, 0, 0, 0, 0, 0, 0, 0, + 4410, 4411, 0, 0, 0, 0, 0, 0, 0, 0, + 101, 0, 0, 1057, 0, 0, 0, 0, 995, 1058, + 1009, 1010, 1011, 996, 766, 0, 997, 998, 0, 999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1823, 0, 0, 0, 0, 0, - 747, 0, 747, 0, 0, 0, 0, 0, 0, 0, - 747, 0, 0, 1542, 747, 1794, 0, 747, 747, 747, - 747, 0, 747, 0, 747, 747, 0, 747, 747, 747, - 747, 747, 747, 0, 0, 0, 0, 0, 0, 0, - 1542, 747, 747, 1542, 747, 1542, 197, 747, 0, 0, + 766, 0, 0, 0, 766, 1004, 0, 1012, 1013, 0, + 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1964, 0, 747, - 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 747, 0, 0, 747, 0, 197, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2009, 0, 197, 0, 0, 0, 0, 0, - 0, 197, 0, 0, 0, 0, 0, 0, 0, 2037, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 747, - 0, 0, 0, 0, 0, 2048, 0, 0, 0, 0, - 0, 0, 2052, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2063, 2064, 2065, 2066, 2067, 2068, 2069, + 0, 0, 0, 0, 0, 0, 0, 203, 0, 766, + 0, 0, 0, 0, 0, 0, 0, 3437, 3438, 0, + 0, 0, 0, 203, 203, 0, 0, 0, 0, 1014, + 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, + 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, + 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, + 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, + 1055, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, + 0, 1776, 1777, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3439, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 767, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1865, 0, 0, 0, 0, 767, 767, + 767, 767, 0, 0, 1924, 0, 0, 0, 0, 0, + 0, 766, 766, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3440, 3441, 766, 0, 0, 1136, + 0, 1954, 0, 0, 0, 0, 0, 0, 0, 1963, + 0, 0, 0, 1965, 0, 0, 1968, 1969, 1971, 1971, + 0, 1971, 0, 1971, 1971, 0, 1980, 1971, 1971, 1971, + 1971, 1971, 0, 0, 0, 0, 0, 0, 0, 0, + 2000, 2001, 0, 1136, 0, 0, 2006, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1576, 0, 0, + 0, 0, 0, 0, 0, 0, 2207, 0, 2048, 0, + 0, 0, 0, 0, 0, 1576, 0, 0, 0, 0, + 0, 960, 0, 0, 2069, 0, 0, 964, 2074, 0, + 0, 961, 962, 0, 0, 0, 963, 965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3068, - 0, 0, 0, 0, 0, 724, 0, 0, 0, 0, - 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3094, 3095, 3096, 0, - 0, 3098, 0, 0, 3100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3119, 3120, 3121, 0, 0, 0, - 0, 0, 0, 3126, 0, 746, 0, 746, 3128, 747, - 747, 3130, 3131, 3132, 0, 0, 0, 3133, 3134, 0, - 0, 3135, 0, 3136, 747, 0, 0, 0, 0, 0, - 3137, 0, 3138, 0, 0, 197, 3139, 0, 3140, 0, - 0, 3141, 0, 3142, 0, 3143, 0, 3144, 0, 3145, - 0, 3146, 0, 3147, 0, 3148, 0, 3149, 0, 3150, - 0, 3151, 0, 3152, 0, 3153, 2102, 3154, 0, 3155, - 0, 3156, 0, 3157, 0, 3158, 0, 0, 0, 3159, - 0, 3160, 0, 3161, 0, 747, 3162, 0, 3163, 0, - 3164, 0, 2316, 3166, 0, 1542, 3168, 0, 0, 3170, - 3171, 3172, 3173, 0, 0, 0, 0, 3174, 2316, 2316, - 2316, 2316, 2316, 1542, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3184, 0, 0, 0, 0, 0, 0, - 0, 3197, 0, 0, 3201, 0, 0, 0, 0, 0, - 0, 0, 0, 3204, 3205, 3206, 3207, 3208, 3209, 0, - 0, 0, 3210, 3211, 0, 3212, 0, 3213, 0, 0, + 0, 0, 0, 0, 0, 767, 0, 767, 0, 203, + 0, 0, 0, 1321, 0, 0, 203, 0, 0, 203, + 203, 203, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1577, 0, 0, 0, + 203, 0, 0, 767, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3276, + 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 0, 0, 767, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2363, + 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1321, 1321, 0, 0, 0, + 0, 0, 0, 0, 767, 0, 0, 0, 0, 766, + 2131, 767, 766, 767, 0, 0, 0, 0, 0, 0, + 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3338, 0, 0, 0, 197, 0, 0, 0, 0, 747, + 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, - 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, + 766, 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 197, 0, 0, 0, 747, 0, 0, 2363, 197, - 0, 197, 0, 197, 197, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, - 0, 0, 2431, 0, 0, 0, 0, 3431, 0, 0, - 2435, 0, 2438, 0, 0, 2102, 0, 0, 0, 0, + 0, 0, 766, 0, 0, 0, 0, 0, 766, 766, + 0, 0, 766, 0, 766, 0, 0, 0, 0, 0, + 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, - 0, 0, 0, 747, 747, 747, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, + 766, 0, 0, 0, 766, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, - 747, 747, 0, 0, 747, 0, 747, 0, 0, 0, - 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 767, 203, 0, 0, + 0, 0, 0, 0, 0, 1321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, - 0, 0, 747, 0, 0, 0, 747, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, - 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 197, 197, 0, 0, 197, 0, 197, 0, - 0, 0, 0, 0, 0, 2102, 0, 0, 197, 0, - 0, 0, 2598, 0, 0, 197, 0, 0, 746, 1453, - 746, 746, 0, 2619, 2620, 0, 0, 2624, 0, 0, - 0, 0, 0, 3645, 0, 0, 0, 0, 0, 2629, - 0, 197, 746, 0, 0, 0, 2632, 0, 197, 0, - 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3669, 0, 0, 0, - 0, 1541, 2635, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2440, 0, 0, 0, 0, + 0, 766, 767, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1577, 767, 0, 767, 2456, + 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 767, 2403, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1847, 0, 0, 1321, 0, 0, 0, + 0, 0, 0, 0, 0, 1576, 0, 766, 0, 0, + 0, 0, 0, 0, 0, 0, 1136, 0, 0, 0, + 0, 0, 767, 767, 0, 0, 201, 0, 0, 709, + 0, 0, 0, 203, 767, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1086, 0, 0, 0, + 0, 0, 767, 0, 1143, 0, 0, 0, 0, 0, + 2580, 0, 0, 0, 1112, 1112, 0, 0, 0, 0, + 0, 0, 0, 709, 0, 0, 1136, 0, 0, 0, + 0, 0, 1143, 1963, 0, 0, 1963, 0, 1963, 0, + 0, 0, 0, 767, 2609, 203, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 767, 0, 0, 0, 0, 0, 0, 1136, + 0, 0, 0, 0, 2193, 0, 0, 0, 2193, 2193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3689, 0, 3690, 1542, 3691, 2363, - 3692, 0, 0, 0, 0, 0, 0, 0, 3695, 3696, - 0, 0, 0, 0, 0, 0, 0, 0, 3701, 0, + 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3702, 0, 3703, 0, 3704, 0, 3705, 0, - 3706, 0, 3707, 0, 3708, 0, 3709, 0, 3710, 0, - 3711, 0, 3712, 0, 3713, 0, 3714, 0, 3715, 0, - 3716, 0, 3717, 0, 0, 3718, 0, 0, 0, 3719, - 0, 3720, 0, 0, 0, 0, 0, 3722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3739, - 0, 0, 0, 0, 0, 0, 0, 0, 3744, 0, - 3745, 3746, 0, 3747, 0, 3748, 0, 0, 0, 0, - 3749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 926, 0, 3778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3787, 0, 0, 3789, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3929, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 746, 746, - 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, - 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, - 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 747, 0, 0, 0, 0, 0, 0, 0, 746, - 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, - 0, 0, 0, 0, 746, 0, 0, 1110, 0, 1117, - 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, - 0, 197, 0, 0, 0, 746, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 746, 0, - 746, 0, 0, 0, 0, 0, 0, 2942, 746, 0, - 0, 1541, 746, 0, 0, 746, 746, 746, 746, 0, - 746, 4039, 746, 746, 0, 746, 746, 746, 746, 746, - 746, 0, 0, 0, 0, 0, 0, 0, 1541, 746, - 746, 1541, 746, 1541, 0, 746, 747, 0, 0, 0, - 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 767, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 747, 0, 0, 0, 746, 0, 0, - 747, 0, 0, 2992, 747, 747, 0, 0, 0, 747, - 746, 0, 0, 746, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1542, 747, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 197, 197, - 197, 197, 197, 197, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 197, 197, 3040, - 3041, 3042, 3043, 3044, 3045, 0, 0, 0, 0, 0, + 766, 766, 766, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2686, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 197, 0, 0, 0, 0, 0, 2102, 3056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, - 0, 0, 0, 3064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4081, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, + 0, 0, 3017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4095, 0, 0, 4096, 0, 4097, + 0, 1321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 746, 746, 0, + 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, + 0, 0, 0, 0, 766, 0, 0, 0, 766, 766, + 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1576, + 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, - 0, 4182, 0, 746, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1541, 0, 0, 0, 0, 0, 0, - 0, 0, 2166, 0, 0, 0, 747, 0, 0, 0, - 4198, 1541, 4199, 0, 4200, 0, 0, 0, 0, 0, - 0, 197, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 747, 0, 0, 0, 1542, 0, 0, 747, 747, 1542, - 197, 197, 197, 197, 197, 0, 0, 0, 0, 0, - 0, 0, 197, 0, 0, 0, 0, 0, 197, 0, - 197, 0, 0, 197, 197, 197, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4250, 0, 4251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 747, 0, 0, 1542, 0, 0, 0, 0, - 747, 0, 0, 0, 0, 197, 0, 746, 0, 0, - 3328, 0, 0, 0, 0, 0, 0, 0, 0, 197, - 1298, 0, 1298, 1298, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3366, 0, 0, 0, - 197, 0, 0, 197, 1467, 0, 0, 0, 0, 0, - 3380, 0, 0, 0, 0, 0, 0, 746, 0, 0, + 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3398, 0, 0, 3401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 746, 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, + 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2934, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2950, 2951, 2952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2967, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, - 0, 746, 746, 746, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 746, 0, 0, 0, 0, 0, 746, 746, - 0, 0, 746, 0, 746, 0, 0, 0, 0, 3561, - 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, - 746, 0, 0, 0, 746, 746, 0, 0, 0, 0, - 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, + 0, 709, 0, 709, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 197, 0, 197, 197, 197, 0, 0, - 0, 0, 0, 0, 3623, 747, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1741, 1742, 0, 0, 3638, 0, 3639, 3640, 3641, 0, + 3050, 0, 0, 0, 0, 0, 0, 0, 0, 766, + 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, + 0, 1147, 0, 0, 0, 0, 0, 0, 3070, 0, + 0, 0, 1963, 1963, 0, 0, 0, 3075, 0, 0, + 0, 0, 0, 1578, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3086, 0, 0, 0, 0, 766, + 0, 0, 0, 1576, 0, 0, 766, 766, 1576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 747, 747, 747, 747, 0, 0, - 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1818, 0, 0, 0, - 0, 746, 0, 0, 0, 0, 0, 1877, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1110, 0, 1913, 0, 0, 0, 0, 0, 0, 0, - 1922, 0, 0, 0, 1924, 0, 0, 1927, 1928, 1930, - 1930, 0, 1930, 0, 1930, 1930, 0, 1939, 1930, 1930, - 1930, 1930, 1930, 0, 0, 1541, 0, 746, 0, 0, - 0, 1959, 1960, 0, 1110, 0, 0, 1965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2007, + 3391, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2193, 0, 766, 0, 0, + 1576, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2029, 0, 0, 2033, 0, 0, 0, 0, - 0, 747, 0, 747, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1542, 0, 0, 0, 197, 0, - 0, 747, 0, 747, 0, 0, 0, 0, 0, 1298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2193, 0, 0, 0, 0, + 0, 0, 3462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 197, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 746, + 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, + 3238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 766, 0, 1321, 0, 0, 0, 0, 0, 0, 0, + 1086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 746, 747, 0, 0, 0, - 0, 0, 0, 747, 0, 747, 0, 0, 0, 1298, - 1298, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2090, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, - 2955, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1971, 0, 0, 0, 0, 0, 0, + 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1321, 0, 0, 0, 0, 0, 0, + 3325, 1971, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2152, 0, 0, 0, 0, - 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3677, 0, 1578, 0, + 0, 1578, 0, 1578, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2022, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 766, 766, 0, 0, 709, + 0, 1136, 0, 0, 0, 0, 0, 0, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 746, 0, 0, 0, 0, 0, 0, 746, 0, - 0, 0, 746, 746, 0, 0, 0, 746, 0, 0, + 2076, 709, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 709, 766, 766, + 766, 766, 0, 0, 709, 0, 0, 0, 0, 0, + 0, 0, 0, 2102, 2103, 709, 709, 709, 709, 709, + 709, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1541, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 747, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4079, 0, 0, 0, 0, 0, 746, 0, 0, 1298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1542, 747, 746, 747, 0, 2400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 747, 2363, 0, 0, 0, 0, 0, 0, - 0, 0, 2413, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1800, 0, 0, 1298, 0, - 0, 0, 0, 197, 747, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 766, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, - 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 746, 0, 0, 0, 0, 0, 747, - 0, 0, 0, 0, 197, 0, 1117, 0, 0, 0, - 0, 0, 0, 2529, 2530, 2531, 0, 0, 747, 0, - 747, 0, 0, 0, 746, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1110, 0, 0, 0, 0, 0, - 1117, 1922, 746, 0, 1922, 0, 1922, 0, 0, 0, - 0, 0, 2562, 0, 0, 0, 0, 0, 746, 0, - 0, 0, 1541, 0, 0, 746, 746, 1541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1110, 0, 0, - 0, 0, 2152, 0, 0, 0, 2152, 2152, 0, 0, + 0, 0, 0, 0, 0, 0, 1576, 0, 0, 0, + 0, 0, 0, 766, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3324, + 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 746, 0, 0, 1541, 0, 0, 0, 0, 746, 0, + 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, + 1578, 0, 0, 0, 0, 0, 0, 0, 0, 1147, + 1147, 0, 0, 0, 0, 0, 0, 0, 1578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3738, 3739, 3740, 3741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, + 0, 766, 0, 766, 0, 0, 0, 0, 0, 0, + 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3405, 0, 2640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2076, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1298, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2022, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1112, 0, 0, 0, 3816, + 0, 3816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1086, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3855, 0, 3857, + 0, 0, 0, 766, 0, 0, 0, 0, 709, 0, + 0, 0, 0, 0, 0, 2076, 709, 0, 709, 0, + 709, 2507, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 746, + 0, 0, 0, 0, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4023, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1576, 766, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 766, 766, 0, 0, 0, 0, 3816, 0, + 0, 0, 0, 0, 0, 3816, 0, 3816, 0, 0, + 0, 0, 0, 0, 0, 0, 4114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 766, 766, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 766, 0, 0, 1147, 0, 0, + 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, + 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 709, 709, 0, 0, 709, 0, 2671, 709, + 0, 0, 766, 0, 0, 0, 0, 0, 0, 709, + 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 709, 766, 0, 0, 0, 0, 0, 2683, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 766, 0, 0, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3612, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1578, 0, + 2076, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 746, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4172, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1147, 0, 4198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1321, 1321, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3887, 3889, + 3888, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3890, 3891, + 837, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4250, 4258, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2888, 746, 746, 746, 746, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4180, 0, 0, 0, + 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, + 2022, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2953, 1147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1924, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4263, 0, 0, 0, + 0, 0, 0, 0, 709, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2413, 0, 0, 0, 0, 0, 0, - 3012, 0, 0, 0, 1922, 1922, 0, 0, 0, 3017, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 746, - 0, 746, 0, 0, 0, 0, 3028, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1541, 0, 0, 0, 0, 0, 0, 746, - 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, + 4258, 0, 0, 0, 3895, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3903, + 3904, 0, 0, 3979, 3978, 3977, 0, 0, 3975, 3976, + 3974, 0, 1578, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 709, 709, 709, 709, 709, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 709, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3980, 960, 709, 813, + 814, 3981, 3982, 964, 3983, 816, 817, 961, 962, 0, + 811, 815, 963, 965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 746, 0, 0, 0, 0, 0, 0, 0, 2152, 0, - 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 746, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3884, + 3885, 3886, 3892, 3893, 3894, 3905, 3952, 3953, 3961, 3963, + 916, 3962, 3964, 3965, 3966, 3969, 3970, 3971, 3972, 3967, + 3968, 3973, 3867, 3871, 3868, 3869, 3870, 3882, 3872, 3873, + 3874, 3875, 3876, 3877, 3878, 3879, 3880, 3881, 3883, 3984, + 3985, 3986, 3987, 3988, 3989, 3898, 3902, 3901, 3899, 3900, + 3896, 3897, 3924, 3923, 3925, 3926, 3927, 3928, 3929, 3930, + 3932, 3931, 3933, 3934, 3935, 3936, 3937, 3938, 3906, 3907, + 3910, 3911, 3909, 3908, 3912, 3921, 3922, 3913, 3914, 3915, + 3916, 3917, 3918, 3920, 3919, 3939, 3940, 3941, 3942, 3943, + 3945, 3944, 3948, 3949, 3947, 3946, 3951, 3950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 966, 0, 967, 0, 0, 971, 0, 0, 0, + 973, 972, 0, 974, 936, 935, 0, 0, 968, 969, + 0, 970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, - 0, 746, 0, 746, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1112, 0, 709, 709, 709, + 0, 709, 0, 0, 0, 0, 0, 3990, 3991, 3992, + 3993, 3994, 3995, 3996, 3997, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1578, 0, 0, 0, + 0, 1578, 709, 709, 709, 709, 709, 0, 0, 0, + 0, 0, 0, 0, 3341, 0, 0, 0, 0, 0, + 2022, 0, 709, 0, 0, 709, 3349, 2076, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3186, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1298, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3815, 3817, 3816, 3882, 3883, - 3884, 3885, 3886, 3887, 3888, 3818, 3819, 817, 0, 0, - 0, 0, 0, 0, 0, 0, 1930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1298, 0, 0, 0, 0, 0, 0, 3258, 1930, 0, + 0, 0, 0, 1578, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 709, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1110, 0, 0, 0, 0, 0, 0, 0, - 2413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1541, 746, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 746, 746, 0, 0, 0, 0, 0, 0, 0, 3823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3831, 3832, 0, 0, 3907, 3906, - 3905, 0, 0, 3903, 3904, 3902, 0, 0, 0, 0, - 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 746, 0, 0, 0, 0, 0, 0, 3908, - 940, 1877, 793, 794, 3909, 3910, 944, 3911, 796, 797, - 941, 942, 0, 791, 795, 943, 945, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 746, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3812, 3813, 3814, 3820, 3821, 3822, 3833, 3880, - 3881, 3889, 3891, 896, 3890, 3892, 3893, 3894, 3897, 3898, - 3899, 3900, 3895, 3896, 3901, 3795, 3799, 3796, 3797, 3798, - 3810, 3800, 3801, 3802, 3803, 3804, 3805, 3806, 3807, 3808, - 3809, 3811, 3912, 3913, 3914, 3915, 3916, 3917, 3826, 3830, - 3829, 3827, 3828, 3824, 3825, 3852, 3851, 3853, 3854, 3855, - 3856, 3857, 3858, 3860, 3859, 3861, 3862, 3863, 3864, 3865, - 3866, 3834, 3835, 3838, 3839, 3837, 3836, 3840, 3849, 3850, - 3841, 3842, 3843, 3844, 3845, 3846, 3848, 3847, 3867, 3868, - 3869, 3870, 3871, 3873, 3872, 3876, 3877, 3875, 3874, 3879, - 3878, 0, 0, 0, 0, 2413, 2413, 0, 0, 0, - 0, 0, 0, 0, 946, 0, 947, 0, 0, 951, - 0, 0, 0, 953, 952, 0, 954, 916, 915, 0, - 0, 948, 949, 0, 950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3677, 3678, 3679, 3680, 0, 0, + 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 709, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3918, 3919, - 3920, 3921, 3922, 3923, 3924, 3925, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2823,36 +3136,33 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3755, 0, 3755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3783, 0, 3785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2413, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3755, 0, 0, 0, - 0, 0, 0, 3755, 0, 3755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2413, 0, 0, 0, 0, 0, + 0, 0, 2022, 0, 0, 0, 0, 0, 0, 709, + 0, 0, 709, 709, 709, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1578, + 0, 0, 0, 2022, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2022, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2860,4568 +3170,4961 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4099, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4107, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2413, 0, 4115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1298, 1298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 401, 0, 0, 0, 1877, 0, - 4165, 1436, 1420, 539, 0, 1362, 1439, 1330, 1349, 1449, - 1352, 1355, 1399, 1308, 1377, 421, 1346, 1334, 1303, 1341, - 1304, 1332, 1364, 273, 1329, 1422, 1381, 1438, 370, 270, - 1310, 1301, 206, 512, 1335, 436, 1351, 205, 1401, 494, - 255, 381, 378, 595, 285, 276, 272, 252, 321, 390, - 433, 529, 427, 1445, 374, 1387, 0, 504, 406, 0, - 0, 0, 1426, 1425, 1356, 1366, 1428, 1375, 1413, 1361, - 1400, 1318, 1386, 1440, 1347, 1396, 1441, 327, 250, 329, - 204, 418, 505, 289, 0, 0, 0, 0, 4139, 518, - 971, 0, 0, 0, 0, 4140, 0, 0, 0, 0, - 240, 0, 0, 247, 0, 0, 0, 355, 364, 363, - 343, 344, 346, 348, 354, 361, 367, 340, 349, 1343, - 1393, 621, 1435, 1344, 1395, 268, 325, 275, 267, 592, - 1446, 1427, 1307, 1374, 1434, 1369, 608, 0, 0, 231, - 1437, 1368, 0, 1398, 0, 1452, 1302, 1389, 0, 1305, - 1309, 1448, 1432, 1338, 278, 0, 0, 0, 0, 0, - 0, 0, 1365, 1376, 1410, 1414, 1359, 0, 0, 0, - 0, 0, 0, 0, 0, 1336, 0, 1385, 0, 0, - 0, 1314, 1306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1363, 0, 0, 0, 0, - 1317, 0, 1337, 1411, 0, 1300, 300, 1311, 407, 260, - 0, 460, 1418, 1431, 1360, 641, 1433, 1358, 1357, 1405, - 1315, 1424, 1350, 369, 1313, 334, 199, 227, 0, 1348, - 417, 468, 480, 1423, 1333, 1342, 256, 1340, 478, 431, - 616, 235, 287, 465, 438, 476, 446, 290, 1384, 1403, - 477, 376, 597, 456, 613, 642, 643, 266, 411, 627, - 533, 635, 660, 228, 263, 425, 517, 619, 501, 402, - 593, 594, 333, 500, 298, 203, 373, 648, 226, 486, - 375, 244, 233, 599, 624, 302, 254, 292, 463, 655, - 215, 528, 610, 241, 490, 0, 0, 663, 249, 511, - 622, 611, 217, 606, 510, 398, 330, 331, 216, 0, - 464, 271, 296, 0, 0, 261, 420, 601, 602, 259, - 664, 230, 634, 222, 1312, 633, 413, 596, 607, 399, - 387, 221, 605, 397, 386, 338, 359, 360, 283, 310, - 453, 379, 454, 309, 311, 409, 408, 410, 209, 620, - 638, 0, 210, 0, 506, 623, 665, 458, 214, 236, - 237, 239, 1328, 282, 286, 294, 297, 306, 307, 317, - 371, 424, 452, 448, 457, 1419, 590, 614, 628, 640, - 646, 647, 649, 650, 651, 652, 653, 656, 654, 412, - 315, 502, 337, 377, 1408, 1451, 430, 479, 242, 618, - 503, 201, 1322, 1327, 1320, 0, 257, 258, 1390, 586, - 1323, 1321, 1379, 1380, 1324, 1442, 1443, 1444, 1429, 666, - 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, - 677, 678, 679, 680, 681, 682, 683, 661, 519, 525, - 520, 521, 522, 523, 524, 0, 526, 1412, 1316, 0, - 1325, 1326, 403, 1421, 603, 604, 684, 388, 493, 615, - 339, 353, 356, 345, 365, 0, 366, 341, 342, 347, - 350, 351, 352, 357, 358, 362, 368, 251, 212, 395, - 404, 589, 316, 218, 219, 220, 535, 536, 537, 538, - 631, 632, 636, 207, 469, 470, 471, 472, 295, 626, - 312, 475, 474, 335, 336, 383, 455, 551, 553, 564, - 568, 570, 572, 578, 581, 552, 554, 565, 569, 571, - 573, 579, 582, 541, 543, 545, 547, 560, 559, 556, - 584, 585, 562, 567, 546, 558, 563, 576, 583, 580, - 540, 544, 548, 557, 575, 574, 555, 566, 577, 561, - 549, 542, 550, 1383, 198, 223, 372, 1447, 461, 291, - 662, 630, 491, 625, 208, 225, 1319, 265, 1331, 1339, - 0, 1345, 1353, 1354, 1367, 1370, 1371, 1372, 1373, 1391, - 1392, 1394, 1402, 1404, 1407, 1409, 1416, 1430, 1450, 200, - 202, 211, 224, 234, 238, 245, 264, 279, 281, 288, - 301, 313, 314, 322, 323, 326, 332, 384, 391, 392, - 393, 394, 414, 415, 416, 419, 422, 423, 426, 428, - 429, 432, 437, 441, 442, 443, 445, 447, 449, 462, - 467, 481, 482, 483, 484, 485, 488, 489, 495, 496, - 497, 498, 499, 507, 508, 513, 514, 515, 516, 527, - 598, 600, 617, 637, 644, 487, 389, 435, 459, 591, - 304, 305, 450, 451, 318, 319, 658, 659, 303, 612, - 645, 609, 657, 639, 444, 382, 1382, 1388, 385, 284, - 308, 324, 1397, 629, 509, 229, 473, 293, 253, 1415, - 1417, 213, 248, 232, 262, 277, 280, 328, 396, 405, - 434, 440, 299, 274, 246, 466, 243, 492, 530, 531, - 532, 534, 400, 269, 439, 1378, 1406, 380, 587, 588, - 320, 401, 0, 0, 0, 0, 0, 0, 1436, 1420, - 539, 0, 1362, 1439, 1330, 1349, 1449, 1352, 1355, 1399, - 1308, 1377, 421, 1346, 1334, 1303, 1341, 1304, 1332, 1364, - 273, 1329, 1422, 1381, 1438, 370, 270, 1310, 1301, 206, - 512, 1335, 436, 1351, 205, 1401, 494, 255, 381, 378, - 595, 285, 276, 272, 252, 321, 390, 433, 529, 427, - 1445, 374, 1387, 0, 504, 406, 0, 0, 0, 1426, - 1425, 1356, 1366, 1428, 1375, 1413, 1361, 1400, 1318, 1386, - 1440, 1347, 1396, 1441, 327, 250, 329, 204, 418, 505, - 289, 0, 0, 0, 0, 0, 518, 196, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, - 247, 0, 0, 0, 355, 364, 363, 343, 344, 346, - 348, 354, 361, 367, 340, 349, 1343, 1393, 621, 1435, - 1344, 1395, 268, 325, 275, 267, 592, 1446, 1427, 1307, - 1374, 1434, 1369, 608, 0, 0, 231, 1437, 1368, 0, - 1398, 0, 1452, 1302, 1389, 0, 1305, 1309, 1448, 1432, - 1338, 278, 0, 0, 0, 0, 0, 0, 0, 1365, - 1376, 1410, 1414, 1359, 0, 0, 0, 0, 0, 0, - 3283, 0, 1336, 0, 1385, 0, 0, 0, 1314, 1306, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1363, 0, 0, 0, 0, 1317, 0, 1337, - 1411, 0, 1300, 300, 1311, 407, 260, 0, 460, 1418, - 1431, 1360, 641, 1433, 1358, 1357, 1405, 1315, 1424, 1350, - 369, 1313, 334, 199, 227, 0, 1348, 417, 468, 480, - 1423, 1333, 1342, 256, 1340, 478, 431, 616, 235, 287, - 465, 438, 476, 446, 290, 1384, 1403, 477, 376, 597, - 456, 613, 642, 643, 266, 411, 627, 533, 635, 660, - 228, 263, 425, 517, 619, 501, 402, 593, 594, 333, - 500, 298, 203, 373, 648, 226, 486, 375, 244, 233, - 599, 624, 302, 254, 292, 463, 655, 215, 528, 610, - 241, 490, 0, 0, 663, 249, 511, 622, 611, 217, - 606, 510, 398, 330, 331, 216, 0, 464, 271, 296, - 0, 0, 261, 420, 601, 602, 259, 664, 230, 634, - 222, 1312, 633, 413, 596, 607, 399, 387, 221, 605, - 397, 386, 338, 359, 360, 283, 310, 453, 379, 454, - 309, 311, 409, 408, 410, 209, 620, 638, 0, 210, - 0, 506, 623, 665, 458, 214, 236, 237, 239, 1328, - 282, 286, 294, 297, 306, 307, 317, 371, 424, 452, - 448, 457, 1419, 590, 614, 628, 640, 646, 647, 649, - 650, 651, 652, 653, 656, 654, 412, 315, 502, 337, - 377, 1408, 1451, 430, 479, 242, 618, 503, 201, 1322, - 1327, 1320, 0, 257, 258, 1390, 586, 1323, 1321, 1379, - 1380, 1324, 1442, 1443, 1444, 1429, 666, 667, 668, 669, - 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, - 680, 681, 682, 683, 661, 519, 525, 520, 521, 522, - 523, 524, 0, 526, 1412, 1316, 0, 1325, 1326, 403, - 1421, 603, 604, 684, 388, 493, 615, 339, 353, 356, - 345, 365, 0, 366, 341, 342, 347, 350, 351, 352, - 357, 358, 362, 368, 251, 212, 395, 404, 589, 316, - 218, 219, 220, 535, 536, 537, 538, 631, 632, 636, - 207, 469, 470, 471, 472, 295, 626, 312, 475, 474, - 335, 336, 383, 455, 551, 553, 564, 568, 570, 572, - 578, 581, 552, 554, 565, 569, 571, 573, 579, 582, - 541, 543, 545, 547, 560, 559, 556, 584, 585, 562, - 567, 546, 558, 563, 576, 583, 580, 540, 544, 548, - 557, 575, 574, 555, 566, 577, 561, 549, 542, 550, - 1383, 198, 223, 372, 1447, 461, 291, 662, 630, 491, - 625, 208, 225, 1319, 265, 1331, 1339, 0, 1345, 1353, - 1354, 1367, 1370, 1371, 1372, 1373, 1391, 1392, 1394, 1402, - 1404, 1407, 1409, 1416, 1430, 1450, 200, 202, 211, 224, - 234, 238, 245, 264, 279, 281, 288, 301, 313, 314, - 322, 323, 326, 332, 384, 391, 392, 393, 394, 414, - 415, 416, 419, 422, 423, 426, 428, 429, 432, 437, - 441, 442, 443, 445, 447, 449, 462, 467, 481, 482, - 483, 484, 485, 488, 489, 495, 496, 497, 498, 499, - 507, 508, 513, 514, 515, 516, 527, 598, 600, 617, - 637, 644, 487, 389, 435, 459, 591, 304, 305, 450, - 451, 318, 319, 658, 659, 303, 612, 645, 609, 657, - 639, 444, 382, 1382, 1388, 385, 284, 308, 324, 1397, - 629, 509, 229, 473, 293, 253, 1415, 1417, 213, 248, - 232, 262, 277, 280, 328, 396, 405, 434, 440, 299, - 274, 246, 466, 243, 492, 530, 531, 532, 534, 400, - 269, 439, 1378, 1406, 380, 587, 588, 320, 401, 0, - 0, 0, 0, 0, 0, 1436, 1420, 539, 0, 1362, - 1439, 1330, 1349, 1449, 1352, 1355, 1399, 1308, 1377, 421, - 1346, 1334, 1303, 1341, 1304, 1332, 1364, 273, 1329, 1422, - 1381, 1438, 370, 270, 1310, 1301, 206, 512, 1335, 436, - 1351, 205, 1401, 494, 255, 381, 378, 595, 285, 276, - 272, 252, 321, 390, 433, 529, 427, 1445, 374, 1387, - 0, 504, 406, 0, 0, 0, 1426, 1425, 1356, 1366, - 1428, 1375, 1413, 1361, 1400, 1318, 1386, 1440, 1347, 1396, - 1441, 327, 250, 329, 204, 418, 505, 289, 0, 0, - 0, 0, 0, 518, 736, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 240, 0, 0, 247, 0, 0, - 0, 355, 364, 363, 343, 344, 346, 348, 354, 361, - 367, 340, 349, 1343, 1393, 621, 1435, 1344, 1395, 268, - 325, 275, 267, 592, 1446, 1427, 1307, 1374, 1434, 1369, - 608, 0, 0, 231, 1437, 1368, 0, 1398, 0, 1452, - 1302, 1389, 0, 1305, 1309, 1448, 1432, 1338, 278, 0, - 0, 0, 0, 0, 0, 0, 1365, 1376, 1410, 1414, - 1359, 0, 0, 0, 0, 0, 0, 3244, 0, 1336, - 0, 1385, 0, 0, 0, 1314, 1306, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1363, - 0, 0, 0, 0, 1317, 0, 1337, 1411, 0, 1300, - 300, 1311, 407, 260, 0, 460, 1418, 1431, 1360, 641, - 1433, 1358, 1357, 1405, 1315, 1424, 1350, 369, 1313, 334, - 199, 227, 0, 1348, 417, 468, 480, 1423, 1333, 1342, - 256, 1340, 478, 431, 616, 235, 287, 465, 438, 476, - 446, 290, 1384, 1403, 477, 376, 597, 456, 613, 642, - 643, 266, 411, 627, 533, 635, 660, 228, 263, 425, - 517, 619, 501, 402, 593, 594, 333, 500, 298, 203, - 373, 648, 226, 486, 375, 244, 233, 599, 624, 302, - 254, 292, 463, 655, 215, 528, 610, 241, 490, 0, - 0, 663, 249, 511, 622, 611, 217, 606, 510, 398, - 330, 331, 216, 0, 464, 271, 296, 0, 0, 261, - 420, 601, 602, 259, 664, 230, 634, 222, 1312, 633, - 413, 596, 607, 399, 387, 221, 605, 397, 386, 338, - 359, 360, 283, 310, 453, 379, 454, 309, 311, 409, - 408, 410, 209, 620, 638, 0, 210, 0, 506, 623, - 665, 458, 214, 236, 237, 239, 1328, 282, 286, 294, - 297, 306, 307, 317, 371, 424, 452, 448, 457, 1419, - 590, 614, 628, 640, 646, 647, 649, 650, 651, 652, - 653, 656, 654, 412, 315, 502, 337, 377, 1408, 1451, - 430, 479, 242, 618, 503, 201, 1322, 1327, 1320, 0, - 257, 258, 1390, 586, 1323, 1321, 1379, 1380, 1324, 1442, - 1443, 1444, 1429, 666, 667, 668, 669, 670, 671, 672, - 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, - 683, 661, 519, 525, 520, 521, 522, 523, 524, 0, - 526, 1412, 1316, 0, 1325, 1326, 403, 1421, 603, 604, - 684, 388, 493, 615, 339, 353, 356, 345, 365, 0, - 366, 341, 342, 347, 350, 351, 352, 357, 358, 362, - 368, 251, 212, 395, 404, 589, 316, 218, 219, 220, - 535, 536, 537, 538, 631, 632, 636, 207, 469, 470, - 471, 472, 295, 626, 312, 475, 474, 335, 336, 383, - 455, 551, 553, 564, 568, 570, 572, 578, 581, 552, - 554, 565, 569, 571, 573, 579, 582, 541, 543, 545, - 547, 560, 559, 556, 584, 585, 562, 567, 546, 558, - 563, 576, 583, 580, 540, 544, 548, 557, 575, 574, - 555, 566, 577, 561, 549, 542, 550, 1383, 198, 223, - 372, 1447, 461, 291, 662, 630, 491, 625, 208, 225, - 1319, 265, 1331, 1339, 0, 1345, 1353, 1354, 1367, 1370, - 1371, 1372, 1373, 1391, 1392, 1394, 1402, 1404, 1407, 1409, - 1416, 1430, 1450, 200, 202, 211, 224, 234, 238, 245, - 264, 279, 281, 288, 301, 313, 314, 322, 323, 326, - 332, 384, 391, 392, 393, 394, 414, 415, 416, 419, - 422, 423, 426, 428, 429, 432, 437, 441, 442, 443, - 445, 447, 449, 462, 467, 481, 482, 483, 484, 485, - 488, 489, 495, 496, 497, 498, 499, 507, 508, 513, - 514, 515, 516, 527, 598, 600, 617, 637, 644, 487, - 389, 435, 459, 591, 304, 305, 450, 451, 318, 319, - 658, 659, 303, 612, 645, 609, 657, 639, 444, 382, - 1382, 1388, 385, 284, 308, 324, 1397, 629, 509, 229, - 473, 293, 253, 1415, 1417, 213, 248, 232, 262, 277, - 280, 328, 396, 405, 434, 440, 299, 274, 246, 466, - 243, 492, 530, 531, 532, 534, 400, 269, 439, 1378, - 1406, 380, 587, 588, 320, 401, 0, 0, 0, 0, - 0, 0, 1436, 1420, 539, 0, 1362, 1439, 1330, 1349, - 1449, 1352, 1355, 1399, 1308, 1377, 421, 1346, 1334, 1303, - 1341, 1304, 1332, 1364, 273, 1329, 1422, 1381, 1438, 370, - 270, 1310, 1301, 206, 512, 1335, 436, 1351, 205, 1401, - 494, 255, 381, 378, 595, 285, 276, 272, 252, 321, - 390, 433, 529, 427, 1445, 374, 1387, 0, 504, 406, - 0, 0, 0, 1426, 1425, 1356, 1366, 1428, 1375, 1413, - 1361, 1400, 1318, 1386, 1440, 1347, 1396, 1441, 327, 250, - 329, 204, 418, 505, 289, 0, 0, 0, 0, 0, - 518, 971, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 240, 0, 0, 247, 0, 0, 0, 355, 364, - 363, 343, 344, 346, 348, 354, 361, 367, 340, 349, - 1343, 1393, 621, 1435, 1344, 1395, 268, 325, 275, 267, - 592, 1446, 1427, 1307, 1374, 1434, 1369, 608, 0, 0, - 231, 1437, 1368, 0, 1398, 0, 1452, 1302, 1389, 0, - 1305, 1309, 1448, 1432, 1338, 278, 0, 0, 0, 0, - 0, 0, 0, 1365, 1376, 1410, 1414, 1359, 0, 0, - 0, 0, 0, 0, 2433, 0, 1336, 0, 1385, 0, - 0, 0, 1314, 1306, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1363, 0, 0, 0, - 0, 1317, 0, 1337, 1411, 0, 1300, 300, 1311, 407, - 260, 0, 460, 1418, 1431, 1360, 641, 1433, 1358, 1357, - 1405, 1315, 1424, 1350, 369, 1313, 334, 199, 227, 0, - 1348, 417, 468, 480, 1423, 1333, 1342, 256, 1340, 478, - 431, 616, 235, 287, 465, 438, 476, 446, 290, 1384, - 1403, 477, 376, 597, 456, 613, 642, 643, 266, 411, - 627, 533, 635, 660, 228, 263, 425, 517, 619, 501, - 402, 593, 594, 333, 500, 298, 203, 373, 648, 226, - 486, 375, 244, 233, 599, 624, 302, 254, 292, 463, - 655, 215, 528, 610, 241, 490, 0, 0, 663, 249, - 511, 622, 611, 217, 606, 510, 398, 330, 331, 216, - 0, 464, 271, 296, 0, 0, 261, 420, 601, 602, - 259, 664, 230, 634, 222, 1312, 633, 413, 596, 607, - 399, 387, 221, 605, 397, 386, 338, 359, 360, 283, - 310, 453, 379, 454, 309, 311, 409, 408, 410, 209, - 620, 638, 0, 210, 0, 506, 623, 665, 458, 214, - 236, 237, 239, 1328, 282, 286, 294, 297, 306, 307, - 317, 371, 424, 452, 448, 457, 1419, 590, 614, 628, - 640, 646, 647, 649, 650, 651, 652, 653, 656, 654, - 412, 315, 502, 337, 377, 1408, 1451, 430, 479, 242, - 618, 503, 201, 1322, 1327, 1320, 0, 257, 258, 1390, - 586, 1323, 1321, 1379, 1380, 1324, 1442, 1443, 1444, 1429, - 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, - 676, 677, 678, 679, 680, 681, 682, 683, 661, 519, - 525, 520, 521, 522, 523, 524, 0, 526, 1412, 1316, - 0, 1325, 1326, 403, 1421, 603, 604, 684, 388, 493, - 615, 339, 353, 356, 345, 365, 0, 366, 341, 342, - 347, 350, 351, 352, 357, 358, 362, 368, 251, 212, - 395, 404, 589, 316, 218, 219, 220, 535, 536, 537, - 538, 631, 632, 636, 207, 469, 470, 471, 472, 295, - 626, 312, 475, 474, 335, 336, 383, 455, 551, 553, - 564, 568, 570, 572, 578, 581, 552, 554, 565, 569, - 571, 573, 579, 582, 541, 543, 545, 547, 560, 559, - 556, 584, 585, 562, 567, 546, 558, 563, 576, 583, - 580, 540, 544, 548, 557, 575, 574, 555, 566, 577, - 561, 549, 542, 550, 1383, 198, 223, 372, 1447, 461, - 291, 662, 630, 491, 625, 208, 225, 1319, 265, 1331, - 1339, 0, 1345, 1353, 1354, 1367, 1370, 1371, 1372, 1373, - 1391, 1392, 1394, 1402, 1404, 1407, 1409, 1416, 1430, 1450, - 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, - 288, 301, 313, 314, 322, 323, 326, 332, 384, 391, - 392, 393, 394, 414, 415, 416, 419, 422, 423, 426, - 428, 429, 432, 437, 441, 442, 443, 445, 447, 449, - 462, 467, 481, 482, 483, 484, 485, 488, 489, 495, - 496, 497, 498, 499, 507, 508, 513, 514, 515, 516, - 527, 598, 600, 617, 637, 644, 487, 389, 435, 459, - 591, 304, 305, 450, 451, 318, 319, 658, 659, 303, - 612, 645, 609, 657, 639, 444, 382, 1382, 1388, 385, - 284, 308, 324, 1397, 629, 509, 229, 473, 293, 253, - 1415, 1417, 213, 248, 232, 262, 277, 280, 328, 396, - 405, 434, 440, 299, 274, 246, 466, 243, 492, 530, - 531, 532, 534, 400, 269, 439, 1378, 1406, 380, 587, - 588, 320, 401, 0, 0, 0, 0, 0, 0, 1436, - 1420, 539, 0, 1362, 1439, 1330, 1349, 1449, 1352, 1355, - 1399, 1308, 1377, 421, 1346, 1334, 1303, 1341, 1304, 1332, - 1364, 273, 1329, 1422, 1381, 1438, 370, 270, 1310, 1301, - 206, 512, 1335, 436, 1351, 205, 1401, 494, 255, 381, - 378, 595, 285, 276, 272, 252, 321, 390, 433, 529, - 427, 1445, 374, 1387, 0, 504, 406, 0, 0, 0, - 1426, 1425, 1356, 1366, 1428, 1375, 1413, 1361, 1400, 1318, - 1386, 1440, 1347, 1396, 1441, 327, 250, 329, 204, 418, - 505, 289, 0, 95, 0, 0, 0, 518, 736, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, - 0, 247, 0, 0, 0, 355, 364, 363, 343, 344, - 346, 348, 354, 361, 367, 340, 349, 1343, 1393, 621, - 1435, 1344, 1395, 268, 325, 275, 267, 592, 1446, 1427, - 1307, 1374, 1434, 1369, 608, 0, 0, 231, 1437, 1368, - 0, 1398, 0, 1452, 1302, 1389, 0, 1305, 1309, 1448, - 1432, 1338, 278, 0, 0, 0, 0, 0, 0, 0, - 1365, 1376, 1410, 1414, 1359, 0, 0, 0, 0, 0, - 0, 0, 0, 1336, 0, 1385, 0, 0, 0, 1314, - 1306, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1363, 0, 0, 0, 0, 1317, 0, - 1337, 1411, 0, 1300, 300, 1311, 407, 260, 0, 460, - 1418, 1431, 1360, 641, 1433, 1358, 1357, 1405, 1315, 1424, - 1350, 369, 1313, 334, 199, 227, 0, 1348, 417, 468, - 480, 1423, 1333, 1342, 256, 1340, 478, 431, 616, 235, - 287, 465, 438, 476, 446, 290, 1384, 1403, 477, 376, - 597, 456, 613, 642, 643, 266, 411, 627, 533, 635, - 660, 228, 263, 425, 517, 619, 501, 402, 593, 594, - 333, 500, 298, 203, 373, 648, 226, 486, 375, 244, - 233, 599, 624, 302, 254, 292, 463, 655, 215, 528, - 610, 241, 490, 0, 0, 663, 249, 511, 622, 611, - 217, 606, 510, 398, 330, 331, 216, 0, 464, 271, - 296, 0, 0, 261, 420, 601, 602, 259, 664, 230, - 634, 222, 1312, 633, 413, 596, 607, 399, 387, 221, - 605, 397, 386, 338, 359, 360, 283, 310, 453, 379, - 454, 309, 311, 409, 408, 410, 209, 620, 638, 0, - 210, 0, 506, 623, 665, 458, 214, 236, 237, 239, - 1328, 282, 286, 294, 297, 306, 307, 317, 371, 424, - 452, 448, 457, 1419, 590, 614, 628, 640, 646, 647, - 649, 650, 651, 652, 653, 656, 654, 412, 315, 502, - 337, 377, 1408, 1451, 430, 479, 242, 618, 503, 201, - 1322, 1327, 1320, 0, 257, 258, 1390, 586, 1323, 1321, - 1379, 1380, 1324, 1442, 1443, 1444, 1429, 666, 667, 668, - 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, - 679, 680, 681, 682, 683, 661, 519, 525, 520, 521, - 522, 523, 524, 0, 526, 1412, 1316, 0, 1325, 1326, - 403, 1421, 603, 604, 684, 388, 493, 615, 339, 353, - 356, 345, 365, 0, 366, 341, 342, 347, 350, 351, - 352, 357, 358, 362, 368, 251, 212, 395, 404, 589, - 316, 218, 219, 220, 535, 536, 537, 538, 631, 632, - 636, 207, 469, 470, 471, 472, 295, 626, 312, 475, - 474, 335, 336, 383, 455, 551, 553, 564, 568, 570, - 572, 578, 581, 552, 554, 565, 569, 571, 573, 579, - 582, 541, 543, 545, 547, 560, 559, 556, 584, 585, - 562, 567, 546, 558, 563, 576, 583, 580, 540, 544, - 548, 557, 575, 574, 555, 566, 577, 561, 549, 542, - 550, 1383, 198, 223, 372, 1447, 461, 291, 662, 630, - 491, 625, 208, 225, 1319, 265, 1331, 1339, 0, 1345, - 1353, 1354, 1367, 1370, 1371, 1372, 1373, 1391, 1392, 1394, - 1402, 1404, 1407, 1409, 1416, 1430, 1450, 200, 202, 211, - 224, 234, 238, 245, 264, 279, 281, 288, 301, 313, - 314, 322, 323, 326, 332, 384, 391, 392, 393, 394, - 414, 415, 416, 419, 422, 423, 426, 428, 429, 432, - 437, 441, 442, 443, 445, 447, 449, 462, 467, 481, - 482, 483, 484, 485, 488, 489, 495, 496, 497, 498, - 499, 507, 508, 513, 514, 515, 516, 527, 598, 600, - 617, 637, 644, 487, 389, 435, 459, 591, 304, 305, - 450, 451, 318, 319, 658, 659, 303, 612, 645, 609, - 657, 639, 444, 382, 1382, 1388, 385, 284, 308, 324, - 1397, 629, 509, 229, 473, 293, 253, 1415, 1417, 213, - 248, 232, 262, 277, 280, 328, 396, 405, 434, 440, - 299, 274, 246, 466, 243, 492, 530, 531, 532, 534, - 400, 269, 439, 1378, 1406, 380, 587, 588, 320, 401, - 0, 0, 0, 0, 0, 0, 1436, 1420, 539, 0, - 1362, 1439, 1330, 1349, 1449, 1352, 1355, 1399, 1308, 1377, - 421, 1346, 1334, 1303, 1341, 1304, 1332, 1364, 273, 1329, - 1422, 1381, 1438, 370, 270, 1310, 1301, 206, 512, 1335, - 436, 1351, 205, 1401, 494, 255, 381, 378, 595, 285, - 276, 272, 252, 321, 390, 433, 529, 427, 1445, 374, - 1387, 0, 504, 406, 0, 0, 0, 1426, 1425, 1356, - 1366, 1428, 1375, 1413, 1361, 1400, 1318, 1386, 1440, 1347, - 1396, 1441, 327, 250, 329, 204, 418, 505, 289, 0, - 0, 0, 0, 0, 518, 196, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 240, 0, 0, 247, 0, - 0, 0, 355, 364, 363, 343, 344, 346, 348, 354, - 361, 367, 340, 349, 1343, 1393, 621, 1435, 1344, 1395, - 268, 325, 275, 267, 592, 1446, 1427, 1307, 1374, 1434, - 1369, 608, 0, 0, 231, 1437, 1368, 0, 1398, 0, - 1452, 1302, 1389, 0, 1305, 1309, 1448, 1432, 1338, 278, - 0, 0, 0, 0, 0, 0, 0, 1365, 1376, 1410, - 1414, 1359, 0, 0, 0, 0, 0, 0, 0, 0, - 1336, 0, 1385, 0, 0, 0, 1314, 1306, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1363, 0, 0, 0, 0, 1317, 0, 1337, 1411, 0, - 1300, 300, 1311, 407, 260, 0, 460, 1418, 1431, 1360, - 641, 1433, 1358, 1357, 1405, 1315, 1424, 1350, 369, 1313, - 334, 199, 227, 0, 1348, 417, 468, 480, 1423, 1333, - 1342, 256, 1340, 478, 431, 616, 235, 287, 465, 438, - 476, 446, 290, 1384, 1403, 477, 376, 597, 456, 613, - 642, 643, 266, 411, 627, 533, 635, 660, 228, 263, - 425, 517, 619, 501, 402, 593, 594, 333, 500, 298, - 203, 373, 648, 226, 486, 375, 244, 233, 599, 624, - 302, 254, 292, 463, 655, 215, 528, 610, 241, 490, - 0, 0, 663, 249, 511, 622, 611, 217, 606, 510, - 398, 330, 331, 216, 0, 464, 271, 296, 0, 0, - 261, 420, 601, 602, 259, 664, 230, 634, 222, 1312, - 633, 413, 596, 607, 399, 387, 221, 605, 397, 386, - 338, 359, 360, 283, 310, 453, 379, 454, 309, 311, - 409, 408, 410, 209, 620, 638, 0, 210, 0, 506, - 623, 665, 458, 214, 236, 237, 239, 1328, 282, 286, - 294, 297, 306, 307, 317, 371, 424, 452, 448, 457, - 1419, 590, 614, 628, 640, 646, 647, 649, 650, 651, - 652, 653, 656, 654, 412, 315, 502, 337, 377, 1408, - 1451, 430, 479, 242, 618, 503, 201, 1322, 1327, 1320, - 0, 257, 258, 1390, 586, 1323, 1321, 1379, 1380, 1324, - 1442, 1443, 1444, 1429, 666, 667, 668, 669, 670, 671, - 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, - 682, 683, 661, 519, 525, 520, 521, 522, 523, 524, - 0, 526, 1412, 1316, 0, 1325, 1326, 403, 1421, 603, - 604, 684, 388, 493, 615, 339, 353, 356, 345, 365, - 0, 366, 341, 342, 347, 350, 351, 352, 357, 358, - 362, 368, 251, 212, 395, 404, 589, 316, 218, 219, - 220, 535, 536, 537, 538, 631, 632, 636, 207, 469, - 470, 471, 472, 295, 626, 312, 475, 474, 335, 336, - 383, 455, 551, 553, 564, 568, 570, 572, 578, 581, - 552, 554, 565, 569, 571, 573, 579, 582, 541, 543, - 545, 547, 560, 559, 556, 584, 585, 562, 567, 546, - 558, 563, 576, 583, 580, 540, 544, 548, 557, 575, - 574, 555, 566, 577, 561, 549, 542, 550, 1383, 198, - 223, 372, 1447, 461, 291, 662, 630, 491, 625, 208, - 225, 1319, 265, 1331, 1339, 0, 1345, 1353, 1354, 1367, - 1370, 1371, 1372, 1373, 1391, 1392, 1394, 1402, 1404, 1407, - 1409, 1416, 1430, 1450, 200, 202, 211, 224, 234, 238, - 245, 264, 279, 281, 288, 301, 313, 314, 322, 323, - 326, 332, 384, 391, 392, 393, 394, 414, 415, 416, - 419, 422, 423, 426, 428, 429, 432, 437, 441, 442, - 443, 445, 447, 449, 462, 467, 481, 482, 483, 484, - 485, 488, 489, 495, 496, 497, 498, 499, 507, 508, - 513, 514, 515, 516, 527, 598, 600, 617, 637, 644, - 487, 389, 435, 459, 591, 304, 305, 450, 451, 318, - 319, 658, 659, 303, 612, 645, 609, 657, 639, 444, - 382, 1382, 1388, 385, 284, 308, 324, 1397, 629, 509, - 229, 473, 293, 253, 1415, 1417, 213, 248, 232, 262, - 277, 280, 328, 396, 405, 434, 440, 299, 274, 246, - 466, 243, 492, 530, 531, 532, 534, 400, 269, 439, - 1378, 1406, 380, 587, 588, 320, 401, 0, 0, 0, - 0, 0, 0, 1436, 1420, 539, 0, 1362, 1439, 1330, - 1349, 1449, 1352, 1355, 1399, 1308, 1377, 421, 1346, 1334, - 1303, 1341, 1304, 1332, 1364, 273, 1329, 1422, 1381, 1438, - 370, 270, 1310, 1301, 206, 512, 1335, 436, 1351, 205, - 1401, 494, 255, 381, 378, 595, 285, 276, 272, 252, - 321, 390, 433, 529, 427, 1445, 374, 1387, 0, 504, - 406, 0, 0, 0, 1426, 1425, 1356, 1366, 1428, 1375, - 1413, 1361, 1400, 1318, 1386, 1440, 1347, 1396, 1441, 327, - 250, 329, 204, 418, 505, 289, 0, 0, 0, 0, - 0, 518, 736, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 240, 0, 0, 247, 0, 0, 0, 355, - 364, 363, 343, 344, 346, 348, 354, 361, 367, 340, - 349, 1343, 1393, 621, 1435, 1344, 1395, 268, 325, 275, - 267, 592, 1446, 1427, 1307, 1374, 1434, 1369, 608, 0, - 0, 231, 1437, 1368, 0, 1398, 0, 1452, 1302, 1389, - 0, 1305, 1309, 1448, 1432, 1338, 278, 0, 0, 0, - 0, 0, 0, 0, 1365, 1376, 1410, 1414, 1359, 0, - 0, 0, 0, 0, 0, 0, 0, 1336, 0, 1385, - 0, 0, 0, 1314, 1306, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1363, 0, 0, - 0, 0, 1317, 0, 1337, 1411, 0, 1300, 300, 1311, - 407, 260, 0, 460, 1418, 1431, 1360, 641, 1433, 1358, - 1357, 1405, 1315, 1424, 1350, 369, 1313, 334, 199, 227, - 0, 1348, 417, 468, 480, 1423, 1333, 1342, 256, 1340, - 478, 431, 616, 235, 287, 465, 438, 476, 446, 290, - 1384, 1403, 477, 376, 597, 456, 613, 642, 643, 266, - 411, 627, 533, 635, 660, 228, 263, 425, 517, 619, - 501, 402, 593, 594, 333, 500, 298, 203, 373, 648, - 226, 486, 375, 244, 233, 599, 624, 302, 254, 292, - 463, 655, 215, 528, 610, 241, 490, 0, 0, 663, - 249, 511, 622, 611, 217, 606, 510, 398, 330, 331, - 216, 0, 464, 271, 296, 0, 0, 261, 420, 601, - 602, 259, 664, 230, 634, 222, 1312, 633, 413, 596, - 607, 399, 387, 221, 605, 397, 386, 338, 359, 360, - 283, 310, 453, 379, 454, 309, 311, 409, 408, 410, - 209, 620, 638, 0, 210, 0, 506, 623, 665, 458, - 214, 236, 237, 239, 1328, 282, 286, 294, 297, 306, - 307, 317, 371, 424, 452, 448, 457, 1419, 590, 614, - 628, 640, 646, 647, 649, 650, 651, 652, 653, 656, - 654, 412, 315, 502, 337, 377, 1408, 1451, 430, 479, - 242, 618, 503, 201, 1322, 1327, 1320, 0, 257, 258, - 1390, 586, 1323, 1321, 1379, 1380, 1324, 1442, 1443, 1444, - 1429, 666, 667, 668, 669, 670, 671, 672, 673, 674, - 675, 676, 677, 678, 679, 680, 681, 682, 683, 661, - 519, 525, 520, 521, 522, 523, 524, 0, 526, 1412, - 1316, 0, 1325, 1326, 403, 1421, 603, 604, 684, 388, - 493, 615, 339, 353, 356, 345, 365, 0, 366, 341, - 342, 347, 350, 351, 352, 357, 358, 362, 368, 251, - 212, 395, 404, 589, 316, 218, 219, 220, 535, 536, - 537, 538, 631, 632, 636, 207, 469, 470, 471, 472, - 295, 626, 312, 475, 474, 335, 336, 383, 455, 551, - 553, 564, 568, 570, 572, 578, 581, 552, 554, 565, - 569, 571, 573, 579, 582, 541, 543, 545, 547, 560, - 559, 556, 584, 585, 562, 567, 546, 558, 563, 576, - 583, 580, 540, 544, 548, 557, 575, 574, 555, 566, - 577, 561, 549, 542, 550, 1383, 198, 223, 372, 1447, - 461, 291, 662, 630, 491, 625, 208, 225, 1319, 265, - 1331, 1339, 0, 1345, 1353, 1354, 1367, 1370, 1371, 1372, - 1373, 1391, 1392, 1394, 1402, 1404, 1407, 1409, 1416, 1430, - 1450, 200, 202, 211, 224, 234, 238, 245, 264, 279, - 281, 288, 301, 313, 314, 322, 323, 326, 332, 384, - 391, 392, 393, 394, 414, 415, 416, 419, 422, 423, - 426, 428, 429, 432, 437, 441, 442, 443, 445, 447, - 449, 462, 467, 481, 482, 483, 484, 485, 488, 489, - 495, 496, 497, 498, 499, 507, 508, 513, 514, 515, - 516, 527, 598, 600, 617, 637, 644, 487, 389, 435, - 459, 591, 304, 305, 450, 451, 318, 319, 658, 659, - 303, 612, 645, 609, 657, 639, 444, 382, 1382, 1388, - 385, 284, 308, 324, 1397, 629, 509, 229, 473, 293, - 253, 1415, 1417, 213, 248, 232, 262, 277, 280, 328, - 396, 405, 434, 440, 299, 274, 246, 466, 243, 492, - 530, 531, 532, 534, 400, 269, 439, 1378, 1406, 380, - 587, 588, 320, 401, 0, 0, 0, 0, 0, 0, - 1436, 1420, 539, 0, 1362, 1439, 1330, 1349, 1449, 1352, - 1355, 1399, 1308, 1377, 421, 1346, 1334, 1303, 1341, 1304, - 1332, 1364, 273, 1329, 1422, 1381, 1438, 370, 270, 1310, - 1301, 206, 512, 1335, 436, 1351, 205, 1401, 494, 255, - 381, 378, 595, 285, 276, 272, 252, 321, 390, 433, - 529, 427, 1445, 374, 1387, 0, 504, 406, 0, 0, - 0, 1426, 1425, 1356, 1366, 1428, 1375, 1413, 1361, 1400, - 1318, 1386, 1440, 1347, 1396, 1441, 327, 250, 329, 204, - 418, 505, 289, 0, 0, 0, 0, 0, 518, 971, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, - 0, 0, 247, 0, 0, 0, 355, 364, 363, 343, - 344, 346, 348, 354, 361, 367, 340, 349, 1343, 1393, - 621, 1435, 1344, 1395, 268, 325, 275, 267, 592, 1446, - 1427, 1307, 1374, 1434, 1369, 608, 0, 0, 231, 1437, - 1368, 0, 1398, 0, 1452, 1302, 1389, 0, 1305, 1309, - 1448, 1432, 1338, 278, 0, 0, 0, 0, 0, 0, - 0, 1365, 1376, 1410, 1414, 1359, 0, 0, 0, 0, - 0, 0, 0, 0, 1336, 0, 1385, 0, 0, 0, - 1314, 1306, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1363, 0, 0, 0, 0, 1317, - 0, 1337, 1411, 0, 1300, 300, 1311, 407, 260, 0, - 460, 1418, 1431, 1360, 641, 1433, 1358, 1357, 1405, 1315, - 1424, 1350, 369, 1313, 334, 199, 227, 0, 1348, 417, - 468, 480, 1423, 1333, 1342, 256, 1340, 478, 431, 616, - 235, 287, 465, 438, 476, 446, 290, 1384, 1403, 477, - 376, 597, 456, 613, 642, 643, 266, 411, 627, 533, - 635, 660, 228, 263, 425, 517, 619, 501, 402, 593, - 594, 333, 500, 298, 203, 373, 648, 226, 486, 375, - 244, 233, 599, 624, 302, 254, 292, 463, 655, 215, - 528, 610, 241, 490, 0, 0, 663, 249, 511, 622, - 611, 217, 606, 510, 398, 330, 331, 216, 0, 464, - 271, 296, 0, 0, 261, 420, 601, 602, 259, 664, - 230, 634, 222, 1312, 633, 413, 596, 607, 399, 387, - 221, 605, 397, 386, 338, 359, 360, 283, 310, 453, - 379, 454, 309, 311, 409, 408, 410, 209, 620, 638, - 0, 210, 0, 506, 623, 665, 458, 214, 236, 237, - 239, 1328, 282, 286, 294, 297, 306, 307, 317, 371, - 424, 452, 448, 457, 1419, 590, 614, 628, 640, 646, - 647, 649, 650, 651, 652, 653, 656, 654, 412, 315, - 502, 337, 377, 1408, 1451, 430, 479, 242, 618, 503, - 201, 1322, 1327, 1320, 0, 257, 258, 1390, 586, 1323, - 1321, 1379, 1380, 1324, 1442, 1443, 1444, 1429, 666, 667, - 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, - 678, 679, 680, 681, 682, 683, 661, 519, 525, 520, - 521, 522, 523, 524, 0, 526, 1412, 1316, 0, 1325, - 1326, 403, 1421, 603, 604, 684, 388, 493, 615, 339, - 353, 356, 345, 365, 0, 366, 341, 342, 347, 350, - 351, 352, 357, 358, 362, 368, 251, 212, 395, 404, - 589, 316, 218, 219, 220, 535, 536, 537, 538, 631, - 632, 636, 207, 469, 470, 471, 472, 295, 626, 312, - 475, 474, 335, 336, 383, 455, 551, 553, 564, 568, - 570, 572, 578, 581, 552, 554, 565, 569, 571, 573, - 579, 582, 541, 543, 545, 547, 560, 559, 556, 584, - 585, 562, 567, 546, 558, 563, 576, 583, 580, 540, - 544, 548, 557, 575, 574, 555, 566, 577, 561, 549, - 542, 550, 1383, 198, 223, 372, 1447, 461, 291, 662, - 630, 491, 625, 208, 225, 1319, 265, 1331, 1339, 0, - 1345, 1353, 1354, 1367, 1370, 1371, 1372, 1373, 1391, 1392, - 1394, 1402, 1404, 1407, 1409, 1416, 1430, 1450, 200, 202, - 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, - 313, 314, 322, 323, 326, 332, 384, 391, 392, 393, - 394, 414, 415, 416, 419, 422, 423, 426, 428, 429, - 432, 437, 441, 442, 443, 445, 447, 449, 462, 467, - 481, 482, 483, 484, 485, 488, 489, 495, 496, 497, - 498, 499, 507, 508, 513, 514, 515, 516, 527, 598, - 600, 617, 637, 644, 487, 389, 435, 459, 591, 304, - 305, 450, 451, 318, 319, 658, 659, 303, 612, 645, - 609, 657, 639, 444, 382, 1382, 1388, 385, 284, 308, - 324, 1397, 629, 509, 229, 473, 293, 253, 1415, 1417, - 213, 248, 232, 262, 277, 280, 328, 396, 405, 434, - 440, 299, 274, 246, 466, 243, 492, 530, 531, 532, - 534, 400, 269, 439, 1378, 1406, 380, 587, 588, 320, - 401, 0, 0, 0, 0, 0, 0, 0, 0, 539, - 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 421, 0, 0, 0, 776, 0, 0, 0, 273, - 781, 0, 0, 0, 370, 270, 0, 0, 206, 512, - 0, 436, 0, 205, 0, 494, 255, 381, 378, 595, - 285, 276, 272, 252, 321, 390, 433, 529, 427, 788, - 374, 0, 0, 504, 406, 0, 0, 0, 0, 0, - 0, 0, 0, 783, 784, 0, 0, 0, 0, 0, - 0, 0, 0, 327, 250, 329, 204, 418, 505, 289, - 0, 95, 0, 0, 1037, 518, 971, 760, 937, 975, - 1038, 989, 990, 991, 976, 0, 240, 977, 978, 247, - 979, 0, 936, 819, 821, 820, 886, 887, 888, 889, - 890, 891, 892, 822, 823, 817, 984, 621, 992, 993, - 0, 268, 325, 275, 267, 592, 0, 0, 2253, 2254, - 2255, 0, 608, 0, 0, 231, 0, 0, 0, 0, - 0, 0, 0, 756, 773, 0, 787, 0, 0, 0, - 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 770, 771, 0, - 0, 0, 0, 931, 0, 772, 0, 0, 780, 994, - 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, - 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, - 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, - 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, - 1035, 782, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 300, 0, 407, 260, 0, 460, 930, 0, - 0, 641, 0, 0, 928, 0, 0, 0, 0, 369, - 0, 334, 199, 227, 0, 0, 417, 468, 480, 0, - 0, 0, 981, 0, 478, 431, 616, 235, 287, 465, - 438, 476, 446, 290, 0, 0, 477, 376, 597, 456, - 613, 642, 643, 266, 411, 627, 533, 635, 660, 228, - 263, 425, 517, 619, 501, 402, 593, 594, 333, 500, - 298, 203, 373, 648, 226, 486, 375, 244, 233, 599, - 624, 302, 254, 292, 463, 655, 215, 528, 610, 241, - 490, 0, 0, 663, 249, 511, 622, 611, 217, 606, - 510, 398, 330, 331, 216, 0, 464, 271, 296, 0, - 0, 261, 420, 982, 983, 259, 664, 827, 634, 222, - 0, 633, 413, 596, 607, 399, 387, 221, 605, 397, - 386, 338, 835, 836, 283, 310, 912, 911, 910, 309, - 311, 908, 909, 907, 209, 620, 638, 0, 210, 0, - 506, 623, 665, 458, 214, 236, 237, 239, 0, 282, - 286, 294, 297, 306, 307, 317, 371, 424, 452, 448, - 457, 0, 590, 614, 628, 640, 646, 647, 649, 650, - 651, 652, 653, 656, 654, 412, 315, 502, 337, 377, - 0, 0, 430, 479, 242, 618, 503, 918, 940, 929, - 793, 794, 919, 920, 944, 921, 796, 797, 941, 942, - 790, 791, 795, 943, 945, 666, 667, 668, 669, 670, - 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, - 681, 682, 683, 661, 519, 525, 520, 521, 522, 523, - 524, 0, 526, 932, 779, 778, 0, 785, 786, 0, - 815, 816, 818, 824, 825, 826, 837, 884, 885, 893, - 895, 896, 894, 897, 898, 899, 902, 903, 904, 905, - 900, 901, 906, 798, 802, 799, 800, 801, 813, 803, - 804, 805, 806, 807, 808, 809, 810, 811, 812, 814, - 955, 956, 957, 958, 959, 960, 830, 834, 833, 831, - 832, 828, 829, 856, 855, 857, 858, 859, 860, 861, - 862, 864, 863, 865, 866, 867, 868, 869, 870, 838, - 839, 842, 843, 841, 840, 844, 853, 854, 845, 846, - 847, 848, 849, 850, 852, 851, 871, 872, 873, 874, - 875, 877, 876, 880, 881, 879, 878, 883, 882, 777, - 198, 223, 372, 0, 461, 291, 662, 630, 491, 625, - 208, 225, 946, 265, 947, 0, 0, 951, 0, 0, - 0, 953, 952, 0, 954, 916, 915, 0, 0, 948, - 949, 0, 950, 0, 0, 200, 202, 211, 224, 234, - 238, 245, 264, 279, 281, 288, 301, 313, 314, 322, - 323, 326, 332, 384, 391, 392, 393, 394, 414, 415, - 416, 419, 422, 423, 426, 428, 429, 432, 437, 441, - 442, 443, 445, 447, 449, 462, 467, 481, 482, 483, - 484, 485, 488, 489, 495, 496, 497, 498, 499, 507, - 508, 513, 514, 515, 516, 527, 598, 600, 617, 637, - 644, 487, 389, 435, 459, 591, 961, 962, 963, 964, - 965, 966, 967, 968, 303, 612, 645, 609, 657, 639, - 444, 382, 0, 0, 385, 284, 308, 324, 0, 629, - 509, 229, 473, 293, 253, 1036, 0, 213, 248, 232, - 262, 277, 280, 328, 396, 405, 434, 440, 299, 274, - 246, 466, 243, 492, 530, 531, 532, 534, 400, 269, - 439, 401, 0, 380, 587, 588, 320, 0, 0, 0, - 539, 0, 789, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 421, 0, 0, 0, 776, 0, 0, 0, - 273, 781, 0, 0, 0, 370, 270, 0, 0, 206, - 512, 0, 436, 0, 205, 0, 494, 255, 381, 378, - 595, 285, 276, 272, 252, 321, 390, 433, 529, 427, - 788, 374, 0, 0, 504, 406, 0, 0, 0, 0, - 0, 0, 0, 0, 783, 784, 0, 0, 0, 0, - 0, 0, 2462, 0, 327, 250, 329, 204, 418, 505, - 289, 0, 95, 0, 0, 1037, 518, 971, 760, 937, - 975, 1038, 989, 990, 991, 976, 0, 240, 977, 978, - 247, 979, 0, 936, 819, 821, 820, 886, 887, 888, - 889, 890, 891, 892, 822, 823, 817, 984, 621, 992, - 993, 2463, 268, 325, 275, 267, 592, 0, 0, 0, - 0, 0, 0, 608, 0, 0, 231, 0, 0, 0, - 0, 0, 0, 0, 756, 773, 0, 787, 0, 0, - 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 770, 771, - 0, 0, 0, 0, 931, 0, 772, 0, 0, 780, - 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, - 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, - 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, - 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, - 1034, 1035, 782, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 300, 0, 407, 260, 0, 460, 930, - 0, 0, 641, 0, 0, 928, 0, 0, 0, 0, - 369, 0, 334, 199, 227, 0, 0, 417, 468, 480, - 0, 0, 0, 981, 0, 478, 431, 616, 235, 287, - 465, 438, 476, 446, 290, 0, 0, 477, 376, 597, - 456, 613, 642, 643, 266, 411, 627, 533, 635, 660, - 228, 263, 425, 517, 619, 501, 402, 593, 594, 333, - 500, 298, 203, 373, 648, 226, 486, 375, 244, 233, - 599, 624, 302, 254, 292, 463, 655, 215, 528, 610, - 241, 490, 0, 0, 663, 249, 511, 622, 611, 217, - 606, 510, 398, 330, 331, 216, 0, 464, 271, 296, - 0, 0, 261, 420, 982, 983, 259, 664, 827, 634, - 222, 0, 633, 413, 596, 607, 399, 387, 221, 605, - 397, 386, 338, 835, 836, 283, 310, 912, 911, 910, - 309, 311, 908, 909, 907, 209, 620, 638, 0, 210, - 0, 506, 623, 665, 458, 214, 236, 237, 239, 0, - 282, 286, 294, 297, 306, 307, 317, 371, 424, 452, - 448, 457, 0, 590, 614, 628, 640, 646, 647, 649, - 650, 651, 652, 653, 656, 654, 412, 315, 502, 337, - 377, 0, 0, 430, 479, 242, 618, 503, 918, 940, - 929, 793, 794, 919, 920, 944, 921, 796, 797, 941, - 942, 790, 791, 795, 943, 945, 666, 667, 668, 669, - 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, - 680, 681, 682, 683, 661, 519, 525, 520, 521, 522, - 523, 524, 0, 526, 932, 779, 778, 0, 785, 786, - 0, 815, 816, 818, 824, 825, 826, 837, 884, 885, - 893, 895, 896, 894, 897, 898, 899, 902, 903, 904, - 905, 900, 901, 906, 798, 802, 799, 800, 801, 813, - 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, - 814, 955, 956, 957, 958, 959, 960, 830, 834, 833, - 831, 832, 828, 829, 856, 855, 857, 858, 859, 860, - 861, 862, 864, 863, 865, 866, 867, 868, 869, 870, - 838, 839, 842, 843, 841, 840, 844, 853, 854, 845, - 846, 847, 848, 849, 850, 852, 851, 871, 872, 873, - 874, 875, 877, 876, 880, 881, 879, 878, 883, 882, - 777, 198, 223, 372, 0, 461, 291, 662, 630, 491, - 625, 208, 225, 946, 265, 947, 0, 0, 951, 0, - 0, 0, 953, 952, 0, 954, 916, 915, 0, 0, - 948, 949, 0, 950, 0, 0, 200, 202, 211, 224, - 234, 238, 245, 264, 279, 281, 288, 301, 313, 314, - 322, 323, 326, 332, 384, 391, 392, 393, 394, 414, - 415, 416, 419, 422, 423, 426, 428, 429, 432, 437, - 441, 442, 443, 445, 447, 449, 462, 467, 481, 482, - 483, 484, 485, 488, 489, 495, 496, 497, 498, 499, - 507, 508, 513, 514, 515, 516, 527, 598, 600, 617, - 637, 644, 487, 389, 435, 459, 591, 961, 962, 963, - 964, 965, 966, 967, 968, 303, 612, 645, 609, 657, - 639, 444, 382, 0, 0, 385, 284, 308, 324, 0, - 629, 509, 229, 473, 293, 253, 1036, 0, 213, 248, - 232, 262, 277, 280, 328, 396, 405, 434, 440, 299, - 274, 246, 466, 243, 492, 530, 531, 532, 534, 400, - 269, 439, 401, 0, 380, 587, 588, 320, 0, 0, - 86, 539, 0, 789, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 421, 0, 0, 0, 776, 0, 0, - 0, 273, 781, 0, 0, 0, 370, 270, 0, 0, - 206, 512, 0, 436, 0, 205, 0, 494, 255, 381, - 378, 595, 285, 276, 272, 252, 321, 390, 433, 529, - 427, 1732, 374, 0, 0, 504, 406, 0, 0, 0, - 0, 0, 0, 0, 0, 783, 784, 0, 0, 0, - 0, 0, 0, 0, 0, 327, 250, 329, 204, 418, - 505, 289, 0, 95, 0, 0, 1037, 518, 971, 760, - 937, 975, 1038, 989, 990, 991, 976, 0, 240, 977, - 978, 247, 979, 0, 936, 819, 821, 820, 886, 887, - 888, 889, 890, 891, 892, 822, 823, 817, 984, 621, - 992, 993, 0, 268, 325, 275, 267, 592, 0, 0, - 0, 0, 0, 0, 608, 0, 0, 231, 0, 0, - 0, 0, 0, 0, 0, 756, 773, 0, 787, 0, - 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 770, - 771, 0, 0, 0, 0, 931, 0, 772, 0, 0, - 780, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, - 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, - 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, - 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, - 1033, 1034, 1035, 782, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 300, 0, 407, 260, 0, 460, - 930, 0, 0, 641, 0, 0, 928, 0, 0, 0, - 0, 369, 0, 334, 199, 227, 0, 0, 417, 468, - 480, 0, 0, 0, 981, 0, 478, 431, 616, 235, - 287, 465, 438, 476, 446, 290, 0, 0, 477, 376, - 597, 456, 613, 642, 643, 266, 411, 627, 533, 635, - 660, 228, 263, 425, 517, 619, 501, 402, 593, 594, - 333, 500, 298, 203, 373, 648, 226, 486, 375, 244, - 233, 599, 624, 302, 254, 292, 463, 655, 215, 528, - 610, 241, 490, 0, 0, 663, 249, 511, 622, 611, - 217, 606, 510, 398, 330, 331, 216, 0, 464, 271, - 296, 0, 0, 261, 420, 982, 983, 259, 664, 827, - 634, 222, 0, 633, 413, 596, 607, 399, 387, 221, - 605, 397, 386, 338, 835, 836, 283, 310, 912, 911, - 910, 309, 311, 908, 909, 907, 209, 620, 638, 0, - 210, 0, 506, 623, 665, 458, 214, 236, 237, 239, - 0, 282, 286, 294, 297, 306, 307, 317, 371, 424, - 452, 448, 457, 0, 590, 614, 628, 640, 646, 647, - 649, 650, 651, 652, 653, 656, 654, 412, 315, 502, - 337, 377, 0, 0, 430, 479, 242, 618, 503, 918, - 940, 929, 793, 794, 919, 920, 944, 921, 796, 797, - 941, 942, 790, 791, 795, 943, 945, 666, 667, 668, - 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, - 679, 680, 681, 682, 683, 661, 519, 525, 520, 521, - 522, 523, 524, 0, 526, 932, 779, 778, 0, 785, - 786, 0, 815, 816, 818, 824, 825, 826, 837, 884, - 885, 893, 895, 896, 894, 897, 898, 899, 902, 903, - 904, 905, 900, 901, 906, 798, 802, 799, 800, 801, - 813, 803, 804, 805, 806, 807, 808, 809, 810, 811, - 812, 814, 955, 956, 957, 958, 959, 960, 830, 834, - 833, 831, 832, 828, 829, 856, 855, 857, 858, 859, - 860, 861, 862, 864, 863, 865, 866, 867, 868, 869, - 870, 838, 839, 842, 843, 841, 840, 844, 853, 854, - 845, 846, 847, 848, 849, 850, 852, 851, 871, 872, - 873, 874, 875, 877, 876, 880, 881, 879, 878, 883, - 882, 777, 198, 223, 372, 94, 461, 291, 662, 630, - 491, 625, 208, 225, 946, 265, 947, 0, 0, 951, - 0, 0, 0, 953, 952, 0, 954, 916, 915, 0, - 0, 948, 949, 0, 950, 0, 0, 200, 202, 211, - 224, 234, 238, 245, 264, 279, 281, 288, 301, 313, - 314, 322, 323, 326, 332, 384, 391, 392, 393, 394, - 414, 415, 416, 419, 422, 423, 426, 428, 429, 432, - 437, 441, 442, 443, 445, 447, 449, 462, 467, 481, - 482, 483, 484, 485, 488, 489, 495, 496, 497, 498, - 499, 507, 508, 513, 514, 515, 516, 527, 598, 600, - 617, 637, 644, 487, 389, 435, 459, 591, 961, 962, - 963, 964, 965, 966, 967, 968, 303, 612, 645, 609, - 657, 639, 444, 382, 0, 0, 385, 284, 308, 324, - 0, 629, 509, 229, 473, 293, 253, 1036, 0, 213, - 248, 232, 262, 277, 280, 328, 396, 405, 434, 440, - 299, 274, 246, 466, 243, 492, 530, 531, 532, 534, - 400, 269, 439, 401, 0, 380, 587, 588, 320, 0, - 0, 0, 539, 0, 789, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 421, 0, 0, 0, 776, 0, - 0, 0, 273, 781, 0, 0, 0, 370, 270, 0, - 0, 206, 512, 0, 436, 0, 205, 0, 494, 255, - 381, 378, 595, 285, 276, 272, 252, 321, 390, 433, - 529, 427, 788, 374, 0, 0, 504, 406, 0, 0, - 0, 0, 0, 0, 0, 0, 783, 784, 0, 0, - 0, 0, 0, 0, 0, 0, 327, 250, 329, 204, - 418, 505, 289, 0, 95, 0, 0, 1037, 518, 971, - 760, 937, 975, 1038, 989, 990, 991, 976, 0, 240, - 977, 978, 247, 979, 0, 936, 819, 821, 820, 886, - 887, 888, 889, 890, 891, 892, 822, 823, 817, 984, - 621, 992, 993, 0, 268, 325, 275, 267, 592, 0, - 0, 0, 0, 0, 0, 608, 0, 0, 231, 0, - 0, 0, 0, 0, 0, 0, 756, 773, 0, 787, - 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 770, 771, 0, 0, 0, 0, 931, 0, 772, 0, - 0, 780, 994, 995, 996, 997, 998, 999, 1000, 1001, - 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, - 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, - 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, - 1032, 1033, 1034, 1035, 782, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 300, 0, 407, 260, 0, - 460, 930, 0, 0, 641, 0, 0, 928, 0, 0, - 0, 0, 369, 0, 334, 199, 227, 0, 0, 417, - 468, 480, 0, 0, 0, 981, 0, 478, 431, 616, - 235, 287, 465, 438, 476, 446, 290, 4125, 0, 477, - 376, 597, 456, 613, 642, 643, 266, 411, 627, 533, - 635, 660, 228, 263, 425, 517, 619, 501, 402, 593, - 594, 333, 500, 298, 203, 373, 648, 226, 486, 375, - 244, 233, 599, 624, 302, 254, 292, 463, 655, 215, - 528, 610, 241, 490, 0, 0, 663, 249, 511, 622, - 611, 217, 606, 510, 398, 330, 331, 216, 0, 464, - 271, 296, 0, 0, 261, 420, 982, 983, 259, 664, - 827, 634, 222, 0, 633, 413, 596, 607, 399, 387, - 221, 605, 397, 386, 338, 835, 836, 283, 310, 912, - 911, 910, 309, 311, 908, 909, 907, 209, 620, 638, - 0, 210, 0, 506, 623, 665, 458, 214, 236, 237, - 239, 0, 282, 286, 294, 297, 306, 307, 317, 371, - 424, 452, 448, 457, 0, 590, 614, 628, 640, 646, - 647, 649, 650, 651, 652, 653, 656, 654, 412, 315, - 502, 337, 377, 0, 0, 430, 479, 242, 618, 503, - 918, 940, 929, 793, 794, 919, 920, 944, 921, 796, - 797, 941, 942, 790, 791, 795, 943, 945, 666, 667, - 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, - 678, 679, 680, 681, 682, 683, 661, 519, 525, 520, - 521, 522, 523, 524, 0, 526, 932, 779, 778, 0, - 785, 786, 0, 815, 816, 818, 824, 825, 826, 837, - 884, 885, 893, 895, 896, 894, 897, 898, 899, 902, - 903, 904, 905, 900, 901, 906, 798, 802, 799, 800, - 801, 813, 803, 804, 805, 806, 807, 808, 809, 810, - 811, 812, 814, 955, 956, 957, 958, 959, 960, 830, - 834, 833, 831, 832, 828, 829, 856, 855, 857, 858, - 859, 860, 861, 862, 864, 863, 865, 866, 867, 868, - 869, 870, 838, 839, 842, 843, 841, 840, 844, 853, - 854, 845, 846, 847, 848, 849, 850, 852, 851, 871, - 872, 873, 874, 875, 877, 876, 880, 881, 879, 878, - 883, 882, 777, 198, 223, 372, 0, 461, 291, 662, - 630, 491, 625, 208, 225, 946, 265, 947, 0, 0, - 951, 0, 0, 0, 953, 952, 0, 954, 916, 915, - 0, 0, 948, 949, 0, 950, 0, 0, 200, 202, - 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, - 313, 314, 322, 323, 326, 332, 384, 391, 392, 393, - 394, 414, 415, 416, 419, 422, 423, 426, 428, 429, - 432, 437, 441, 442, 443, 445, 447, 449, 462, 467, - 481, 482, 483, 484, 485, 488, 489, 495, 496, 497, - 498, 499, 507, 508, 513, 514, 515, 516, 527, 598, - 600, 617, 637, 644, 487, 389, 435, 459, 591, 961, - 962, 963, 964, 965, 966, 967, 968, 303, 612, 645, - 609, 657, 639, 444, 382, 0, 0, 385, 284, 308, - 324, 0, 629, 509, 229, 473, 293, 253, 1036, 0, - 213, 248, 232, 262, 277, 280, 328, 396, 405, 434, - 440, 299, 274, 246, 466, 243, 492, 530, 531, 532, - 534, 400, 269, 439, 401, 0, 380, 587, 588, 320, - 0, 0, 0, 539, 0, 789, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 421, 0, 0, 0, 776, - 0, 0, 0, 273, 781, 0, 0, 0, 370, 270, - 0, 0, 206, 512, 0, 436, 0, 205, 0, 494, - 255, 381, 378, 595, 285, 276, 272, 252, 321, 390, - 433, 529, 427, 788, 374, 0, 0, 504, 406, 0, - 0, 0, 0, 0, 0, 0, 0, 783, 784, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 250, 329, - 204, 418, 505, 289, 0, 95, 0, 1769, 1037, 518, - 971, 760, 937, 975, 1038, 989, 990, 991, 976, 0, - 240, 977, 978, 247, 979, 0, 936, 819, 821, 820, - 886, 887, 888, 889, 890, 891, 892, 822, 823, 817, - 984, 621, 992, 993, 0, 268, 325, 275, 267, 592, - 0, 0, 0, 0, 0, 0, 608, 0, 0, 231, - 0, 0, 0, 0, 0, 0, 0, 756, 773, 0, - 787, 0, 0, 0, 278, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 770, 771, 0, 0, 0, 0, 931, 0, 772, - 0, 0, 780, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, - 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, - 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, - 1031, 1032, 1033, 1034, 1035, 782, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 300, 0, 407, 260, - 0, 460, 930, 0, 0, 641, 0, 0, 928, 0, - 0, 0, 0, 369, 0, 334, 199, 227, 0, 0, - 417, 468, 480, 0, 0, 0, 981, 0, 478, 431, - 616, 235, 287, 465, 438, 476, 446, 290, 0, 0, - 477, 376, 597, 456, 613, 642, 643, 266, 411, 627, - 533, 635, 660, 228, 263, 425, 517, 619, 501, 402, - 593, 594, 333, 500, 298, 203, 373, 648, 226, 486, - 375, 244, 233, 599, 624, 302, 254, 292, 463, 655, - 215, 528, 610, 241, 490, 0, 0, 663, 249, 511, - 622, 611, 217, 606, 510, 398, 330, 331, 216, 0, - 464, 271, 296, 0, 0, 261, 420, 982, 983, 259, - 664, 827, 634, 222, 0, 633, 413, 596, 607, 399, - 387, 221, 605, 397, 386, 338, 835, 836, 283, 310, - 912, 911, 910, 309, 311, 908, 909, 907, 209, 620, - 638, 0, 210, 0, 506, 623, 665, 458, 214, 236, - 237, 239, 0, 282, 286, 294, 297, 306, 307, 317, - 371, 424, 452, 448, 457, 0, 590, 614, 628, 640, - 646, 647, 649, 650, 651, 652, 653, 656, 654, 412, - 315, 502, 337, 377, 0, 0, 430, 479, 242, 618, - 503, 918, 940, 929, 793, 794, 919, 920, 944, 921, - 796, 797, 941, 942, 790, 791, 795, 943, 945, 666, - 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, - 677, 678, 679, 680, 681, 682, 683, 661, 519, 525, - 520, 521, 522, 523, 524, 0, 526, 932, 779, 778, - 0, 785, 786, 0, 815, 816, 818, 824, 825, 826, - 837, 884, 885, 893, 895, 896, 894, 897, 898, 899, - 902, 903, 904, 905, 900, 901, 906, 798, 802, 799, - 800, 801, 813, 803, 804, 805, 806, 807, 808, 809, - 810, 811, 812, 814, 955, 956, 957, 958, 959, 960, - 830, 834, 833, 831, 832, 828, 829, 856, 855, 857, - 858, 859, 860, 861, 862, 864, 863, 865, 866, 867, - 868, 869, 870, 838, 839, 842, 843, 841, 840, 844, - 853, 854, 845, 846, 847, 848, 849, 850, 852, 851, - 871, 872, 873, 874, 875, 877, 876, 880, 881, 879, - 878, 883, 882, 777, 198, 223, 372, 0, 461, 291, - 662, 630, 491, 625, 208, 225, 946, 265, 947, 0, - 0, 951, 0, 0, 0, 953, 952, 0, 954, 916, - 915, 0, 0, 948, 949, 0, 950, 0, 0, 200, - 202, 211, 224, 234, 238, 245, 264, 279, 281, 288, - 301, 313, 314, 322, 323, 326, 332, 384, 391, 392, - 393, 394, 414, 415, 416, 419, 422, 423, 426, 428, - 429, 432, 437, 441, 442, 443, 445, 447, 449, 462, - 467, 481, 482, 483, 484, 485, 488, 489, 495, 496, - 497, 498, 499, 507, 508, 513, 514, 515, 516, 527, - 598, 600, 617, 637, 644, 487, 389, 435, 459, 591, - 961, 962, 963, 964, 965, 966, 967, 968, 303, 612, - 645, 609, 657, 639, 444, 382, 0, 0, 385, 284, - 308, 324, 0, 629, 509, 229, 473, 293, 253, 1036, - 0, 213, 248, 232, 262, 277, 280, 328, 396, 405, - 434, 440, 299, 274, 246, 466, 243, 492, 530, 531, - 532, 534, 400, 269, 439, 401, 0, 380, 587, 588, - 320, 0, 0, 0, 539, 0, 789, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, - 776, 0, 0, 0, 273, 781, 0, 0, 0, 370, - 270, 0, 0, 206, 512, 0, 436, 0, 205, 0, - 494, 255, 381, 378, 595, 285, 276, 272, 252, 321, - 390, 433, 529, 427, 788, 374, 0, 0, 504, 406, - 0, 0, 0, 0, 0, 0, 0, 0, 783, 784, - 0, 0, 0, 0, 0, 0, 0, 0, 327, 250, - 329, 204, 418, 505, 289, 0, 95, 0, 0, 1037, - 518, 971, 760, 937, 975, 1038, 989, 990, 991, 976, - 0, 240, 977, 978, 247, 979, 0, 936, 819, 821, - 820, 886, 887, 888, 889, 890, 891, 892, 822, 823, - 817, 984, 621, 992, 993, 0, 268, 325, 275, 267, - 592, 0, 0, 0, 0, 0, 0, 608, 0, 0, - 231, 0, 0, 0, 0, 0, 0, 0, 756, 773, - 0, 787, 0, 0, 0, 278, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 770, 771, 1084, 0, 0, 0, 931, 0, - 772, 0, 0, 780, 994, 995, 996, 997, 998, 999, - 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, - 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, - 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, - 1030, 1031, 1032, 1033, 1034, 1035, 782, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 300, 0, 407, - 260, 0, 460, 930, 0, 0, 641, 0, 0, 928, - 0, 0, 0, 0, 369, 0, 334, 199, 227, 0, - 0, 417, 468, 480, 0, 0, 0, 981, 0, 478, - 431, 616, 235, 287, 465, 438, 476, 446, 290, 0, - 0, 477, 376, 597, 456, 613, 642, 643, 266, 411, - 627, 533, 635, 660, 228, 263, 425, 517, 619, 501, - 402, 593, 594, 333, 500, 298, 203, 373, 648, 226, - 486, 375, 244, 233, 599, 624, 302, 254, 292, 463, - 655, 215, 528, 610, 241, 490, 0, 0, 663, 249, - 511, 622, 611, 217, 606, 510, 398, 330, 331, 216, - 0, 464, 271, 296, 0, 0, 261, 420, 982, 983, - 259, 664, 827, 634, 222, 0, 633, 413, 596, 607, - 399, 387, 221, 605, 397, 386, 338, 835, 836, 283, - 310, 912, 911, 910, 309, 311, 908, 909, 907, 209, - 620, 638, 0, 210, 0, 506, 623, 665, 458, 214, - 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, - 317, 371, 424, 452, 448, 457, 0, 590, 614, 628, - 640, 646, 647, 649, 650, 651, 652, 653, 656, 654, - 412, 315, 502, 337, 377, 0, 0, 430, 479, 242, - 618, 503, 918, 940, 929, 793, 794, 919, 920, 944, - 921, 796, 797, 941, 942, 790, 791, 795, 943, 945, - 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, - 676, 677, 678, 679, 680, 681, 682, 683, 661, 519, - 525, 520, 521, 522, 523, 524, 0, 526, 932, 779, - 778, 0, 785, 786, 0, 815, 816, 818, 824, 825, - 826, 837, 884, 885, 893, 895, 896, 894, 897, 898, - 899, 902, 903, 904, 905, 900, 901, 906, 798, 802, - 799, 800, 801, 813, 803, 804, 805, 806, 807, 808, - 809, 810, 811, 812, 814, 955, 956, 957, 958, 959, - 960, 830, 834, 833, 831, 832, 828, 829, 856, 855, - 857, 858, 859, 860, 861, 862, 864, 863, 865, 866, - 867, 868, 869, 870, 838, 839, 842, 843, 841, 840, - 844, 853, 854, 845, 846, 847, 848, 849, 850, 852, - 851, 871, 872, 873, 874, 875, 877, 876, 880, 881, - 879, 878, 883, 882, 777, 198, 223, 372, 0, 461, - 291, 662, 630, 491, 625, 208, 225, 946, 265, 947, - 0, 0, 951, 0, 0, 0, 953, 952, 0, 954, - 916, 915, 0, 0, 948, 949, 0, 950, 0, 0, - 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, - 288, 301, 313, 314, 322, 323, 326, 332, 384, 391, - 392, 393, 394, 414, 415, 416, 419, 422, 423, 426, - 428, 429, 432, 437, 441, 442, 443, 445, 447, 449, - 462, 467, 481, 482, 483, 484, 485, 488, 489, 495, - 496, 497, 498, 499, 507, 508, 513, 514, 515, 516, - 527, 598, 600, 617, 637, 644, 487, 389, 435, 459, - 591, 961, 962, 963, 964, 965, 966, 967, 968, 303, - 612, 645, 609, 657, 639, 444, 382, 0, 0, 385, - 284, 308, 324, 0, 629, 509, 229, 473, 293, 253, - 1036, 0, 213, 248, 232, 262, 277, 280, 328, 396, - 405, 434, 440, 299, 274, 246, 466, 243, 492, 530, - 531, 532, 534, 400, 269, 439, 401, 0, 380, 587, - 588, 320, 0, 0, 0, 539, 0, 789, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, - 0, 776, 0, 0, 0, 273, 781, 0, 0, 0, - 370, 270, 0, 0, 206, 512, 0, 436, 0, 205, - 0, 494, 255, 381, 378, 595, 285, 276, 272, 252, - 321, 390, 433, 529, 427, 788, 374, 0, 0, 504, - 406, 0, 0, 0, 0, 0, 0, 0, 0, 783, - 784, 0, 0, 0, 0, 0, 0, 0, 0, 327, - 250, 329, 204, 418, 505, 289, 0, 95, 0, 0, - 1037, 518, 971, 760, 937, 975, 1038, 989, 990, 991, - 976, 0, 240, 977, 978, 247, 979, 0, 936, 819, - 821, 820, 886, 887, 888, 889, 890, 891, 892, 822, - 823, 817, 984, 621, 992, 993, 0, 268, 325, 275, - 267, 592, 0, 0, 0, 0, 0, 0, 608, 0, - 0, 231, 0, 0, 0, 0, 0, 0, 0, 756, - 773, 0, 787, 0, 0, 0, 278, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 770, 771, 0, 0, 0, 0, 931, - 0, 772, 0, 0, 780, 994, 995, 996, 997, 998, - 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, - 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, - 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, - 1029, 1030, 1031, 1032, 1033, 1034, 1035, 782, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, - 407, 260, 0, 460, 930, 0, 0, 641, 0, 0, - 928, 0, 0, 0, 0, 369, 0, 334, 199, 227, - 0, 0, 417, 468, 480, 0, 0, 0, 981, 0, - 478, 431, 616, 235, 287, 465, 438, 476, 446, 290, - 0, 0, 477, 376, 597, 456, 613, 642, 643, 266, - 411, 627, 533, 635, 660, 228, 263, 425, 517, 619, - 501, 402, 593, 594, 333, 500, 298, 203, 373, 648, - 226, 486, 375, 244, 233, 599, 624, 302, 254, 292, - 463, 655, 215, 528, 610, 241, 490, 0, 0, 663, - 249, 511, 622, 611, 217, 606, 510, 398, 330, 331, - 216, 0, 464, 271, 296, 0, 0, 261, 420, 982, - 983, 259, 664, 827, 634, 222, 0, 633, 413, 596, - 607, 399, 387, 221, 605, 397, 386, 338, 835, 836, - 283, 310, 912, 911, 910, 309, 311, 908, 909, 907, - 209, 620, 638, 0, 210, 0, 506, 623, 665, 458, - 214, 236, 237, 239, 0, 282, 286, 294, 297, 306, - 307, 317, 371, 424, 452, 448, 457, 0, 590, 614, - 628, 640, 646, 647, 649, 650, 651, 652, 653, 656, - 654, 412, 315, 502, 337, 377, 0, 0, 430, 479, - 242, 618, 503, 918, 940, 929, 793, 794, 919, 920, - 944, 921, 796, 797, 941, 942, 790, 791, 795, 943, - 945, 666, 667, 668, 669, 670, 671, 672, 673, 674, - 675, 676, 677, 678, 679, 680, 681, 682, 683, 661, - 519, 525, 520, 521, 522, 523, 524, 0, 526, 932, - 779, 778, 0, 785, 786, 0, 815, 816, 818, 824, - 825, 826, 837, 884, 885, 893, 895, 896, 894, 897, - 898, 899, 902, 903, 904, 905, 900, 901, 906, 798, - 802, 799, 800, 801, 813, 803, 804, 805, 806, 807, - 808, 809, 810, 811, 812, 814, 955, 956, 957, 958, - 959, 960, 830, 834, 833, 831, 832, 828, 829, 856, - 855, 857, 858, 859, 860, 861, 862, 864, 863, 865, - 866, 867, 868, 869, 870, 838, 839, 842, 843, 841, - 840, 844, 853, 854, 845, 846, 847, 848, 849, 850, - 852, 851, 871, 872, 873, 874, 875, 877, 876, 880, - 881, 879, 878, 883, 882, 777, 198, 223, 372, 0, - 461, 291, 662, 630, 491, 625, 208, 225, 946, 265, - 947, 0, 0, 951, 0, 0, 0, 953, 952, 0, - 954, 916, 915, 0, 0, 948, 949, 0, 950, 0, - 0, 200, 202, 211, 224, 234, 238, 245, 264, 279, - 281, 288, 301, 313, 314, 322, 323, 326, 332, 384, - 391, 392, 393, 394, 414, 415, 416, 419, 422, 423, - 426, 428, 429, 432, 437, 441, 442, 443, 445, 447, - 449, 462, 467, 481, 482, 483, 484, 485, 488, 489, - 495, 496, 497, 498, 499, 507, 508, 513, 514, 515, - 516, 527, 598, 600, 617, 637, 644, 487, 389, 435, - 459, 591, 961, 962, 963, 964, 965, 966, 967, 968, - 303, 612, 645, 609, 657, 639, 444, 382, 0, 0, - 385, 284, 308, 324, 0, 629, 509, 229, 473, 293, - 253, 1036, 0, 213, 248, 232, 262, 277, 280, 328, - 396, 405, 434, 440, 299, 274, 246, 466, 243, 492, - 530, 531, 532, 534, 400, 269, 439, 401, 0, 380, - 587, 588, 320, 0, 0, 0, 539, 0, 789, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, - 0, 0, 776, 0, 0, 0, 273, 781, 0, 0, - 0, 370, 270, 0, 0, 206, 512, 0, 436, 0, - 205, 0, 494, 255, 381, 378, 595, 285, 276, 272, - 252, 321, 390, 433, 529, 427, 788, 374, 0, 0, - 504, 406, 0, 0, 0, 0, 0, 0, 0, 0, - 783, 784, 0, 0, 0, 0, 0, 0, 0, 0, - 327, 250, 329, 204, 418, 505, 289, 0, 95, 0, - 0, 1037, 518, 971, 760, 937, 975, 1038, 989, 990, - 991, 976, 0, 240, 977, 978, 247, 979, 0, 936, - 819, 821, 820, 886, 887, 888, 889, 890, 891, 892, - 822, 823, 817, 984, 621, 992, 993, 0, 268, 325, - 275, 267, 592, 0, 0, 0, 0, 0, 0, 608, - 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, - 756, 773, 0, 787, 0, 0, 0, 278, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 770, 771, 0, 0, 0, 0, - 931, 0, 772, 0, 0, 780, 994, 995, 996, 997, - 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, - 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, - 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, - 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 3200, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, - 0, 407, 260, 0, 460, 930, 0, 0, 641, 0, - 0, 928, 0, 0, 0, 0, 369, 0, 334, 199, - 227, 0, 0, 417, 468, 480, 0, 0, 0, 981, - 0, 478, 431, 616, 235, 287, 465, 438, 476, 446, - 290, 0, 0, 477, 376, 597, 456, 613, 642, 643, - 266, 411, 627, 533, 635, 660, 228, 263, 425, 517, - 619, 501, 402, 593, 594, 333, 500, 298, 203, 373, - 648, 226, 486, 375, 244, 233, 599, 624, 302, 254, - 292, 463, 655, 215, 528, 610, 241, 490, 0, 0, - 663, 249, 511, 622, 611, 217, 606, 510, 398, 330, - 331, 216, 0, 464, 271, 296, 0, 0, 261, 420, - 982, 983, 259, 664, 827, 634, 222, 0, 633, 413, - 596, 607, 399, 387, 221, 605, 397, 386, 338, 835, - 836, 283, 310, 912, 911, 910, 309, 311, 908, 909, - 907, 209, 620, 638, 0, 210, 0, 506, 623, 665, - 458, 214, 236, 237, 239, 0, 282, 286, 294, 297, - 306, 307, 317, 371, 424, 452, 448, 457, 0, 590, - 614, 628, 640, 646, 647, 649, 650, 651, 652, 653, - 656, 654, 412, 315, 502, 337, 377, 0, 0, 430, - 479, 242, 618, 503, 918, 940, 929, 793, 794, 919, - 920, 944, 921, 796, 797, 941, 942, 790, 791, 795, - 943, 945, 666, 667, 668, 669, 670, 671, 672, 673, - 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, - 661, 519, 525, 520, 521, 522, 523, 524, 0, 526, - 932, 779, 778, 0, 785, 786, 0, 815, 816, 818, - 824, 825, 826, 837, 884, 885, 893, 895, 896, 894, - 897, 898, 899, 902, 903, 904, 905, 900, 901, 906, - 798, 802, 799, 800, 801, 813, 803, 804, 805, 806, - 807, 808, 809, 810, 811, 812, 814, 955, 956, 957, - 958, 959, 960, 830, 834, 833, 831, 832, 828, 829, - 856, 855, 857, 858, 859, 860, 861, 862, 864, 863, - 865, 866, 867, 868, 869, 870, 838, 839, 842, 843, - 841, 840, 844, 853, 854, 845, 846, 847, 848, 849, - 850, 852, 851, 871, 872, 873, 874, 875, 877, 876, - 880, 881, 879, 878, 883, 882, 777, 198, 223, 372, - 0, 461, 291, 662, 630, 491, 625, 208, 225, 946, - 265, 947, 0, 0, 951, 0, 0, 0, 953, 952, - 0, 954, 916, 915, 0, 0, 948, 949, 0, 950, - 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, - 279, 281, 288, 301, 313, 314, 322, 323, 326, 332, - 384, 391, 392, 393, 394, 414, 415, 416, 419, 422, - 423, 426, 428, 429, 432, 437, 441, 442, 443, 445, - 447, 449, 462, 467, 481, 482, 483, 484, 485, 488, - 489, 495, 496, 497, 498, 499, 507, 508, 513, 514, - 515, 516, 527, 598, 600, 617, 637, 644, 487, 389, - 435, 459, 591, 961, 962, 963, 964, 965, 966, 967, - 968, 303, 612, 645, 609, 657, 639, 444, 382, 0, - 0, 385, 284, 308, 324, 0, 629, 509, 229, 473, - 293, 253, 1036, 0, 213, 248, 232, 262, 277, 280, - 328, 396, 405, 434, 440, 299, 274, 246, 466, 243, - 492, 530, 531, 532, 534, 400, 269, 439, 401, 0, - 380, 587, 588, 320, 0, 0, 0, 539, 0, 789, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, - 0, 0, 0, 776, 0, 0, 0, 273, 781, 0, - 0, 0, 370, 270, 0, 0, 206, 512, 0, 436, - 0, 205, 0, 494, 255, 381, 378, 595, 285, 276, - 272, 252, 321, 390, 433, 529, 427, 788, 374, 0, - 0, 504, 406, 0, 0, 0, 0, 0, 0, 0, - 0, 783, 784, 0, 0, 0, 0, 0, 0, 0, - 0, 327, 250, 329, 204, 418, 505, 289, 0, 95, - 0, 0, 1037, 518, 971, 760, 937, 975, 1038, 989, - 990, 991, 976, 0, 240, 977, 978, 247, 979, 0, - 936, 819, 821, 820, 886, 887, 888, 889, 890, 891, - 892, 822, 823, 817, 984, 621, 992, 993, 0, 268, - 325, 275, 267, 592, 0, 0, 0, 0, 0, 0, - 608, 0, 0, 231, 0, 0, 0, 0, 0, 0, - 0, 756, 773, 0, 787, 0, 0, 0, 278, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 770, 771, 0, 0, 0, - 0, 931, 0, 772, 0, 0, 780, 994, 995, 996, - 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, - 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2022, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, + 1471, 1450, 557, 0, 1391, 1474, 1356, 1377, 1484, 1380, + 1383, 1428, 1331, 1406, 438, 1374, 1360, 1326, 1368, 1327, + 1358, 1393, 286, 1355, 1452, 1410, 1473, 385, 283, 1333, + 1324, 212, 530, 1361, 453, 1379, 211, 1431, 511, 268, + 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, + 547, 444, 1480, 389, 1416, 0, 522, 422, 1578, 0, + 0, 1457, 1456, 1384, 1395, 1462, 1404, 1443, 1389, 1430, + 1343, 1415, 1475, 1375, 1425, 1476, 342, 262, 344, 210, + 435, 523, 302, 0, 0, 0, 4218, 4220, 536, 991, + 0, 0, 0, 0, 4221, 0, 0, 0, 0, 249, + 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, + 359, 361, 363, 369, 376, 382, 355, 364, 1371, 1422, + 641, 1469, 1372, 1424, 281, 340, 288, 280, 612, 1481, + 1461, 1330, 1403, 1468, 1398, 628, 2022, 0, 238, 1472, + 1397, 0, 1427, 0, 1487, 1325, 1418, 0, 1328, 1332, + 1483, 1466, 1364, 1365, 291, 0, 0, 0, 0, 0, + 0, 0, 1394, 1405, 1440, 1444, 1387, 0, 0, 0, + 0, 0, 0, 0, 0, 1362, 0, 1414, 0, 0, + 0, 1337, 1329, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2076, 0, + 0, 0, 0, 0, 0, 1392, 0, 0, 0, 0, + 1342, 0, 1363, 1441, 0, 1323, 313, 1334, 423, 273, + 0, 477, 1354, 319, 334, 1340, 1369, 1470, 1458, 1459, + 1460, 1339, 1448, 1465, 1388, 661, 1467, 1386, 1385, 1435, + 1338, 1455, 1378, 384, 1336, 349, 205, 233, 0, 1376, + 434, 485, 497, 1454, 1453, 1359, 1370, 269, 1367, 495, + 448, 636, 243, 300, 482, 455, 493, 463, 303, 1413, + 1433, 494, 391, 617, 473, 633, 662, 663, 279, 428, + 647, 551, 655, 680, 234, 276, 442, 535, 639, 519, + 417, 613, 614, 348, 518, 311, 209, 388, 668, 232, + 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, + 675, 221, 546, 630, 250, 507, 0, 0, 683, 258, + 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, + 0, 481, 284, 309, 0, 0, 274, 437, 621, 622, + 272, 684, 237, 654, 228, 1335, 653, 430, 616, 627, + 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, + 324, 470, 394, 471, 323, 325, 425, 424, 426, 215, + 640, 658, 0, 216, 0, 524, 643, 685, 475, 220, + 244, 245, 248, 1353, 295, 299, 307, 310, 320, 321, + 331, 386, 441, 469, 465, 474, 1449, 610, 634, 648, + 660, 666, 667, 669, 670, 671, 672, 673, 676, 674, + 429, 329, 520, 352, 392, 1438, 1486, 447, 496, 251, + 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, + 512, 609, 246, 266, 207, 1347, 1352, 1345, 0, 270, + 271, 1419, 605, 1348, 1346, 1408, 1409, 1349, 1477, 1478, + 1479, 1463, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 681, 537, 543, 538, 539, 540, 541, 542, 0, 544, + 1442, 1341, 0, 1350, 1351, 419, 1451, 623, 624, 704, + 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, + 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, + 263, 218, 410, 420, 608, 330, 224, 225, 226, 553, + 554, 555, 556, 651, 652, 656, 213, 486, 487, 488, + 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, + 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, + 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, + 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, + 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, + 584, 595, 579, 567, 560, 568, 1412, 204, 229, 387, + 1482, 478, 304, 682, 650, 508, 645, 214, 231, 1344, + 278, 1357, 1366, 0, 1373, 1381, 1382, 1396, 1399, 1400, + 1401, 1402, 1420, 1421, 1423, 1432, 1434, 1437, 1439, 1446, + 1464, 1485, 206, 208, 217, 230, 242, 247, 254, 277, + 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, + 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, + 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, + 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, + 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, + 533, 534, 545, 618, 620, 637, 657, 664, 504, 404, + 452, 476, 611, 1429, 1390, 317, 318, 467, 468, 332, + 333, 678, 679, 316, 632, 665, 629, 677, 659, 461, + 397, 1411, 1417, 400, 297, 322, 339, 1426, 649, 527, + 236, 490, 306, 265, 1445, 1447, 219, 257, 239, 275, + 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, + 483, 252, 509, 548, 549, 550, 552, 415, 282, 456, + 1407, 1436, 395, 606, 607, 335, 416, 0, 0, 0, + 0, 0, 0, 1471, 1450, 557, 0, 1391, 1474, 1356, + 1377, 1484, 1380, 1383, 1428, 1331, 1406, 438, 1374, 1360, + 1326, 1368, 1327, 1358, 1393, 286, 1355, 1452, 1410, 1473, + 385, 283, 1333, 1324, 212, 530, 1361, 453, 1379, 211, + 1431, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 1480, 389, 1416, 0, 522, + 422, 0, 0, 0, 1457, 1456, 1384, 1395, 1462, 1404, + 1443, 1389, 1430, 1343, 1415, 1475, 1375, 1425, 1476, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 202, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 1371, 1422, 641, 1469, 1372, 1424, 281, 340, 288, + 280, 612, 1481, 1461, 1330, 1403, 1468, 1398, 628, 0, + 0, 238, 1472, 1397, 0, 1427, 0, 1487, 1325, 1418, + 0, 1328, 1332, 1483, 1466, 1364, 1365, 291, 0, 0, + 0, 0, 0, 0, 0, 1394, 1405, 1440, 1444, 1387, + 0, 0, 0, 0, 0, 0, 3350, 0, 1362, 0, + 1414, 0, 0, 0, 1337, 1329, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1392, 0, + 0, 0, 0, 1342, 0, 1363, 1441, 0, 1323, 313, + 1334, 423, 273, 0, 477, 1354, 319, 334, 1340, 1369, + 1470, 1458, 1459, 1460, 1339, 1448, 1465, 1388, 661, 1467, + 1386, 1385, 1435, 1338, 1455, 1378, 384, 1336, 349, 205, + 233, 0, 1376, 434, 485, 497, 1454, 1453, 1359, 1370, + 269, 1367, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 1413, 1433, 494, 391, 617, 473, 633, 662, + 663, 279, 428, 647, 551, 655, 680, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 668, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 675, 221, 546, 630, 250, 507, 0, + 0, 683, 258, 529, 642, 631, 223, 626, 528, 413, + 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, + 437, 621, 622, 272, 684, 237, 654, 228, 1335, 653, + 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, + 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, + 424, 426, 215, 640, 658, 0, 216, 0, 524, 643, + 685, 475, 220, 244, 245, 248, 1353, 295, 299, 307, + 310, 320, 321, 331, 386, 441, 469, 465, 474, 1449, + 610, 634, 648, 660, 666, 667, 669, 670, 671, 672, + 673, 676, 674, 429, 329, 520, 352, 392, 1438, 1486, + 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, + 261, 260, 235, 512, 609, 246, 266, 207, 1347, 1352, + 1345, 0, 270, 271, 1419, 605, 1348, 1346, 1408, 1409, + 1349, 1477, 1478, 1479, 1463, 686, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 681, 537, 543, 538, 539, 540, 541, + 542, 0, 544, 1442, 1341, 0, 1350, 1351, 419, 1451, + 623, 624, 704, 403, 510, 635, 354, 368, 371, 360, + 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, + 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, + 225, 226, 553, 554, 555, 556, 651, 652, 656, 213, + 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, + 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, + 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, + 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, + 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, + 593, 592, 573, 584, 595, 579, 567, 560, 568, 1412, + 204, 229, 387, 1482, 478, 304, 682, 650, 508, 645, + 214, 231, 1344, 278, 1357, 1366, 0, 1373, 1381, 1382, + 1396, 1399, 1400, 1401, 1402, 1420, 1421, 1423, 1432, 1434, + 1437, 1439, 1446, 1464, 1485, 206, 208, 217, 230, 242, + 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, + 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, + 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, + 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, + 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, + 526, 531, 532, 533, 534, 545, 618, 620, 637, 657, + 664, 504, 404, 452, 476, 611, 1429, 1390, 317, 318, + 467, 468, 332, 333, 678, 679, 316, 632, 665, 629, + 677, 659, 461, 397, 1411, 1417, 400, 297, 322, 339, + 1426, 649, 527, 236, 490, 306, 265, 1445, 1447, 219, + 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, + 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, + 415, 282, 456, 1407, 1436, 395, 606, 607, 335, 416, + 0, 0, 0, 0, 0, 0, 1471, 1450, 557, 0, + 1391, 1474, 1356, 1377, 1484, 1380, 1383, 1428, 1331, 1406, + 438, 1374, 1360, 1326, 1368, 1327, 1358, 1393, 286, 1355, + 1452, 1410, 1473, 385, 283, 1333, 1324, 212, 530, 1361, + 453, 1379, 211, 1431, 511, 268, 396, 393, 615, 298, + 289, 285, 264, 336, 405, 450, 547, 444, 1480, 389, + 1416, 0, 522, 422, 0, 0, 0, 1457, 1456, 1384, + 1395, 1462, 1404, 1443, 1389, 1430, 1343, 1415, 1475, 1375, + 1425, 1476, 342, 262, 344, 210, 435, 523, 302, 0, + 0, 0, 0, 0, 536, 756, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, + 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, + 376, 382, 355, 364, 1371, 1422, 641, 1469, 1372, 1424, + 281, 340, 288, 280, 612, 1481, 1461, 1330, 1403, 1468, + 1398, 628, 0, 0, 238, 1472, 1397, 0, 1427, 0, + 1487, 1325, 1418, 0, 1328, 1332, 1483, 1466, 1364, 1365, + 291, 0, 0, 0, 0, 0, 0, 0, 1394, 1405, + 1440, 1444, 1387, 0, 0, 0, 0, 0, 0, 3311, + 0, 1362, 0, 1414, 0, 0, 0, 1337, 1329, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1392, 0, 0, 0, 0, 1342, 0, 1363, 1441, + 0, 1323, 313, 1334, 423, 273, 0, 477, 1354, 319, + 334, 1340, 1369, 1470, 1458, 1459, 1460, 1339, 1448, 1465, + 1388, 661, 1467, 1386, 1385, 1435, 1338, 1455, 1378, 384, + 1336, 349, 205, 233, 0, 1376, 434, 485, 497, 1454, + 1453, 1359, 1370, 269, 1367, 495, 448, 636, 243, 300, + 482, 455, 493, 463, 303, 1413, 1433, 494, 391, 617, + 473, 633, 662, 663, 279, 428, 647, 551, 655, 680, + 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, + 518, 311, 209, 388, 668, 232, 503, 390, 253, 241, + 619, 644, 315, 267, 305, 480, 675, 221, 546, 630, + 250, 507, 0, 0, 683, 258, 529, 642, 631, 223, + 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, + 0, 0, 274, 437, 621, 622, 272, 684, 237, 654, + 228, 1335, 653, 430, 616, 627, 414, 402, 227, 625, + 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, + 323, 325, 425, 424, 426, 215, 640, 658, 0, 216, + 0, 524, 643, 685, 475, 220, 244, 245, 248, 1353, + 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, + 465, 474, 1449, 610, 634, 648, 660, 666, 667, 669, + 670, 671, 672, 673, 676, 674, 429, 329, 520, 352, + 392, 1438, 1486, 447, 496, 251, 638, 521, 240, 604, + 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, + 207, 1347, 1352, 1345, 0, 270, 271, 1419, 605, 1348, + 1346, 1408, 1409, 1349, 1477, 1478, 1479, 1463, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 700, 701, 702, 703, 681, 537, 543, 538, + 539, 540, 541, 542, 0, 544, 1442, 1341, 0, 1350, + 1351, 419, 1451, 623, 624, 704, 403, 510, 635, 354, + 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, + 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, + 608, 330, 224, 225, 226, 553, 554, 555, 556, 651, + 652, 656, 213, 486, 487, 488, 489, 308, 646, 326, + 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, + 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, + 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, + 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, + 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, + 560, 568, 1412, 204, 229, 387, 1482, 478, 304, 682, + 650, 508, 645, 214, 231, 1344, 278, 1357, 1366, 0, + 1373, 1381, 1382, 1396, 1399, 1400, 1401, 1402, 1420, 1421, + 1423, 1432, 1434, 1437, 1439, 1446, 1464, 1485, 206, 208, + 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, + 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, + 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, + 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, + 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, + 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, + 620, 637, 657, 664, 504, 404, 452, 476, 611, 1429, + 1390, 317, 318, 467, 468, 332, 333, 678, 679, 316, + 632, 665, 629, 677, 659, 461, 397, 1411, 1417, 400, + 297, 322, 339, 1426, 649, 527, 236, 490, 306, 265, + 1445, 1447, 219, 257, 239, 275, 290, 293, 343, 411, + 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, + 549, 550, 552, 415, 282, 456, 1407, 1436, 395, 606, + 607, 335, 416, 0, 0, 0, 0, 0, 0, 1471, + 1450, 557, 0, 1391, 1474, 1356, 1377, 1484, 1380, 1383, + 1428, 1331, 1406, 438, 1374, 1360, 1326, 1368, 1327, 1358, + 1393, 286, 1355, 1452, 1410, 1473, 385, 283, 1333, 1324, + 212, 530, 1361, 453, 1379, 211, 1431, 511, 268, 396, + 393, 615, 298, 289, 285, 264, 336, 405, 450, 547, + 444, 1480, 389, 1416, 0, 522, 422, 0, 0, 0, + 1457, 1456, 1384, 1395, 1462, 1404, 1443, 1389, 1430, 1343, + 1415, 1475, 1375, 1425, 1476, 342, 262, 344, 210, 435, + 523, 302, 0, 0, 0, 0, 0, 536, 991, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, + 0, 256, 0, 0, 0, 370, 379, 378, 358, 359, + 361, 363, 369, 376, 382, 355, 364, 1371, 1422, 641, + 1469, 1372, 1424, 281, 340, 288, 280, 612, 1481, 1461, + 1330, 1403, 1468, 1398, 628, 0, 0, 238, 1472, 1397, + 0, 1427, 0, 1487, 1325, 1418, 0, 1328, 1332, 1483, + 1466, 1364, 1365, 291, 0, 0, 0, 0, 0, 0, + 0, 1394, 1405, 1440, 1444, 1387, 0, 0, 0, 0, + 0, 0, 2486, 0, 1362, 0, 1414, 0, 0, 0, + 1337, 1329, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1392, 0, 0, 0, 0, 1342, + 0, 1363, 1441, 0, 1323, 313, 1334, 423, 273, 0, + 477, 1354, 319, 334, 1340, 1369, 1470, 1458, 1459, 1460, + 1339, 1448, 1465, 1388, 661, 1467, 1386, 1385, 1435, 1338, + 1455, 1378, 384, 1336, 349, 205, 233, 0, 1376, 434, + 485, 497, 1454, 1453, 1359, 1370, 269, 1367, 495, 448, + 636, 243, 300, 482, 455, 493, 463, 303, 1413, 1433, + 494, 391, 617, 473, 633, 662, 663, 279, 428, 647, + 551, 655, 680, 234, 276, 442, 535, 639, 519, 417, + 613, 614, 348, 518, 311, 209, 388, 668, 232, 503, + 390, 253, 241, 619, 644, 315, 267, 305, 480, 675, + 221, 546, 630, 250, 507, 0, 0, 683, 258, 529, + 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, + 481, 284, 309, 0, 0, 274, 437, 621, 622, 272, + 684, 237, 654, 228, 1335, 653, 430, 616, 627, 414, + 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, + 470, 394, 471, 323, 325, 425, 424, 426, 215, 640, + 658, 0, 216, 0, 524, 643, 685, 475, 220, 244, + 245, 248, 1353, 295, 299, 307, 310, 320, 321, 331, + 386, 441, 469, 465, 474, 1449, 610, 634, 648, 660, + 666, 667, 669, 670, 671, 672, 673, 676, 674, 429, + 329, 520, 352, 392, 1438, 1486, 447, 496, 251, 638, + 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, + 609, 246, 266, 207, 1347, 1352, 1345, 0, 270, 271, + 1419, 605, 1348, 1346, 1408, 1409, 1349, 1477, 1478, 1479, + 1463, 686, 687, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 681, + 537, 543, 538, 539, 540, 541, 542, 0, 544, 1442, + 1341, 0, 1350, 1351, 419, 1451, 623, 624, 704, 403, + 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, + 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, + 218, 410, 420, 608, 330, 224, 225, 226, 553, 554, + 555, 556, 651, 652, 656, 213, 486, 487, 488, 489, + 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, + 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, + 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, + 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, + 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, + 595, 579, 567, 560, 568, 1412, 204, 229, 387, 1482, + 478, 304, 682, 650, 508, 645, 214, 231, 1344, 278, + 1357, 1366, 0, 1373, 1381, 1382, 1396, 1399, 1400, 1401, + 1402, 1420, 1421, 1423, 1432, 1434, 1437, 1439, 1446, 1464, + 1485, 206, 208, 217, 230, 242, 247, 254, 277, 292, + 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, + 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, + 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, + 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, + 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, + 534, 545, 618, 620, 637, 657, 664, 504, 404, 452, + 476, 611, 1429, 1390, 317, 318, 467, 468, 332, 333, + 678, 679, 316, 632, 665, 629, 677, 659, 461, 397, + 1411, 1417, 400, 297, 322, 339, 1426, 649, 527, 236, + 490, 306, 265, 1445, 1447, 219, 257, 239, 275, 290, + 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, + 252, 509, 548, 549, 550, 552, 415, 282, 456, 1407, + 1436, 395, 606, 607, 335, 416, 0, 0, 0, 0, + 0, 0, 1471, 1450, 557, 0, 1391, 1474, 1356, 1377, + 1484, 1380, 1383, 1428, 1331, 1406, 438, 1374, 1360, 1326, + 1368, 1327, 1358, 1393, 286, 1355, 1452, 1410, 1473, 385, + 283, 1333, 1324, 212, 530, 1361, 453, 1379, 211, 1431, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 1480, 389, 1416, 0, 522, 422, + 0, 0, 0, 1457, 1456, 1384, 1395, 1462, 1404, 1443, + 1389, 1430, 1343, 1415, 1475, 1375, 1425, 1476, 342, 262, + 344, 210, 435, 523, 302, 0, 101, 0, 0, 0, + 536, 756, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 1371, 1422, 641, 1469, 1372, 1424, 281, 340, 288, 280, + 612, 1481, 1461, 1330, 1403, 1468, 1398, 628, 0, 0, + 238, 1472, 1397, 0, 1427, 0, 1487, 1325, 1418, 0, + 1328, 1332, 1483, 1466, 1364, 1365, 291, 0, 0, 0, + 0, 0, 0, 0, 1394, 1405, 1440, 1444, 1387, 0, + 0, 0, 0, 0, 0, 0, 0, 1362, 0, 1414, + 0, 0, 0, 1337, 1329, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1392, 0, 0, + 0, 0, 1342, 0, 1363, 1441, 0, 1323, 313, 1334, + 423, 273, 0, 477, 1354, 319, 334, 1340, 1369, 1470, + 1458, 1459, 1460, 1339, 1448, 1465, 1388, 661, 1467, 1386, + 1385, 1435, 1338, 1455, 1378, 384, 1336, 349, 205, 233, + 0, 1376, 434, 485, 497, 1454, 1453, 1359, 1370, 269, + 1367, 495, 448, 636, 243, 300, 482, 455, 493, 463, + 303, 1413, 1433, 494, 391, 617, 473, 633, 662, 663, + 279, 428, 647, 551, 655, 680, 234, 276, 442, 535, + 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, + 668, 232, 503, 390, 253, 241, 619, 644, 315, 267, + 305, 480, 675, 221, 546, 630, 250, 507, 0, 0, + 683, 258, 529, 642, 631, 223, 626, 528, 413, 345, + 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, + 621, 622, 272, 684, 237, 654, 228, 1335, 653, 430, + 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, + 375, 296, 324, 470, 394, 471, 323, 325, 425, 424, + 426, 215, 640, 658, 0, 216, 0, 524, 643, 685, + 475, 220, 244, 245, 248, 1353, 295, 299, 307, 310, + 320, 321, 331, 386, 441, 469, 465, 474, 1449, 610, + 634, 648, 660, 666, 667, 669, 670, 671, 672, 673, + 676, 674, 429, 329, 520, 352, 392, 1438, 1486, 447, + 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, + 260, 235, 512, 609, 246, 266, 207, 1347, 1352, 1345, + 0, 270, 271, 1419, 605, 1348, 1346, 1408, 1409, 1349, + 1477, 1478, 1479, 1463, 686, 687, 688, 689, 690, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 681, 537, 543, 538, 539, 540, 541, 542, + 0, 544, 1442, 1341, 0, 1350, 1351, 419, 1451, 623, + 624, 704, 403, 510, 635, 354, 368, 371, 360, 380, + 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, + 377, 383, 263, 218, 410, 420, 608, 330, 224, 225, + 226, 553, 554, 555, 556, 651, 652, 656, 213, 486, + 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, + 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, + 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, + 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, + 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, + 592, 573, 584, 595, 579, 567, 560, 568, 1412, 204, + 229, 387, 1482, 478, 304, 682, 650, 508, 645, 214, + 231, 1344, 278, 1357, 1366, 0, 1373, 1381, 1382, 1396, + 1399, 1400, 1401, 1402, 1420, 1421, 1423, 1432, 1434, 1437, + 1439, 1446, 1464, 1485, 206, 208, 217, 230, 242, 247, + 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, + 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, + 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, + 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, + 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, + 531, 532, 533, 534, 545, 618, 620, 637, 657, 664, + 504, 404, 452, 476, 611, 1429, 1390, 317, 318, 467, + 468, 332, 333, 678, 679, 316, 632, 665, 629, 677, + 659, 461, 397, 1411, 1417, 400, 297, 322, 339, 1426, + 649, 527, 236, 490, 306, 265, 1445, 1447, 219, 257, + 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, + 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, + 282, 456, 1407, 1436, 395, 606, 607, 335, 416, 0, + 0, 0, 0, 0, 0, 1471, 1450, 557, 0, 1391, + 1474, 1356, 1377, 1484, 1380, 1383, 1428, 1331, 1406, 438, + 1374, 1360, 1326, 1368, 1327, 1358, 1393, 286, 1355, 1452, + 1410, 1473, 385, 283, 1333, 1324, 212, 530, 1361, 453, + 1379, 211, 1431, 511, 268, 396, 393, 615, 298, 289, + 285, 264, 336, 405, 450, 547, 444, 1480, 389, 1416, + 0, 522, 422, 0, 0, 0, 1457, 1456, 1384, 1395, + 1462, 1404, 1443, 1389, 1430, 1343, 1415, 1475, 1375, 1425, + 1476, 342, 262, 344, 210, 435, 523, 302, 0, 0, + 0, 0, 0, 536, 202, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, + 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, + 382, 355, 364, 1371, 1422, 641, 1469, 1372, 1424, 281, + 340, 288, 280, 612, 1481, 1461, 1330, 1403, 1468, 1398, + 628, 0, 0, 238, 1472, 1397, 0, 1427, 0, 1487, + 1325, 1418, 0, 1328, 1332, 1483, 1466, 1364, 1365, 291, + 0, 0, 0, 0, 0, 0, 0, 1394, 1405, 1440, + 1444, 1387, 0, 0, 0, 0, 0, 0, 0, 0, + 1362, 0, 1414, 0, 0, 0, 1337, 1329, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1392, 0, 0, 0, 0, 1342, 0, 1363, 1441, 0, + 1323, 313, 1334, 423, 273, 0, 477, 1354, 319, 334, + 1340, 1369, 1470, 1458, 1459, 1460, 1339, 1448, 1465, 1388, + 661, 1467, 1386, 1385, 1435, 1338, 1455, 1378, 384, 1336, + 349, 205, 233, 0, 1376, 434, 485, 497, 1454, 1453, + 1359, 1370, 269, 1367, 495, 448, 636, 243, 300, 482, + 455, 493, 463, 303, 1413, 1433, 494, 391, 617, 473, + 633, 662, 663, 279, 428, 647, 551, 655, 680, 234, + 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, + 311, 209, 388, 668, 232, 503, 390, 253, 241, 619, + 644, 315, 267, 305, 480, 675, 221, 546, 630, 250, + 507, 0, 0, 683, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 684, 237, 654, 228, + 1335, 653, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 658, 0, 216, 0, + 524, 643, 685, 475, 220, 244, 245, 248, 1353, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 1449, 610, 634, 648, 660, 666, 667, 669, 670, + 671, 672, 673, 676, 674, 429, 329, 520, 352, 392, + 1438, 1486, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 1347, 1352, 1345, 0, 270, 271, 1419, 605, 1348, 1346, + 1408, 1409, 1349, 1477, 1478, 1479, 1463, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, + 699, 700, 701, 702, 703, 681, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 1442, 1341, 0, 1350, 1351, + 419, 1451, 623, 624, 704, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 651, 652, + 656, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 1412, 204, 229, 387, 1482, 478, 304, 682, 650, + 508, 645, 214, 231, 1344, 278, 1357, 1366, 0, 1373, + 1381, 1382, 1396, 1399, 1400, 1401, 1402, 1420, 1421, 1423, + 1432, 1434, 1437, 1439, 1446, 1464, 1485, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 657, 664, 504, 404, 452, 476, 611, 1429, 1390, + 317, 318, 467, 468, 332, 333, 678, 679, 316, 632, + 665, 629, 677, 659, 461, 397, 1411, 1417, 400, 297, + 322, 339, 1426, 649, 527, 236, 490, 306, 265, 1445, + 1447, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 1407, 1436, 395, 606, 607, + 335, 416, 0, 0, 0, 0, 0, 0, 1471, 1450, + 557, 0, 1391, 1474, 1356, 1377, 1484, 1380, 1383, 1428, + 1331, 1406, 438, 1374, 1360, 1326, 1368, 1327, 1358, 1393, + 286, 1355, 1452, 1410, 1473, 385, 283, 1333, 1324, 212, + 530, 1361, 453, 1379, 211, 1431, 511, 268, 396, 393, + 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, + 1480, 389, 1416, 0, 522, 422, 0, 0, 0, 1457, + 1456, 1384, 1395, 1462, 1404, 1443, 1389, 1430, 1343, 1415, + 1475, 1375, 1425, 1476, 342, 262, 344, 210, 435, 523, + 302, 0, 0, 0, 0, 0, 536, 756, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, + 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, + 363, 369, 376, 382, 355, 364, 1371, 1422, 641, 1469, + 1372, 1424, 281, 340, 288, 280, 612, 1481, 1461, 1330, + 1403, 1468, 1398, 628, 0, 0, 238, 1472, 1397, 0, + 1427, 0, 1487, 1325, 1418, 0, 1328, 1332, 1483, 1466, + 1364, 1365, 291, 0, 0, 0, 0, 0, 0, 0, + 1394, 1405, 1440, 1444, 1387, 0, 0, 0, 0, 0, + 0, 0, 0, 1362, 0, 1414, 0, 0, 0, 1337, + 1329, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1392, 0, 0, 0, 0, 1342, 0, + 1363, 1441, 0, 1323, 313, 1334, 423, 273, 0, 477, + 1354, 319, 334, 1340, 1369, 1470, 1458, 1459, 1460, 1339, + 1448, 1465, 1388, 661, 1467, 1386, 1385, 1435, 1338, 1455, + 1378, 384, 1336, 349, 205, 233, 0, 1376, 434, 485, + 497, 1454, 1453, 1359, 1370, 269, 1367, 495, 448, 636, + 243, 300, 482, 455, 493, 463, 303, 1413, 1433, 494, + 391, 617, 473, 633, 662, 663, 279, 428, 647, 551, + 655, 680, 234, 276, 442, 535, 639, 519, 417, 613, + 614, 348, 518, 311, 209, 388, 668, 232, 503, 390, + 253, 241, 619, 644, 315, 267, 305, 480, 675, 221, + 546, 630, 250, 507, 0, 0, 683, 258, 529, 642, + 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, + 284, 309, 0, 0, 274, 437, 621, 622, 272, 684, + 237, 654, 228, 1335, 653, 430, 616, 627, 414, 402, + 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, + 394, 471, 323, 325, 425, 424, 426, 215, 640, 658, + 0, 216, 0, 524, 643, 685, 475, 220, 244, 245, + 248, 1353, 295, 299, 307, 310, 320, 321, 331, 386, + 441, 469, 465, 474, 1449, 610, 634, 648, 660, 666, + 667, 669, 670, 671, 672, 673, 676, 674, 429, 329, + 520, 352, 392, 1438, 1486, 447, 496, 251, 638, 521, + 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, + 246, 266, 207, 1347, 1352, 1345, 0, 270, 271, 1419, + 605, 1348, 1346, 1408, 1409, 1349, 1477, 1478, 1479, 1463, + 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, + 696, 697, 698, 699, 700, 701, 702, 703, 681, 537, + 543, 538, 539, 540, 541, 542, 0, 544, 1442, 1341, + 0, 1350, 1351, 419, 1451, 623, 624, 704, 403, 510, + 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, + 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, + 410, 420, 608, 330, 224, 225, 226, 553, 554, 555, + 556, 651, 652, 656, 213, 486, 487, 488, 489, 308, + 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, + 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, + 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, + 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, + 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, + 579, 567, 560, 568, 1412, 204, 229, 387, 1482, 478, + 304, 682, 650, 508, 645, 214, 231, 1344, 278, 1357, + 1366, 0, 1373, 1381, 1382, 1396, 1399, 1400, 1401, 1402, + 1420, 1421, 1423, 1432, 1434, 1437, 1439, 1446, 1464, 1485, + 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, + 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, + 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, + 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, + 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, + 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, + 545, 618, 620, 637, 657, 664, 504, 404, 452, 476, + 611, 1429, 1390, 317, 318, 467, 468, 332, 333, 678, + 679, 316, 632, 665, 629, 677, 659, 461, 397, 1411, + 1417, 400, 297, 322, 339, 1426, 649, 527, 236, 490, + 306, 265, 1445, 1447, 219, 257, 239, 275, 290, 293, + 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, + 509, 548, 549, 550, 552, 415, 282, 456, 1407, 1436, + 395, 606, 607, 335, 416, 0, 0, 0, 0, 0, + 0, 1471, 1450, 557, 0, 1391, 1474, 1356, 1377, 1484, + 1380, 1383, 1428, 1331, 1406, 438, 1374, 1360, 1326, 1368, + 1327, 1358, 1393, 286, 1355, 1452, 1410, 1473, 385, 283, + 1333, 1324, 212, 530, 1361, 453, 1379, 211, 1431, 511, + 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, + 450, 547, 444, 1480, 389, 1416, 0, 522, 422, 0, + 0, 0, 1457, 1456, 1384, 1395, 1462, 1404, 1443, 1389, + 1430, 1343, 1415, 1475, 1375, 1425, 1476, 342, 262, 344, + 210, 435, 523, 302, 0, 0, 0, 0, 0, 536, + 991, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, + 358, 359, 361, 363, 369, 376, 382, 355, 364, 1371, + 1422, 641, 1469, 1372, 1424, 281, 340, 288, 280, 612, + 1481, 1461, 1330, 1403, 1468, 1398, 628, 0, 0, 238, + 1472, 1397, 0, 1427, 0, 1487, 1325, 1418, 0, 1328, + 1332, 1483, 1466, 1364, 1365, 291, 0, 0, 0, 0, + 0, 0, 0, 1394, 1405, 1440, 1444, 1387, 0, 0, + 0, 0, 0, 0, 0, 0, 1362, 0, 1414, 0, + 0, 0, 1337, 1329, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1392, 0, 0, 0, + 0, 1342, 0, 1363, 1441, 0, 1323, 313, 1334, 423, + 273, 0, 477, 1354, 319, 334, 1340, 1369, 1470, 1458, + 1459, 1460, 1339, 1448, 1465, 1388, 661, 1467, 1386, 1385, + 1435, 1338, 1455, 1378, 384, 1336, 349, 205, 233, 0, + 1376, 434, 485, 497, 1454, 1453, 1359, 1370, 269, 1367, + 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, + 1413, 1433, 494, 391, 617, 473, 633, 662, 663, 279, + 428, 647, 551, 655, 680, 234, 276, 442, 535, 639, + 519, 417, 613, 614, 348, 518, 311, 209, 388, 668, + 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, + 480, 675, 221, 546, 630, 250, 507, 0, 0, 683, + 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, + 222, 0, 481, 284, 309, 0, 0, 274, 437, 621, + 622, 272, 684, 237, 654, 228, 1335, 653, 430, 616, + 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, + 296, 324, 470, 394, 471, 323, 325, 425, 424, 426, + 215, 640, 658, 0, 216, 0, 524, 643, 685, 475, + 220, 244, 245, 248, 1353, 295, 299, 307, 310, 320, + 321, 331, 386, 441, 469, 465, 474, 1449, 610, 634, + 648, 660, 666, 667, 669, 670, 671, 672, 673, 676, + 674, 429, 329, 520, 352, 392, 1438, 1486, 447, 496, + 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, + 235, 512, 609, 246, 266, 207, 1347, 1352, 1345, 0, + 270, 271, 1419, 605, 1348, 1346, 1408, 1409, 1349, 1477, + 1478, 1479, 1463, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 681, 537, 543, 538, 539, 540, 541, 542, 0, + 544, 1442, 1341, 0, 1350, 1351, 419, 1451, 623, 624, + 704, 403, 510, 635, 354, 368, 371, 360, 380, 0, + 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, + 383, 263, 218, 410, 420, 608, 330, 224, 225, 226, + 553, 554, 555, 556, 651, 652, 656, 213, 486, 487, + 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, + 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, + 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, + 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, + 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, + 573, 584, 595, 579, 567, 560, 568, 1412, 204, 229, + 387, 1482, 478, 304, 682, 650, 508, 645, 214, 231, + 1344, 278, 1357, 1366, 0, 1373, 1381, 1382, 1396, 1399, + 1400, 1401, 1402, 1420, 1421, 1423, 1432, 1434, 1437, 1439, + 1446, 1464, 1485, 206, 208, 217, 230, 242, 247, 254, + 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, + 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, + 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, + 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, + 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, + 532, 533, 534, 545, 618, 620, 637, 657, 664, 504, + 404, 452, 476, 611, 1429, 1390, 317, 318, 467, 468, + 332, 333, 678, 679, 316, 632, 665, 629, 677, 659, + 461, 397, 1411, 1417, 400, 297, 322, 339, 1426, 649, + 527, 236, 490, 306, 265, 1445, 1447, 219, 257, 239, + 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, + 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, + 456, 1407, 1436, 395, 606, 607, 335, 416, 0, 0, + 0, 0, 0, 0, 0, 0, 557, 0, 809, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, + 0, 0, 796, 0, 0, 0, 286, 801, 0, 0, + 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, + 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, + 264, 336, 405, 450, 547, 444, 808, 389, 0, 0, + 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, + 803, 804, 0, 0, 0, 0, 0, 0, 0, 0, + 342, 262, 344, 210, 435, 523, 302, 0, 101, 0, + 0, 1057, 536, 991, 780, 957, 995, 1058, 1009, 1010, + 1011, 996, 0, 249, 997, 998, 256, 999, 0, 956, + 839, 841, 840, 906, 907, 908, 909, 910, 911, 912, + 842, 843, 837, 1004, 641, 1012, 1013, 0, 281, 340, + 288, 280, 612, 0, 0, 2294, 2295, 2296, 0, 628, + 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, + 776, 793, 0, 807, 0, 0, 0, 0, 291, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 790, 791, 0, 0, 0, + 0, 951, 0, 792, 0, 0, 800, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, - 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 3196, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 300, 0, 407, 260, 0, 460, 930, 0, 0, 641, - 0, 0, 928, 0, 0, 0, 0, 369, 0, 334, - 199, 227, 0, 0, 417, 468, 480, 0, 0, 0, - 981, 0, 478, 431, 616, 235, 287, 465, 438, 476, - 446, 290, 0, 0, 477, 376, 597, 456, 613, 642, - 643, 266, 411, 627, 533, 635, 660, 228, 263, 425, - 517, 619, 501, 402, 593, 594, 333, 500, 298, 203, - 373, 648, 226, 486, 375, 244, 233, 599, 624, 302, - 254, 292, 463, 655, 215, 528, 610, 241, 490, 0, - 0, 663, 249, 511, 622, 611, 217, 606, 510, 398, - 330, 331, 216, 0, 464, 271, 296, 0, 0, 261, - 420, 982, 983, 259, 664, 827, 634, 222, 0, 633, - 413, 596, 607, 399, 387, 221, 605, 397, 386, 338, - 835, 836, 283, 310, 912, 911, 910, 309, 311, 908, - 909, 907, 209, 620, 638, 0, 210, 0, 506, 623, - 665, 458, 214, 236, 237, 239, 0, 282, 286, 294, - 297, 306, 307, 317, 371, 424, 452, 448, 457, 0, - 590, 614, 628, 640, 646, 647, 649, 650, 651, 652, - 653, 656, 654, 412, 315, 502, 337, 377, 0, 0, - 430, 479, 242, 618, 503, 918, 940, 929, 793, 794, - 919, 920, 944, 921, 796, 797, 941, 942, 790, 791, - 795, 943, 945, 666, 667, 668, 669, 670, 671, 672, - 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, - 683, 661, 519, 525, 520, 521, 522, 523, 524, 0, - 526, 932, 779, 778, 0, 785, 786, 0, 815, 816, - 818, 824, 825, 826, 837, 884, 885, 893, 895, 896, - 894, 897, 898, 899, 902, 903, 904, 905, 900, 901, - 906, 798, 802, 799, 800, 801, 813, 803, 804, 805, - 806, 807, 808, 809, 810, 811, 812, 814, 955, 956, - 957, 958, 959, 960, 830, 834, 833, 831, 832, 828, - 829, 856, 855, 857, 858, 859, 860, 861, 862, 864, - 863, 865, 866, 867, 868, 869, 870, 838, 839, 842, - 843, 841, 840, 844, 853, 854, 845, 846, 847, 848, - 849, 850, 852, 851, 871, 872, 873, 874, 875, 877, - 876, 880, 881, 879, 878, 883, 882, 777, 198, 223, - 372, 0, 461, 291, 662, 630, 491, 625, 208, 225, - 946, 265, 947, 0, 0, 951, 0, 0, 0, 953, - 952, 0, 954, 916, 915, 0, 0, 948, 949, 0, - 950, 0, 0, 200, 202, 211, 224, 234, 238, 245, - 264, 279, 281, 288, 301, 313, 314, 322, 323, 326, - 332, 384, 391, 392, 393, 394, 414, 415, 416, 419, - 422, 423, 426, 428, 429, 432, 437, 441, 442, 443, - 445, 447, 449, 462, 467, 481, 482, 483, 484, 485, - 488, 489, 495, 496, 497, 498, 499, 507, 508, 513, - 514, 515, 516, 527, 598, 600, 617, 637, 644, 487, - 389, 435, 459, 591, 961, 962, 963, 964, 965, 966, - 967, 968, 303, 612, 645, 609, 657, 639, 444, 382, - 0, 0, 385, 284, 308, 324, 0, 629, 509, 229, - 473, 293, 253, 1036, 0, 213, 248, 232, 262, 277, - 280, 328, 396, 405, 434, 440, 299, 274, 246, 466, - 243, 492, 530, 531, 532, 534, 400, 269, 439, 401, - 0, 380, 587, 588, 320, 0, 0, 0, 539, 0, - 789, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 421, 0, 0, 0, 776, 0, 0, 0, 273, 781, - 0, 0, 0, 370, 270, 0, 0, 206, 512, 0, - 436, 0, 205, 0, 494, 255, 381, 378, 595, 285, - 276, 272, 252, 321, 390, 433, 529, 427, 788, 374, - 0, 0, 504, 406, 0, 0, 0, 0, 0, 0, - 0, 0, 783, 784, 0, 0, 0, 0, 0, 0, - 0, 0, 327, 250, 329, 204, 418, 505, 289, 0, - 95, 0, 0, 1037, 518, 971, 1105, 937, 975, 1038, - 989, 990, 991, 976, 0, 240, 977, 978, 247, 979, - 0, 936, 819, 821, 820, 886, 887, 888, 889, 890, - 891, 892, 822, 823, 817, 984, 621, 992, 993, 0, - 268, 325, 275, 267, 592, 0, 0, 0, 0, 0, - 0, 608, 0, 0, 231, 0, 0, 0, 0, 0, - 0, 0, 0, 773, 0, 787, 0, 0, 0, 278, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 770, 771, 0, 0, - 0, 0, 931, 0, 772, 0, 0, 780, 994, 995, - 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, - 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, + 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, + 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, + 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 802, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 950, 0, 0, 661, + 0, 0, 948, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 1001, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 662, 663, 279, 428, 647, 551, 655, 680, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 668, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 675, 221, 546, 630, 250, 507, + 0, 0, 683, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 1002, 1003, 272, 684, 847, 654, 228, 0, + 653, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 855, 856, 296, 324, 932, 931, 930, 323, 325, + 928, 929, 927, 215, 640, 658, 0, 216, 0, 524, + 643, 685, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 660, 666, 667, 669, 670, 671, + 672, 673, 676, 674, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 938, 960, + 949, 813, 814, 939, 940, 964, 941, 816, 817, 961, + 962, 810, 811, 815, 963, 965, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 681, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 952, 799, 798, 0, 805, 806, + 0, 835, 836, 838, 844, 845, 846, 857, 904, 905, + 913, 915, 916, 914, 917, 918, 919, 922, 923, 924, + 925, 920, 921, 926, 818, 822, 819, 820, 821, 833, + 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 834, 975, 976, 977, 978, 979, 980, 850, 854, 853, + 851, 852, 848, 849, 876, 875, 877, 878, 879, 880, + 881, 882, 884, 883, 885, 886, 887, 888, 889, 890, + 858, 859, 862, 863, 861, 860, 864, 873, 874, 865, + 866, 867, 868, 869, 870, 872, 871, 891, 892, 893, + 894, 895, 897, 896, 900, 901, 899, 898, 903, 902, + 797, 204, 229, 387, 0, 478, 304, 682, 650, 508, + 645, 214, 231, 966, 278, 967, 0, 0, 971, 0, + 0, 0, 973, 972, 0, 974, 936, 935, 0, 0, + 968, 969, 0, 970, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 657, 664, 504, 404, 452, 476, 611, 0, 0, 981, + 982, 983, 984, 985, 986, 987, 988, 316, 632, 665, + 629, 677, 659, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 1056, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 416, 0, 395, 606, 607, 335, + 0, 0, 0, 557, 0, 809, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 438, 0, 0, 0, 796, + 0, 0, 0, 286, 801, 0, 0, 0, 385, 283, + 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, + 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, + 450, 547, 444, 808, 389, 0, 0, 522, 422, 0, + 0, 0, 0, 0, 0, 0, 0, 803, 804, 0, + 0, 0, 0, 0, 0, 2515, 0, 342, 262, 344, + 210, 435, 523, 302, 0, 101, 0, 0, 1057, 536, + 991, 780, 957, 995, 1058, 1009, 1010, 1011, 996, 0, + 249, 997, 998, 256, 999, 0, 956, 839, 841, 840, + 906, 907, 908, 909, 910, 911, 912, 842, 843, 837, + 1004, 641, 1012, 1013, 2516, 281, 340, 288, 280, 612, + 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, + 0, 0, 0, 0, 0, 0, 0, 776, 793, 0, + 807, 0, 0, 0, 0, 291, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 790, 791, 0, 0, 0, 0, 951, 0, + 792, 0, 0, 800, 1014, 1015, 1016, 1017, 1018, 1019, + 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, + 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, + 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, + 1050, 1051, 1052, 1053, 1054, 1055, 802, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, + 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, + 0, 0, 0, 950, 0, 0, 661, 0, 0, 948, + 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, + 0, 434, 485, 497, 0, 0, 0, 0, 1001, 0, + 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, + 0, 0, 494, 391, 617, 473, 633, 662, 663, 279, + 428, 647, 551, 655, 680, 234, 276, 442, 535, 639, + 519, 417, 613, 614, 348, 518, 311, 209, 388, 668, + 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, + 480, 675, 221, 546, 630, 250, 507, 0, 0, 683, + 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, + 222, 0, 481, 284, 309, 0, 0, 274, 437, 1002, + 1003, 272, 684, 847, 654, 228, 0, 653, 430, 616, + 627, 414, 402, 227, 625, 412, 401, 353, 855, 856, + 296, 324, 932, 931, 930, 323, 325, 928, 929, 927, + 215, 640, 658, 0, 216, 0, 524, 643, 685, 475, + 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, + 321, 331, 386, 441, 469, 465, 474, 0, 610, 634, + 648, 660, 666, 667, 669, 670, 671, 672, 673, 676, + 674, 429, 329, 520, 352, 392, 0, 0, 447, 496, + 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, + 235, 512, 609, 246, 266, 938, 960, 949, 813, 814, + 939, 940, 964, 941, 816, 817, 961, 962, 810, 811, + 815, 963, 965, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 681, 537, 543, 538, 539, 540, 541, 542, 0, + 544, 952, 799, 798, 0, 805, 806, 0, 835, 836, + 838, 844, 845, 846, 857, 904, 905, 913, 915, 916, + 914, 917, 918, 919, 922, 923, 924, 925, 920, 921, + 926, 818, 822, 819, 820, 821, 833, 823, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 834, 975, 976, + 977, 978, 979, 980, 850, 854, 853, 851, 852, 848, + 849, 876, 875, 877, 878, 879, 880, 881, 882, 884, + 883, 885, 886, 887, 888, 889, 890, 858, 859, 862, + 863, 861, 860, 864, 873, 874, 865, 866, 867, 868, + 869, 870, 872, 871, 891, 892, 893, 894, 895, 897, + 896, 900, 901, 899, 898, 903, 902, 797, 204, 229, + 387, 0, 478, 304, 682, 650, 508, 645, 214, 231, + 966, 278, 967, 0, 0, 971, 0, 0, 0, 973, + 972, 0, 974, 936, 935, 0, 0, 968, 969, 0, + 970, 0, 0, 206, 208, 217, 230, 242, 247, 254, + 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, + 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, + 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, + 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, + 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, + 532, 533, 534, 545, 618, 620, 637, 657, 664, 504, + 404, 452, 476, 611, 0, 0, 981, 982, 983, 984, + 985, 986, 987, 988, 316, 632, 665, 629, 677, 659, + 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, + 527, 236, 490, 306, 265, 1056, 0, 219, 257, 239, + 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, + 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, + 456, 416, 0, 395, 606, 607, 335, 0, 0, 91, + 557, 0, 809, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 438, 0, 0, 0, 796, 0, 0, 0, + 286, 801, 0, 0, 0, 385, 283, 0, 0, 212, + 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, + 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, + 1767, 389, 0, 0, 522, 422, 0, 0, 0, 0, + 0, 0, 0, 0, 803, 804, 0, 0, 0, 0, + 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, + 302, 0, 101, 0, 0, 1057, 536, 991, 780, 957, + 995, 1058, 1009, 1010, 1011, 996, 0, 249, 997, 998, + 256, 999, 0, 956, 839, 841, 840, 906, 907, 908, + 909, 910, 911, 912, 842, 843, 837, 1004, 641, 1012, + 1013, 0, 281, 340, 288, 280, 612, 0, 0, 0, + 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, + 0, 0, 0, 0, 776, 793, 0, 807, 0, 0, + 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, + 791, 0, 0, 0, 0, 951, 0, 792, 0, 0, + 800, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, + 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, + 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, + 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, + 1053, 1054, 1055, 802, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, + 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, + 950, 0, 0, 661, 0, 0, 948, 0, 0, 0, + 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, + 497, 0, 0, 0, 0, 1001, 0, 495, 448, 636, + 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, + 391, 617, 473, 633, 662, 663, 279, 428, 647, 551, + 655, 680, 234, 276, 442, 535, 639, 519, 417, 613, + 614, 348, 518, 311, 209, 388, 668, 232, 503, 390, + 253, 241, 619, 644, 315, 267, 305, 480, 675, 221, + 546, 630, 250, 507, 0, 0, 683, 258, 529, 642, + 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, + 284, 309, 0, 0, 274, 437, 1002, 1003, 272, 684, + 847, 654, 228, 0, 653, 430, 616, 627, 414, 402, + 227, 625, 412, 401, 353, 855, 856, 296, 324, 932, + 931, 930, 323, 325, 928, 929, 927, 215, 640, 658, + 0, 216, 0, 524, 643, 685, 475, 220, 244, 245, + 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, + 441, 469, 465, 474, 0, 610, 634, 648, 660, 666, + 667, 669, 670, 671, 672, 673, 676, 674, 429, 329, + 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, + 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, + 246, 266, 938, 960, 949, 813, 814, 939, 940, 964, + 941, 816, 817, 961, 962, 810, 811, 815, 963, 965, + 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, + 696, 697, 698, 699, 700, 701, 702, 703, 681, 537, + 543, 538, 539, 540, 541, 542, 0, 544, 952, 799, + 798, 0, 805, 806, 0, 835, 836, 838, 844, 845, + 846, 857, 904, 905, 913, 915, 916, 914, 917, 918, + 919, 922, 923, 924, 925, 920, 921, 926, 818, 822, + 819, 820, 821, 833, 823, 824, 825, 826, 827, 828, + 829, 830, 831, 832, 834, 975, 976, 977, 978, 979, + 980, 850, 854, 853, 851, 852, 848, 849, 876, 875, + 877, 878, 879, 880, 881, 882, 884, 883, 885, 886, + 887, 888, 889, 890, 858, 859, 862, 863, 861, 860, + 864, 873, 874, 865, 866, 867, 868, 869, 870, 872, + 871, 891, 892, 893, 894, 895, 897, 896, 900, 901, + 899, 898, 903, 902, 797, 204, 229, 387, 100, 478, + 304, 682, 650, 508, 645, 214, 231, 966, 278, 967, + 0, 0, 971, 0, 0, 0, 973, 972, 0, 974, + 936, 935, 0, 0, 968, 969, 0, 970, 0, 0, + 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, + 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, + 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, + 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, + 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, + 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, + 545, 618, 620, 637, 657, 664, 504, 404, 452, 476, + 611, 0, 0, 981, 982, 983, 984, 985, 986, 987, + 988, 316, 632, 665, 629, 677, 659, 461, 397, 0, + 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, + 306, 265, 1056, 0, 219, 257, 239, 275, 290, 293, + 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, + 509, 548, 549, 550, 552, 415, 282, 456, 416, 0, + 395, 606, 607, 335, 0, 0, 0, 557, 0, 809, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, + 0, 0, 0, 796, 0, 0, 0, 286, 801, 0, + 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, + 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, + 285, 264, 336, 405, 450, 547, 444, 808, 389, 0, + 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, + 0, 803, 804, 0, 0, 0, 0, 0, 0, 0, + 0, 342, 262, 344, 210, 435, 523, 302, 0, 101, + 0, 0, 1057, 536, 991, 780, 957, 995, 1058, 1009, + 1010, 1011, 996, 0, 249, 997, 998, 256, 999, 0, + 956, 839, 841, 840, 906, 907, 908, 909, 910, 911, + 912, 842, 843, 837, 1004, 641, 1012, 1013, 0, 281, + 340, 288, 280, 612, 0, 0, 0, 0, 0, 0, + 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, + 0, 776, 793, 0, 807, 0, 0, 0, 0, 291, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 790, 791, 0, 0, + 0, 0, 951, 0, 792, 0, 0, 800, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, - 782, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 300, 0, 407, 260, 0, 460, 930, 0, 0, - 641, 0, 0, 928, 0, 0, 0, 0, 369, 0, - 334, 199, 227, 0, 0, 417, 468, 480, 0, 0, - 0, 981, 0, 478, 431, 616, 235, 287, 465, 438, - 476, 446, 290, 0, 0, 477, 376, 597, 456, 613, - 642, 643, 266, 411, 627, 533, 635, 660, 228, 263, - 425, 517, 619, 501, 402, 593, 594, 333, 500, 298, - 203, 373, 648, 226, 486, 375, 244, 233, 599, 624, - 302, 254, 292, 463, 655, 215, 528, 610, 241, 490, - 0, 0, 663, 249, 511, 622, 611, 217, 606, 510, - 398, 330, 331, 216, 0, 464, 271, 296, 0, 0, - 261, 420, 982, 983, 259, 664, 827, 634, 222, 0, - 633, 413, 596, 607, 399, 387, 221, 605, 397, 386, - 338, 835, 836, 283, 310, 912, 911, 910, 309, 311, - 908, 909, 907, 209, 620, 638, 0, 210, 0, 506, - 623, 665, 458, 214, 236, 237, 239, 0, 282, 286, - 294, 297, 306, 307, 317, 371, 424, 452, 448, 457, - 0, 590, 614, 628, 640, 646, 647, 649, 650, 651, - 652, 653, 656, 654, 412, 315, 502, 337, 377, 0, - 0, 430, 479, 242, 618, 503, 918, 940, 929, 793, - 794, 919, 920, 944, 921, 796, 797, 941, 942, 790, - 791, 795, 943, 945, 666, 667, 668, 669, 670, 671, - 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, - 682, 683, 661, 519, 525, 520, 521, 522, 523, 524, - 0, 526, 932, 779, 778, 0, 785, 786, 0, 815, - 816, 818, 824, 825, 826, 837, 884, 885, 893, 895, - 896, 894, 897, 898, 899, 902, 903, 904, 905, 900, - 901, 906, 798, 802, 799, 800, 801, 813, 803, 804, - 805, 806, 807, 808, 809, 810, 811, 812, 814, 955, - 956, 957, 958, 959, 960, 830, 834, 833, 831, 832, - 828, 829, 856, 855, 857, 858, 859, 860, 861, 862, - 864, 863, 865, 866, 867, 868, 869, 870, 838, 839, - 842, 843, 841, 840, 844, 853, 854, 845, 846, 847, - 848, 849, 850, 852, 851, 871, 872, 873, 874, 875, - 877, 876, 880, 881, 879, 878, 883, 882, 777, 198, - 223, 372, 0, 461, 291, 662, 630, 491, 625, 208, - 225, 946, 265, 947, 0, 0, 951, 0, 0, 0, - 953, 952, 0, 954, 916, 915, 0, 0, 948, 949, - 0, 950, 0, 0, 200, 202, 211, 224, 234, 238, - 245, 264, 279, 281, 288, 301, 313, 314, 322, 323, - 326, 332, 384, 391, 392, 393, 394, 414, 415, 416, - 419, 422, 423, 426, 428, 429, 432, 437, 441, 442, - 443, 445, 447, 449, 462, 467, 481, 482, 483, 484, - 485, 488, 489, 495, 496, 497, 498, 499, 507, 508, - 513, 514, 515, 516, 527, 598, 600, 617, 637, 644, - 487, 389, 435, 459, 591, 961, 962, 963, 964, 965, - 966, 967, 968, 303, 612, 645, 609, 657, 639, 444, - 382, 0, 0, 385, 284, 308, 324, 0, 629, 509, - 229, 473, 293, 253, 1036, 0, 213, 248, 232, 262, - 277, 280, 328, 396, 405, 434, 440, 299, 274, 246, - 466, 243, 492, 530, 531, 532, 534, 400, 269, 439, - 401, 0, 380, 587, 588, 320, 0, 0, 0, 539, - 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 421, 0, 0, 0, 776, 0, 0, 0, 273, - 781, 0, 0, 0, 370, 270, 0, 0, 206, 512, - 0, 436, 0, 205, 0, 494, 255, 381, 378, 595, - 285, 276, 272, 252, 321, 390, 433, 529, 427, 788, - 374, 0, 0, 504, 406, 0, 0, 0, 0, 0, - 0, 0, 0, 783, 784, 0, 0, 0, 0, 0, - 0, 0, 0, 327, 250, 329, 204, 418, 505, 289, - 0, 95, 0, 0, 1037, 518, 971, 1105, 937, 975, - 1038, 989, 990, 991, 976, 0, 240, 977, 978, 247, - 979, 0, 936, 819, 821, 820, 886, 887, 888, 889, - 890, 891, 892, 822, 823, 817, 984, 621, 992, 993, - 0, 268, 325, 275, 267, 592, 0, 0, 0, 0, - 0, 0, 608, 0, 0, 231, 0, 0, 0, 0, - 0, 0, 0, 0, 773, 0, 787, 0, 0, 0, - 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 770, 771, 0, - 0, 0, 0, 931, 0, 772, 0, 0, 780, 994, - 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, - 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, + 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, + 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, + 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, + 0, 0, 0, 0, 0, 0, 0, 950, 0, 0, + 661, 0, 0, 948, 0, 0, 0, 0, 384, 0, + 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, + 0, 0, 1001, 0, 495, 448, 636, 243, 300, 482, + 455, 493, 463, 303, 4207, 0, 494, 391, 617, 473, + 633, 662, 663, 279, 428, 647, 551, 655, 680, 234, + 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, + 311, 209, 388, 668, 232, 503, 390, 253, 241, 619, + 644, 315, 267, 305, 480, 675, 221, 546, 630, 250, + 507, 0, 0, 683, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 1002, 1003, 272, 684, 847, 654, 228, + 0, 653, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 855, 856, 296, 324, 932, 931, 930, 323, + 325, 928, 929, 927, 215, 640, 658, 0, 216, 0, + 524, 643, 685, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 660, 666, 667, 669, 670, + 671, 672, 673, 676, 674, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 938, + 960, 949, 813, 814, 939, 940, 964, 941, 816, 817, + 961, 962, 810, 811, 815, 963, 965, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, + 699, 700, 701, 702, 703, 681, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 952, 799, 798, 0, 805, + 806, 0, 835, 836, 838, 844, 845, 846, 857, 904, + 905, 913, 915, 916, 914, 917, 918, 919, 922, 923, + 924, 925, 920, 921, 926, 818, 822, 819, 820, 821, + 833, 823, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 834, 975, 976, 977, 978, 979, 980, 850, 854, + 853, 851, 852, 848, 849, 876, 875, 877, 878, 879, + 880, 881, 882, 884, 883, 885, 886, 887, 888, 889, + 890, 858, 859, 862, 863, 861, 860, 864, 873, 874, + 865, 866, 867, 868, 869, 870, 872, 871, 891, 892, + 893, 894, 895, 897, 896, 900, 901, 899, 898, 903, + 902, 797, 204, 229, 387, 0, 478, 304, 682, 650, + 508, 645, 214, 231, 966, 278, 967, 0, 0, 971, + 0, 0, 0, 973, 972, 0, 974, 936, 935, 0, + 0, 968, 969, 0, 970, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 657, 664, 504, 404, 452, 476, 611, 0, 0, + 981, 982, 983, 984, 985, 986, 987, 988, 316, 632, + 665, 629, 677, 659, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 1056, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 416, 0, 395, 606, 607, + 335, 0, 0, 0, 557, 0, 809, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 796, 0, 0, 0, 286, 801, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 808, 389, 0, 0, 522, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 803, 804, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 101, 0, 1804, 1057, + 536, 991, 780, 957, 995, 1058, 1009, 1010, 1011, 996, + 0, 249, 997, 998, 256, 999, 0, 956, 839, 841, + 840, 906, 907, 908, 909, 910, 911, 912, 842, 843, + 837, 1004, 641, 1012, 1013, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 776, 793, + 0, 807, 0, 0, 0, 0, 291, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 790, 791, 0, 0, 0, 0, 951, + 0, 792, 0, 0, 800, 1014, 1015, 1016, 1017, 1018, + 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, + 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, + 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, + 1049, 1050, 1051, 1052, 1053, 1054, 1055, 802, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, + 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, + 0, 0, 0, 0, 950, 0, 0, 661, 0, 0, + 948, 0, 0, 0, 0, 384, 0, 349, 205, 233, + 0, 0, 434, 485, 497, 0, 0, 0, 0, 1001, + 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, + 303, 0, 0, 494, 391, 617, 473, 633, 662, 663, + 279, 428, 647, 551, 655, 680, 234, 276, 442, 535, + 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, + 668, 232, 503, 390, 253, 241, 619, 644, 315, 267, + 305, 480, 675, 221, 546, 630, 250, 507, 0, 0, + 683, 258, 529, 642, 631, 223, 626, 528, 413, 345, + 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, + 1002, 1003, 272, 684, 847, 654, 228, 0, 653, 430, + 616, 627, 414, 402, 227, 625, 412, 401, 353, 855, + 856, 296, 324, 932, 931, 930, 323, 325, 928, 929, + 927, 215, 640, 658, 0, 216, 0, 524, 643, 685, + 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, + 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, + 634, 648, 660, 666, 667, 669, 670, 671, 672, 673, + 676, 674, 429, 329, 520, 352, 392, 0, 0, 447, + 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, + 260, 235, 512, 609, 246, 266, 938, 960, 949, 813, + 814, 939, 940, 964, 941, 816, 817, 961, 962, 810, + 811, 815, 963, 965, 686, 687, 688, 689, 690, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 681, 537, 543, 538, 539, 540, 541, 542, + 0, 544, 952, 799, 798, 0, 805, 806, 0, 835, + 836, 838, 844, 845, 846, 857, 904, 905, 913, 915, + 916, 914, 917, 918, 919, 922, 923, 924, 925, 920, + 921, 926, 818, 822, 819, 820, 821, 833, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 834, 975, + 976, 977, 978, 979, 980, 850, 854, 853, 851, 852, + 848, 849, 876, 875, 877, 878, 879, 880, 881, 882, + 884, 883, 885, 886, 887, 888, 889, 890, 858, 859, + 862, 863, 861, 860, 864, 873, 874, 865, 866, 867, + 868, 869, 870, 872, 871, 891, 892, 893, 894, 895, + 897, 896, 900, 901, 899, 898, 903, 902, 797, 204, + 229, 387, 0, 478, 304, 682, 650, 508, 645, 214, + 231, 966, 278, 967, 0, 0, 971, 0, 0, 0, + 973, 972, 0, 974, 936, 935, 0, 0, 968, 969, + 0, 970, 0, 0, 206, 208, 217, 230, 242, 247, + 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, + 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, + 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, + 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, + 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, + 531, 532, 533, 534, 545, 618, 620, 637, 657, 664, + 504, 404, 452, 476, 611, 0, 0, 981, 982, 983, + 984, 985, 986, 987, 988, 316, 632, 665, 629, 677, + 659, 461, 397, 0, 0, 400, 297, 322, 339, 0, + 649, 527, 236, 490, 306, 265, 1056, 0, 219, 257, + 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, + 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, + 282, 456, 416, 0, 395, 606, 607, 335, 0, 0, + 0, 557, 0, 809, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 438, 0, 0, 0, 796, 0, 0, + 0, 286, 801, 0, 0, 0, 385, 283, 0, 0, + 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, + 393, 615, 298, 289, 285, 264, 336, 405, 450, 547, + 444, 808, 389, 0, 0, 522, 422, 0, 0, 0, + 0, 0, 0, 0, 0, 803, 804, 0, 0, 0, + 0, 0, 0, 0, 0, 342, 262, 344, 210, 435, + 523, 302, 0, 101, 0, 0, 1057, 536, 991, 780, + 957, 995, 1058, 1009, 1010, 1011, 996, 0, 249, 997, + 998, 256, 999, 0, 956, 839, 841, 840, 906, 907, + 908, 909, 910, 911, 912, 842, 843, 837, 1004, 641, + 1012, 1013, 0, 281, 340, 288, 280, 612, 0, 0, + 0, 0, 0, 0, 628, 0, 0, 238, 0, 0, + 0, 0, 0, 0, 0, 776, 793, 0, 807, 0, + 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 790, 791, 1110, 0, 0, 0, 951, 0, 792, 0, + 0, 800, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, + 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, + 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, + 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, + 1052, 1053, 1054, 1055, 802, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, + 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, + 0, 950, 0, 0, 661, 0, 0, 948, 0, 0, + 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, + 485, 497, 0, 0, 0, 0, 1001, 0, 495, 448, + 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, + 494, 391, 617, 473, 633, 662, 663, 279, 428, 647, + 551, 655, 680, 234, 276, 442, 535, 639, 519, 417, + 613, 614, 348, 518, 311, 209, 388, 668, 232, 503, + 390, 253, 241, 619, 644, 315, 267, 305, 480, 675, + 221, 546, 630, 250, 507, 0, 0, 683, 258, 529, + 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, + 481, 284, 309, 0, 0, 274, 437, 1002, 1003, 272, + 684, 847, 654, 228, 0, 653, 430, 616, 627, 414, + 402, 227, 625, 412, 401, 353, 855, 856, 296, 324, + 932, 931, 930, 323, 325, 928, 929, 927, 215, 640, + 658, 0, 216, 0, 524, 643, 685, 475, 220, 244, + 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, + 386, 441, 469, 465, 474, 0, 610, 634, 648, 660, + 666, 667, 669, 670, 671, 672, 673, 676, 674, 429, + 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, + 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, + 609, 246, 266, 938, 960, 949, 813, 814, 939, 940, + 964, 941, 816, 817, 961, 962, 810, 811, 815, 963, + 965, 686, 687, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 681, + 537, 543, 538, 539, 540, 541, 542, 0, 544, 952, + 799, 798, 0, 805, 806, 0, 835, 836, 838, 844, + 845, 846, 857, 904, 905, 913, 915, 916, 914, 917, + 918, 919, 922, 923, 924, 925, 920, 921, 926, 818, + 822, 819, 820, 821, 833, 823, 824, 825, 826, 827, + 828, 829, 830, 831, 832, 834, 975, 976, 977, 978, + 979, 980, 850, 854, 853, 851, 852, 848, 849, 876, + 875, 877, 878, 879, 880, 881, 882, 884, 883, 885, + 886, 887, 888, 889, 890, 858, 859, 862, 863, 861, + 860, 864, 873, 874, 865, 866, 867, 868, 869, 870, + 872, 871, 891, 892, 893, 894, 895, 897, 896, 900, + 901, 899, 898, 903, 902, 797, 204, 229, 387, 0, + 478, 304, 682, 650, 508, 645, 214, 231, 966, 278, + 967, 0, 0, 971, 0, 0, 0, 973, 972, 0, + 974, 936, 935, 0, 0, 968, 969, 0, 970, 0, + 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, + 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, + 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, + 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, + 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, + 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, + 534, 545, 618, 620, 637, 657, 664, 504, 404, 452, + 476, 611, 0, 0, 981, 982, 983, 984, 985, 986, + 987, 988, 316, 632, 665, 629, 677, 659, 461, 397, + 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, + 490, 306, 265, 1056, 0, 219, 257, 239, 275, 290, + 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, + 252, 509, 548, 549, 550, 552, 415, 282, 456, 416, + 0, 395, 606, 607, 335, 0, 0, 0, 557, 0, + 809, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 438, 0, 0, 0, 796, 0, 0, 0, 286, 801, + 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, + 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, + 289, 285, 264, 336, 405, 450, 547, 444, 808, 389, + 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, + 0, 0, 803, 804, 0, 0, 0, 0, 0, 0, + 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, + 101, 0, 0, 1057, 536, 991, 780, 957, 995, 1058, + 1009, 1010, 1011, 996, 0, 249, 997, 998, 256, 999, + 0, 956, 839, 841, 840, 906, 907, 908, 909, 910, + 911, 912, 842, 843, 837, 1004, 641, 1012, 1013, 0, + 281, 340, 288, 280, 612, 0, 0, 0, 0, 0, + 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, + 0, 0, 776, 793, 0, 807, 0, 0, 0, 0, + 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 790, 791, 0, + 0, 0, 0, 951, 0, 792, 0, 0, 800, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, - 1035, 2144, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 300, 0, 407, 260, 0, 460, 930, 0, - 0, 641, 0, 0, 928, 0, 0, 0, 0, 369, - 0, 334, 199, 227, 0, 0, 417, 468, 480, 0, - 0, 0, 981, 0, 478, 431, 616, 235, 287, 465, - 438, 476, 446, 290, 0, 0, 477, 376, 597, 456, - 613, 642, 643, 266, 411, 627, 533, 635, 660, 228, - 263, 425, 517, 619, 501, 402, 593, 594, 333, 500, - 298, 203, 373, 648, 226, 486, 375, 244, 233, 599, - 624, 302, 254, 292, 463, 655, 215, 528, 610, 241, - 490, 0, 0, 663, 249, 511, 622, 611, 217, 606, - 510, 398, 330, 331, 216, 0, 464, 271, 296, 0, - 0, 261, 420, 982, 983, 259, 664, 827, 634, 222, - 0, 633, 413, 596, 607, 399, 387, 221, 605, 397, - 386, 338, 835, 836, 283, 310, 912, 911, 910, 309, - 311, 908, 909, 907, 209, 620, 638, 0, 210, 0, - 506, 623, 665, 458, 214, 236, 237, 239, 0, 282, - 286, 294, 297, 306, 307, 317, 371, 424, 452, 448, - 457, 0, 590, 614, 628, 640, 646, 647, 649, 650, - 651, 652, 653, 656, 654, 412, 315, 502, 337, 377, - 0, 0, 430, 479, 242, 618, 503, 918, 940, 929, - 793, 794, 919, 920, 944, 921, 796, 797, 941, 942, - 790, 791, 795, 943, 945, 666, 667, 668, 669, 670, - 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, - 681, 682, 683, 661, 519, 525, 520, 521, 522, 523, - 524, 0, 526, 932, 779, 778, 0, 785, 786, 0, - 815, 816, 818, 824, 825, 826, 837, 884, 885, 893, - 895, 896, 894, 897, 898, 899, 902, 903, 904, 905, - 900, 901, 906, 798, 802, 799, 800, 801, 813, 803, - 804, 805, 806, 807, 808, 809, 810, 811, 812, 814, - 955, 956, 957, 958, 959, 960, 830, 834, 833, 831, - 832, 828, 829, 856, 855, 857, 858, 859, 860, 861, - 862, 864, 863, 865, 866, 867, 868, 869, 870, 838, - 839, 842, 843, 841, 840, 844, 853, 854, 845, 846, - 847, 848, 849, 850, 852, 851, 871, 872, 873, 874, - 875, 877, 876, 880, 881, 879, 878, 883, 882, 777, - 198, 223, 372, 0, 461, 291, 662, 630, 491, 625, - 208, 225, 946, 265, 947, 0, 0, 951, 0, 0, - 0, 953, 952, 0, 954, 916, 915, 0, 0, 948, - 949, 0, 950, 0, 0, 200, 202, 211, 224, 234, - 238, 245, 264, 279, 281, 288, 301, 313, 314, 322, - 323, 326, 332, 384, 391, 392, 393, 394, 414, 415, - 416, 419, 422, 423, 426, 428, 429, 432, 437, 441, - 442, 443, 445, 447, 449, 462, 467, 481, 482, 483, - 484, 485, 488, 489, 495, 496, 497, 498, 499, 507, - 508, 513, 514, 515, 516, 527, 598, 600, 617, 637, - 644, 487, 389, 435, 459, 591, 961, 962, 963, 964, - 965, 966, 967, 968, 303, 612, 645, 609, 657, 639, - 444, 382, 0, 0, 385, 284, 308, 324, 0, 629, - 509, 229, 473, 293, 253, 1036, 0, 213, 248, 232, - 262, 277, 280, 328, 396, 405, 434, 440, 299, 274, - 246, 466, 243, 492, 530, 531, 532, 534, 400, 269, - 439, 401, 0, 380, 587, 588, 320, 0, 0, 0, - 539, 0, 789, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 421, 0, 0, 0, 776, 0, 0, 0, - 273, 781, 0, 0, 0, 370, 270, 0, 0, 206, - 512, 0, 436, 0, 205, 0, 494, 255, 381, 378, - 595, 285, 276, 272, 252, 321, 390, 433, 529, 427, - 788, 374, 0, 0, 504, 406, 0, 0, 0, 0, - 0, 0, 0, 0, 783, 784, 0, 0, 0, 0, - 0, 0, 0, 0, 327, 250, 329, 204, 418, 505, - 289, 0, 95, 0, 0, 1037, 518, 971, 1105, 937, - 975, 1038, 989, 990, 991, 976, 0, 240, 977, 978, - 247, 979, 0, 936, 819, 821, 820, 886, 887, 888, - 889, 890, 891, 892, 822, 823, 817, 984, 621, 992, - 993, 0, 268, 325, 275, 267, 592, 0, 0, 0, - 0, 0, 0, 608, 0, 0, 231, 0, 0, 0, - 0, 0, 0, 0, 0, 773, 0, 787, 0, 0, - 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 770, 771, - 0, 0, 0, 0, 931, 0, 772, 0, 0, 780, - 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, - 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, + 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, + 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, + 1055, 802, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, + 334, 0, 0, 0, 0, 0, 0, 0, 950, 0, + 0, 661, 0, 0, 948, 0, 0, 0, 0, 384, + 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, + 0, 0, 0, 1001, 0, 495, 448, 636, 243, 300, + 482, 455, 493, 463, 303, 0, 0, 494, 391, 617, + 473, 633, 662, 663, 279, 428, 647, 551, 655, 680, + 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, + 518, 311, 209, 388, 668, 232, 503, 390, 253, 241, + 619, 644, 315, 267, 305, 480, 675, 221, 546, 630, + 250, 507, 0, 0, 683, 258, 529, 642, 631, 223, + 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, + 0, 0, 274, 437, 1002, 1003, 272, 684, 847, 654, + 228, 0, 653, 430, 616, 627, 414, 402, 227, 625, + 412, 401, 353, 855, 856, 296, 324, 932, 931, 930, + 323, 325, 928, 929, 927, 215, 640, 658, 0, 216, + 0, 524, 643, 685, 475, 220, 244, 245, 248, 0, + 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, + 465, 474, 0, 610, 634, 648, 660, 666, 667, 669, + 670, 671, 672, 673, 676, 674, 429, 329, 520, 352, + 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, + 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, + 938, 960, 949, 813, 814, 939, 940, 964, 941, 816, + 817, 961, 962, 810, 811, 815, 963, 965, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 700, 701, 702, 703, 681, 537, 543, 538, + 539, 540, 541, 542, 0, 544, 952, 799, 798, 0, + 805, 806, 0, 835, 836, 838, 844, 845, 846, 857, + 904, 905, 913, 915, 916, 914, 917, 918, 919, 922, + 923, 924, 925, 920, 921, 926, 818, 822, 819, 820, + 821, 833, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 834, 975, 976, 977, 978, 979, 980, 850, + 854, 853, 851, 852, 848, 849, 876, 875, 877, 878, + 879, 880, 881, 882, 884, 883, 885, 886, 887, 888, + 889, 890, 858, 859, 862, 863, 861, 860, 864, 873, + 874, 865, 866, 867, 868, 869, 870, 872, 871, 891, + 892, 893, 894, 895, 897, 896, 900, 901, 899, 898, + 903, 902, 797, 204, 229, 387, 0, 478, 304, 682, + 650, 508, 645, 214, 231, 966, 278, 967, 0, 0, + 971, 0, 0, 0, 973, 972, 0, 974, 936, 935, + 0, 0, 968, 969, 0, 970, 0, 0, 206, 208, + 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, + 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, + 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, + 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, + 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, + 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, + 620, 637, 657, 664, 504, 404, 452, 476, 611, 0, + 0, 981, 982, 983, 984, 985, 986, 987, 988, 316, + 632, 665, 629, 677, 659, 461, 397, 0, 0, 400, + 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, + 1056, 0, 219, 257, 239, 275, 290, 293, 343, 411, + 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, + 549, 550, 552, 415, 282, 456, 416, 0, 395, 606, + 607, 335, 0, 0, 0, 557, 0, 809, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 796, 0, 0, 0, 286, 801, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 808, 389, 0, 0, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 803, + 804, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 101, 0, 0, + 1057, 536, 991, 780, 957, 995, 1058, 1009, 1010, 1011, + 996, 0, 249, 997, 998, 256, 999, 0, 956, 839, + 841, 840, 906, 907, 908, 909, 910, 911, 912, 842, + 843, 837, 1004, 641, 1012, 1013, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 776, + 793, 0, 807, 0, 0, 0, 0, 291, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 790, 791, 0, 0, 0, 0, + 951, 0, 792, 0, 0, 800, 1014, 1015, 1016, 1017, + 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, + 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, + 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, + 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 3252, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 950, 0, 0, 661, 0, + 0, 948, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 1001, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 662, + 663, 279, 428, 647, 551, 655, 680, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 668, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 675, 221, 546, 630, 250, 507, 0, + 0, 683, 258, 529, 642, 631, 223, 626, 528, 413, + 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, + 437, 1002, 1003, 272, 684, 847, 654, 228, 0, 653, + 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, + 855, 856, 296, 324, 932, 931, 930, 323, 325, 928, + 929, 927, 215, 640, 658, 0, 216, 0, 524, 643, + 685, 475, 220, 244, 245, 248, 0, 295, 299, 307, + 310, 320, 321, 331, 386, 441, 469, 465, 474, 0, + 610, 634, 648, 660, 666, 667, 669, 670, 671, 672, + 673, 676, 674, 429, 329, 520, 352, 392, 0, 0, + 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, + 261, 260, 235, 512, 609, 246, 266, 938, 960, 949, + 813, 814, 939, 940, 964, 941, 816, 817, 961, 962, + 810, 811, 815, 963, 965, 686, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 681, 537, 543, 538, 539, 540, 541, + 542, 0, 544, 952, 799, 798, 0, 805, 806, 0, + 835, 836, 838, 844, 845, 846, 857, 904, 905, 913, + 915, 916, 914, 917, 918, 919, 922, 923, 924, 925, + 920, 921, 926, 818, 822, 819, 820, 821, 833, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 834, + 975, 976, 977, 978, 979, 980, 850, 854, 853, 851, + 852, 848, 849, 876, 875, 877, 878, 879, 880, 881, + 882, 884, 883, 885, 886, 887, 888, 889, 890, 858, + 859, 862, 863, 861, 860, 864, 873, 874, 865, 866, + 867, 868, 869, 870, 872, 871, 891, 892, 893, 894, + 895, 897, 896, 900, 901, 899, 898, 903, 902, 797, + 204, 229, 387, 0, 478, 304, 682, 650, 508, 645, + 214, 231, 966, 278, 967, 0, 0, 971, 0, 0, + 0, 973, 972, 0, 974, 936, 935, 0, 0, 968, + 969, 0, 970, 0, 0, 206, 208, 217, 230, 242, + 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, + 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, + 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, + 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, + 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, + 526, 531, 532, 533, 534, 545, 618, 620, 637, 657, + 664, 504, 404, 452, 476, 611, 0, 0, 981, 982, + 983, 984, 985, 986, 987, 988, 316, 632, 665, 629, + 677, 659, 461, 397, 0, 0, 400, 297, 322, 339, + 0, 649, 527, 236, 490, 306, 265, 1056, 0, 219, + 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, + 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, + 415, 282, 456, 416, 0, 395, 606, 607, 335, 0, + 0, 0, 557, 0, 809, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 438, 0, 0, 0, 796, 0, + 0, 0, 286, 801, 0, 0, 0, 385, 283, 0, + 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, + 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, + 547, 444, 808, 389, 0, 0, 522, 422, 0, 0, + 0, 0, 0, 0, 0, 0, 803, 804, 0, 0, + 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, + 435, 523, 302, 0, 101, 0, 0, 1057, 536, 991, + 780, 957, 995, 1058, 1009, 1010, 1011, 996, 0, 249, + 997, 998, 256, 999, 0, 956, 839, 841, 840, 906, + 907, 908, 909, 910, 911, 912, 842, 843, 837, 1004, + 641, 1012, 1013, 0, 281, 340, 288, 280, 612, 0, + 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, + 0, 0, 0, 0, 0, 0, 776, 793, 0, 807, + 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 790, 791, 0, 0, 0, 0, 951, 0, 792, + 0, 0, 800, 1014, 1015, 1016, 1017, 1018, 1019, 1020, + 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, + 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, + 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, + 1051, 1052, 1053, 1054, 1055, 3248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, + 0, 477, 0, 319, 334, 0, 0, 0, 0, 0, + 0, 0, 950, 0, 0, 661, 0, 0, 948, 0, + 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, + 434, 485, 497, 0, 0, 0, 0, 1001, 0, 495, + 448, 636, 243, 300, 482, 455, 493, 463, 303, 0, + 0, 494, 391, 617, 473, 633, 662, 663, 279, 428, + 647, 551, 655, 680, 234, 276, 442, 535, 639, 519, + 417, 613, 614, 348, 518, 311, 209, 388, 668, 232, + 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, + 675, 221, 546, 630, 250, 507, 0, 0, 683, 258, + 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, + 0, 481, 284, 309, 0, 0, 274, 437, 1002, 1003, + 272, 684, 847, 654, 228, 0, 653, 430, 616, 627, + 414, 402, 227, 625, 412, 401, 353, 855, 856, 296, + 324, 932, 931, 930, 323, 325, 928, 929, 927, 215, + 640, 658, 0, 216, 0, 524, 643, 685, 475, 220, + 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, + 331, 386, 441, 469, 465, 474, 0, 610, 634, 648, + 660, 666, 667, 669, 670, 671, 672, 673, 676, 674, + 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, + 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, + 512, 609, 246, 266, 938, 960, 949, 813, 814, 939, + 940, 964, 941, 816, 817, 961, 962, 810, 811, 815, + 963, 965, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 681, 537, 543, 538, 539, 540, 541, 542, 0, 544, + 952, 799, 798, 0, 805, 806, 0, 835, 836, 838, + 844, 845, 846, 857, 904, 905, 913, 915, 916, 914, + 917, 918, 919, 922, 923, 924, 925, 920, 921, 926, + 818, 822, 819, 820, 821, 833, 823, 824, 825, 826, + 827, 828, 829, 830, 831, 832, 834, 975, 976, 977, + 978, 979, 980, 850, 854, 853, 851, 852, 848, 849, + 876, 875, 877, 878, 879, 880, 881, 882, 884, 883, + 885, 886, 887, 888, 889, 890, 858, 859, 862, 863, + 861, 860, 864, 873, 874, 865, 866, 867, 868, 869, + 870, 872, 871, 891, 892, 893, 894, 895, 897, 896, + 900, 901, 899, 898, 903, 902, 797, 204, 229, 387, + 0, 478, 304, 682, 650, 508, 645, 214, 231, 966, + 278, 967, 0, 0, 971, 0, 0, 0, 973, 972, + 0, 974, 936, 935, 0, 0, 968, 969, 0, 970, + 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, + 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, + 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, + 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, + 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, + 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, + 533, 534, 545, 618, 620, 637, 657, 664, 504, 404, + 452, 476, 611, 0, 0, 981, 982, 983, 984, 985, + 986, 987, 988, 316, 632, 665, 629, 677, 659, 461, + 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, + 236, 490, 306, 265, 1056, 0, 219, 257, 239, 275, + 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, + 483, 252, 509, 548, 549, 550, 552, 415, 282, 456, + 416, 0, 395, 606, 607, 335, 0, 0, 0, 557, + 0, 809, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 438, 0, 0, 0, 796, 0, 0, 0, 286, + 801, 0, 0, 0, 385, 283, 0, 0, 212, 530, + 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, + 298, 289, 285, 264, 336, 405, 450, 547, 444, 808, + 389, 0, 0, 522, 422, 0, 0, 0, 0, 0, + 0, 0, 0, 803, 804, 0, 0, 0, 0, 0, + 0, 0, 0, 342, 262, 344, 210, 435, 523, 302, + 0, 101, 0, 0, 1057, 536, 991, 1131, 957, 995, + 1058, 1009, 1010, 1011, 996, 0, 249, 997, 998, 256, + 999, 0, 956, 839, 841, 840, 906, 907, 908, 909, + 910, 911, 912, 842, 843, 837, 1004, 641, 1012, 1013, + 0, 281, 340, 288, 280, 612, 0, 0, 0, 0, + 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, + 0, 0, 0, 0, 793, 0, 807, 0, 0, 0, + 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 790, 791, + 0, 0, 0, 0, 951, 0, 792, 0, 0, 800, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, - 1034, 1035, 2142, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 300, 0, 407, 260, 0, 460, 930, - 0, 0, 641, 0, 0, 928, 0, 0, 0, 0, - 369, 0, 334, 199, 227, 0, 0, 417, 468, 480, - 0, 0, 0, 981, 0, 478, 431, 616, 235, 287, - 465, 438, 476, 446, 290, 0, 0, 477, 376, 597, - 456, 613, 642, 643, 266, 411, 627, 533, 635, 660, - 228, 263, 425, 517, 619, 501, 402, 593, 594, 333, - 500, 298, 203, 373, 648, 226, 486, 375, 244, 233, - 599, 624, 302, 254, 292, 463, 655, 215, 528, 610, - 241, 490, 0, 0, 663, 249, 511, 622, 611, 217, - 606, 510, 398, 330, 331, 216, 0, 464, 271, 296, - 0, 0, 261, 420, 982, 983, 259, 664, 827, 634, - 222, 0, 633, 413, 596, 607, 399, 387, 221, 605, - 397, 386, 338, 835, 836, 283, 310, 912, 911, 910, - 309, 311, 908, 909, 907, 209, 620, 638, 0, 210, - 0, 506, 623, 665, 458, 214, 236, 237, 239, 0, - 282, 286, 294, 297, 306, 307, 317, 371, 424, 452, - 448, 457, 0, 590, 614, 628, 640, 646, 647, 649, - 650, 651, 652, 653, 656, 654, 412, 315, 502, 337, - 377, 0, 0, 430, 479, 242, 618, 503, 918, 940, - 929, 793, 794, 919, 920, 944, 921, 796, 797, 941, - 942, 790, 791, 795, 943, 945, 666, 667, 668, 669, - 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, - 680, 681, 682, 683, 661, 519, 525, 520, 521, 522, - 523, 524, 0, 526, 932, 779, 778, 0, 785, 786, - 0, 815, 816, 818, 824, 825, 826, 837, 884, 885, - 893, 895, 896, 894, 897, 898, 899, 902, 903, 904, - 905, 900, 901, 906, 798, 802, 799, 800, 801, 813, - 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, - 814, 955, 956, 957, 958, 959, 960, 830, 834, 833, - 831, 832, 828, 829, 856, 855, 857, 858, 859, 860, - 861, 862, 864, 863, 865, 866, 867, 868, 869, 870, - 838, 839, 842, 843, 841, 840, 844, 853, 854, 845, - 846, 847, 848, 849, 850, 852, 851, 871, 872, 873, - 874, 875, 877, 876, 880, 881, 879, 878, 883, 882, - 777, 198, 223, 372, 0, 461, 291, 662, 630, 491, - 625, 208, 225, 946, 265, 947, 0, 0, 951, 0, - 0, 0, 953, 952, 0, 954, 916, 915, 0, 0, - 948, 949, 0, 950, 0, 0, 200, 202, 211, 224, - 234, 238, 245, 264, 279, 281, 288, 301, 313, 314, - 322, 323, 326, 332, 384, 391, 392, 393, 394, 414, - 415, 416, 419, 422, 423, 426, 428, 429, 432, 437, - 441, 442, 443, 445, 447, 449, 462, 467, 481, 482, - 483, 484, 485, 488, 489, 495, 496, 497, 498, 499, - 507, 508, 513, 514, 515, 516, 527, 598, 600, 617, - 637, 644, 487, 389, 435, 459, 591, 961, 962, 963, - 964, 965, 966, 967, 968, 303, 612, 645, 609, 657, - 639, 444, 382, 0, 0, 385, 284, 308, 324, 0, - 629, 509, 229, 473, 293, 253, 1036, 0, 213, 248, - 232, 262, 277, 280, 328, 396, 405, 434, 440, 299, - 274, 246, 466, 243, 492, 530, 531, 532, 534, 400, - 269, 439, 401, 0, 380, 587, 588, 320, 0, 0, - 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, - 0, 273, 0, 0, 0, 0, 370, 270, 0, 0, - 206, 512, 0, 436, 0, 205, 0, 494, 255, 381, - 378, 595, 285, 276, 272, 252, 321, 390, 433, 529, - 427, 0, 374, 0, 0, 504, 406, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 327, 250, 329, 204, 418, - 505, 289, 0, 0, 0, 0, 0, 518, 736, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, - 0, 247, 0, 0, 0, 355, 364, 363, 343, 344, - 346, 348, 354, 361, 367, 340, 349, 0, 0, 621, - 0, 0, 0, 268, 325, 275, 267, 592, 0, 0, - 0, 0, 0, 0, 608, 0, 0, 231, 0, 1156, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 300, 0, 407, 260, 0, 460, - 0, 0, 1155, 641, 0, 0, 0, 0, 0, 1152, - 1153, 369, 1113, 334, 199, 227, 1146, 1150, 417, 468, - 480, 0, 0, 0, 256, 0, 478, 431, 616, 235, - 287, 465, 438, 476, 446, 290, 0, 0, 477, 376, - 597, 456, 613, 642, 643, 266, 411, 627, 533, 635, - 660, 228, 263, 425, 517, 619, 501, 402, 593, 594, - 333, 500, 298, 203, 373, 648, 226, 486, 375, 244, - 233, 599, 624, 302, 254, 292, 463, 655, 215, 528, - 610, 241, 490, 0, 0, 663, 249, 511, 622, 611, - 217, 606, 510, 398, 330, 331, 216, 0, 464, 271, - 296, 0, 0, 261, 420, 601, 602, 259, 664, 230, - 634, 222, 0, 633, 413, 596, 607, 399, 387, 221, - 605, 397, 386, 338, 359, 360, 283, 310, 453, 379, - 454, 309, 311, 409, 408, 410, 209, 620, 638, 0, - 210, 0, 506, 623, 665, 458, 214, 236, 237, 239, - 0, 282, 286, 294, 297, 306, 307, 317, 371, 424, - 452, 448, 457, 0, 590, 614, 628, 640, 646, 647, - 649, 650, 651, 652, 653, 656, 654, 412, 315, 502, - 337, 377, 0, 0, 430, 479, 242, 618, 503, 201, - 0, 0, 0, 0, 257, 258, 0, 586, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 666, 667, 668, - 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, - 679, 680, 681, 682, 683, 661, 519, 525, 520, 521, - 522, 523, 524, 0, 526, 0, 0, 0, 0, 0, - 403, 0, 603, 604, 684, 388, 493, 615, 339, 353, - 356, 345, 365, 0, 366, 341, 342, 347, 350, 351, - 352, 357, 358, 362, 368, 251, 212, 395, 404, 589, - 316, 218, 219, 220, 535, 536, 537, 538, 631, 632, - 636, 207, 469, 470, 471, 472, 295, 626, 312, 475, - 474, 335, 336, 383, 455, 551, 553, 564, 568, 570, - 572, 578, 581, 552, 554, 565, 569, 571, 573, 579, - 582, 541, 543, 545, 547, 560, 559, 556, 584, 585, - 562, 567, 546, 558, 563, 576, 583, 580, 540, 544, - 548, 557, 575, 574, 555, 566, 577, 561, 549, 542, - 550, 0, 198, 223, 372, 0, 461, 291, 662, 630, - 491, 625, 208, 225, 0, 265, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 200, 202, 211, - 224, 234, 238, 245, 264, 279, 281, 288, 301, 313, - 314, 322, 323, 326, 332, 384, 391, 392, 393, 394, - 414, 415, 416, 419, 422, 423, 426, 428, 429, 432, - 437, 441, 442, 443, 445, 447, 449, 462, 467, 481, - 482, 483, 484, 485, 488, 489, 495, 496, 497, 498, - 499, 507, 508, 513, 514, 515, 516, 527, 598, 600, - 617, 637, 644, 487, 389, 435, 459, 591, 304, 305, - 450, 451, 318, 319, 658, 659, 303, 612, 645, 609, - 657, 639, 444, 382, 0, 0, 385, 284, 308, 324, - 0, 629, 509, 229, 473, 293, 253, 0, 0, 213, - 248, 232, 262, 277, 280, 328, 396, 405, 434, 440, - 299, 274, 246, 466, 243, 492, 530, 531, 532, 534, - 400, 269, 439, 401, 0, 380, 587, 588, 320, 0, - 0, 86, 539, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, - 0, 0, 273, 0, 0, 0, 0, 370, 270, 0, - 0, 206, 512, 0, 436, 0, 205, 0, 494, 255, - 381, 378, 595, 285, 276, 272, 252, 321, 390, 433, - 529, 427, 97, 374, 0, 0, 504, 406, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 327, 250, 329, 204, - 418, 505, 289, 0, 95, 0, 0, 0, 518, 196, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, - 0, 0, 247, 0, 0, 0, 355, 364, 363, 343, - 344, 346, 348, 354, 361, 367, 340, 349, 0, 0, - 621, 0, 0, 0, 268, 325, 275, 267, 592, 0, - 0, 0, 0, 0, 0, 608, 0, 0, 231, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 300, 0, 407, 260, 0, - 460, 0, 0, 0, 641, 0, 0, 0, 0, 0, - 0, 0, 369, 0, 334, 199, 227, 0, 0, 417, - 468, 480, 0, 0, 0, 256, 0, 478, 431, 616, - 235, 287, 465, 438, 476, 446, 290, 0, 0, 477, - 376, 597, 456, 613, 642, 643, 266, 411, 627, 533, - 635, 660, 228, 263, 425, 517, 619, 501, 402, 593, - 594, 333, 500, 298, 203, 373, 648, 226, 486, 375, - 244, 233, 599, 624, 302, 254, 292, 463, 655, 215, - 528, 610, 241, 490, 0, 0, 663, 249, 511, 622, - 611, 217, 606, 510, 398, 330, 331, 216, 0, 464, - 271, 296, 0, 0, 261, 420, 601, 602, 259, 664, - 230, 634, 222, 0, 633, 413, 596, 607, 399, 387, - 221, 605, 397, 386, 338, 359, 360, 283, 310, 453, - 379, 454, 309, 311, 409, 408, 410, 209, 620, 638, - 0, 210, 0, 506, 623, 665, 458, 214, 236, 237, - 239, 0, 282, 286, 294, 297, 306, 307, 317, 371, - 424, 452, 448, 457, 0, 590, 614, 628, 640, 646, - 647, 649, 650, 651, 652, 653, 656, 654, 412, 315, - 502, 337, 377, 0, 0, 430, 479, 242, 618, 503, - 201, 0, 0, 0, 0, 257, 258, 0, 586, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 666, 667, - 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, - 678, 679, 680, 681, 682, 683, 661, 519, 525, 520, - 521, 522, 523, 524, 0, 526, 0, 0, 0, 0, - 0, 403, 0, 603, 604, 684, 388, 493, 615, 339, - 353, 356, 345, 365, 0, 366, 341, 342, 347, 350, - 351, 352, 357, 358, 362, 368, 251, 212, 395, 404, - 589, 316, 218, 219, 220, 535, 536, 537, 538, 631, - 632, 636, 207, 469, 470, 471, 472, 295, 626, 312, - 475, 474, 335, 336, 383, 455, 551, 553, 564, 568, - 570, 572, 578, 581, 552, 554, 565, 569, 571, 573, - 579, 582, 541, 543, 545, 547, 560, 559, 556, 584, - 585, 562, 567, 546, 558, 563, 576, 583, 580, 540, - 544, 548, 557, 575, 574, 555, 566, 577, 561, 549, - 542, 550, 0, 198, 223, 372, 94, 461, 291, 662, - 630, 491, 625, 208, 225, 0, 265, 0, 0, 0, - 0, 0, 0, 2449, 0, 0, 2448, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 200, 202, - 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, - 313, 314, 322, 323, 326, 332, 384, 391, 392, 393, - 394, 414, 415, 416, 419, 422, 423, 426, 428, 429, - 432, 437, 441, 442, 443, 445, 447, 449, 462, 467, - 481, 482, 483, 484, 485, 488, 489, 495, 496, 497, - 498, 499, 507, 508, 513, 514, 515, 516, 527, 598, - 600, 617, 637, 644, 487, 389, 435, 459, 591, 304, - 305, 450, 451, 318, 319, 658, 659, 303, 612, 645, - 609, 657, 639, 444, 382, 0, 0, 385, 284, 308, - 324, 0, 629, 509, 229, 473, 293, 253, 0, 0, - 213, 248, 232, 262, 277, 280, 328, 396, 405, 434, - 440, 299, 274, 246, 466, 243, 492, 530, 531, 532, - 534, 400, 269, 439, 401, 0, 380, 587, 588, 320, - 0, 0, 86, 539, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, - 0, 0, 0, 273, 0, 0, 0, 0, 370, 270, - 0, 0, 206, 512, 0, 436, 0, 205, 0, 494, - 255, 381, 378, 595, 285, 276, 272, 252, 321, 390, - 433, 529, 427, 97, 374, 0, 0, 504, 406, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 250, 329, - 204, 418, 505, 289, 0, 95, 0, 1769, 0, 518, - 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 240, 0, 0, 247, 0, 0, 0, 355, 364, 363, - 343, 344, 346, 348, 354, 361, 367, 340, 349, 0, - 0, 621, 0, 0, 0, 268, 325, 275, 267, 592, - 0, 0, 0, 0, 0, 0, 608, 0, 0, 231, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 300, 0, 407, 260, - 0, 460, 0, 0, 0, 641, 0, 0, 0, 0, - 0, 0, 0, 369, 0, 334, 199, 227, 0, 0, - 417, 468, 480, 0, 0, 0, 256, 0, 478, 431, - 616, 235, 287, 465, 438, 476, 446, 290, 0, 0, - 477, 376, 597, 456, 613, 642, 643, 266, 411, 627, - 533, 635, 660, 228, 263, 425, 517, 619, 501, 402, - 593, 594, 333, 500, 298, 203, 373, 648, 226, 486, - 375, 244, 233, 599, 624, 302, 254, 292, 463, 655, - 215, 528, 610, 241, 490, 0, 0, 663, 249, 511, - 622, 611, 217, 606, 510, 398, 330, 331, 216, 0, - 464, 271, 296, 0, 0, 261, 420, 601, 602, 259, - 664, 230, 634, 222, 0, 633, 413, 596, 607, 399, - 387, 221, 605, 397, 386, 338, 359, 360, 283, 310, - 453, 379, 454, 309, 311, 409, 408, 410, 209, 620, - 638, 0, 210, 0, 506, 623, 665, 458, 214, 236, - 237, 239, 0, 282, 286, 294, 297, 306, 307, 317, - 371, 424, 452, 448, 457, 0, 590, 614, 628, 640, - 646, 647, 649, 650, 651, 652, 653, 656, 654, 412, - 315, 502, 337, 377, 0, 0, 430, 479, 242, 618, - 503, 201, 0, 0, 0, 0, 257, 258, 0, 586, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, - 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, - 677, 678, 679, 680, 681, 682, 683, 661, 519, 525, - 520, 521, 522, 523, 524, 0, 526, 0, 0, 0, - 0, 0, 403, 0, 603, 604, 684, 388, 493, 615, - 339, 353, 356, 345, 365, 0, 366, 341, 342, 347, - 350, 351, 352, 357, 358, 362, 368, 251, 212, 395, - 404, 589, 316, 218, 219, 220, 535, 536, 537, 538, - 631, 632, 636, 207, 469, 470, 471, 472, 295, 626, - 312, 475, 474, 335, 336, 383, 455, 551, 553, 564, - 568, 570, 572, 578, 581, 552, 554, 565, 569, 571, - 573, 579, 582, 541, 543, 545, 547, 560, 559, 556, - 584, 585, 562, 567, 546, 558, 563, 576, 583, 580, - 540, 544, 548, 557, 575, 574, 555, 566, 577, 561, - 549, 542, 550, 0, 198, 223, 372, 94, 461, 291, - 662, 630, 491, 625, 208, 225, 0, 265, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, - 202, 211, 224, 234, 238, 245, 264, 279, 281, 288, - 301, 313, 314, 322, 323, 326, 332, 384, 391, 392, - 393, 394, 414, 415, 416, 419, 422, 423, 426, 428, - 429, 432, 437, 441, 442, 443, 445, 447, 449, 462, - 467, 481, 482, 483, 484, 485, 488, 489, 495, 496, - 497, 498, 499, 507, 508, 513, 514, 515, 516, 527, - 598, 600, 617, 637, 644, 487, 389, 435, 459, 591, - 304, 305, 450, 451, 318, 319, 658, 659, 303, 612, - 645, 609, 657, 639, 444, 382, 0, 0, 385, 284, - 308, 324, 0, 629, 509, 229, 473, 293, 253, 0, - 0, 213, 248, 232, 262, 277, 280, 328, 396, 405, - 434, 440, 299, 274, 246, 466, 243, 492, 530, 531, - 532, 534, 400, 269, 439, 1797, 0, 380, 587, 588, - 320, 0, 0, 0, 539, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 421, 0, 0, 1799, - 0, 0, 0, 0, 273, 0, 0, 0, 0, 370, - 270, 0, 0, 206, 512, 0, 436, 0, 205, 0, - 494, 255, 381, 378, 595, 285, 276, 272, 252, 321, - 390, 433, 529, 427, 0, 374, 0, 0, 504, 406, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 327, 250, - 329, 204, 418, 505, 289, 0, 0, 0, 0, 1801, - 518, 736, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 240, 0, 0, 247, 0, 0, 0, 355, 364, - 363, 343, 344, 346, 348, 354, 361, 367, 340, 349, - 0, 0, 621, 0, 0, 0, 268, 325, 275, 267, - 592, 0, 0, 0, 0, 0, 0, 608, 0, 0, - 231, 0, 0, 0, 1494, 0, 1495, 1496, 0, 0, - 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 300, 0, 407, - 260, 0, 460, 0, 0, 0, 641, 0, 0, 0, - 0, 0, 0, 0, 369, 0, 334, 199, 227, 0, - 0, 417, 468, 480, 0, 0, 0, 256, 0, 478, - 431, 616, 235, 287, 465, 438, 476, 446, 290, 0, - 0, 477, 376, 597, 456, 613, 642, 643, 266, 411, - 627, 533, 635, 660, 228, 263, 425, 517, 619, 501, - 402, 593, 594, 333, 500, 298, 203, 373, 648, 226, - 486, 375, 244, 233, 599, 624, 302, 254, 292, 463, - 655, 215, 528, 610, 241, 490, 0, 0, 663, 249, - 511, 622, 611, 217, 606, 510, 398, 330, 331, 216, - 0, 464, 271, 296, 0, 0, 261, 420, 601, 602, - 259, 664, 230, 634, 222, 0, 633, 413, 596, 607, - 399, 387, 221, 605, 397, 386, 338, 359, 360, 283, - 310, 453, 379, 454, 309, 311, 409, 408, 410, 209, - 620, 638, 0, 210, 0, 506, 623, 665, 458, 214, - 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, - 317, 371, 424, 452, 448, 457, 0, 590, 614, 628, - 640, 646, 647, 649, 650, 651, 652, 653, 656, 654, - 412, 315, 502, 337, 377, 0, 0, 430, 479, 242, - 618, 503, 201, 0, 0, 0, 0, 257, 258, 0, - 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, - 676, 677, 678, 679, 680, 681, 682, 683, 661, 519, - 525, 520, 521, 522, 523, 524, 0, 526, 0, 0, - 0, 0, 0, 403, 0, 603, 604, 684, 388, 493, - 615, 339, 353, 356, 345, 365, 0, 366, 341, 342, - 347, 350, 351, 352, 357, 358, 362, 368, 251, 212, - 395, 404, 589, 316, 218, 219, 220, 535, 536, 537, - 538, 631, 632, 636, 207, 469, 470, 471, 472, 295, - 626, 312, 475, 474, 335, 336, 383, 455, 551, 553, - 564, 568, 570, 572, 578, 581, 552, 554, 565, 569, - 571, 573, 579, 582, 541, 543, 545, 547, 560, 559, - 556, 584, 585, 562, 567, 546, 558, 563, 576, 583, - 580, 540, 544, 548, 557, 575, 574, 555, 566, 577, - 561, 549, 542, 550, 0, 198, 223, 372, 0, 461, - 291, 662, 630, 491, 625, 208, 225, 0, 265, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, - 288, 301, 313, 314, 322, 323, 326, 332, 384, 391, - 392, 393, 394, 414, 415, 416, 419, 422, 423, 426, - 428, 429, 432, 437, 441, 442, 443, 445, 447, 449, - 462, 467, 481, 482, 483, 484, 485, 488, 489, 495, - 496, 497, 498, 499, 507, 508, 513, 514, 515, 516, - 527, 598, 600, 617, 637, 644, 487, 389, 435, 459, - 591, 304, 305, 450, 451, 318, 319, 658, 659, 303, - 612, 645, 609, 657, 639, 444, 382, 0, 0, 385, - 284, 308, 324, 0, 629, 509, 229, 473, 293, 253, - 0, 0, 213, 248, 232, 262, 277, 280, 328, 396, - 405, 434, 440, 299, 274, 246, 466, 243, 492, 530, - 531, 532, 534, 400, 269, 439, 401, 0, 380, 587, - 588, 320, 0, 0, 0, 539, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, - 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, - 370, 270, 0, 0, 206, 512, 0, 436, 0, 205, - 0, 494, 255, 381, 378, 595, 285, 276, 272, 252, - 321, 390, 433, 529, 427, 0, 374, 0, 0, 504, - 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, - 250, 329, 204, 418, 505, 289, 0, 95, 0, 0, - 0, 518, 196, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 240, 0, 0, 247, 0, 0, 0, 355, - 364, 363, 343, 344, 346, 348, 354, 361, 367, 340, - 349, 0, 0, 621, 0, 0, 0, 268, 325, 275, - 267, 592, 0, 0, 0, 0, 0, 0, 608, 0, - 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, - 407, 260, 0, 460, 0, 0, 0, 641, 0, 0, - 0, 0, 0, 0, 0, 369, 0, 334, 199, 227, - 0, 0, 417, 468, 480, 0, 0, 0, 256, 0, - 478, 431, 616, 235, 287, 465, 438, 476, 446, 290, - 0, 0, 477, 376, 597, 456, 613, 642, 643, 266, - 411, 627, 533, 635, 660, 228, 263, 425, 517, 619, - 501, 402, 593, 594, 333, 500, 298, 203, 373, 648, - 226, 486, 375, 244, 233, 599, 624, 302, 254, 292, - 463, 655, 215, 528, 610, 241, 490, 0, 0, 663, - 249, 511, 622, 611, 217, 606, 510, 398, 330, 331, - 216, 0, 464, 271, 296, 0, 0, 261, 420, 601, - 602, 259, 664, 230, 634, 222, 0, 633, 413, 596, - 607, 399, 387, 221, 605, 397, 386, 338, 359, 360, - 283, 310, 453, 379, 454, 309, 311, 409, 408, 410, - 209, 620, 638, 0, 210, 0, 506, 623, 665, 458, - 214, 236, 237, 239, 0, 282, 286, 294, 297, 306, - 307, 317, 371, 424, 452, 448, 457, 0, 590, 614, - 628, 640, 646, 647, 649, 650, 651, 652, 653, 656, - 654, 412, 315, 502, 337, 377, 0, 0, 430, 479, - 242, 618, 503, 201, 0, 0, 0, 0, 257, 258, - 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 666, 667, 668, 669, 670, 671, 672, 673, 674, - 675, 676, 677, 678, 679, 680, 681, 682, 683, 661, - 519, 525, 520, 521, 522, 523, 524, 0, 526, 0, - 0, 0, 0, 0, 403, 0, 603, 604, 684, 388, - 493, 615, 339, 353, 356, 345, 365, 0, 366, 341, - 342, 347, 350, 351, 352, 357, 358, 362, 368, 251, - 212, 395, 404, 589, 316, 218, 219, 220, 535, 536, - 537, 538, 631, 632, 636, 207, 469, 470, 471, 472, - 295, 626, 312, 475, 474, 335, 336, 383, 455, 551, - 553, 564, 568, 570, 572, 578, 581, 552, 554, 565, - 569, 571, 573, 579, 582, 541, 543, 545, 547, 560, - 559, 556, 584, 585, 562, 567, 546, 558, 563, 576, - 583, 580, 540, 544, 548, 557, 575, 574, 555, 566, - 577, 561, 549, 542, 550, 0, 198, 223, 372, 0, - 461, 291, 662, 630, 491, 625, 208, 225, 0, 265, - 0, 0, 0, 0, 0, 0, 2449, 0, 0, 2448, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 200, 202, 211, 224, 234, 238, 245, 264, 279, - 281, 288, 301, 313, 314, 322, 323, 326, 332, 384, - 391, 392, 393, 394, 414, 415, 416, 419, 422, 423, - 426, 428, 429, 432, 437, 441, 442, 443, 445, 447, - 449, 462, 467, 481, 482, 483, 484, 485, 488, 489, - 495, 496, 497, 498, 499, 507, 508, 513, 514, 515, - 516, 527, 598, 600, 617, 637, 644, 487, 389, 435, - 459, 591, 304, 305, 450, 451, 318, 319, 658, 659, - 303, 612, 645, 609, 657, 639, 444, 382, 0, 0, - 385, 284, 308, 324, 0, 629, 509, 229, 473, 293, - 253, 0, 0, 213, 248, 232, 262, 277, 280, 328, - 396, 405, 434, 440, 299, 274, 246, 466, 243, 492, - 530, 531, 532, 534, 400, 269, 439, 401, 0, 380, - 587, 588, 320, 0, 0, 0, 539, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, - 0, 2394, 0, 0, 0, 0, 273, 0, 0, 0, - 0, 370, 270, 0, 0, 206, 512, 0, 436, 0, - 205, 0, 494, 255, 381, 378, 595, 285, 276, 272, - 252, 321, 390, 433, 529, 427, 0, 374, 0, 0, - 504, 406, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 327, 250, 329, 204, 418, 505, 289, 0, 0, 0, - 0, 1982, 518, 196, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 240, 0, 0, 247, 0, 0, 0, - 355, 364, 363, 343, 344, 346, 348, 354, 361, 367, - 340, 349, 0, 0, 621, 0, 0, 0, 268, 325, - 275, 267, 592, 0, 0, 0, 0, 0, 0, 608, - 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, - 0, 407, 260, 0, 460, 0, 0, 0, 641, 0, - 0, 0, 0, 0, 0, 0, 369, 0, 334, 199, - 227, 0, 0, 417, 468, 480, 0, 0, 0, 256, - 0, 478, 431, 616, 235, 287, 465, 438, 476, 446, - 290, 0, 2392, 477, 376, 597, 456, 613, 642, 643, - 266, 411, 627, 533, 635, 660, 228, 263, 425, 517, - 619, 501, 402, 593, 594, 333, 500, 298, 203, 373, - 648, 226, 486, 375, 244, 233, 599, 624, 302, 254, - 292, 463, 655, 215, 528, 610, 241, 490, 0, 0, - 663, 249, 511, 622, 611, 217, 606, 510, 398, 330, - 331, 216, 0, 464, 271, 296, 0, 0, 261, 420, - 601, 602, 259, 664, 230, 634, 222, 0, 633, 413, - 596, 607, 399, 387, 221, 605, 397, 386, 338, 359, - 360, 283, 310, 453, 379, 454, 309, 311, 409, 408, - 410, 209, 620, 638, 0, 210, 0, 506, 623, 665, - 458, 214, 236, 237, 239, 0, 282, 286, 294, 297, - 306, 307, 317, 371, 424, 452, 448, 457, 0, 590, - 614, 628, 640, 646, 647, 649, 650, 651, 652, 653, - 656, 654, 412, 315, 502, 337, 377, 0, 0, 430, - 479, 242, 618, 503, 201, 0, 0, 0, 0, 257, - 258, 0, 586, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 666, 667, 668, 669, 670, 671, 672, 673, - 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, - 661, 519, 525, 520, 521, 522, 523, 524, 0, 526, - 0, 0, 0, 0, 0, 403, 0, 603, 604, 684, - 388, 493, 615, 339, 353, 356, 345, 365, 0, 366, - 341, 342, 347, 350, 351, 352, 357, 358, 362, 368, - 251, 212, 395, 404, 589, 316, 218, 219, 220, 535, - 536, 537, 538, 631, 632, 636, 207, 469, 470, 471, - 472, 295, 626, 312, 475, 474, 335, 336, 383, 455, - 551, 553, 564, 568, 570, 572, 578, 581, 552, 554, - 565, 569, 571, 573, 579, 582, 541, 543, 545, 547, - 560, 559, 556, 584, 585, 562, 567, 546, 558, 563, - 576, 583, 580, 540, 544, 548, 557, 575, 574, 555, - 566, 577, 561, 549, 542, 550, 0, 198, 223, 372, - 0, 461, 291, 662, 630, 491, 625, 208, 225, 0, - 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, - 279, 281, 288, 301, 313, 314, 322, 323, 326, 332, - 384, 391, 392, 393, 394, 414, 415, 416, 419, 422, - 423, 426, 428, 429, 432, 437, 441, 442, 443, 445, - 447, 449, 462, 467, 481, 482, 483, 484, 485, 488, - 489, 495, 496, 497, 498, 499, 507, 508, 513, 514, - 515, 516, 527, 598, 600, 617, 637, 644, 487, 389, - 435, 459, 591, 304, 305, 450, 451, 318, 319, 658, - 659, 303, 612, 645, 609, 657, 639, 444, 382, 0, - 0, 385, 284, 308, 324, 0, 629, 509, 229, 473, - 293, 253, 0, 0, 213, 248, 232, 262, 277, 280, - 328, 396, 405, 434, 440, 299, 274, 246, 466, 243, - 492, 530, 531, 532, 534, 400, 269, 439, 401, 0, - 380, 587, 588, 320, 0, 0, 0, 539, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, - 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, - 0, 0, 370, 270, 0, 0, 206, 512, 0, 436, - 0, 205, 0, 494, 255, 381, 378, 595, 285, 276, - 272, 252, 321, 390, 433, 529, 427, 0, 374, 0, - 0, 504, 406, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 327, 250, 329, 204, 418, 505, 289, 0, 0, - 0, 0, 0, 518, 736, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 240, 0, 0, 247, 0, 0, - 0, 355, 364, 363, 343, 344, 346, 348, 354, 361, - 367, 340, 349, 0, 0, 621, 0, 0, 0, 268, - 325, 275, 267, 592, 0, 0, 0, 0, 0, 0, - 608, 0, 0, 231, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, - 0, 0, 0, 0, 0, 0, 0, 1107, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 300, 0, 407, 260, 0, 460, 0, 0, 0, 641, - 0, 0, 0, 0, 0, 0, 0, 369, 1113, 334, - 199, 227, 1111, 0, 417, 468, 480, 0, 0, 0, - 256, 0, 478, 431, 616, 235, 287, 465, 438, 476, - 446, 290, 0, 0, 477, 376, 597, 456, 613, 642, - 643, 266, 411, 627, 533, 635, 660, 228, 263, 425, - 517, 619, 501, 402, 593, 594, 333, 500, 298, 203, - 373, 648, 226, 486, 375, 244, 233, 599, 624, 302, - 254, 292, 463, 655, 215, 528, 610, 241, 490, 0, - 0, 663, 249, 511, 622, 611, 217, 606, 510, 398, - 330, 331, 216, 0, 464, 271, 296, 0, 0, 261, - 420, 601, 602, 259, 664, 230, 634, 222, 0, 633, - 413, 596, 607, 399, 387, 221, 605, 397, 386, 338, - 359, 360, 283, 310, 453, 379, 454, 309, 311, 409, - 408, 410, 209, 620, 638, 0, 210, 0, 506, 623, - 665, 458, 214, 236, 237, 239, 0, 282, 286, 294, - 297, 306, 307, 317, 371, 424, 452, 448, 457, 0, - 590, 614, 628, 640, 646, 647, 649, 650, 651, 652, - 653, 656, 654, 412, 315, 502, 337, 377, 0, 0, - 430, 479, 242, 618, 503, 201, 0, 0, 0, 0, - 257, 258, 0, 586, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 666, 667, 668, 669, 670, 671, 672, - 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, - 683, 661, 519, 525, 520, 521, 522, 523, 524, 0, - 526, 0, 0, 0, 0, 0, 403, 0, 603, 604, - 684, 388, 493, 615, 339, 353, 356, 345, 365, 0, - 366, 341, 342, 347, 350, 351, 352, 357, 358, 362, - 368, 251, 212, 395, 404, 589, 316, 218, 219, 220, - 535, 536, 537, 538, 631, 632, 636, 207, 469, 470, - 471, 472, 295, 626, 312, 475, 474, 335, 336, 383, - 455, 551, 553, 564, 568, 570, 572, 578, 581, 552, - 554, 565, 569, 571, 573, 579, 582, 541, 543, 545, - 547, 560, 559, 556, 584, 585, 562, 567, 546, 558, - 563, 576, 583, 580, 540, 544, 548, 557, 575, 574, - 555, 566, 577, 561, 549, 542, 550, 0, 198, 223, - 372, 0, 461, 291, 662, 630, 491, 625, 208, 225, - 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 200, 202, 211, 224, 234, 238, 245, - 264, 279, 281, 288, 301, 313, 314, 322, 323, 326, - 332, 384, 391, 392, 393, 394, 414, 415, 416, 419, - 422, 423, 426, 428, 429, 432, 437, 441, 442, 443, - 445, 447, 449, 462, 467, 481, 482, 483, 484, 485, - 488, 489, 495, 496, 497, 498, 499, 507, 508, 513, - 514, 515, 516, 527, 598, 600, 617, 637, 644, 487, - 389, 435, 459, 591, 304, 305, 450, 451, 318, 319, - 658, 659, 303, 612, 645, 609, 657, 639, 444, 382, - 0, 0, 385, 284, 308, 324, 0, 629, 509, 229, - 473, 293, 253, 0, 0, 213, 248, 232, 262, 277, - 280, 328, 396, 405, 434, 440, 299, 274, 246, 466, - 243, 492, 530, 531, 532, 534, 400, 269, 439, 401, - 0, 380, 587, 588, 320, 0, 0, 0, 539, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 421, 0, 0, 2394, 0, 0, 0, 0, 273, 0, - 0, 0, 0, 370, 270, 0, 0, 206, 512, 0, - 436, 0, 205, 0, 494, 255, 381, 378, 595, 285, - 276, 272, 252, 321, 390, 433, 529, 427, 0, 374, - 0, 0, 504, 406, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 327, 250, 329, 204, 418, 505, 289, 0, - 0, 0, 0, 1982, 518, 196, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 240, 0, 0, 247, 0, - 0, 0, 355, 364, 363, 343, 344, 346, 348, 354, - 361, 367, 340, 349, 0, 0, 621, 0, 0, 0, - 268, 325, 275, 267, 592, 0, 0, 0, 0, 0, - 0, 608, 0, 0, 231, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 300, 0, 407, 260, 0, 460, 0, 0, 0, - 641, 0, 0, 0, 0, 0, 0, 0, 369, 0, - 334, 199, 227, 0, 0, 417, 468, 480, 0, 0, - 0, 256, 0, 478, 431, 616, 235, 287, 465, 438, - 476, 446, 290, 0, 0, 477, 376, 597, 456, 613, - 642, 643, 266, 411, 627, 533, 635, 660, 228, 263, - 425, 517, 619, 501, 402, 593, 594, 333, 500, 298, - 203, 373, 648, 226, 486, 375, 244, 233, 599, 624, - 302, 254, 292, 463, 655, 215, 528, 610, 241, 490, - 0, 0, 663, 249, 511, 622, 611, 217, 606, 510, - 398, 330, 331, 216, 0, 464, 271, 296, 0, 0, - 261, 420, 601, 602, 259, 664, 230, 634, 222, 0, - 633, 413, 596, 607, 399, 387, 221, 605, 397, 386, - 338, 359, 360, 283, 310, 453, 379, 454, 309, 311, - 409, 408, 410, 209, 620, 638, 0, 210, 0, 506, - 623, 665, 458, 214, 236, 237, 239, 0, 282, 286, - 294, 297, 306, 307, 317, 371, 424, 452, 448, 457, - 0, 590, 614, 628, 640, 646, 647, 649, 650, 651, - 652, 653, 656, 654, 412, 315, 502, 337, 377, 0, - 0, 430, 479, 242, 618, 503, 201, 0, 0, 0, - 0, 257, 258, 0, 586, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 666, 667, 668, 669, 670, 671, - 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, - 682, 683, 661, 519, 525, 520, 521, 522, 523, 524, - 0, 526, 0, 0, 0, 0, 0, 403, 0, 603, - 604, 684, 388, 493, 615, 339, 353, 356, 345, 365, - 0, 366, 341, 342, 347, 350, 351, 352, 357, 358, - 362, 368, 251, 212, 395, 404, 589, 316, 218, 219, - 220, 535, 536, 537, 538, 631, 632, 636, 207, 469, - 470, 471, 472, 295, 626, 312, 475, 474, 335, 336, - 383, 455, 551, 553, 564, 568, 570, 572, 578, 581, - 552, 554, 565, 569, 571, 573, 579, 582, 541, 543, - 545, 547, 560, 559, 556, 584, 585, 562, 567, 546, - 558, 563, 576, 583, 580, 540, 544, 548, 557, 575, - 574, 555, 566, 577, 561, 549, 542, 550, 0, 198, - 223, 372, 0, 461, 291, 662, 630, 491, 625, 208, - 225, 0, 265, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 200, 202, 211, 224, 234, 238, - 245, 264, 279, 281, 288, 301, 313, 314, 322, 323, - 326, 332, 384, 391, 392, 393, 394, 414, 415, 416, - 419, 422, 423, 426, 428, 429, 432, 437, 441, 442, - 443, 445, 447, 449, 462, 467, 481, 482, 483, 484, - 485, 488, 489, 495, 496, 497, 498, 499, 507, 508, - 513, 514, 515, 516, 527, 598, 600, 617, 637, 644, - 487, 389, 435, 459, 591, 304, 305, 450, 451, 318, - 319, 658, 659, 303, 612, 645, 609, 657, 639, 444, - 382, 0, 0, 385, 284, 308, 324, 0, 629, 509, - 229, 473, 293, 253, 0, 0, 213, 248, 232, 262, - 277, 280, 328, 396, 405, 434, 440, 299, 274, 246, - 466, 243, 492, 530, 531, 532, 534, 400, 269, 439, - 401, 0, 380, 587, 588, 320, 0, 0, 0, 539, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 421, 0, 0, 0, 0, 0, 0, 0, 273, - 0, 0, 0, 0, 370, 270, 0, 0, 206, 512, - 0, 436, 0, 205, 0, 494, 255, 381, 378, 595, - 285, 276, 272, 252, 321, 390, 433, 529, 427, 0, - 374, 0, 0, 504, 406, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 327, 250, 329, 204, 418, 505, 289, - 0, 0, 0, 1769, 0, 518, 736, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 240, 0, 0, 247, - 0, 0, 0, 355, 364, 363, 343, 344, 346, 348, - 354, 361, 367, 340, 349, 0, 0, 621, 0, 0, - 0, 268, 325, 275, 267, 592, 0, 0, 0, 0, - 0, 0, 608, 0, 0, 231, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 300, 0, 407, 260, 0, 460, 0, 0, - 0, 641, 0, 0, 0, 3756, 0, 0, 0, 369, - 0, 334, 199, 227, 0, 0, 417, 468, 480, 0, - 0, 0, 256, 0, 478, 431, 616, 235, 287, 465, - 438, 476, 446, 290, 0, 0, 477, 376, 597, 456, - 613, 642, 643, 266, 411, 627, 533, 635, 660, 228, - 263, 425, 517, 619, 501, 402, 593, 594, 333, 500, - 298, 203, 373, 648, 226, 486, 375, 244, 233, 599, - 624, 302, 254, 292, 463, 655, 215, 528, 610, 241, - 490, 0, 0, 663, 249, 511, 622, 611, 217, 606, - 510, 398, 330, 331, 216, 0, 464, 271, 296, 0, - 0, 261, 420, 601, 602, 259, 664, 230, 634, 222, - 0, 633, 413, 596, 607, 399, 387, 221, 605, 397, - 386, 338, 359, 360, 283, 310, 453, 379, 454, 309, - 311, 409, 408, 410, 209, 620, 638, 0, 210, 0, - 506, 623, 665, 458, 214, 236, 237, 239, 0, 282, - 286, 294, 297, 306, 307, 317, 371, 424, 452, 448, - 457, 0, 590, 614, 628, 640, 646, 647, 649, 650, - 651, 652, 653, 656, 654, 412, 315, 502, 337, 377, - 0, 0, 430, 479, 242, 618, 503, 201, 0, 0, - 0, 0, 257, 258, 0, 586, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 666, 667, 668, 669, 670, - 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, - 681, 682, 683, 661, 519, 525, 520, 521, 522, 523, - 524, 0, 526, 0, 0, 0, 0, 0, 403, 0, - 603, 604, 684, 388, 493, 615, 339, 353, 356, 345, - 365, 0, 366, 341, 342, 347, 350, 351, 352, 357, - 358, 362, 368, 251, 212, 395, 404, 589, 316, 218, - 219, 220, 535, 536, 537, 538, 631, 632, 636, 207, - 469, 470, 471, 472, 295, 626, 312, 475, 474, 335, - 336, 383, 455, 551, 553, 564, 568, 570, 572, 578, - 581, 552, 554, 565, 569, 571, 573, 579, 582, 541, - 543, 545, 547, 560, 559, 556, 584, 585, 562, 567, - 546, 558, 563, 576, 583, 580, 540, 544, 548, 557, - 575, 574, 555, 566, 577, 561, 549, 542, 550, 0, - 198, 223, 372, 0, 461, 291, 662, 630, 491, 625, - 208, 225, 0, 265, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 200, 202, 211, 224, 234, - 238, 245, 264, 279, 281, 288, 301, 313, 314, 322, - 323, 326, 332, 384, 391, 392, 393, 394, 414, 415, - 416, 419, 422, 423, 426, 428, 429, 432, 437, 441, - 442, 443, 445, 447, 449, 462, 467, 481, 482, 483, - 484, 485, 488, 489, 495, 496, 497, 498, 499, 507, - 508, 513, 514, 515, 516, 527, 598, 600, 617, 637, - 644, 487, 389, 435, 459, 591, 304, 305, 450, 451, - 318, 319, 658, 659, 303, 612, 645, 609, 657, 639, - 444, 382, 0, 0, 385, 284, 308, 324, 0, 629, - 509, 229, 473, 293, 253, 0, 0, 213, 248, 232, - 262, 277, 280, 328, 396, 405, 434, 440, 299, 274, - 246, 466, 243, 492, 530, 531, 532, 534, 400, 269, - 439, 401, 0, 380, 587, 588, 320, 0, 0, 0, - 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, - 273, 0, 0, 0, 0, 370, 270, 0, 0, 206, - 512, 0, 436, 0, 205, 0, 494, 255, 381, 378, - 595, 285, 276, 272, 252, 321, 390, 433, 529, 427, - 0, 374, 0, 0, 504, 406, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 327, 250, 329, 204, 418, 505, - 289, 0, 0, 0, 0, 2153, 518, 736, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, - 247, 0, 0, 0, 355, 364, 363, 343, 344, 346, - 348, 354, 361, 367, 340, 349, 0, 0, 621, 0, - 0, 0, 268, 325, 275, 267, 592, 0, 0, 0, - 0, 0, 0, 608, 0, 0, 231, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, + 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, + 1054, 1055, 802, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, + 319, 334, 0, 0, 0, 0, 0, 0, 0, 950, + 0, 0, 661, 0, 0, 948, 0, 0, 0, 0, + 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, + 0, 0, 0, 0, 1001, 0, 495, 448, 636, 243, + 300, 482, 455, 493, 463, 303, 0, 0, 494, 391, + 617, 473, 633, 662, 663, 279, 428, 647, 551, 655, + 680, 234, 276, 442, 535, 639, 519, 417, 613, 614, + 348, 518, 311, 209, 388, 668, 232, 503, 390, 253, + 241, 619, 644, 315, 267, 305, 480, 675, 221, 546, + 630, 250, 507, 0, 0, 683, 258, 529, 642, 631, + 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, + 309, 0, 0, 274, 437, 1002, 1003, 272, 684, 847, + 654, 228, 0, 653, 430, 616, 627, 414, 402, 227, + 625, 412, 401, 353, 855, 856, 296, 324, 932, 931, + 930, 323, 325, 928, 929, 927, 215, 640, 658, 0, + 216, 0, 524, 643, 685, 475, 220, 244, 245, 248, + 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, + 469, 465, 474, 0, 610, 634, 648, 660, 666, 667, + 669, 670, 671, 672, 673, 676, 674, 429, 329, 520, + 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, + 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, + 266, 938, 960, 949, 813, 814, 939, 940, 964, 941, + 816, 817, 961, 962, 810, 811, 815, 963, 965, 686, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, + 697, 698, 699, 700, 701, 702, 703, 681, 537, 543, + 538, 539, 540, 541, 542, 0, 544, 952, 799, 798, + 0, 805, 806, 0, 835, 836, 838, 844, 845, 846, + 857, 904, 905, 913, 915, 916, 914, 917, 918, 919, + 922, 923, 924, 925, 920, 921, 926, 818, 822, 819, + 820, 821, 833, 823, 824, 825, 826, 827, 828, 829, + 830, 831, 832, 834, 975, 976, 977, 978, 979, 980, + 850, 854, 853, 851, 852, 848, 849, 876, 875, 877, + 878, 879, 880, 881, 882, 884, 883, 885, 886, 887, + 888, 889, 890, 858, 859, 862, 863, 861, 860, 864, + 873, 874, 865, 866, 867, 868, 869, 870, 872, 871, + 891, 892, 893, 894, 895, 897, 896, 900, 901, 899, + 898, 903, 902, 797, 204, 229, 387, 0, 478, 304, + 682, 650, 508, 645, 214, 231, 966, 278, 967, 0, + 0, 971, 0, 0, 0, 973, 972, 0, 974, 936, + 935, 0, 0, 968, 969, 0, 970, 0, 0, 206, + 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, + 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, + 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, + 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, + 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, + 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, + 618, 620, 637, 657, 664, 504, 404, 452, 476, 611, + 0, 0, 981, 982, 983, 984, 985, 986, 987, 988, + 316, 632, 665, 629, 677, 659, 461, 397, 0, 0, + 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, + 265, 1056, 0, 219, 257, 239, 275, 290, 293, 343, + 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, + 548, 549, 550, 552, 415, 282, 456, 416, 0, 395, + 606, 607, 335, 0, 0, 0, 557, 0, 809, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, + 0, 0, 796, 0, 0, 0, 286, 801, 0, 0, + 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, + 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, + 264, 336, 405, 450, 547, 444, 808, 389, 0, 0, + 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, + 803, 804, 0, 0, 0, 0, 0, 0, 0, 0, + 342, 262, 344, 210, 435, 523, 302, 0, 101, 0, + 0, 1057, 536, 991, 1131, 957, 995, 1058, 1009, 1010, + 1011, 996, 0, 249, 997, 998, 256, 999, 0, 956, + 839, 841, 840, 906, 907, 908, 909, 910, 911, 912, + 842, 843, 837, 1004, 641, 1012, 1013, 0, 281, 340, + 288, 280, 612, 0, 0, 0, 0, 0, 0, 628, + 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, + 0, 793, 0, 807, 0, 0, 0, 0, 291, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 790, 791, 0, 0, 0, + 0, 951, 0, 792, 0, 0, 800, 1014, 1015, 1016, + 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, + 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, + 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, + 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 2185, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 950, 0, 0, 661, + 0, 0, 948, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 1001, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 662, 663, 279, 428, 647, 551, 655, 680, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 668, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 675, 221, 546, 630, 250, 507, + 0, 0, 683, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 1002, 1003, 272, 684, 847, 654, 228, 0, + 653, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 855, 856, 296, 324, 932, 931, 930, 323, 325, + 928, 929, 927, 215, 640, 658, 0, 216, 0, 524, + 643, 685, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 660, 666, 667, 669, 670, 671, + 672, 673, 676, 674, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 938, 960, + 949, 813, 814, 939, 940, 964, 941, 816, 817, 961, + 962, 810, 811, 815, 963, 965, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 681, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 952, 799, 798, 0, 805, 806, + 0, 835, 836, 838, 844, 845, 846, 857, 904, 905, + 913, 915, 916, 914, 917, 918, 919, 922, 923, 924, + 925, 920, 921, 926, 818, 822, 819, 820, 821, 833, + 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 834, 975, 976, 977, 978, 979, 980, 850, 854, 853, + 851, 852, 848, 849, 876, 875, 877, 878, 879, 880, + 881, 882, 884, 883, 885, 886, 887, 888, 889, 890, + 858, 859, 862, 863, 861, 860, 864, 873, 874, 865, + 866, 867, 868, 869, 870, 872, 871, 891, 892, 893, + 894, 895, 897, 896, 900, 901, 899, 898, 903, 902, + 797, 204, 229, 387, 0, 478, 304, 682, 650, 508, + 645, 214, 231, 966, 278, 967, 0, 0, 971, 0, + 0, 0, 973, 972, 0, 974, 936, 935, 0, 0, + 968, 969, 0, 970, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 657, 664, 504, 404, 452, 476, 611, 0, 0, 981, + 982, 983, 984, 985, 986, 987, 988, 316, 632, 665, + 629, 677, 659, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 1056, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 416, 0, 395, 606, 607, 335, + 0, 0, 0, 557, 0, 809, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 438, 0, 0, 0, 796, + 0, 0, 0, 286, 801, 0, 0, 0, 385, 283, + 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, + 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, + 450, 547, 444, 808, 389, 0, 0, 522, 422, 0, + 0, 0, 0, 0, 0, 0, 0, 803, 804, 0, + 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, + 210, 435, 523, 302, 0, 101, 0, 0, 1057, 536, + 991, 1131, 957, 995, 1058, 1009, 1010, 1011, 996, 0, + 249, 997, 998, 256, 999, 0, 956, 839, 841, 840, + 906, 907, 908, 909, 910, 911, 912, 842, 843, 837, + 1004, 641, 1012, 1013, 0, 281, 340, 288, 280, 612, + 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, + 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, + 807, 0, 0, 0, 0, 291, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 790, 791, 0, 0, 0, 0, 951, 0, + 792, 0, 0, 800, 1014, 1015, 1016, 1017, 1018, 1019, + 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, + 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, + 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, + 1050, 1051, 1052, 1053, 1054, 1055, 2183, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, + 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, + 0, 0, 0, 950, 0, 0, 661, 0, 0, 948, + 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, + 0, 434, 485, 497, 0, 0, 0, 0, 1001, 0, + 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, + 0, 0, 494, 391, 617, 473, 633, 662, 663, 279, + 428, 647, 551, 655, 680, 234, 276, 442, 535, 639, + 519, 417, 613, 614, 348, 518, 311, 209, 388, 668, + 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, + 480, 675, 221, 546, 630, 250, 507, 0, 0, 683, + 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, + 222, 0, 481, 284, 309, 0, 0, 274, 437, 1002, + 1003, 272, 684, 847, 654, 228, 0, 653, 430, 616, + 627, 414, 402, 227, 625, 412, 401, 353, 855, 856, + 296, 324, 932, 931, 930, 323, 325, 928, 929, 927, + 215, 640, 658, 0, 216, 0, 524, 643, 685, 475, + 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, + 321, 331, 386, 441, 469, 465, 474, 0, 610, 634, + 648, 660, 666, 667, 669, 670, 671, 672, 673, 676, + 674, 429, 329, 520, 352, 392, 0, 0, 447, 496, + 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, + 235, 512, 609, 246, 266, 938, 960, 949, 813, 814, + 939, 940, 964, 941, 816, 817, 961, 962, 810, 811, + 815, 963, 965, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 681, 537, 543, 538, 539, 540, 541, 542, 0, + 544, 952, 799, 798, 0, 805, 806, 0, 835, 836, + 838, 844, 845, 846, 857, 904, 905, 913, 915, 916, + 914, 917, 918, 919, 922, 923, 924, 925, 920, 921, + 926, 818, 822, 819, 820, 821, 833, 823, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 834, 975, 976, + 977, 978, 979, 980, 850, 854, 853, 851, 852, 848, + 849, 876, 875, 877, 878, 879, 880, 881, 882, 884, + 883, 885, 886, 887, 888, 889, 890, 858, 859, 862, + 863, 861, 860, 864, 873, 874, 865, 866, 867, 868, + 869, 870, 872, 871, 891, 892, 893, 894, 895, 897, + 896, 900, 901, 899, 898, 903, 902, 797, 204, 229, + 387, 0, 478, 304, 682, 650, 508, 645, 214, 231, + 966, 278, 967, 0, 0, 971, 0, 0, 0, 973, + 972, 0, 974, 936, 935, 0, 0, 968, 969, 0, + 970, 0, 0, 206, 208, 217, 230, 242, 247, 254, + 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, + 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, + 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, + 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, + 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, + 532, 533, 534, 545, 618, 620, 637, 657, 664, 504, + 404, 452, 476, 611, 0, 0, 981, 982, 983, 984, + 985, 986, 987, 988, 316, 632, 665, 629, 677, 659, + 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, + 527, 236, 490, 306, 265, 1056, 0, 219, 257, 239, + 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, + 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, + 456, 416, 0, 395, 606, 607, 335, 0, 0, 0, + 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, + 286, 0, 0, 0, 0, 385, 283, 0, 0, 212, + 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, + 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, + 0, 389, 0, 0, 522, 422, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, + 302, 0, 0, 0, 0, 0, 536, 756, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, + 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, + 363, 369, 376, 382, 355, 364, 0, 0, 641, 0, + 0, 0, 281, 340, 288, 280, 612, 0, 0, 0, + 0, 0, 0, 628, 0, 0, 238, 0, 1174, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, + 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1173, 661, 0, 0, 0, 0, 0, 1170, + 1171, 384, 1139, 349, 205, 233, 1164, 1168, 434, 485, + 497, 0, 0, 0, 0, 269, 0, 495, 448, 636, + 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, + 391, 617, 473, 633, 662, 663, 279, 428, 647, 551, + 655, 680, 234, 276, 442, 535, 639, 519, 417, 613, + 614, 348, 518, 311, 209, 388, 668, 232, 503, 390, + 253, 241, 619, 644, 315, 267, 305, 480, 675, 221, + 546, 630, 250, 507, 0, 0, 683, 258, 529, 642, + 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, + 284, 309, 0, 0, 274, 437, 621, 622, 272, 684, + 237, 654, 228, 0, 653, 430, 616, 627, 414, 402, + 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, + 394, 471, 323, 325, 425, 424, 426, 215, 640, 658, + 0, 216, 0, 524, 643, 685, 475, 220, 244, 245, + 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, + 441, 469, 465, 474, 0, 610, 634, 648, 660, 666, + 667, 669, 670, 671, 672, 673, 676, 674, 429, 329, + 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, + 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, + 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, + 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, + 696, 697, 698, 699, 700, 701, 702, 703, 681, 537, + 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, + 0, 0, 0, 419, 0, 623, 624, 704, 403, 510, + 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, + 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, + 410, 420, 608, 330, 224, 225, 226, 553, 554, 555, + 556, 651, 652, 656, 213, 486, 487, 488, 489, 308, + 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, + 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, + 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, + 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, + 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, + 579, 567, 560, 568, 0, 204, 229, 387, 0, 478, + 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, + 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, + 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, + 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, + 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, + 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, + 545, 618, 620, 637, 657, 664, 504, 404, 452, 476, + 611, 0, 0, 317, 318, 467, 468, 332, 333, 678, + 679, 316, 632, 665, 629, 677, 659, 461, 397, 0, + 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, + 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, + 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, + 509, 548, 549, 550, 552, 415, 282, 456, 416, 0, + 395, 606, 607, 335, 0, 0, 91, 557, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, + 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, + 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, + 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, + 285, 264, 336, 405, 450, 547, 444, 103, 389, 0, + 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 342, 262, 344, 210, 435, 523, 302, 0, 101, + 0, 0, 0, 536, 202, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, + 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, + 382, 355, 364, 0, 0, 641, 0, 0, 0, 281, + 340, 288, 280, 612, 0, 0, 0, 0, 0, 0, + 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 661, 0, 0, 0, 0, 0, 0, 0, 384, 0, + 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, + 0, 0, 269, 0, 495, 448, 636, 243, 300, 482, + 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, + 633, 662, 663, 279, 428, 647, 551, 655, 680, 234, + 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, + 311, 209, 388, 668, 232, 503, 390, 253, 241, 619, + 644, 315, 267, 305, 480, 675, 221, 546, 630, 250, + 507, 0, 0, 683, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 684, 237, 654, 228, + 0, 653, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 658, 0, 216, 0, + 524, 643, 685, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 660, 666, 667, 669, 670, + 671, 672, 673, 676, 674, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, + 699, 700, 701, 702, 703, 681, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 704, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 651, 652, + 656, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 100, 478, 304, 682, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, + 0, 0, 2502, 0, 0, 2501, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 657, 664, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 678, 679, 316, 632, + 665, 629, 677, 659, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 416, 0, 395, 606, 607, + 335, 0, 0, 0, 557, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 0, 522, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 0, + 536, 756, 0, 0, 0, 0, 4390, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 4388, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, + 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, + 4389, 4257, 4387, 0, 0, 0, 0, 661, 0, 0, + 0, 0, 0, 0, 0, 384, 0, 349, 205, 233, + 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, + 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, + 303, 0, 0, 494, 391, 617, 473, 633, 662, 663, + 279, 428, 647, 551, 655, 680, 234, 276, 442, 535, + 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, + 668, 232, 503, 390, 253, 241, 619, 644, 315, 267, + 305, 480, 675, 221, 546, 630, 250, 507, 0, 0, + 683, 258, 529, 642, 631, 223, 626, 528, 413, 345, + 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, + 621, 622, 272, 684, 237, 654, 228, 0, 653, 430, + 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, + 375, 296, 324, 470, 394, 471, 323, 325, 425, 424, + 426, 215, 640, 658, 0, 216, 0, 524, 643, 685, + 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, + 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, + 634, 648, 660, 666, 667, 669, 670, 671, 672, 673, + 676, 674, 429, 329, 520, 352, 392, 0, 0, 447, + 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, + 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, + 0, 270, 271, 0, 605, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 686, 687, 688, 689, 690, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 681, 537, 543, 538, 539, 540, 541, 542, + 0, 544, 0, 0, 0, 0, 0, 419, 0, 623, + 624, 704, 403, 510, 635, 354, 368, 371, 360, 380, + 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, + 377, 383, 263, 218, 410, 420, 608, 330, 224, 225, + 226, 553, 554, 555, 556, 651, 652, 656, 213, 486, + 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, + 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, + 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, + 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, + 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, + 592, 573, 584, 595, 579, 567, 560, 568, 0, 204, + 229, 387, 0, 478, 304, 682, 650, 508, 645, 214, + 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 206, 208, 217, 230, 242, 247, + 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, + 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, + 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, + 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, + 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, + 531, 532, 533, 534, 545, 618, 620, 637, 657, 664, + 504, 404, 452, 476, 611, 0, 0, 317, 318, 467, + 468, 332, 333, 678, 679, 316, 632, 665, 629, 677, + 659, 461, 397, 0, 0, 400, 297, 322, 339, 0, + 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, + 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, + 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, + 282, 456, 416, 0, 395, 606, 607, 335, 0, 0, + 91, 557, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, + 0, 286, 0, 0, 0, 0, 385, 283, 0, 0, + 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, + 393, 615, 298, 289, 285, 264, 336, 405, 450, 547, + 444, 103, 389, 0, 0, 522, 422, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 342, 262, 344, 210, 435, + 523, 302, 0, 101, 0, 1804, 0, 536, 756, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, + 0, 256, 0, 0, 0, 370, 379, 378, 358, 359, + 361, 363, 369, 376, 382, 355, 364, 0, 0, 641, + 0, 0, 0, 281, 340, 288, 280, 612, 0, 0, + 0, 0, 0, 0, 628, 0, 0, 238, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, + 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, + 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, + 485, 497, 0, 0, 0, 0, 269, 0, 495, 448, + 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, + 494, 391, 617, 473, 633, 662, 663, 279, 428, 647, + 551, 655, 680, 234, 276, 442, 535, 639, 519, 417, + 613, 614, 348, 518, 311, 209, 388, 668, 232, 503, + 390, 253, 241, 619, 644, 315, 267, 305, 480, 675, + 221, 546, 630, 250, 507, 0, 0, 683, 258, 529, + 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, + 481, 284, 309, 0, 0, 274, 437, 621, 622, 272, + 684, 237, 654, 228, 0, 653, 430, 616, 627, 414, + 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, + 470, 394, 471, 323, 325, 425, 424, 426, 215, 640, + 658, 0, 216, 0, 524, 643, 685, 475, 220, 244, + 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, + 386, 441, 469, 465, 474, 0, 610, 634, 648, 660, + 666, 667, 669, 670, 671, 672, 673, 676, 674, 429, + 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, + 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, + 609, 246, 266, 207, 0, 0, 0, 0, 270, 271, + 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 686, 687, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 681, + 537, 543, 538, 539, 540, 541, 542, 0, 544, 0, + 0, 0, 0, 0, 419, 0, 623, 624, 704, 403, + 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, + 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, + 218, 410, 420, 608, 330, 224, 225, 226, 553, 554, + 555, 556, 651, 652, 656, 213, 486, 487, 488, 489, + 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, + 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, + 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, + 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, + 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, + 595, 579, 567, 560, 568, 0, 204, 229, 387, 100, + 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, + 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, + 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, + 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, + 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, + 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, + 534, 545, 618, 620, 637, 657, 664, 504, 404, 452, + 476, 611, 0, 0, 317, 318, 467, 468, 332, 333, + 678, 679, 316, 632, 665, 629, 677, 659, 461, 397, + 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, + 490, 306, 265, 0, 0, 219, 257, 239, 275, 290, + 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, + 252, 509, 548, 549, 550, 552, 415, 282, 456, 1844, + 0, 395, 606, 607, 335, 0, 0, 0, 557, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 438, 0, 0, 1846, 0, 0, 0, 0, 286, 0, + 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, + 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, + 289, 285, 264, 336, 405, 450, 547, 444, 0, 389, + 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, + 0, 0, 0, 1848, 536, 756, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, + 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, + 376, 382, 355, 364, 0, 0, 641, 0, 0, 0, + 281, 340, 288, 280, 612, 0, 0, 0, 0, 0, + 0, 628, 0, 0, 238, 0, 0, 0, 1529, 0, + 1530, 1531, 0, 0, 0, 0, 0, 0, 0, 0, + 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, + 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 661, 0, 0, 0, 0, 0, 0, 0, 384, + 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, + 0, 0, 0, 269, 0, 495, 448, 636, 243, 300, + 482, 455, 493, 463, 303, 0, 0, 494, 391, 617, + 473, 633, 662, 663, 279, 428, 647, 551, 655, 680, + 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, + 518, 311, 209, 388, 668, 232, 503, 390, 253, 241, + 619, 644, 315, 267, 305, 480, 675, 221, 546, 630, + 250, 507, 0, 0, 683, 258, 529, 642, 631, 223, + 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, + 0, 0, 274, 437, 621, 622, 272, 684, 237, 654, + 228, 0, 653, 430, 616, 627, 414, 402, 227, 625, + 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, + 323, 325, 425, 424, 426, 215, 640, 658, 0, 216, + 0, 524, 643, 685, 475, 220, 244, 245, 248, 0, + 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, + 465, 474, 0, 610, 634, 648, 660, 666, 667, 669, + 670, 671, 672, 673, 676, 674, 429, 329, 520, 352, + 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, + 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, + 207, 0, 0, 0, 0, 270, 271, 0, 605, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 700, 701, 702, 703, 681, 537, 543, 538, + 539, 540, 541, 542, 0, 544, 0, 0, 0, 0, + 0, 419, 0, 623, 624, 704, 403, 510, 635, 354, + 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, + 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, + 608, 330, 224, 225, 226, 553, 554, 555, 556, 651, + 652, 656, 213, 486, 487, 488, 489, 308, 646, 326, + 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, + 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, + 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, + 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, + 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, + 560, 568, 0, 204, 229, 387, 0, 478, 304, 682, + 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 206, 208, + 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, + 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, + 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, + 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, + 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, + 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, + 620, 637, 657, 664, 504, 404, 452, 476, 611, 0, + 0, 317, 318, 467, 468, 332, 333, 678, 679, 316, + 632, 665, 629, 677, 659, 461, 397, 0, 0, 400, + 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, + 0, 0, 219, 257, 239, 275, 290, 293, 343, 411, + 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, + 549, 550, 552, 415, 282, 456, 416, 0, 395, 606, + 607, 335, 0, 0, 0, 557, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 0, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 756, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 4251, 4252, + 4253, 0, 0, 0, 0, 0, 0, 0, 661, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 662, + 663, 279, 428, 647, 551, 655, 680, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 668, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 675, 221, 546, 630, 250, 507, 0, + 0, 683, 258, 529, 642, 631, 223, 626, 528, 413, + 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, + 437, 621, 622, 272, 684, 237, 654, 228, 0, 653, + 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, + 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, + 424, 426, 215, 640, 658, 0, 216, 0, 524, 643, + 685, 475, 220, 244, 245, 248, 0, 295, 299, 307, + 310, 320, 321, 331, 386, 441, 469, 465, 474, 0, + 610, 634, 648, 660, 666, 667, 669, 670, 671, 672, + 673, 676, 674, 429, 329, 520, 352, 392, 0, 0, + 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, + 261, 260, 235, 512, 609, 246, 266, 207, 0, 0, + 0, 0, 270, 271, 0, 605, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 686, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 681, 537, 543, 538, 539, 540, 541, + 542, 0, 544, 0, 0, 0, 0, 0, 419, 0, + 623, 624, 704, 403, 510, 635, 354, 368, 371, 360, + 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, + 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, + 225, 226, 553, 554, 555, 556, 651, 652, 656, 213, + 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, + 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, + 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, + 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, + 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, + 593, 592, 573, 584, 595, 579, 567, 560, 568, 0, + 204, 229, 387, 0, 478, 304, 682, 650, 508, 645, + 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 206, 208, 217, 230, 242, + 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, + 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, + 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, + 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, + 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, + 526, 531, 532, 533, 534, 545, 618, 620, 637, 657, + 664, 504, 404, 452, 476, 611, 0, 0, 317, 318, + 467, 468, 332, 333, 678, 679, 316, 632, 665, 629, + 677, 659, 461, 397, 0, 0, 400, 297, 322, 339, + 0, 649, 527, 236, 490, 306, 265, 0, 0, 219, + 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, + 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, + 415, 282, 456, 416, 0, 395, 606, 607, 335, 0, + 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, + 0, 0, 286, 0, 0, 0, 0, 385, 283, 0, + 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, + 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, + 547, 444, 0, 389, 0, 0, 522, 422, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, + 435, 523, 302, 0, 101, 0, 0, 0, 536, 202, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, + 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, + 359, 361, 363, 369, 376, 382, 355, 364, 0, 0, + 641, 0, 0, 0, 281, 340, 288, 280, 612, 0, + 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, + 0, 477, 0, 319, 334, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, + 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, + 434, 485, 497, 0, 0, 0, 0, 269, 0, 495, + 448, 636, 243, 300, 482, 455, 493, 463, 303, 0, + 0, 494, 391, 617, 473, 633, 662, 663, 279, 428, + 647, 551, 655, 680, 234, 276, 442, 535, 639, 519, + 417, 613, 614, 348, 518, 311, 209, 388, 668, 232, + 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, + 675, 221, 546, 630, 250, 507, 0, 0, 683, 258, + 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, + 0, 481, 284, 309, 0, 0, 274, 437, 621, 622, + 272, 684, 237, 654, 228, 0, 653, 430, 616, 627, + 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, + 324, 470, 394, 471, 323, 325, 425, 424, 426, 215, + 640, 658, 0, 216, 0, 524, 643, 685, 475, 220, + 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, + 331, 386, 441, 469, 465, 474, 0, 610, 634, 648, + 660, 666, 667, 669, 670, 671, 672, 673, 676, 674, + 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, + 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, + 512, 609, 246, 266, 207, 0, 0, 0, 0, 270, + 271, 0, 605, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 681, 537, 543, 538, 539, 540, 541, 542, 0, 544, + 0, 0, 0, 0, 0, 419, 0, 623, 624, 704, + 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, + 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, + 263, 218, 410, 420, 608, 330, 224, 225, 226, 553, + 554, 555, 556, 651, 652, 656, 213, 486, 487, 488, + 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, + 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, + 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, + 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, + 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, + 584, 595, 579, 567, 560, 568, 0, 204, 229, 387, + 0, 478, 304, 682, 650, 508, 645, 214, 231, 0, + 278, 0, 0, 0, 0, 0, 0, 2502, 0, 0, + 2501, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, + 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, + 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, + 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, + 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, + 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, + 533, 534, 545, 618, 620, 637, 657, 664, 504, 404, + 452, 476, 611, 0, 0, 317, 318, 467, 468, 332, + 333, 678, 679, 316, 632, 665, 629, 677, 659, 461, + 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, + 236, 490, 306, 265, 0, 0, 219, 257, 239, 275, + 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, + 483, 252, 509, 548, 549, 550, 552, 415, 282, 456, + 416, 0, 395, 606, 607, 335, 0, 0, 0, 557, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 438, 0, 0, 2434, 0, 0, 0, 0, 286, + 0, 0, 0, 0, 385, 283, 0, 0, 212, 530, + 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, + 298, 289, 285, 264, 336, 405, 450, 547, 444, 0, + 389, 0, 0, 522, 422, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 342, 262, 344, 210, 435, 523, 302, + 0, 0, 0, 0, 2023, 536, 202, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, + 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, + 369, 376, 382, 355, 364, 0, 0, 641, 0, 0, + 0, 281, 340, 288, 280, 612, 0, 0, 0, 0, + 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, + 319, 334, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, + 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, + 0, 0, 0, 0, 269, 0, 495, 448, 636, 243, + 300, 482, 455, 493, 463, 303, 0, 2432, 494, 391, + 617, 473, 633, 662, 663, 279, 428, 647, 551, 655, + 680, 234, 276, 442, 535, 639, 519, 417, 613, 614, + 348, 518, 311, 209, 388, 668, 232, 503, 390, 253, + 241, 619, 644, 315, 267, 305, 480, 675, 221, 546, + 630, 250, 507, 0, 0, 683, 258, 529, 642, 631, + 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, + 309, 0, 0, 274, 437, 621, 622, 272, 684, 237, + 654, 228, 0, 653, 430, 616, 627, 414, 402, 227, + 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, + 471, 323, 325, 425, 424, 426, 215, 640, 658, 0, + 216, 0, 524, 643, 685, 475, 220, 244, 245, 248, + 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, + 469, 465, 474, 0, 610, 634, 648, 660, 666, 667, + 669, 670, 671, 672, 673, 676, 674, 429, 329, 520, + 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, + 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, + 266, 207, 0, 0, 0, 0, 270, 271, 0, 605, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, + 697, 698, 699, 700, 701, 702, 703, 681, 537, 543, + 538, 539, 540, 541, 542, 0, 544, 0, 0, 0, + 0, 0, 419, 0, 623, 624, 704, 403, 510, 635, + 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, + 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, + 420, 608, 330, 224, 225, 226, 553, 554, 555, 556, + 651, 652, 656, 213, 486, 487, 488, 489, 308, 646, + 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, + 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, + 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, + 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, + 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, + 567, 560, 568, 0, 204, 229, 387, 0, 478, 304, + 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, + 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, + 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, + 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, + 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, + 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, + 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, + 618, 620, 637, 657, 664, 504, 404, 452, 476, 611, + 0, 0, 317, 318, 467, 468, 332, 333, 678, 679, + 316, 632, 665, 629, 677, 659, 461, 397, 0, 0, + 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, + 265, 0, 0, 219, 257, 239, 275, 290, 293, 343, + 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, + 548, 549, 550, 552, 415, 282, 456, 416, 0, 395, + 606, 607, 335, 0, 0, 0, 557, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, + 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, + 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, + 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, + 264, 336, 405, 450, 547, 444, 0, 389, 0, 0, + 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 342, 262, 344, 210, 435, 523, 302, 0, 0, 0, + 0, 0, 536, 756, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, + 370, 379, 378, 358, 359, 361, 363, 369, 376, 382, + 355, 364, 0, 0, 641, 0, 0, 0, 281, 340, + 288, 280, 612, 0, 0, 0, 0, 0, 0, 628, + 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, + 0, 0, 0, 0, 0, 0, 0, 1133, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, + 0, 0, 0, 0, 0, 0, 0, 384, 1139, 349, + 205, 233, 1137, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 662, 663, 279, 428, 647, 551, 655, 680, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 668, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 675, 221, 546, 630, 250, 507, + 0, 0, 683, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 684, 237, 654, 228, 0, + 653, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 658, 0, 216, 0, 524, + 643, 685, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 660, 666, 667, 669, 670, 671, + 672, 673, 676, 674, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 681, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 704, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 651, 652, 656, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 682, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 657, 664, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 678, 679, 316, 632, 665, + 629, 677, 659, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 416, 0, 395, 606, 607, 335, + 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 438, 0, 0, 2434, 0, + 0, 0, 0, 286, 0, 0, 0, 0, 385, 283, + 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, + 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, + 450, 547, 444, 0, 389, 0, 0, 522, 422, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, + 210, 435, 523, 302, 0, 0, 0, 0, 2023, 536, + 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, + 358, 359, 361, 363, 369, 376, 382, 355, 364, 0, + 0, 641, 0, 0, 0, 281, 340, 288, 280, 612, + 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, + 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, + 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, + 0, 434, 485, 497, 0, 0, 0, 0, 269, 0, + 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, + 0, 0, 494, 391, 617, 473, 633, 662, 663, 279, + 428, 647, 551, 655, 680, 234, 276, 442, 535, 639, + 519, 417, 613, 614, 348, 518, 311, 209, 388, 668, + 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, + 480, 675, 221, 546, 630, 250, 507, 0, 0, 683, + 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, + 222, 0, 481, 284, 309, 0, 0, 274, 437, 621, + 622, 272, 684, 237, 654, 228, 0, 653, 430, 616, + 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, + 296, 324, 470, 394, 471, 323, 325, 425, 424, 426, + 215, 640, 658, 0, 216, 0, 524, 643, 685, 475, + 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, + 321, 331, 386, 441, 469, 465, 474, 0, 610, 634, + 648, 660, 666, 667, 669, 670, 671, 672, 673, 676, + 674, 429, 329, 520, 352, 392, 0, 0, 447, 496, + 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, + 235, 512, 609, 246, 266, 207, 0, 0, 0, 0, + 270, 271, 0, 605, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 681, 537, 543, 538, 539, 540, 541, 542, 0, + 544, 0, 0, 0, 0, 0, 419, 0, 623, 624, + 704, 403, 510, 635, 354, 368, 371, 360, 380, 0, + 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, + 383, 263, 218, 410, 420, 608, 330, 224, 225, 226, + 553, 554, 555, 556, 651, 652, 656, 213, 486, 487, + 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, + 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, + 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, + 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, + 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, + 573, 584, 595, 579, 567, 560, 568, 0, 204, 229, + 387, 0, 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2154, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 300, 0, 407, 260, 0, 460, 0, - 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, - 369, 0, 334, 199, 227, 0, 0, 417, 468, 480, - 0, 0, 0, 256, 0, 478, 431, 616, 235, 287, - 465, 438, 476, 446, 290, 0, 0, 477, 376, 597, - 456, 613, 642, 643, 266, 411, 627, 533, 635, 660, - 228, 263, 425, 517, 619, 501, 402, 593, 594, 333, - 500, 298, 203, 373, 648, 226, 486, 375, 244, 233, - 599, 624, 302, 254, 292, 463, 655, 215, 528, 610, - 241, 490, 0, 0, 663, 249, 511, 622, 611, 217, - 606, 510, 398, 330, 331, 216, 0, 464, 271, 296, - 0, 0, 261, 420, 601, 602, 259, 664, 230, 634, - 222, 0, 633, 413, 596, 607, 399, 387, 221, 605, - 397, 386, 338, 359, 360, 283, 310, 453, 379, 454, - 309, 311, 409, 408, 410, 209, 620, 638, 0, 210, - 0, 506, 623, 665, 458, 214, 236, 237, 239, 0, - 282, 286, 294, 297, 306, 307, 317, 371, 424, 452, - 448, 457, 0, 590, 614, 628, 640, 646, 647, 649, - 650, 651, 652, 653, 656, 654, 412, 315, 502, 337, - 377, 0, 0, 430, 479, 242, 618, 503, 201, 0, - 0, 0, 0, 257, 258, 0, 586, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 666, 667, 668, 669, - 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, - 680, 681, 682, 683, 661, 519, 525, 520, 521, 522, - 523, 524, 0, 526, 0, 0, 0, 0, 0, 403, - 0, 603, 604, 684, 388, 493, 615, 339, 353, 356, - 345, 365, 0, 366, 341, 342, 347, 350, 351, 352, - 357, 358, 362, 368, 251, 212, 395, 404, 589, 316, - 218, 219, 220, 535, 536, 537, 538, 631, 632, 636, - 207, 469, 470, 471, 472, 295, 626, 312, 475, 474, - 335, 336, 383, 455, 551, 553, 564, 568, 570, 572, - 578, 581, 552, 554, 565, 569, 571, 573, 579, 582, - 541, 543, 545, 547, 560, 559, 556, 584, 585, 562, - 567, 546, 558, 563, 576, 583, 580, 540, 544, 548, - 557, 575, 574, 555, 566, 577, 561, 549, 542, 550, - 0, 198, 223, 372, 0, 461, 291, 662, 630, 491, - 625, 208, 225, 0, 265, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 200, 202, 211, 224, - 234, 238, 245, 264, 279, 281, 288, 301, 313, 314, - 322, 323, 326, 332, 384, 391, 392, 393, 394, 414, - 415, 416, 419, 422, 423, 426, 428, 429, 432, 437, - 441, 442, 443, 445, 447, 449, 462, 467, 481, 482, - 483, 484, 485, 488, 489, 495, 496, 497, 498, 499, - 507, 508, 513, 514, 515, 516, 527, 598, 600, 617, - 637, 644, 487, 389, 435, 459, 591, 304, 305, 450, - 451, 318, 319, 658, 659, 303, 612, 645, 609, 657, - 639, 444, 382, 0, 0, 385, 284, 308, 324, 0, - 629, 509, 229, 473, 293, 253, 0, 0, 213, 248, - 232, 262, 277, 280, 328, 396, 405, 434, 440, 299, - 274, 246, 466, 243, 492, 530, 531, 532, 534, 400, - 269, 439, 401, 0, 380, 587, 588, 320, 0, 0, - 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, - 0, 273, 0, 0, 0, 0, 370, 270, 0, 0, - 206, 512, 0, 436, 0, 205, 0, 494, 255, 381, - 378, 595, 285, 276, 272, 252, 321, 390, 433, 529, - 427, 0, 374, 0, 0, 504, 406, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 327, 250, 329, 204, 418, - 505, 289, 0, 0, 0, 0, 2906, 518, 736, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, - 0, 247, 0, 0, 0, 355, 364, 363, 343, 344, - 346, 348, 354, 361, 367, 340, 349, 0, 0, 621, - 0, 0, 0, 268, 325, 275, 267, 592, 0, 0, - 0, 0, 0, 0, 608, 0, 0, 231, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2907, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 300, 0, 407, 260, 0, 460, - 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, - 0, 369, 0, 334, 199, 227, 0, 0, 417, 468, - 480, 0, 0, 0, 256, 0, 478, 431, 616, 235, - 287, 465, 438, 476, 446, 290, 0, 0, 477, 376, - 597, 456, 613, 642, 643, 266, 411, 627, 533, 635, - 660, 228, 263, 425, 517, 619, 501, 402, 593, 594, - 333, 500, 298, 203, 373, 648, 226, 486, 375, 244, - 233, 599, 624, 302, 254, 292, 463, 655, 215, 528, - 610, 241, 490, 0, 0, 663, 249, 511, 622, 611, - 217, 606, 510, 398, 330, 331, 216, 0, 464, 271, - 296, 0, 0, 261, 420, 601, 602, 259, 664, 230, - 634, 222, 0, 633, 413, 596, 607, 399, 387, 221, - 605, 397, 386, 338, 359, 360, 283, 310, 453, 379, - 454, 309, 311, 409, 408, 410, 209, 620, 638, 0, - 210, 0, 506, 623, 665, 458, 214, 236, 237, 239, - 0, 282, 286, 294, 297, 306, 307, 317, 371, 424, - 452, 448, 457, 0, 590, 614, 628, 640, 646, 647, - 649, 650, 651, 652, 653, 656, 654, 412, 315, 502, - 337, 377, 0, 0, 430, 479, 242, 618, 503, 201, - 0, 0, 0, 0, 257, 258, 0, 586, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 666, 667, 668, - 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, - 679, 680, 681, 682, 683, 661, 519, 525, 520, 521, - 522, 523, 524, 0, 526, 0, 0, 0, 0, 0, - 403, 0, 603, 604, 684, 388, 493, 615, 339, 353, - 356, 345, 365, 0, 366, 341, 342, 347, 350, 351, - 352, 357, 358, 362, 368, 251, 212, 395, 404, 589, - 316, 218, 219, 220, 535, 536, 537, 538, 631, 632, - 636, 207, 469, 470, 471, 472, 295, 626, 312, 475, - 474, 335, 336, 383, 455, 551, 553, 564, 568, 570, - 572, 578, 581, 552, 554, 565, 569, 571, 573, 579, - 582, 541, 543, 545, 547, 560, 559, 556, 584, 585, - 562, 567, 546, 558, 563, 576, 583, 580, 540, 544, - 548, 557, 575, 574, 555, 566, 577, 561, 549, 542, - 550, 0, 198, 223, 372, 0, 461, 291, 662, 630, - 491, 625, 208, 225, 0, 265, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 200, 202, 211, - 224, 234, 238, 245, 264, 279, 281, 288, 301, 313, - 314, 322, 323, 326, 332, 384, 391, 392, 393, 394, - 414, 415, 416, 419, 422, 423, 426, 428, 429, 432, - 437, 441, 442, 443, 445, 447, 449, 462, 467, 481, - 482, 483, 484, 485, 488, 489, 495, 496, 497, 498, - 499, 507, 508, 513, 514, 515, 516, 527, 598, 600, - 617, 637, 644, 487, 389, 435, 459, 591, 304, 305, - 450, 451, 318, 319, 658, 659, 303, 612, 645, 609, - 657, 639, 444, 382, 0, 0, 385, 284, 308, 324, - 0, 629, 509, 229, 473, 293, 253, 0, 0, 213, - 248, 232, 262, 277, 280, 328, 396, 405, 434, 440, - 299, 274, 246, 466, 243, 492, 530, 531, 532, 534, - 400, 269, 439, 401, 0, 380, 587, 588, 320, 0, - 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, - 0, 0, 273, 0, 0, 0, 0, 370, 270, 0, - 0, 206, 512, 0, 436, 0, 205, 0, 494, 255, - 381, 378, 595, 285, 276, 272, 252, 321, 390, 433, - 529, 427, 0, 374, 0, 0, 504, 406, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 327, 250, 329, 204, - 418, 505, 289, 0, 0, 0, 0, 0, 518, 736, - 0, 0, 0, 0, 2889, 0, 0, 0, 0, 240, - 0, 0, 247, 2890, 0, 0, 355, 364, 363, 343, - 344, 346, 348, 354, 361, 367, 340, 349, 0, 0, - 621, 0, 0, 0, 268, 325, 275, 267, 592, 0, - 0, 0, 0, 0, 0, 608, 0, 0, 231, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 300, 0, 407, 260, 0, - 460, 0, 0, 0, 641, 0, 0, 0, 0, 0, - 0, 0, 369, 0, 334, 199, 227, 0, 0, 417, - 468, 480, 0, 0, 0, 256, 0, 478, 431, 616, - 235, 287, 465, 438, 476, 446, 290, 0, 0, 477, - 376, 597, 456, 613, 642, 643, 266, 411, 627, 533, - 635, 660, 228, 263, 425, 517, 619, 501, 402, 593, - 594, 333, 500, 298, 203, 373, 648, 226, 486, 375, - 244, 233, 599, 624, 302, 254, 292, 463, 655, 215, - 528, 610, 241, 490, 0, 0, 663, 249, 511, 622, - 611, 217, 606, 510, 398, 330, 331, 216, 0, 464, - 271, 296, 0, 0, 261, 420, 601, 602, 259, 664, - 230, 634, 222, 0, 633, 413, 596, 607, 399, 387, - 221, 605, 397, 386, 338, 359, 360, 283, 310, 453, - 379, 454, 309, 311, 409, 408, 410, 209, 620, 638, - 0, 210, 0, 506, 623, 665, 458, 214, 236, 237, - 239, 0, 282, 286, 294, 297, 306, 307, 317, 371, - 424, 452, 448, 457, 0, 590, 614, 628, 640, 646, - 647, 649, 650, 651, 652, 653, 656, 654, 412, 315, - 502, 337, 377, 0, 0, 430, 479, 242, 618, 503, - 201, 0, 0, 0, 0, 257, 258, 0, 586, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 666, 667, - 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, - 678, 679, 680, 681, 682, 683, 661, 519, 525, 520, - 521, 522, 523, 524, 0, 526, 0, 0, 0, 0, - 0, 403, 0, 603, 604, 684, 388, 493, 615, 339, - 353, 356, 345, 365, 0, 366, 341, 342, 347, 350, - 351, 352, 357, 358, 362, 368, 251, 212, 395, 404, - 589, 316, 218, 219, 220, 535, 536, 537, 538, 631, - 632, 636, 207, 469, 470, 471, 472, 295, 626, 312, - 475, 474, 335, 336, 383, 455, 551, 553, 564, 568, - 570, 572, 578, 581, 552, 554, 565, 569, 571, 573, - 579, 582, 541, 543, 545, 547, 560, 559, 556, 584, - 585, 562, 567, 546, 558, 563, 576, 583, 580, 540, - 544, 548, 557, 575, 574, 555, 566, 577, 561, 549, - 542, 550, 0, 198, 223, 372, 0, 461, 291, 662, - 630, 491, 625, 208, 225, 0, 265, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 200, 202, - 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, - 313, 314, 322, 323, 326, 332, 384, 391, 392, 393, - 394, 414, 415, 416, 419, 422, 423, 426, 428, 429, - 432, 437, 441, 442, 443, 445, 447, 449, 462, 467, - 481, 482, 483, 484, 485, 488, 489, 495, 496, 497, - 498, 499, 507, 508, 513, 514, 515, 516, 527, 598, - 600, 617, 637, 644, 487, 389, 435, 459, 591, 304, - 305, 450, 451, 318, 319, 658, 659, 303, 612, 645, - 609, 657, 639, 444, 382, 0, 0, 385, 284, 308, - 324, 0, 629, 509, 229, 473, 293, 253, 0, 0, - 213, 248, 232, 262, 277, 280, 328, 396, 405, 434, - 440, 299, 274, 246, 466, 243, 492, 530, 531, 532, - 534, 400, 269, 439, 401, 0, 380, 587, 588, 320, - 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, - 0, 0, 0, 273, 1820, 0, 0, 0, 370, 270, - 0, 0, 206, 512, 0, 436, 0, 205, 0, 494, - 255, 381, 378, 595, 285, 276, 272, 252, 321, 390, - 433, 529, 427, 0, 374, 0, 0, 504, 406, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 250, 329, - 204, 418, 505, 289, 0, 0, 0, 0, 1819, 518, - 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 240, 0, 0, 247, 0, 0, 0, 355, 364, 363, - 343, 344, 346, 348, 354, 361, 367, 340, 349, 0, - 0, 621, 0, 0, 0, 268, 325, 275, 267, 592, - 0, 0, 0, 0, 0, 0, 608, 0, 0, 231, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 300, 0, 407, 260, - 0, 460, 0, 0, 0, 641, 0, 0, 0, 0, - 0, 0, 0, 369, 0, 334, 199, 227, 0, 0, - 417, 468, 480, 0, 0, 0, 256, 0, 478, 431, - 616, 235, 287, 465, 438, 476, 446, 290, 0, 0, - 477, 376, 597, 456, 613, 642, 643, 266, 411, 627, - 533, 635, 660, 228, 263, 425, 517, 619, 501, 402, - 593, 594, 333, 500, 298, 203, 373, 648, 226, 486, - 375, 244, 233, 599, 624, 302, 254, 292, 463, 655, - 215, 528, 610, 241, 490, 0, 0, 663, 249, 511, - 622, 611, 217, 606, 510, 398, 330, 331, 216, 0, - 464, 271, 296, 0, 0, 261, 420, 601, 602, 259, - 664, 230, 634, 222, 0, 633, 413, 596, 607, 399, - 387, 221, 605, 397, 386, 338, 359, 360, 283, 310, - 453, 379, 454, 309, 311, 409, 408, 410, 209, 620, - 638, 0, 210, 0, 506, 623, 665, 458, 214, 236, - 237, 239, 0, 282, 286, 294, 297, 306, 307, 317, - 371, 424, 452, 448, 457, 0, 590, 614, 628, 640, - 646, 647, 649, 650, 651, 652, 653, 656, 654, 412, - 315, 502, 337, 377, 0, 0, 430, 479, 242, 618, - 503, 201, 0, 0, 0, 0, 257, 258, 0, 586, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, - 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, - 677, 678, 679, 680, 681, 682, 683, 661, 519, 525, - 520, 521, 522, 523, 524, 0, 526, 0, 0, 0, - 0, 0, 403, 0, 603, 604, 684, 388, 493, 615, - 339, 353, 356, 345, 365, 0, 366, 341, 342, 347, - 350, 351, 352, 357, 358, 362, 368, 251, 212, 395, - 404, 589, 316, 218, 219, 220, 535, 536, 537, 538, - 631, 632, 636, 207, 469, 470, 471, 472, 295, 626, - 312, 475, 474, 335, 336, 383, 455, 551, 553, 564, - 568, 570, 572, 578, 581, 552, 554, 565, 569, 571, - 573, 579, 582, 541, 543, 545, 547, 560, 559, 556, - 584, 585, 562, 567, 546, 558, 563, 576, 583, 580, - 540, 544, 548, 557, 575, 574, 555, 566, 577, 561, - 549, 542, 550, 0, 198, 223, 372, 0, 461, 291, - 662, 630, 491, 625, 208, 225, 0, 265, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, - 202, 211, 224, 234, 238, 245, 264, 279, 281, 288, - 301, 313, 314, 322, 323, 326, 332, 384, 391, 392, - 393, 394, 414, 415, 416, 419, 422, 423, 426, 428, - 429, 432, 437, 441, 442, 443, 445, 447, 449, 462, - 467, 481, 482, 483, 484, 485, 488, 489, 495, 496, - 497, 498, 499, 507, 508, 513, 514, 515, 516, 527, - 598, 600, 617, 637, 644, 487, 389, 435, 459, 591, - 304, 305, 450, 451, 318, 319, 658, 659, 303, 612, - 645, 609, 657, 639, 444, 382, 0, 0, 385, 284, - 308, 324, 0, 629, 509, 229, 473, 293, 253, 0, - 0, 213, 248, 232, 262, 277, 280, 328, 396, 405, - 434, 440, 299, 274, 246, 466, 243, 492, 530, 531, - 532, 534, 400, 269, 439, 401, 0, 380, 587, 588, - 320, 0, 0, 0, 539, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, - 0, 0, 0, 0, 273, 0, 0, 0, 0, 370, - 270, 0, 0, 206, 512, 0, 436, 0, 205, 0, - 494, 255, 381, 378, 595, 285, 276, 272, 252, 321, - 390, 433, 529, 427, 0, 374, 0, 0, 504, 406, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 327, 250, - 329, 204, 418, 505, 289, 0, 0, 0, 0, 0, - 518, 738, 739, 740, 0, 0, 0, 0, 0, 0, - 0, 240, 0, 0, 247, 0, 0, 0, 355, 364, - 363, 343, 344, 346, 348, 354, 361, 367, 340, 349, - 0, 0, 621, 0, 0, 0, 268, 325, 275, 267, - 592, 0, 0, 0, 0, 0, 0, 608, 0, 0, - 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 300, 0, 407, - 260, 0, 460, 0, 0, 0, 641, 0, 0, 0, - 0, 0, 0, 0, 369, 0, 334, 199, 227, 0, - 0, 417, 468, 480, 0, 0, 0, 256, 0, 478, - 431, 616, 235, 287, 465, 438, 476, 446, 290, 0, - 0, 477, 376, 597, 456, 613, 642, 643, 266, 411, - 627, 533, 635, 660, 228, 263, 425, 517, 619, 501, - 402, 593, 594, 333, 500, 298, 203, 373, 648, 226, - 486, 375, 244, 233, 599, 624, 302, 254, 292, 463, - 655, 215, 528, 610, 241, 490, 0, 0, 663, 249, - 511, 622, 611, 217, 606, 510, 398, 330, 331, 216, - 0, 464, 271, 296, 0, 0, 261, 420, 601, 602, - 259, 664, 230, 634, 222, 0, 633, 413, 596, 607, - 399, 387, 221, 605, 397, 386, 338, 359, 360, 283, - 310, 453, 379, 454, 309, 311, 409, 408, 410, 209, - 620, 638, 0, 210, 0, 506, 623, 665, 458, 214, - 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, - 317, 371, 424, 452, 448, 457, 0, 590, 614, 628, - 640, 646, 647, 649, 650, 651, 652, 653, 656, 654, - 412, 315, 502, 337, 377, 0, 0, 430, 479, 242, - 618, 503, 201, 0, 0, 0, 0, 257, 258, 0, - 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, - 676, 677, 678, 679, 680, 681, 682, 683, 661, 519, - 525, 520, 521, 522, 523, 524, 0, 526, 0, 0, - 0, 0, 0, 403, 0, 603, 604, 684, 388, 493, - 615, 339, 353, 356, 345, 365, 0, 366, 341, 342, - 347, 350, 351, 352, 357, 358, 362, 368, 251, 212, - 395, 404, 589, 316, 218, 219, 220, 535, 536, 537, - 538, 631, 632, 636, 207, 469, 470, 471, 472, 295, - 626, 312, 475, 474, 335, 336, 383, 455, 551, 553, - 564, 568, 570, 572, 578, 581, 552, 554, 565, 569, - 571, 573, 579, 582, 541, 543, 545, 547, 560, 559, - 556, 584, 585, 562, 567, 546, 558, 563, 576, 583, - 580, 540, 544, 548, 557, 575, 574, 555, 566, 577, - 561, 549, 542, 550, 0, 198, 223, 372, 0, 461, - 291, 662, 630, 491, 625, 208, 225, 0, 265, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, - 288, 301, 313, 314, 322, 323, 326, 332, 384, 391, - 392, 393, 394, 414, 415, 416, 419, 422, 423, 426, - 428, 429, 432, 437, 441, 442, 443, 445, 447, 449, - 462, 467, 481, 482, 483, 484, 485, 488, 489, 495, - 496, 497, 498, 499, 507, 508, 513, 514, 515, 516, - 527, 598, 600, 617, 637, 644, 487, 389, 435, 459, - 591, 304, 305, 450, 451, 318, 319, 658, 659, 303, - 612, 645, 609, 657, 639, 444, 382, 0, 0, 385, - 284, 308, 324, 0, 629, 509, 229, 473, 293, 253, - 0, 0, 213, 248, 232, 262, 277, 280, 328, 396, - 405, 434, 440, 299, 274, 246, 466, 243, 492, 530, - 531, 532, 534, 400, 269, 439, 401, 0, 380, 587, - 588, 320, 0, 0, 0, 539, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, - 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, - 370, 270, 0, 0, 206, 512, 0, 436, 0, 205, - 0, 494, 255, 381, 378, 595, 285, 276, 272, 252, - 321, 390, 433, 529, 427, 0, 374, 0, 0, 504, - 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, - 250, 329, 204, 418, 505, 289, 0, 0, 0, 0, - 0, 518, 736, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 240, 0, 0, 247, 0, 0, 0, 355, - 364, 363, 343, 344, 346, 348, 354, 361, 367, 340, - 349, 0, 0, 621, 0, 0, 0, 268, 325, 275, - 267, 592, 0, 0, 0, 0, 0, 0, 608, 0, - 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, - 407, 260, 0, 460, 0, 0, 0, 641, 0, 0, - 0, 4100, 0, 0, 0, 369, 0, 334, 199, 227, - 0, 0, 417, 468, 480, 0, 0, 0, 256, 0, - 478, 431, 616, 235, 287, 465, 438, 476, 446, 290, - 0, 0, 477, 376, 597, 456, 613, 642, 643, 266, - 411, 627, 533, 635, 660, 228, 263, 425, 517, 619, - 501, 402, 593, 594, 333, 500, 298, 203, 373, 648, - 226, 486, 375, 244, 233, 599, 624, 302, 254, 292, - 463, 655, 215, 528, 610, 241, 490, 0, 0, 663, - 249, 511, 622, 611, 217, 606, 510, 398, 330, 331, - 216, 0, 464, 271, 296, 0, 0, 261, 420, 601, - 602, 259, 664, 230, 634, 222, 0, 633, 413, 596, - 607, 399, 387, 221, 605, 397, 386, 338, 359, 360, - 283, 310, 453, 379, 454, 309, 311, 409, 408, 410, - 209, 620, 638, 0, 210, 0, 506, 623, 665, 458, - 214, 236, 237, 239, 0, 282, 286, 294, 297, 306, - 307, 317, 371, 424, 452, 448, 457, 0, 590, 614, - 628, 640, 646, 647, 649, 650, 651, 652, 653, 656, - 654, 412, 315, 502, 337, 377, 0, 0, 430, 479, - 242, 618, 503, 201, 0, 0, 0, 0, 257, 258, - 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 666, 667, 668, 669, 670, 671, 672, 673, 674, - 675, 676, 677, 678, 679, 680, 681, 682, 683, 661, - 519, 525, 520, 521, 522, 523, 524, 0, 526, 0, - 0, 0, 0, 0, 403, 0, 603, 604, 684, 388, - 493, 615, 339, 353, 356, 345, 365, 0, 366, 341, - 342, 347, 350, 351, 352, 357, 358, 362, 368, 251, - 212, 395, 404, 589, 316, 218, 219, 220, 535, 536, - 537, 538, 631, 632, 636, 207, 469, 470, 471, 472, - 295, 626, 312, 475, 474, 335, 336, 383, 455, 551, - 553, 564, 568, 570, 572, 578, 581, 552, 554, 565, - 569, 571, 573, 579, 582, 541, 543, 545, 547, 560, - 559, 556, 584, 585, 562, 567, 546, 558, 563, 576, - 583, 580, 540, 544, 548, 557, 575, 574, 555, 566, - 577, 561, 549, 542, 550, 0, 198, 223, 372, 0, - 461, 291, 662, 630, 491, 625, 208, 225, 0, 265, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 200, 202, 211, 224, 234, 238, 245, 264, 279, - 281, 288, 301, 313, 314, 322, 323, 326, 332, 384, - 391, 392, 393, 394, 414, 415, 416, 419, 422, 423, - 426, 428, 429, 432, 437, 441, 442, 443, 445, 447, - 449, 462, 467, 481, 482, 483, 484, 485, 488, 489, - 495, 496, 497, 498, 499, 507, 508, 513, 514, 515, - 516, 527, 598, 600, 617, 637, 644, 487, 389, 435, - 459, 591, 304, 305, 450, 451, 318, 319, 658, 659, - 303, 612, 645, 609, 657, 639, 444, 382, 0, 0, - 385, 284, 308, 324, 0, 629, 509, 229, 473, 293, - 253, 0, 0, 213, 248, 232, 262, 277, 280, 328, - 396, 405, 434, 440, 299, 274, 246, 466, 243, 492, - 530, 531, 532, 534, 400, 269, 439, 401, 0, 380, - 587, 588, 320, 0, 0, 0, 539, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, - 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, - 0, 370, 270, 0, 0, 206, 512, 0, 436, 0, - 205, 0, 494, 255, 381, 378, 595, 285, 276, 272, - 252, 321, 390, 433, 529, 427, 0, 374, 0, 0, - 504, 406, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 327, 250, 329, 204, 418, 505, 289, 0, 0, 0, - 0, 1982, 518, 196, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 240, 0, 0, 247, 0, 0, 0, - 355, 364, 363, 343, 344, 346, 348, 354, 361, 367, - 340, 349, 0, 0, 621, 0, 0, 0, 268, 325, - 275, 267, 592, 0, 0, 0, 0, 0, 0, 608, - 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, - 0, 407, 260, 0, 460, 0, 0, 0, 641, 0, - 0, 0, 0, 0, 0, 0, 369, 0, 334, 199, - 227, 0, 0, 417, 468, 480, 0, 0, 0, 256, - 0, 478, 431, 616, 235, 287, 465, 438, 476, 446, - 290, 0, 0, 477, 376, 597, 456, 613, 642, 643, - 266, 411, 627, 533, 635, 660, 228, 263, 425, 517, - 619, 501, 402, 593, 594, 333, 500, 298, 203, 373, - 648, 226, 486, 375, 244, 233, 599, 624, 302, 254, - 292, 463, 655, 215, 528, 610, 241, 490, 0, 0, - 663, 249, 511, 622, 611, 217, 606, 510, 398, 330, - 331, 216, 0, 464, 271, 296, 0, 0, 261, 420, - 601, 602, 259, 664, 230, 634, 222, 0, 633, 413, - 596, 607, 399, 387, 221, 605, 397, 386, 338, 359, - 360, 283, 310, 453, 379, 454, 309, 311, 409, 408, - 410, 209, 620, 638, 0, 210, 0, 506, 623, 665, - 458, 214, 236, 237, 239, 0, 282, 286, 294, 297, - 306, 307, 317, 371, 424, 452, 448, 457, 0, 590, - 614, 628, 640, 646, 647, 649, 650, 651, 652, 653, - 656, 654, 412, 315, 502, 337, 377, 0, 0, 430, - 479, 242, 618, 503, 201, 0, 0, 0, 0, 257, - 258, 0, 586, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 666, 667, 668, 669, 670, 671, 672, 673, - 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, - 661, 519, 525, 520, 521, 522, 523, 524, 0, 526, - 0, 0, 0, 0, 0, 403, 0, 603, 604, 684, - 388, 493, 615, 339, 353, 356, 345, 365, 0, 366, - 341, 342, 347, 350, 351, 352, 357, 358, 362, 368, - 251, 212, 395, 404, 589, 316, 218, 219, 220, 535, - 536, 537, 538, 631, 632, 636, 207, 469, 470, 471, - 472, 295, 626, 312, 475, 474, 335, 336, 383, 455, - 551, 553, 564, 568, 570, 572, 578, 581, 552, 554, - 565, 569, 571, 573, 579, 582, 541, 543, 545, 547, - 560, 559, 556, 584, 585, 562, 567, 546, 558, 563, - 576, 583, 580, 540, 544, 548, 557, 575, 574, 555, - 566, 577, 561, 549, 542, 550, 0, 198, 223, 372, - 0, 461, 291, 662, 630, 491, 625, 208, 225, 0, - 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, - 279, 281, 288, 301, 313, 314, 322, 323, 326, 332, - 384, 391, 392, 393, 394, 414, 415, 416, 419, 422, - 423, 426, 428, 429, 432, 437, 441, 442, 443, 445, - 447, 449, 462, 467, 481, 482, 483, 484, 485, 488, - 489, 495, 496, 497, 498, 499, 507, 508, 513, 514, - 515, 516, 527, 598, 600, 617, 637, 644, 487, 389, - 435, 459, 591, 304, 305, 450, 451, 318, 319, 658, - 659, 303, 612, 645, 609, 657, 639, 444, 382, 0, - 0, 385, 284, 308, 324, 0, 629, 509, 229, 473, - 293, 253, 0, 0, 213, 248, 232, 262, 277, 280, - 328, 396, 405, 434, 440, 299, 274, 246, 466, 243, - 492, 530, 531, 532, 534, 400, 269, 439, 401, 0, - 380, 587, 588, 320, 0, 0, 0, 539, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, - 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, - 0, 0, 370, 270, 0, 0, 206, 512, 0, 436, - 0, 205, 0, 494, 255, 381, 378, 595, 285, 276, - 272, 252, 321, 390, 433, 529, 427, 0, 374, 0, - 0, 504, 406, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 327, 250, 329, 204, 418, 505, 289, 0, 0, - 0, 0, 0, 518, 736, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 240, 0, 0, 247, 0, 0, - 0, 355, 364, 363, 343, 344, 346, 348, 354, 361, - 367, 340, 349, 0, 0, 621, 0, 0, 0, 268, - 325, 275, 267, 592, 0, 0, 0, 0, 0, 0, - 608, 0, 0, 231, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 300, 0, 407, 260, 0, 460, 0, 0, 0, 641, - 0, 0, 0, 3756, 0, 0, 0, 369, 0, 334, - 199, 227, 0, 0, 417, 468, 480, 0, 0, 0, - 256, 0, 478, 431, 616, 235, 287, 465, 438, 476, - 446, 290, 0, 0, 477, 376, 597, 456, 613, 642, - 643, 266, 411, 627, 533, 635, 660, 228, 263, 425, - 517, 619, 501, 402, 593, 594, 333, 500, 298, 203, - 373, 648, 226, 486, 375, 244, 233, 599, 624, 302, - 254, 292, 463, 655, 215, 528, 610, 241, 490, 0, - 0, 663, 249, 511, 622, 611, 217, 606, 510, 398, - 330, 331, 216, 0, 464, 271, 296, 0, 0, 261, - 420, 601, 602, 259, 664, 230, 634, 222, 0, 633, - 413, 596, 607, 399, 387, 221, 605, 397, 386, 338, - 359, 360, 283, 310, 453, 379, 454, 309, 311, 409, - 408, 410, 209, 620, 638, 0, 210, 0, 506, 623, - 665, 458, 214, 236, 237, 239, 0, 282, 286, 294, - 297, 306, 307, 317, 371, 424, 452, 448, 457, 0, - 590, 614, 628, 640, 646, 647, 649, 650, 651, 652, - 653, 656, 654, 412, 315, 502, 337, 377, 0, 0, - 430, 479, 242, 618, 503, 201, 0, 0, 0, 0, - 257, 258, 0, 586, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 666, 667, 668, 669, 670, 671, 672, - 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, - 683, 661, 519, 525, 520, 521, 522, 523, 524, 0, - 526, 0, 0, 0, 0, 0, 403, 0, 603, 604, - 684, 388, 493, 615, 339, 353, 356, 345, 365, 0, - 366, 341, 342, 347, 350, 351, 352, 357, 358, 362, - 368, 251, 212, 395, 404, 589, 316, 218, 219, 220, - 535, 536, 537, 538, 631, 632, 636, 207, 469, 470, - 471, 472, 295, 626, 312, 475, 474, 335, 336, 383, - 455, 551, 553, 564, 568, 570, 572, 578, 581, 552, - 554, 565, 569, 571, 573, 579, 582, 541, 543, 545, - 547, 560, 559, 556, 584, 585, 562, 567, 546, 558, - 563, 576, 583, 580, 540, 544, 548, 557, 575, 574, - 555, 566, 577, 561, 549, 542, 550, 0, 198, 223, - 372, 0, 461, 291, 662, 630, 491, 625, 208, 225, - 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 200, 202, 211, 224, 234, 238, 245, - 264, 279, 281, 288, 301, 313, 314, 322, 323, 326, - 332, 384, 391, 392, 393, 394, 414, 415, 416, 419, - 422, 423, 426, 428, 429, 432, 437, 441, 442, 443, - 445, 447, 449, 462, 467, 481, 482, 483, 484, 485, - 488, 489, 495, 496, 497, 498, 499, 507, 508, 513, - 514, 515, 516, 527, 598, 600, 617, 637, 644, 487, - 389, 435, 459, 591, 304, 305, 450, 451, 318, 319, - 658, 659, 303, 612, 645, 609, 657, 639, 444, 382, - 0, 0, 385, 284, 308, 324, 0, 629, 509, 229, - 473, 293, 253, 0, 0, 213, 248, 232, 262, 277, - 280, 328, 396, 405, 434, 440, 299, 274, 246, 466, - 243, 492, 530, 531, 532, 534, 400, 269, 439, 401, - 0, 380, 587, 588, 320, 0, 0, 0, 539, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 421, 0, 0, 0, 0, 0, 0, 0, 273, 0, - 0, 0, 0, 370, 270, 0, 0, 206, 512, 0, - 436, 0, 205, 0, 494, 255, 381, 378, 595, 285, - 276, 272, 252, 321, 390, 433, 529, 427, 0, 374, - 0, 0, 504, 406, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 327, 250, 329, 204, 418, 505, 289, 0, - 95, 0, 0, 0, 518, 736, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 240, 0, 0, 247, 0, - 0, 0, 355, 364, 363, 343, 344, 346, 348, 354, - 361, 367, 340, 349, 0, 0, 621, 0, 0, 0, - 268, 325, 275, 267, 592, 0, 0, 0, 0, 0, - 0, 608, 0, 0, 231, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 300, 0, 407, 260, 0, 460, 0, 0, 0, - 641, 0, 0, 0, 0, 0, 0, 0, 369, 0, - 334, 199, 227, 0, 0, 417, 468, 480, 0, 0, - 0, 256, 0, 478, 431, 616, 235, 287, 465, 438, - 476, 446, 290, 0, 0, 477, 376, 597, 456, 613, - 642, 643, 266, 411, 627, 533, 635, 660, 228, 263, - 425, 517, 619, 501, 402, 593, 594, 333, 500, 298, - 203, 373, 648, 226, 486, 375, 244, 233, 599, 624, - 302, 254, 292, 463, 655, 215, 528, 610, 241, 490, - 0, 0, 663, 249, 511, 622, 611, 217, 606, 510, - 398, 330, 331, 216, 0, 464, 271, 296, 0, 0, - 261, 420, 601, 602, 259, 664, 230, 634, 222, 0, - 633, 413, 596, 607, 399, 387, 221, 605, 397, 386, - 338, 359, 360, 283, 310, 453, 379, 454, 309, 311, - 409, 408, 410, 209, 620, 638, 0, 210, 0, 506, - 623, 665, 458, 214, 236, 237, 239, 0, 282, 286, - 294, 297, 306, 307, 317, 371, 424, 452, 448, 457, - 0, 590, 614, 628, 640, 646, 647, 649, 650, 651, - 652, 653, 656, 654, 412, 315, 502, 337, 377, 0, - 0, 430, 479, 242, 618, 503, 201, 0, 0, 0, - 0, 257, 258, 0, 586, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 666, 667, 668, 669, 670, 671, - 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, - 682, 683, 661, 519, 525, 520, 521, 522, 523, 524, - 0, 526, 0, 0, 0, 0, 0, 403, 0, 603, - 604, 684, 388, 493, 615, 339, 353, 356, 345, 365, - 0, 366, 341, 342, 347, 350, 351, 352, 357, 358, - 362, 368, 251, 212, 395, 404, 589, 316, 218, 219, - 220, 535, 536, 537, 538, 631, 632, 636, 207, 469, - 470, 471, 472, 295, 626, 312, 475, 474, 335, 336, - 383, 455, 551, 553, 564, 568, 570, 572, 578, 581, - 552, 554, 565, 569, 571, 573, 579, 582, 541, 543, - 545, 547, 560, 559, 556, 584, 585, 562, 567, 546, - 558, 563, 576, 583, 580, 540, 544, 548, 557, 575, - 574, 555, 566, 577, 561, 549, 542, 550, 0, 198, - 223, 372, 0, 461, 291, 662, 630, 491, 625, 208, - 225, 0, 265, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 200, 202, 211, 224, 234, 238, - 245, 264, 279, 281, 288, 301, 313, 314, 322, 323, - 326, 332, 384, 391, 392, 393, 394, 414, 415, 416, - 419, 422, 423, 426, 428, 429, 432, 437, 441, 442, - 443, 445, 447, 449, 462, 467, 481, 482, 483, 484, - 485, 488, 489, 495, 496, 497, 498, 499, 507, 508, - 513, 514, 515, 516, 527, 598, 600, 617, 637, 644, - 487, 389, 435, 459, 591, 304, 305, 450, 451, 318, - 319, 658, 659, 303, 612, 645, 609, 657, 639, 444, - 382, 0, 0, 385, 284, 308, 324, 0, 629, 509, - 229, 473, 293, 253, 0, 0, 213, 248, 232, 262, - 277, 280, 328, 396, 405, 434, 440, 299, 274, 246, - 466, 243, 492, 530, 531, 532, 534, 400, 269, 439, - 401, 0, 380, 587, 588, 320, 0, 0, 0, 539, - 0, 0, 0, 0, 2450, 0, 0, 0, 0, 0, - 0, 421, 0, 0, 0, 0, 0, 0, 0, 273, - 0, 0, 0, 0, 370, 270, 0, 0, 206, 512, - 0, 436, 0, 205, 0, 494, 255, 381, 378, 595, - 285, 276, 272, 252, 321, 390, 433, 529, 427, 0, - 374, 0, 0, 504, 406, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 327, 250, 329, 204, 418, 505, 289, - 0, 0, 0, 0, 0, 518, 196, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 240, 0, 0, 247, - 0, 0, 0, 355, 364, 363, 343, 344, 346, 348, - 354, 361, 367, 340, 349, 0, 0, 621, 0, 0, - 0, 268, 325, 275, 267, 592, 0, 0, 0, 0, - 0, 0, 608, 0, 0, 231, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 206, 208, 217, 230, 242, 247, 254, + 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, + 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, + 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, + 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, + 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, + 532, 533, 534, 545, 618, 620, 637, 657, 664, 504, + 404, 452, 476, 611, 0, 0, 317, 318, 467, 468, + 332, 333, 678, 679, 316, 632, 665, 629, 677, 659, + 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, + 527, 236, 490, 306, 265, 0, 0, 219, 257, 239, + 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, + 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, + 456, 416, 0, 395, 606, 607, 335, 0, 0, 0, + 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, + 286, 0, 0, 0, 0, 385, 283, 0, 0, 212, + 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, + 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, + 0, 389, 0, 0, 522, 422, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, + 302, 0, 0, 0, 1804, 0, 536, 756, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, + 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, + 363, 369, 376, 382, 355, 364, 0, 0, 641, 0, + 0, 0, 281, 340, 288, 280, 612, 0, 0, 0, + 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, + 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 661, 0, 0, 0, 3817, 0, 0, + 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, + 497, 0, 0, 0, 0, 269, 0, 495, 448, 636, + 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, + 391, 617, 473, 633, 662, 663, 279, 428, 647, 551, + 655, 680, 234, 276, 442, 535, 639, 519, 417, 613, + 614, 348, 518, 311, 209, 388, 668, 232, 503, 390, + 253, 241, 619, 644, 315, 267, 305, 480, 675, 221, + 546, 630, 250, 507, 0, 0, 683, 258, 529, 642, + 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, + 284, 309, 0, 0, 274, 437, 621, 622, 272, 684, + 237, 654, 228, 0, 653, 430, 616, 627, 414, 402, + 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, + 394, 471, 323, 325, 425, 424, 426, 215, 640, 658, + 0, 216, 0, 524, 643, 685, 475, 220, 244, 245, + 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, + 441, 469, 465, 474, 0, 610, 634, 648, 660, 666, + 667, 669, 670, 671, 672, 673, 676, 674, 429, 329, + 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, + 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, + 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, + 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, + 696, 697, 698, 699, 700, 701, 702, 703, 681, 537, + 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, + 0, 0, 0, 419, 0, 623, 624, 704, 403, 510, + 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, + 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, + 410, 420, 608, 330, 224, 225, 226, 553, 554, 555, + 556, 651, 652, 656, 213, 486, 487, 488, 489, 308, + 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, + 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, + 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, + 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, + 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, + 579, 567, 560, 568, 0, 204, 229, 387, 0, 478, + 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, + 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, + 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, + 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, + 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, + 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, + 545, 618, 620, 637, 657, 664, 504, 404, 452, 476, + 611, 0, 0, 317, 318, 467, 468, 332, 333, 678, + 679, 316, 632, 665, 629, 677, 659, 461, 397, 0, + 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, + 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, + 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, + 509, 548, 549, 550, 552, 415, 282, 456, 416, 0, + 395, 606, 607, 335, 0, 0, 0, 557, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, + 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, + 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, + 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, + 285, 264, 336, 405, 450, 547, 444, 0, 389, 0, + 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 342, 262, 344, 210, 435, 523, 302, 0, 0, + 0, 0, 2194, 536, 756, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, + 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, + 382, 355, 364, 0, 0, 641, 0, 0, 0, 281, + 340, 288, 280, 612, 0, 0, 0, 0, 0, 0, + 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2195, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 661, 0, 0, 0, 0, 0, 0, 0, 384, 0, + 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, + 0, 0, 269, 0, 495, 448, 636, 243, 300, 482, + 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, + 633, 662, 663, 279, 428, 647, 551, 655, 680, 234, + 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, + 311, 209, 388, 668, 232, 503, 390, 253, 241, 619, + 644, 315, 267, 305, 480, 675, 221, 546, 630, 250, + 507, 0, 0, 683, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 684, 237, 654, 228, + 0, 653, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 658, 0, 216, 0, + 524, 643, 685, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 660, 666, 667, 669, 670, + 671, 672, 673, 676, 674, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, + 699, 700, 701, 702, 703, 681, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 704, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 651, 652, + 656, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 682, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 657, 664, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 678, 679, 316, 632, + 665, 629, 677, 659, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 416, 0, 395, 606, 607, + 335, 0, 0, 0, 557, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 0, 522, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 2968, + 536, 756, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2969, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, + 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, + 0, 0, 0, 0, 0, 384, 0, 349, 205, 233, + 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, + 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, + 303, 0, 0, 494, 391, 617, 473, 633, 662, 663, + 279, 428, 647, 551, 655, 680, 234, 276, 442, 535, + 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, + 668, 232, 503, 390, 253, 241, 619, 644, 315, 267, + 305, 480, 675, 221, 546, 630, 250, 507, 0, 0, + 683, 258, 529, 642, 631, 223, 626, 528, 413, 345, + 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, + 621, 622, 272, 684, 237, 654, 228, 0, 653, 430, + 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, + 375, 296, 324, 470, 394, 471, 323, 325, 425, 424, + 426, 215, 640, 658, 0, 216, 0, 524, 643, 685, + 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, + 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, + 634, 648, 660, 666, 667, 669, 670, 671, 672, 673, + 676, 674, 429, 329, 520, 352, 392, 0, 0, 447, + 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, + 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, + 0, 270, 271, 0, 605, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 686, 687, 688, 689, 690, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 681, 537, 543, 538, 539, 540, 541, 542, + 0, 544, 0, 0, 0, 0, 0, 419, 0, 623, + 624, 704, 403, 510, 635, 354, 368, 371, 360, 380, + 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, + 377, 383, 263, 218, 410, 420, 608, 330, 224, 225, + 226, 553, 554, 555, 556, 651, 652, 656, 213, 486, + 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, + 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, + 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, + 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, + 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, + 592, 573, 584, 595, 579, 567, 560, 568, 0, 204, + 229, 387, 0, 478, 304, 682, 650, 508, 645, 214, + 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 206, 208, 217, 230, 242, 247, + 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, + 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, + 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, + 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, + 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, + 531, 532, 533, 534, 545, 618, 620, 637, 657, 664, + 504, 404, 452, 476, 611, 0, 0, 317, 318, 467, + 468, 332, 333, 678, 679, 316, 632, 665, 629, 677, + 659, 461, 397, 0, 0, 400, 297, 322, 339, 0, + 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, + 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, + 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, + 282, 456, 416, 0, 395, 606, 607, 335, 0, 0, + 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, + 0, 286, 0, 0, 0, 0, 385, 283, 0, 0, + 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, + 393, 615, 298, 289, 285, 264, 336, 405, 450, 547, + 444, 0, 389, 0, 0, 522, 422, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 342, 262, 344, 210, 435, + 523, 302, 0, 0, 0, 0, 0, 536, 756, 0, + 0, 0, 0, 2935, 0, 0, 0, 0, 249, 0, + 0, 256, 2936, 0, 0, 370, 379, 378, 358, 359, + 361, 363, 369, 376, 382, 355, 364, 0, 0, 641, + 0, 0, 0, 281, 340, 288, 280, 612, 0, 0, + 0, 0, 0, 0, 628, 0, 0, 238, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, + 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, + 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, + 485, 497, 0, 0, 0, 0, 269, 0, 495, 448, + 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, + 494, 391, 617, 473, 633, 662, 663, 279, 428, 647, + 551, 655, 680, 234, 276, 442, 535, 639, 519, 417, + 613, 614, 348, 518, 311, 209, 388, 668, 232, 503, + 390, 253, 241, 619, 644, 315, 267, 305, 480, 675, + 221, 546, 630, 250, 507, 0, 0, 683, 258, 529, + 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, + 481, 284, 309, 0, 0, 274, 437, 621, 622, 272, + 684, 237, 654, 228, 0, 653, 430, 616, 627, 414, + 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, + 470, 394, 471, 323, 325, 425, 424, 426, 215, 640, + 658, 0, 216, 0, 524, 643, 685, 475, 220, 244, + 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, + 386, 441, 469, 465, 474, 0, 610, 634, 648, 660, + 666, 667, 669, 670, 671, 672, 673, 676, 674, 429, + 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, + 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, + 609, 246, 266, 207, 0, 0, 0, 0, 270, 271, + 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 686, 687, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 681, + 537, 543, 538, 539, 540, 541, 542, 0, 544, 0, + 0, 0, 0, 0, 419, 0, 623, 624, 704, 403, + 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, + 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, + 218, 410, 420, 608, 330, 224, 225, 226, 553, 554, + 555, 556, 651, 652, 656, 213, 486, 487, 488, 489, + 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, + 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, + 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, + 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, + 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, + 595, 579, 567, 560, 568, 0, 204, 229, 387, 0, + 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, + 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, + 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, + 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, + 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, + 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, + 534, 545, 618, 620, 637, 657, 664, 504, 404, 452, + 476, 611, 0, 0, 317, 318, 467, 468, 332, 333, + 678, 679, 316, 632, 665, 629, 677, 659, 461, 397, + 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, + 490, 306, 265, 0, 0, 219, 257, 239, 275, 290, + 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, + 252, 509, 548, 549, 550, 552, 415, 282, 456, 416, + 0, 395, 606, 607, 335, 0, 0, 0, 557, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 438, 0, 0, 0, 0, 0, 0, 0, 286, 1867, + 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, + 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, + 289, 285, 264, 336, 405, 450, 547, 444, 0, 389, + 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, + 0, 0, 0, 1866, 536, 756, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, + 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, + 376, 382, 355, 364, 0, 0, 641, 0, 0, 0, + 281, 340, 288, 280, 612, 0, 0, 0, 0, 0, + 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, + 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 661, 0, 0, 0, 0, 0, 0, 0, 384, + 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, + 0, 0, 0, 269, 0, 495, 448, 636, 243, 300, + 482, 455, 493, 463, 303, 0, 0, 494, 391, 617, + 473, 633, 662, 663, 279, 428, 647, 551, 655, 680, + 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, + 518, 311, 209, 388, 668, 232, 503, 390, 253, 241, + 619, 644, 315, 267, 305, 480, 675, 221, 546, 630, + 250, 507, 0, 0, 683, 258, 529, 642, 631, 223, + 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, + 0, 0, 274, 437, 621, 622, 272, 684, 237, 654, + 228, 0, 653, 430, 616, 627, 414, 402, 227, 625, + 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, + 323, 325, 425, 424, 426, 215, 640, 658, 0, 216, + 0, 524, 643, 685, 475, 220, 244, 245, 248, 0, + 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, + 465, 474, 0, 610, 634, 648, 660, 666, 667, 669, + 670, 671, 672, 673, 676, 674, 429, 329, 520, 352, + 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, + 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, + 207, 0, 0, 0, 0, 270, 271, 0, 605, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 700, 701, 702, 703, 681, 537, 543, 538, + 539, 540, 541, 542, 0, 544, 0, 0, 0, 0, + 0, 419, 0, 623, 624, 704, 403, 510, 635, 354, + 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, + 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, + 608, 330, 224, 225, 226, 553, 554, 555, 556, 651, + 652, 656, 213, 486, 487, 488, 489, 308, 646, 326, + 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, + 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, + 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, + 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, + 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, + 560, 568, 0, 204, 229, 387, 0, 478, 304, 682, + 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 206, 208, + 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, + 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, + 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, + 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, + 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, + 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, + 620, 637, 657, 664, 504, 404, 452, 476, 611, 0, + 0, 317, 318, 467, 468, 332, 333, 678, 679, 316, + 632, 665, 629, 677, 659, 461, 397, 0, 0, 400, + 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, + 0, 0, 219, 257, 239, 275, 290, 293, 343, 411, + 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, + 549, 550, 552, 415, 282, 456, 416, 0, 395, 606, + 607, 335, 0, 0, 0, 557, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 0, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 758, 759, 760, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 662, + 663, 279, 428, 647, 551, 655, 680, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 668, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 675, 221, 546, 630, 250, 507, 0, + 0, 683, 258, 529, 642, 631, 223, 626, 528, 413, + 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, + 437, 621, 622, 272, 684, 237, 654, 228, 0, 653, + 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, + 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, + 424, 426, 215, 640, 658, 0, 216, 0, 524, 643, + 685, 475, 220, 244, 245, 248, 0, 295, 299, 307, + 310, 320, 321, 331, 386, 441, 469, 465, 474, 0, + 610, 634, 648, 660, 666, 667, 669, 670, 671, 672, + 673, 676, 674, 429, 329, 520, 352, 392, 0, 0, + 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, + 261, 260, 235, 512, 609, 246, 266, 207, 0, 0, + 0, 0, 270, 271, 0, 605, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 686, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 681, 537, 543, 538, 539, 540, 541, + 542, 0, 544, 0, 0, 0, 0, 0, 419, 0, + 623, 624, 704, 403, 510, 635, 354, 368, 371, 360, + 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, + 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, + 225, 226, 553, 554, 555, 556, 651, 652, 656, 213, + 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, + 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, + 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, + 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, + 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, + 593, 592, 573, 584, 595, 579, 567, 560, 568, 0, + 204, 229, 387, 0, 478, 304, 682, 650, 508, 645, + 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 206, 208, 217, 230, 242, + 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, + 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, + 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, + 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, + 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, + 526, 531, 532, 533, 534, 545, 618, 620, 637, 657, + 664, 504, 404, 452, 476, 611, 0, 0, 317, 318, + 467, 468, 332, 333, 678, 679, 316, 632, 665, 629, + 677, 659, 461, 397, 0, 0, 400, 297, 322, 339, + 0, 649, 527, 236, 490, 306, 265, 0, 0, 219, + 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, + 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, + 415, 282, 456, 416, 0, 395, 606, 607, 335, 0, + 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, + 0, 0, 286, 0, 0, 0, 0, 385, 283, 0, + 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, + 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, + 547, 444, 0, 389, 0, 0, 522, 422, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, + 435, 523, 302, 0, 0, 0, 0, 0, 536, 756, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, + 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, + 359, 361, 363, 369, 376, 382, 355, 364, 0, 0, + 641, 0, 0, 0, 281, 340, 288, 280, 612, 0, + 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, + 0, 477, 0, 319, 334, 0, 0, 0, 0, 4257, + 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, + 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, + 434, 485, 497, 0, 0, 0, 0, 269, 0, 495, + 448, 636, 243, 300, 482, 455, 493, 463, 303, 0, + 0, 494, 391, 617, 473, 633, 662, 663, 279, 428, + 647, 551, 655, 680, 234, 276, 442, 535, 639, 519, + 417, 613, 614, 348, 518, 311, 209, 388, 668, 232, + 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, + 675, 221, 546, 630, 250, 507, 0, 0, 683, 258, + 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, + 0, 481, 284, 309, 0, 0, 274, 437, 621, 622, + 272, 684, 237, 654, 228, 0, 653, 430, 616, 627, + 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, + 324, 470, 394, 471, 323, 325, 425, 424, 426, 215, + 640, 658, 0, 216, 0, 524, 643, 685, 475, 220, + 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, + 331, 386, 441, 469, 465, 474, 0, 610, 634, 648, + 660, 666, 667, 669, 670, 671, 672, 673, 676, 674, + 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, + 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, + 512, 609, 246, 266, 207, 0, 0, 0, 0, 270, + 271, 0, 605, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 681, 537, 543, 538, 539, 540, 541, 542, 0, 544, + 0, 0, 0, 0, 0, 419, 0, 623, 624, 704, + 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, + 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, + 263, 218, 410, 420, 608, 330, 224, 225, 226, 553, + 554, 555, 556, 651, 652, 656, 213, 486, 487, 488, + 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, + 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, + 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, + 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, + 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, + 584, 595, 579, 567, 560, 568, 0, 204, 229, 387, + 0, 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 300, 0, 407, 260, 0, 460, 0, 0, - 0, 641, 0, 0, 0, 0, 0, 0, 0, 369, - 0, 334, 199, 227, 0, 0, 417, 468, 480, 0, - 0, 0, 256, 0, 478, 431, 616, 235, 287, 465, - 438, 476, 446, 290, 0, 0, 477, 376, 597, 456, - 613, 642, 643, 266, 411, 627, 533, 635, 660, 228, - 263, 425, 517, 619, 501, 402, 593, 594, 333, 500, - 298, 203, 373, 648, 226, 486, 375, 244, 233, 599, - 624, 302, 254, 292, 463, 655, 215, 528, 610, 241, - 490, 0, 0, 663, 249, 511, 622, 611, 217, 606, - 510, 398, 330, 331, 216, 0, 464, 271, 296, 0, - 0, 261, 420, 601, 602, 259, 664, 230, 634, 222, - 0, 633, 413, 596, 607, 399, 387, 221, 605, 397, - 386, 338, 359, 360, 283, 310, 453, 379, 454, 309, - 311, 409, 408, 410, 209, 620, 638, 0, 210, 0, - 506, 623, 665, 458, 214, 236, 237, 239, 0, 282, - 286, 294, 297, 306, 307, 317, 371, 424, 452, 448, - 457, 0, 590, 614, 628, 640, 646, 647, 649, 650, - 651, 652, 653, 656, 654, 412, 315, 502, 337, 377, - 0, 0, 430, 479, 242, 618, 503, 201, 0, 0, - 0, 0, 257, 258, 0, 586, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 666, 667, 668, 669, 670, - 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, - 681, 682, 683, 661, 519, 525, 520, 521, 522, 523, - 524, 0, 526, 0, 0, 0, 0, 0, 403, 0, - 603, 604, 684, 388, 493, 615, 339, 353, 356, 345, - 365, 0, 366, 341, 342, 347, 350, 351, 352, 357, - 358, 362, 368, 251, 212, 395, 404, 589, 316, 218, - 219, 220, 535, 536, 537, 538, 631, 632, 636, 207, - 469, 470, 471, 472, 295, 626, 312, 475, 474, 335, - 336, 383, 455, 551, 553, 564, 568, 570, 572, 578, - 581, 552, 554, 565, 569, 571, 573, 579, 582, 541, - 543, 545, 547, 560, 559, 556, 584, 585, 562, 567, - 546, 558, 563, 576, 583, 580, 540, 544, 548, 557, - 575, 574, 555, 566, 577, 561, 549, 542, 550, 0, - 198, 223, 372, 0, 461, 291, 662, 630, 491, 625, - 208, 225, 0, 265, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 200, 202, 211, 224, 234, - 238, 245, 264, 279, 281, 288, 301, 313, 314, 322, - 323, 326, 332, 384, 391, 392, 393, 394, 414, 415, - 416, 419, 422, 423, 426, 428, 429, 432, 437, 441, - 442, 443, 445, 447, 449, 462, 467, 481, 482, 483, - 484, 485, 488, 489, 495, 496, 497, 498, 499, 507, - 508, 513, 514, 515, 516, 527, 598, 600, 617, 637, - 644, 487, 389, 435, 459, 591, 304, 305, 450, 451, - 318, 319, 658, 659, 303, 612, 645, 609, 657, 639, - 444, 382, 0, 0, 385, 284, 308, 324, 0, 629, - 509, 229, 473, 293, 253, 0, 0, 213, 248, 232, - 262, 277, 280, 328, 396, 405, 434, 440, 299, 274, - 246, 466, 243, 492, 530, 531, 532, 534, 400, 269, - 439, 401, 0, 380, 587, 588, 320, 0, 0, 0, - 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, - 273, 0, 0, 0, 0, 370, 270, 0, 0, 206, - 512, 0, 436, 0, 205, 0, 494, 255, 381, 378, - 595, 285, 276, 272, 252, 321, 390, 433, 529, 427, - 0, 374, 0, 0, 504, 406, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 327, 250, 329, 204, 418, 505, - 289, 0, 0, 0, 0, 1801, 518, 736, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, - 247, 0, 0, 0, 355, 364, 363, 343, 344, 346, - 348, 354, 361, 367, 340, 349, 0, 0, 621, 0, - 0, 0, 268, 325, 275, 267, 592, 0, 0, 0, - 0, 0, 0, 608, 0, 0, 231, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, + 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, + 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, + 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, + 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, + 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, + 533, 534, 545, 618, 620, 637, 657, 664, 504, 404, + 452, 476, 611, 0, 0, 317, 318, 467, 468, 332, + 333, 678, 679, 316, 632, 665, 629, 677, 659, 461, + 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, + 236, 490, 306, 265, 0, 0, 219, 257, 239, 275, + 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, + 483, 252, 509, 548, 549, 550, 552, 415, 282, 456, + 416, 0, 395, 606, 607, 335, 0, 0, 0, 557, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 438, 0, 0, 0, 0, 0, 0, 0, 286, + 0, 0, 0, 0, 385, 283, 0, 0, 212, 530, + 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, + 298, 289, 285, 264, 336, 405, 450, 547, 444, 0, + 389, 0, 0, 522, 422, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 342, 262, 344, 210, 435, 523, 302, + 0, 0, 0, 0, 0, 536, 756, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, + 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, + 369, 376, 382, 355, 364, 0, 0, 641, 0, 0, + 0, 281, 340, 288, 280, 612, 0, 0, 0, 0, + 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, + 319, 334, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 661, 0, 0, 0, 4173, 0, 0, 0, + 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, + 0, 0, 0, 0, 269, 0, 495, 448, 636, 243, + 300, 482, 455, 493, 463, 303, 0, 0, 494, 391, + 617, 473, 633, 662, 663, 279, 428, 647, 551, 655, + 680, 234, 276, 442, 535, 639, 519, 417, 613, 614, + 348, 518, 311, 209, 388, 668, 232, 503, 390, 253, + 241, 619, 644, 315, 267, 305, 480, 675, 221, 546, + 630, 250, 507, 0, 0, 683, 258, 529, 642, 631, + 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, + 309, 0, 0, 274, 437, 621, 622, 272, 684, 237, + 654, 228, 0, 653, 430, 616, 627, 414, 402, 227, + 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, + 471, 323, 325, 425, 424, 426, 215, 640, 658, 0, + 216, 0, 524, 643, 685, 475, 220, 244, 245, 248, + 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, + 469, 465, 474, 0, 610, 634, 648, 660, 666, 667, + 669, 670, 671, 672, 673, 676, 674, 429, 329, 520, + 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, + 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, + 266, 207, 0, 0, 0, 0, 270, 271, 0, 605, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, + 697, 698, 699, 700, 701, 702, 703, 681, 537, 543, + 538, 539, 540, 541, 542, 0, 544, 0, 0, 0, + 0, 0, 419, 0, 623, 624, 704, 403, 510, 635, + 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, + 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, + 420, 608, 330, 224, 225, 226, 553, 554, 555, 556, + 651, 652, 656, 213, 486, 487, 488, 489, 308, 646, + 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, + 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, + 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, + 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, + 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, + 567, 560, 568, 0, 204, 229, 387, 0, 478, 304, + 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, + 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, + 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, + 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, + 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, + 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, + 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, + 618, 620, 637, 657, 664, 504, 404, 452, 476, 611, + 0, 0, 317, 318, 467, 468, 332, 333, 678, 679, + 316, 632, 665, 629, 677, 659, 461, 397, 0, 0, + 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, + 265, 0, 0, 219, 257, 239, 275, 290, 293, 343, + 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, + 548, 549, 550, 552, 415, 282, 456, 416, 0, 395, + 606, 607, 335, 0, 0, 0, 557, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, + 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, + 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, + 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, + 264, 336, 405, 450, 547, 444, 0, 389, 0, 0, + 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 342, 262, 344, 210, 435, 523, 302, 0, 0, 0, + 0, 2023, 536, 202, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, + 370, 379, 378, 358, 359, 361, 363, 369, 376, 382, + 355, 364, 0, 0, 641, 0, 0, 0, 281, 340, + 288, 280, 612, 0, 0, 0, 0, 0, 0, 628, + 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 662, 663, 279, 428, 647, 551, 655, 680, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 668, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 675, 221, 546, 630, 250, 507, + 0, 0, 683, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 684, 237, 654, 228, 0, + 653, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 658, 0, 216, 0, 524, + 643, 685, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 660, 666, 667, 669, 670, 671, + 672, 673, 676, 674, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 681, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 704, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 651, 652, 656, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 682, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 657, 664, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 678, 679, 316, 632, 665, + 629, 677, 659, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 416, 0, 395, 606, 607, 335, + 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, + 0, 0, 0, 286, 0, 0, 0, 0, 385, 283, + 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, + 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, + 450, 547, 444, 0, 389, 0, 0, 522, 422, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, + 210, 435, 523, 302, 0, 0, 0, 0, 0, 536, + 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, + 358, 359, 361, 363, 369, 376, 382, 355, 364, 0, + 0, 641, 0, 0, 0, 281, 340, 288, 280, 612, + 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, + 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, + 3817, 0, 0, 0, 384, 0, 349, 205, 233, 0, + 0, 434, 485, 497, 0, 0, 0, 0, 269, 0, + 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, + 0, 0, 494, 391, 617, 473, 633, 662, 663, 279, + 428, 647, 551, 655, 680, 234, 276, 442, 535, 639, + 519, 417, 613, 614, 348, 518, 311, 209, 388, 668, + 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, + 480, 675, 221, 546, 630, 250, 507, 0, 0, 683, + 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, + 222, 0, 481, 284, 309, 0, 0, 274, 437, 621, + 622, 272, 684, 237, 654, 228, 0, 653, 430, 616, + 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, + 296, 324, 470, 394, 471, 323, 325, 425, 424, 426, + 215, 640, 658, 0, 216, 0, 524, 643, 685, 475, + 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, + 321, 331, 386, 441, 469, 465, 474, 0, 610, 634, + 648, 660, 666, 667, 669, 670, 671, 672, 673, 676, + 674, 429, 329, 520, 352, 392, 0, 0, 447, 496, + 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, + 235, 512, 609, 246, 266, 207, 0, 0, 0, 0, + 270, 271, 0, 605, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 681, 537, 543, 538, 539, 540, 541, 542, 0, + 544, 0, 0, 0, 0, 0, 419, 0, 623, 624, + 704, 403, 510, 635, 354, 368, 371, 360, 380, 0, + 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, + 383, 263, 218, 410, 420, 608, 330, 224, 225, 226, + 553, 554, 555, 556, 651, 652, 656, 213, 486, 487, + 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, + 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, + 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, + 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, + 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, + 573, 584, 595, 579, 567, 560, 568, 0, 204, 229, + 387, 0, 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 300, 0, 407, 260, 0, 460, 0, - 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, - 369, 0, 334, 199, 227, 0, 0, 417, 468, 480, - 0, 0, 0, 256, 0, 478, 431, 616, 235, 287, - 465, 438, 476, 446, 290, 0, 0, 477, 376, 597, - 456, 613, 642, 643, 266, 411, 627, 533, 635, 660, - 228, 263, 425, 517, 619, 501, 402, 593, 594, 333, - 500, 298, 203, 373, 648, 226, 486, 375, 244, 233, - 599, 624, 302, 254, 292, 463, 655, 215, 528, 610, - 241, 490, 0, 0, 663, 249, 511, 622, 611, 217, - 606, 510, 398, 330, 331, 216, 0, 464, 271, 296, - 0, 0, 261, 420, 601, 602, 259, 664, 230, 634, - 222, 0, 633, 413, 596, 607, 399, 387, 221, 605, - 397, 386, 338, 359, 360, 283, 310, 453, 379, 454, - 309, 311, 409, 408, 410, 209, 620, 638, 0, 210, - 0, 506, 623, 665, 458, 214, 236, 237, 239, 0, - 282, 286, 294, 297, 306, 307, 317, 371, 424, 452, - 448, 457, 0, 590, 614, 628, 640, 646, 647, 649, - 650, 651, 652, 653, 656, 654, 412, 315, 502, 337, - 377, 0, 0, 430, 479, 242, 618, 503, 201, 0, - 0, 0, 0, 257, 258, 0, 586, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 666, 667, 668, 669, - 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, - 680, 681, 682, 683, 661, 519, 525, 520, 521, 522, - 523, 524, 0, 526, 0, 0, 0, 0, 0, 403, - 0, 603, 604, 684, 388, 493, 615, 339, 353, 356, - 345, 365, 0, 366, 341, 342, 347, 350, 351, 352, - 357, 358, 362, 368, 251, 212, 395, 404, 589, 316, - 218, 219, 220, 535, 536, 537, 538, 631, 632, 636, - 207, 469, 470, 471, 472, 295, 626, 312, 475, 474, - 335, 336, 383, 455, 551, 553, 564, 568, 570, 572, - 578, 581, 552, 554, 565, 569, 571, 573, 579, 582, - 541, 543, 545, 547, 560, 559, 556, 584, 585, 562, - 567, 546, 558, 563, 576, 583, 580, 540, 544, 548, - 557, 575, 574, 555, 566, 577, 561, 549, 542, 550, - 0, 198, 223, 372, 0, 461, 291, 662, 630, 491, - 625, 208, 225, 0, 265, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 200, 202, 211, 224, - 234, 238, 245, 264, 279, 281, 288, 301, 313, 314, - 322, 323, 326, 332, 384, 391, 392, 393, 394, 414, - 415, 416, 419, 422, 423, 426, 428, 429, 432, 437, - 441, 442, 443, 445, 447, 449, 462, 467, 481, 482, - 483, 484, 485, 488, 489, 495, 496, 497, 498, 499, - 507, 508, 513, 514, 515, 516, 527, 598, 600, 617, - 637, 644, 487, 389, 435, 459, 591, 304, 305, 450, - 451, 318, 319, 658, 659, 303, 612, 645, 609, 657, - 639, 444, 382, 0, 0, 385, 284, 308, 324, 0, - 629, 509, 229, 473, 293, 253, 0, 0, 213, 248, - 232, 262, 277, 280, 328, 396, 405, 434, 440, 299, - 274, 246, 466, 243, 492, 530, 531, 532, 534, 400, - 269, 439, 401, 0, 380, 587, 588, 320, 0, 0, - 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, - 0, 273, 0, 0, 0, 0, 370, 270, 0, 0, - 206, 512, 0, 436, 0, 205, 0, 494, 255, 381, - 378, 595, 285, 276, 272, 252, 321, 390, 433, 529, - 427, 0, 374, 0, 0, 504, 406, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 327, 250, 329, 204, 418, - 505, 289, 0, 0, 0, 0, 0, 518, 196, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, - 0, 247, 0, 0, 0, 355, 364, 363, 343, 344, - 346, 348, 354, 361, 367, 340, 349, 0, 0, 621, - 0, 0, 0, 268, 325, 275, 267, 592, 0, 0, - 0, 0, 0, 0, 608, 0, 0, 231, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 300, 0, 407, 260, 0, 460, - 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, - 0, 369, 0, 334, 199, 227, 0, 0, 417, 468, - 480, 0, 0, 0, 256, 0, 478, 431, 616, 235, - 287, 465, 438, 476, 446, 290, 0, 0, 477, 376, - 597, 456, 613, 642, 643, 266, 411, 627, 533, 635, - 660, 228, 263, 425, 517, 619, 501, 402, 593, 594, - 333, 500, 298, 203, 373, 648, 226, 486, 375, 244, - 233, 599, 624, 302, 254, 292, 463, 655, 215, 528, - 610, 241, 490, 0, 0, 663, 249, 511, 622, 611, - 217, 606, 510, 398, 330, 331, 216, 0, 464, 271, - 296, 0, 0, 261, 420, 601, 602, 259, 664, 230, - 634, 222, 0, 633, 413, 596, 607, 399, 387, 221, - 605, 397, 386, 338, 359, 360, 283, 310, 453, 379, - 454, 309, 311, 409, 408, 410, 209, 620, 638, 0, - 210, 0, 506, 623, 665, 458, 214, 236, 237, 239, - 0, 282, 286, 294, 297, 306, 307, 317, 371, 424, - 452, 448, 457, 0, 590, 614, 628, 640, 646, 647, - 649, 650, 651, 652, 653, 656, 654, 412, 315, 502, - 337, 377, 0, 0, 430, 479, 242, 618, 503, 201, - 0, 0, 0, 0, 257, 258, 0, 586, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 666, 667, 668, - 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, - 679, 680, 681, 682, 683, 661, 519, 525, 520, 521, - 522, 523, 524, 0, 526, 0, 0, 0, 0, 0, - 403, 0, 603, 604, 684, 388, 493, 615, 339, 353, - 356, 345, 365, 0, 366, 341, 342, 347, 350, 351, - 352, 357, 358, 362, 368, 251, 212, 395, 404, 589, - 316, 218, 219, 220, 535, 536, 537, 538, 631, 632, - 636, 207, 469, 470, 471, 472, 295, 626, 312, 475, - 474, 335, 336, 383, 455, 551, 553, 564, 568, 570, - 572, 578, 581, 552, 554, 565, 569, 571, 573, 579, - 582, 541, 543, 545, 547, 560, 559, 556, 584, 585, - 562, 567, 546, 558, 563, 576, 583, 580, 540, 544, - 548, 557, 575, 574, 555, 566, 577, 561, 549, 542, - 550, 0, 198, 223, 372, 2100, 461, 291, 662, 630, - 491, 625, 208, 225, 0, 265, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 200, 202, 211, - 224, 234, 238, 245, 264, 279, 281, 288, 301, 313, - 314, 322, 323, 326, 332, 384, 391, 392, 393, 394, - 414, 415, 416, 419, 422, 423, 426, 428, 429, 432, - 437, 441, 442, 443, 445, 447, 449, 462, 467, 481, - 482, 483, 484, 485, 488, 489, 495, 496, 497, 498, - 499, 507, 508, 513, 514, 515, 516, 527, 598, 600, - 617, 637, 644, 487, 389, 435, 459, 591, 304, 305, - 450, 451, 318, 319, 658, 659, 303, 612, 645, 609, - 657, 639, 444, 382, 0, 0, 385, 284, 308, 324, - 0, 629, 509, 229, 473, 293, 253, 0, 0, 213, - 248, 232, 262, 277, 280, 328, 396, 405, 434, 440, - 299, 274, 246, 466, 243, 492, 530, 531, 532, 534, - 400, 269, 439, 401, 0, 380, 587, 588, 320, 0, - 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, - 0, 0, 273, 0, 0, 0, 0, 370, 270, 0, - 0, 206, 512, 0, 436, 0, 205, 0, 494, 255, - 381, 378, 595, 285, 276, 272, 252, 321, 390, 433, - 529, 427, 0, 374, 0, 0, 504, 406, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 327, 250, 329, 204, - 418, 505, 289, 0, 0, 0, 0, 2091, 518, 736, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, - 0, 0, 247, 0, 0, 0, 355, 364, 363, 343, - 344, 346, 348, 354, 361, 367, 340, 349, 0, 0, - 621, 0, 0, 0, 268, 325, 275, 267, 592, 0, - 0, 0, 0, 0, 0, 608, 0, 0, 231, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 300, 0, 407, 260, 0, - 460, 0, 0, 0, 641, 0, 0, 0, 0, 0, - 0, 0, 369, 0, 334, 199, 227, 0, 0, 417, - 468, 480, 0, 0, 0, 256, 0, 478, 431, 616, - 235, 287, 465, 438, 476, 446, 290, 0, 0, 477, - 376, 597, 456, 613, 642, 643, 266, 411, 627, 533, - 635, 660, 228, 263, 425, 517, 619, 501, 402, 593, - 594, 333, 500, 298, 203, 373, 648, 226, 486, 375, - 244, 233, 599, 624, 302, 254, 292, 463, 655, 215, - 528, 610, 241, 490, 0, 0, 663, 249, 511, 622, - 611, 217, 606, 510, 398, 330, 331, 216, 0, 464, - 271, 296, 0, 0, 261, 420, 601, 602, 259, 664, - 230, 634, 222, 0, 633, 413, 596, 607, 399, 387, - 221, 605, 397, 386, 338, 359, 360, 283, 310, 453, - 379, 454, 309, 311, 409, 408, 410, 209, 620, 638, - 0, 210, 0, 506, 623, 665, 458, 214, 236, 237, - 239, 0, 282, 286, 294, 297, 306, 307, 317, 371, - 424, 452, 448, 457, 0, 590, 614, 628, 640, 646, - 647, 649, 650, 651, 652, 653, 656, 654, 412, 315, - 502, 337, 377, 0, 0, 430, 479, 242, 618, 503, - 201, 0, 0, 0, 0, 257, 258, 0, 586, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 666, 667, - 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, - 678, 679, 680, 681, 682, 683, 661, 519, 525, 520, - 521, 522, 523, 524, 0, 526, 0, 0, 0, 0, - 0, 403, 0, 603, 604, 684, 388, 493, 615, 339, - 353, 356, 345, 365, 0, 366, 341, 342, 347, 350, - 351, 352, 357, 358, 362, 368, 251, 212, 395, 404, - 589, 316, 218, 219, 220, 535, 536, 537, 538, 631, - 632, 636, 207, 469, 470, 471, 472, 295, 626, 312, - 475, 474, 335, 336, 383, 455, 551, 553, 564, 568, - 570, 572, 578, 581, 552, 554, 565, 569, 571, 573, - 579, 582, 541, 543, 545, 547, 560, 559, 556, 584, - 585, 562, 567, 546, 558, 563, 576, 583, 580, 540, - 544, 548, 557, 575, 574, 555, 566, 577, 561, 549, - 542, 550, 0, 198, 223, 372, 0, 461, 291, 662, - 630, 491, 625, 208, 225, 0, 265, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 200, 202, - 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, - 313, 314, 322, 323, 326, 332, 384, 391, 392, 393, - 394, 414, 415, 416, 419, 422, 423, 426, 428, 429, - 432, 437, 441, 442, 443, 445, 447, 449, 462, 467, - 481, 482, 483, 484, 485, 488, 489, 495, 496, 497, - 498, 499, 507, 508, 513, 514, 515, 516, 527, 598, - 600, 617, 637, 644, 487, 389, 435, 459, 591, 304, - 305, 450, 451, 318, 319, 658, 659, 303, 612, 645, - 609, 657, 639, 444, 382, 0, 0, 385, 284, 308, - 324, 0, 629, 509, 229, 473, 293, 253, 0, 0, - 213, 248, 232, 262, 277, 280, 328, 396, 405, 434, - 440, 299, 274, 246, 466, 243, 492, 530, 531, 532, - 534, 400, 269, 439, 401, 0, 380, 587, 588, 320, - 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, - 0, 0, 0, 273, 0, 0, 0, 0, 370, 270, - 0, 1949, 206, 512, 0, 436, 0, 205, 0, 494, - 255, 381, 378, 595, 285, 276, 272, 252, 321, 390, - 433, 529, 427, 0, 374, 0, 0, 504, 406, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 250, 329, - 204, 418, 505, 289, 0, 0, 0, 0, 0, 518, - 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 240, 0, 0, 247, 0, 0, 0, 355, 364, 363, - 343, 344, 346, 348, 354, 361, 367, 340, 349, 0, - 0, 621, 0, 0, 0, 268, 325, 275, 267, 592, - 0, 0, 0, 0, 0, 0, 608, 0, 0, 231, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 300, 0, 407, 260, - 0, 460, 0, 0, 0, 641, 0, 0, 0, 0, - 0, 0, 0, 369, 0, 334, 199, 227, 0, 0, - 417, 468, 480, 0, 0, 0, 256, 0, 478, 431, - 616, 235, 287, 465, 438, 476, 446, 290, 0, 0, - 477, 376, 597, 456, 613, 642, 643, 266, 411, 627, - 533, 635, 660, 228, 263, 425, 517, 619, 501, 402, - 593, 594, 333, 500, 298, 203, 373, 648, 226, 486, - 375, 244, 233, 599, 624, 302, 254, 292, 463, 655, - 215, 528, 610, 241, 490, 0, 0, 663, 249, 511, - 622, 611, 217, 606, 510, 398, 330, 331, 216, 0, - 464, 271, 296, 0, 0, 261, 420, 601, 602, 259, - 664, 230, 634, 222, 0, 633, 413, 596, 607, 399, - 387, 221, 605, 397, 386, 338, 359, 360, 283, 310, - 453, 379, 454, 309, 311, 409, 408, 410, 209, 620, - 638, 0, 210, 0, 506, 623, 665, 458, 214, 236, - 237, 239, 0, 282, 286, 294, 297, 306, 307, 317, - 371, 424, 452, 448, 457, 0, 590, 614, 628, 640, - 646, 647, 649, 650, 651, 652, 653, 656, 654, 412, - 315, 502, 337, 377, 0, 0, 430, 479, 242, 618, - 503, 201, 0, 0, 0, 0, 257, 258, 0, 586, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, - 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, - 677, 678, 679, 680, 681, 682, 683, 661, 519, 525, - 520, 521, 522, 523, 524, 0, 526, 0, 0, 0, - 0, 0, 403, 0, 603, 604, 684, 388, 493, 615, - 339, 353, 356, 345, 365, 0, 366, 341, 342, 347, - 350, 351, 352, 357, 358, 362, 368, 251, 212, 395, - 404, 589, 316, 218, 219, 220, 535, 536, 537, 538, - 631, 632, 636, 207, 469, 470, 471, 472, 295, 626, - 312, 475, 474, 335, 336, 383, 455, 551, 553, 564, - 568, 570, 572, 578, 581, 552, 554, 565, 569, 571, - 573, 579, 582, 541, 543, 545, 547, 560, 559, 556, - 584, 585, 562, 567, 546, 558, 563, 576, 583, 580, - 540, 544, 548, 557, 575, 574, 555, 566, 577, 561, - 549, 542, 550, 0, 198, 223, 372, 0, 461, 291, - 662, 630, 491, 625, 208, 225, 0, 265, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, - 202, 211, 224, 234, 238, 245, 264, 279, 281, 288, - 301, 313, 314, 322, 323, 326, 332, 384, 391, 392, - 393, 394, 414, 415, 416, 419, 422, 423, 426, 428, - 429, 432, 437, 441, 442, 443, 445, 447, 449, 462, - 467, 481, 482, 483, 484, 485, 488, 489, 495, 496, - 497, 498, 499, 507, 508, 513, 514, 515, 516, 527, - 598, 600, 617, 637, 644, 487, 389, 435, 459, 591, - 304, 305, 450, 451, 318, 319, 658, 659, 303, 612, - 645, 609, 657, 639, 444, 382, 0, 0, 385, 284, - 308, 324, 0, 629, 509, 229, 473, 293, 253, 0, - 0, 213, 248, 232, 262, 277, 280, 328, 396, 405, - 434, 440, 299, 274, 246, 466, 243, 492, 530, 531, - 532, 534, 400, 269, 439, 401, 0, 380, 587, 588, - 320, 0, 0, 0, 539, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, - 0, 0, 0, 0, 273, 0, 0, 0, 0, 370, - 270, 0, 1947, 206, 512, 0, 436, 0, 205, 0, - 494, 255, 381, 378, 595, 285, 276, 272, 252, 321, - 390, 433, 529, 427, 0, 374, 0, 0, 504, 406, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 327, 250, - 329, 204, 418, 505, 289, 0, 0, 0, 0, 0, - 518, 736, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 240, 0, 0, 247, 0, 0, 0, 355, 364, - 363, 343, 344, 346, 348, 354, 361, 367, 340, 349, - 0, 0, 621, 0, 0, 0, 268, 325, 275, 267, - 592, 0, 0, 0, 0, 0, 0, 608, 0, 0, - 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 300, 0, 407, - 260, 0, 460, 0, 0, 0, 641, 0, 0, 0, - 0, 0, 0, 0, 369, 0, 334, 199, 227, 0, - 0, 417, 468, 480, 0, 0, 0, 256, 0, 478, - 431, 616, 235, 287, 465, 438, 476, 446, 290, 0, - 0, 477, 376, 597, 456, 613, 642, 643, 266, 411, - 627, 533, 635, 660, 228, 263, 425, 517, 619, 501, - 402, 593, 594, 333, 500, 298, 203, 373, 648, 226, - 486, 375, 244, 233, 599, 624, 302, 254, 292, 463, - 655, 215, 528, 610, 241, 490, 0, 0, 663, 249, - 511, 622, 611, 217, 606, 510, 398, 330, 331, 216, - 0, 464, 271, 296, 0, 0, 261, 420, 601, 602, - 259, 664, 230, 634, 222, 0, 633, 413, 596, 607, - 399, 387, 221, 605, 397, 386, 338, 359, 360, 283, - 310, 453, 379, 454, 309, 311, 409, 408, 410, 209, - 620, 638, 0, 210, 0, 506, 623, 665, 458, 214, - 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, - 317, 371, 424, 452, 448, 457, 0, 590, 614, 628, - 640, 646, 647, 649, 650, 651, 652, 653, 656, 654, - 412, 315, 502, 337, 377, 0, 0, 430, 479, 242, - 618, 503, 201, 0, 0, 0, 0, 257, 258, 0, - 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, - 676, 677, 678, 679, 680, 681, 682, 683, 661, 519, - 525, 520, 521, 522, 523, 524, 0, 526, 0, 0, - 0, 0, 0, 403, 0, 603, 604, 684, 388, 493, - 615, 339, 353, 356, 345, 365, 0, 366, 341, 342, - 347, 350, 351, 352, 357, 358, 362, 368, 251, 212, - 395, 404, 589, 316, 218, 219, 220, 535, 536, 537, - 538, 631, 632, 636, 207, 469, 470, 471, 472, 295, - 626, 312, 475, 474, 335, 336, 383, 455, 551, 553, - 564, 568, 570, 572, 578, 581, 552, 554, 565, 569, - 571, 573, 579, 582, 541, 543, 545, 547, 560, 559, - 556, 584, 585, 562, 567, 546, 558, 563, 576, 583, - 580, 540, 544, 548, 557, 575, 574, 555, 566, 577, - 561, 549, 542, 550, 0, 198, 223, 372, 0, 461, - 291, 662, 630, 491, 625, 208, 225, 0, 265, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, - 288, 301, 313, 314, 322, 323, 326, 332, 384, 391, - 392, 393, 394, 414, 415, 416, 419, 422, 423, 426, - 428, 429, 432, 437, 441, 442, 443, 445, 447, 449, - 462, 467, 481, 482, 483, 484, 485, 488, 489, 495, - 496, 497, 498, 499, 507, 508, 513, 514, 515, 516, - 527, 598, 600, 617, 637, 644, 487, 389, 435, 459, - 591, 304, 305, 450, 451, 318, 319, 658, 659, 303, - 612, 645, 609, 657, 639, 444, 382, 0, 0, 385, - 284, 308, 324, 0, 629, 509, 229, 473, 293, 253, - 0, 0, 213, 248, 232, 262, 277, 280, 328, 396, - 405, 434, 440, 299, 274, 246, 466, 243, 492, 530, - 531, 532, 534, 400, 269, 439, 401, 0, 380, 587, - 588, 320, 0, 0, 0, 539, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, - 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, - 370, 270, 0, 1945, 206, 512, 0, 436, 0, 205, - 0, 494, 255, 381, 378, 595, 285, 276, 272, 252, - 321, 390, 433, 529, 427, 0, 374, 0, 0, 504, - 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, - 250, 329, 204, 418, 505, 289, 0, 0, 0, 0, - 0, 518, 736, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 240, 0, 0, 247, 0, 0, 0, 355, - 364, 363, 343, 344, 346, 348, 354, 361, 367, 340, - 349, 0, 0, 621, 0, 0, 0, 268, 325, 275, - 267, 592, 0, 0, 0, 0, 0, 0, 608, 0, - 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, - 407, 260, 0, 460, 0, 0, 0, 641, 0, 0, - 0, 0, 0, 0, 0, 369, 0, 334, 199, 227, - 0, 0, 417, 468, 480, 0, 0, 0, 256, 0, - 478, 431, 616, 235, 287, 465, 438, 476, 446, 290, - 0, 0, 477, 376, 597, 456, 613, 642, 643, 266, - 411, 627, 533, 635, 660, 228, 263, 425, 517, 619, - 501, 402, 593, 594, 333, 500, 298, 203, 373, 648, - 226, 486, 375, 244, 233, 599, 624, 302, 254, 292, - 463, 655, 215, 528, 610, 241, 490, 0, 0, 663, - 249, 511, 622, 611, 217, 606, 510, 398, 330, 331, - 216, 0, 464, 271, 296, 0, 0, 261, 420, 601, - 602, 259, 664, 230, 634, 222, 0, 633, 413, 596, - 607, 399, 387, 221, 605, 397, 386, 338, 359, 360, - 283, 310, 453, 379, 454, 309, 311, 409, 408, 410, - 209, 620, 638, 0, 210, 0, 506, 623, 665, 458, - 214, 236, 237, 239, 0, 282, 286, 294, 297, 306, - 307, 317, 371, 424, 452, 448, 457, 0, 590, 614, - 628, 640, 646, 647, 649, 650, 651, 652, 653, 656, - 654, 412, 315, 502, 337, 377, 0, 0, 430, 479, - 242, 618, 503, 201, 0, 0, 0, 0, 257, 258, - 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 666, 667, 668, 669, 670, 671, 672, 673, 674, - 675, 676, 677, 678, 679, 680, 681, 682, 683, 661, - 519, 525, 520, 521, 522, 523, 524, 0, 526, 0, - 0, 0, 0, 0, 403, 0, 603, 604, 684, 388, - 493, 615, 339, 353, 356, 345, 365, 0, 366, 341, - 342, 347, 350, 351, 352, 357, 358, 362, 368, 251, - 212, 395, 404, 589, 316, 218, 219, 220, 535, 536, - 537, 538, 631, 632, 636, 207, 469, 470, 471, 472, - 295, 626, 312, 475, 474, 335, 336, 383, 455, 551, - 553, 564, 568, 570, 572, 578, 581, 552, 554, 565, - 569, 571, 573, 579, 582, 541, 543, 545, 547, 560, - 559, 556, 584, 585, 562, 567, 546, 558, 563, 576, - 583, 580, 540, 544, 548, 557, 575, 574, 555, 566, - 577, 561, 549, 542, 550, 0, 198, 223, 372, 0, - 461, 291, 662, 630, 491, 625, 208, 225, 0, 265, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 200, 202, 211, 224, 234, 238, 245, 264, 279, - 281, 288, 301, 313, 314, 322, 323, 326, 332, 384, - 391, 392, 393, 394, 414, 415, 416, 419, 422, 423, - 426, 428, 429, 432, 437, 441, 442, 443, 445, 447, - 449, 462, 467, 481, 482, 483, 484, 485, 488, 489, - 495, 496, 497, 498, 499, 507, 508, 513, 514, 515, - 516, 527, 598, 600, 617, 637, 644, 487, 389, 435, - 459, 591, 304, 305, 450, 451, 318, 319, 658, 659, - 303, 612, 645, 609, 657, 639, 444, 382, 0, 0, - 385, 284, 308, 324, 0, 629, 509, 229, 473, 293, - 253, 0, 0, 213, 248, 232, 262, 277, 280, 328, - 396, 405, 434, 440, 299, 274, 246, 466, 243, 492, - 530, 531, 532, 534, 400, 269, 439, 401, 0, 380, - 587, 588, 320, 0, 0, 0, 539, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, - 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, - 0, 370, 270, 0, 1943, 206, 512, 0, 436, 0, - 205, 0, 494, 255, 381, 378, 595, 285, 276, 272, - 252, 321, 390, 433, 529, 427, 0, 374, 0, 0, - 504, 406, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 327, 250, 329, 204, 418, 505, 289, 0, 0, 0, - 0, 0, 518, 736, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 240, 0, 0, 247, 0, 0, 0, - 355, 364, 363, 343, 344, 346, 348, 354, 361, 367, - 340, 349, 0, 0, 621, 0, 0, 0, 268, 325, - 275, 267, 592, 0, 0, 0, 0, 0, 0, 608, - 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, - 0, 407, 260, 0, 460, 0, 0, 0, 641, 0, - 0, 0, 0, 0, 0, 0, 369, 0, 334, 199, - 227, 0, 0, 417, 468, 480, 0, 0, 0, 256, - 0, 478, 431, 616, 235, 287, 465, 438, 476, 446, - 290, 0, 0, 477, 376, 597, 456, 613, 642, 643, - 266, 411, 627, 533, 635, 660, 228, 263, 425, 517, - 619, 501, 402, 593, 594, 333, 500, 298, 203, 373, - 648, 226, 486, 375, 244, 233, 599, 624, 302, 254, - 292, 463, 655, 215, 528, 610, 241, 490, 0, 0, - 663, 249, 511, 622, 611, 217, 606, 510, 398, 330, - 331, 216, 0, 464, 271, 296, 0, 0, 261, 420, - 601, 602, 259, 664, 230, 634, 222, 0, 633, 413, - 596, 607, 399, 387, 221, 605, 397, 386, 338, 359, - 360, 283, 310, 453, 379, 454, 309, 311, 409, 408, - 410, 209, 620, 638, 0, 210, 0, 506, 623, 665, - 458, 214, 236, 237, 239, 0, 282, 286, 294, 297, - 306, 307, 317, 371, 424, 452, 448, 457, 0, 590, - 614, 628, 640, 646, 647, 649, 650, 651, 652, 653, - 656, 654, 412, 315, 502, 337, 377, 0, 0, 430, - 479, 242, 618, 503, 201, 0, 0, 0, 0, 257, - 258, 0, 586, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 666, 667, 668, 669, 670, 671, 672, 673, - 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, - 661, 519, 525, 520, 521, 522, 523, 524, 0, 526, - 0, 0, 0, 0, 0, 403, 0, 603, 604, 684, - 388, 493, 615, 339, 353, 356, 345, 365, 0, 366, - 341, 342, 347, 350, 351, 352, 357, 358, 362, 368, - 251, 212, 395, 404, 589, 316, 218, 219, 220, 535, - 536, 537, 538, 631, 632, 636, 207, 469, 470, 471, - 472, 295, 626, 312, 475, 474, 335, 336, 383, 455, - 551, 553, 564, 568, 570, 572, 578, 581, 552, 554, - 565, 569, 571, 573, 579, 582, 541, 543, 545, 547, - 560, 559, 556, 584, 585, 562, 567, 546, 558, 563, - 576, 583, 580, 540, 544, 548, 557, 575, 574, 555, - 566, 577, 561, 549, 542, 550, 0, 198, 223, 372, - 0, 461, 291, 662, 630, 491, 625, 208, 225, 0, - 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, - 279, 281, 288, 301, 313, 314, 322, 323, 326, 332, - 384, 391, 392, 393, 394, 414, 415, 416, 419, 422, - 423, 426, 428, 429, 432, 437, 441, 442, 443, 445, - 447, 449, 462, 467, 481, 482, 483, 484, 485, 488, - 489, 495, 496, 497, 498, 499, 507, 508, 513, 514, - 515, 516, 527, 598, 600, 617, 637, 644, 487, 389, - 435, 459, 591, 304, 305, 450, 451, 318, 319, 658, - 659, 303, 612, 645, 609, 657, 639, 444, 382, 0, - 0, 385, 284, 308, 324, 0, 629, 509, 229, 473, - 293, 253, 0, 0, 213, 248, 232, 262, 277, 280, - 328, 396, 405, 434, 440, 299, 274, 246, 466, 243, - 492, 530, 531, 532, 534, 400, 269, 439, 401, 0, - 380, 587, 588, 320, 0, 0, 0, 539, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, - 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, - 0, 0, 370, 270, 0, 1941, 206, 512, 0, 436, - 0, 205, 0, 494, 255, 381, 378, 595, 285, 276, - 272, 252, 321, 390, 433, 529, 427, 0, 374, 0, - 0, 504, 406, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 327, 250, 329, 204, 418, 505, 289, 0, 0, - 0, 0, 0, 518, 736, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 240, 0, 0, 247, 0, 0, - 0, 355, 364, 363, 343, 344, 346, 348, 354, 361, - 367, 340, 349, 0, 0, 621, 0, 0, 0, 268, - 325, 275, 267, 592, 0, 0, 0, 0, 0, 0, - 608, 0, 0, 231, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 300, 0, 407, 260, 0, 460, 0, 0, 0, 641, - 0, 0, 0, 0, 0, 0, 0, 369, 0, 334, - 199, 227, 0, 0, 417, 468, 480, 0, 0, 0, - 256, 0, 478, 431, 616, 235, 287, 465, 438, 476, - 446, 290, 0, 0, 477, 376, 597, 456, 613, 642, - 643, 266, 411, 627, 533, 635, 660, 228, 263, 425, - 517, 619, 501, 402, 593, 594, 333, 500, 298, 203, - 373, 648, 226, 486, 375, 244, 233, 599, 624, 302, - 254, 292, 463, 655, 215, 528, 610, 241, 490, 0, - 0, 663, 249, 511, 622, 611, 217, 606, 510, 398, - 330, 331, 216, 0, 464, 271, 296, 0, 0, 261, - 420, 601, 602, 259, 664, 230, 634, 222, 0, 633, - 413, 596, 607, 399, 387, 221, 605, 397, 386, 338, - 359, 360, 283, 310, 453, 379, 454, 309, 311, 409, - 408, 410, 209, 620, 638, 0, 210, 0, 506, 623, - 665, 458, 214, 236, 237, 239, 0, 282, 286, 294, - 297, 306, 307, 317, 371, 424, 452, 448, 457, 0, - 590, 614, 628, 640, 646, 647, 649, 650, 651, 652, - 653, 656, 654, 412, 315, 502, 337, 377, 0, 0, - 430, 479, 242, 618, 503, 201, 0, 0, 0, 0, - 257, 258, 0, 586, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 666, 667, 668, 669, 670, 671, 672, - 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, - 683, 661, 519, 525, 520, 521, 522, 523, 524, 0, - 526, 0, 0, 0, 0, 0, 403, 0, 603, 604, - 684, 388, 493, 615, 339, 353, 356, 345, 365, 0, - 366, 341, 342, 347, 350, 351, 352, 357, 358, 362, - 368, 251, 212, 395, 404, 589, 316, 218, 219, 220, - 535, 536, 537, 538, 631, 632, 636, 207, 469, 470, - 471, 472, 295, 626, 312, 475, 474, 335, 336, 383, - 455, 551, 553, 564, 568, 570, 572, 578, 581, 552, - 554, 565, 569, 571, 573, 579, 582, 541, 543, 545, - 547, 560, 559, 556, 584, 585, 562, 567, 546, 558, - 563, 576, 583, 580, 540, 544, 548, 557, 575, 574, - 555, 566, 577, 561, 549, 542, 550, 0, 198, 223, - 372, 0, 461, 291, 662, 630, 491, 625, 208, 225, - 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 200, 202, 211, 224, 234, 238, 245, - 264, 279, 281, 288, 301, 313, 314, 322, 323, 326, - 332, 384, 391, 392, 393, 394, 414, 415, 416, 419, - 422, 423, 426, 428, 429, 432, 437, 441, 442, 443, - 445, 447, 449, 462, 467, 481, 482, 483, 484, 485, - 488, 489, 495, 496, 497, 498, 499, 507, 508, 513, - 514, 515, 516, 527, 598, 600, 617, 637, 644, 487, - 389, 435, 459, 591, 304, 305, 450, 451, 318, 319, - 658, 659, 303, 612, 645, 609, 657, 639, 444, 382, - 0, 0, 385, 284, 308, 324, 0, 629, 509, 229, - 473, 293, 253, 0, 0, 213, 248, 232, 262, 277, - 280, 328, 396, 405, 434, 440, 299, 274, 246, 466, - 243, 492, 530, 531, 532, 534, 400, 269, 439, 401, - 0, 380, 587, 588, 320, 0, 0, 0, 539, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 421, 0, 0, 0, 0, 0, 0, 0, 273, 0, - 0, 0, 0, 370, 270, 0, 1937, 206, 512, 0, - 436, 0, 205, 0, 494, 255, 381, 378, 595, 285, - 276, 272, 252, 321, 390, 433, 529, 427, 0, 374, - 0, 0, 504, 406, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 327, 250, 329, 204, 418, 505, 289, 0, - 0, 0, 0, 0, 518, 736, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 240, 0, 0, 247, 0, - 0, 0, 355, 364, 363, 343, 344, 346, 348, 354, - 361, 367, 340, 349, 0, 0, 621, 0, 0, 0, - 268, 325, 275, 267, 592, 0, 0, 0, 0, 0, - 0, 608, 0, 0, 231, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 300, 0, 407, 260, 0, 460, 0, 0, 0, - 641, 0, 0, 0, 0, 0, 0, 0, 369, 0, - 334, 199, 227, 0, 0, 417, 468, 480, 0, 0, - 0, 256, 0, 478, 431, 616, 235, 287, 465, 438, - 476, 446, 290, 0, 0, 477, 376, 597, 456, 613, - 642, 643, 266, 411, 627, 533, 635, 660, 228, 263, - 425, 517, 619, 501, 402, 593, 594, 333, 500, 298, - 203, 373, 648, 226, 486, 375, 244, 233, 599, 624, - 302, 254, 292, 463, 655, 215, 528, 610, 241, 490, - 0, 0, 663, 249, 511, 622, 611, 217, 606, 510, - 398, 330, 331, 216, 0, 464, 271, 296, 0, 0, - 261, 420, 601, 602, 259, 664, 230, 634, 222, 0, - 633, 413, 596, 607, 399, 387, 221, 605, 397, 386, - 338, 359, 360, 283, 310, 453, 379, 454, 309, 311, - 409, 408, 410, 209, 620, 638, 0, 210, 0, 506, - 623, 665, 458, 214, 236, 237, 239, 0, 282, 286, - 294, 297, 306, 307, 317, 371, 424, 452, 448, 457, - 0, 590, 614, 628, 640, 646, 647, 649, 650, 651, - 652, 653, 656, 654, 412, 315, 502, 337, 377, 0, - 0, 430, 479, 242, 618, 503, 201, 0, 0, 0, - 0, 257, 258, 0, 586, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 666, 667, 668, 669, 670, 671, - 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, - 682, 683, 661, 519, 525, 520, 521, 522, 523, 524, - 0, 526, 0, 0, 0, 0, 0, 403, 0, 603, - 604, 684, 388, 493, 615, 339, 353, 356, 345, 365, - 0, 366, 341, 342, 347, 350, 351, 352, 357, 358, - 362, 368, 251, 212, 395, 404, 589, 316, 218, 219, - 220, 535, 536, 537, 538, 631, 632, 636, 207, 469, - 470, 471, 472, 295, 626, 312, 475, 474, 335, 336, - 383, 455, 551, 553, 564, 568, 570, 572, 578, 581, - 552, 554, 565, 569, 571, 573, 579, 582, 541, 543, - 545, 547, 560, 559, 556, 584, 585, 562, 567, 546, - 558, 563, 576, 583, 580, 540, 544, 548, 557, 575, - 574, 555, 566, 577, 561, 549, 542, 550, 0, 198, - 223, 372, 0, 461, 291, 662, 630, 491, 625, 208, - 225, 0, 265, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 200, 202, 211, 224, 234, 238, - 245, 264, 279, 281, 288, 301, 313, 314, 322, 323, - 326, 332, 384, 391, 392, 393, 394, 414, 415, 416, - 419, 422, 423, 426, 428, 429, 432, 437, 441, 442, - 443, 445, 447, 449, 462, 467, 481, 482, 483, 484, - 485, 488, 489, 495, 496, 497, 498, 499, 507, 508, - 513, 514, 515, 516, 527, 598, 600, 617, 637, 644, - 487, 389, 435, 459, 591, 304, 305, 450, 451, 318, - 319, 658, 659, 303, 612, 645, 609, 657, 639, 444, - 382, 0, 0, 385, 284, 308, 324, 0, 629, 509, - 229, 473, 293, 253, 0, 0, 213, 248, 232, 262, - 277, 280, 328, 396, 405, 434, 440, 299, 274, 246, - 466, 243, 492, 530, 531, 532, 534, 400, 269, 439, - 401, 0, 380, 587, 588, 320, 0, 0, 0, 539, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 421, 0, 0, 0, 0, 0, 0, 0, 273, - 0, 0, 0, 0, 370, 270, 0, 1935, 206, 512, - 0, 436, 0, 205, 0, 494, 255, 381, 378, 595, - 285, 276, 272, 252, 321, 390, 433, 529, 427, 0, - 374, 0, 0, 504, 406, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 327, 250, 329, 204, 418, 505, 289, - 0, 0, 0, 0, 0, 518, 736, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 240, 0, 0, 247, - 0, 0, 0, 355, 364, 363, 343, 344, 346, 348, - 354, 361, 367, 340, 349, 0, 0, 621, 0, 0, - 0, 268, 325, 275, 267, 592, 0, 0, 0, 0, - 0, 0, 608, 0, 0, 231, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 206, 208, 217, 230, 242, 247, 254, + 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, + 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, + 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, + 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, + 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, + 532, 533, 534, 545, 618, 620, 637, 657, 664, 504, + 404, 452, 476, 611, 0, 0, 317, 318, 467, 468, + 332, 333, 678, 679, 316, 632, 665, 629, 677, 659, + 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, + 527, 236, 490, 306, 265, 0, 0, 219, 257, 239, + 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, + 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, + 456, 416, 0, 395, 606, 607, 335, 0, 0, 0, + 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, + 286, 0, 0, 0, 0, 385, 283, 0, 0, 212, + 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, + 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, + 0, 389, 0, 0, 522, 422, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, + 302, 0, 101, 0, 0, 0, 536, 756, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, + 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, + 363, 369, 376, 382, 355, 364, 0, 0, 641, 0, + 0, 0, 281, 340, 288, 280, 612, 0, 0, 0, + 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, + 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, + 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, + 497, 0, 0, 0, 0, 269, 0, 495, 448, 636, + 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, + 391, 617, 473, 633, 662, 663, 279, 428, 647, 551, + 655, 680, 234, 276, 442, 535, 639, 519, 417, 613, + 614, 348, 518, 311, 209, 388, 668, 232, 503, 390, + 253, 241, 619, 644, 315, 267, 305, 480, 675, 221, + 546, 630, 250, 507, 0, 0, 683, 258, 529, 642, + 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, + 284, 309, 0, 0, 274, 437, 621, 622, 272, 684, + 237, 654, 228, 0, 653, 430, 616, 627, 414, 402, + 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, + 394, 471, 323, 325, 425, 424, 426, 215, 640, 658, + 0, 216, 0, 524, 643, 685, 475, 220, 244, 245, + 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, + 441, 469, 465, 474, 0, 610, 634, 648, 660, 666, + 667, 669, 670, 671, 672, 673, 676, 674, 429, 329, + 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, + 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, + 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, + 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, + 696, 697, 698, 699, 700, 701, 702, 703, 681, 537, + 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, + 0, 0, 0, 419, 0, 623, 624, 704, 403, 510, + 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, + 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, + 410, 420, 608, 330, 224, 225, 226, 553, 554, 555, + 556, 651, 652, 656, 213, 486, 487, 488, 489, 308, + 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, + 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, + 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, + 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, + 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, + 579, 567, 560, 568, 0, 204, 229, 387, 0, 478, + 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, + 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, + 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, + 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, + 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, + 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, + 545, 618, 620, 637, 657, 664, 504, 404, 452, 476, + 611, 0, 0, 317, 318, 467, 468, 332, 333, 678, + 679, 316, 632, 665, 629, 677, 659, 461, 397, 0, + 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, + 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, + 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, + 509, 548, 549, 550, 552, 415, 282, 456, 416, 0, + 395, 606, 607, 335, 0, 0, 0, 557, 0, 0, + 0, 0, 2503, 0, 0, 0, 0, 0, 0, 438, + 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, + 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, + 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, + 285, 264, 336, 405, 450, 547, 444, 0, 389, 0, + 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 342, 262, 344, 210, 435, 523, 302, 0, 0, + 0, 0, 0, 536, 202, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, + 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, + 382, 355, 364, 0, 0, 641, 0, 0, 0, 281, + 340, 288, 280, 612, 0, 0, 0, 0, 0, 0, + 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 661, 0, 0, 0, 0, 0, 0, 0, 384, 0, + 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, + 0, 0, 269, 0, 495, 448, 636, 243, 300, 482, + 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, + 633, 662, 663, 279, 428, 647, 551, 655, 680, 234, + 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, + 311, 209, 388, 668, 232, 503, 390, 253, 241, 619, + 644, 315, 267, 305, 480, 675, 221, 546, 630, 250, + 507, 0, 0, 683, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 684, 237, 654, 228, + 0, 653, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 658, 0, 216, 0, + 524, 643, 685, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 660, 666, 667, 669, 670, + 671, 672, 673, 676, 674, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, + 699, 700, 701, 702, 703, 681, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 704, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 651, 652, + 656, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 682, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 657, 664, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 678, 679, 316, 632, + 665, 629, 677, 659, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 416, 0, 395, 606, 607, + 335, 0, 0, 0, 557, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 0, 522, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 1848, + 536, 756, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, + 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, + 0, 0, 0, 0, 0, 384, 0, 349, 205, 233, + 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, + 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, + 303, 0, 0, 494, 391, 617, 473, 633, 662, 663, + 279, 428, 647, 551, 655, 680, 234, 276, 442, 535, + 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, + 668, 232, 503, 390, 253, 241, 619, 644, 315, 267, + 305, 480, 675, 221, 546, 630, 250, 507, 0, 0, + 683, 258, 529, 642, 631, 223, 626, 528, 413, 345, + 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, + 621, 622, 272, 684, 237, 654, 228, 0, 653, 430, + 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, + 375, 296, 324, 470, 394, 471, 323, 325, 425, 424, + 426, 215, 640, 658, 0, 216, 0, 524, 643, 685, + 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, + 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, + 634, 648, 660, 666, 667, 669, 670, 671, 672, 673, + 676, 674, 429, 329, 520, 352, 392, 0, 0, 447, + 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, + 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, + 0, 270, 271, 0, 605, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 686, 687, 688, 689, 690, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 681, 537, 543, 538, 539, 540, 541, 542, + 0, 544, 0, 0, 0, 0, 0, 419, 0, 623, + 624, 704, 403, 510, 635, 354, 368, 371, 360, 380, + 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, + 377, 383, 263, 218, 410, 420, 608, 330, 224, 225, + 226, 553, 554, 555, 556, 651, 652, 656, 213, 486, + 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, + 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, + 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, + 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, + 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, + 592, 573, 584, 595, 579, 567, 560, 568, 0, 204, + 229, 387, 0, 478, 304, 682, 650, 508, 645, 214, + 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 206, 208, 217, 230, 242, 247, + 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, + 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, + 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, + 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, + 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, + 531, 532, 533, 534, 545, 618, 620, 637, 657, 664, + 504, 404, 452, 476, 611, 0, 0, 317, 318, 467, + 468, 332, 333, 678, 679, 316, 632, 665, 629, 677, + 659, 461, 397, 0, 0, 400, 297, 322, 339, 0, + 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, + 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, + 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, + 282, 456, 416, 0, 395, 606, 607, 335, 0, 0, + 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, + 0, 286, 0, 0, 0, 0, 385, 283, 0, 0, + 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, + 393, 615, 298, 289, 285, 264, 336, 405, 450, 547, + 444, 0, 389, 0, 0, 522, 422, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 342, 262, 344, 210, 435, + 523, 302, 0, 0, 0, 0, 0, 536, 202, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, + 0, 256, 0, 0, 0, 370, 379, 378, 358, 359, + 361, 363, 369, 376, 382, 355, 364, 0, 0, 641, + 0, 0, 0, 281, 340, 288, 280, 612, 0, 0, + 0, 0, 0, 0, 628, 0, 0, 238, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, + 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, + 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, + 485, 497, 0, 0, 0, 0, 269, 0, 495, 448, + 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, + 494, 391, 617, 473, 633, 662, 663, 279, 428, 647, + 551, 655, 680, 234, 276, 442, 535, 639, 519, 417, + 613, 614, 348, 518, 311, 209, 388, 668, 232, 503, + 390, 253, 241, 619, 644, 315, 267, 305, 480, 675, + 221, 546, 630, 250, 507, 0, 0, 683, 258, 529, + 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, + 481, 284, 309, 0, 0, 274, 437, 621, 622, 272, + 684, 237, 654, 228, 0, 653, 430, 616, 627, 414, + 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, + 470, 394, 471, 323, 325, 425, 424, 426, 215, 640, + 658, 0, 216, 0, 524, 643, 685, 475, 220, 244, + 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, + 386, 441, 469, 465, 474, 0, 610, 634, 648, 660, + 666, 667, 669, 670, 671, 672, 673, 676, 674, 429, + 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, + 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, + 609, 246, 266, 207, 0, 0, 0, 0, 270, 271, + 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 686, 687, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 681, + 537, 543, 538, 539, 540, 541, 542, 0, 544, 0, + 0, 0, 0, 0, 419, 0, 623, 624, 704, 403, + 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, + 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, + 218, 410, 420, 608, 330, 224, 225, 226, 553, 554, + 555, 556, 651, 652, 656, 213, 486, 487, 488, 489, + 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, + 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, + 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, + 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, + 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, + 595, 579, 567, 560, 568, 0, 204, 229, 387, 2141, + 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, + 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, + 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, + 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, + 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, + 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, + 534, 545, 618, 620, 637, 657, 664, 504, 404, 452, + 476, 611, 0, 0, 317, 318, 467, 468, 332, 333, + 678, 679, 316, 632, 665, 629, 677, 659, 461, 397, + 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, + 490, 306, 265, 0, 0, 219, 257, 239, 275, 290, + 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, + 252, 509, 548, 549, 550, 552, 415, 282, 456, 416, + 0, 395, 606, 607, 335, 0, 0, 0, 557, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 438, 0, 0, 0, 0, 0, 0, 0, 286, 0, + 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, + 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, + 289, 285, 264, 336, 405, 450, 547, 444, 0, 389, + 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, + 0, 0, 0, 2132, 536, 756, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, + 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, + 376, 382, 355, 364, 0, 0, 641, 0, 0, 0, + 281, 340, 288, 280, 612, 0, 0, 0, 0, 0, + 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, + 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 661, 0, 0, 0, 0, 0, 0, 0, 384, + 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, + 0, 0, 0, 269, 0, 495, 448, 636, 243, 300, + 482, 455, 493, 463, 303, 0, 0, 494, 391, 617, + 473, 633, 662, 663, 279, 428, 647, 551, 655, 680, + 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, + 518, 311, 209, 388, 668, 232, 503, 390, 253, 241, + 619, 644, 315, 267, 305, 480, 675, 221, 546, 630, + 250, 507, 0, 0, 683, 258, 529, 642, 631, 223, + 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, + 0, 0, 274, 437, 621, 622, 272, 684, 237, 654, + 228, 0, 653, 430, 616, 627, 414, 402, 227, 625, + 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, + 323, 325, 425, 424, 426, 215, 640, 658, 0, 216, + 0, 524, 643, 685, 475, 220, 244, 245, 248, 0, + 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, + 465, 474, 0, 610, 634, 648, 660, 666, 667, 669, + 670, 671, 672, 673, 676, 674, 429, 329, 520, 352, + 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, + 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, + 207, 0, 0, 0, 0, 270, 271, 0, 605, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 700, 701, 702, 703, 681, 537, 543, 538, + 539, 540, 541, 542, 0, 544, 0, 0, 0, 0, + 0, 419, 0, 623, 624, 704, 403, 510, 635, 354, + 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, + 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, + 608, 330, 224, 225, 226, 553, 554, 555, 556, 651, + 652, 656, 213, 486, 487, 488, 489, 308, 646, 326, + 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, + 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, + 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, + 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, + 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, + 560, 568, 0, 204, 229, 387, 0, 478, 304, 682, + 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 206, 208, + 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, + 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, + 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, + 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, + 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, + 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, + 620, 637, 657, 664, 504, 404, 452, 476, 611, 0, + 0, 317, 318, 467, 468, 332, 333, 678, 679, 316, + 632, 665, 629, 677, 659, 461, 397, 0, 0, 400, + 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, + 0, 0, 219, 257, 239, 275, 290, 293, 343, 411, + 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, + 549, 550, 552, 415, 282, 456, 416, 0, 395, 606, + 607, 335, 0, 0, 0, 557, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 1990, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 0, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 0, 0, 0, + 0, 536, 756, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 662, + 663, 279, 428, 647, 551, 655, 680, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 668, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 675, 221, 546, 630, 250, 507, 0, + 0, 683, 258, 529, 642, 631, 223, 626, 528, 413, + 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, + 437, 621, 622, 272, 684, 237, 654, 228, 0, 653, + 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, + 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, + 424, 426, 215, 640, 658, 0, 216, 0, 524, 643, + 685, 475, 220, 244, 245, 248, 0, 295, 299, 307, + 310, 320, 321, 331, 386, 441, 469, 465, 474, 0, + 610, 634, 648, 660, 666, 667, 669, 670, 671, 672, + 673, 676, 674, 429, 329, 520, 352, 392, 0, 0, + 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, + 261, 260, 235, 512, 609, 246, 266, 207, 0, 0, + 0, 0, 270, 271, 0, 605, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 686, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 681, 537, 543, 538, 539, 540, 541, + 542, 0, 544, 0, 0, 0, 0, 0, 419, 0, + 623, 624, 704, 403, 510, 635, 354, 368, 371, 360, + 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, + 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, + 225, 226, 553, 554, 555, 556, 651, 652, 656, 213, + 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, + 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, + 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, + 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, + 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, + 593, 592, 573, 584, 595, 579, 567, 560, 568, 0, + 204, 229, 387, 0, 478, 304, 682, 650, 508, 645, + 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 206, 208, 217, 230, 242, + 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, + 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, + 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, + 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, + 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, + 526, 531, 532, 533, 534, 545, 618, 620, 637, 657, + 664, 504, 404, 452, 476, 611, 0, 0, 317, 318, + 467, 468, 332, 333, 678, 679, 316, 632, 665, 629, + 677, 659, 461, 397, 0, 0, 400, 297, 322, 339, + 0, 649, 527, 236, 490, 306, 265, 0, 0, 219, + 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, + 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, + 415, 282, 456, 416, 0, 395, 606, 607, 335, 0, + 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, + 0, 0, 286, 0, 0, 0, 0, 385, 283, 0, + 1988, 212, 530, 0, 453, 0, 211, 0, 511, 268, + 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, + 547, 444, 0, 389, 0, 0, 522, 422, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, + 435, 523, 302, 0, 0, 0, 0, 0, 536, 756, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, + 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, + 359, 361, 363, 369, 376, 382, 355, 364, 0, 0, + 641, 0, 0, 0, 281, 340, 288, 280, 612, 0, + 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 313, 0, 423, 273, + 0, 477, 0, 319, 334, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, + 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, + 434, 485, 497, 0, 0, 0, 0, 269, 0, 495, + 448, 636, 243, 300, 482, 455, 493, 463, 303, 0, + 0, 494, 391, 617, 473, 633, 662, 663, 279, 428, + 647, 551, 655, 680, 234, 276, 442, 535, 639, 519, + 417, 613, 614, 348, 518, 311, 209, 388, 668, 232, + 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, + 675, 221, 546, 630, 250, 507, 0, 0, 683, 258, + 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, + 0, 481, 284, 309, 0, 0, 274, 437, 621, 622, + 272, 684, 237, 654, 228, 0, 653, 430, 616, 627, + 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, + 324, 470, 394, 471, 323, 325, 425, 424, 426, 215, + 640, 658, 0, 216, 0, 524, 643, 685, 475, 220, + 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, + 331, 386, 441, 469, 465, 474, 0, 610, 634, 648, + 660, 666, 667, 669, 670, 671, 672, 673, 676, 674, + 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, + 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, + 512, 609, 246, 266, 207, 0, 0, 0, 0, 270, + 271, 0, 605, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 681, 537, 543, 538, 539, 540, 541, 542, 0, 544, + 0, 0, 0, 0, 0, 419, 0, 623, 624, 704, + 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, + 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, + 263, 218, 410, 420, 608, 330, 224, 225, 226, 553, + 554, 555, 556, 651, 652, 656, 213, 486, 487, 488, + 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, + 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, + 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, + 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, + 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, + 584, 595, 579, 567, 560, 568, 0, 204, 229, 387, + 0, 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 300, 0, 407, 260, 0, 460, 0, 0, - 0, 641, 0, 0, 0, 0, 0, 0, 0, 369, - 0, 334, 199, 227, 0, 0, 417, 468, 480, 0, - 0, 0, 256, 0, 478, 431, 616, 235, 287, 465, - 438, 476, 446, 290, 0, 0, 477, 376, 597, 456, - 613, 642, 643, 266, 411, 627, 533, 635, 660, 228, - 263, 425, 517, 619, 501, 402, 593, 594, 333, 500, - 298, 203, 373, 648, 226, 486, 375, 244, 233, 599, - 624, 302, 254, 292, 463, 655, 215, 528, 610, 241, - 490, 0, 0, 663, 249, 511, 622, 611, 217, 606, - 510, 398, 330, 331, 216, 0, 464, 271, 296, 0, - 0, 261, 420, 601, 602, 259, 664, 230, 634, 222, - 0, 633, 413, 596, 607, 399, 387, 221, 605, 397, - 386, 338, 359, 360, 283, 310, 453, 379, 454, 309, - 311, 409, 408, 410, 209, 620, 638, 0, 210, 0, - 506, 623, 665, 458, 214, 236, 237, 239, 0, 282, - 286, 294, 297, 306, 307, 317, 371, 424, 452, 448, - 457, 0, 590, 614, 628, 640, 646, 647, 649, 650, - 651, 652, 653, 656, 654, 412, 315, 502, 337, 377, - 0, 0, 430, 479, 242, 618, 503, 201, 0, 0, - 0, 0, 257, 258, 0, 586, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 666, 667, 668, 669, 670, - 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, - 681, 682, 683, 661, 519, 525, 520, 521, 522, 523, - 524, 0, 526, 0, 0, 0, 0, 0, 403, 0, - 603, 604, 684, 388, 493, 615, 339, 353, 356, 345, - 365, 0, 366, 341, 342, 347, 350, 351, 352, 357, - 358, 362, 368, 251, 212, 395, 404, 589, 316, 218, - 219, 220, 535, 536, 537, 538, 631, 632, 636, 207, - 469, 470, 471, 472, 295, 626, 312, 475, 474, 335, - 336, 383, 455, 551, 553, 564, 568, 570, 572, 578, - 581, 552, 554, 565, 569, 571, 573, 579, 582, 541, - 543, 545, 547, 560, 559, 556, 584, 585, 562, 567, - 546, 558, 563, 576, 583, 580, 540, 544, 548, 557, - 575, 574, 555, 566, 577, 561, 549, 542, 550, 0, - 198, 223, 372, 0, 461, 291, 662, 630, 491, 625, - 208, 225, 0, 265, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 200, 202, 211, 224, 234, - 238, 245, 264, 279, 281, 288, 301, 313, 314, 322, - 323, 326, 332, 384, 391, 392, 393, 394, 414, 415, - 416, 419, 422, 423, 426, 428, 429, 432, 437, 441, - 442, 443, 445, 447, 449, 462, 467, 481, 482, 483, - 484, 485, 488, 489, 495, 496, 497, 498, 499, 507, - 508, 513, 514, 515, 516, 527, 598, 600, 617, 637, - 644, 487, 389, 435, 459, 591, 304, 305, 450, 451, - 318, 319, 658, 659, 303, 612, 645, 609, 657, 639, - 444, 382, 0, 0, 385, 284, 308, 324, 0, 629, - 509, 229, 473, 293, 253, 0, 0, 213, 248, 232, - 262, 277, 280, 328, 396, 405, 434, 440, 299, 274, - 246, 466, 243, 492, 530, 531, 532, 534, 400, 269, - 439, 401, 0, 380, 587, 588, 320, 0, 0, 0, - 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, - 273, 0, 0, 0, 0, 370, 270, 0, 1933, 206, - 512, 0, 436, 0, 205, 0, 494, 255, 381, 378, - 595, 285, 276, 272, 252, 321, 390, 433, 529, 427, - 0, 374, 0, 0, 504, 406, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 327, 250, 329, 204, 418, 505, - 289, 0, 0, 0, 0, 0, 518, 736, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, - 247, 0, 0, 0, 355, 364, 363, 343, 344, 346, - 348, 354, 361, 367, 340, 349, 0, 0, 621, 0, - 0, 0, 268, 325, 275, 267, 592, 0, 0, 0, - 0, 0, 0, 608, 0, 0, 231, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, + 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, + 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, + 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, + 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, + 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, + 533, 534, 545, 618, 620, 637, 657, 664, 504, 404, + 452, 476, 611, 0, 0, 317, 318, 467, 468, 332, + 333, 678, 679, 316, 632, 665, 629, 677, 659, 461, + 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, + 236, 490, 306, 265, 0, 0, 219, 257, 239, 275, + 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, + 483, 252, 509, 548, 549, 550, 552, 415, 282, 456, + 416, 0, 395, 606, 607, 335, 0, 0, 0, 557, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 438, 0, 0, 0, 0, 0, 0, 0, 286, + 0, 0, 0, 0, 385, 283, 0, 1986, 212, 530, + 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, + 298, 289, 285, 264, 336, 405, 450, 547, 444, 0, + 389, 0, 0, 522, 422, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 342, 262, 344, 210, 435, 523, 302, + 0, 0, 0, 0, 0, 536, 756, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, + 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, + 369, 376, 382, 355, 364, 0, 0, 641, 0, 0, + 0, 281, 340, 288, 280, 612, 0, 0, 0, 0, + 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, + 319, 334, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, + 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, + 0, 0, 0, 0, 269, 0, 495, 448, 636, 243, + 300, 482, 455, 493, 463, 303, 0, 0, 494, 391, + 617, 473, 633, 662, 663, 279, 428, 647, 551, 655, + 680, 234, 276, 442, 535, 639, 519, 417, 613, 614, + 348, 518, 311, 209, 388, 668, 232, 503, 390, 253, + 241, 619, 644, 315, 267, 305, 480, 675, 221, 546, + 630, 250, 507, 0, 0, 683, 258, 529, 642, 631, + 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, + 309, 0, 0, 274, 437, 621, 622, 272, 684, 237, + 654, 228, 0, 653, 430, 616, 627, 414, 402, 227, + 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, + 471, 323, 325, 425, 424, 426, 215, 640, 658, 0, + 216, 0, 524, 643, 685, 475, 220, 244, 245, 248, + 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, + 469, 465, 474, 0, 610, 634, 648, 660, 666, 667, + 669, 670, 671, 672, 673, 676, 674, 429, 329, 520, + 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, + 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, + 266, 207, 0, 0, 0, 0, 270, 271, 0, 605, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, + 697, 698, 699, 700, 701, 702, 703, 681, 537, 543, + 538, 539, 540, 541, 542, 0, 544, 0, 0, 0, + 0, 0, 419, 0, 623, 624, 704, 403, 510, 635, + 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, + 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, + 420, 608, 330, 224, 225, 226, 553, 554, 555, 556, + 651, 652, 656, 213, 486, 487, 488, 489, 308, 646, + 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, + 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, + 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, + 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, + 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, + 567, 560, 568, 0, 204, 229, 387, 0, 478, 304, + 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, + 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, + 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, + 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, + 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, + 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, + 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, + 618, 620, 637, 657, 664, 504, 404, 452, 476, 611, + 0, 0, 317, 318, 467, 468, 332, 333, 678, 679, + 316, 632, 665, 629, 677, 659, 461, 397, 0, 0, + 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, + 265, 0, 0, 219, 257, 239, 275, 290, 293, 343, + 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, + 548, 549, 550, 552, 415, 282, 456, 416, 0, 395, + 606, 607, 335, 0, 0, 0, 557, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, + 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, + 0, 385, 283, 0, 1984, 212, 530, 0, 453, 0, + 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, + 264, 336, 405, 450, 547, 444, 0, 389, 0, 0, + 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 342, 262, 344, 210, 435, 523, 302, 0, 0, 0, + 0, 0, 536, 756, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, + 370, 379, 378, 358, 359, 361, 363, 369, 376, 382, + 355, 364, 0, 0, 641, 0, 0, 0, 281, 340, + 288, 280, 612, 0, 0, 0, 0, 0, 0, 628, + 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 662, 663, 279, 428, 647, 551, 655, 680, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 668, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 675, 221, 546, 630, 250, 507, + 0, 0, 683, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 684, 237, 654, 228, 0, + 653, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 658, 0, 216, 0, 524, + 643, 685, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 660, 666, 667, 669, 670, 671, + 672, 673, 676, 674, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 681, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 704, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 651, 652, 656, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 682, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 657, 664, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 678, 679, 316, 632, 665, + 629, 677, 659, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 416, 0, 395, 606, 607, 335, + 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, + 0, 0, 0, 286, 0, 0, 0, 0, 385, 283, + 0, 1982, 212, 530, 0, 453, 0, 211, 0, 511, + 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, + 450, 547, 444, 0, 389, 0, 0, 522, 422, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, + 210, 435, 523, 302, 0, 0, 0, 0, 0, 536, + 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, + 358, 359, 361, 363, 369, 376, 382, 355, 364, 0, + 0, 641, 0, 0, 0, 281, 340, 288, 280, 612, + 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, + 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, + 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, + 0, 434, 485, 497, 0, 0, 0, 0, 269, 0, + 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, + 0, 0, 494, 391, 617, 473, 633, 662, 663, 279, + 428, 647, 551, 655, 680, 234, 276, 442, 535, 639, + 519, 417, 613, 614, 348, 518, 311, 209, 388, 668, + 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, + 480, 675, 221, 546, 630, 250, 507, 0, 0, 683, + 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, + 222, 0, 481, 284, 309, 0, 0, 274, 437, 621, + 622, 272, 684, 237, 654, 228, 0, 653, 430, 616, + 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, + 296, 324, 470, 394, 471, 323, 325, 425, 424, 426, + 215, 640, 658, 0, 216, 0, 524, 643, 685, 475, + 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, + 321, 331, 386, 441, 469, 465, 474, 0, 610, 634, + 648, 660, 666, 667, 669, 670, 671, 672, 673, 676, + 674, 429, 329, 520, 352, 392, 0, 0, 447, 496, + 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, + 235, 512, 609, 246, 266, 207, 0, 0, 0, 0, + 270, 271, 0, 605, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 681, 537, 543, 538, 539, 540, 541, 542, 0, + 544, 0, 0, 0, 0, 0, 419, 0, 623, 624, + 704, 403, 510, 635, 354, 368, 371, 360, 380, 0, + 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, + 383, 263, 218, 410, 420, 608, 330, 224, 225, 226, + 553, 554, 555, 556, 651, 652, 656, 213, 486, 487, + 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, + 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, + 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, + 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, + 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, + 573, 584, 595, 579, 567, 560, 568, 0, 204, 229, + 387, 0, 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 300, 0, 407, 260, 0, 460, 0, - 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, - 369, 0, 334, 199, 227, 0, 0, 417, 468, 480, - 0, 0, 0, 256, 0, 478, 431, 616, 235, 287, - 465, 438, 476, 446, 290, 0, 0, 477, 376, 597, - 456, 613, 642, 643, 266, 411, 627, 533, 635, 660, - 228, 263, 425, 517, 619, 501, 402, 593, 594, 333, - 500, 298, 203, 373, 648, 226, 486, 375, 244, 233, - 599, 624, 302, 254, 292, 463, 655, 215, 528, 610, - 241, 490, 0, 0, 663, 249, 511, 622, 611, 217, - 606, 510, 398, 330, 331, 216, 0, 464, 271, 296, - 0, 0, 261, 420, 601, 602, 259, 664, 230, 634, - 222, 0, 633, 413, 596, 607, 399, 387, 221, 605, - 397, 386, 338, 359, 360, 283, 310, 453, 379, 454, - 309, 311, 409, 408, 410, 209, 620, 638, 0, 210, - 0, 506, 623, 665, 458, 214, 236, 237, 239, 0, - 282, 286, 294, 297, 306, 307, 317, 371, 424, 452, - 448, 457, 0, 590, 614, 628, 640, 646, 647, 649, - 650, 651, 652, 653, 656, 654, 412, 315, 502, 337, - 377, 0, 0, 430, 479, 242, 618, 503, 201, 0, - 0, 0, 0, 257, 258, 0, 586, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 666, 667, 668, 669, - 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, - 680, 681, 682, 683, 661, 519, 525, 520, 521, 522, - 523, 524, 0, 526, 0, 0, 0, 0, 0, 403, - 0, 603, 604, 684, 388, 493, 615, 339, 353, 356, - 345, 365, 0, 366, 341, 342, 347, 350, 351, 352, - 357, 358, 362, 368, 251, 212, 395, 404, 589, 316, - 218, 219, 220, 535, 536, 537, 538, 631, 632, 636, - 207, 469, 470, 471, 472, 295, 626, 312, 475, 474, - 335, 336, 383, 455, 551, 553, 564, 568, 570, 572, - 578, 581, 552, 554, 565, 569, 571, 573, 579, 582, - 541, 543, 545, 547, 560, 559, 556, 584, 585, 562, - 567, 546, 558, 563, 576, 583, 580, 540, 544, 548, - 557, 575, 574, 555, 566, 577, 561, 549, 542, 550, - 0, 198, 223, 372, 0, 461, 291, 662, 630, 491, - 625, 208, 225, 0, 265, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 200, 202, 211, 224, - 234, 238, 245, 264, 279, 281, 288, 301, 313, 314, - 322, 323, 326, 332, 384, 391, 392, 393, 394, 414, - 415, 416, 419, 422, 423, 426, 428, 429, 432, 437, - 441, 442, 443, 445, 447, 449, 462, 467, 481, 482, - 483, 484, 485, 488, 489, 495, 496, 497, 498, 499, - 507, 508, 513, 514, 515, 516, 527, 598, 600, 617, - 637, 644, 487, 389, 435, 459, 591, 304, 305, 450, - 451, 318, 319, 658, 659, 303, 612, 645, 609, 657, - 639, 444, 382, 0, 0, 385, 284, 308, 324, 0, - 629, 509, 229, 473, 293, 253, 0, 0, 213, 248, - 232, 262, 277, 280, 328, 396, 405, 434, 440, 299, - 274, 246, 466, 243, 492, 530, 531, 532, 534, 400, - 269, 439, 401, 0, 380, 587, 588, 320, 0, 0, - 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, - 0, 273, 0, 0, 0, 0, 370, 270, 0, 0, - 206, 512, 0, 436, 0, 205, 0, 494, 255, 381, - 378, 595, 285, 276, 272, 252, 321, 390, 433, 529, - 427, 0, 374, 0, 0, 504, 406, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 327, 250, 329, 204, 418, - 505, 289, 0, 1908, 0, 0, 0, 518, 736, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, - 0, 247, 0, 0, 0, 355, 364, 363, 343, 344, - 346, 348, 354, 361, 367, 340, 349, 0, 0, 621, - 0, 0, 0, 268, 325, 275, 267, 592, 0, 0, - 0, 0, 0, 0, 608, 0, 0, 231, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 300, 0, 407, 260, 0, 460, - 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, - 0, 369, 0, 334, 199, 227, 0, 0, 417, 468, - 480, 0, 0, 0, 256, 0, 478, 431, 616, 235, - 287, 465, 438, 476, 446, 290, 0, 0, 477, 376, - 597, 456, 613, 642, 643, 266, 411, 627, 533, 635, - 660, 228, 263, 425, 517, 619, 501, 402, 593, 594, - 333, 500, 298, 203, 373, 648, 226, 486, 375, 244, - 233, 599, 624, 302, 254, 292, 463, 655, 215, 528, - 610, 241, 490, 0, 0, 663, 249, 511, 622, 611, - 217, 606, 510, 398, 330, 331, 216, 0, 464, 271, - 296, 0, 0, 261, 420, 601, 602, 259, 664, 230, - 634, 222, 0, 633, 413, 596, 607, 399, 387, 221, - 605, 397, 386, 338, 359, 360, 283, 310, 453, 379, - 454, 309, 311, 409, 408, 410, 209, 620, 638, 0, - 210, 0, 506, 623, 665, 458, 214, 236, 237, 239, - 0, 282, 286, 294, 297, 306, 307, 317, 371, 424, - 452, 448, 457, 0, 590, 614, 628, 640, 646, 647, - 649, 650, 651, 652, 653, 656, 654, 412, 315, 502, - 337, 377, 0, 0, 430, 479, 242, 618, 503, 201, - 0, 0, 0, 0, 257, 258, 0, 586, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 666, 667, 668, - 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, - 679, 680, 681, 682, 683, 661, 519, 525, 520, 521, - 522, 523, 524, 0, 526, 0, 0, 0, 0, 0, - 403, 0, 603, 604, 684, 388, 493, 615, 339, 353, - 356, 345, 365, 0, 366, 341, 342, 347, 350, 351, - 352, 357, 358, 362, 368, 251, 212, 395, 404, 589, - 316, 218, 219, 220, 535, 536, 537, 538, 631, 632, - 636, 207, 469, 470, 471, 472, 295, 626, 312, 475, - 474, 335, 336, 383, 455, 551, 553, 564, 568, 570, - 572, 578, 581, 552, 554, 565, 569, 571, 573, 579, - 582, 541, 543, 545, 547, 560, 559, 556, 584, 585, - 562, 567, 546, 558, 563, 576, 583, 580, 540, 544, - 548, 557, 575, 574, 555, 566, 577, 561, 549, 542, - 550, 0, 198, 223, 372, 0, 461, 291, 662, 630, - 491, 625, 208, 225, 0, 265, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 200, 202, 211, - 224, 234, 238, 245, 264, 279, 281, 288, 301, 313, - 314, 322, 323, 326, 332, 384, 391, 392, 393, 394, - 414, 415, 416, 419, 422, 423, 426, 428, 429, 432, - 437, 441, 442, 443, 445, 447, 449, 462, 467, 481, - 482, 483, 484, 485, 488, 489, 495, 496, 497, 498, - 499, 507, 508, 513, 514, 515, 516, 527, 598, 600, - 617, 637, 644, 487, 389, 435, 459, 591, 304, 305, - 450, 451, 318, 319, 658, 659, 303, 612, 645, 609, - 657, 639, 444, 382, 0, 0, 385, 284, 308, 324, - 0, 629, 509, 229, 473, 293, 253, 0, 0, 213, - 248, 232, 262, 277, 280, 328, 396, 405, 434, 440, - 299, 274, 246, 466, 243, 492, 530, 531, 532, 534, - 400, 269, 439, 401, 0, 380, 587, 588, 320, 0, - 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, - 0, 1805, 273, 0, 0, 0, 0, 370, 270, 0, - 0, 206, 512, 0, 436, 0, 205, 0, 494, 255, - 381, 378, 595, 285, 276, 272, 252, 321, 390, 433, - 529, 427, 0, 374, 0, 0, 504, 406, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 327, 250, 329, 204, - 418, 505, 289, 0, 0, 0, 0, 0, 518, 196, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, - 0, 0, 247, 0, 0, 0, 355, 364, 363, 343, - 344, 346, 348, 354, 361, 367, 340, 349, 0, 0, - 621, 0, 0, 0, 268, 325, 275, 267, 592, 0, - 0, 0, 0, 0, 0, 608, 0, 0, 231, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 300, 0, 407, 260, 0, - 460, 0, 0, 0, 641, 0, 0, 0, 0, 0, - 0, 0, 369, 0, 334, 199, 227, 0, 0, 417, - 468, 480, 0, 0, 0, 256, 0, 478, 431, 616, - 235, 287, 465, 438, 476, 446, 290, 0, 0, 477, - 376, 597, 456, 613, 642, 643, 266, 411, 627, 533, - 635, 660, 228, 263, 425, 517, 619, 501, 402, 593, - 594, 333, 500, 298, 203, 373, 648, 226, 486, 375, - 244, 233, 599, 624, 302, 254, 292, 463, 655, 215, - 528, 610, 241, 490, 0, 0, 663, 249, 511, 622, - 611, 217, 606, 510, 398, 330, 331, 216, 0, 464, - 271, 296, 0, 0, 261, 420, 601, 602, 259, 664, - 230, 634, 222, 0, 633, 413, 596, 607, 399, 387, - 221, 605, 397, 386, 338, 359, 360, 283, 310, 453, - 379, 454, 309, 311, 409, 408, 410, 209, 620, 638, - 0, 210, 0, 506, 623, 665, 458, 214, 236, 237, - 239, 0, 282, 286, 294, 297, 306, 307, 317, 371, - 424, 452, 448, 457, 0, 590, 614, 628, 640, 646, - 647, 649, 650, 651, 652, 653, 656, 654, 412, 315, - 502, 337, 377, 0, 0, 430, 479, 242, 618, 503, - 201, 0, 0, 0, 0, 257, 258, 0, 586, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 666, 667, - 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, - 678, 679, 680, 681, 682, 683, 661, 519, 525, 520, - 521, 522, 523, 524, 0, 526, 0, 0, 0, 0, - 0, 403, 0, 603, 604, 684, 388, 493, 615, 339, - 353, 356, 345, 365, 0, 366, 341, 342, 347, 350, - 351, 352, 357, 358, 362, 368, 251, 212, 395, 404, - 589, 316, 218, 219, 220, 535, 536, 537, 538, 631, - 632, 636, 207, 469, 470, 471, 472, 295, 626, 312, - 475, 474, 335, 336, 383, 455, 551, 553, 564, 568, - 570, 572, 578, 581, 552, 554, 565, 569, 571, 573, - 579, 582, 541, 543, 545, 547, 560, 559, 556, 584, - 585, 562, 567, 546, 558, 563, 576, 583, 580, 540, - 544, 548, 557, 575, 574, 555, 566, 577, 561, 549, - 542, 550, 0, 198, 223, 372, 0, 461, 291, 662, - 630, 491, 625, 208, 225, 0, 265, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 200, 202, - 211, 224, 234, 238, 245, 264, 279, 281, 288, 301, - 313, 314, 322, 323, 326, 332, 384, 391, 392, 393, - 394, 414, 415, 416, 419, 422, 423, 426, 428, 429, - 432, 437, 441, 442, 443, 445, 447, 449, 462, 467, - 481, 482, 483, 484, 485, 488, 489, 495, 496, 497, - 498, 499, 507, 508, 513, 514, 515, 516, 527, 598, - 600, 617, 637, 644, 487, 389, 435, 459, 591, 304, - 305, 450, 451, 318, 319, 658, 659, 303, 612, 645, - 609, 657, 639, 444, 382, 0, 0, 385, 284, 308, - 324, 0, 629, 509, 229, 473, 293, 253, 0, 0, - 213, 248, 232, 262, 277, 280, 328, 396, 405, 434, - 440, 299, 274, 246, 466, 243, 492, 530, 531, 532, - 534, 400, 269, 439, 401, 0, 380, 587, 588, 320, - 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, - 0, 0, 0, 273, 0, 0, 0, 0, 370, 270, - 0, 0, 206, 512, 0, 436, 0, 205, 0, 494, - 255, 381, 378, 595, 285, 276, 272, 252, 321, 390, - 433, 529, 427, 0, 374, 0, 0, 504, 406, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 250, 329, - 204, 418, 505, 289, 0, 95, 0, 0, 0, 518, - 971, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 240, 0, 0, 247, 0, 0, 0, 355, 364, 363, - 343, 344, 346, 348, 354, 361, 367, 340, 349, 0, - 0, 621, 0, 0, 0, 268, 325, 275, 267, 592, - 0, 0, 0, 0, 0, 0, 608, 0, 0, 231, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 300, 0, 407, 260, - 0, 460, 0, 0, 0, 641, 0, 0, 0, 0, - 0, 0, 0, 369, 0, 334, 199, 227, 0, 0, - 417, 468, 480, 0, 0, 0, 256, 0, 478, 431, - 616, 235, 287, 465, 438, 476, 446, 290, 0, 0, - 477, 376, 597, 456, 613, 642, 643, 266, 411, 627, - 533, 635, 660, 228, 263, 425, 517, 619, 501, 402, - 593, 594, 333, 500, 298, 203, 373, 648, 226, 486, - 375, 244, 233, 599, 624, 302, 254, 292, 463, 655, - 215, 528, 610, 241, 490, 0, 0, 663, 249, 511, - 622, 611, 217, 606, 510, 398, 330, 331, 216, 0, - 464, 271, 296, 0, 0, 261, 420, 601, 602, 259, - 664, 230, 634, 222, 0, 633, 413, 596, 607, 399, - 387, 221, 605, 397, 386, 338, 359, 360, 283, 310, - 453, 379, 454, 309, 311, 409, 408, 410, 209, 620, - 638, 0, 210, 0, 506, 623, 665, 458, 214, 236, - 237, 239, 0, 282, 286, 294, 297, 306, 307, 317, - 371, 424, 452, 448, 457, 0, 590, 614, 628, 640, - 646, 647, 649, 650, 651, 652, 653, 656, 654, 412, - 315, 502, 337, 377, 0, 0, 430, 479, 242, 618, - 503, 201, 0, 0, 0, 0, 257, 258, 0, 586, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, - 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, - 677, 678, 679, 680, 681, 682, 683, 661, 519, 525, - 520, 521, 522, 523, 524, 0, 526, 0, 0, 0, - 0, 0, 403, 0, 603, 604, 684, 388, 493, 615, - 339, 353, 356, 345, 365, 0, 366, 341, 342, 347, - 350, 351, 352, 357, 358, 362, 368, 251, 212, 395, - 404, 589, 316, 218, 219, 220, 535, 536, 537, 538, - 631, 632, 636, 207, 469, 470, 471, 472, 295, 626, - 312, 475, 474, 335, 336, 383, 455, 551, 553, 564, - 568, 570, 572, 578, 581, 552, 554, 565, 569, 571, - 573, 579, 582, 541, 543, 545, 547, 560, 559, 556, - 584, 585, 562, 567, 546, 558, 563, 576, 583, 580, - 540, 544, 548, 557, 575, 574, 555, 566, 577, 561, - 549, 542, 550, 0, 198, 223, 372, 0, 461, 291, - 662, 630, 491, 625, 208, 225, 0, 265, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, - 202, 211, 224, 234, 238, 245, 264, 279, 281, 288, - 301, 313, 314, 322, 323, 326, 332, 384, 391, 392, - 393, 394, 414, 415, 416, 419, 422, 423, 426, 428, - 429, 432, 437, 441, 442, 443, 445, 447, 449, 462, - 467, 481, 482, 483, 484, 485, 488, 489, 495, 496, - 497, 498, 499, 507, 508, 513, 514, 515, 516, 527, - 598, 600, 617, 637, 644, 487, 389, 435, 459, 591, - 304, 305, 450, 451, 318, 319, 658, 659, 303, 612, - 645, 609, 657, 639, 444, 382, 0, 0, 385, 284, - 308, 324, 0, 629, 509, 229, 473, 293, 253, 0, - 0, 213, 248, 232, 262, 277, 280, 328, 396, 405, - 434, 440, 299, 274, 246, 466, 243, 492, 530, 531, - 532, 534, 400, 269, 439, 401, 0, 380, 587, 588, - 320, 0, 0, 0, 539, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, - 0, 0, 0, 0, 273, 0, 0, 0, 0, 370, - 270, 0, 0, 206, 512, 0, 436, 0, 205, 0, - 494, 255, 381, 378, 595, 285, 276, 272, 252, 321, - 390, 433, 529, 427, 0, 374, 0, 0, 504, 406, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 327, 250, - 329, 204, 418, 505, 289, 0, 0, 0, 0, 0, - 518, 196, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 240, 0, 0, 247, 0, 0, 0, 355, 364, - 363, 343, 344, 346, 348, 354, 361, 367, 340, 349, - 0, 0, 621, 0, 0, 0, 268, 325, 275, 267, - 592, 0, 0, 0, 0, 0, 0, 608, 0, 0, - 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1471, 0, 300, 0, 407, - 260, 0, 460, 0, 0, 0, 641, 0, 0, 0, - 0, 0, 0, 0, 369, 0, 334, 199, 227, 0, - 0, 417, 468, 480, 0, 0, 0, 256, 0, 478, - 431, 616, 235, 287, 465, 438, 476, 446, 290, 0, - 0, 477, 376, 597, 456, 613, 642, 643, 266, 411, - 627, 533, 635, 660, 228, 263, 425, 517, 619, 501, - 402, 593, 594, 333, 500, 298, 203, 373, 648, 226, - 486, 375, 244, 233, 599, 624, 302, 254, 292, 463, - 655, 215, 528, 610, 241, 490, 0, 0, 663, 249, - 511, 622, 611, 217, 606, 510, 398, 330, 331, 216, - 0, 464, 271, 296, 0, 0, 261, 420, 601, 602, - 259, 664, 230, 634, 222, 0, 633, 413, 596, 607, - 399, 387, 221, 605, 397, 386, 338, 359, 360, 283, - 310, 453, 379, 454, 309, 311, 409, 408, 410, 209, - 620, 638, 0, 210, 0, 506, 623, 665, 458, 214, - 236, 237, 239, 0, 282, 286, 294, 297, 306, 307, - 317, 371, 424, 452, 448, 457, 0, 590, 614, 628, - 640, 646, 647, 649, 650, 651, 652, 653, 656, 654, - 412, 315, 502, 337, 377, 0, 0, 430, 479, 242, - 618, 503, 201, 0, 0, 0, 0, 257, 258, 0, - 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, - 676, 677, 678, 679, 680, 681, 682, 683, 661, 519, - 525, 520, 521, 522, 523, 524, 0, 526, 0, 0, - 0, 0, 0, 403, 0, 603, 604, 684, 388, 493, - 615, 339, 353, 356, 345, 365, 0, 366, 341, 342, - 347, 350, 351, 352, 357, 358, 362, 368, 251, 212, - 395, 404, 589, 316, 218, 219, 220, 535, 536, 537, - 538, 631, 632, 636, 207, 469, 470, 471, 472, 295, - 626, 312, 475, 474, 335, 336, 383, 455, 551, 553, - 564, 568, 570, 572, 578, 581, 552, 554, 565, 569, - 571, 573, 579, 582, 541, 543, 545, 547, 560, 559, - 556, 584, 585, 562, 567, 546, 558, 563, 576, 583, - 580, 540, 544, 548, 557, 575, 574, 555, 566, 577, - 561, 549, 542, 550, 0, 198, 223, 372, 0, 461, - 291, 662, 630, 491, 625, 208, 225, 0, 265, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 200, 202, 211, 224, 234, 238, 245, 264, 279, 281, - 288, 301, 313, 314, 322, 323, 326, 332, 384, 391, - 392, 393, 394, 414, 415, 416, 419, 422, 423, 426, - 428, 429, 432, 437, 441, 442, 443, 445, 447, 449, - 462, 467, 481, 482, 483, 484, 485, 488, 489, 495, - 496, 497, 498, 499, 507, 508, 513, 514, 515, 516, - 527, 598, 600, 617, 637, 644, 487, 389, 435, 459, - 591, 304, 305, 450, 451, 318, 319, 658, 659, 1470, - 612, 645, 609, 657, 639, 444, 382, 0, 0, 385, - 284, 308, 324, 0, 629, 509, 229, 473, 293, 253, - 0, 0, 213, 248, 232, 262, 277, 280, 328, 396, - 405, 434, 440, 299, 274, 246, 466, 243, 492, 530, - 531, 532, 534, 400, 269, 439, 401, 0, 380, 587, - 588, 320, 0, 0, 0, 539, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, - 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, - 370, 270, 0, 0, 206, 512, 0, 436, 0, 205, - 0, 494, 255, 381, 378, 595, 285, 276, 272, 252, - 321, 390, 433, 529, 427, 0, 374, 0, 0, 504, - 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, - 250, 329, 204, 418, 505, 289, 0, 0, 0, 0, - 0, 518, 196, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 240, 0, 0, 247, 0, 0, 0, 355, - 364, 363, 343, 344, 346, 348, 354, 361, 367, 340, - 349, 0, 0, 621, 0, 0, 0, 268, 325, 275, - 267, 592, 0, 0, 0, 0, 0, 0, 608, 0, - 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, - 407, 260, 0, 460, 0, 0, 0, 641, 0, 0, - 0, 0, 0, 0, 0, 369, 0, 334, 199, 227, - 0, 0, 417, 468, 480, 0, 0, 0, 256, 0, - 478, 431, 616, 235, 287, 465, 438, 476, 446, 290, - 0, 0, 477, 376, 597, 456, 613, 642, 643, 266, - 411, 627, 533, 635, 660, 228, 263, 425, 517, 619, - 501, 402, 593, 594, 333, 500, 298, 203, 373, 648, - 226, 486, 375, 244, 233, 599, 624, 302, 254, 292, - 463, 655, 215, 528, 610, 241, 490, 0, 0, 663, - 249, 511, 622, 611, 217, 606, 510, 398, 330, 331, - 216, 0, 464, 271, 296, 0, 0, 261, 420, 601, - 602, 259, 664, 230, 634, 222, 0, 633, 413, 596, - 607, 399, 387, 221, 605, 397, 386, 338, 359, 360, - 283, 310, 453, 379, 454, 309, 311, 409, 408, 410, - 209, 620, 638, 0, 210, 0, 506, 623, 665, 458, - 214, 236, 237, 239, 0, 282, 286, 294, 297, 306, - 307, 317, 371, 424, 452, 448, 457, 0, 590, 614, - 628, 640, 646, 647, 649, 650, 651, 652, 653, 656, - 654, 412, 315, 502, 337, 377, 0, 0, 430, 479, - 242, 618, 503, 201, 0, 0, 0, 0, 257, 258, - 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 666, 667, 668, 669, 670, 671, 672, 673, 674, - 675, 676, 677, 678, 679, 680, 681, 682, 683, 661, - 519, 525, 520, 521, 522, 523, 524, 0, 526, 0, - 0, 0, 0, 0, 403, 0, 603, 604, 684, 388, - 493, 615, 339, 353, 356, 345, 365, 0, 366, 341, - 342, 347, 350, 351, 352, 357, 358, 362, 368, 251, - 212, 395, 404, 589, 316, 218, 219, 220, 535, 536, - 537, 538, 631, 632, 636, 207, 469, 470, 471, 472, - 295, 626, 312, 475, 474, 335, 336, 383, 455, 551, - 553, 564, 568, 570, 572, 578, 581, 552, 554, 565, - 569, 571, 573, 579, 582, 541, 543, 545, 547, 560, - 559, 556, 584, 585, 562, 567, 546, 558, 563, 576, - 583, 580, 540, 544, 548, 557, 575, 574, 555, 566, - 577, 561, 549, 542, 550, 0, 198, 223, 372, 0, - 461, 291, 662, 630, 491, 625, 208, 225, 0, 265, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1063, 0, 0, - 0, 200, 202, 211, 224, 234, 238, 245, 264, 279, - 281, 288, 301, 313, 314, 322, 323, 326, 332, 384, - 391, 392, 393, 394, 414, 415, 416, 419, 422, 423, - 426, 428, 429, 432, 437, 441, 442, 443, 445, 447, - 449, 462, 467, 481, 482, 483, 484, 485, 488, 489, - 495, 496, 497, 498, 499, 507, 508, 513, 514, 515, - 516, 527, 598, 600, 617, 637, 644, 487, 389, 435, - 459, 591, 304, 305, 450, 451, 318, 319, 658, 659, - 303, 612, 645, 609, 657, 639, 444, 382, 0, 0, - 385, 284, 308, 324, 0, 629, 509, 229, 473, 293, - 253, 0, 0, 213, 248, 232, 262, 277, 280, 328, - 396, 405, 434, 440, 299, 274, 246, 466, 243, 492, - 530, 531, 532, 534, 400, 269, 439, 401, 0, 380, - 587, 588, 320, 0, 0, 0, 539, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, - 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, - 0, 370, 270, 0, 0, 206, 512, 0, 436, 0, - 205, 0, 494, 255, 381, 378, 595, 285, 276, 272, - 252, 321, 390, 433, 529, 427, 0, 374, 0, 0, - 504, 406, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 327, 250, 329, 204, 418, 505, 289, 0, 0, 0, - 0, 0, 518, 196, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 240, 0, 0, 247, 0, 0, 0, - 355, 364, 363, 343, 344, 346, 348, 354, 361, 367, - 340, 349, 0, 0, 621, 0, 0, 0, 268, 325, - 275, 267, 592, 0, 0, 0, 0, 0, 0, 608, - 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, - 0, 407, 260, 0, 460, 0, 687, 0, 641, 0, - 0, 0, 0, 0, 0, 0, 369, 0, 334, 199, - 227, 0, 0, 417, 468, 480, 0, 0, 0, 256, - 0, 478, 431, 616, 235, 287, 465, 438, 476, 446, - 290, 0, 0, 477, 376, 597, 456, 613, 642, 643, - 266, 411, 627, 533, 635, 660, 228, 263, 425, 517, - 619, 501, 402, 593, 594, 333, 500, 298, 203, 373, - 648, 226, 486, 375, 244, 233, 599, 624, 302, 254, - 292, 463, 655, 215, 528, 610, 241, 490, 0, 0, - 663, 249, 511, 622, 611, 217, 606, 510, 398, 330, - 331, 216, 0, 464, 271, 296, 0, 0, 261, 420, - 601, 602, 259, 664, 230, 634, 222, 0, 633, 413, - 596, 607, 399, 387, 221, 605, 397, 386, 338, 359, - 360, 283, 310, 453, 379, 454, 309, 311, 409, 408, - 410, 209, 620, 638, 0, 210, 0, 506, 623, 665, - 458, 214, 236, 237, 239, 0, 282, 286, 294, 297, - 306, 307, 317, 371, 424, 452, 448, 457, 0, 590, - 614, 628, 640, 646, 647, 649, 650, 651, 652, 653, - 656, 654, 412, 315, 502, 337, 377, 0, 0, 430, - 479, 242, 618, 503, 201, 0, 0, 0, 0, 257, - 258, 0, 586, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 666, 667, 668, 669, 670, 671, 672, 673, - 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, - 661, 519, 525, 520, 521, 522, 523, 524, 0, 526, - 0, 0, 0, 0, 0, 403, 0, 603, 604, 684, - 388, 493, 615, 339, 353, 356, 345, 365, 0, 366, - 341, 342, 347, 350, 351, 352, 357, 358, 362, 368, - 251, 212, 395, 404, 589, 316, 218, 219, 220, 535, - 536, 537, 538, 631, 632, 636, 207, 469, 470, 471, - 472, 295, 626, 312, 475, 474, 335, 336, 383, 455, - 551, 553, 564, 568, 570, 572, 578, 581, 552, 554, - 565, 569, 571, 573, 579, 582, 541, 543, 545, 547, - 560, 559, 556, 584, 585, 562, 567, 546, 558, 563, - 576, 583, 580, 540, 544, 548, 557, 575, 574, 555, - 566, 577, 561, 549, 542, 550, 0, 198, 223, 372, - 0, 461, 291, 662, 630, 491, 625, 208, 225, 0, - 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 200, 202, 211, 224, 234, 238, 245, 264, - 279, 281, 288, 301, 313, 314, 322, 323, 326, 332, - 384, 391, 392, 393, 394, 414, 415, 416, 419, 422, - 423, 426, 428, 429, 432, 437, 441, 442, 443, 445, - 447, 449, 462, 467, 481, 482, 483, 484, 485, 488, - 489, 495, 496, 497, 498, 499, 507, 508, 513, 514, - 515, 516, 527, 598, 600, 617, 637, 644, 487, 389, - 435, 459, 591, 304, 305, 450, 451, 318, 319, 658, - 659, 303, 612, 645, 609, 657, 639, 444, 382, 0, - 0, 385, 284, 308, 324, 0, 629, 509, 229, 473, - 293, 253, 0, 0, 213, 248, 232, 262, 277, 280, - 328, 396, 405, 434, 440, 299, 274, 246, 466, 243, - 492, 530, 531, 532, 534, 400, 269, 439, 401, 0, - 380, 587, 588, 320, 0, 0, 0, 539, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, - 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, - 0, 0, 370, 270, 0, 0, 206, 512, 0, 436, - 0, 205, 0, 494, 255, 381, 378, 595, 285, 276, - 272, 252, 321, 390, 433, 529, 427, 0, 374, 0, - 0, 504, 406, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 327, 250, 329, 204, 418, 505, 289, 0, 0, - 0, 0, 0, 518, 736, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 240, 0, 0, 247, 0, 0, - 0, 355, 364, 363, 343, 344, 346, 348, 354, 361, - 367, 340, 349, 0, 0, 621, 0, 0, 0, 268, - 325, 275, 267, 592, 0, 0, 0, 0, 0, 0, - 608, 0, 0, 231, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 300, 0, 407, 260, 0, 460, 0, 0, 0, 641, - 0, 0, 0, 0, 0, 0, 0, 369, 0, 334, - 199, 227, 0, 0, 417, 468, 480, 0, 0, 0, - 256, 0, 478, 431, 616, 235, 287, 465, 438, 476, - 446, 290, 0, 0, 477, 376, 597, 456, 613, 642, - 643, 266, 411, 627, 533, 635, 660, 228, 263, 425, - 517, 619, 501, 402, 593, 594, 333, 500, 298, 203, - 373, 648, 226, 486, 375, 244, 233, 599, 624, 302, - 254, 292, 463, 655, 215, 528, 610, 241, 490, 0, - 0, 663, 249, 511, 622, 611, 217, 606, 510, 398, - 330, 331, 216, 0, 464, 271, 296, 0, 0, 261, - 420, 601, 602, 259, 664, 230, 634, 222, 0, 633, - 413, 596, 607, 399, 387, 221, 605, 397, 386, 338, - 359, 360, 283, 310, 453, 379, 454, 309, 311, 409, - 408, 410, 209, 620, 638, 0, 210, 0, 506, 623, - 665, 458, 214, 236, 237, 239, 0, 282, 286, 294, - 297, 306, 307, 317, 371, 424, 452, 448, 457, 0, - 590, 614, 628, 640, 646, 647, 649, 650, 651, 652, - 653, 656, 654, 412, 315, 502, 337, 377, 0, 0, - 430, 479, 242, 618, 503, 201, 0, 0, 0, 0, - 257, 258, 0, 586, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 666, 667, 668, 669, 670, 671, 672, - 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, - 683, 661, 519, 525, 520, 521, 522, 523, 524, 0, - 526, 0, 0, 0, 0, 0, 403, 0, 603, 604, - 684, 388, 493, 615, 339, 353, 356, 345, 365, 0, - 366, 341, 342, 347, 350, 351, 352, 357, 358, 362, - 368, 251, 212, 395, 404, 589, 316, 218, 219, 220, - 535, 536, 537, 538, 631, 632, 636, 207, 469, 470, - 471, 472, 295, 626, 312, 475, 474, 335, 336, 383, - 455, 551, 553, 564, 568, 570, 572, 578, 581, 552, - 554, 565, 569, 571, 573, 579, 582, 541, 543, 545, - 547, 560, 559, 556, 584, 585, 562, 567, 546, 558, - 563, 576, 583, 580, 540, 544, 548, 557, 575, 574, - 555, 566, 577, 561, 549, 542, 550, 0, 198, 223, - 372, 0, 461, 291, 662, 630, 491, 625, 208, 225, - 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 200, 202, 211, 224, 234, 238, 245, - 264, 279, 281, 288, 301, 313, 314, 322, 323, 326, - 332, 384, 391, 392, 393, 394, 4166, 415, 416, 419, - 422, 423, 426, 428, 429, 432, 437, 441, 442, 443, - 445, 447, 449, 462, 467, 481, 482, 483, 484, 485, - 488, 489, 495, 496, 497, 498, 499, 507, 508, 513, - 514, 515, 516, 527, 598, 600, 617, 637, 644, 487, - 389, 435, 459, 591, 304, 305, 450, 451, 318, 319, - 658, 659, 303, 612, 645, 609, 657, 639, 444, 382, - 0, 0, 385, 284, 308, 324, 0, 629, 509, 229, - 473, 293, 253, 0, 0, 213, 248, 232, 262, 277, - 280, 328, 396, 405, 434, 440, 299, 274, 246, 466, - 243, 492, 530, 531, 532, 534, 400, 269, 439, 401, - 0, 380, 587, 588, 320, 0, 0, 0, 539, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 421, 0, 0, 0, 0, 0, 0, 0, 273, 0, - 0, 0, 0, 370, 270, 0, 0, 206, 512, 0, - 436, 0, 205, 0, 494, 255, 381, 378, 595, 285, - 276, 272, 252, 321, 390, 433, 529, 427, 0, 374, - 0, 0, 504, 406, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 327, 250, 329, 204, 418, 505, 289, 0, - 0, 0, 0, 0, 518, 736, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 240, 0, 0, 247, 0, - 0, 0, 355, 364, 363, 343, 344, 346, 348, 354, - 361, 367, 340, 349, 0, 0, 621, 0, 0, 0, - 268, 325, 275, 267, 592, 0, 0, 0, 0, 0, - 0, 608, 0, 0, 231, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 300, 0, 407, 260, 0, 460, 0, 0, 0, - 641, 0, 0, 0, 0, 0, 0, 0, 369, 0, - 334, 199, 227, 0, 0, 417, 468, 480, 0, 0, - 0, 256, 0, 478, 431, 616, 235, 287, 465, 438, - 476, 446, 290, 0, 0, 477, 376, 597, 456, 613, - 642, 643, 266, 411, 627, 533, 635, 660, 228, 263, - 425, 517, 619, 501, 402, 593, 594, 333, 500, 298, - 203, 373, 648, 226, 486, 375, 244, 233, 599, 624, - 302, 254, 292, 463, 655, 215, 528, 610, 241, 490, - 0, 0, 663, 249, 511, 622, 611, 217, 606, 510, - 398, 330, 331, 216, 0, 464, 271, 296, 0, 0, - 261, 420, 601, 602, 259, 664, 230, 634, 222, 0, - 633, 413, 596, 607, 399, 387, 221, 605, 397, 386, - 338, 359, 360, 283, 310, 453, 379, 454, 309, 311, - 409, 408, 410, 209, 620, 638, 0, 210, 0, 506, - 623, 665, 458, 214, 236, 237, 239, 0, 282, 286, - 294, 297, 306, 307, 317, 371, 424, 452, 448, 457, - 0, 590, 614, 628, 640, 646, 647, 649, 650, 651, - 652, 653, 656, 654, 412, 315, 502, 337, 377, 0, - 0, 430, 479, 242, 618, 503, 201, 0, 0, 0, - 0, 257, 258, 0, 586, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 666, 667, 668, 669, 670, 671, - 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, - 682, 683, 661, 519, 525, 520, 521, 522, 523, 524, - 0, 526, 0, 0, 0, 0, 0, 403, 0, 603, - 604, 684, 388, 493, 615, 339, 353, 356, 345, 365, - 0, 366, 341, 342, 347, 350, 351, 352, 357, 358, - 362, 368, 251, 212, 395, 404, 589, 316, 218, 219, - 220, 535, 536, 537, 538, 631, 632, 636, 207, 469, - 470, 471, 472, 295, 626, 312, 475, 474, 335, 336, - 383, 455, 551, 553, 564, 568, 570, 572, 578, 581, - 552, 554, 565, 569, 571, 573, 579, 582, 541, 543, - 545, 547, 560, 559, 556, 584, 585, 562, 567, 546, - 558, 563, 576, 583, 580, 540, 544, 548, 557, 575, - 574, 555, 566, 577, 561, 549, 542, 550, 0, 198, - 223, 372, 0, 461, 291, 662, 630, 491, 625, 208, - 225, 0, 265, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 200, 202, 211, 224, 234, 238, - 245, 264, 279, 281, 288, 301, 313, 314, 322, 323, - 326, 332, 384, 391, 392, 393, 394, 414, 415, 416, - 419, 422, 423, 426, 428, 429, 432, 437, 441, 442, - 443, 445, 447, 449, 462, 467, 481, 482, 483, 484, - 485, 488, 489, 495, 496, 497, 498, 499, 507, 508, - 513, 514, 515, 516, 527, 598, 600, 617, 637, 644, - 487, 389, 435, 459, 591, 304, 305, 450, 451, 318, - 319, 658, 659, 303, 612, 645, 609, 657, 639, 444, - 382, 0, 0, 385, 284, 308, 324, 0, 629, 509, - 229, 473, 293, 253, 0, 0, 213, 248, 232, 262, - 277, 280, 328, 396, 405, 434, 440, 299, 274, 246, - 466, 243, 492, 530, 531, 532, 534, 400, 269, 439, - 401, 0, 380, 587, 588, 320, 0, 0, 0, 539, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 421, 0, 0, 0, 0, 0, 0, 0, 273, - 0, 0, 0, 0, 370, 270, 0, 0, 206, 512, - 0, 436, 0, 205, 0, 494, 255, 381, 378, 595, - 285, 276, 272, 252, 321, 390, 433, 529, 427, 0, - 374, 0, 0, 504, 406, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 327, 250, 329, 204, 418, 505, 289, - 0, 0, 0, 0, 0, 518, 971, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 240, 0, 0, 247, - 0, 0, 0, 355, 364, 363, 343, 344, 346, 348, - 354, 361, 367, 340, 349, 0, 0, 621, 0, 0, - 0, 268, 325, 275, 267, 592, 0, 0, 0, 0, - 0, 0, 608, 0, 0, 231, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 206, 208, 217, 230, 242, 247, 254, + 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, + 347, 399, 406, 407, 408, 409, 431, 432, 433, 436, + 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, + 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, + 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, + 532, 533, 534, 545, 618, 620, 637, 657, 664, 504, + 404, 452, 476, 611, 0, 0, 317, 318, 467, 468, + 332, 333, 678, 679, 316, 632, 665, 629, 677, 659, + 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, + 527, 236, 490, 306, 265, 0, 0, 219, 257, 239, + 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, + 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, + 456, 416, 0, 395, 606, 607, 335, 0, 0, 0, + 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, + 286, 0, 0, 0, 0, 385, 283, 0, 1978, 212, + 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, + 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, + 0, 389, 0, 0, 522, 422, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, + 302, 0, 0, 0, 0, 0, 536, 756, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, + 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, + 363, 369, 376, 382, 355, 364, 0, 0, 641, 0, + 0, 0, 281, 340, 288, 280, 612, 0, 0, 0, + 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, + 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, + 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, + 497, 0, 0, 0, 0, 269, 0, 495, 448, 636, + 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, + 391, 617, 473, 633, 662, 663, 279, 428, 647, 551, + 655, 680, 234, 276, 442, 535, 639, 519, 417, 613, + 614, 348, 518, 311, 209, 388, 668, 232, 503, 390, + 253, 241, 619, 644, 315, 267, 305, 480, 675, 221, + 546, 630, 250, 507, 0, 0, 683, 258, 529, 642, + 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, + 284, 309, 0, 0, 274, 437, 621, 622, 272, 684, + 237, 654, 228, 0, 653, 430, 616, 627, 414, 402, + 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, + 394, 471, 323, 325, 425, 424, 426, 215, 640, 658, + 0, 216, 0, 524, 643, 685, 475, 220, 244, 245, + 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, + 441, 469, 465, 474, 0, 610, 634, 648, 660, 666, + 667, 669, 670, 671, 672, 673, 676, 674, 429, 329, + 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, + 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, + 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, + 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, + 696, 697, 698, 699, 700, 701, 702, 703, 681, 537, + 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, + 0, 0, 0, 419, 0, 623, 624, 704, 403, 510, + 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, + 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, + 410, 420, 608, 330, 224, 225, 226, 553, 554, 555, + 556, 651, 652, 656, 213, 486, 487, 488, 489, 308, + 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, + 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, + 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, + 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, + 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, + 579, 567, 560, 568, 0, 204, 229, 387, 0, 478, + 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, + 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, + 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, + 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, + 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, + 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, + 545, 618, 620, 637, 657, 664, 504, 404, 452, 476, + 611, 0, 0, 317, 318, 467, 468, 332, 333, 678, + 679, 316, 632, 665, 629, 677, 659, 461, 397, 0, + 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, + 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, + 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, + 509, 548, 549, 550, 552, 415, 282, 456, 416, 0, + 395, 606, 607, 335, 0, 0, 0, 557, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, + 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, + 0, 0, 385, 283, 0, 1976, 212, 530, 0, 453, + 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, + 285, 264, 336, 405, 450, 547, 444, 0, 389, 0, + 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 342, 262, 344, 210, 435, 523, 302, 0, 0, + 0, 0, 0, 536, 756, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, + 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, + 382, 355, 364, 0, 0, 641, 0, 0, 0, 281, + 340, 288, 280, 612, 0, 0, 0, 0, 0, 0, + 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 661, 0, 0, 0, 0, 0, 0, 0, 384, 0, + 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, + 0, 0, 269, 0, 495, 448, 636, 243, 300, 482, + 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, + 633, 662, 663, 279, 428, 647, 551, 655, 680, 234, + 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, + 311, 209, 388, 668, 232, 503, 390, 253, 241, 619, + 644, 315, 267, 305, 480, 675, 221, 546, 630, 250, + 507, 0, 0, 683, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 684, 237, 654, 228, + 0, 653, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 658, 0, 216, 0, + 524, 643, 685, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 660, 666, 667, 669, 670, + 671, 672, 673, 676, 674, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, + 699, 700, 701, 702, 703, 681, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 704, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 651, 652, + 656, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 682, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 657, 664, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 678, 679, 316, 632, + 665, 629, 677, 659, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 416, 0, 395, 606, 607, + 335, 0, 0, 0, 557, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 1974, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 0, 522, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 0, + 536, 756, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, + 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, + 0, 0, 0, 0, 0, 384, 0, 349, 205, 233, + 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, + 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, + 303, 0, 0, 494, 391, 617, 473, 633, 662, 663, + 279, 428, 647, 551, 655, 680, 234, 276, 442, 535, + 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, + 668, 232, 503, 390, 253, 241, 619, 644, 315, 267, + 305, 480, 675, 221, 546, 630, 250, 507, 0, 0, + 683, 258, 529, 642, 631, 223, 626, 528, 413, 345, + 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, + 621, 622, 272, 684, 237, 654, 228, 0, 653, 430, + 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, + 375, 296, 324, 470, 394, 471, 323, 325, 425, 424, + 426, 215, 640, 658, 0, 216, 0, 524, 643, 685, + 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, + 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, + 634, 648, 660, 666, 667, 669, 670, 671, 672, 673, + 676, 674, 429, 329, 520, 352, 392, 0, 0, 447, + 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, + 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, + 0, 270, 271, 0, 605, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 686, 687, 688, 689, 690, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 681, 537, 543, 538, 539, 540, 541, 542, + 0, 544, 0, 0, 0, 0, 0, 419, 0, 623, + 624, 704, 403, 510, 635, 354, 368, 371, 360, 380, + 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, + 377, 383, 263, 218, 410, 420, 608, 330, 224, 225, + 226, 553, 554, 555, 556, 651, 652, 656, 213, 486, + 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, + 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, + 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, + 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, + 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, + 592, 573, 584, 595, 579, 567, 560, 568, 0, 204, + 229, 387, 0, 478, 304, 682, 650, 508, 645, 214, + 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 206, 208, 217, 230, 242, 247, + 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, + 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, + 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, + 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, + 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, + 531, 532, 533, 534, 545, 618, 620, 637, 657, 664, + 504, 404, 452, 476, 611, 0, 0, 317, 318, 467, + 468, 332, 333, 678, 679, 316, 632, 665, 629, 677, + 659, 461, 397, 0, 0, 400, 297, 322, 339, 0, + 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, + 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, + 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, + 282, 456, 416, 0, 395, 606, 607, 335, 0, 0, + 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, + 0, 286, 0, 0, 0, 0, 385, 283, 0, 0, + 212, 530, 0, 453, 0, 211, 0, 511, 268, 396, + 393, 615, 298, 289, 285, 264, 336, 405, 450, 547, + 444, 0, 389, 0, 0, 522, 422, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 342, 262, 344, 210, 435, + 523, 302, 0, 1949, 0, 0, 0, 536, 756, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, + 0, 256, 0, 0, 0, 370, 379, 378, 358, 359, + 361, 363, 369, 376, 382, 355, 364, 0, 0, 641, + 0, 0, 0, 281, 340, 288, 280, 612, 0, 0, + 0, 0, 0, 0, 628, 0, 0, 238, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 313, 0, 423, 273, 0, + 477, 0, 319, 334, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, + 0, 0, 384, 0, 349, 205, 233, 0, 0, 434, + 485, 497, 0, 0, 0, 0, 269, 0, 495, 448, + 636, 243, 300, 482, 455, 493, 463, 303, 0, 0, + 494, 391, 617, 473, 633, 662, 663, 279, 428, 647, + 551, 655, 680, 234, 276, 442, 535, 639, 519, 417, + 613, 614, 348, 518, 311, 209, 388, 668, 232, 503, + 390, 253, 241, 619, 644, 315, 267, 305, 480, 675, + 221, 546, 630, 250, 507, 0, 0, 683, 258, 529, + 642, 631, 223, 626, 528, 413, 345, 346, 222, 0, + 481, 284, 309, 0, 0, 274, 437, 621, 622, 272, + 684, 237, 654, 228, 0, 653, 430, 616, 627, 414, + 402, 227, 625, 412, 401, 353, 374, 375, 296, 324, + 470, 394, 471, 323, 325, 425, 424, 426, 215, 640, + 658, 0, 216, 0, 524, 643, 685, 475, 220, 244, + 245, 248, 0, 295, 299, 307, 310, 320, 321, 331, + 386, 441, 469, 465, 474, 0, 610, 634, 648, 660, + 666, 667, 669, 670, 671, 672, 673, 676, 674, 429, + 329, 520, 352, 392, 0, 0, 447, 496, 251, 638, + 521, 240, 604, 418, 427, 259, 261, 260, 235, 512, + 609, 246, 266, 207, 0, 0, 0, 0, 270, 271, + 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 686, 687, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 681, + 537, 543, 538, 539, 540, 541, 542, 0, 544, 0, + 0, 0, 0, 0, 419, 0, 623, 624, 704, 403, + 510, 635, 354, 368, 371, 360, 380, 0, 381, 356, + 357, 362, 365, 366, 367, 372, 373, 377, 383, 263, + 218, 410, 420, 608, 330, 224, 225, 226, 553, 554, + 555, 556, 651, 652, 656, 213, 486, 487, 488, 489, + 308, 646, 326, 492, 491, 350, 351, 398, 472, 569, + 571, 582, 586, 588, 590, 596, 599, 570, 572, 583, + 587, 589, 591, 597, 600, 559, 561, 563, 565, 578, + 577, 574, 602, 603, 580, 585, 564, 576, 581, 594, + 601, 598, 558, 562, 566, 575, 593, 592, 573, 584, + 595, 579, 567, 560, 568, 0, 204, 229, 387, 0, + 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 206, 208, 217, 230, 242, 247, 254, 277, 292, + 294, 301, 314, 327, 328, 337, 338, 341, 347, 399, + 406, 407, 408, 409, 431, 432, 433, 436, 439, 440, + 443, 445, 446, 449, 454, 458, 459, 460, 462, 464, + 466, 479, 484, 498, 499, 500, 501, 502, 505, 506, + 513, 514, 515, 516, 517, 525, 526, 531, 532, 533, + 534, 545, 618, 620, 637, 657, 664, 504, 404, 452, + 476, 611, 0, 0, 317, 318, 467, 468, 332, 333, + 678, 679, 316, 632, 665, 629, 677, 659, 461, 397, + 0, 0, 400, 297, 322, 339, 0, 649, 527, 236, + 490, 306, 265, 0, 0, 219, 257, 239, 275, 290, + 293, 343, 411, 421, 451, 457, 312, 287, 255, 483, + 252, 509, 548, 549, 550, 552, 415, 282, 456, 416, + 0, 395, 606, 607, 335, 0, 0, 0, 557, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 438, 0, 0, 0, 0, 0, 0, 1852, 286, 0, + 0, 0, 0, 385, 283, 0, 0, 212, 530, 0, + 453, 0, 211, 0, 511, 268, 396, 393, 615, 298, + 289, 285, 264, 336, 405, 450, 547, 444, 0, 389, + 0, 0, 522, 422, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 342, 262, 344, 210, 435, 523, 302, 0, + 0, 0, 0, 0, 536, 202, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 249, 0, 0, 256, 0, + 0, 0, 370, 379, 378, 358, 359, 361, 363, 369, + 376, 382, 355, 364, 0, 0, 641, 0, 0, 0, + 281, 340, 288, 280, 612, 0, 0, 0, 0, 0, + 0, 628, 0, 0, 238, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 313, 0, 423, 273, 0, 477, 0, 319, + 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 661, 0, 0, 0, 0, 0, 0, 0, 384, + 0, 349, 205, 233, 0, 0, 434, 485, 497, 0, + 0, 0, 0, 269, 0, 495, 448, 636, 243, 300, + 482, 455, 493, 463, 303, 0, 0, 494, 391, 617, + 473, 633, 662, 663, 279, 428, 647, 551, 655, 680, + 234, 276, 442, 535, 639, 519, 417, 613, 614, 348, + 518, 311, 209, 388, 668, 232, 503, 390, 253, 241, + 619, 644, 315, 267, 305, 480, 675, 221, 546, 630, + 250, 507, 0, 0, 683, 258, 529, 642, 631, 223, + 626, 528, 413, 345, 346, 222, 0, 481, 284, 309, + 0, 0, 274, 437, 621, 622, 272, 684, 237, 654, + 228, 0, 653, 430, 616, 627, 414, 402, 227, 625, + 412, 401, 353, 374, 375, 296, 324, 470, 394, 471, + 323, 325, 425, 424, 426, 215, 640, 658, 0, 216, + 0, 524, 643, 685, 475, 220, 244, 245, 248, 0, + 295, 299, 307, 310, 320, 321, 331, 386, 441, 469, + 465, 474, 0, 610, 634, 648, 660, 666, 667, 669, + 670, 671, 672, 673, 676, 674, 429, 329, 520, 352, + 392, 0, 0, 447, 496, 251, 638, 521, 240, 604, + 418, 427, 259, 261, 260, 235, 512, 609, 246, 266, + 207, 0, 0, 0, 0, 270, 271, 0, 605, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 700, 701, 702, 703, 681, 537, 543, 538, + 539, 540, 541, 542, 0, 544, 0, 0, 0, 0, + 0, 419, 0, 623, 624, 704, 403, 510, 635, 354, + 368, 371, 360, 380, 0, 381, 356, 357, 362, 365, + 366, 367, 372, 373, 377, 383, 263, 218, 410, 420, + 608, 330, 224, 225, 226, 553, 554, 555, 556, 651, + 652, 656, 213, 486, 487, 488, 489, 308, 646, 326, + 492, 491, 350, 351, 398, 472, 569, 571, 582, 586, + 588, 590, 596, 599, 570, 572, 583, 587, 589, 591, + 597, 600, 559, 561, 563, 565, 578, 577, 574, 602, + 603, 580, 585, 564, 576, 581, 594, 601, 598, 558, + 562, 566, 575, 593, 592, 573, 584, 595, 579, 567, + 560, 568, 0, 204, 229, 387, 0, 478, 304, 682, + 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 206, 208, + 217, 230, 242, 247, 254, 277, 292, 294, 301, 314, + 327, 328, 337, 338, 341, 347, 399, 406, 407, 408, + 409, 431, 432, 433, 436, 439, 440, 443, 445, 446, + 449, 454, 458, 459, 460, 462, 464, 466, 479, 484, + 498, 499, 500, 501, 502, 505, 506, 513, 514, 515, + 516, 517, 525, 526, 531, 532, 533, 534, 545, 618, + 620, 637, 657, 664, 504, 404, 452, 476, 611, 0, + 0, 317, 318, 467, 468, 332, 333, 678, 679, 316, + 632, 665, 629, 677, 659, 461, 397, 0, 0, 400, + 297, 322, 339, 0, 649, 527, 236, 490, 306, 265, + 0, 0, 219, 257, 239, 275, 290, 293, 343, 411, + 421, 451, 457, 312, 287, 255, 483, 252, 509, 548, + 549, 550, 552, 415, 282, 456, 416, 0, 395, 606, + 607, 335, 0, 0, 0, 557, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, + 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, + 385, 283, 0, 0, 212, 530, 0, 453, 0, 211, + 0, 511, 268, 396, 393, 615, 298, 289, 285, 264, + 336, 405, 450, 547, 444, 0, 389, 0, 0, 522, + 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, + 262, 344, 210, 435, 523, 302, 0, 101, 0, 0, + 0, 536, 991, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 256, 0, 0, 0, 370, + 379, 378, 358, 359, 361, 363, 369, 376, 382, 355, + 364, 0, 0, 641, 0, 0, 0, 281, 340, 288, + 280, 612, 0, 0, 0, 0, 0, 0, 628, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 423, 273, 0, 477, 0, 319, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 349, 205, + 233, 0, 0, 434, 485, 497, 0, 0, 0, 0, + 269, 0, 495, 448, 636, 243, 300, 482, 455, 493, + 463, 303, 0, 0, 494, 391, 617, 473, 633, 662, + 663, 279, 428, 647, 551, 655, 680, 234, 276, 442, + 535, 639, 519, 417, 613, 614, 348, 518, 311, 209, + 388, 668, 232, 503, 390, 253, 241, 619, 644, 315, + 267, 305, 480, 675, 221, 546, 630, 250, 507, 0, + 0, 683, 258, 529, 642, 631, 223, 626, 528, 413, + 345, 346, 222, 0, 481, 284, 309, 0, 0, 274, + 437, 621, 622, 272, 684, 237, 654, 228, 0, 653, + 430, 616, 627, 414, 402, 227, 625, 412, 401, 353, + 374, 375, 296, 324, 470, 394, 471, 323, 325, 425, + 424, 426, 215, 640, 658, 0, 216, 0, 524, 643, + 685, 475, 220, 244, 245, 248, 0, 295, 299, 307, + 310, 320, 321, 331, 386, 441, 469, 465, 474, 0, + 610, 634, 648, 660, 666, 667, 669, 670, 671, 672, + 673, 676, 674, 429, 329, 520, 352, 392, 0, 0, + 447, 496, 251, 638, 521, 240, 604, 418, 427, 259, + 261, 260, 235, 512, 609, 246, 266, 207, 0, 0, + 0, 0, 270, 271, 0, 605, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 686, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 681, 537, 543, 538, 539, 540, 541, + 542, 0, 544, 0, 0, 0, 0, 0, 419, 0, + 623, 624, 704, 403, 510, 635, 354, 368, 371, 360, + 380, 0, 381, 356, 357, 362, 365, 366, 367, 372, + 373, 377, 383, 263, 218, 410, 420, 608, 330, 224, + 225, 226, 553, 554, 555, 556, 651, 652, 656, 213, + 486, 487, 488, 489, 308, 646, 326, 492, 491, 350, + 351, 398, 472, 569, 571, 582, 586, 588, 590, 596, + 599, 570, 572, 583, 587, 589, 591, 597, 600, 559, + 561, 563, 565, 578, 577, 574, 602, 603, 580, 585, + 564, 576, 581, 594, 601, 598, 558, 562, 566, 575, + 593, 592, 573, 584, 595, 579, 567, 560, 568, 0, + 204, 229, 387, 0, 478, 304, 682, 650, 508, 645, + 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 206, 208, 217, 230, 242, + 247, 254, 277, 292, 294, 301, 314, 327, 328, 337, + 338, 341, 347, 399, 406, 407, 408, 409, 431, 432, + 433, 436, 439, 440, 443, 445, 446, 449, 454, 458, + 459, 460, 462, 464, 466, 479, 484, 498, 499, 500, + 501, 502, 505, 506, 513, 514, 515, 516, 517, 525, + 526, 531, 532, 533, 534, 545, 618, 620, 637, 657, + 664, 504, 404, 452, 476, 611, 0, 0, 317, 318, + 467, 468, 332, 333, 678, 679, 316, 632, 665, 629, + 677, 659, 461, 397, 0, 0, 400, 297, 322, 339, + 0, 649, 527, 236, 490, 306, 265, 0, 0, 219, + 257, 239, 275, 290, 293, 343, 411, 421, 451, 457, + 312, 287, 255, 483, 252, 509, 548, 549, 550, 552, + 415, 282, 456, 416, 0, 395, 606, 607, 335, 0, + 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, + 0, 0, 286, 0, 0, 0, 0, 385, 283, 0, + 0, 212, 530, 0, 453, 0, 211, 0, 511, 268, + 396, 393, 615, 298, 289, 285, 264, 336, 405, 450, + 547, 444, 0, 389, 0, 0, 522, 422, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 342, 262, 344, 210, + 435, 523, 302, 0, 0, 0, 0, 0, 536, 202, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, + 0, 0, 256, 0, 0, 0, 370, 379, 378, 358, + 359, 361, 363, 369, 376, 382, 355, 364, 0, 0, + 641, 0, 0, 0, 281, 340, 288, 280, 612, 0, + 0, 0, 0, 0, 0, 628, 0, 0, 238, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1506, 0, 313, 0, 423, 273, + 0, 477, 0, 319, 334, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, + 0, 0, 0, 384, 0, 349, 205, 233, 0, 0, + 434, 485, 497, 0, 0, 0, 0, 269, 0, 495, + 448, 636, 243, 300, 482, 455, 493, 463, 303, 0, + 0, 494, 391, 617, 473, 633, 662, 663, 279, 428, + 647, 551, 655, 680, 234, 276, 442, 535, 639, 519, + 417, 613, 614, 348, 518, 311, 209, 388, 668, 232, + 503, 390, 253, 241, 619, 644, 315, 267, 305, 480, + 675, 221, 546, 630, 250, 507, 0, 0, 683, 258, + 529, 642, 631, 223, 626, 528, 413, 345, 346, 222, + 0, 481, 284, 309, 0, 0, 274, 437, 621, 622, + 272, 684, 237, 654, 228, 0, 653, 430, 616, 627, + 414, 402, 227, 625, 412, 401, 353, 374, 375, 296, + 324, 470, 394, 471, 323, 325, 425, 424, 426, 215, + 640, 658, 0, 216, 0, 524, 643, 685, 475, 220, + 244, 245, 248, 0, 295, 299, 307, 310, 320, 321, + 331, 386, 441, 469, 465, 474, 0, 610, 634, 648, + 660, 666, 667, 669, 670, 671, 672, 673, 676, 674, + 429, 329, 520, 352, 392, 0, 0, 447, 496, 251, + 638, 521, 240, 604, 418, 427, 259, 261, 260, 235, + 512, 609, 246, 266, 207, 0, 0, 0, 0, 270, + 271, 0, 605, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 681, 537, 543, 538, 539, 540, 541, 542, 0, 544, + 0, 0, 0, 0, 0, 419, 0, 623, 624, 704, + 403, 510, 635, 354, 368, 371, 360, 380, 0, 381, + 356, 357, 362, 365, 366, 367, 372, 373, 377, 383, + 263, 218, 410, 420, 608, 330, 224, 225, 226, 553, + 554, 555, 556, 651, 652, 656, 213, 486, 487, 488, + 489, 308, 646, 326, 492, 491, 350, 351, 398, 472, + 569, 571, 582, 586, 588, 590, 596, 599, 570, 572, + 583, 587, 589, 591, 597, 600, 559, 561, 563, 565, + 578, 577, 574, 602, 603, 580, 585, 564, 576, 581, + 594, 601, 598, 558, 562, 566, 575, 593, 592, 573, + 584, 595, 579, 567, 560, 568, 0, 204, 229, 387, + 0, 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 300, 0, 407, 260, 0, 460, 0, 0, - 0, 641, 0, 0, 0, 0, 0, 0, 0, 369, - 0, 334, 199, 227, 0, 0, 417, 468, 480, 0, - 0, 0, 256, 0, 478, 431, 616, 235, 287, 465, - 438, 476, 446, 290, 0, 0, 477, 376, 597, 456, - 613, 642, 643, 266, 411, 627, 533, 635, 660, 228, - 263, 425, 517, 619, 501, 402, 593, 594, 333, 500, - 298, 203, 373, 648, 226, 486, 375, 244, 233, 599, - 624, 302, 254, 292, 463, 655, 215, 528, 610, 241, - 490, 0, 0, 663, 249, 511, 622, 611, 217, 606, - 510, 398, 330, 331, 216, 0, 464, 271, 296, 0, - 0, 261, 420, 601, 602, 259, 664, 230, 634, 222, - 0, 633, 413, 596, 607, 399, 387, 221, 605, 397, - 386, 338, 359, 360, 283, 310, 453, 379, 454, 309, - 311, 409, 408, 410, 209, 620, 638, 0, 210, 0, - 506, 623, 665, 458, 214, 236, 237, 239, 0, 282, - 286, 294, 297, 306, 307, 317, 371, 424, 452, 448, - 457, 0, 590, 614, 628, 640, 646, 647, 649, 650, - 651, 652, 653, 656, 654, 412, 315, 502, 337, 377, - 0, 0, 430, 479, 242, 618, 503, 201, 0, 0, - 0, 0, 257, 258, 0, 586, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 666, 667, 668, 669, 670, - 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, - 681, 682, 683, 661, 519, 525, 520, 521, 522, 523, - 524, 0, 526, 0, 0, 0, 0, 0, 403, 0, - 603, 604, 684, 388, 493, 615, 339, 353, 356, 345, - 365, 0, 366, 341, 342, 347, 350, 351, 352, 357, - 358, 362, 368, 251, 212, 395, 404, 589, 316, 218, - 219, 220, 535, 536, 537, 538, 631, 632, 636, 207, - 469, 470, 471, 472, 295, 626, 312, 475, 474, 335, - 336, 383, 455, 551, 553, 564, 568, 570, 572, 578, - 581, 552, 554, 565, 569, 571, 573, 579, 582, 541, - 543, 545, 547, 560, 559, 556, 584, 585, 562, 567, - 546, 558, 563, 576, 583, 580, 540, 544, 548, 557, - 575, 574, 555, 566, 577, 561, 549, 542, 550, 0, - 198, 223, 372, 0, 461, 291, 662, 630, 491, 625, - 208, 225, 0, 265, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 200, 202, 211, 224, 234, - 238, 245, 264, 279, 281, 288, 301, 313, 314, 322, - 323, 326, 332, 384, 391, 392, 393, 394, 414, 415, - 416, 419, 422, 423, 426, 428, 429, 432, 437, 441, - 442, 443, 445, 447, 449, 462, 467, 481, 482, 483, - 484, 485, 488, 489, 495, 496, 497, 498, 499, 507, - 508, 513, 514, 515, 516, 527, 598, 600, 617, 637, - 644, 487, 389, 435, 459, 591, 304, 305, 450, 451, - 318, 319, 658, 659, 303, 612, 645, 609, 657, 639, - 444, 382, 0, 0, 385, 284, 308, 324, 0, 629, - 509, 229, 473, 293, 253, 0, 0, 213, 248, 232, - 262, 277, 280, 328, 396, 405, 434, 440, 299, 274, - 246, 466, 243, 492, 530, 531, 532, 534, 400, 269, - 439, 401, 0, 380, 587, 588, 320, 0, 0, 0, - 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, - 273, 0, 0, 0, 0, 370, 270, 0, 0, 206, - 512, 0, 436, 0, 205, 0, 494, 255, 381, 378, - 595, 285, 276, 272, 252, 321, 390, 433, 529, 427, - 0, 374, 0, 0, 504, 406, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 327, 250, 329, 204, 418, 505, - 289, 0, 0, 0, 0, 0, 518, 196, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, - 247, 0, 0, 0, 355, 364, 363, 343, 344, 346, - 348, 354, 361, 367, 340, 349, 0, 0, 621, 0, - 0, 0, 268, 325, 275, 267, 592, 0, 0, 0, - 0, 0, 0, 608, 0, 0, 231, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 206, 208, 217, 230, 242, 247, 254, 277, + 292, 294, 301, 314, 327, 328, 337, 338, 341, 347, + 399, 406, 407, 408, 409, 431, 432, 433, 436, 439, + 440, 443, 445, 446, 449, 454, 458, 459, 460, 462, + 464, 466, 479, 484, 498, 499, 500, 501, 502, 505, + 506, 513, 514, 515, 516, 517, 525, 526, 531, 532, + 533, 534, 545, 618, 620, 637, 657, 664, 504, 404, + 452, 476, 611, 0, 0, 317, 318, 467, 468, 332, + 333, 678, 679, 1505, 632, 665, 629, 677, 659, 461, + 397, 0, 0, 400, 297, 322, 339, 0, 649, 527, + 236, 490, 306, 265, 0, 0, 219, 257, 239, 275, + 290, 293, 343, 411, 421, 451, 457, 312, 287, 255, + 483, 252, 509, 548, 549, 550, 552, 415, 282, 456, + 416, 0, 395, 606, 607, 335, 0, 0, 0, 557, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 438, 0, 0, 0, 0, 0, 0, 0, 286, + 0, 0, 0, 0, 385, 283, 0, 0, 212, 530, + 0, 453, 0, 211, 0, 511, 268, 396, 393, 615, + 298, 289, 285, 264, 336, 405, 450, 547, 444, 0, + 389, 0, 0, 522, 422, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 342, 262, 344, 210, 435, 523, 302, + 0, 0, 0, 0, 0, 536, 202, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 249, 0, 0, 256, + 0, 0, 0, 370, 379, 378, 358, 359, 361, 363, + 369, 376, 382, 355, 364, 0, 0, 641, 0, 0, + 0, 281, 340, 288, 280, 612, 0, 0, 0, 0, + 0, 0, 628, 0, 0, 238, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 313, 0, 423, 273, 0, 477, 0, + 319, 334, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, + 384, 0, 349, 205, 233, 0, 0, 434, 485, 497, + 0, 0, 0, 0, 269, 0, 495, 448, 636, 243, + 300, 482, 455, 493, 463, 303, 0, 0, 494, 391, + 617, 473, 633, 662, 663, 279, 428, 647, 551, 655, + 680, 234, 276, 442, 535, 639, 519, 417, 613, 614, + 348, 518, 311, 209, 388, 668, 232, 503, 390, 253, + 241, 619, 644, 315, 267, 305, 480, 675, 221, 546, + 630, 250, 507, 0, 0, 683, 258, 529, 642, 631, + 223, 626, 528, 413, 345, 346, 222, 0, 481, 284, + 309, 0, 0, 274, 437, 621, 622, 272, 684, 237, + 654, 228, 0, 653, 430, 616, 627, 414, 402, 227, + 625, 412, 401, 353, 374, 375, 296, 324, 470, 394, + 471, 323, 325, 425, 424, 426, 215, 640, 658, 0, + 216, 0, 524, 643, 685, 475, 220, 244, 245, 248, + 0, 295, 299, 307, 310, 320, 321, 331, 386, 441, + 469, 465, 474, 0, 610, 634, 648, 660, 666, 667, + 669, 670, 671, 672, 673, 676, 674, 429, 329, 520, + 352, 392, 0, 0, 447, 496, 251, 638, 521, 240, + 604, 418, 427, 259, 261, 260, 235, 512, 609, 246, + 266, 207, 0, 0, 0, 0, 270, 271, 0, 605, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, + 697, 698, 699, 700, 701, 702, 703, 681, 537, 543, + 538, 539, 540, 541, 542, 0, 544, 0, 0, 0, + 0, 0, 419, 0, 623, 624, 704, 403, 510, 635, + 354, 368, 371, 360, 380, 0, 381, 356, 357, 362, + 365, 366, 367, 372, 373, 377, 383, 263, 218, 410, + 420, 608, 330, 224, 225, 226, 553, 554, 555, 556, + 651, 652, 656, 213, 486, 487, 488, 489, 308, 646, + 326, 492, 491, 350, 351, 398, 472, 569, 571, 582, + 586, 588, 590, 596, 599, 570, 572, 583, 587, 589, + 591, 597, 600, 559, 561, 563, 565, 578, 577, 574, + 602, 603, 580, 585, 564, 576, 581, 594, 601, 598, + 558, 562, 566, 575, 593, 592, 573, 584, 595, 579, + 567, 560, 568, 0, 204, 229, 387, 0, 478, 304, + 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1084, 0, 0, 0, 206, + 208, 217, 230, 242, 247, 254, 277, 292, 294, 301, + 314, 327, 328, 337, 338, 341, 347, 399, 406, 407, + 408, 409, 431, 432, 433, 436, 439, 440, 443, 445, + 446, 449, 454, 458, 459, 460, 462, 464, 466, 479, + 484, 498, 499, 500, 501, 502, 505, 506, 513, 514, + 515, 516, 517, 525, 526, 531, 532, 533, 534, 545, + 618, 620, 637, 657, 664, 504, 404, 452, 476, 611, + 0, 0, 317, 318, 467, 468, 332, 333, 678, 679, + 316, 632, 665, 629, 677, 659, 461, 397, 0, 0, + 400, 297, 322, 339, 0, 649, 527, 236, 490, 306, + 265, 0, 0, 219, 257, 239, 275, 290, 293, 343, + 411, 421, 451, 457, 312, 287, 255, 483, 252, 509, + 548, 549, 550, 552, 415, 282, 456, 416, 0, 395, + 606, 607, 335, 0, 0, 0, 557, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, + 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, + 0, 385, 283, 0, 0, 212, 530, 0, 453, 0, + 211, 0, 511, 268, 396, 393, 615, 298, 289, 285, + 264, 336, 405, 450, 547, 444, 0, 389, 0, 0, + 522, 422, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 342, 262, 344, 210, 435, 523, 302, 0, 0, 0, + 0, 0, 536, 202, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 249, 0, 0, 256, 0, 0, 0, + 370, 379, 378, 358, 359, 361, 363, 369, 376, 382, + 355, 364, 0, 0, 641, 0, 0, 0, 281, 340, + 288, 280, 612, 0, 0, 0, 0, 0, 0, 628, + 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 0, 423, 273, 0, 477, 0, 319, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 707, 0, 661, + 0, 0, 0, 0, 0, 0, 0, 384, 0, 349, + 205, 233, 0, 0, 434, 485, 497, 0, 0, 0, + 0, 269, 0, 495, 448, 636, 243, 300, 482, 455, + 493, 463, 303, 0, 0, 494, 391, 617, 473, 633, + 662, 663, 279, 428, 647, 551, 655, 680, 234, 276, + 442, 535, 639, 519, 417, 613, 614, 348, 518, 311, + 209, 388, 668, 232, 503, 390, 253, 241, 619, 644, + 315, 267, 305, 480, 675, 221, 546, 630, 250, 507, + 0, 0, 683, 258, 529, 642, 631, 223, 626, 528, + 413, 345, 346, 222, 0, 481, 284, 309, 0, 0, + 274, 437, 621, 622, 272, 684, 237, 654, 228, 0, + 653, 430, 616, 627, 414, 402, 227, 625, 412, 401, + 353, 374, 375, 296, 324, 470, 394, 471, 323, 325, + 425, 424, 426, 215, 640, 658, 0, 216, 0, 524, + 643, 685, 475, 220, 244, 245, 248, 0, 295, 299, + 307, 310, 320, 321, 331, 386, 441, 469, 465, 474, + 0, 610, 634, 648, 660, 666, 667, 669, 670, 671, + 672, 673, 676, 674, 429, 329, 520, 352, 392, 0, + 0, 447, 496, 251, 638, 521, 240, 604, 418, 427, + 259, 261, 260, 235, 512, 609, 246, 266, 207, 0, + 0, 0, 0, 270, 271, 0, 605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 681, 537, 543, 538, 539, 540, + 541, 542, 0, 544, 0, 0, 0, 0, 0, 419, + 0, 623, 624, 704, 403, 510, 635, 354, 368, 371, + 360, 380, 0, 381, 356, 357, 362, 365, 366, 367, + 372, 373, 377, 383, 263, 218, 410, 420, 608, 330, + 224, 225, 226, 553, 554, 555, 556, 651, 652, 656, + 213, 486, 487, 488, 489, 308, 646, 326, 492, 491, + 350, 351, 398, 472, 569, 571, 582, 586, 588, 590, + 596, 599, 570, 572, 583, 587, 589, 591, 597, 600, + 559, 561, 563, 565, 578, 577, 574, 602, 603, 580, + 585, 564, 576, 581, 594, 601, 598, 558, 562, 566, + 575, 593, 592, 573, 584, 595, 579, 567, 560, 568, + 0, 204, 229, 387, 0, 478, 304, 682, 650, 508, + 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 208, 217, 230, + 242, 247, 254, 277, 292, 294, 301, 314, 327, 328, + 337, 338, 341, 347, 399, 406, 407, 408, 409, 431, + 432, 433, 436, 439, 440, 443, 445, 446, 449, 454, + 458, 459, 460, 462, 464, 466, 479, 484, 498, 499, + 500, 501, 502, 505, 506, 513, 514, 515, 516, 517, + 525, 526, 531, 532, 533, 534, 545, 618, 620, 637, + 657, 664, 504, 404, 452, 476, 611, 0, 0, 317, + 318, 467, 468, 332, 333, 678, 679, 316, 632, 665, + 629, 677, 659, 461, 397, 0, 0, 400, 297, 322, + 339, 0, 649, 527, 236, 490, 306, 265, 0, 0, + 219, 257, 239, 275, 290, 293, 343, 411, 421, 451, + 457, 312, 287, 255, 483, 252, 509, 548, 549, 550, + 552, 415, 282, 456, 416, 0, 395, 606, 607, 335, + 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, + 0, 0, 0, 286, 0, 0, 0, 0, 385, 283, + 0, 0, 212, 530, 0, 453, 0, 211, 0, 511, + 268, 396, 393, 615, 298, 289, 285, 264, 336, 405, + 450, 547, 444, 0, 389, 0, 0, 522, 422, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 342, 262, 344, + 210, 435, 523, 302, 0, 0, 0, 0, 0, 536, + 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 249, 0, 0, 256, 0, 0, 0, 370, 379, 378, + 358, 359, 361, 363, 369, 376, 382, 355, 364, 0, + 0, 641, 0, 0, 0, 281, 340, 288, 280, 612, + 0, 0, 0, 0, 0, 0, 628, 0, 0, 238, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 313, 0, 423, + 273, 0, 477, 0, 319, 334, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, + 0, 0, 0, 0, 384, 0, 349, 205, 233, 0, + 0, 434, 485, 497, 0, 0, 0, 0, 269, 0, + 495, 448, 636, 243, 300, 482, 455, 493, 463, 303, + 0, 0, 494, 391, 617, 473, 633, 662, 663, 279, + 428, 647, 551, 655, 680, 234, 276, 442, 535, 639, + 519, 417, 613, 614, 348, 518, 311, 209, 388, 668, + 232, 503, 390, 253, 241, 619, 644, 315, 267, 305, + 480, 675, 221, 546, 630, 250, 507, 0, 0, 683, + 258, 529, 642, 631, 223, 626, 528, 413, 345, 346, + 222, 0, 481, 284, 309, 0, 0, 274, 437, 621, + 622, 272, 684, 237, 654, 228, 0, 653, 430, 616, + 627, 414, 402, 227, 625, 412, 401, 353, 374, 375, + 296, 324, 470, 394, 471, 323, 325, 425, 424, 426, + 215, 640, 658, 0, 216, 0, 524, 643, 685, 475, + 220, 244, 245, 248, 0, 295, 299, 307, 310, 320, + 321, 331, 386, 441, 469, 465, 474, 0, 610, 634, + 648, 660, 666, 667, 669, 670, 671, 672, 673, 676, + 674, 429, 329, 520, 352, 392, 0, 0, 447, 496, + 251, 638, 521, 240, 604, 418, 427, 259, 261, 260, + 235, 512, 609, 246, 266, 207, 0, 0, 0, 0, + 270, 271, 0, 605, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 681, 537, 543, 538, 539, 540, 541, 542, 0, + 544, 0, 0, 0, 0, 0, 419, 0, 623, 624, + 704, 403, 510, 635, 354, 368, 371, 360, 380, 0, + 381, 356, 357, 362, 365, 366, 367, 372, 373, 377, + 383, 263, 218, 410, 420, 608, 330, 224, 225, 226, + 553, 554, 555, 556, 651, 652, 656, 213, 486, 487, + 488, 489, 308, 646, 326, 492, 491, 350, 351, 398, + 472, 569, 571, 582, 586, 588, 590, 596, 599, 570, + 572, 583, 587, 589, 591, 597, 600, 559, 561, 563, + 565, 578, 577, 574, 602, 603, 580, 585, 564, 576, + 581, 594, 601, 598, 558, 562, 566, 575, 593, 592, + 573, 584, 595, 579, 567, 560, 568, 0, 204, 229, + 387, 0, 478, 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 300, 0, 407, 260, 0, 460, 0, - 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, - 369, 0, 334, 199, 227, 0, 0, 417, 468, 480, - 0, 0, 0, 256, 0, 478, 431, 616, 235, 287, - 465, 438, 476, 446, 290, 0, 0, 477, 376, 597, - 456, 613, 642, 643, 266, 411, 627, 533, 635, 660, - 228, 263, 425, 517, 619, 501, 402, 593, 594, 333, - 500, 298, 203, 373, 648, 226, 486, 375, 244, 233, - 599, 624, 302, 254, 292, 463, 655, 215, 528, 610, - 241, 490, 0, 0, 663, 249, 511, 622, 611, 217, - 606, 510, 398, 330, 331, 216, 0, 464, 271, 296, - 0, 0, 261, 420, 601, 602, 259, 664, 230, 634, - 222, 0, 633, 413, 596, 607, 399, 387, 221, 605, - 397, 386, 338, 359, 360, 283, 310, 453, 379, 454, - 309, 311, 409, 408, 410, 209, 620, 638, 0, 210, - 0, 506, 623, 665, 458, 214, 236, 237, 239, 0, - 282, 286, 294, 297, 306, 307, 317, 371, 424, 452, - 448, 457, 0, 590, 614, 628, 640, 646, 647, 649, - 650, 651, 652, 653, 656, 654, 412, 315, 502, 337, - 377, 0, 0, 430, 479, 242, 618, 503, 201, 0, - 0, 0, 0, 257, 258, 0, 586, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 666, 667, 668, 669, - 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, - 680, 681, 682, 683, 661, 519, 525, 520, 521, 522, - 523, 524, 0, 526, 0, 0, 0, 0, 0, 403, - 0, 603, 604, 684, 388, 493, 615, 339, 353, 356, - 345, 365, 0, 366, 341, 342, 347, 350, 351, 352, - 357, 358, 362, 368, 251, 212, 395, 404, 589, 316, - 218, 219, 220, 535, 536, 537, 538, 631, 632, 636, - 207, 469, 470, 471, 472, 295, 626, 312, 475, 474, - 335, 336, 383, 455, 551, 553, 564, 568, 570, 572, - 578, 581, 552, 554, 565, 569, 571, 573, 579, 582, - 541, 543, 545, 547, 560, 559, 556, 584, 585, 562, - 567, 546, 558, 563, 576, 583, 580, 540, 544, 548, - 557, 575, 574, 555, 566, 577, 561, 549, 542, 550, - 0, 198, 223, 372, 0, 461, 291, 662, 630, 491, - 625, 208, 225, 0, 265, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 200, 202, 211, 224, - 234, 238, 245, 264, 279, 281, 288, 301, 313, 314, - 322, 323, 326, 332, 384, 391, 392, 393, 394, 414, - 415, 416, 419, 422, 423, 426, 428, 429, 432, 437, - 441, 442, 443, 445, 447, 449, 462, 467, 481, 482, - 483, 484, 485, 488, 489, 495, 496, 497, 498, 499, - 507, 508, 513, 514, 515, 516, 527, 598, 600, 617, - 637, 644, 487, 389, 435, 459, 591, 304, 305, 450, - 451, 318, 319, 658, 659, 303, 612, 645, 609, 657, - 639, 444, 382, 0, 0, 385, 284, 308, 324, 0, - 629, 509, 229, 473, 293, 253, 0, 0, 213, 248, - 232, 262, 277, 280, 328, 396, 405, 434, 440, 299, - 274, 246, 466, 243, 492, 530, 531, 532, 534, 400, - 269, 439, 0, 0, 380, 587, 588, 320, + 0, 0, 0, 206, 208, 217, 230, 242, 247, 254, + 277, 292, 294, 301, 314, 327, 328, 337, 338, 341, + 347, 399, 406, 407, 408, 409, 4264, 432, 433, 436, + 439, 440, 443, 445, 446, 449, 454, 458, 459, 460, + 462, 464, 466, 479, 484, 498, 499, 500, 501, 502, + 505, 506, 513, 514, 515, 516, 517, 525, 526, 531, + 532, 533, 534, 545, 618, 620, 637, 657, 664, 504, + 404, 452, 476, 611, 0, 0, 317, 318, 467, 468, + 332, 333, 678, 679, 316, 632, 665, 629, 677, 659, + 461, 397, 0, 0, 400, 297, 322, 339, 0, 649, + 527, 236, 490, 306, 265, 0, 0, 219, 257, 239, + 275, 290, 293, 343, 411, 421, 451, 457, 312, 287, + 255, 483, 252, 509, 548, 549, 550, 552, 415, 282, + 456, 416, 0, 395, 606, 607, 335, 0, 0, 0, + 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, + 286, 0, 0, 0, 0, 385, 283, 0, 0, 212, + 530, 0, 453, 0, 211, 0, 511, 268, 396, 393, + 615, 298, 289, 285, 264, 336, 405, 450, 547, 444, + 0, 389, 0, 0, 522, 422, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 342, 262, 344, 210, 435, 523, + 302, 0, 0, 0, 0, 0, 536, 756, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, + 256, 0, 0, 0, 370, 379, 378, 358, 359, 361, + 363, 369, 376, 382, 355, 364, 0, 0, 641, 0, + 0, 0, 281, 340, 288, 280, 612, 0, 0, 0, + 0, 0, 0, 628, 0, 0, 238, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 313, 0, 423, 273, 0, 477, + 0, 319, 334, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, + 0, 384, 0, 349, 205, 233, 0, 0, 434, 485, + 497, 0, 0, 0, 0, 269, 0, 495, 448, 636, + 243, 300, 482, 455, 493, 463, 303, 0, 0, 494, + 391, 617, 473, 633, 662, 663, 279, 428, 647, 551, + 655, 680, 234, 276, 442, 535, 639, 519, 417, 613, + 614, 348, 518, 311, 209, 388, 668, 232, 503, 390, + 253, 241, 619, 644, 315, 267, 305, 480, 675, 221, + 546, 630, 250, 507, 0, 0, 683, 258, 529, 642, + 631, 223, 626, 528, 413, 345, 346, 222, 0, 481, + 284, 309, 0, 0, 274, 437, 621, 622, 272, 684, + 237, 654, 228, 0, 653, 430, 616, 627, 414, 402, + 227, 625, 412, 401, 353, 374, 375, 296, 324, 470, + 394, 471, 323, 325, 425, 424, 426, 215, 640, 658, + 0, 216, 0, 524, 643, 685, 475, 220, 244, 245, + 248, 0, 295, 299, 307, 310, 320, 321, 331, 386, + 441, 469, 465, 474, 0, 610, 634, 648, 660, 666, + 667, 669, 670, 671, 672, 673, 676, 674, 429, 329, + 520, 352, 392, 0, 0, 447, 496, 251, 638, 521, + 240, 604, 418, 427, 259, 261, 260, 235, 512, 609, + 246, 266, 207, 0, 0, 0, 0, 270, 271, 0, + 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, + 696, 697, 698, 699, 700, 701, 702, 703, 681, 537, + 543, 538, 539, 540, 541, 542, 0, 544, 0, 0, + 0, 0, 0, 419, 0, 623, 624, 704, 403, 510, + 635, 354, 368, 371, 360, 380, 0, 381, 356, 357, + 362, 365, 366, 367, 372, 373, 377, 383, 263, 218, + 410, 420, 608, 330, 224, 225, 226, 553, 554, 555, + 556, 651, 652, 656, 213, 486, 487, 488, 489, 308, + 646, 326, 492, 491, 350, 351, 398, 472, 569, 571, + 582, 586, 588, 590, 596, 599, 570, 572, 583, 587, + 589, 591, 597, 600, 559, 561, 563, 565, 578, 577, + 574, 602, 603, 580, 585, 564, 576, 581, 594, 601, + 598, 558, 562, 566, 575, 593, 592, 573, 584, 595, + 579, 567, 560, 568, 0, 204, 229, 387, 0, 478, + 304, 682, 650, 508, 645, 214, 231, 0, 278, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 206, 208, 217, 230, 242, 247, 254, 277, 292, 294, + 301, 314, 327, 328, 337, 338, 341, 347, 399, 406, + 407, 408, 409, 431, 432, 433, 436, 439, 440, 443, + 445, 446, 449, 454, 458, 459, 460, 462, 464, 466, + 479, 484, 498, 499, 500, 501, 502, 505, 506, 513, + 514, 515, 516, 517, 525, 526, 531, 532, 533, 534, + 545, 618, 620, 637, 657, 664, 504, 404, 452, 476, + 611, 0, 0, 317, 318, 467, 468, 332, 333, 678, + 679, 316, 632, 665, 629, 677, 659, 461, 397, 0, + 0, 400, 297, 322, 339, 0, 649, 527, 236, 490, + 306, 265, 0, 0, 219, 257, 239, 275, 290, 293, + 343, 411, 421, 451, 457, 312, 287, 255, 483, 252, + 509, 548, 549, 550, 552, 415, 282, 456, 416, 0, + 395, 606, 607, 335, 0, 0, 0, 557, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, + 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, + 0, 0, 385, 283, 0, 0, 212, 530, 0, 453, + 0, 211, 0, 511, 268, 396, 393, 615, 298, 289, + 285, 264, 336, 405, 450, 547, 444, 0, 389, 0, + 0, 522, 422, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 342, 262, 344, 210, 435, 523, 302, 0, 0, + 0, 0, 0, 536, 991, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 249, 0, 0, 256, 0, 0, + 0, 370, 379, 378, 358, 359, 361, 363, 369, 376, + 382, 355, 364, 0, 0, 641, 0, 0, 0, 281, + 340, 288, 280, 612, 0, 0, 0, 0, 0, 0, + 628, 0, 0, 238, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 313, 0, 423, 273, 0, 477, 0, 319, 334, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 661, 0, 0, 0, 0, 0, 0, 0, 384, 0, + 349, 205, 233, 0, 0, 434, 485, 497, 0, 0, + 0, 0, 269, 0, 495, 448, 636, 243, 300, 482, + 455, 493, 463, 303, 0, 0, 494, 391, 617, 473, + 633, 662, 663, 279, 428, 647, 551, 655, 680, 234, + 276, 442, 535, 639, 519, 417, 613, 614, 348, 518, + 311, 209, 388, 668, 232, 503, 390, 253, 241, 619, + 644, 315, 267, 305, 480, 675, 221, 546, 630, 250, + 507, 0, 0, 683, 258, 529, 642, 631, 223, 626, + 528, 413, 345, 346, 222, 0, 481, 284, 309, 0, + 0, 274, 437, 621, 622, 272, 684, 237, 654, 228, + 0, 653, 430, 616, 627, 414, 402, 227, 625, 412, + 401, 353, 374, 375, 296, 324, 470, 394, 471, 323, + 325, 425, 424, 426, 215, 640, 658, 0, 216, 0, + 524, 643, 685, 475, 220, 244, 245, 248, 0, 295, + 299, 307, 310, 320, 321, 331, 386, 441, 469, 465, + 474, 0, 610, 634, 648, 660, 666, 667, 669, 670, + 671, 672, 673, 676, 674, 429, 329, 520, 352, 392, + 0, 0, 447, 496, 251, 638, 521, 240, 604, 418, + 427, 259, 261, 260, 235, 512, 609, 246, 266, 207, + 0, 0, 0, 0, 270, 271, 0, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, + 699, 700, 701, 702, 703, 681, 537, 543, 538, 539, + 540, 541, 542, 0, 544, 0, 0, 0, 0, 0, + 419, 0, 623, 624, 704, 403, 510, 635, 354, 368, + 371, 360, 380, 0, 381, 356, 357, 362, 365, 366, + 367, 372, 373, 377, 383, 263, 218, 410, 420, 608, + 330, 224, 225, 226, 553, 554, 555, 556, 651, 652, + 656, 213, 486, 487, 488, 489, 308, 646, 326, 492, + 491, 350, 351, 398, 472, 569, 571, 582, 586, 588, + 590, 596, 599, 570, 572, 583, 587, 589, 591, 597, + 600, 559, 561, 563, 565, 578, 577, 574, 602, 603, + 580, 585, 564, 576, 581, 594, 601, 598, 558, 562, + 566, 575, 593, 592, 573, 584, 595, 579, 567, 560, + 568, 0, 204, 229, 387, 0, 478, 304, 682, 650, + 508, 645, 214, 231, 0, 278, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 208, 217, + 230, 242, 247, 254, 277, 292, 294, 301, 314, 327, + 328, 337, 338, 341, 347, 399, 406, 407, 408, 409, + 431, 432, 433, 436, 439, 440, 443, 445, 446, 449, + 454, 458, 459, 460, 462, 464, 466, 479, 484, 498, + 499, 500, 501, 502, 505, 506, 513, 514, 515, 516, + 517, 525, 526, 531, 532, 533, 534, 545, 618, 620, + 637, 657, 664, 504, 404, 452, 476, 611, 0, 0, + 317, 318, 467, 468, 332, 333, 678, 679, 316, 632, + 665, 629, 677, 659, 461, 397, 0, 0, 400, 297, + 322, 339, 0, 649, 527, 236, 490, 306, 265, 0, + 0, 219, 257, 239, 275, 290, 293, 343, 411, 421, + 451, 457, 312, 287, 255, 483, 252, 509, 548, 549, + 550, 552, 415, 282, 456, 416, 0, 395, 606, 607, + 335, 0, 0, 0, 557, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 0, 0, 0, 286, 0, 0, 0, 0, 385, + 283, 0, 0, 212, 530, 0, 453, 0, 211, 0, + 511, 268, 396, 393, 615, 298, 289, 285, 264, 336, + 405, 450, 547, 444, 0, 389, 0, 0, 522, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 342, 262, + 344, 210, 435, 523, 302, 0, 0, 0, 0, 0, + 536, 202, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 0, 0, 256, 0, 0, 0, 370, 379, + 378, 358, 359, 361, 363, 369, 376, 382, 355, 364, + 0, 0, 641, 0, 0, 0, 281, 340, 288, 280, + 612, 0, 0, 0, 0, 0, 0, 628, 0, 0, + 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, + 423, 273, 0, 477, 0, 319, 334, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, + 0, 0, 0, 0, 0, 384, 0, 349, 205, 233, + 0, 0, 434, 485, 497, 0, 0, 0, 0, 269, + 0, 495, 448, 636, 243, 300, 482, 455, 493, 463, + 303, 0, 0, 494, 391, 617, 473, 633, 662, 663, + 279, 428, 647, 551, 655, 680, 234, 276, 442, 535, + 639, 519, 417, 613, 614, 348, 518, 311, 209, 388, + 668, 232, 503, 390, 253, 241, 619, 644, 315, 267, + 305, 480, 675, 221, 546, 630, 250, 507, 0, 0, + 683, 258, 529, 642, 631, 223, 626, 528, 413, 345, + 346, 222, 0, 481, 284, 309, 0, 0, 274, 437, + 621, 622, 272, 684, 237, 654, 228, 0, 653, 430, + 616, 627, 414, 402, 227, 625, 412, 401, 353, 374, + 375, 296, 324, 470, 394, 471, 323, 325, 425, 424, + 426, 215, 640, 658, 0, 216, 0, 524, 643, 685, + 475, 220, 244, 245, 248, 0, 295, 299, 307, 310, + 320, 321, 331, 386, 441, 469, 465, 474, 0, 610, + 634, 648, 660, 666, 667, 669, 670, 671, 672, 673, + 676, 674, 429, 329, 520, 352, 392, 0, 0, 447, + 496, 251, 638, 521, 240, 604, 418, 427, 259, 261, + 260, 235, 512, 609, 246, 266, 207, 0, 0, 0, + 0, 270, 271, 0, 605, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 686, 687, 688, 689, 690, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 681, 537, 543, 538, 539, 540, 541, 542, + 0, 544, 0, 0, 0, 0, 0, 419, 0, 623, + 624, 704, 403, 510, 635, 354, 368, 371, 360, 380, + 0, 381, 356, 357, 362, 365, 366, 367, 372, 373, + 377, 383, 263, 218, 410, 420, 608, 330, 224, 225, + 226, 553, 554, 555, 556, 651, 652, 656, 213, 486, + 487, 488, 489, 308, 646, 326, 492, 491, 350, 351, + 398, 472, 569, 571, 582, 586, 588, 590, 596, 599, + 570, 572, 583, 587, 589, 591, 597, 600, 559, 561, + 563, 565, 578, 577, 574, 602, 603, 580, 585, 564, + 576, 581, 594, 601, 598, 558, 562, 566, 575, 593, + 592, 573, 584, 595, 579, 567, 560, 568, 0, 204, + 229, 387, 0, 478, 304, 682, 650, 508, 645, 214, + 231, 0, 278, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 206, 208, 217, 230, 242, 247, + 254, 277, 292, 294, 301, 314, 327, 328, 337, 338, + 341, 347, 399, 406, 407, 408, 409, 431, 432, 433, + 436, 439, 440, 443, 445, 446, 449, 454, 458, 459, + 460, 462, 464, 466, 479, 484, 498, 499, 500, 501, + 502, 505, 506, 513, 514, 515, 516, 517, 525, 526, + 531, 532, 533, 534, 545, 618, 620, 637, 657, 664, + 504, 404, 452, 476, 611, 0, 0, 317, 318, 467, + 468, 332, 333, 678, 679, 316, 632, 665, 629, 677, + 659, 461, 397, 0, 0, 400, 297, 322, 339, 0, + 649, 527, 236, 490, 306, 265, 0, 0, 219, 257, + 239, 275, 290, 293, 343, 411, 421, 451, 457, 312, + 287, 255, 483, 252, 509, 548, 549, 550, 552, 415, + 282, 456, 0, 0, 395, 606, 607, 335, } var yyPact = [...]int{ - -1000, -1000, 1103, -1000, -560, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -559, -1000, 7661, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 2557, 2573, -1000, -1000, -1000, + -1000, 2702, -1000, 1089, -1000, 2209, 2136, 2511, 4468, -1000, + 62201, 817, -1000, 59093, -426, 964, 288, 41222, -1000, 235, + -1000, 217, 60647, 231, -1000, -1000, -1000, -1000, -426, 24905, + 2423, 52, 50, 62201, -1000, -1000, -1000, -1000, -344, 2660, + 2068, -1000, 473, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 58316, -1000, -1000, -1000, 1208, -1000, 2515, 2494, 2371, 1005, + 1545, -1000, 2596, 2068, -1000, 24905, 2649, 2473, 24128, 24128, + 501, -1000, -1000, 321, -1000, -1000, 35783, 62201, 45107, 2574, + 60647, -1000, 2511, -1000, -1000, -1000, 194, -1000, 359, 2102, + -1000, 2098, -1000, 1262, 945, 441, 861, 855, 440, 439, + 438, 437, 436, 434, 433, 431, 447, -1000, 1045, 1045, + -218, -231, 1452, 502, 486, 486, 1164, 534, 2481, 2480, + -1000, -1000, 1045, 1045, 1045, 415, 1045, 1045, 1045, 1045, + 344, 337, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 908, + 2511, 315, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 2513, 2578, -1000, -1000, -1000, -1000, 2711, -1000, 991, - 2175, -1000, 2517, 4229, -1000, 56057, 498, -1000, 53053, -463, - 868, 282, 36531, -1000, 246, -1000, 217, 54555, 239, -1000, - -1000, -1000, -1000, -463, 22262, 2421, 38, 36, 56057, -1000, - -1000, -1000, -1000, -377, 2643, 2223, -1000, 525, -1000, -1000, - -1000, -1000, -1000, -1000, 52302, -1000, -1000, -1000, 1181, -1000, - -1000, 2521, 2520, 2414, 899, 2395, -1000, 2593, 2223, -1000, - 22262, 2637, 2494, 21511, 21511, 465, -1000, -1000, 304, -1000, - -1000, 31274, 56057, 39535, 849, -1000, 2517, -1000, -1000, -1000, - 188, -1000, 378, 2063, -1000, 2060, -1000, 1188, 1042, 392, - 847, 787, 391, 390, 389, 388, 387, 383, 381, 380, - 407, -1000, 922, 922, -231, -232, 4411, 466, 457, 457, - 1078, 483, 2489, 2459, -1000, -1000, 922, 922, 922, 412, - 922, 922, 922, 922, 344, 343, 922, 922, 922, 922, - 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, - 922, 922, 922, 915, 2517, 324, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -7467,71 +8170,71 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 62201, 311, 62201, -1000, 917, + 816, -1000, -1000, -437, 1171, 1171, 128, 1171, 1171, 1171, + 1171, 233, 993, 43, -1000, 226, 312, 164, 323, 1187, + 178, -1000, -1000, 314, 1187, 1923, -1000, 1013, 318, 229, + -1000, 1171, 1171, -1000, 17111, 225, 17111, 17111, 316, 207, + -1000, 2504, -1000, -1000, -1000, -1000, -1000, 1460, -1000, -1000, + -1000, -1000, -16, 529, -1000, -1000, -1000, -1000, 60647, 57539, + 320, -1000, -1000, 276, 1983, 1576, 24905, 1328, 997, -1000, + -1000, 1433, 966, -1000, -1000, -1000, -1000, -1000, 880, -1000, + 27236, 27236, 27236, 27236, -1000, -1000, 1909, 56762, 1909, 1909, + 27236, 1909, 27236, 1909, 1909, 1909, 1909, 24905, 1909, 1909, + 1909, 1909, -1000, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, -1000, -1000, -1000, -1000, 1909, 914, 1909, 1909, + 1909, 1909, 1909, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 1909, 1909, 1909, 1909, 1909, 1909, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, -1000, + -1000, -1000, 1794, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 1440, 1657, 1607, 1591, -1000, 21797, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 56057, 316, 56057, -1000, 823, - 497, -1000, -1000, -467, 1065, 1065, 59, 1065, 1065, 1065, - 1065, 230, 969, 35, -1000, 228, 330, 148, 317, 1060, - 173, -1000, -1000, 308, 1060, 1839, -1000, 904, 315, 163, - -1000, 1065, 1065, -1000, 14728, 222, 14728, 14728, 313, 208, - -1000, 2512, -1000, -1000, -1000, -1000, -1000, 1307, -1000, -1000, - -1000, -1000, -33, 476, -1000, -1000, -1000, -1000, 54555, 51551, - 220, -1000, -1000, 34, 1923, 1624, 22262, 1555, 897, -1000, - -1000, 1438, 873, -1000, -1000, -1000, -1000, -1000, 819, -1000, - 24515, 24515, 24515, 24515, -1000, -1000, 2065, 50800, 2065, 2065, - 24515, 2065, 24515, 2065, 2065, 2065, 2065, 22262, 2065, 2065, - 2065, 2065, -1000, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, -1000, -1000, -1000, -1000, 2065, 815, 2065, 2065, - 2065, 2065, 2065, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 2065, 2065, 2065, 2065, 2065, 2065, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, -1000, - -1000, -1000, 1680, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1703, 1574, 1559, 1556, -1000, 19258, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 1909, -1000, -1000, -1000, + 62201, -1000, 1909, 267, 60647, 60647, 416, 1444, -1000, -1000, + 2596, 2068, -1000, 2660, 2652, 473, -1000, 3979, 1717, 1730, + 1675, 2068, 971, 2077, 62201, -1000, 2136, 191, -1000, -1000, + -1000, -354, -357, 2322, 1528, 1914, 2097, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 2773, 24905, -1000, -1000, 2694, + -1000, 32675, 912, 2690, 55985, -1000, 501, 501, 2094, 649, + 14, -1000, -1000, -1000, -1000, 1062, 40445, -1000, -1000, -1000, + -1000, -1000, 1933, 62201, -1000, -1000, 4545, 60647, -1000, 2206, + -1000, 1931, -1000, 2161, 24905, 473, 1919, -1000, -1000, -1000, + -1000, 1045, 1045, 1045, -1000, 420, 2647, 4468, 5927, -1000, + -1000, -1000, 55208, 2202, 60647, -1000, 2198, -1000, 1135, 906, + 913, 913, 60647, -1000, -1000, 61424, 60647, 1132, 1130, 60647, + 60647, 60647, 60647, -1000, 54431, -1000, 53654, 52877, 1442, 60647, + 52100, 51323, 50546, 49769, 48992, -1000, 2390, -1000, 2207, -1000, + -1000, -1000, 61424, 60647, 60647, 61424, 60647, 61424, 62201, 60647, + -1000, -1000, 413, -1000, -1000, 1441, 1439, 1435, 1045, 1045, + 1434, 1911, 1908, 1907, 1045, 1045, 1431, 1903, 43553, 1896, + 310, 1427, 1425, 1424, 1419, 1891, 245, 1886, 1417, 1415, + 1423, 60647, 2196, 62201, -1000, 299, 1030, 1007, -1000, -1000, + -1000, 1057, 2511, 2420, 2093, 528, 814, 60647, 499, 499, + 499, 60647, -1000, -1000, 17894, 62201, 308, -1000, 1881, 24905, + -1000, 1213, 1187, 1187, -1000, -1000, -1000, -1000, -1000, -1000, + 1171, 62201, 1213, -1000, -1000, -1000, 1187, 1171, 62201, 1171, + 1171, 1171, 1171, 1187, 1187, 1187, 1171, 62201, 62201, 62201, + 62201, 62201, 62201, 62201, 62201, 62201, 17111, 1013, 1171, -439, + -1000, 1880, -1000, -1000, -1000, 2292, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 2065, -1000, -1000, -1000, - 56057, -1000, 2065, 279, 54555, 54555, 397, 1373, -1000, -1000, - 2593, 2223, -1000, 2643, 2607, 525, -1000, 3959, 1930, 1612, - 1620, 2223, 2035, 56057, -1000, 2071, 247, -1000, -1000, -1000, - -310, -312, 2341, 1450, 1820, -1000, -1000, -1000, -1000, 2137, - 22262, -1000, -1000, 2693, -1000, 29021, 806, 2673, 50049, -1000, - 465, 465, 2057, 647, 8, -1000, -1000, -1000, -1000, 932, - 35780, -1000, -1000, -1000, -1000, -1000, 1943, 56057, -1000, -1000, - 5026, 54555, -1000, 2174, -1000, 1941, -1000, 2106, 22262, 2181, - 496, 54555, 490, 489, 488, 463, -67, -1000, -1000, -1000, - -1000, -1000, -1000, 922, 922, 922, -1000, 404, 2630, 4229, - 5216, -1000, -1000, -1000, 49298, 2173, 54555, -1000, 2171, -1000, - 1038, 848, 870, 870, 54555, -1000, -1000, 55306, 54555, 1033, - 1019, 54555, 54555, 54555, 54555, -1000, 48547, -1000, 47796, 47045, - 1371, 54555, 46294, 45543, 44792, 44041, 43290, -1000, 2268, -1000, - 2158, -1000, -1000, -1000, 55306, 54555, 54555, 55306, 54555, 55306, - 56057, 54555, -1000, -1000, 411, -1000, -1000, 1370, 1366, 1358, - 922, 922, 1354, 1814, 1812, 1802, 922, 922, 1326, 1797, - 38033, 1796, 323, 1323, 1321, 1313, 1353, 1770, 206, 1756, - 1346, 1299, 1312, 54555, 2168, 56057, -1000, 300, 1187, 892, - 930, 2517, 2398, 2055, 475, 493, 54555, 460, 460, 54555, - -1000, 15485, 56057, 207, -1000, 1743, 22262, -1000, 1063, 1060, - 1060, -1000, -1000, -1000, -1000, -1000, -1000, 1065, 56057, 1063, - -1000, -1000, -1000, 1060, 1065, 56057, 1065, 1065, 1065, 1065, - 1060, 1060, 1060, 1065, 56057, 56057, 56057, 56057, 56057, 56057, - 56057, 56057, 56057, 14728, 904, 1065, -468, -1000, 1741, -1000, - -1000, -1000, 2288, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -7545,340 +8248,355 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 17111, 17111, + -1000, -1000, 2599, 2597, -1000, -1000, -1000, 2092, -1000, 215, + 9, 222, -1000, 48215, 519, 1056, -1000, 519, -1000, -1000, + -1000, -1000, -1000, 2091, 47438, -1000, -443, -449, -450, -451, + -1000, -1000, -1000, -452, -455, -1000, -1000, -1000, 24905, 24905, + 24905, 24905, -268, -1000, 1346, 27236, 2451, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 24905, 1342, 1137, 27236, 27236, 27236, + 27236, 27236, 27236, 27236, 28790, 28013, 27236, 27236, 27236, 27236, + 27236, 27236, -1000, -1000, 38114, 8368, 8368, 966, 966, 966, + 966, -1000, -183, 2087, 61424, -1000, -1000, -1000, 905, 24905, + 24905, 966, -1000, 1445, 1450, 21797, 24905, 24905, 24905, 24905, + 1090, 1576, 61424, 24905, -1000, 1675, -1000, -1000, -1000, -1000, + 1355, -1000, -1000, 1150, 2460, 2460, 2460, 2460, 24905, 24905, + 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 2460, 24905, + 278, 278, 910, 24905, 24905, 24905, 24905, 24905, 24905, 24905, + 24905, 20243, 24905, 24905, 27236, 24905, 24905, 24905, 1675, 24905, + 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, + 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, + 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, + 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, + 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, + 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, + 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, + 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 1675, 24905, + 1354, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 19460, 24905, + 24905, 24905, 24905, 24905, -1000, -1000, -1000, -1000, -1000, -1000, + 24905, 24905, 24905, 24905, 24905, 24905, 24905, 24905, 1675, 24905, + 24905, 24905, 24905, 24905, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1754, 1748, 1639, 1909, 24905, -1000, + 2083, -1000, -159, 35006, 24905, 1877, 2687, 2220, 60647, -1000, + -1000, -1000, -1000, 2596, -1000, 2596, 1754, 3758, 2329, 24128, + -1000, -1000, 3758, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 1945, -1000, 313, 811, + 2204, 299, 60647, 808, 794, 793, 491, -1000, -71, 1055, + 62201, 2077, 2571, -1000, 2072, -1000, -1000, 1909, -1000, -303, + -1000, -307, 2318, 1864, 959, -1000, 1455, 24905, 24905, 2063, + -1000, 2130, 62201, -1000, -268, -1000, 46661, -1000, -1000, 16328, + 62201, 366, 62201, -1000, 34229, 45884, 227, -1000, 14, 2030, + -1000, 22, 7, 21020, 958, -1000, -1000, -1000, 1452, 29567, + 1979, 958, 142, -1000, -1000, -1000, 2161, -1000, 2161, 2161, + 2161, 2161, 2161, 959, 959, 959, 2161, -1000, -1000, -1000, + -1000, 2189, 2161, 2187, -1000, 2161, 2161, 2161, 2161, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 2184, 2184, 2184, 2182, + 2182, 2163, 2163, 481, -1000, 24905, 477, 45107, 2529, 1421, + 2768, -192, -1000, 60647, 1525, 1505, 1499, -1000, -551, 2062, + -1000, -1000, 2644, -1000, -1000, 894, 1170, 1163, 1098, 60647, + 273, 357, -1000, 478, -1000, 45107, 60647, 1128, 913, 60647, + -1000, 60647, -1000, -1000, -1000, -1000, -1000, 60647, -1000, -1000, + 2061, -1000, 2066, 1226, 1158, 1223, 1153, 2061, -1000, -1000, + -188, 2061, -1000, 2061, -1000, 2061, -1000, 2061, -1000, 2061, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1065, + 375, -351, 60647, 273, 526, -1000, 523, 38114, -1000, -1000, + -1000, 38114, 38114, -1000, -1000, -1000, -1000, 1854, 1824, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 14728, 14728, -1000, -1000, 2588, 2585, -1000, - -1000, -1000, 2053, -1000, 213, -2, 223, -1000, 42539, 538, - 929, -1000, 538, -1000, -1000, -1000, -1000, -1000, 2046, 41788, - -1000, -469, -480, -482, -484, -1000, -1000, -1000, -485, -488, - -1000, -1000, -1000, 22262, 22262, 22262, 22262, -274, -1000, 1537, - 24515, 2468, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 22262, - 1221, 1271, 24515, 24515, 24515, 24515, 24515, 24515, 24515, 26017, - 25266, 24515, 24515, 24515, 24515, 24515, 24515, -1000, -1000, 33527, - 5863, 5863, 873, 873, 873, 873, -1000, -179, 2042, 55306, - -1000, -1000, -1000, 802, 22262, 22262, 873, -1000, 1259, 1993, - 19258, 22262, 22262, 22262, 22262, 947, 1624, 55306, 22262, -1000, - 1620, -1000, -1000, -1000, -1000, 1224, -1000, -1000, 1260, 2456, - 2456, 2456, 2456, 22262, 22262, 22262, 22262, 22262, 22262, 22262, - 22262, 22262, 22262, 2456, 22262, 723, 723, 2233, 22262, 22262, - 22262, 22262, 22262, 22262, 22262, 22262, 17756, 22262, 22262, 24515, - 22262, 22262, 22262, 1620, 22262, 22262, 22262, 22262, 22262, 22262, - 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, - 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, - 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, - 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, - 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, - 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, - 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, - 22262, 22262, 22262, 1620, 22262, 1471, 22262, 22262, 22262, 22262, - 22262, 22262, 22262, 16999, 22262, 22262, 22262, 22262, 22262, -1000, - -1000, -1000, -1000, -1000, -1000, 22262, 22262, 22262, 22262, 22262, - 22262, 22262, 22262, 1620, 22262, 22262, 22262, 22262, 22262, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1649, - 1675, 1619, 2065, 22262, -1000, 2037, -1000, -187, 30523, 22262, - 1725, 2671, 2199, 54555, -1000, -1000, -1000, -1000, 2593, -1000, - 2593, 1649, 3940, 2344, 21511, -1000, -1000, 3940, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 1678, -1000, 56057, 2035, 2575, 54555, -1000, 2033, -1000, - -1000, 2065, -1000, -372, -1000, -373, 2339, 1709, 887, -1000, - 22262, 22262, 2026, -1000, 1214, 56057, -1000, -274, -1000, 41037, - -1000, -1000, 13971, 56057, 375, 56057, -1000, 29772, 40286, 307, - -1000, 8, 1989, -1000, 3, -6, 18507, 872, -1000, -1000, - -1000, 4411, 26768, 1919, 872, 82, -1000, -1000, -1000, 2106, - -1000, 2106, 2106, 2106, 2106, 2106, 887, 887, 887, 2106, - -1000, -1000, -1000, -1000, 2160, 2106, 2157, -1000, 2106, 2106, - 2106, 2106, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2152, - 2152, 2152, 2151, 2151, 2107, 2107, 437, -1000, 22262, 453, - 39535, 2531, 1300, 1254, 300, 463, 2194, 54555, 54555, 54555, - 56057, 957, -1000, 1489, 1473, 1398, -1000, -552, 2024, -1000, - -1000, 2629, -1000, -1000, 1131, 1104, 1091, 1096, 54555, 280, - 359, -1000, 450, -1000, 39535, 54555, 1012, 870, 54555, -1000, - 54555, -1000, -1000, -1000, -1000, -1000, 54555, -1000, -1000, 2019, - -1000, 1971, 1170, 1072, 1150, 1051, 2019, -1000, -1000, -184, - 2019, -1000, 2019, -1000, 2019, -1000, 2019, -1000, 2019, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 980, 125, - -295, 54555, 280, 473, -1000, 468, 33527, -1000, -1000, -1000, - 33527, 33527, -1000, -1000, -1000, -1000, 1707, 1702, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -508, 62201, + -1000, 283, 347, 399, 378, 62201, 795, 2476, 2472, 2471, + 2467, 2464, 2455, 2444, 300, 334, 62201, 62201, 499, 2262, + 62201, 2539, 62201, 62201, -1000, -1000, -1000, -1000, -1000, 1822, + 1811, -1000, 1576, 62201, -1000, -1000, 1171, 1171, -1000, -1000, + 62201, 1171, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 1171, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 62201, -1000, -1000, -1000, + -1000, 1802, -1000, 62201, -16, 210, -1000, -1000, 60647, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -64, -1000, + 340, 19, 448, -1000, -1000, -1000, -1000, -1000, 2593, -1000, + 1576, 1105, 1101, -1000, 1909, -1000, -1000, 1334, -1000, -1000, + -1000, -1000, -1000, 1909, 1909, 1909, -1000, -1000, -1000, -1000, + -1000, 1342, 27236, 27236, 27236, 1497, 852, 1884, 1475, 1199, + 1232, 1232, 1258, 27236, 1258, 27236, 975, 975, 975, 975, + 975, -1000, -1000, -1000, -1000, -1000, -1000, 1794, -1000, 1780, + -1000, 1909, 61424, 1834, 19460, 2219, 2316, 1675, 998, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 3667, + 1675, 1983, 1675, 1712, 3661, 1084, -1000, 24905, 1675, 3655, + -1000, -1000, 1675, 1675, 24905, -1000, -1000, 24905, 24905, 24905, + 24905, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, + 2768, 24905, 2768, 2054, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -533, 56057, -1000, - 289, 928, 347, 365, 354, 56057, 854, 2484, 2481, 2475, - 2474, 2473, 2464, 2437, 301, 338, 56057, 56057, 460, 2283, - 56057, 2544, 56057, -1000, -1000, -1000, -1000, -1000, 1697, 1686, - -1000, 1624, 56057, -1000, -1000, 1065, 1065, -1000, -1000, 56057, - 1065, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1065, + -1000, -1000, 2050, 2686, 1844, 2768, 2768, 2768, 2768, 3650, + 2768, 2768, 24905, 2414, -1000, -1000, -1000, 1667, 3600, 1652, + 3594, 2768, 2768, -1000, 2768, 3588, 3576, 1675, 2884, 2859, + 2768, 2768, 2768, 2768, 2768, 2853, 2790, 2768, 2768, 2783, + 2768, 3571, 2768, 2763, 2759, 2753, 2737, 2717, 2711, 2692, + 2688, 2673, 2656, 2648, 2620, 2606, 2594, 2587, 2572, 2558, + 2554, 2768, 2768, 2768, 3566, 2768, 3489, 2768, 3477, 2768, + 2768, 3473, 2544, 2533, 1675, 2031, -1000, 3469, 2768, 3457, + 3446, 3428, 2491, 3421, 3411, 3407, 2768, 2768, 2768, 2453, + 3403, 3395, 3382, 3378, 3374, 3370, 3366, 3357, 3353, 2768, + 1639, 1639, 1639, 1639, 1639, 3349, -271, 2768, 1675, -1000, + -1000, -1000, -1000, 3341, 2425, 3299, 3287, 3283, 3241, 1675, + 1909, 900, -1000, -1000, 1639, 1675, 1675, 1639, 1639, 3194, + 3127, 3120, 3112, 3108, 3099, 2768, 2768, -1000, 2768, 3038, + 3034, 2419, 2401, 1675, -1000, 1639, 62201, -1000, -427, -1000, + -1, 1020, 1909, -1000, 43553, 1675, -1000, 8112, -1000, 1338, + -1000, -1000, -1000, -1000, -1000, 39668, 1863, -1000, -1000, -1000, + 491, 786, 275, 491, 299, 283, 2181, 60647, 60647, 60647, + 62201, 1093, -1000, 513, -1000, 1909, -474, 23351, -1000, -1000, + -1000, 959, 117, 38891, 952, 952, 157, -1000, 1576, 1576, + 24905, -1000, -1000, -1000, -1000, -1000, -1000, 899, 2666, 380, + 1909, -1000, 2051, 3161, -1000, -1000, -1000, 2568, 30344, -1000, + -1000, 1909, 1909, 62201, 1897, 1787, -1000, 898, -1000, 1468, + 2030, 14, 1, -1000, -1000, -1000, -1000, 1576, -1000, 1466, + 398, 1378, -1000, 471, -1000, -1000, -1000, -1000, 2434, 139, + -1000, -1000, -1000, 854, 959, -1000, -1000, 959, -1000, -1000, + -1000, -1000, 1768, -1000, 1768, -1000, -1000, -1000, -1000, -1000, + 1418, -1000, -1000, -1000, -1000, 1416, -1000, -1000, 1407, -1000, + -1000, 3028, 2269, 477, -1000, -1000, 1045, 1749, -1000, -1000, + 2437, 1045, 1045, 60647, -1000, -1000, 1954, 2529, -1000, -5, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -544, 162, 614, + -1000, -1000, -1000, 4562, 60647, 1817, -1000, 270, -1000, 1928, + -1000, 60647, -1000, 1792, 2177, 60647, 60647, -1000, -1000, -1000, + 60647, 1909, -1000, -1000, -1000, -1000, 530, 2510, 325, -1000, + -1000, -290, -1000, -1000, 273, 270, 61424, 60647, 958, -1000, + -1000, -1000, -1000, -1000, -504, 1790, 783, 62201, 62201, 62201, + 62201, 62201, 62201, 866, -1000, -1000, 32, -1000, -1000, 234, + -1000, -1000, 1725, -1000, -1000, -1000, -1000, 234, -1000, -1000, + -1000, -1000, -1000, 324, 505, -1000, 62201, 62201, 981, -1000, + -1000, -1000, -1000, -1000, -1000, 1187, -1000, -1000, 1187, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 56057, -1000, -1000, -1000, -1000, - 1683, -1000, 56057, -33, 209, -1000, -1000, 54555, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -119, -1000, 45, - 10, 444, -1000, -1000, -1000, -1000, -1000, 2583, -1000, 1624, - 996, 988, -1000, 2065, -1000, -1000, 1242, -1000, -1000, -1000, - -1000, -1000, 2065, 2065, 2065, -1000, -1000, -1000, -1000, -1000, - 1221, 24515, 24515, 24515, 2034, 796, 2156, 1379, 1798, 1303, - 1303, 1281, 24515, 1281, 24515, 877, 877, 877, 877, 877, - -1000, -1000, -1000, -1000, -1000, -1000, 1680, -1000, 1665, -1000, - 2065, 55306, 1869, 16999, 1630, 2040, 1620, 889, -1000, -1000, + -1000, 2492, 62201, 18, -471, -1000, -467, 24905, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1486, 810, 1884, 27236, 27236, + 1450, 1450, 27236, -1000, -1000, -1000, 1063, 1063, 38114, -1000, + 27236, 24905, -1000, -1000, 24905, 24905, 24905, 1073, -1000, 24905, + 1592, -1000, 24905, -1000, -271, 1639, 2768, 2768, 2768, 2768, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + 2021, -1000, 24905, 24905, 24905, 1675, 360, -1000, -1000, -1000, + -271, 24905, -1000, -1000, 2683, -1000, 24905, -1000, 38114, 24905, + 24905, 24905, -1000, -1000, -1000, 24905, 24905, -1000, -1000, 24905, + -1000, 24905, -1000, -1000, -1000, -1000, -1000, -1000, 24905, -1000, + 24905, -1000, -1000, -1000, 24905, -1000, 24905, -1000, -1000, 24905, + -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, + -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, + -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, + -1000, 24905, -1000, 24905, -1000, -1000, -1000, 24905, -1000, 24905, + -1000, 24905, -1000, -1000, 24905, -1000, 24905, -1000, 24905, -1000, + 24905, 24905, -1000, 24905, 24905, 24905, -1000, 24905, 24905, 24905, + 24905, -1000, -1000, -1000, -1000, 24905, 24905, 24905, 24905, 24905, + 24905, 24905, 24905, 24905, 24905, -1000, -1000, -1000, -1000, -1000, + -1000, 24905, -1000, 45107, 58, -271, 1354, 58, 1354, 26459, + 907, 881, 25682, -1000, 24905, 18677, -1000, -1000, -1000, -1000, + -1000, 24905, 24905, 24905, 24905, 24905, 24905, -1000, -1000, -1000, + 24905, 24905, -1000, 24905, -1000, 24905, -1000, -1000, -1000, -1000, + -1000, 1020, -1000, 848, 846, 913, 60647, -1000, -1000, -1000, + -1000, 2029, -1000, 2600, -1000, 2357, 2348, 2680, 2666, 24128, + -1000, 34229, 62201, 62201, 296, 62201, 283, 766, 2259, -1000, + 2181, 2181, 2181, -1000, 2526, -1000, 2176, 1457, -1000, -1000, + -1000, -1000, -1000, -416, -1000, 2409, 2344, 952, 952, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 15545, 2596, 24905, 2258, + 61424, 1909, -1000, 31898, 60647, 61424, 34229, 34229, 34229, 34229, + 34229, -1000, 2289, 2286, -1000, 2313, 2296, 2411, 62201, -1000, + 1754, 1774, -1000, 24905, 36560, 1962, 34229, -1000, -1000, 34229, + 62201, 14762, -1000, -1000, 15, -2, -1000, -1000, -1000, -1000, + 1452, -1000, -1000, 1076, 2566, 2429, -1000, -1000, -1000, -1000, + -1000, -1000, 1767, -1000, 1761, 2024, 1756, 1723, 375, -1000, + 2183, 2489, 1045, 1045, -1000, 1402, -1000, 1445, 1718, 1685, + -1000, -1000, -1000, 479, -1000, -1000, -549, 1382, 2171, 2156, + 24905, 2170, 2643, 2005, 60647, -1000, -1000, 61424, -1000, 306, + -1000, 477, 60647, -1000, -1000, -1000, 357, 62201, -1000, 8895, + -1000, -1000, -1000, 270, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 62201, 2113, -1000, -1000, -1000, -1000, -1000, 244, 243, + 1683, 241, 1681, -1000, 241, -1000, 62201, 957, 2269, 62201, + -1000, -1000, -1000, 1171, 1171, -1000, -1000, 2487, -1000, 1445, + 2768, 27236, 27236, -1000, 966, -1000, -1000, 495, -250, 2161, + 2161, -1000, 2161, 2163, -1000, 2161, 200, 2161, 196, 2161, + -1000, -1000, 1675, 1675, -1000, 1639, 2387, 1906, 3018, -1000, + 1576, 24905, 2993, -1000, -1000, -271, -271, -271, -271, -271, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 4571, 1620, - 1923, 1620, 1818, 4566, 1022, -1000, 22262, 1620, 4549, -1000, - -1000, 1620, 1620, 22262, -1000, -1000, 22262, 22262, 22262, 22262, - 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, - 22262, 1254, 2016, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -78, 2937, 2811, 2768, -1000, 2158, 2150, -1000, 2768, 24905, + 2768, 1675, 2378, 2768, 2768, 2768, 2768, 2768, 2768, 2768, + 2768, 2768, 2768, 2768, 2768, 2354, 2312, 2307, 2303, 2299, + 2288, 2284, 2272, 2266, 2260, 2199, 2193, 2178, 2172, 2166, + 2125, 2768, 2768, 2104, 2768, 2099, 2095, -1000, 1576, 1639, + 2806, 1639, 2768, 2768, 2798, 387, 2768, 1716, 1716, 1716, + 1716, 1716, 1639, 1639, 1639, 1639, 2768, 60647, -1000, -271, + -1000, -1000, -326, -330, -1000, 1675, -271, 2019, 27236, 2768, + 27236, 27236, 27236, 2768, 1675, -1000, 2084, 2052, 2744, 2022, + 2768, 2627, 2768, 2768, 2768, 2016, -1000, 2577, 1909, 2577, + 1909, 2577, 1707, 1338, 62201, -1000, -1000, -1000, -1000, 2666, + 2653, -1000, 2015, 1909, -1000, -1000, -1000, -1000, -1000, 542, + 62201, 62201, 2257, 2256, 2251, -1000, 1920, -1000, -1000, 117, + 672, -1000, 2373, 2344, -1000, 2642, 2376, 2641, -1000, -1000, + -1000, -1000, -1000, 1576, -1000, 2513, 1989, -1000, 1047, 1964, + -1000, -1000, 23351, 1714, 2347, 885, 1707, 2013, 3161, 2223, + 2250, 3075, -1000, -1000, -1000, -1000, 2285, -1000, 2145, -1000, + -1000, 2136, -1000, 2525, 366, 34229, 2004, 2004, -1000, 877, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1201, 8895, 2714, + -1000, 1662, -1000, 1459, 236, 1380, -1000, -1000, 1045, 1045, + -1000, 1126, 1123, -1000, 62201, 2143, -1000, 959, 1659, 959, + 1370, -1000, -1000, 1368, -1000, -1000, -1000, -1000, 2151, 2278, + -1000, -1000, -1000, -1000, 289, 2141, 2635, -1000, 24905, 2138, + 1046, 2931, 60647, 60647, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 489, 1045, -486, 332, 330, + 1045, 1045, 1045, -550, -1000, -1000, 1705, 1703, -1000, -216, + -1000, 24905, -1000, -1000, -1000, -1000, -1000, 1404, 1404, 1657, + 1607, 1591, -1000, 2136, -203, 60647, 60647, 60647, 60647, -1000, + -1000, -1000, 1249, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 966, 1675, 354, -205, 1675, + -1000, -1000, 959, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 24905, -1000, 24905, -1000, 24905, 1576, 24905, + -1000, -1000, -1000, -1000, -1000, 2596, 1589, 24905, 24905, -1000, + 1367, 1351, -271, 2768, -1000, -1000, -1000, 24905, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 2015, 2662, 1587, 1254, 1254, 1254, 1254, 4543, 1254, - 1254, 22262, 1700, -1000, -1000, -1000, 1497, 4537, 1910, 4532, - 1254, 1254, -1000, 1254, 4527, 4513, 1620, 3585, 3558, 1254, - 1254, 1254, 1254, 1254, 3520, 3509, 1254, 1254, 3505, 1254, - 4499, 1254, 3439, 3435, 3421, 3408, 3397, 3385, 3372, 3367, - 3296, 3116, 3049, 3038, 3021, 2986, 2942, 2912, 2891, 2842, - 1254, 1254, 1254, 4495, 1254, 4485, 1254, 4464, 1254, 1254, - 4460, 2817, 2811, 1620, 2007, -1000, 4448, 1254, 4444, 4434, - 4430, 2732, 4424, 4410, 4402, 1254, 1254, 1254, 2709, 4390, - 4379, 4341, 4329, 4325, 4307, 4301, 4291, 4286, 1254, 1619, - 1619, 1619, 1619, 1619, 4263, -338, 1254, 1620, -1000, -1000, - -1000, -1000, -1000, 4255, 2680, 4240, 4235, 4161, 4002, 1620, - 2065, 794, -1000, -1000, 1619, 1620, 1620, 1619, 1619, 3986, - 3930, 3632, 3603, 3589, 3567, 1254, 1254, -1000, 1254, 3455, - 3443, 2670, 2655, 1620, -1000, 1619, 56057, -1000, -460, -1000, - -10, 970, 2065, -1000, 38033, 1620, -1000, 5820, -1000, 1192, - -1000, -1000, -1000, -1000, -1000, 35029, 1986, -1000, -1000, -1000, - -1000, 2065, 1867, -1000, -506, 20760, -1000, -1000, -1000, 887, - 56, 34278, 863, 863, 153, 1624, 1624, 22262, -1000, -1000, - -1000, -1000, -1000, -1000, 792, 2649, 524, 2065, -1000, 2020, - 2319, -1000, -1000, -1000, 2556, 27519, -1000, -1000, 2065, 2065, - 56057, 2048, 1987, -1000, 784, -1000, 1380, 1989, 8, -13, - -1000, -1000, -1000, -1000, 1624, -1000, 1397, 377, 4319, -1000, - 447, -1000, -1000, -1000, -1000, 2429, 72, -1000, -1000, -1000, - 384, 887, -1000, -1000, 887, -1000, -1000, -1000, -1000, 1658, - -1000, 1658, -1000, -1000, -1000, -1000, -1000, 1297, -1000, -1000, - -1000, -1000, 1292, -1000, -1000, 1291, -1000, -1000, 2744, 2243, - 453, -1000, -1000, 922, 1653, -1000, -1000, 2431, 922, 922, - 54555, -1000, -1000, 1843, 2531, 289, 56057, 2282, -1000, 2194, - 2194, 2194, -1000, 2539, -1000, -1000, -1000, -1000, -1000, -1000, - -535, 178, 360, -1000, -1000, -1000, 1754, 54555, 1864, -1000, - 271, -1000, 1837, -1000, 54555, -1000, 1834, 2135, 54555, 54555, - -1000, -1000, -1000, 54555, 2065, -1000, -1000, -1000, -1000, 492, - 2516, 329, -1000, -1000, -357, -1000, -1000, 280, 271, 55306, - 54555, 872, -1000, -1000, -1000, -1000, -1000, -536, 1832, 486, - 284, 339, 56057, 56057, 56057, 56057, 56057, 56057, 758, -1000, - -1000, 22, -1000, -1000, 255, -1000, -1000, 1637, -1000, -1000, - -1000, -1000, 255, -1000, -1000, -1000, -1000, -1000, 326, 467, - -1000, 56057, 56057, 953, -1000, -1000, -1000, -1000, -1000, 1060, - -1000, -1000, 1060, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 2497, 56057, 9, -502, -1000, - -498, 22262, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1691, - 790, 2156, 24515, 24515, 1993, 1993, 24515, -1000, -1000, -1000, - 1280, 1280, 33527, -1000, 24515, 22262, -1000, -1000, 22262, 22262, - 22262, 934, -1000, 22262, 1152, -1000, 22262, -1000, -338, 1619, - 1254, 1254, 1254, 1254, -338, -338, -338, -338, -338, -338, - -338, -338, -338, -338, 2025, -1000, 22262, 22262, 22262, 1620, - 277, -1000, -1000, -1000, -338, 22262, -1000, -1000, 2660, -1000, - 22262, -1000, 33527, 22262, 22262, 22262, -1000, -1000, -1000, 22262, - 22262, -1000, -1000, 22262, -1000, 22262, -1000, -1000, -1000, -1000, - -1000, -1000, 22262, -1000, 22262, -1000, -1000, -1000, 22262, -1000, - 22262, -1000, -1000, 22262, -1000, 22262, -1000, 22262, -1000, 22262, - -1000, 22262, -1000, 22262, -1000, 22262, -1000, 22262, -1000, 22262, - -1000, 22262, -1000, 22262, -1000, 22262, -1000, 22262, -1000, 22262, - -1000, 22262, -1000, 22262, -1000, 22262, -1000, 22262, -1000, -1000, - -1000, 22262, -1000, 22262, -1000, 22262, -1000, -1000, 22262, -1000, - 22262, -1000, 22262, -1000, 22262, 22262, -1000, 22262, 22262, 22262, - -1000, 22262, 22262, 22262, 22262, -1000, -1000, -1000, -1000, 22262, - 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, 22262, -1000, - -1000, -1000, -1000, -1000, -1000, 22262, -1000, 39535, 2, -338, - 1471, 2, 1471, 23764, 791, 539, 23013, -1000, 22262, 16242, - -1000, -1000, -1000, -1000, -1000, 22262, 22262, 22262, 22262, 22262, - 22262, -1000, -1000, -1000, 22262, 22262, -1000, 22262, -1000, 22262, - -1000, -1000, -1000, -1000, -1000, 970, -1000, 842, 831, 870, - 54555, -1000, -1000, -1000, -1000, 1988, -1000, 2587, -1000, 2350, - 2348, 2657, 2649, 21511, -1000, 29772, -1000, -1000, 54555, -1000, - -1000, -451, -1000, 2392, 2379, 863, 863, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 13214, 2593, 22262, 2279, 55306, 2065, - -1000, 28270, 54555, 55306, 29772, 29772, 29772, 29772, 29772, -1000, - 2324, 2309, -1000, 2299, 2296, 2303, 56057, -1000, 1649, 1830, - -1000, 22262, 32025, 1966, 29772, -1000, -1000, 29772, 56057, 12457, - -1000, -1000, 7, -16, -1000, -1000, -1000, -1000, 4411, -1000, - -1000, 962, 2551, 2426, -1000, -1000, -1000, -1000, -1000, -1000, - 1788, -1000, 1786, 1980, 1769, 1765, 125, -1000, 2153, 2496, - 922, 922, -1000, 1289, -1000, 1259, 1633, 1631, -1000, -1000, - -1000, 485, -1000, 56057, 2277, 2275, 2267, -1000, -544, 1283, - 2132, 2142, 22262, 2115, 2627, 1969, 54555, -1000, -1000, 55306, - -1000, 278, -1000, 453, 54555, -1000, -1000, -1000, 359, 56057, - -1000, 5553, -1000, -1000, -1000, 271, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 56057, 294, -1000, 2108, 1285, -1000, -1000, - 2044, -1000, -1000, -1000, -1000, -1000, 236, 177, 1614, 252, - 1610, -1000, 252, -1000, 56057, 952, 2243, 56057, -1000, -1000, - -1000, 1065, 1065, -1000, -1000, 2495, -1000, 1259, 1254, 24515, - 24515, -1000, 873, -1000, -1000, 471, -251, 2106, 2106, -1000, - 2106, 2107, -1000, 2106, 199, 2106, 196, 2106, -1000, -1000, - 1620, 1620, -1000, 1619, 2636, 1783, 3425, -1000, 1624, 22262, - 3030, -1000, -1000, -338, -338, -338, -338, -338, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -77, 2823, - 2738, 1254, -1000, 2102, 2099, -1000, 1254, 22262, 1254, 1620, - 2591, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, - 1254, 1254, 1254, 2570, 2566, 2530, 2526, 2502, 2480, 2441, - 2432, 2427, 2416, 2411, 2343, 2273, 2269, 2249, 2164, 1254, - 1254, 2148, 1254, 2144, 2128, -1000, 1624, 1619, 2713, 1619, - 1254, 1254, 2647, 371, 1254, 1763, 1763, 1763, 1763, 1763, - 1619, 1619, 1619, 1619, 1254, 54555, -1000, -338, -1000, -1000, - -386, -389, -1000, 1620, -338, 1974, 24515, 1254, 24515, 24515, - 24515, 1254, 1620, -1000, 2109, 2103, 2235, 2031, 1254, 1898, - 1254, 1254, 1254, 1984, -1000, 2581, 2065, 2581, 2065, 2581, - 1737, 1192, 56057, -1000, -1000, -1000, -1000, 2649, 2650, -1000, - 1972, -1000, 56, 421, -1000, 2374, 2379, -1000, 2626, 2368, - 2625, -1000, -1000, -1000, -1000, -1000, 1624, -1000, 2519, 1937, - -1000, 925, 1965, -1000, -1000, 20760, 1752, 2347, 773, 1737, - 2023, 2319, 2228, 2231, 2796, -1000, -1000, -1000, -1000, 2307, - -1000, 2302, -1000, -1000, 2071, -1000, 1674, 375, 29772, 2022, - 2022, -1000, 770, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1153, 5553, 2718, -1000, 1599, -1000, 1394, 211, 1279, -1000, - -1000, 922, 922, -1000, 1011, 1006, -1000, 56057, 2096, -1000, - 887, 1578, 887, 1263, -1000, -1000, 1261, -1000, -1000, -1000, - -1000, 2116, 2261, -1000, -1000, -1000, -1000, 56057, -1000, 56057, - 56057, 56057, 2090, 2619, -1000, 22262, 2088, 924, 2073, 54555, - 54555, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 809, 922, -516, 337, 335, 922, 922, 922, - -547, -1000, -1000, 1735, 1729, -1000, -229, -1000, 22262, -1000, - -1000, -1000, -1000, -1000, 1193, 1193, 1574, 1559, 1556, -1000, - 2071, -1000, -1000, -1000, 1819, -1000, -1000, -210, 54555, 54555, - 54555, 54555, -1000, -1000, -1000, 1223, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 873, 1620, - 382, -213, 1620, -1000, -1000, 887, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 22262, -1000, 22262, -1000, - 22262, 1624, 22262, -1000, -1000, -1000, -1000, -1000, 2593, 1552, - 22262, 22262, -1000, 1258, 1257, -338, 1254, -1000, -1000, -1000, - 22262, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 22262, -1000, 22262, -1000, 22262, -1000, - 22262, -1000, 22262, -1000, 22262, -1000, 22262, -1000, 22262, -1000, - 22262, -1000, 22262, -1000, 22262, -1000, 22262, -1000, 22262, -1000, - 22262, -1000, 22262, -1000, 22262, -1000, -1000, 22262, -1000, -1000, - -1000, 22262, -1000, 22262, -1000, 22262, -1000, -1000, -1000, 22262, - 305, 1280, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1620, 372, -1000, -1000, -1000, 2653, -1000, - 1620, 22262, 1993, -1000, 1993, 1993, 1993, -1000, -1000, -1000, - 22262, -1000, 22262, 22262, -1000, 22262, -1000, 22262, -1000, -1000, - -1000, -1000, 22262, 2065, 2367, 38784, 2065, 38784, 2065, 32025, - -1000, -1000, 2650, 2648, 2616, 2359, 2363, 2363, 2374, -1000, - 2611, 2601, -1000, 1547, 2598, 1535, 997, -1000, 55306, 22262, - -1000, 2065, 38033, -1000, 526, 54555, 2065, 54555, -1000, 2642, - -1000, -1000, 22262, 2087, -1000, 22262, -1000, -1000, -1000, -1000, - 5863, 2649, 2022, -1000, -1000, 886, -1000, 22262, -1000, 10248, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1531, - 1529, -1000, -1000, 2072, 22262, -1000, -1000, -1000, 1791, 1738, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2071, -1000, - -1000, -1000, -1000, 359, -549, 2002, 54555, 1243, -1000, 1722, - 1969, 353, 2065, 1511, 922, 922, 922, 1236, 1217, 38033, - 1695, -1000, 54555, 425, -1000, 359, -1000, -234, -237, 1254, - -1000, -1000, 2547, -1000, -1000, 16242, -1000, -1000, 2070, 2192, - -1000, -1000, -1000, -1000, 2335, -182, -221, -1000, -1000, 1254, - 1254, 1254, 1540, 1620, -1000, 1254, 1254, 1701, 1696, -1000, - -1000, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, - 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, - 1254, 1619, 1953, -1000, 305, 1620, 2230, -1000, -1000, 5863, - -1000, -1000, 2642, 2597, 2, -1000, -1000, 269, 2, 1624, - 974, 1620, 1620, 974, 1949, 1254, 1859, 1854, 1254, 1254, - 32776, -1000, 2596, 2592, 1672, -1000, -1000, 38784, 1672, 38784, - 970, 2648, -345, 22262, 22262, 2354, 1206, -1000, -1000, -1000, - -1000, 1509, 1505, -1000, 1490, -1000, 2704, -1000, 1624, -1000, - 2065, 2065, -1000, 768, 1965, -1000, 2593, 1624, 54555, 1624, - 60, 2642, -1000, 1254, -1000, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, - 2065, 2065, 2065, 2065, 2065, 2065, -1000, -1000, 54555, 1916, - -1000, -1000, 2532, 1677, 175, -1000, 1692, 1969, -1000, -1000, - 893, -1000, 22262, -1000, 38033, 1480, 1470, -1000, -1000, -1000, - -1000, -547, -1000, -1000, -1000, -1000, -1000, -1000, 525, 1964, - -1000, 917, 54555, 56057, -1000, 2240, -1000, -1000, -1000, -1000, - 22262, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, + -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, + -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, -1000, 24905, + -1000, 24905, -1000, -1000, 24905, -1000, -1000, -1000, 24905, -1000, + 24905, -1000, 24905, -1000, -1000, -1000, 24905, 329, 1063, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 22262, -1000, - 1620, 2226, -1000, -381, -1000, -515, 22262, -338, -1000, -1000, - -338, -1000, -1000, -1000, -1000, -1000, 22262, -1000, -1000, 22262, - -1000, 22262, -1000, -1000, 1672, -1000, -1000, -1000, 37282, -1000, - 1672, -1000, 1672, -1000, -345, -1000, 1952, -1000, 54555, 1624, - 342, -1000, 1179, -1000, -1000, -1000, -1000, -1000, 55306, 54555, - 1965, 54555, -1000, -1000, 1670, 1620, 2065, 2593, -1000, 1651, - -1000, 525, -1000, 2069, 2142, -1000, -1000, -1000, 20009, -1000, - -1000, -1000, -1000, -1000, 293, -186, 16242, 11700, 1648, -1000, - -185, 1254, 1619, -1000, -490, -1000, -1000, -1000, -1000, 286, - -1000, -1000, 1923, -1000, -1000, 1836, 1790, 1606, -1000, -1000, - -1000, -1000, -1000, -1000, -345, -1000, -1000, 2527, -1000, -246, - -1000, -1000, 1451, 1609, -1000, -1000, -1000, 32025, 53804, -1000, - -183, 415, -186, 22262, 2068, 1620, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -50, -1000, -1000, 765, -1000, -1000, - -1000, 2044, -217, -1000, -1000, -1000, 1308, -507, -283, -286, - 24515, -1000, 22262, -1000, 22262, -1000, 22262, -1000, 54555, 2065, - -1000, -1000, -1000, 1478, -1000, 4526, -401, 2209, -1000, -139, - -1000, -1000, -1000, 1069, 1381, -1000, 1189, -1000, -1000, -1000, - -1000, -1000, 1657, 54555, -1000, 436, -1000, -1000, 15485, -210, - -222, 964, -1000, -1000, -1000, -1000, -1000, 1993, 1602, 1449, - 1254, -1000, 54555, -1000, 53804, -396, 872, 5863, -1000, 2206, - 2202, 2698, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -557, - 1458, 295, -1000, -1000, -1000, 1308, -290, -1000, 22262, -1000, - 22262, -1000, 1620, -1000, -1000, 2528, 60, -1000, 2702, -1000, - 2699, 1045, 1045, -1000, 1156, -557, -1000, -1000, -1000, -1000, - 1254, 1254, -1000, -403, -1000, -1000, -1000, -1000, -1000, 432, - 1231, -1000, -1000, -1000, -1000, -1000, 5863, -1000, -1000, -1000, - 205, 205, -1000, -1000, + 1675, 358, -1000, -1000, -1000, 2669, -1000, 1675, 24905, 1450, + -1000, 1450, 1450, 1450, -1000, -1000, -1000, 24905, -1000, 24905, + 24905, -1000, 24905, -1000, 24905, -1000, -1000, -1000, -1000, 24905, + 1909, 2426, 44330, 1909, 44330, 1909, 36560, -1000, -1000, 2653, + 2654, 2633, 250, 62201, -1000, -1000, 62201, 62201, 62201, -1000, + 2358, 2349, 2349, 2373, -1000, 2625, 2619, -1000, 1551, 2613, + 1549, 1119, -1000, 61424, 24905, -1000, 1909, 43553, -1000, 527, + 60647, 1909, 60647, -1000, 2621, -1000, -1000, 24905, 2135, -1000, + 24905, -1000, -1000, -1000, -1000, 8368, 2666, 2004, -1000, -1000, + 986, -1000, 24905, -1000, 12151, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1546, 1543, -1000, -1000, 2134, 24905, + -1000, -1000, -1000, 1793, 1764, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 357, -548, 2926, 60647, 1335, + -1000, 1696, 2005, 351, 1909, 1529, 1045, 1045, 1045, 1252, + 1243, 43553, 1694, -1000, 60647, 462, -1000, 357, -1000, -238, + -245, 2768, -1000, -1000, 2564, -1000, 18677, -1000, -1000, 2129, + 2175, -1000, -1000, -1000, -1000, 2305, -186, -212, -1000, -1000, + 2768, 2768, 2768, 2410, 1675, -1000, 2768, 2768, 1757, 1747, + -1000, -1000, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, + 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, + 2768, 2768, 1639, 1949, -1000, 329, 1675, 2247, -1000, -1000, + 8368, -1000, -1000, 2621, 2612, 58, -1000, -1000, 258, 58, + 1576, 1071, 1675, 1675, 1071, 1922, 2768, 1899, 1894, 2768, + 2768, 37337, -1000, 2611, 2610, 1689, -1000, -1000, 44330, 1689, + 44330, 1020, 2654, -278, 24905, 24905, 1675, 2014, -1000, 60647, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2404, 1348, -1000, + -1000, -1000, -1000, 1513, 1508, -1000, 1504, -1000, 2713, -1000, + 1576, -1000, 1909, 1909, -1000, 870, 1964, -1000, 2596, 1576, + 60647, 1576, 69, 2621, -1000, 2768, -1000, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, + 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, -1000, -1000, + 60647, 2874, -1000, -1000, 1691, 158, -1000, 1724, 2005, -1000, + -1000, 718, -1000, 24905, -1000, 43553, 1500, 1491, -1000, -1000, + -1000, -1000, -550, -1000, -1000, -1000, -1000, -1000, -1000, 473, + 1994, -1000, 1043, 60647, 62201, -1000, 2302, -1000, -1000, -1000, + -1000, 24905, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 24905, + -1000, 1675, 2244, -1000, -343, -1000, -509, 24905, -271, -1000, + -1000, -271, -1000, -1000, -1000, -1000, -1000, 24905, -1000, -1000, + 24905, -1000, 24905, -1000, -1000, 1689, -1000, -1000, -1000, 42776, + -1000, 1689, -1000, 1689, -1000, -278, -1000, 1987, -1000, 60647, + 1576, 335, 6496, 250, 4545, -1000, 1337, -1000, -1000, -1000, + -1000, -1000, 61424, 60647, 1964, 60647, -1000, -1000, 1674, 1675, + 1909, 2596, -1000, 1655, -1000, -1000, 2111, 2156, -1000, -1000, + -1000, 22574, -1000, -1000, -1000, -1000, -1000, 302, -192, 18677, + 13979, 1647, -1000, -193, 2768, 1639, -1000, -459, -1000, -1000, + -1000, -1000, 292, -1000, -1000, 1983, -1000, -1000, 1858, 1763, + 1746, -1000, -1000, -1000, -1000, -1000, -1000, -278, -1000, -1000, + 2562, -1000, -247, -1000, -567, -1000, -1000, 6496, 24905, 33452, + 41999, -1000, -1000, -1000, -1000, 1865, 1627, -1000, -1000, -1000, + 36560, 59870, -1000, -179, 322, 24905, 2109, 1675, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 864, -1000, + -1000, -1000, 2113, -209, -1000, -1000, -1000, 5249, -475, -320, + -325, 27236, -1000, 24905, -1000, 24905, -1000, 24905, -1000, 60647, + 1909, -1000, -1000, 1064, 6496, -1000, -567, 1565, 4494, 840, + 829, -1000, -1000, -1000, 2501, -1000, -1000, 2287, -1000, -1000, + -1000, 1498, -1000, 2942, -350, 2238, -1000, -97, -1000, -1000, + -1000, 1200, 1480, -1000, 1233, -1000, -1000, -1000, -1000, 2823, + 60647, -1000, 17894, -203, -213, 1096, -1000, -1000, -1000, -1000, + -1000, 1450, 1729, 1721, 2768, -1000, 60647, -1000, -1000, 6496, + 2493, 2560, 2556, -1000, 232, 232, 1462, -1000, -1000, 59870, + -338, 958, 8368, -1000, 2233, 2229, 2677, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -556, 1489, -1000, -1000, -1000, 5249, + -328, -1000, 24905, -1000, 24905, -1000, 1675, 6370, -1000, 8895, + 31121, 988, -1000, 1038, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 2524, 69, -1000, 2710, -1000, 2703, 984, 984, -1000, 1224, + -556, -1000, -1000, -1000, 2768, 2768, -1000, 1079, 1077, -1000, + 24905, 24905, -1000, 5482, -1000, -1000, -1000, -1000, 843, -1000, + -1000, -1000, -1000, 6935, -352, -1000, -1000, -1000, -1000, -1000, + 475, 1318, -1000, -1000, -1000, -1000, -1000, 1031, 6496, -1000, + 1363, 2768, -1000, 31121, -1000, -1000, 8368, -1000, -1000, -1000, + 490, 6496, 6496, -1000, -1000, 251, -1000, 6496, 251, -1000, + -1000, } var yyPgo = [...]int{ - 0, 3275, 3274, 29, 9, 39, 38, 3273, 3268, 3267, - 174, 3265, 3264, 3263, 3261, 3250, 3249, 2765, 2750, 2735, - 3248, 3247, 3246, 3245, 3244, 3241, 3240, 3239, 3237, 45, - 93, 179, 102, 235, 208, 3236, 3234, 170, 161, 195, - 3233, 3231, 3229, 114, 178, 83, 82, 187, 3227, 3226, - 76, 3225, 3224, 3222, 193, 192, 189, 1045, 3221, 191, - 112, 43, 3220, 3218, 3216, 3215, 3214, 3211, 3209, 3206, - 3200, 3199, 3198, 3196, 3195, 3192, 3190, 3189, 3188, 3187, - 278, 3184, 3182, 14, 3181, 67, 3180, 3179, 3178, 3175, - 3173, 5, 3172, 3171, 32, 40, 60, 3170, 3169, 44, - 3163, 3162, 3160, 3158, 3156, 78, 3155, 13, 3153, 36, - 3150, 3149, 123, 3147, 3144, 3143, 46, 3140, 3136, 3131, - 11, 165, 3130, 3125, 138, 3121, 3119, 3116, 166, 188, - 3115, 2406, 3113, 97, 3112, 3111, 3110, 163, 183, 3109, - 117, 3102, 3092, 3091, 146, 3090, 3927, 3087, 3084, 63, - 65, 164, 3081, 3080, 199, 6, 62, 3078, 21, 19, - 3076, 3072, 64, 68, 3071, 110, 3070, 3069, 100, 72, - 3066, 98, 92, 3060, 3059, 8, 10, 3058, 1, 4, - 2, 94, 3057, 3056, 108, 3054, 3052, 3051, 95, 3050, - 3049, 5226, 3045, 84, 130, 101, 85, 3041, 171, 150, - 3040, 3037, 3036, 3035, 3032, 3016, 49, 3014, 3013, 3011, - 136, 1262, 106, 3010, 3007, 148, 346, 127, 51, 128, - 3006, 151, 3005, 213, 77, 3004, 167, 3001, 3000, 135, - 131, 2999, 2994, 55, 169, 196, 2993, 91, 126, 116, - 198, 90, 129, 2989, 2986, 56, 61, 2984, 2980, 2974, - 2971, 180, 2969, 2965, 58, 2963, 54, 2962, 168, 2959, - 331, 69, 2956, 185, 157, 2952, 74, 2950, 2947, 70, - 104, 71, 30, 2931, 156, 160, 122, 162, 2930, 2923, - 53, 2921, 2918, 2912, 194, 277, 2911, 2909, 312, 177, - 140, 144, 87, 2905, 352, 2903, 2902, 2898, 25, 5195, - 7505, 176, 34, 158, 2892, 2890, 1046, 47, 52, 15, - 2889, 210, 2883, 207, 2876, 2870, 2867, 197, 209, 107, - 159, 57, 2861, 2859, 2858, 2857, 41, 2856, 2853, 2851, - 2848, 2847, 2845, 35, 33, 31, 73, 186, 59, 26, - 96, 154, 149, 66, 2844, 2837, 2832, 120, 81, 2824, - 153, 152, 121, 103, 2822, 175, 141, 113, 2819, 118, - 27, 2818, 2817, 2816, 2814, 89, 2807, 2804, 2799, 2798, - 147, 142, 119, 79, 2797, 80, 115, 145, 143, 50, - 2796, 37, 2795, 2794, 24, 184, 28, 2790, 16, 105, - 111, 2788, 6523, 2787, 12, 340, 155, 2786, 2784, 7, - 17, 20, 2783, 2782, 2781, 2779, 132, 2778, 2774, 2773, - 2770, 23, 42, 22, 18, 99, 137, 75, 2769, 2749, - 139, 2745, 2741, 2739, 0, 1040, 125, 2737, 200, + 0, 3480, 3479, 41, 8, 60, 59, 3476, 2731, 3475, + 3472, 2758, 3471, 202, 3468, 3467, 3465, 3464, 3463, 3460, + 204, 203, 199, 3458, 3456, 3451, 3448, 3447, 3446, 3444, + 3441, 3433, 45, 107, 62, 117, 217, 226, 3430, 3429, + 42, 186, 216, 3428, 3423, 3422, 3421, 3417, 130, 213, + 99, 101, 214, 3416, 3414, 90, 3412, 3410, 3409, 3404, + 3402, 19, 18, 36, 33, 3398, 3390, 3388, 26, 3384, + 209, 205, 201, 1160, 3381, 208, 126, 52, 3377, 3372, + 3371, 3369, 12, 10, 3368, 11, 3367, 6, 3366, 3365, + 3363, 3358, 3356, 3355, 3354, 3351, 3343, 3342, 3331, 3330, + 3320, 3318, 3294, 3293, 3292, 297, 3286, 3285, 47, 3281, + 94, 3279, 3278, 3277, 3274, 3272, 20, 3270, 3266, 28, + 48, 75, 3262, 3260, 49, 3259, 3258, 3257, 3256, 3251, + 32, 3250, 39, 3248, 80, 3247, 3246, 136, 3244, 3241, + 3228, 57, 3226, 3224, 3218, 27, 193, 3217, 3214, 161, + 3213, 3212, 3211, 190, 221, 3209, 2351, 3207, 121, 3206, + 3205, 3203, 188, 187, 223, 3201, 115, 3197, 3196, 3192, + 3188, 145, 3186, 3185, 4599, 3182, 3179, 16, 21, 140, + 3178, 3177, 166, 14, 77, 3176, 9, 4, 3175, 3172, + 17, 88, 3167, 113, 3166, 3165, 116, 78, 3164, 108, + 111, 3163, 3162, 25, 15, 3159, 1, 3, 2, 81, + 3158, 3155, 124, 3147, 3145, 3144, 106, 3143, 3140, 4579, + 3138, 102, 146, 112, 92, 3137, 183, 72, 3136, 3132, + 3129, 3127, 3123, 3122, 63, 3120, 3119, 3117, 158, 191, + 118, 3115, 3110, 149, 366, 144, 64, 148, 3107, 173, + 3106, 147, 96, 3083, 194, 3076, 3071, 154, 156, 3068, + 3067, 71, 181, 206, 3059, 110, 141, 128, 143, 104, + 160, 3044, 3043, 3036, 73, 85, 3035, 3031, 3025, 3024, + 195, 3019, 3018, 83, 3017, 70, 3016, 192, 3005, 330, + 76, 3003, 189, 178, 3001, 86, 185, 2999, 2998, 2986, + 82, 133, 84, 69, 2985, 175, 182, 137, 179, 2983, + 2974, 66, 2972, 2969, 2965, 215, 320, 2963, 2960, 291, + 196, 163, 150, 100, 2958, 222, 2952, 2948, 2947, 29, + 5792, 8106, 211, 44, 184, 2944, 2933, 9925, 30, 46, + 43, 2932, 219, 2931, 142, 2927, 2922, 2917, 218, 224, + 120, 180, 74, 2904, 2901, 2896, 2891, 37, 2885, 2883, + 2882, 2881, 2877, 2875, 58, 56, 55, 89, 237, 79, + 24, 109, 177, 172, 87, 2874, 2871, 2868, 134, 103, + 2862, 174, 171, 138, 132, 2858, 198, 164, 127, 2854, + 65, 54, 2852, 2851, 2846, 2842, 105, 2838, 2837, 2835, + 2832, 169, 165, 131, 97, 2831, 98, 122, 170, 168, + 61, 2830, 50, 2806, 2805, 53, 212, 68, 2800, 2799, + 2796, 40, 2795, 31, 119, 125, 2793, 7762, 2790, 34, + 283, 167, 2786, 2779, 13, 23, 22, 2778, 2771, 2768, + 2766, 152, 2764, 2760, 2756, 2755, 38, 51, 35, 7, + 123, 159, 95, 2754, 2746, 162, 2737, 2735, 0, 1830, + 139, 2732, 227, } -//line sql.y:8828 +//line sql.y:9281 type yySymType struct { union any empty struct{} @@ -8002,6 +8720,16 @@ func (st *yySymType) comparisonExprOperatorUnion() ComparisonExprOperator { return v } +func (st *yySymType) compoundStatementUnion() CompoundStatement { + v, _ := st.union.(CompoundStatement) + return v +} + +func (st *yySymType) compoundStatementsUnion() *CompoundStatements { + v, _ := st.union.(*CompoundStatements) + return v +} + func (st *yySymType) constraintDefinitionUnion() *ConstraintDefinition { v, _ := st.union.(*ConstraintDefinition) return v @@ -8022,11 +8750,21 @@ func (st *yySymType) createDatabaseUnion() *CreateDatabase { return v } +func (st *yySymType) createProcedureUnion() *CreateProcedure { + v, _ := st.union.(*CreateProcedure) + return v +} + func (st *yySymType) createTableUnion() *CreateTable { v, _ := st.union.(*CreateTable) return v } +func (st *yySymType) createViewUnion() *CreateView { + v, _ := st.union.(*CreateView) + return v +} + func (st *yySymType) cteUnion() *CommonTableExpr { v, _ := st.union.(*CommonTableExpr) return v @@ -8052,6 +8790,16 @@ func (st *yySymType) derivedTableUnion() *DerivedTable { return v } +func (st *yySymType) elseIfUnion() *ElseIfBlock { + v, _ := st.union.(*ElseIfBlock) + return v +} + +func (st *yySymType) elseIfsUnion() []*ElseIfBlock { + v, _ := st.union.([]*ElseIfBlock) + return v +} + func (st *yySymType) explainTypeUnion() ExplainType { v, _ := st.union.(ExplainType) return v @@ -8107,6 +8855,21 @@ func (st *yySymType) groupByUnion() *GroupBy { return v } +func (st *yySymType) handlerActionUnion() HandlerAction { + v, _ := st.union.(HandlerAction) + return v +} + +func (st *yySymType) handlerConditionUnion() HandlerCondition { + v, _ := st.union.(HandlerCondition) + return v +} + +func (st *yySymType) handlerConditionsUnion() []HandlerCondition { + v, _ := st.union.([]HandlerCondition) + return v +} + func (st *yySymType) ignoreUnion() Ignore { v, _ := st.union.(Ignore) return v @@ -8352,6 +9115,21 @@ func (st *yySymType) partitionsUnion() Partitions { return v } +func (st *yySymType) procParamUnion() *ProcParameter { + v, _ := st.union.(*ProcParameter) + return v +} + +func (st *yySymType) procParamModeUnion() ProcParameterMode { + v, _ := st.union.(ProcParameterMode) + return v +} + +func (st *yySymType) procParamsUnion() []*ProcParameter { + v, _ := st.union.([]*ProcParameter) + return v +} + func (st *yySymType) referenceActionUnion() ReferenceAction { v, _ := st.union.(ReferenceAction) return v @@ -8417,6 +9195,21 @@ func (st *yySymType) showFilterUnion() *ShowFilter { return v } +func (st *yySymType) signalConditionNameUnion() SignalConditionName { + v, _ := st.union.(SignalConditionName) + return v +} + +func (st *yySymType) signalSetUnion() *SignalSet { + v, _ := st.union.(*SignalSet) + return v +} + +func (st *yySymType) signalSetsUnion() []*SignalSet { + v, _ := st.union.([]*SignalSet) + return v +} + func (st *yySymType) starExprUnion() StarExpr { v, _ := st.union.(StarExpr) return v @@ -8427,6 +9220,11 @@ func (st *yySymType) statementUnion() Statement { return v } +func (st *yySymType) statementsUnion() []Statement { + v, _ := st.union.([]Statement) + return v +} + func (st *yySymType) subPartitionUnion() *SubPartition { v, _ := st.union.(*SubPartition) return v @@ -8583,407 +9381,429 @@ func (st *yySymType) withUnion() *With { } var yyR1 = [...]int{ - 0, 422, 423, 423, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 266, 392, 264, 264, 28, 75, 37, 37, 36, - 36, 39, 39, 38, 31, 31, 31, 32, 32, 32, - 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, - 29, 29, 29, 29, 30, 30, 30, 30, 30, 35, - 35, 15, 16, 34, 34, 34, 17, 17, 110, 110, - 18, 19, 19, 19, 19, 426, 426, 186, 186, 184, - 184, 185, 185, 269, 269, 20, 273, 273, 275, 275, - 275, 275, 265, 265, 265, 21, 21, 274, 274, 276, - 276, 276, 279, 279, 279, 279, 320, 320, 320, 22, - 22, 22, 22, 22, 130, 130, 394, 394, 393, 388, - 388, 387, 387, 386, 391, 391, 390, 390, 389, 41, - 42, 51, 51, 51, 51, 52, 53, 395, 395, 361, - 58, 58, 57, 57, 57, 57, 57, 57, 59, 59, - 55, 55, 54, 54, 56, 56, 363, 363, 349, 349, - 362, 362, 362, 362, 362, 362, 362, 348, 348, 141, - 141, 243, 243, 243, 243, 243, 243, 243, 243, 243, - 243, 243, 243, 243, 243, 243, 243, 243, 410, 410, - 410, 410, 409, 409, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 150, 150, 162, 162, 162, 162, 162, - 162, 148, 148, 149, 147, 147, 147, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 161, 161, 156, 156, 156, - 158, 158, 157, 157, 157, 159, 159, 411, 411, 411, - 411, 326, 326, 326, 326, 329, 329, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 328, 328, 328, 328, - 328, 328, 328, 330, 330, 330, 330, 330, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 332, 332, 332, 332, 332, - 332, 332, 332, 347, 347, 336, 336, 341, 341, 342, - 342, 343, 343, 343, 344, 344, 344, 345, 345, 338, - 338, 338, 338, 338, 338, 338, 338, 338, 340, 340, - 339, 339, 339, 350, 375, 375, 374, 374, 372, 372, - 372, 372, 372, 372, 372, 372, 359, 359, 369, 369, - 369, 369, 369, 358, 358, 354, 354, 354, 355, 355, - 356, 356, 353, 353, 357, 357, 371, 371, 370, 370, - 351, 351, 352, 352, 377, 412, 412, 412, 412, 412, - 413, 413, 378, 402, 404, 404, 404, 403, 403, 400, - 401, 399, 399, 399, 399, 399, 85, 85, 85, 292, - 292, 293, 293, 367, 367, 366, 366, 366, 368, 368, - 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, - 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, - 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, - 365, 287, 287, 287, 398, 398, 398, 398, 398, 398, - 397, 397, 397, 364, 364, 364, 364, 396, 396, 60, - 60, 224, 224, 415, 415, 417, 417, 417, 48, 48, - 48, 48, 48, 48, 47, 47, 47, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, 49, 49, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 112, 112, 113, 113, 113, 113, - 115, 115, 115, 380, 380, 61, 61, 3, 3, 174, - 176, 177, 177, 175, 175, 175, 175, 175, 175, 63, - 63, 62, 62, 179, 178, 180, 180, 180, 1, 1, - 2, 2, 4, 4, 385, 385, 385, 385, 385, 385, - 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, - 385, 385, 385, 385, 385, 385, 346, 346, 346, 379, - 379, 381, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 118, 117, 117, 116, 119, 119, 119, 119, - 119, 119, 119, 119, 383, 383, 383, 64, 64, 384, - 333, 334, 335, 5, 6, 360, 382, 126, 126, 24, - 40, 40, 25, 25, 25, 25, 26, 26, 65, 68, - 68, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 297, 297, 286, - 286, 295, 295, 285, 285, 311, 311, 311, 288, 288, - 288, 289, 289, 408, 408, 408, 282, 282, 67, 67, - 67, 312, 312, 312, 312, 70, 70, 418, 418, 419, - 419, 420, 420, 420, 71, 72, 72, 315, 315, 316, - 316, 73, 74, 86, 86, 86, 86, 86, 87, 87, - 87, 87, 87, 87, 111, 111, 111, 10, 10, 10, - 10, 82, 82, 82, 9, 9, 11, 69, 69, 76, - 405, 405, 406, 407, 407, 407, 407, 77, 79, 27, - 27, 27, 27, 27, 27, 136, 136, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, 124, 131, - 131, 131, 125, 125, 427, 80, 81, 81, 129, 129, - 129, 122, 122, 122, 128, 128, 128, 12, 12, 13, - 268, 268, 14, 14, 135, 135, 134, 134, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 132, - 132, 133, 133, 133, 133, 304, 304, 304, 303, 303, - 168, 168, 170, 169, 169, 171, 171, 172, 172, 172, - 172, 222, 222, 194, 194, 261, 261, 262, 262, 260, - 260, 267, 267, 263, 263, 263, 263, 270, 270, 173, - 173, 173, 173, 181, 181, 182, 182, 183, 183, 314, - 314, 309, 309, 309, 308, 308, 187, 187, 187, 189, - 188, 188, 188, 188, 190, 190, 192, 192, 191, 191, - 193, 198, 198, 197, 197, 195, 195, 195, 195, 195, - 195, 196, 196, 196, 196, 199, 199, 146, 146, 146, - 146, 146, 146, 146, 146, 416, 416, 160, 160, 160, - 160, 160, 160, 160, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 251, 251, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 154, 154, 154, 154, 154, 154, 154, 154, - 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, - 154, 154, 154, 154, 154, 154, 154, 227, 227, 226, - 226, 88, 88, 88, 89, 89, 90, 90, 90, 90, - 90, 91, 91, 91, 91, 91, 91, 91, 93, 93, - 92, 92, 213, 213, 301, 301, 94, 95, 95, 96, - 96, 99, 99, 98, 97, 97, 103, 103, 100, 100, - 102, 102, 101, 104, 104, 105, 106, 106, 283, 283, - 200, 200, 209, 209, 209, 209, 201, 201, 202, 202, - 202, 202, 202, 202, 210, 210, 210, 221, 211, 211, - 207, 207, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 165, 165, 165, 165, - 232, 232, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 153, 153, 166, - 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, - 322, 322, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 428, 428, 337, 337, 337, 208, 208, 208, 208, 208, - 127, 127, 127, 127, 127, 319, 319, 319, 323, 323, - 323, 321, 321, 321, 321, 321, 321, 321, 321, 321, - 321, 321, 321, 321, 321, 321, 324, 324, 230, 230, - 123, 123, 228, 228, 229, 231, 231, 223, 223, 223, - 223, 225, 225, 204, 204, 204, 233, 233, 325, 325, - 234, 234, 107, 108, 108, 109, 109, 235, 235, 237, - 236, 236, 238, 239, 239, 239, 240, 240, 241, 241, - 241, 50, 50, 50, 50, 50, 45, 45, 45, 45, - 46, 46, 46, 46, 138, 138, 138, 138, 140, 140, - 139, 139, 83, 83, 84, 84, 84, 144, 144, 145, - 145, 145, 142, 142, 143, 143, 258, 258, 258, 258, - 258, 258, 258, 242, 242, 242, 249, 249, 249, 245, - 245, 247, 247, 247, 248, 248, 248, 246, 255, 255, - 257, 257, 256, 256, 252, 252, 253, 253, 254, 254, - 254, 250, 250, 203, 203, 203, 203, 203, 259, 259, - 259, 259, 313, 313, 313, 271, 271, 214, 214, 215, - 215, 219, 219, 218, 218, 216, 217, 220, 220, 164, - 272, 272, 280, 277, 277, 278, 278, 305, 305, 305, - 281, 281, 294, 294, 290, 290, 291, 291, 284, 284, - 296, 296, 296, 78, 212, 212, 376, 376, 373, 300, - 300, 302, 302, 306, 306, 310, 310, 307, 307, 8, - 421, 421, 421, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 424, 425, 317, 318, 318, 318, + 0, 457, 7, 7, 11, 9, 9, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 82, 82, 82, 82, 82, 82, 82, + 66, 66, 67, 67, 68, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 59, 59, 59, + 60, 60, 62, 62, 65, 65, 63, 64, 61, 61, + 61, 61, 61, 170, 170, 273, 273, 273, 83, 81, + 81, 84, 84, 85, 85, 86, 86, 89, 89, 88, + 88, 87, 295, 427, 293, 293, 31, 100, 40, 40, + 39, 39, 42, 42, 41, 34, 34, 34, 35, 35, + 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, + 36, 32, 32, 32, 32, 33, 33, 33, 33, 33, + 38, 38, 18, 19, 37, 37, 37, 20, 20, 135, + 135, 21, 22, 22, 22, 22, 460, 460, 214, 214, + 212, 212, 213, 213, 300, 300, 23, 304, 304, 306, + 306, 306, 306, 294, 294, 294, 24, 24, 305, 305, + 307, 307, 307, 310, 310, 310, 310, 351, 351, 351, + 25, 25, 25, 25, 25, 25, 155, 429, 429, 428, + 423, 423, 422, 422, 421, 426, 426, 425, 425, 424, + 45, 44, 46, 46, 46, 47, 56, 56, 56, 56, + 57, 58, 430, 430, 392, 74, 74, 73, 73, 73, + 73, 73, 73, 75, 75, 71, 71, 70, 70, 72, + 72, 394, 394, 380, 380, 393, 393, 393, 393, 393, + 393, 393, 379, 379, 167, 167, 271, 271, 271, 271, + 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + 271, 271, 271, 445, 445, 445, 445, 444, 444, 272, + 272, 272, 272, 272, 272, 272, 272, 272, 178, 178, + 190, 190, 190, 190, 190, 190, 176, 176, 177, 175, + 175, 175, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 449, 449, + 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, + 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, + 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, + 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, + 189, 189, 184, 184, 184, 186, 186, 185, 185, 185, + 187, 187, 446, 446, 446, 446, 357, 357, 357, 357, + 360, 360, 358, 358, 358, 358, 358, 358, 358, 358, + 358, 359, 359, 359, 359, 359, 359, 359, 361, 361, + 361, 361, 361, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 363, 363, 363, 363, 363, 363, 363, 363, 378, 378, + 367, 367, 372, 372, 373, 373, 374, 374, 374, 375, + 375, 375, 376, 376, 369, 369, 369, 369, 369, 369, + 369, 369, 369, 371, 371, 370, 370, 370, 381, 406, + 406, 405, 405, 403, 403, 403, 403, 403, 403, 403, + 403, 390, 390, 400, 400, 400, 400, 400, 389, 389, + 385, 385, 385, 386, 386, 387, 387, 384, 384, 388, + 388, 402, 402, 401, 401, 382, 382, 383, 383, 408, + 447, 447, 447, 447, 447, 448, 448, 409, 437, 439, + 439, 439, 438, 438, 435, 436, 434, 434, 434, 434, + 434, 110, 110, 110, 323, 323, 324, 324, 398, 398, + 397, 397, 397, 399, 399, 396, 396, 396, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, + 396, 396, 396, 396, 396, 396, 318, 318, 318, 433, + 433, 433, 433, 433, 433, 432, 432, 432, 395, 395, + 395, 395, 431, 431, 76, 76, 252, 252, 450, 450, + 452, 452, 452, 53, 53, 53, 53, 53, 53, 52, + 52, 52, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 54, 54, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 137, + 137, 138, 138, 138, 138, 140, 140, 140, 411, 411, + 77, 77, 3, 3, 202, 204, 205, 205, 203, 203, + 203, 203, 203, 203, 79, 79, 78, 78, 207, 206, + 208, 208, 208, 1, 1, 2, 2, 4, 4, 416, + 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, + 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, + 416, 377, 377, 377, 410, 410, 412, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 143, 142, 142, + 141, 144, 144, 144, 144, 144, 144, 144, 144, 414, + 414, 414, 80, 80, 415, 364, 365, 366, 5, 6, + 391, 413, 151, 151, 27, 43, 43, 28, 28, 28, + 28, 28, 29, 29, 90, 93, 93, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 328, 328, 317, 317, 326, 326, 316, + 316, 342, 342, 342, 319, 319, 319, 320, 320, 443, + 443, 443, 313, 313, 92, 92, 92, 343, 343, 343, + 343, 95, 95, 453, 453, 454, 454, 455, 455, 455, + 96, 97, 97, 346, 346, 347, 347, 98, 99, 111, + 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, + 136, 136, 136, 13, 13, 13, 13, 107, 107, 107, + 12, 12, 14, 94, 94, 101, 440, 440, 441, 442, + 442, 442, 442, 102, 104, 30, 30, 30, 30, 30, + 30, 161, 161, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 156, 156, 156, 150, 150, + 461, 105, 106, 106, 154, 154, 154, 147, 147, 147, + 153, 153, 153, 15, 15, 16, 298, 298, 17, 17, + 160, 160, 159, 159, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 157, 157, 158, 158, 158, + 158, 335, 335, 335, 334, 334, 196, 196, 198, 197, + 197, 199, 199, 200, 200, 200, 200, 250, 250, 222, + 222, 290, 290, 291, 291, 289, 289, 297, 297, 292, + 292, 292, 292, 301, 301, 201, 201, 201, 201, 209, + 209, 210, 210, 211, 211, 345, 345, 340, 340, 340, + 339, 339, 215, 215, 215, 217, 216, 216, 216, 216, + 218, 218, 220, 220, 219, 219, 221, 226, 226, 225, + 225, 223, 223, 223, 223, 223, 223, 224, 224, 224, + 224, 227, 227, 174, 174, 174, 174, 174, 174, 174, + 174, 451, 451, 188, 188, 188, 188, 188, 188, 188, + 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, + 191, 280, 280, 179, 179, 179, 179, 179, 179, 179, + 179, 179, 179, 179, 179, 179, 179, 179, 182, 182, + 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, + 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, + 182, 182, 182, 255, 255, 254, 254, 113, 113, 113, + 114, 114, 115, 115, 115, 115, 115, 116, 116, 116, + 116, 116, 116, 116, 118, 118, 117, 117, 241, 241, + 332, 332, 119, 120, 120, 121, 121, 124, 124, 123, + 122, 122, 128, 128, 125, 125, 127, 127, 126, 129, + 129, 130, 131, 131, 314, 314, 228, 228, 237, 237, + 237, 237, 229, 229, 230, 230, 230, 230, 230, 230, + 238, 238, 238, 249, 239, 239, 235, 235, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 193, 193, 193, 193, 260, 260, 180, 180, + 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, + 180, 180, 180, 181, 181, 194, 194, 194, 194, 195, + 195, 195, 195, 195, 195, 195, 353, 353, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 462, 462, 368, 368, + 368, 236, 236, 236, 236, 236, 152, 152, 152, 152, + 152, 350, 350, 350, 354, 354, 354, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 355, 355, 258, 258, 148, 148, 256, 256, + 257, 259, 259, 251, 251, 251, 251, 253, 253, 232, + 232, 232, 261, 261, 356, 356, 262, 262, 132, 133, + 133, 134, 134, 263, 263, 265, 264, 264, 266, 267, + 267, 267, 268, 268, 269, 269, 269, 55, 55, 55, + 55, 55, 50, 50, 50, 50, 51, 51, 51, 51, + 163, 163, 164, 164, 164, 166, 166, 165, 165, 108, + 108, 109, 109, 109, 420, 420, 419, 419, 417, 418, + 418, 418, 418, 171, 171, 172, 173, 173, 173, 168, + 168, 169, 169, 287, 287, 287, 287, 287, 287, 287, + 270, 270, 270, 270, 299, 299, 296, 296, 278, 278, + 278, 274, 274, 276, 276, 276, 277, 277, 277, 275, + 284, 284, 286, 286, 285, 285, 281, 281, 282, 282, + 283, 283, 283, 279, 279, 231, 231, 231, 231, 231, + 288, 288, 288, 288, 344, 344, 344, 302, 302, 242, + 242, 243, 243, 247, 247, 246, 246, 244, 245, 248, + 248, 192, 303, 303, 311, 308, 308, 309, 309, 336, + 336, 336, 312, 312, 325, 325, 321, 321, 322, 322, + 315, 315, 327, 327, 327, 103, 240, 240, 407, 407, + 404, 331, 331, 333, 333, 337, 337, 341, 341, 338, + 338, 10, 456, 456, 456, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 458, 459, 348, 349, 349, 349, } var yyR2 = [...]int{ - 0, 3, 0, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 3, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 1, 1, 1, 1, 2, 3, 2, 3, 0, - 1, 3, 1, 4, 3, 3, 4, 3, 2, 3, - 4, 3, 4, 2, 7, 1, 3, 3, 3, 3, - 1, 2, 1, 1, 3, 2, 3, 3, 2, 3, - 3, 5, 7, 10, 9, 1, 7, 8, 1, 1, - 10, 11, 9, 8, 8, 1, 1, 1, 3, 1, - 3, 1, 3, 0, 4, 3, 1, 3, 3, 3, - 3, 3, 1, 1, 2, 5, 4, 1, 3, 3, - 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, - 2, 6, 12, 2, 0, 2, 0, 2, 1, 0, - 2, 1, 3, 3, 0, 1, 1, 3, 3, 6, - 4, 7, 8, 8, 8, 5, 3, 1, 1, 5, - 0, 1, 1, 1, 1, 2, 2, 2, 0, 1, - 4, 4, 4, 4, 4, 4, 2, 4, 1, 3, - 1, 1, 3, 4, 3, 3, 3, 5, 10, 0, - 2, 0, 2, 3, 5, 3, 4, 2, 3, 2, - 3, 3, 3, 3, 2, 2, 4, 4, 1, 1, - 1, 1, 1, 1, 0, 2, 2, 3, 3, 2, - 3, 2, 2, 1, 1, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 8, 4, 6, 5, 3, + 0, 1, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, + 1, 2, 1, 0, 1, 0, 4, 2, 2, 1, + 1, 0, 1, 1, 2, 0, 2, 0, 1, 2, + 1, 4, 1, 1, 1, 1, 2, 3, 2, 3, + 0, 1, 3, 1, 4, 3, 3, 4, 3, 2, + 3, 4, 3, 4, 2, 7, 1, 3, 3, 3, + 3, 1, 2, 1, 1, 3, 2, 3, 3, 2, + 3, 3, 5, 7, 10, 9, 1, 7, 8, 1, + 1, 10, 11, 9, 8, 8, 1, 1, 1, 3, + 1, 3, 1, 3, 0, 4, 3, 1, 3, 3, + 3, 3, 3, 1, 1, 2, 5, 4, 1, 3, + 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 2, 2, 1, 6, 5, 2, 2, 0, 2, 1, + 0, 2, 1, 3, 3, 0, 1, 1, 3, 3, + 10, 6, 6, 8, 7, 4, 7, 8, 8, 8, + 5, 3, 1, 1, 5, 0, 1, 1, 1, 1, + 2, 2, 2, 0, 1, 4, 4, 4, 4, 4, + 4, 2, 4, 1, 3, 1, 1, 3, 4, 3, + 3, 3, 5, 10, 0, 2, 0, 2, 3, 5, + 3, 4, 2, 3, 2, 3, 3, 3, 3, 2, + 2, 4, 4, 1, 1, 1, 1, 1, 1, 0, + 2, 2, 3, 3, 2, 3, 2, 2, 1, 1, + 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, - 1, 3, 1, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 1, 2, 2, 2, 2, 3, 3, - 3, 2, 2, 3, 2, 2, 2, 2, 1, 1, - 1, 1, 5, 2, 5, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 0, 3, 0, 5, 1, - 3, 0, 3, 5, 0, 1, 1, 0, 1, 0, - 3, 3, 2, 2, 2, 1, 2, 2, 0, 1, - 0, 2, 2, 5, 0, 1, 1, 2, 1, 3, - 2, 1, 1, 3, 3, 3, 0, 1, 4, 3, - 3, 4, 2, 0, 2, 1, 1, 1, 1, 1, - 0, 1, 1, 1, 0, 1, 1, 3, 3, 4, - 3, 1, 3, 1, 7, 6, 7, 7, 8, 8, - 0, 1, 5, 2, 1, 1, 1, 0, 1, 3, - 3, 1, 1, 2, 2, 2, 0, 1, 1, 1, - 2, 0, 1, 0, 1, 1, 3, 2, 1, 2, - 3, 3, 3, 4, 4, 3, 3, 3, 3, 4, - 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, - 5, 0, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 1, 1, 1, 0, 1, 0, - 1, 0, 2, 0, 2, 0, 2, 2, 0, 1, - 5, 1, 3, 7, 1, 3, 3, 1, 2, 2, - 2, 5, 5, 5, 6, 8, 5, 5, 4, 4, - 4, 6, 5, 5, 5, 2, 2, 2, 2, 3, - 3, 3, 4, 3, 3, 1, 3, 5, 1, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, - 3, 4, 4, 2, 11, 3, 6, 8, 6, 6, - 6, 13, 8, 6, 6, 10, 7, 5, 5, 5, - 5, 7, 5, 5, 5, 5, 5, 7, 7, 5, - 5, 5, 5, 6, 0, 6, 5, 6, 4, 5, - 0, 8, 9, 0, 3, 0, 1, 0, 3, 8, - 4, 1, 3, 3, 6, 7, 7, 8, 4, 0, - 1, 0, 1, 3, 3, 1, 1, 2, 1, 1, - 0, 2, 0, 2, 5, 3, 7, 4, 4, 4, - 4, 3, 3, 3, 7, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 2, 0, 2, 2, 1, - 3, 2, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 1, 3, 3, 0, 2, 2, 2, - 2, 2, 2, 2, 4, 4, 3, 0, 1, 4, - 3, 4, 4, 3, 3, 3, 2, 1, 3, 3, - 3, 5, 7, 7, 6, 5, 3, 2, 4, 5, - 5, 3, 3, 7, 3, 3, 3, 3, 4, 7, - 5, 2, 4, 4, 4, 4, 4, 5, 5, 4, - 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, - 4, 4, 4, 4, 2, 3, 3, 3, 3, 3, - 5, 2, 3, 3, 2, 3, 4, 4, 4, 3, - 4, 4, 5, 3, 5, 3, 5, 0, 1, 0, - 1, 0, 1, 1, 1, 0, 2, 2, 0, 2, - 2, 0, 2, 0, 1, 1, 1, 1, 2, 1, - 3, 1, 1, 1, 1, 1, 3, 0, 1, 1, - 3, 3, 2, 2, 1, 1, 5, 0, 1, 0, - 1, 2, 3, 0, 3, 3, 3, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 1, 1, 4, 4, 4, 2, 2, 3, - 1, 3, 2, 1, 2, 1, 2, 2, 4, 3, - 3, 6, 4, 7, 6, 1, 3, 2, 2, 2, - 2, 1, 1, 1, 3, 2, 1, 1, 1, 0, - 1, 1, 0, 3, 0, 2, 0, 2, 1, 2, - 2, 0, 1, 1, 0, 1, 1, 5, 5, 4, - 0, 2, 4, 4, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 1, 2, 3, 5, 0, 1, 2, 1, 1, - 0, 1, 2, 1, 3, 1, 1, 1, 4, 3, - 1, 1, 2, 3, 7, 0, 3, 0, 1, 1, - 3, 1, 3, 1, 1, 3, 3, 1, 3, 4, - 4, 4, 3, 2, 4, 0, 1, 0, 2, 0, - 1, 0, 1, 2, 1, 1, 1, 2, 2, 1, - 2, 3, 2, 3, 2, 2, 2, 1, 1, 3, - 3, 0, 1, 1, 2, 6, 5, 6, 6, 5, - 5, 0, 2, 3, 3, 0, 2, 3, 3, 3, - 2, 3, 1, 3, 6, 1, 1, 3, 4, 3, - 4, 4, 4, 1, 3, 4, 5, 6, 3, 4, - 5, 6, 3, 4, 1, 1, 1, 3, 3, 3, - 3, 3, 3, 5, 5, 3, 3, 3, 3, 3, - 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, - 2, 2, 2, 2, 1, 1, 2, 7, 7, 6, - 6, 2, 2, 5, 6, 3, 3, 1, 3, 1, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 4, 2, 4, 0, 1, - 2, 5, 0, 3, 0, 1, 4, 4, 2, 1, - 0, 0, 1, 1, 2, 2, 1, 1, 2, 2, - 0, 1, 1, 1, 1, 5, 1, 3, 0, 3, - 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, + 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, + 2, 2, 2, 3, 3, 3, 2, 2, 3, 2, + 2, 2, 2, 1, 1, 1, 1, 5, 2, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 4, 6, 4, 4, 8, 8, 6, 8, 6, 5, - 4, 10, 2, 2, 1, 2, 2, 2, 2, 2, - 5, 6, 6, 6, 6, 6, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 8, 4, 8, 8, - 6, 5, 4, 4, 4, 5, 7, 4, 4, 7, - 4, 4, 6, 6, 6, 8, 6, 6, 4, 4, - 3, 4, 6, 6, 4, 4, 6, 4, 6, 4, - 4, 4, 4, 4, 4, 6, 4, 6, 4, 4, - 4, 6, 4, 6, 4, 4, 6, 4, 6, 4, - 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, + 0, 3, 0, 5, 1, 3, 0, 3, 5, 0, + 1, 1, 0, 1, 0, 3, 3, 2, 2, 2, + 1, 2, 2, 0, 1, 0, 2, 2, 5, 0, + 1, 1, 2, 1, 3, 2, 1, 1, 3, 3, + 3, 0, 1, 4, 3, 3, 4, 2, 0, 2, + 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, + 1, 1, 3, 3, 4, 3, 1, 3, 1, 7, + 6, 7, 7, 8, 8, 0, 1, 5, 2, 1, + 1, 1, 0, 1, 3, 3, 1, 1, 2, 2, + 2, 0, 1, 1, 1, 2, 0, 1, 0, 1, + 1, 3, 2, 1, 2, 3, 3, 3, 4, 4, + 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 4, 5, 0, 2, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, + 1, 1, 0, 1, 0, 1, 0, 2, 0, 2, + 0, 2, 2, 0, 1, 5, 1, 3, 7, 1, + 3, 3, 1, 2, 2, 2, 5, 5, 5, 6, + 8, 5, 5, 4, 4, 4, 6, 5, 5, 5, + 2, 2, 2, 2, 3, 3, 3, 4, 3, 3, + 1, 3, 5, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 2, 3, 4, 4, 2, 11, + 3, 6, 8, 6, 6, 6, 13, 8, 6, 6, + 10, 7, 5, 5, 5, 5, 7, 5, 5, 5, + 5, 5, 7, 7, 5, 5, 5, 5, 6, 0, + 6, 5, 6, 4, 5, 0, 8, 9, 0, 3, + 0, 1, 0, 3, 8, 4, 1, 3, 3, 6, + 7, 7, 8, 4, 0, 1, 0, 1, 3, 3, + 1, 1, 2, 1, 1, 0, 2, 0, 2, 5, + 3, 7, 4, 4, 4, 4, 3, 3, 3, 7, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 0, 2, 2, 1, 3, 2, 0, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 1, 3, + 3, 0, 2, 2, 2, 2, 2, 2, 2, 4, + 4, 3, 0, 1, 4, 3, 4, 4, 3, 3, + 3, 2, 1, 3, 3, 3, 5, 7, 7, 6, + 5, 5, 3, 2, 4, 5, 5, 3, 3, 7, + 3, 3, 3, 3, 4, 7, 5, 2, 4, 4, + 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, + 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, + 2, 3, 3, 3, 3, 3, 5, 2, 3, 3, + 2, 3, 4, 4, 4, 3, 4, 4, 5, 3, + 5, 3, 5, 0, 1, 0, 1, 0, 1, 1, + 1, 0, 2, 2, 0, 2, 2, 0, 2, 0, + 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, + 1, 1, 3, 0, 1, 1, 3, 3, 2, 2, + 1, 1, 5, 0, 1, 0, 1, 2, 3, 0, + 3, 3, 3, 1, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, + 4, 4, 4, 2, 2, 3, 1, 3, 2, 1, + 2, 1, 2, 2, 4, 3, 3, 6, 4, 7, + 6, 1, 3, 2, 2, 2, 2, 1, 1, 1, + 3, 2, 1, 1, 1, 0, 1, 1, 0, 3, + 0, 2, 0, 2, 1, 2, 2, 0, 1, 1, + 0, 1, 1, 5, 5, 4, 0, 2, 4, 4, + 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 1, 2, 3, + 5, 0, 1, 2, 1, 1, 0, 1, 2, 1, + 3, 1, 1, 1, 4, 3, 1, 1, 2, 3, + 7, 0, 3, 0, 1, 1, 3, 1, 3, 1, + 1, 3, 3, 1, 3, 4, 4, 4, 3, 2, + 4, 0, 1, 0, 2, 0, 1, 0, 1, 2, + 1, 1, 1, 2, 2, 1, 2, 3, 2, 3, + 2, 2, 2, 1, 1, 3, 3, 0, 1, 1, + 2, 6, 5, 6, 6, 5, 5, 0, 2, 3, + 3, 0, 2, 3, 3, 3, 2, 3, 1, 3, + 6, 1, 1, 3, 4, 3, 4, 4, 4, 1, + 3, 4, 5, 6, 3, 4, 5, 6, 3, 4, + 1, 1, 1, 3, 3, 3, 3, 3, 3, 5, + 5, 3, 3, 3, 3, 3, 3, 1, 1, 1, + 1, 1, 3, 1, 1, 1, 2, 2, 2, 2, + 1, 1, 2, 7, 7, 6, 6, 2, 2, 5, + 6, 3, 3, 1, 3, 1, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 4, 2, 4, 0, 1, 2, 5, 0, 3, + 0, 1, 4, 4, 2, 1, 0, 0, 1, 1, + 2, 2, 1, 1, 2, 2, 0, 1, 1, 1, + 1, 5, 1, 3, 0, 3, 1, 1, 1, 2, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 4, 6, 4, 4, + 8, 8, 6, 8, 6, 5, 4, 10, 2, 2, + 1, 2, 2, 2, 2, 2, 5, 6, 6, 6, + 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 8, 4, 8, 8, 6, 5, 4, 4, + 4, 5, 7, 4, 4, 7, 4, 4, 6, 6, + 6, 8, 6, 6, 4, 4, 3, 4, 6, 6, + 4, 4, 6, 4, 6, 4, 4, 4, 4, 4, + 4, 6, 4, 6, 4, 4, 4, 6, 4, 6, + 4, 4, 6, 4, 6, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, 4, 6, - 8, 4, 6, 8, 4, 6, 8, 4, 4, 4, - 6, 4, 6, 4, 8, 6, 4, 4, 6, 4, - 6, 8, 4, 6, 8, 4, 4, 6, 8, 6, - 4, 6, 6, 8, 10, 7, 8, 8, 9, 4, - 4, 4, 4, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 4, 4, 4, 4, 4, 4, 6, - 4, 6, 5, 9, 6, 9, 8, 6, 8, 8, - 8, 6, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 2, 6, 8, 10, 12, 14, 6, 8, 8, - 10, 12, 14, 6, 8, 10, 12, 6, 8, 4, - 4, 3, 4, 6, 6, 4, 6, 4, 6, 8, - 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 8, 4, 6, 8, 4, 6, 8, 4, 6, 8, + 4, 6, 8, 4, 4, 4, 6, 4, 6, 4, + 8, 6, 4, 4, 6, 4, 6, 8, 4, 6, + 8, 4, 4, 6, 8, 6, 4, 6, 6, 8, + 10, 7, 8, 8, 9, 4, 4, 4, 4, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, + 4, 4, 4, 4, 4, 6, 4, 6, 5, 9, + 6, 9, 8, 6, 8, 8, 8, 6, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 2, 6, 8, + 10, 12, 14, 6, 8, 8, 10, 12, 14, 6, + 8, 10, 12, 6, 8, 4, 4, 3, 4, 6, + 6, 4, 6, 4, 6, 8, 0, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 2, 0, 2, + 3, 4, 4, 4, 4, 4, 0, 3, 4, 7, + 3, 1, 1, 1, 0, 5, 5, 2, 3, 1, + 2, 2, 1, 2, 1, 2, 2, 1, 2, 2, + 1, 1, 0, 1, 0, 1, 0, 2, 1, 2, + 4, 0, 2, 1, 1, 3, 5, 1, 1, 1, + 2, 2, 0, 4, 0, 2, 0, 2, 2, 1, + 3, 0, 1, 0, 1, 3, 1, 3, 2, 0, + 1, 1, 0, 1, 2, 4, 4, 0, 2, 2, + 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, + 0, 1, 3, 3, 3, 0, 3, 1, 1, 0, + 4, 0, 1, 1, 0, 1, 1, 3, 3, 0, + 1, 1, 1, 0, 1, 3, 1, 3, 2, 1, + 1, 0, 1, 2, 3, 4, 2, 3, 4, 4, + 9, 3, 5, 2, 3, 1, 1, 1, 0, 3, + 3, 0, 1, 0, 2, 2, 0, 2, 2, 2, + 0, 2, 1, 2, 3, 3, 0, 2, 1, 2, + 3, 4, 3, 0, 1, 3, 1, 6, 5, 4, + 1, 3, 3, 5, 0, 2, 5, 0, 5, 1, + 3, 1, 3, 1, 3, 1, 2, 3, 4, 1, + 1, 1, 1, 3, 3, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 0, 1, 0, 2, 0, 3, + 0, 1, 0, 1, 1, 5, 0, 1, 0, 1, + 2, 1, 1, 1, 1, 1, 1, 0, 1, 1, + 1, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 2, 0, 2, 3, 4, 4, 4, 4, 4, - 0, 3, 4, 7, 3, 1, 1, 1, 0, 5, - 5, 2, 3, 1, 2, 2, 1, 2, 1, 2, - 2, 1, 2, 2, 1, 1, 0, 1, 0, 1, - 0, 2, 1, 2, 4, 0, 2, 1, 1, 3, - 5, 1, 1, 1, 2, 2, 0, 4, 0, 2, - 0, 2, 2, 1, 3, 0, 1, 0, 1, 3, - 1, 3, 2, 0, 1, 1, 0, 1, 2, 4, - 4, 0, 2, 2, 1, 1, 3, 3, 3, 3, - 3, 3, 3, 3, 0, 3, 3, 3, 0, 3, - 1, 1, 0, 4, 0, 1, 1, 0, 3, 1, - 3, 2, 1, 1, 0, 1, 2, 3, 4, 2, - 3, 4, 4, 9, 3, 5, 0, 3, 3, 0, - 1, 0, 2, 2, 0, 2, 2, 2, 0, 2, - 1, 2, 3, 3, 0, 2, 1, 2, 3, 4, - 3, 0, 1, 3, 1, 6, 5, 4, 1, 3, - 3, 5, 0, 2, 5, 0, 5, 1, 3, 1, - 3, 1, 3, 1, 2, 3, 4, 1, 1, 1, - 1, 3, 3, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 0, 1, 0, 2, 0, 3, 0, 1, - 0, 1, 1, 5, 0, 1, 0, 1, 2, 1, - 1, 1, 1, 1, 1, 0, 1, 1, 1, 3, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -9047,885 +9867,917 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 1, + 1, 1, 1, 0, 0, 1, 1, } var yyChk = [...]int{ - -1000, -422, -80, -427, -7, -29, -15, -16, -17, -18, - -19, -20, -21, -22, -23, -24, -25, -26, -65, -68, - -66, -67, -70, -71, -72, -73, -74, -9, -11, -69, - -27, -28, -75, -76, -77, -78, -79, -12, -13, -14, - -8, -32, -31, -30, 13, 14, -110, -36, 35, -41, - -51, 240, -52, -42, 241, -53, 243, 242, 280, 244, - 397, 273, 83, 330, 331, 333, 334, 335, 336, -111, - 713, 278, 279, 246, 39, 51, 36, 37, 40, 250, - 286, 287, 249, 145, -33, -37, 12, -424, 15, 487, - 275, 274, 31, -34, 597, 95, -35, 63, -81, -423, - 761, -258, -242, 26, 36, 32, -241, -237, -129, -242, - 24, 22, 11, -80, -80, -80, 16, 17, -80, -361, - -363, 95, 173, 95, -80, -58, -57, -55, -54, -56, - -59, 34, -48, -49, -385, -47, -44, 245, 242, 290, - 135, 136, 280, 281, 282, 244, 264, 279, 283, 278, - 299, -43, 90, 36, 597, 600, -368, 241, 247, 248, - 243, 488, 138, 137, 84, -365, 392, 631, 731, -59, - 733, 110, 113, 732, 50, 254, 734, 735, 736, 638, - 737, 263, 738, 739, 740, 741, 747, 680, 748, 749, - 750, 139, 11, -80, -310, -306, 100, -299, 594, 266, - 629, 441, 630, 315, 90, 47, 42, 533, 604, 388, - 392, 631, 518, 731, 398, 330, 348, 342, 523, 524, - 525, 371, 363, 595, 632, 605, 318, 267, 303, 725, - 361, 149, 733, 322, 633, 281, 399, 400, 634, 401, - 110, 333, 438, 746, 321, 635, 744, 113, 732, 338, - 88, 517, 57, 728, 326, 50, 276, 446, 447, 359, - 249, 355, 734, 304, 636, 607, 297, 138, 135, 753, - 39, 351, 56, 33, 743, 137, 55, 735, 164, 637, - 736, 638, 403, 378, 719, 54, 404, 282, 639, 93, - 287, 599, 327, 727, 405, 538, 352, 406, 314, 742, - 246, 640, 325, 708, 700, 701, 407, 408, 720, 383, - 379, 384, 540, 641, 642, 430, 522, 409, 704, 705, - 760, 58, 643, 644, 721, 136, 645, 87, 737, 89, - 346, 347, 646, 312, 265, 543, 544, 432, 375, 500, - 127, 507, 508, 120, 121, 503, 122, 509, 123, 128, - 510, 511, 512, 501, 124, 117, 502, 513, 514, 376, - 377, 125, 515, 119, 118, 504, 506, 126, 516, 263, - 38, 410, 596, 316, 64, 320, 291, 433, 52, 381, - 757, 51, 715, 545, 647, 718, 374, 370, 497, 696, - 59, 648, 649, 650, 651, 519, 738, 373, 345, 369, - 752, 4, 309, 492, 520, 739, 68, 248, 386, 385, - 387, 298, 429, 366, 652, 653, 654, 270, 91, 655, - 356, 25, 656, 657, 411, 305, 658, 62, 659, 660, - 436, 279, 661, 60, 740, 697, 45, 662, 284, 754, - 741, 663, 664, 665, 714, 666, 286, 667, 413, 668, - 702, 703, 412, 380, 382, 546, 293, 414, 397, 698, - 251, 598, 669, 328, 350, 283, 745, 670, 271, 534, - 535, 536, 537, 726, 542, 541, 285, 290, 278, 437, - 272, 671, 672, 673, 674, 675, 319, 695, 676, 677, - 334, 602, 747, 498, 49, 678, 679, 680, 681, 682, - 313, 308, 431, 440, 67, 92, 394, 683, 684, 724, - 344, 339, 43, 685, 686, 687, 688, 306, 99, 478, - 480, 481, 482, 483, 484, 479, 486, 689, 331, 61, - 748, 749, 750, 300, 751, 526, 527, 528, 529, 13, - 580, 563, 591, 564, 581, 565, 574, 566, 582, 590, - 592, 547, 555, 548, 556, 586, 569, 583, 575, 568, - 567, 589, 572, 576, 549, 557, 587, 573, 550, 558, - 551, 559, 552, 560, 585, 584, 577, 588, 553, 561, - 579, 554, 562, 578, 570, 571, 449, 758, 759, 521, - 416, 699, 139, 310, 311, 53, 367, 292, 690, 323, - 691, 357, 358, 494, 495, 372, 343, 368, 146, 711, - 332, 341, 709, 294, 417, 499, 280, 692, 439, 307, - 389, 131, 340, 395, 324, 603, 539, 299, 418, 723, - 601, 530, 531, 365, 362, 301, 532, 693, 390, 713, - 419, 255, 295, 296, 694, 710, 420, 421, 317, 422, - 423, 424, 425, 426, 428, 329, 427, 712, 706, 707, - 302, 477, 600, 337, 360, 396, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 496, 253, -80, 253, -191, -306, - -131, 715, 717, 192, -277, 400, -295, 402, 415, 410, - 420, 408, -286, 411, 413, 293, -408, 430, 253, 417, - 240, 403, 412, 421, 422, 317, 428, 423, 329, 427, - 302, 424, 425, 426, -392, 192, 736, 751, 332, 340, - 149, 364, 407, 405, 431, 715, 100, -312, 100, 101, - 102, -299, 332, -315, 337, -300, -392, -299, 335, -80, - -80, -317, -317, -131, -211, -146, 157, -160, -266, -163, - 101, -151, -154, -205, -206, -207, -208, -161, -225, -264, - 181, 182, 189, 158, -221, -164, 29, 593, 489, 488, - 192, 34, 235, 77, 78, 491, 492, 160, 63, 15, - 454, 455, -162, 444, 445, 456, 450, 451, 517, 519, - 520, 521, 518, 523, 524, 525, 526, 527, 528, 529, - 530, 531, 532, 522, 533, 494, 495, 129, 496, 117, - 119, 118, 127, 128, 497, 498, 499, 361, 545, 546, - 540, 543, 544, 542, 541, 376, 377, 500, 563, 564, - 568, 567, 565, 566, 569, 572, 573, 574, 575, 576, - 577, 579, 578, 570, 571, 548, 547, 549, 550, 551, - 552, 553, 554, 556, 555, 557, 558, 559, 560, 561, - 562, 580, 581, 582, 583, 584, 586, 585, 590, 589, - 587, 588, 592, 591, 501, 502, 120, 121, 122, 123, - 124, 125, 126, 503, 506, 504, 505, 507, 508, 509, - 514, 515, 510, 511, 512, 513, 516, 387, 385, 386, - 382, 381, 380, -90, -103, 620, 619, -104, 441, 446, - 447, 449, -152, -153, -166, -167, -300, -306, 258, 443, - 252, 187, 487, -155, -149, -223, 116, 102, -31, -220, - 442, 452, 453, 457, 448, 458, 606, 608, 623, 624, - 626, 611, 616, 615, 618, 534, 535, 536, 537, 538, - 539, 700, 701, 702, 703, 704, 705, 706, 707, -392, - -299, 100, -158, -156, -200, 103, 108, 111, 112, 114, - -414, 276, 357, 358, 130, -424, -216, -217, -157, 105, - 106, 107, 132, 133, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 234, 729, 98, 104, 50, - 416, 416, -191, -80, -80, -80, -80, -421, 732, 598, - -235, -129, -237, -33, -31, -424, 12, -80, -31, -32, - -30, -37, -39, 625, -38, -306, -80, 109, -242, -258, - 16, 67, 176, 48, 56, -240, -241, -34, -31, -146, - 23, 41, 27, -133, 183, -146, -306, -133, -284, 257, - -80, -80, -273, -320, 332, -275, 431, 715, 430, -265, - -278, 100, -264, -277, 429, 101, -362, 173, -348, -352, - -300, 268, -378, 264, -191, -371, -370, -300, -424, -130, - -294, 254, 262, 261, 150, -395, 153, 310, 443, 252, - -54, -55, -56, -277, 191, 735, -112, 285, 289, 96, - 96, -352, -351, -350, -396, 289, 268, -377, -369, 260, - 269, -358, 261, 262, -353, 254, 151, -396, -353, 259, - 269, 264, 268, 289, 289, 139, 289, 139, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 284, -359, 165, - -359, 601, 601, -365, -396, 264, 254, -396, -396, 260, - -296, -353, 256, 28, 256, 38, 38, -359, -359, -359, - -277, 191, -359, -359, -359, -359, 297, 297, -359, -359, - -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, - -359, -359, -359, -359, -359, 253, -395, -138, 427, 317, - 90, -57, 299, -40, -191, -294, 254, 255, -395, 286, - -191, 236, 253, 718, -288, 173, 19, -288, -285, 416, - 414, 401, 406, -288, -288, -288, -288, 300, 399, -354, - 254, 38, 265, 416, 300, 399, 300, 301, 300, 301, - 409, 419, 300, -311, 18, 176, 443, 404, 408, 293, - 253, 294, 255, 418, 301, -311, 98, -289, 173, 300, - 416, 410, 296, -288, -288, -318, -424, -302, -300, -298, - 245, 41, 156, 28, 30, 159, 192, 142, 23, 160, - 40, 247, 364, 264, 191, 260, 488, 240, 81, 606, - 444, 451, 442, 450, 454, 490, 491, 443, 402, 34, - 17, 608, 31, 274, 27, 44, 185, 242, 163, 609, - 277, 29, 275, 129, 133, 611, 26, 84, 269, 18, - 262, 46, 20, 612, 613, 21, 74, 258, 257, 176, - 254, 79, 15, 235, 32, 172, 75, 614, 151, 145, - 615, 616, 617, 618, 143, 77, 173, 24, 755, 452, - 453, 36, 716, 593, 288, 187, 82, 65, 717, 157, - 448, 619, 620, 130, 621, 134, 85, 722, 153, 22, - 80, 48, 622, 289, 623, 259, 756, 624, 434, 625, - 174, 243, 487, 78, 175, 729, 626, 730, 252, 415, - 12, 493, 35, 273, 261, 73, 72, 141, 76, 458, - 627, 253, 162, 256, 144, 132, 11, 150, 37, 16, - 83, 86, 455, 456, 457, 63, 140, 597, 161, 19, - 628, 435, 155, -392, 718, -318, -318, 300, 341, 35, - 101, -418, -419, -420, 597, 434, 256, -300, -191, -86, - 708, 244, -87, 714, 41, 251, 146, 38, -136, 416, - -124, 192, 736, 719, 720, 721, 718, 413, 726, 724, - 722, 300, 723, 96, 153, 155, 156, 4, -146, 172, - -201, -202, 171, 165, 166, 167, 168, 169, 170, 177, - 176, 157, 159, 173, -251, 154, 178, 179, 180, 181, - 182, 183, 184, 186, 185, 187, 188, 174, 175, 191, - 238, 239, -154, -154, -154, -154, -221, -227, -226, -424, - -223, -392, -299, -306, -424, -424, -154, -283, -424, -151, - -424, -424, -424, -424, -424, -230, -146, -424, -424, -428, - -424, -428, -428, -428, -337, -424, -337, -337, -424, -424, - -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, - -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, - -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, - -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, - -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, - -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, - -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, - -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, - -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, - -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, - -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, - -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, - -424, -424, -424, 236, -424, -424, -424, -424, -424, -337, - -337, -337, -337, -337, -337, -424, -424, -424, -424, -424, - -424, -424, -424, -424, -424, -424, -424, -424, -424, 98, - 112, 108, 111, 103, 114, 98, 98, 98, 98, -31, - -32, -211, 63, -424, -317, -405, -406, -194, -191, -424, - 317, -300, -300, 286, 105, -240, -34, -31, -235, -241, - -237, -31, -80, -122, -135, 69, 70, -134, -137, 27, - 44, 74, 76, 99, 72, 73, 71, 41, -425, 97, - -425, -258, -425, 96, -39, -261, 95, 115, -214, -219, - -217, 729, 654, 684, 654, 684, 67, 49, 98, 98, - 96, 25, -236, -238, -146, 18, -304, 4, -303, 28, - -300, 98, 236, 18, -192, 32, -191, -284, -284, 96, - 100, 332, -274, -276, 432, 434, 165, -305, -300, 98, - 34, 97, 96, -191, -326, -329, -331, -330, -332, -327, - -328, 361, 362, 192, 365, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 378, 390, 35, 276, 357, 358, - 359, 360, 379, 380, 381, 382, 384, 385, 386, 387, - 342, 363, 595, 343, 344, 345, 346, 347, 348, 350, - 351, 354, 352, 353, 355, 356, -301, -300, 95, 97, - 96, -336, 95, -146, -138, 253, -300, 254, 254, 254, - -291, 258, 487, -359, -359, -359, 284, 23, -47, -44, - -385, 22, -43, -44, 245, 135, 136, 242, 95, -348, - 95, -357, -301, -300, 95, 151, 259, 150, -356, -353, - -356, -357, -300, -223, -300, 151, 151, -300, -300, -270, - -300, -270, -270, 41, -270, 41, -270, 41, 105, -300, - -270, 41, -270, 41, -270, 41, -270, 41, -270, 41, - 34, 87, 88, 89, 34, 91, 92, 93, -223, -300, - -300, -223, -348, -223, -191, -300, -277, 105, 105, 105, - -359, -359, 105, 98, 98, 98, -359, -359, 105, 98, - -308, -306, 98, 98, -397, 270, 314, 316, 105, 105, - 105, 105, 34, 98, -398, 34, 743, 742, 744, 745, - 746, 98, 105, 34, 105, 34, 105, -300, 95, -191, - -144, 304, 240, 242, 245, 85, 98, 322, 320, 321, - 318, 323, 324, 325, 165, 50, 96, 256, 253, -300, - -290, 258, -290, -300, -307, -306, -298, -191, 256, 398, - 98, -146, -355, 18, 176, -311, -311, -288, -191, -355, - -311, -288, -191, -288, -288, -288, -288, -311, -311, -311, - -288, -306, -306, -191, -191, -191, -191, -191, -191, -191, - -318, -289, -288, 718, 98, -282, 18, 85, -318, -318, - -297, 26, 26, 96, 338, 435, 436, -316, 335, -82, - -300, 98, -10, -29, -18, -17, -19, 165, -10, 96, - 597, -184, -191, 718, 718, 718, 718, 718, 718, -146, - -146, -146, -146, 621, -209, -416, 157, 132, 133, 130, - 131, -163, 42, 43, 41, -146, -210, -216, -221, 115, - 176, 159, 173, -251, -151, -154, -151, -151, -151, -151, - -151, -151, 235, -151, 235, -151, -151, -151, -151, -151, - -151, -319, -300, 98, 192, -159, -158, 114, -414, -159, - 594, 96, -226, 236, -146, -146, -392, -120, 460, 461, - 462, 463, 465, 466, 467, 470, 471, 475, 476, 459, - 477, 464, 469, 472, 473, 474, 468, 360, -146, -212, - -211, -212, -146, -146, -228, -229, 161, -223, -146, -425, - -425, 105, 183, -128, 27, 44, -128, -128, -128, -128, - -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, - -128, -146, -121, 459, 477, 464, 469, 472, 473, 474, - 468, 360, 478, 479, 480, 481, 482, 483, 484, 485, - 486, -121, -120, -146, -146, -146, -146, -146, -146, -146, - -146, -88, -146, 142, 143, 144, -211, -146, -151, -146, - -146, -146, -425, -146, -146, -146, -212, -146, -146, -146, - -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, - -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, - -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, - -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, - -146, -146, -146, -391, -390, -389, -146, -146, -146, -146, - -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, - -146, -146, -146, -146, -146, -146, -146, -146, -146, -211, - -211, -211, -211, -211, -146, -425, -146, -165, -149, 105, - -266, 114, 101, -146, -146, -146, -146, -146, -146, -212, - -302, -307, -298, -299, -211, -212, -212, -211, -211, -146, - -146, -146, -146, -146, -146, -146, -146, -425, -146, -146, - -146, -146, -146, -258, -425, -211, 96, -407, 434, 435, - 716, -309, 289, -308, 28, -212, 98, 18, -268, 86, - -300, -240, -240, 69, 70, 65, -132, -133, -137, -425, - -38, 28, -260, -300, 96, -424, 647, 647, 68, 98, - -338, -277, 388, 389, 192, -146, -146, 96, -239, 30, - 31, -191, -303, 183, -307, -191, -269, 289, -191, -169, - -171, -172, -173, -194, -222, -424, -174, -31, 617, 614, - 18, -184, -185, -193, -306, -275, -320, -274, 96, 433, - 435, 436, 85, 134, -146, -339, 191, -367, -366, -365, - -348, -350, -351, -352, 97, -339, -344, 395, 394, -336, - -336, -336, -336, -336, -336, -338, -338, -338, -336, 95, - -336, 95, -336, -336, -336, -336, -341, 95, -341, -341, - -342, -341, 95, -342, -343, 95, -343, -378, -146, -375, - -374, -372, -373, 263, 110, 694, 646, 597, 638, 680, - 86, -370, -239, 105, -425, -144, -291, -376, -373, -300, - -300, -300, -306, 157, 100, 98, 100, 98, 100, 98, - -113, -61, -1, 755, 756, 757, 96, 23, -349, -348, - -60, 314, -381, -382, 289, -377, -371, -357, 151, -356, - -357, -357, -300, 96, 32, 139, 139, 139, 139, 597, - 242, 35, -292, 637, 157, 694, 646, -348, -60, 256, - 256, -319, -319, -319, 98, 98, -287, 751, -184, -140, - 306, 165, 295, 295, 253, 308, 253, 308, -191, 319, - 322, 320, 321, 318, 323, 324, 325, 326, 41, 41, - 41, 41, 41, 41, 41, 307, 309, 311, 297, -191, - -191, -290, 85, -186, -191, 29, -306, 98, 98, -191, - -288, -288, -191, -288, -288, -191, 98, -306, -420, 339, - -300, 375, 709, 711, -124, 434, 96, 597, 26, -125, - 26, -424, -416, 132, 133, -221, -221, -221, -210, -151, - -154, -151, 156, 277, -151, -151, -424, -223, -425, -302, - 28, 96, 86, -425, 181, 96, -425, -425, 96, 18, - 96, -231, -229, 163, -146, -425, 96, -425, -425, -211, - -146, -146, -146, -146, -425, -425, -425, -425, -425, -425, - -425, -425, -425, -425, -211, -425, 96, 96, 18, -323, - 28, -425, -425, -425, -425, 96, -425, -425, -230, -425, - 18, -425, 86, 96, 176, 96, -425, -425, -425, 96, - 96, -425, -425, 96, -425, 96, -425, -425, -425, -425, - -425, -425, 96, -425, 96, -425, -425, -425, 96, -425, - 96, -425, -425, 96, -425, 96, -425, 96, -425, 96, - -425, 96, -425, 96, -425, 96, -425, 96, -425, 96, - -425, 96, -425, 96, -425, 96, -425, 96, -425, 96, - -425, 96, -425, 96, -425, 96, -425, 96, -425, -425, - -425, 96, -425, 96, -425, 96, -425, -425, 96, -425, - 96, -425, 96, -425, 96, 96, -425, 96, 96, 96, - -425, 96, 96, 96, 96, -425, -425, -425, -425, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, -425, - -425, -425, -425, -425, -425, 96, -95, 622, -425, -425, - 96, -425, 96, 96, 96, 96, 96, -425, -424, 236, - -425, -425, -425, -425, -425, 96, 96, 96, 96, 96, - 96, -425, -425, -425, 96, 96, -425, 96, -425, 96, - -425, -406, 715, 435, -198, -197, -195, 83, 257, 84, - -424, -308, -425, -159, -266, -267, -266, -204, -300, 105, - 114, -242, -168, 96, -170, 18, -221, 97, 96, -219, - -425, -338, -246, -252, -285, -300, 98, 192, -340, 192, - -340, 388, 389, -238, 236, -199, 19, -203, 35, 63, - -29, -424, -424, 35, 96, -187, -189, -188, -190, 75, - 79, 81, 76, 77, 78, 82, -314, 28, -31, -169, - -31, -424, -191, -184, -426, 18, 86, -426, 96, 236, - -276, -279, 437, 434, 440, -392, 98, -112, 96, -365, - -352, -243, -141, 46, -345, 396, -338, 605, -338, -338, - -347, 98, -347, 105, 105, 105, 97, -50, -45, -46, - 36, 90, -372, -359, 98, 45, -359, -359, -300, 97, - -239, -140, -191, 85, -376, -376, -376, 29, -2, 754, - 760, 151, 95, 401, 22, -260, 96, 97, -224, 315, - 97, -114, -300, 97, 95, -357, -357, -300, -424, 253, - 34, 34, 694, 646, 637, -60, -224, -223, -300, -339, - 753, 752, 97, 255, 313, -145, 454, -142, 98, 100, - -191, -191, -191, -191, -191, -191, 245, 242, 424, -415, - 327, 98, -415, 298, 256, -184, -191, 96, -85, 272, - 267, -311, -311, 36, -191, 434, 727, 725, -146, 156, - 277, -163, -154, -120, -120, -151, -321, 192, 361, 276, - 359, 355, 375, 366, 394, 357, 395, 352, 351, 350, - -321, -319, -151, -211, -146, -146, -146, 164, -146, 162, - -146, -96, -95, -425, -425, -425, -425, -425, -96, -96, - -96, -96, -96, -96, -96, -96, -96, -96, -235, -146, - -146, -146, -425, 192, 361, -96, -146, 18, -146, -319, - -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, - -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, - -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, - -146, -146, -146, -146, -146, -389, -146, -211, -146, -211, - -146, -146, -146, -146, -146, -390, -390, -390, -390, -390, - -211, -211, -211, -211, -146, -424, -300, -99, -98, -97, - 673, 257, -95, -165, -99, -165, 235, -146, 235, 235, - 235, -146, -212, -302, -146, -146, -146, -146, -146, -146, - -146, -146, -146, -146, -195, -353, 295, -353, 295, -353, - -270, 96, -281, 26, 18, 63, 63, -168, -199, -133, - -169, -300, -249, 708, -255, 52, -253, -254, 53, -250, - 54, 62, -340, -340, 183, -240, -146, -271, 85, -272, - -280, -223, -215, -218, -216, -424, -259, -425, -300, -270, - -272, -171, -172, -172, -171, -172, 75, 75, 75, 80, - 75, 80, 75, -188, -306, -425, -146, -309, 86, -169, - -169, -193, -306, 183, 434, 438, 439, -365, -413, 130, - 157, 34, 85, 392, 110, -411, 191, 634, 689, 694, - 646, 638, 680, -412, 259, 150, 151, 271, 28, 47, - 97, 96, 97, 96, 97, 97, 96, -293, -292, -46, - -45, -359, -359, 105, -392, 98, 98, 255, -191, 85, - 85, 85, -115, 758, 105, 95, -3, 90, -146, 95, - 23, -348, -223, -383, -333, -384, -334, -335, -5, -6, - -360, -118, 63, 110, -64, 50, 254, 738, 739, 139, - -424, 751, -375, -260, -379, -381, -191, -150, -424, -162, - -148, -147, -149, -155, 181, 182, 276, 357, 358, -224, - -191, -139, 304, 312, 95, -143, 101, -394, 86, 295, - 392, 295, 392, 98, -417, 328, 98, -417, -191, -85, - -50, -191, -288, -288, 36, -392, -425, -163, -154, -127, - 176, 597, -324, 604, -336, -336, -336, -343, -336, 347, - -336, 347, -336, -425, -425, -425, 96, -425, 26, -425, - 96, -146, 96, -96, -96, -96, -96, -96, -123, 493, - 96, 96, -425, 95, 95, -425, -146, -425, -425, -425, - 96, -425, -425, -425, -425, -425, -425, -425, -425, -425, - -425, -425, -425, -425, 96, -425, 96, -425, 96, -425, - 96, -425, 96, -425, 96, -425, 96, -425, 96, -425, - 96, -425, 96, -425, 96, -425, 96, -425, 96, -425, - 96, -425, 96, -425, 96, -425, -425, 96, -425, -425, - -425, 96, -425, 96, -425, 96, -425, -425, -425, 96, - -322, 695, -425, -425, -425, -425, -425, -425, -425, -425, - -425, -425, -425, -94, -301, -95, 655, 655, -425, -95, - -232, 96, -151, -425, -151, -151, -151, -425, -425, -425, - 96, -425, 96, 96, -425, 96, -425, 96, -425, -425, - -425, -425, 96, -196, 26, -424, -196, -424, -196, -425, - -266, -191, -199, -233, 20, -246, 57, 367, -257, -256, - 61, 53, -254, 23, 55, 23, 33, -271, 96, 165, - -313, 96, 28, -425, -425, 96, 63, 236, -425, -199, - -182, -181, 85, 86, -183, 85, -181, 75, 75, -261, - 96, -269, -169, -199, -199, 236, 130, -424, -150, 16, - 98, 98, -392, -410, 742, 743, 34, 744, 105, -359, - -359, 151, 151, -191, 95, -338, 98, -338, 105, 105, - 34, 91, 92, 93, 34, 87, 88, 89, -191, -191, - -191, -191, -380, 95, 23, -146, 95, 165, 97, -260, - -260, 291, 176, -359, 736, 297, 297, -359, -359, -359, - -117, -116, 758, 97, -425, 96, -346, 597, 600, -146, - -156, -156, -261, 97, -388, 597, -393, -300, -300, -300, - -300, 105, 107, -425, 595, 82, 598, -425, -338, -146, - -146, -146, -146, -240, 98, -146, -146, 105, 105, -96, - -425, -146, -146, -146, -146, -146, -146, -146, -146, -146, - -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, - -146, -211, -146, -425, -179, -178, -180, 719, 130, 34, - -321, -425, -213, 289, -102, -101, -100, 18, -425, -146, - -120, -120, -120, -120, -146, -146, -146, -146, -146, -146, - -424, 75, 22, 20, -263, -300, 259, -424, -263, -424, - -309, -233, -234, 21, 23, -247, 59, -245, 58, -245, - -256, 23, 23, 98, 23, 98, 151, -280, -146, -218, - -308, 63, -29, -300, -215, -300, -235, -146, 95, -146, - -159, -199, -199, -146, -206, 517, 519, 520, 521, 518, - 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, - 522, 533, 494, 495, 496, 117, 119, 118, 127, 128, - 497, 498, 499, 361, 545, 546, 540, 543, 544, 542, - 541, 376, 377, 500, 563, 564, 568, 567, 565, 566, - 569, 572, 573, 574, 575, 576, 577, 579, 578, 570, - 571, 548, 547, 549, 550, 551, 552, 553, 554, 556, - 555, 557, 558, 559, 560, 561, 562, 580, 581, 582, - 583, 584, 586, 585, 590, 589, 587, 588, 592, 591, - 501, 502, 120, 121, 122, 123, 124, 125, 126, 503, - 506, 504, 507, 508, 509, 514, 515, 510, 511, 512, - 513, 516, 387, 385, 386, 382, 381, 380, 441, 446, - 447, 449, 534, 535, 536, 537, 538, 539, 700, 701, - 702, 703, 704, 705, 706, 707, 98, 98, 95, -146, - 97, 97, -261, -379, -61, 97, -262, -260, 105, 97, - 292, -216, -424, 98, -359, -359, -359, 105, 105, -308, - -425, 96, -300, -412, -381, 601, 601, -425, 28, -387, - -386, -302, 95, 86, 68, 596, 599, -425, -425, -425, - 96, -425, -425, -425, 97, 97, -425, -425, -425, -425, - -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, - -425, -425, -425, -425, -425, -425, -425, -425, 96, -425, - -178, -180, -425, 85, -159, -235, 23, -99, 314, 316, - -99, -425, -425, -425, -425, -425, 96, -425, -425, 96, - -425, 96, -425, -425, -263, -425, 23, 23, 96, -425, - -263, -425, -263, -198, -234, -109, -108, -107, 628, -146, - -211, -248, 60, 85, 134, 98, 98, 98, 16, -424, - -215, 236, -313, -240, -260, -176, 401, -235, -425, -260, - 97, 28, 97, 760, 151, 97, -216, -126, -424, 288, - -308, 98, 98, -116, -119, -29, 96, 165, -260, -191, - 68, -146, -211, -425, 85, 609, 719, -93, -92, -89, - 730, 756, -211, -95, -95, -146, -146, -146, -425, -300, - 259, -425, -425, -109, 96, -106, -105, -300, -325, 597, - 85, 134, -272, -260, -313, -300, 97, -425, -424, -240, - 97, -244, -29, 95, -3, 288, -333, -384, -334, -335, - -5, -6, -360, -83, 597, -386, -364, -306, -302, 98, - 105, 97, 597, -425, -425, -91, 159, 728, 692, -155, - 235, -425, 96, -425, 96, -425, 96, -107, 96, 28, - 602, -425, -309, -177, -175, -300, 652, -403, -402, 593, - -413, -409, 130, 157, 110, -411, 689, 694, 646, 140, - 141, -83, -146, 95, -425, -84, 303, 715, 236, -394, - 598, -91, 729, 666, 640, 666, 640, -151, -146, -146, - -146, -105, -424, -425, 96, 26, -326, -63, 663, -400, - -401, 85, -404, 407, 662, 683, 130, 98, 105, 97, - -260, 264, -307, -388, 599, 156, -120, -425, 96, -425, - 96, -425, -94, -175, 659, -339, -159, -401, 85, -400, - 85, 17, 16, -4, 759, 97, 305, -91, 666, 640, - -146, -146, -425, -62, 29, -176, -399, 272, 267, 270, - 35, -399, 105, -4, -425, -425, 663, 266, 34, 130, - -159, -179, -178, -178, + -1000, -457, -7, -11, -105, -461, 787, -9, -8, -32, + -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, + -28, -29, -90, -93, -91, -92, -95, -96, -97, -98, + -99, -12, -14, -94, -30, -31, -100, -101, -102, -103, + -104, -15, -16, -17, -10, -35, -34, -33, 13, 14, + -135, -39, 35, -44, -45, -56, -46, -57, -47, 242, + -58, 244, 243, 292, 245, 409, 285, 83, 342, 343, + 345, 346, 347, 348, -136, 739, 290, 291, 247, 39, + 51, 36, 37, 40, 251, 298, 299, 250, 145, -36, + -40, 12, -458, 15, 511, 241, 287, 286, 31, -37, + 621, 95, -38, 63, -106, -11, -287, -270, 26, 36, + 32, -269, -265, -154, -270, 24, 22, 11, -105, -105, + -105, 16, 17, -105, -392, -394, 95, 174, 95, -290, + 95, -74, -73, -71, -70, -72, -75, 34, -53, -54, + -416, -52, -49, 246, 243, 302, 135, 136, 292, 293, + 294, 245, 275, 291, 295, 290, 311, -48, 90, 36, + 621, 624, -399, 242, 248, 249, 244, 512, 138, 137, + 84, -396, 404, 655, 757, -75, 759, 110, 113, 758, + 50, 265, 760, 761, 762, 662, 763, 274, 764, 765, + 766, 767, 773, 704, 774, 775, 776, 139, 11, -105, + -341, -337, 100, -330, 618, 277, 653, 465, 654, 327, + 90, 47, 42, 557, 628, 400, 404, 655, 542, 757, + 410, 342, 360, 354, 547, 548, 549, 383, 375, 619, + 656, 629, 330, 278, 315, 460, 751, 373, 149, 759, + 453, 334, 657, 293, 411, 412, 463, 658, 413, 110, + 345, 450, 772, 333, 659, 770, 113, 758, 350, 457, + 459, 458, 88, 541, 57, 754, 464, 338, 50, 288, + 470, 471, 371, 250, 367, 760, 316, 660, 631, 309, + 138, 135, 779, 39, 363, 56, 33, 769, 137, 55, + 761, 165, 661, 762, 662, 415, 390, 745, 54, 416, + 294, 663, 93, 299, 623, 339, 753, 417, 562, 364, + 418, 326, 768, 247, 664, 337, 734, 726, 727, 254, + 419, 420, 746, 395, 391, 396, 564, 665, 666, 442, + 546, 421, 730, 731, 255, 786, 58, 667, 668, 747, + 136, 669, 87, 763, 89, 358, 359, 670, 324, 276, + 567, 568, 444, 387, 524, 127, 531, 532, 120, 121, + 527, 122, 533, 123, 128, 534, 535, 536, 525, 124, + 117, 526, 537, 538, 388, 389, 125, 539, 119, 118, + 528, 530, 126, 540, 274, 38, 422, 620, 328, 64, + 332, 303, 445, 52, 393, 783, 51, 741, 569, 671, + 744, 386, 382, 521, 720, 59, 672, 673, 674, 675, + 543, 764, 385, 357, 381, 778, 4, 321, 455, 516, + 544, 765, 68, 249, 398, 397, 399, 456, 310, 441, + 378, 676, 677, 678, 281, 91, 679, 368, 25, 680, + 681, 423, 317, 682, 62, 683, 684, 448, 291, 685, + 60, 766, 721, 45, 686, 296, 780, 767, 687, 688, + 689, 740, 690, 298, 691, 425, 692, 728, 729, 424, + 392, 394, 570, 305, 426, 409, 722, 252, 622, 693, + 340, 362, 295, 771, 694, 282, 558, 559, 560, 561, + 752, 566, 565, 297, 302, 290, 449, 283, 695, 696, + 697, 698, 699, 331, 719, 700, 701, 346, 626, 773, + 522, 49, 461, 702, 703, 704, 705, 706, 325, 320, + 443, 452, 67, 92, 406, 707, 708, 750, 356, 351, + 43, 709, 710, 711, 712, 318, 99, 502, 504, 505, + 506, 507, 508, 503, 510, 713, 343, 61, 774, 775, + 776, 312, 777, 550, 551, 552, 553, 13, 604, 587, + 615, 588, 605, 589, 598, 590, 606, 614, 616, 571, + 579, 572, 580, 610, 593, 607, 599, 592, 591, 613, + 596, 600, 573, 581, 611, 597, 574, 582, 575, 583, + 576, 584, 609, 608, 601, 612, 577, 585, 603, 578, + 586, 602, 594, 595, 454, 473, 784, 785, 545, 462, + 428, 723, 139, 322, 323, 53, 379, 304, 714, 335, + 715, 369, 370, 518, 519, 384, 355, 380, 146, 737, + 344, 353, 735, 306, 429, 523, 292, 716, 451, 319, + 401, 131, 352, 407, 336, 627, 563, 311, 430, 749, + 625, 554, 555, 377, 374, 313, 556, 717, 402, 739, + 431, 266, 307, 308, 718, 736, 432, 433, 329, 434, + 435, 436, 437, 438, 440, 341, 439, 738, 732, 733, + 314, 501, 624, 349, 372, 408, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 520, 264, -105, 264, -219, -337, + -156, 741, 743, 193, -308, 412, -326, 414, 427, 422, + 432, 420, -317, 423, 425, 305, -443, 442, 264, 429, + 241, 415, 424, 433, 434, 329, 440, 435, 341, 439, + 314, 436, 437, 438, -427, 193, 762, 777, 344, 352, + 149, 376, 419, 417, 443, 741, 100, -343, 100, 101, + 102, -330, 344, -346, 349, -331, -427, -330, 347, -105, + -105, -348, -348, -156, -239, -174, 157, -188, -295, -191, + 101, -179, -182, -233, -234, -235, -236, -189, -253, -293, + 182, 183, 190, 158, -249, -192, 29, 617, 513, 512, + 193, 34, 236, 77, 78, 515, 516, 160, 63, 15, + 478, 479, -190, 468, 469, 480, 474, 475, 541, 543, + 544, 545, 542, 547, 548, 549, 550, 551, 552, 553, + 554, 555, 556, 546, 557, 518, 519, 129, 520, 117, + 119, 118, 127, 128, 521, 522, 523, 373, 569, 570, + 564, 567, 568, 566, 565, 388, 389, 524, 587, 588, + 592, 591, 589, 590, 593, 596, 597, 598, 599, 600, + 601, 603, 602, 594, 595, 572, 571, 573, 574, 575, + 576, 577, 578, 580, 579, 581, 582, 583, 584, 585, + 586, 604, 605, 606, 607, 608, 610, 609, 614, 613, + 611, 612, 616, 615, 525, 526, 120, 121, 122, 123, + 124, 125, 126, 527, 530, 528, 529, 531, 532, 533, + 538, 539, 534, 535, 536, 537, 540, 399, 397, 398, + 394, 393, 392, -115, -128, 644, 643, -129, 465, 470, + 471, 473, -180, -181, -194, -195, -331, -337, 269, 467, + 263, 188, 511, -183, -177, -251, 116, 102, -34, -248, + 466, 476, 477, 481, 472, 482, 630, 632, 647, 648, + 650, 635, 640, 639, 642, 558, 559, 560, 561, 562, + 563, 726, 727, 728, 729, 730, 731, 732, 733, -427, + -330, 100, -186, -184, -228, 103, 108, 111, 112, 114, + -449, 288, 369, 370, 130, -458, -244, -245, -185, 105, + 106, 107, 132, 133, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 755, 98, 104, 50, + 428, 428, -219, -105, -105, -105, -105, -456, 758, 622, + -263, -154, -265, -36, -34, -458, 12, -105, -34, -35, + -33, -40, -105, -42, 649, -41, -337, -105, 109, -270, + -287, 16, 67, 177, 48, 56, -299, -296, -295, 100, + 101, -268, -269, -37, -34, -174, 23, 41, 27, -158, + 184, -174, -337, -158, -315, 268, -105, -105, -304, -351, + 344, -306, 443, 741, 442, -294, -309, 100, -293, -308, + 441, 101, -393, 174, -379, -383, -331, 279, -409, 275, + -219, -402, -401, -331, -458, 28, -289, -331, -70, -71, + -72, -308, 192, 761, -137, 297, 301, 96, 96, -383, + -382, -381, -431, 301, 279, -408, -400, 271, 280, -389, + 272, 273, -384, 265, 151, -431, -384, 270, 280, 275, + 279, 301, 301, 139, 301, 139, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 296, -390, 166, -390, 625, + 625, -396, -431, 275, 265, -431, -431, 271, -327, -384, + 267, 28, 267, 38, 38, -390, -390, -390, -308, 192, + -390, -390, -390, -390, 309, 309, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, 264, -430, -163, 439, 329, 467, 263, + -164, 90, -73, 311, -43, -219, -325, 265, 266, -430, + 305, 298, 322, -219, 237, 264, 744, -319, 174, 19, + -319, -316, 428, 426, 413, 418, -319, -319, -319, -319, + 312, 411, -385, 265, 38, 276, 428, 312, 411, 312, + 313, 312, 313, 421, 431, 312, -342, 18, 177, 467, + 416, 420, 305, 264, 306, 266, 430, 313, -342, 98, + -320, 174, 312, 428, 422, 308, -319, -319, -349, -458, + -333, -331, -329, 246, 41, 156, 28, 30, 159, 193, + 142, 23, 160, 40, 248, 376, 275, 192, 271, 262, + 256, 512, 241, 81, 630, 468, 475, 466, 474, 478, + 514, 515, 467, 414, 253, 34, 17, 632, 31, 286, + 27, 44, 186, 243, 163, 164, 633, 289, 29, 257, + 287, 129, 133, 635, 26, 84, 280, 18, 273, 46, + 20, 636, 637, 21, 74, 269, 268, 177, 265, 79, + 725, 15, 236, 32, 173, 75, 638, 151, 145, 639, + 640, 641, 642, 143, 77, 174, 24, 781, 476, 477, + 36, 742, 617, 300, 188, 82, 65, 743, 157, 472, + 643, 644, 130, 645, 134, 85, 748, 153, 22, 724, + 80, 48, 646, 301, 647, 270, 782, 648, 446, 649, + 175, 244, 511, 78, 176, 755, 650, 756, 263, 427, + 12, 517, 35, 285, 284, 272, 73, 72, 259, 260, + 261, 141, 76, 482, 651, 264, 162, 267, 144, 132, + 258, 11, 150, 37, 16, 83, 86, 479, 480, 481, + 63, 140, 621, 161, 19, 652, 447, 155, -427, 744, + -349, -349, 312, 353, 35, 101, -453, -454, -455, 621, + 446, 267, -331, -219, -111, 734, 245, -112, 740, 41, + 252, 146, 38, -161, 428, -149, 193, 762, 745, 746, + 747, 744, 425, 752, 750, 748, 312, 749, 96, 153, + 155, 156, 4, -174, 173, -229, -230, 172, 166, 167, + 168, 169, 170, 171, 178, 177, 157, 159, 174, -280, + 154, 179, 180, 181, 182, 183, 184, 185, 187, 186, + 188, 189, 175, 176, 192, 239, 240, -182, -182, -182, + -182, -249, -255, -254, -458, -251, -427, -330, -337, -458, + -458, -182, -314, -458, -179, -458, -458, -458, -458, -458, + -258, -174, -458, -458, -462, -458, -462, -462, -462, -368, + -458, -368, -368, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, 237, -458, + -458, -458, -458, -458, -368, -368, -368, -368, -368, -368, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, 98, 112, 108, 111, 103, 114, + 98, 98, 98, 98, -34, -35, -239, 63, -458, -348, + -440, -441, -222, -219, -458, 329, -331, -331, 298, 105, + -268, -37, -34, -263, -269, -265, -34, -105, -147, -160, + 69, 70, -159, -162, 27, 44, 74, 76, 99, 72, + 73, 71, 41, -459, 97, -459, -287, -459, -171, -325, + -155, -164, 265, 273, 272, 150, -430, -172, 153, 316, + 96, -42, -290, 115, -242, -247, -245, 755, 678, 708, + 678, 708, 67, 49, 98, 98, 96, 96, 25, -264, + -266, -174, 18, -335, 4, -334, 28, -331, 98, 237, + 18, -220, 32, -219, -315, -315, 96, 100, 344, -305, + -307, 444, 446, 166, -336, -331, 98, 34, 97, 96, + -219, -357, -360, -362, -361, -363, -358, -359, 373, 374, + 193, 377, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 390, 402, 35, 288, 369, 370, 371, 372, 391, + 392, 393, 394, 396, 397, 398, 399, 354, 375, 619, + 355, 356, 357, 358, 359, 360, 362, 363, 366, 364, + 365, 367, 368, -332, -331, 95, 97, 96, -367, 95, + -174, -32, 97, 96, -390, -390, -390, 296, 23, -52, + -49, -416, 22, -48, -49, 246, 135, 136, 243, 95, + -379, 95, -388, -332, -331, 95, 151, 270, 150, -387, + -384, -387, -388, -331, -251, -331, 151, 151, -331, -331, + -301, -331, -301, -301, 41, -301, 41, -301, 41, 105, + -331, -301, 41, -301, 41, -301, 41, -301, 41, -301, + 41, 34, 87, 88, 89, 34, 91, 92, 93, -251, + -331, -331, -251, -379, -251, -219, -331, -308, 105, 105, + 105, -390, -390, 105, 98, 98, 98, -390, -390, 105, + 98, -339, -337, 98, 98, -432, 281, 326, 328, 105, + 105, 105, 105, 34, 98, -433, 34, 769, 768, 770, + 771, 772, 98, 105, 34, 105, 34, 105, -331, 95, + -219, -171, 241, 243, 246, 85, 98, 334, 332, 333, + 330, 335, 336, 337, 166, 50, 96, 267, 264, -331, + -321, 269, -321, -321, -331, -338, -337, -329, -219, 267, + 410, 98, -174, -386, 18, 177, -342, -342, -319, -219, + -386, -342, -319, -219, -319, -319, -319, -319, -342, -342, + -342, -319, -337, -337, -219, -219, -219, -219, -219, -219, + -219, -349, -320, -319, 744, 98, -313, 18, 85, -349, + -349, -328, 26, 26, 96, 350, 447, 448, -347, 347, + -107, -331, 98, -13, -32, -21, -20, -22, 166, -13, + 96, 621, -212, -219, 744, 744, 744, 744, 744, 744, + -174, -174, -174, -174, 645, -237, -451, 157, 132, 133, + 130, 131, -191, 42, 43, 41, -174, -238, -244, -249, + 115, 177, 159, 174, -280, -179, -182, -179, -179, -179, + -179, -179, -179, 236, -179, 236, -179, -179, -179, -179, + -179, -179, -350, -331, 98, 193, -187, -186, 114, -449, + -187, 618, 96, -254, 237, -174, -174, -427, -145, 484, + 485, 486, 487, 489, 490, 491, 494, 495, 499, 500, + 483, 501, 488, 493, 496, 497, 498, 492, 372, -174, + -240, -239, -240, -174, -174, -256, -257, 161, -251, -174, + -459, -459, 105, 184, -153, 27, 44, -153, -153, -153, + -153, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -153, -174, -146, 483, 501, 488, 493, 496, 497, + 498, 492, 372, 502, 503, 504, 505, 506, 507, 508, + 509, 510, -146, -145, -174, -174, -174, -174, -174, -174, + -174, -174, -113, -174, 142, 143, 144, -239, -174, -179, + -174, -174, -174, -459, -174, -174, -174, -240, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -426, -425, -424, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -239, -239, -239, -239, -239, -174, -459, -174, -193, -177, + 105, -295, 114, -174, -174, -174, -174, -174, -174, -240, + -333, -338, -329, -330, -239, -240, -240, -239, -239, -174, + -174, -174, -174, -174, -174, -174, -174, -459, -174, -174, + -174, -174, -174, -287, -459, -239, 96, -442, 446, 447, + 742, -340, 301, -339, 28, -240, 98, 18, -298, 86, + -331, -268, -268, 69, 70, 65, -157, -158, -162, -459, + 305, -166, 318, 264, -163, -171, -331, 265, 265, 265, + -322, 269, 511, 166, -41, 28, 96, -458, 671, 671, + 68, 98, -369, -308, 400, 401, 193, -296, -174, -174, + 96, -267, 30, 31, -219, -334, 184, -338, -219, -300, + 301, -219, -197, -199, -200, -201, -222, -250, -458, -202, + -34, 641, 638, 18, -212, -213, -221, -337, -306, -351, + -305, 96, 445, 447, 448, 85, 134, -174, -370, 192, + -398, -397, -396, -379, -381, -382, -383, 97, -370, -375, + 407, 406, -367, -367, -367, -367, -367, -367, -369, -369, + -369, -367, 95, -367, 95, -367, -367, -367, -367, -372, + 95, -372, -372, -373, -372, 95, -373, -374, 95, -374, + -409, -174, -406, -405, -403, -404, 274, 110, 718, 670, + 621, 662, 704, 86, -401, -267, 105, -459, -108, 621, + -331, 100, 98, 100, 98, 100, 98, -138, -77, -1, + 781, 782, 783, 96, 23, -380, -379, -76, 326, -412, + -413, 301, -408, -402, -388, 151, -387, -388, -388, -331, + 96, 32, 139, 139, 139, 139, 621, 243, 35, -323, + 661, 157, 718, 670, -379, -76, 267, 267, -350, -350, + -350, 98, 98, -318, 777, -212, -166, 307, 307, 264, + 320, 264, 320, -219, 331, 334, 332, 333, 330, 335, + 336, 337, 338, 41, 41, 41, 41, 41, 41, 41, + 319, 321, 323, 309, -219, -219, -321, 85, -214, -219, + 29, -337, -219, 98, 98, -219, -319, -319, -219, -319, + -319, -219, 98, -337, -455, 351, -331, 387, 735, 737, + -149, 446, 96, 621, 26, -150, 26, -458, -451, 132, + 133, -249, -249, -249, -238, -179, -182, -179, 156, 289, + -179, -179, -458, -251, -459, -333, 28, 96, 86, -459, + 182, 96, -459, -459, 96, 18, 96, -259, -257, 163, + -174, -459, 96, -459, -459, -239, -174, -174, -174, -174, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -239, -459, 96, 96, 18, -354, 28, -459, -459, -459, + -459, 96, -459, -459, -258, -459, 18, -459, 86, 96, + 177, 96, -459, -459, -459, 96, 96, -459, -459, 96, + -459, 96, -459, -459, -459, -459, -459, -459, 96, -459, + 96, -459, -459, -459, 96, -459, 96, -459, -459, 96, + -459, 96, -459, 96, -459, 96, -459, 96, -459, 96, + -459, 96, -459, 96, -459, 96, -459, 96, -459, 96, + -459, 96, -459, 96, -459, 96, -459, 96, -459, 96, + -459, 96, -459, 96, -459, -459, -459, 96, -459, 96, + -459, 96, -459, -459, 96, -459, 96, -459, 96, -459, + 96, 96, -459, 96, 96, 96, -459, 96, 96, 96, + 96, -459, -459, -459, -459, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, -459, -459, -459, -459, -459, + -459, 96, -120, 646, -459, -459, 96, -459, 96, 96, + 96, 96, 96, -459, -458, 237, -459, -459, -459, -459, + -459, 96, 96, 96, 96, 96, 96, -459, -459, -459, + 96, 96, -459, 96, -459, 96, -459, -441, 741, 447, + -226, -225, -223, 83, 268, 84, -458, -339, -459, -187, + -295, -297, -295, -232, -331, 105, 114, -270, -196, 96, + -198, 18, -322, 266, 325, -322, -171, -166, -407, -404, + -331, -331, -331, -337, 157, -173, 478, -168, 98, 100, + -249, -247, -459, -369, -275, -281, -316, -331, 98, 193, + -371, 193, -371, 400, 401, -266, 237, -227, 19, -231, + 35, 63, -32, -458, -458, 35, 96, -215, -217, -216, + -218, 75, 79, 81, 76, 77, 78, 82, -345, 28, + -34, -197, -34, -458, -219, -212, -460, 18, 86, -460, + 96, 237, -307, -310, 449, 446, 452, -427, 98, -137, + 96, -396, -383, -271, -167, 46, -376, 408, -369, 629, + -369, -369, -378, 98, -378, 105, 105, 105, 97, -55, + -50, -51, 36, 90, -403, -390, 98, 45, -390, -390, + -331, 97, -267, -109, 315, 741, -2, 780, 786, 151, + 95, 413, 22, -289, 96, 97, -252, 327, 97, -139, + -331, 97, 95, -388, -388, -331, -458, 264, 34, 34, + 718, 670, 661, -76, -252, -251, -331, -370, 779, 778, + 97, 266, -219, -219, -219, -219, -219, -219, 246, 243, + 436, -450, 339, 98, -450, 310, 267, -212, -219, 96, + -110, 283, 278, -342, -342, 36, -219, 446, 753, 751, + -174, 156, 289, -191, -182, -145, -145, -179, -352, 193, + 373, 288, 371, 367, 387, 378, 406, 369, 407, 364, + 363, 362, -352, -350, -179, -239, -174, -174, -174, 165, + -174, 162, -174, -121, -120, -459, -459, -459, -459, -459, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -263, -174, -174, -174, -459, 193, 373, -121, -174, 18, + -174, -350, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -424, -174, -239, + -174, -239, -174, -174, -174, -174, -174, -425, -425, -425, + -425, -425, -239, -239, -239, -239, -174, -458, -331, -124, + -123, -122, 697, 268, -120, -193, -124, -193, 236, -174, + 236, 236, 236, -174, -240, -333, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -223, -384, 307, -384, + 307, -384, -301, 96, -312, 26, 18, 63, 63, -196, + -227, -158, -197, -219, -219, -165, 316, 324, -219, -166, + 266, 85, -407, -407, -407, 29, 95, -169, 101, -278, + 734, -284, 52, -282, -283, 53, -279, 54, 62, -371, + -371, 184, -268, -174, -302, 85, -303, -311, -251, -243, + -246, -244, -458, -288, -459, -331, -301, -303, -199, -200, + -200, -199, -200, 75, 75, 75, 80, 75, 80, 75, + -216, -337, -459, -174, -340, 86, -197, -197, -221, -337, + 184, 446, 450, 451, -396, -448, 130, 157, 34, 85, + 404, 110, -446, 192, 658, 713, 718, 670, 662, 704, + -447, 270, 150, 151, 282, 28, 47, 97, 96, 97, + 96, 97, 97, 96, -324, -323, -51, -50, -390, -390, + 105, -427, 98, 98, 275, -140, 784, 105, 95, -3, + 90, -174, 95, 23, -379, -251, -414, -364, -415, -365, + -366, -5, -6, -391, -143, 63, 110, -80, 50, 265, + 764, 765, 139, -458, 777, -406, -289, -410, -412, -219, + -178, -458, -190, -176, -175, -177, -183, 182, 183, 288, + 369, 370, -252, -219, -429, 86, 307, 404, 307, 404, + 98, -452, 340, 98, -452, -219, -110, -55, -219, -319, + -319, 36, -427, -459, -191, -182, -152, 177, 621, -355, + 628, -367, -367, -367, -374, -367, 359, -367, 359, -367, + -459, -459, -459, 96, -459, 26, -459, 96, -174, 96, + -121, -121, -121, -121, -121, -148, 517, 96, 96, -459, + 95, 95, -459, -174, -459, -459, -459, 96, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, 96, -459, 96, -459, 96, -459, 96, -459, 96, + -459, 96, -459, 96, -459, 96, -459, 96, -459, 96, + -459, 96, -459, 96, -459, 96, -459, 96, -459, 96, + -459, 96, -459, -459, 96, -459, -459, -459, 96, -459, + 96, -459, 96, -459, -459, -459, 96, -353, 719, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -119, -332, -120, 679, 679, -459, -120, -260, 96, -179, + -459, -179, -179, -179, -459, -459, -459, 96, -459, 96, + 96, -459, 96, -459, 96, -459, -459, -459, -459, 96, + -224, 26, -458, -224, -458, -224, -459, -295, -219, -227, + -261, 20, -458, 266, -219, -219, 85, 85, 85, 97, + -275, 57, 379, -286, -285, 61, 53, -283, 23, 55, + 23, 33, -302, 96, 166, -344, 96, 28, -459, -459, + 96, 63, 237, -459, -227, -210, -209, 85, 86, -211, + 85, -209, 75, 75, -290, 96, -300, -197, -227, -227, + 237, 130, -458, -178, 16, 98, 98, -427, -445, 768, + 769, 34, 770, 105, -390, -390, 151, 151, -219, 95, + -369, 98, -369, 105, 105, 34, 91, 92, 93, 34, + 87, 88, 89, 317, -411, 95, 23, -174, 95, 166, + 97, -289, -289, 303, 177, -390, 762, 309, 309, -390, + -390, -390, -142, -141, 784, 97, -459, 96, -377, 621, + 624, -174, -184, -184, -290, -423, 621, -428, -331, -331, + -331, -331, 105, 107, -459, 619, 82, 622, -459, -369, + -174, -174, -174, -174, -268, 98, -174, -174, 105, 105, + -121, -459, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -239, -174, -459, -207, -206, -208, 745, 130, + 34, -352, -459, -241, 301, -127, -126, -125, 18, -459, + -174, -145, -145, -145, -145, -174, -174, -174, -174, -174, + -174, -458, 75, 22, 20, -292, -331, 270, -458, -292, + -458, -340, -261, -262, 21, 23, -420, -419, -417, -418, + 177, 725, 724, -219, -219, -219, -219, -276, 59, -274, + 58, -274, -285, 23, 23, 98, 23, 98, 151, -311, + -174, -246, -339, 63, -32, -331, -243, -331, -263, -174, + 95, -174, -187, -227, -227, -174, -234, 541, 543, 544, + 545, 542, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 546, 557, 518, 519, 520, 117, 119, 118, + 127, 128, 521, 522, 523, 373, 569, 570, 564, 567, + 568, 566, 565, 388, 389, 524, 587, 588, 592, 591, + 589, 590, 593, 596, 597, 598, 599, 600, 601, 603, + 602, 594, 595, 572, 571, 573, 574, 575, 576, 577, + 578, 580, 579, 581, 582, 583, 584, 585, 586, 604, + 605, 606, 607, 608, 610, 609, 614, 613, 611, 612, + 616, 615, 525, 526, 120, 121, 122, 123, 124, 125, + 126, 527, 530, 528, 531, 532, 533, 538, 539, 534, + 535, 536, 537, 540, 399, 397, 398, 394, 393, 392, + 465, 470, 471, 473, 558, 559, 560, 561, 562, 563, + 726, 727, 728, 729, 730, 731, 732, 733, 98, 98, + 95, -174, 97, 97, -410, -77, 97, -291, -289, 105, + 97, 304, -244, -458, 98, -390, -390, -390, 105, 105, + -339, -459, 96, -331, -447, -412, 625, 625, -459, 28, + -422, -421, -333, 95, 86, 68, 620, 623, -459, -459, + -459, 96, -459, -459, -459, 97, 97, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, 96, + -459, -206, -208, -459, 85, -187, -263, 23, -124, 326, + 328, -124, -459, -459, -459, -459, -459, 96, -459, -459, + 96, -459, 96, -459, -459, -292, -459, 23, 23, 96, + -459, -292, -459, -292, -226, -262, -134, -133, -132, 652, + -174, -239, -459, 96, -331, -277, 60, 85, 134, 98, + 98, 98, 16, -458, -243, 237, -344, -268, -289, -204, + 413, -263, -459, -289, 97, 97, 786, 151, 97, -244, + -151, -458, 300, -339, 98, 98, -141, -144, -32, 96, + 166, -289, -219, 68, -174, -239, -459, 85, 633, 745, + -118, -117, -114, 756, 782, -239, -120, -120, -174, -174, + -174, -459, -331, 270, -459, -459, -134, 96, -131, -130, + -331, -356, 621, -81, -82, -83, -8, 342, 269, 253, + 284, -417, -357, 85, 134, -303, -289, -344, -331, 97, + -459, -458, -268, 97, -272, 95, -3, 300, -364, -415, + -365, -366, -5, -6, -391, -108, -421, -395, -337, -333, + 98, 105, 97, 621, -459, -459, -116, 159, 754, 716, + -183, 236, -459, 96, -459, 96, -459, 96, -132, 96, + 28, 626, 787, -84, -85, -83, -82, -174, -289, -59, + -331, 256, 257, 258, -65, -63, -64, 260, -331, -459, + -340, -205, -203, -331, 676, -438, -437, 617, -448, -444, + 130, 157, 110, -446, 713, 718, 670, 140, 141, -174, + 95, -459, 237, -429, 622, -116, 755, 690, 664, 690, + 664, -179, -174, -174, -174, -130, -458, 165, -83, 162, + -357, 255, 262, -66, -67, 35, -170, 66, -459, 96, + 26, -357, -79, 687, -435, -436, 85, -439, 419, 686, + 707, 130, 98, 105, 97, -289, -338, -423, 623, 156, + -145, -459, 96, -459, 96, -459, -119, -85, -273, 34, + 26, 26, -68, -69, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, -68, 98, -203, 683, + -370, -187, -436, 85, -435, 85, 17, 16, -4, 785, + 97, -116, 690, 664, -174, -174, -459, -89, -88, -87, + 164, -458, -178, -60, -61, -62, -64, 261, 157, 259, + 105, -63, -62, 166, -78, 29, -204, -434, 283, 278, + 281, 35, -434, 105, -4, -459, -459, -86, 163, -87, + -174, -174, -82, 96, 254, -183, 687, 277, 34, 130, + 165, -85, 162, -459, -61, -187, 269, -85, -207, -206, + -206, } var yyDef = [...]int{ - 894, -2, -2, 896, 2, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 70, 72, 73, 894, 894, 894, 0, 894, 0, - 0, 894, -2, -2, 894, 1655, 0, 894, 0, 889, - 0, -2, 809, 815, 0, 824, -2, 0, 0, 894, - 894, 2305, 2305, 889, 0, 0, 0, 0, 0, 894, - 894, 894, 894, 1660, 1507, 50, 894, 0, 88, 89, - 844, 845, 846, 65, 0, 2303, 85, 894, 895, 1, - 3, 71, 75, 0, 0, 0, 58, 1516, 0, 78, - 0, 0, 898, 0, 0, 1638, 894, 894, 0, 129, - 130, 0, 0, 0, -2, 133, -2, 162, 163, 164, - 0, 169, 614, 531, 583, 529, 568, -2, 517, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 534, 406, 406, 0, 0, -2, 517, 517, 517, - 1640, 0, 0, 0, 565, 468, 406, 406, 406, 0, - 406, 406, 406, 406, 0, 0, 406, 406, 406, 406, - 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, - 406, 406, 406, 1534, 168, 1656, 1653, 1654, 1816, 1817, - 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, - 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, - 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, - 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, - 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, - 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, - 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, - 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, - 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, - 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, - 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, - 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, - 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, - 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, - 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, - 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, - 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, - 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, - 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, - 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, - 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, - 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, - 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, - 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, - 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, - 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, - 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, - 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, - 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, - 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, - 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, - 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, - 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, - 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, - 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, - 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, - 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, - 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, - 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, - 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, - 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, - 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, - 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, - 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, - 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, - 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, - 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, - 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, - 2298, 2299, 2300, 2301, 2302, 0, 1632, 0, 727, 998, - 0, 890, 891, 0, 798, 798, 0, 798, 798, 798, - 798, 0, 0, 0, 741, 0, 0, 0, 0, 795, - 0, 757, 758, 0, 795, 0, 764, 801, 0, 0, - 771, 798, 798, 774, 2306, 0, 2306, 2306, 0, 0, - 1623, 0, 792, 790, 804, 805, 42, 808, 811, 812, - 813, 814, 817, 0, 828, 831, 1649, 1650, 0, 833, - 838, 857, 858, 0, 45, 1158, 0, 1022, 0, 1033, - -2, 1044, 1061, 1062, 1063, 1064, 1065, 1067, 1068, 1069, - 0, 0, 0, 0, 1074, 1075, 0, 0, 0, 0, - 0, 1138, 0, 0, 0, 0, 2021, 1478, 0, 0, - 1440, 1440, 1174, 1440, 1440, 1442, 1442, 1442, 1869, 2013, - 2022, 2207, 1830, 1836, 1837, 1838, 2153, 2154, 2155, 2156, - 2249, 2250, 2254, 1934, 1825, 2221, 2222, 0, 2302, 1973, - 1981, 1982, 1958, 1967, 2006, 2111, 2233, 1848, 2001, 2073, - 1930, 1953, 1954, 2092, 2093, 1977, 1978, 1957, 2159, 2161, - 2177, 2178, 2163, 2165, 2174, 2180, 2185, 2164, 2176, 2181, - 2194, 2198, 2201, 2202, 2203, 2171, 2169, 2182, 2186, 2188, - 2190, 2196, 2199, 2172, 2170, 2183, 2187, 2189, 2191, 2197, - 2200, 2158, 2162, 2166, 2175, 2193, 2173, 2192, 2167, 2179, - 2184, 2195, 2168, 2160, 1971, 1974, 1961, 1962, 1964, 1966, - 1972, 1979, 1985, 1963, 1984, 1983, 0, 1959, 1960, 1965, - 1976, 1980, 1968, 1969, 1970, 1975, 1986, 2028, 2027, 2026, - 2072, 1997, 2071, 0, 0, 0, 0, 0, 1819, 1875, - 1876, 2204, 1362, 1363, 1364, 1365, 0, 0, 0, 0, - 0, 0, 0, 295, 296, 1491, 1492, 44, 1157, 1619, - 1442, 1442, 1442, 1442, 1442, 1442, 1096, 1097, 1098, 1099, - 1100, 1126, 1127, 1133, 1134, 2087, 2088, 2089, 2090, 1913, - 2244, 1922, 1923, 2068, 2069, 1936, 1937, 2276, 2277, -2, - -2, -2, 237, 238, 239, 240, 241, 242, 243, 244, - 0, 1874, 2219, 2220, 233, 0, 1617, 1618, 300, 297, - 298, 299, 1140, 1141, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 0, 302, 303, 2305, - 0, 867, 0, 0, 0, 0, 0, 0, 1661, 1662, - 1516, 0, 1508, 1507, 63, 0, 894, -2, 0, 0, - 0, 0, 47, 0, 52, 955, 0, 897, 77, 76, - 1556, 1559, 0, 0, 0, 59, 1517, 67, 69, 1518, - 0, 899, 900, 0, 931, 935, 0, 0, 0, 1639, - 1638, 1638, 105, 0, 0, 106, 126, 127, 128, 0, - 0, 112, 113, 1625, 1626, 43, 0, 0, 180, 181, - 0, 1114, 433, 0, 176, 0, 426, 365, 0, 1534, - 0, 0, 0, 0, 0, 1636, 0, 1633, 157, 158, - 165, 166, 167, 406, 406, 406, 580, 0, 0, 168, - 168, 538, 539, 540, 0, 0, -2, 431, 0, 518, - 0, 0, 420, 420, 424, 422, 423, 0, 0, 0, - 0, 0, 0, 0, 0, 557, 0, 558, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 675, 0, 407, - 0, 578, 579, 469, 0, 0, 0, 0, 0, 0, - 0, 0, 1641, 1642, 0, 555, 556, 0, 0, 0, - 406, 406, 0, 0, 0, 0, 406, 406, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 156, 1547, 0, 0, - 0, -2, 0, 719, 0, 0, 0, 1634, 1634, 0, - 726, 0, 0, 0, 731, 0, 0, 732, 0, 795, - 795, 793, 794, 734, 735, 736, 737, 798, 0, 0, - 415, 416, 417, 795, 798, 0, 798, 798, 798, 798, - 795, 795, 795, 798, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2306, 801, 798, 0, 765, 0, 766, - 767, 768, 769, 772, 773, 775, 2307, 2308, 1651, 1652, - 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, - 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, - 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, - 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, - 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, - 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, - 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, - 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, - 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, - 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, - 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, - 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, - 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, - 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, - 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, - 1813, 1814, 1815, 2306, 2306, 779, 783, 787, 785, 1624, - 810, 816, 818, 819, 0, 0, 829, 832, 851, 49, - 1921, 837, 49, 839, 840, 841, 842, 843, 869, 870, - 875, 0, 0, 0, 0, 881, 882, 883, 0, 0, - 886, 887, 888, 0, 0, 0, 0, 0, 1020, 0, - 0, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1045, 1046, 0, - 0, 0, 1070, 1071, 1072, 1073, 1076, 0, 1087, 0, - 1089, 1487, -2, 0, 0, 0, 1081, 1082, 0, 0, - 0, 1644, 1644, 0, 0, 0, 1479, 0, 0, 1172, - 0, 1173, 1175, 1176, 1177, 0, 1178, 1179, 904, 904, - 904, 904, 904, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 904, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1644, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1644, 0, 0, 1644, 1644, 0, 0, 225, - 226, 227, 228, 229, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, - 245, 246, 247, 248, 249, 304, 250, 251, 252, 1157, - 0, 0, 894, 0, 46, 859, 860, 0, 981, 1644, - 0, 0, 910, 0, 1659, 57, 66, 68, 1516, 61, - 1516, 0, 914, 0, 0, -2, -2, 915, 916, 920, - 921, 922, 923, 924, 925, 926, 927, 928, 54, 2304, - 55, 0, 74, 0, 48, 0, 0, 79, 80, 1607, - 1611, 0, 1557, 0, 1560, 0, 0, 0, 379, 1564, - 0, 0, 1509, 1510, 1513, 0, 932, 2019, 936, 0, - 938, 939, 0, 0, 103, 0, 997, 0, 0, 0, - 114, 0, 116, 117, 0, 0, 0, 390, 1627, 1628, - 1629, -2, 413, 0, 390, 374, 312, 313, 314, 365, - 316, 365, 365, 365, 365, 365, 379, 379, 379, 365, - 348, 349, 350, 351, 0, 365, 0, 333, 365, 365, - 365, 365, 355, 356, 357, 358, 359, 360, 361, 362, - 317, 318, 319, 320, 321, 322, 323, 324, 325, 367, - 367, 367, 367, 367, 371, 371, 0, 1115, 0, 394, - 0, 1513, 0, 0, 1547, 1636, 1646, 0, 0, 0, - 0, 0, 135, 0, 0, 0, 581, 625, 532, 569, - 582, 0, 535, 536, -2, 0, 0, 517, 0, 519, - 0, 414, 0, -2, 0, 424, 0, 420, 424, 421, - 424, 412, 425, 559, 560, 561, 0, 563, 564, 655, - 967, 0, 0, 0, 0, 0, 661, 662, 663, 0, - 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, - 570, 571, 572, 573, 574, 575, 576, 577, 0, 0, - 0, 0, 519, 0, 566, 0, 0, 470, 471, 472, - 0, 0, 475, 476, 477, 478, 0, 0, 481, 482, - 483, 984, 985, 484, 485, 510, 511, 512, 486, 487, - 488, 489, 490, 491, 492, 504, 505, 506, 507, 508, - 509, 493, 494, 495, 496, 497, 498, 501, 0, 150, - 1538, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1634, 0, - 0, 0, 0, 913, 999, 1657, 1658, 728, 0, 0, - 799, 800, 0, 418, 419, 798, 798, 738, 780, 0, - 798, 742, 781, 743, 745, 744, 746, 759, 760, 798, - 749, 796, 797, 750, 751, 752, 753, 754, 755, 756, - 776, 761, 762, 763, 802, 0, 806, 807, 777, 778, - 0, 788, 0, 0, 0, 822, 823, 0, 830, 854, - 852, 853, 855, 847, 848, 849, 850, 0, 856, 0, - 0, 872, 99, 877, 878, 879, 880, 892, 885, 1159, - 1017, 1018, 1019, 0, 1021, 1027, 0, 1142, 1144, 1025, - 1026, 1029, 0, 0, 0, 1023, 1034, 1154, 1155, 1156, - 0, 0, 0, 0, 0, 1038, 1042, 1047, 1048, 1049, - 1050, 1051, 0, 1052, 0, 1055, 1056, 1057, 1058, 1059, - 1060, 1066, 1455, 1456, 1457, 1085, 305, 306, 0, 1086, - 0, 0, 0, 0, 0, 0, 0, 0, 1402, 1403, - 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, - 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1158, 0, - 1645, 0, 0, 0, 1485, 1482, 0, 0, 0, 1441, - 1443, 0, 0, 0, 905, 906, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1422, 1423, 1424, 1425, 1426, 1427, 1428, - 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, - 1439, 0, 0, 1458, 0, 0, 0, 0, 0, 0, - 0, 1478, 0, 1091, 1092, 1093, 0, 0, 0, 0, - 0, 0, 1220, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 145, 146, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1366, 1367, - 1368, 1369, 41, 0, 0, 0, 0, 0, 0, 0, - 1489, 0, -2, -2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1391, 0, 0, - 0, 0, 0, 0, 1615, 0, 0, 862, 863, 865, - 0, 1001, 0, 982, 0, 0, 868, 0, 909, 0, - 912, 60, 62, 918, 919, 0, 940, 929, 917, 56, - 51, 0, 0, 959, 0, 0, 1558, 1561, 1562, 379, - 1584, 0, 388, 388, 385, 1519, 1520, 0, 1512, 1514, - 1515, 81, 937, 933, 0, 1015, 0, 0, 996, 0, - 943, 945, 946, 947, 979, 0, 950, 951, 0, 0, - 0, 0, 0, 101, 998, 107, 0, 115, 0, 0, - 120, 121, 108, 109, 110, 111, 0, 614, -2, 465, - 182, 184, 185, 186, 177, -2, 377, 375, 376, 315, - 379, 379, 341, 342, 379, 344, 345, 346, 347, 0, - 353, 0, 334, 335, 336, 337, 326, 0, 327, 328, - 329, 369, 0, 330, 331, 0, 332, 432, 0, 1521, - 395, 396, 398, 406, 0, 401, 402, 0, 406, 406, - 0, 427, 428, 0, 1513, 1538, 0, 0, 1647, 1646, - 1646, 1646, 155, 0, 170, 171, 172, 173, 174, 175, - 650, 0, 0, 626, 648, 649, 168, 0, 0, 178, - 521, 520, 0, 682, 0, 430, 0, 0, 424, 424, - 409, 410, 562, 0, 0, 657, 658, 659, 660, 0, - 0, 0, 548, 459, 0, 549, 550, 519, 521, 0, - 0, 390, 473, 474, 479, 480, 499, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, - 598, 600, 603, 605, 523, 609, 611, 0, 599, 602, - 604, 606, 523, 610, 612, 1535, 1536, 1537, 0, 0, - 720, 0, 0, 456, 97, 1635, 725, 729, 730, 795, - 748, 782, 795, 740, 747, 770, 784, 786, 820, 821, - 826, 834, 835, 836, 876, 0, 0, 0, 0, 884, - 0, 0, 1028, 1143, 1145, 1030, 1031, 1032, 1035, 0, - 1039, 1043, 0, 0, 0, 0, 0, 1090, 1088, 1489, - 0, 0, 0, 1139, 0, 0, 1162, 1163, 0, 0, - 0, 0, 1483, 0, 0, 1170, 0, 1444, 1120, 0, - 0, 0, 0, 0, 1120, 1120, 1120, 1120, 1120, 1120, - 1120, 1120, 1120, 1120, 1507, 1197, 0, 0, 0, 0, - 0, 1202, 1203, 1204, 1120, 0, 1207, 1208, 0, 1210, - 0, 1211, 0, 0, 0, 0, 1218, 1219, 1221, 0, - 0, 1224, 1225, 0, 1227, 0, 1229, 1230, 1231, 1232, - 1233, 1234, 0, 1236, 0, 1238, 1239, 1240, 0, 1242, - 0, 1244, 1245, 0, 1247, 0, 1249, 0, 1252, 0, - 1255, 0, 1258, 0, 1261, 0, 1264, 0, 1267, 0, - 1270, 0, 1273, 0, 1276, 0, 1279, 0, 1282, 0, - 1285, 0, 1288, 0, 1291, 0, 1294, 0, 1297, 1298, - 1299, 0, 1301, 0, 1303, 0, 1306, 1307, 0, 1309, - 0, 1312, 0, 1315, 0, 0, 1316, 0, 0, 0, - 1320, 0, 0, 0, 0, 1329, 1330, 1331, 1332, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1343, - 1344, 1345, 1346, 1347, 1348, 0, 1350, 0, 1121, 0, - 0, 1121, 0, 0, 0, 0, 0, 1160, 1644, 0, - 1445, 1446, 1447, 1448, 1449, 0, 0, 0, 0, 0, - 0, 1389, 1390, 1392, 0, 0, 1395, 0, 1397, 0, - 1616, 861, 864, 866, 953, 1002, 1003, 0, 0, 0, - 0, 983, 1643, 907, 908, 911, 961, 0, 1493, 0, - 0, 940, 1015, 0, 941, 0, 53, 956, 0, 1608, - 1612, 1566, 1565, 1578, 1591, 388, 388, 382, 383, 389, - 384, 386, 387, 1511, 0, 1516, 0, 1605, 0, 894, - 1594, 0, 0, 0, 0, 0, 0, 0, 0, 986, - 0, 0, 989, 0, 0, 0, 0, 980, 951, 0, - 952, 0, -2, 0, 0, 95, 96, 0, 0, 0, - 118, 119, 0, 0, 125, 391, 392, 159, 168, 467, - 183, 440, 0, 0, 311, 378, 338, 339, 340, 343, - 0, 363, 0, 0, 0, 0, 461, 131, 1525, 1524, - 406, 406, 397, 0, 400, 0, 0, 0, 1648, 366, - 429, 0, 149, 0, 0, 0, 0, 1637, 620, 0, - 0, 627, 0, 0, 0, 530, 0, 541, 542, 0, - 654, -2, 716, 394, 0, 408, 411, 968, 0, 0, - 543, 0, 546, 547, 460, 521, 552, 553, 567, 554, - 502, 503, 500, 0, 0, 1548, 1549, 1554, 1552, 1553, - 136, 588, 590, 594, 589, 593, 0, 0, 0, 525, - 0, 613, 525, 586, 0, 456, 1521, 0, 724, 457, - 458, 798, 798, 871, 100, 0, 874, 0, 0, 0, - 0, 1036, 1040, 1053, 1054, 1450, 1476, 365, 365, 1463, - 365, 371, 1466, 365, 1468, 365, 1471, 365, 1474, 1475, - 0, 0, 1083, 0, 0, 0, 0, 1169, 1486, 0, - 0, 1180, 1119, 1120, 1120, 1120, 1120, 1120, 1186, 1187, - 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1480, 0, - 0, 0, 1201, 0, 0, 1205, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 147, 148, 0, 0, 0, - 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1114, 1118, 0, 1122, 1123, - 0, 0, 1352, 0, 0, 1370, 0, 0, 0, 0, - 0, 0, 0, 1490, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1004, 1011, 0, 1011, 0, 1011, - 0, 0, 0, 1630, 1631, 1494, 1495, 1015, 1496, 930, - 942, 960, 1584, 0, 1577, 0, -2, 1586, 0, 0, - 0, 1592, 380, 381, 934, 82, 1016, 86, 0, 1605, - 1620, 0, 1602, 1609, 1613, 0, 0, 0, 1598, 0, - 1015, 944, 975, 977, 0, 972, 987, 988, 990, 0, - 992, 0, 994, 995, 955, 949, 0, 103, 0, 1015, - 1015, 102, 0, 1000, 122, 123, 124, 466, 187, 192, - 0, 0, 0, 197, 0, 199, 0, 0, 0, 204, - 205, 406, 406, 441, 0, 308, 310, 0, 0, 190, - 379, 0, 379, 0, 370, 372, 0, 442, 462, 1522, - 1523, 0, 0, 399, 403, 404, 405, 0, 151, 0, - 0, 0, 623, 0, 651, 0, 0, 0, 0, 0, - 0, 179, 522, 683, 684, 685, 686, 687, 688, 689, - 690, 691, 0, 406, 0, 0, 0, 406, 406, 406, - 0, 708, 393, 0, 0, 679, 676, 544, 0, 223, - 224, 231, 232, 234, 0, 0, 0, 0, 0, 551, - 955, 1539, 1540, 1541, 0, 1551, 1555, 139, 0, 0, - 0, 0, 596, 601, 607, 0, 524, 608, 721, 722, - 723, 98, 733, 739, 873, 893, 1024, 1037, 1041, 0, - 0, 0, 0, 1477, 1461, 379, 1464, 1465, 1467, 1469, - 1470, 1472, 1473, 1079, 1080, 1084, 0, 1166, 0, 1168, - 0, 1484, 0, 1181, 1182, 1183, 1184, 1185, 1516, 0, - 0, 0, 1200, 0, 0, 1120, 0, 1213, 1212, 1214, - 0, 1216, 1217, 1222, 1223, 1226, 1228, 1235, 1237, 1241, - 1243, 1246, 1248, 1250, 0, 1253, 0, 1256, 0, 1259, - 0, 1262, 0, 1265, 0, 1268, 0, 1271, 0, 1274, - 0, 1277, 0, 1280, 0, 1283, 0, 1286, 0, 1289, - 0, 1292, 0, 1295, 0, 1300, 1302, 0, 1305, 1308, - 1310, 0, 1313, 0, 1317, 0, 1319, 1321, 1322, 0, - 0, 0, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, - 1341, 1342, 1349, 0, 1112, 1351, 1124, 1125, 1130, 1354, - 0, 0, 0, 1357, 0, 0, 0, 1361, 1161, 1372, - 0, 1377, 0, 0, 1383, 0, 1387, 0, 1393, 1394, - 1396, 1398, 0, 0, 0, 0, 0, 0, 0, 981, - 962, 64, 1496, 1500, 0, 1571, 1569, 1569, 1579, 1580, - 0, 0, 1587, 0, 0, 0, 0, 87, 0, 0, - 1593, 0, 0, 1614, 0, 0, 0, 0, 104, 1507, - 969, 976, 0, 0, 970, 0, 971, 991, 993, 948, - 0, 1015, 1015, 93, 94, 0, 193, 0, 195, 0, - 198, 200, 201, 202, 208, 209, 210, 211, 203, 0, - 0, 307, 309, 0, 0, 352, 364, 354, 0, 0, - 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 955, 152, - 153, 154, 615, 0, 625, 0, 957, 0, 618, 0, - 533, 0, 0, 0, 406, 406, 406, 0, 0, 0, - 0, 693, 0, 0, 656, 0, 664, 0, 0, 0, - 235, 236, 0, 1550, 587, 0, 137, 138, 0, 0, - 592, 526, 527, 1077, 0, 0, 0, 1078, 1462, 0, - 0, 0, 0, 0, 1481, 0, 0, 0, 0, 1206, - 1209, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1325, 0, 0, 0, 645, 646, 0, - 1401, 1117, 1507, 0, 1121, 1131, 1132, 0, 1121, 1371, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1012, 0, 0, 0, 963, 964, 0, 0, 0, - 1001, 1500, 1505, 0, 0, 1574, 0, 1567, 1570, 1568, - 1581, 0, 0, 1588, 0, 1590, 0, 1621, 1622, 1610, - 1603, 894, 1597, 1600, 1602, 1599, 1516, 973, 0, 978, - 0, 1507, 92, 0, 196, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 206, 207, 0, 0, - 368, 373, 0, 0, 0, 616, 0, 958, 628, 619, - 0, 706, 0, 710, 0, 0, 0, 713, 714, 715, - 692, 0, 696, 434, 680, 677, 678, 545, 0, 140, - 141, 0, 0, 0, 1451, 0, 1454, 1164, 1167, 1165, - 0, 1196, 1198, 1199, 1459, 1460, 1215, 1251, 1254, 1257, - 1260, 1263, 1266, 1269, 1272, 1275, 1278, 1281, 1284, 1287, - 1290, 1293, 1296, 1304, 1311, 1314, 1318, 1323, 0, 1326, - 0, 0, 1327, 0, 647, 1108, 0, 0, 1128, 1129, - 0, 1356, 1358, 1359, 1360, 1373, 0, 1378, 1379, 0, - 1384, 0, 1388, 1399, 0, 1006, 1013, 1014, 0, 1009, - 0, 1010, 0, 954, 1505, 84, 1506, 1503, 0, 1501, - 1498, 1563, 0, 1572, 1573, 1582, 1583, 1589, 0, 0, - 1602, 0, 1596, 90, 0, 0, 0, 1516, 194, 0, - 214, 0, 624, 0, 627, 617, 704, 705, 0, 717, - 709, 711, 712, 694, -2, 1542, 0, 0, 0, 595, - 1452, 0, 0, 1328, 0, 643, 644, 1116, 1109, 0, - 1094, 1095, 1113, 1353, 1355, 0, 0, 0, 1005, 965, - 966, 1007, 1008, 83, 0, 1502, 1136, 0, 1497, 0, - 1575, 1576, 1606, 0, 1595, 1601, 974, 981, 0, 91, - 447, 440, 1542, 0, 0, 0, 697, 698, 699, 700, - 701, 702, 703, 584, 1544, 142, 143, 0, 514, 515, - 516, 136, 0, 1171, 1324, 1110, 0, 0, 0, 0, - 0, 1374, 0, 1380, 0, 1385, 0, 1504, 0, 0, - 1499, 1604, 629, 0, 631, 0, -2, 435, 448, 0, - 188, 215, 216, 0, 0, 219, 0, 221, 222, 212, - 213, 132, 0, 0, 718, 0, 1545, 1546, 0, 139, - 0, 0, 1101, 1102, 1103, 1104, 1106, 0, 0, 0, - 0, 1137, 1114, 630, 0, 0, 390, 0, 640, 436, - 437, 0, 443, 444, 445, 446, 217, 218, 220, 652, - 0, 0, 513, 591, 1453, 0, 0, 1375, 0, 1381, - 0, 1386, 0, 632, 633, 641, 0, 438, 0, 439, - 0, 0, 0, 621, 0, 652, 1543, 1111, 1105, 1107, - 0, 0, 1135, 0, 642, 638, 449, 451, 452, 0, - 0, 450, 653, 622, 1376, 1382, 0, 453, 454, 455, - 634, 635, 636, 637, + 960, -2, 1, 2, -2, 962, 960, 4, 5, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 131, 133, 134, 960, 960, + 960, 0, 960, 0, 192, 0, 1021, -2, -2, 960, + 1737, 0, 960, 0, 955, 0, -2, 875, 881, 0, + 890, -2, 0, 0, 960, 960, 2413, 2413, 955, 0, + 0, 0, 0, 0, 960, 960, 960, 960, 1742, 1573, + 111, 960, 0, 149, 150, 960, 910, 911, 912, 126, + 0, 2411, 146, 960, 961, 3, 132, 136, 0, 0, + 0, 119, 1582, 0, 139, 0, 0, 964, 0, 0, + 1720, 960, 960, 0, 190, 191, 0, 0, 0, 0, + 0, 195, -2, 227, 228, 229, 0, 234, 679, 596, + 648, 594, 633, -2, 582, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 599, 471, 471, + 0, 0, -2, 582, 582, 582, 1722, 0, 0, 0, + 630, 533, 471, 471, 471, 0, 471, 471, 471, 471, + 0, 0, 471, 471, 471, 471, 471, 471, 471, 471, + 471, 471, 471, 471, 471, 471, 471, 471, 471, 1600, + 233, 1738, 1735, 1736, 1910, 1911, 1912, 1913, 1914, 1915, + 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, + 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, + 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, + 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, + 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, + 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, + 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, + 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, + 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, + 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, + 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, + 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, + 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, + 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, + 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, + 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, + 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, + 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, + 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, + 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, + 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, + 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, + 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, + 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, + 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, + 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, + 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, + 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, + 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, + 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, + 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, + 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, + 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, + 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, + 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, + 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, + 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, + 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, + 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, + 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, + 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, + 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, + 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, + 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, + 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, + 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, + 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, + 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, + 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, + 2406, 2407, 2408, 2409, 2410, 0, 1714, 0, 793, 1064, + 0, 956, 957, 0, 864, 864, 0, 864, 864, 864, + 864, 0, 0, 0, 807, 0, 0, 0, 0, 861, + 0, 823, 824, 0, 861, 0, 830, 867, 0, 0, + 837, 864, 864, 840, 2414, 0, 2414, 2414, 0, 0, + 1705, 0, 858, 856, 870, 871, 103, 874, 877, 878, + 879, 880, 883, 0, 894, 897, 1731, 1732, 0, 899, + 904, 923, 924, 0, 106, 1224, 0, 1088, 0, 1099, + -2, 1110, 1127, 1128, 1129, 1130, 1131, 1133, 1134, 1135, + 0, 0, 0, 0, 1140, 1141, 0, 0, 0, 0, + 0, 1204, 0, 0, 0, 0, 2125, 1544, 0, 0, + 1506, 1506, 1240, 1506, 1506, 1508, 1508, 1508, 1969, 2116, + 2126, 2314, 1924, 1930, 1931, 1932, 2259, 2260, 2261, 2262, + 2357, 2358, 2362, 2036, 1919, 2329, 2330, 0, 2410, 2076, + 2084, 2085, 2061, 2070, 2109, 2216, 2341, 1943, 2104, 2178, + 2032, 2056, 2057, 2197, 2198, 2080, 2081, 2060, 2265, 2267, + 2283, 2284, 2269, 2271, 2280, 2286, 2291, 2270, 2282, 2287, + 2300, 2304, 2307, 2308, 2309, 2277, 2275, 2288, 2292, 2294, + 2296, 2302, 2305, 2278, 2276, 2289, 2293, 2295, 2297, 2303, + 2306, 2264, 2268, 2272, 2281, 2299, 2279, 2298, 2273, 2285, + 2290, 2301, 2274, 2266, 2074, 2077, 2064, 2065, 2067, 2069, + 2075, 2082, 2088, 2066, 2087, 2086, 0, 2062, 2063, 2068, + 2079, 2083, 2071, 2072, 2073, 2078, 2089, 2132, 2131, 2130, + 2177, 2100, 2176, 0, 0, 0, 0, 0, 1913, 1976, + 1977, 2311, 1428, 1429, 1430, 1431, 0, 0, 0, 0, + 0, 0, 0, 360, 361, 1557, 1558, 105, 1223, 1701, + 1508, 1508, 1508, 1508, 1508, 1508, 1162, 1163, 1164, 1165, + 1166, 1192, 1193, 1199, 1200, 2192, 2193, 2194, 2195, 2014, + 2352, 2023, 2024, 2173, 2174, 2038, 2039, 2384, 2385, -2, + -2, -2, 302, 303, 304, 305, 306, 307, 308, 309, + 0, 1975, 2327, 2328, 298, 0, 1699, 1700, 365, 362, + 363, 364, 1206, 1207, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 0, 367, 368, 2413, + 0, 933, 0, 0, 0, 0, 0, 0, 1743, 1744, + 1582, 0, 1574, 1573, 124, 0, 960, -2, 0, 0, + 0, 0, -2, 108, 0, 113, 1021, 0, 963, 138, + 137, 1633, 1636, 0, 0, 0, 1643, 1645, 1646, 1647, + 102, 120, 1583, 128, 130, 1584, 0, 965, 966, 0, + 997, 1001, 0, 0, 0, 1721, 1720, 1720, 166, 0, + 0, 167, 187, 188, 189, 0, 0, 173, 174, 1707, + 1708, 104, 0, 0, 245, 246, 0, 1180, 498, 0, + 241, 0, 491, 430, 0, 0, 0, 1025, 230, 231, + 232, 471, 471, 471, 645, 0, 0, 233, 233, 603, + 604, 605, 0, 0, -2, 496, 0, 583, 0, 0, + 485, 485, 489, 487, 488, 0, 0, 0, 0, 0, + 0, 0, 0, 622, 0, 623, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 740, 0, 472, 0, 643, + 644, 534, 0, 0, 0, 0, 0, 0, 0, 0, + 1723, 1724, 0, 620, 621, 0, 0, 0, 471, 471, + 0, 0, 0, 0, 471, 471, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 221, 1623, 0, 0, 222, 223, + 1601, 0, -2, 0, 784, 0, 0, 0, 1716, 1716, + 1716, 0, 1715, 792, 0, 0, 0, 797, 0, 0, + 798, 0, 861, 861, 859, 860, 800, 801, 802, 803, + 864, 0, 0, 480, 481, 482, 861, 864, 0, 864, + 864, 864, 864, 861, 861, 861, 864, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2414, 867, 864, 0, + 831, 0, 832, 833, 834, 835, 838, 839, 841, 2415, + 2416, 1733, 1734, 1745, 1746, 1747, 1748, 1749, 1750, 1751, + 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, + 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, + 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, + 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, + 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, + 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, + 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, + 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, + 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, + 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, + 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, + 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, + 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, + 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, + 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, + 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 2414, 2414, + 845, 849, 853, 851, 1706, 876, 882, 884, 885, 0, + 0, 895, 898, 917, 110, 2022, 903, 110, 905, 906, + 907, 908, 909, 935, 936, 941, 0, 0, 0, 0, + 947, 948, 949, 0, 0, 952, 953, 954, 0, 0, + 0, 0, 0, 1086, 0, 0, 1212, 1213, 1214, 1215, + 1216, 1217, 1218, 1219, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1111, 1112, 0, 0, 0, 1136, 1137, 1138, + 1139, 1142, 0, 1153, 0, 1155, 1553, -2, 0, 0, + 0, 1147, 1148, 0, 0, 0, 1726, 1726, 0, 0, + 0, 1545, 0, 0, 1238, 0, 1239, 1241, 1242, 1243, + 0, 1244, 1245, 970, 970, 970, 970, 970, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 970, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1726, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1726, 0, 0, + 1726, 1726, 0, 0, 290, 291, 292, 293, 294, 295, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 366, 310, 311, 312, 313, 314, + 369, 315, 316, 317, 1223, 0, 0, 960, 0, 107, + 925, 926, 0, 1047, 1726, 0, 0, 976, 0, 1741, + 118, 127, 129, 1582, 122, 1582, 0, 980, 0, 0, + -2, -2, 981, 982, 986, 987, 988, 989, 990, 991, + 992, 993, 994, 115, 2412, 116, 0, 135, 1605, 0, + 1600, 1623, 0, 0, 0, 0, 1718, 1624, 0, 0, + 0, 109, 0, 140, 141, 1689, 1693, 0, 1634, 0, + 1637, 0, 0, 0, 444, 1641, 0, 0, 0, 1575, + 1576, 1579, 0, 998, 2122, 1002, 0, 1004, 1005, 0, + 0, 164, 0, 1063, 0, 0, 0, 175, 0, 177, + 178, 0, 0, 0, 455, 1709, 1710, 1711, -2, 478, + 0, 455, 439, 377, 378, 379, 430, 381, 430, 430, + 430, 430, 430, 444, 444, 444, 430, 413, 414, 415, + 416, 0, 430, 0, 398, 430, 430, 430, 430, 420, + 421, 422, 423, 424, 425, 426, 427, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 432, 432, 432, 432, + 432, 436, 436, 0, 1181, 0, 459, 0, 1579, 0, + 0, 1609, 1022, 0, 0, 0, 0, 646, 690, 597, + 634, 647, 0, 600, 601, -2, 0, 0, 582, 0, + 584, 0, 479, 0, -2, 0, 489, 0, 485, 489, + 486, 489, 477, 490, 624, 625, 626, 0, 628, 629, + 720, 1033, 0, 0, 0, 0, 0, 726, 727, 728, + 0, 730, 731, 732, 733, 734, 735, 736, 737, 738, + 739, 635, 636, 637, 638, 639, 640, 641, 642, 0, + 0, 0, 0, 584, 0, 631, 0, 0, 535, 536, + 537, 0, 0, 540, 541, 542, 543, 0, 0, 546, + 547, 548, 1050, 1051, 549, 550, 575, 576, 577, 551, + 552, 553, 554, 555, 556, 557, 569, 570, 571, 572, + 573, 574, 558, 559, 560, 561, 562, 563, 566, 0, + 215, 1605, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1716, 0, + 0, 0, 0, 0, 979, 1065, 1739, 1740, 794, 0, + 0, 865, 866, 0, 483, 484, 864, 864, 804, 846, + 0, 864, 808, 847, 809, 811, 810, 812, 825, 826, + 864, 815, 862, 863, 816, 817, 818, 819, 820, 821, + 822, 842, 827, 828, 829, 868, 0, 872, 873, 843, + 844, 0, 854, 0, 0, 0, 888, 889, 0, 896, + 920, 918, 919, 921, 913, 914, 915, 916, 0, 922, + 0, 0, 938, 160, 943, 944, 945, 946, 958, 951, + 1225, 1083, 1084, 1085, 0, 1087, 1093, 0, 1208, 1210, + 1091, 1092, 1095, 0, 0, 0, 1089, 1100, 1220, 1221, + 1222, 0, 0, 0, 0, 0, 1104, 1108, 1113, 1114, + 1115, 1116, 1117, 0, 1118, 0, 1121, 1122, 1123, 1124, + 1125, 1126, 1132, 1521, 1522, 1523, 1151, 370, 371, 0, + 1152, 0, 0, 0, 0, 0, 0, 0, 0, 1468, + 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, + 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1224, + 0, 1727, 0, 0, 0, 1551, 1548, 0, 0, 0, + 1507, 1509, 0, 0, 0, 971, 972, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1488, 1489, 1490, 1491, 1492, 1493, + 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, + 1504, 1505, 0, 0, 1524, 0, 0, 0, 0, 0, + 0, 0, 1544, 0, 1157, 1158, 1159, 0, 0, 0, + 0, 0, 0, 1286, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 206, 207, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1432, + 1433, 1434, 1435, 0, 0, 0, 0, 0, 0, 0, + 1555, 0, -2, -2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1457, 0, 0, + 0, 0, 0, 0, 1697, 0, 0, 928, 929, 931, + 0, 1067, 0, 1048, 0, 0, 934, 0, 975, 0, + 978, 121, 123, 984, 985, 0, 1006, 995, 983, 117, + 1718, 0, 0, 1718, 1623, 1605, 1728, 0, 0, 0, + 0, 0, 196, 0, 112, 0, 0, 0, 1635, 1638, + 1639, 444, 1666, 0, 453, 453, 450, 1644, 1585, 1586, + 0, 1578, 1580, 1581, 142, 1003, 999, 0, 1081, 0, + 0, 1062, 0, 1009, 1011, 1012, 1013, 1045, 0, 1016, + 1017, 0, 0, 0, 0, 0, 162, 1064, 168, 0, + 176, 0, 0, 181, 182, 169, 170, 171, 172, 0, + 679, -2, 530, 247, 249, 250, 251, 242, -2, 442, + 440, 441, 380, 444, 444, 406, 407, 444, 409, 410, + 411, 412, 0, 418, 0, 399, 400, 401, 402, 391, + 0, 392, 393, 394, 434, 0, 395, 396, 0, 397, + 497, 0, 1587, 460, 461, 463, 471, 0, 466, 467, + 0, 471, 471, 0, 492, 493, 0, 1579, 194, 1611, + 1026, 235, 236, 237, 238, 239, 240, 715, 0, 0, + 691, 713, 714, 233, 0, 0, 243, 586, 585, 0, + 747, 0, 495, 0, 0, 489, 489, 474, 475, 627, + 0, 0, 722, 723, 724, 725, 0, 0, 0, 613, + 524, 0, 614, 615, 584, 586, 0, 0, 455, 538, + 539, 544, 545, 564, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 662, 663, 665, 668, 670, 588, + 674, 676, 0, 664, 667, 669, 671, 588, 675, 677, + 1602, 1603, 1604, 0, 0, 785, 0, 0, 521, 158, + 1717, 790, 791, 795, 796, 861, 814, 848, 861, 806, + 813, 836, 850, 852, 886, 887, 892, 900, 901, 902, + 942, 0, 0, 0, 0, 950, 0, 0, 1094, 1209, + 1211, 1096, 1097, 1098, 1101, 0, 1105, 1109, 0, 0, + 0, 0, 0, 1156, 1154, 1555, 0, 0, 0, 1205, + 0, 0, 1228, 1229, 0, 0, 0, 0, 1549, 0, + 0, 1236, 0, 1510, 1186, 0, 0, 0, 0, 0, + 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, + 1573, 1263, 0, 0, 0, 0, 0, 1268, 1269, 1270, + 1186, 0, 1273, 1274, 0, 1276, 0, 1277, 0, 0, + 0, 0, 1284, 1285, 1287, 0, 0, 1290, 1291, 0, + 1293, 0, 1295, 1296, 1297, 1298, 1299, 1300, 0, 1302, + 0, 1304, 1305, 1306, 0, 1308, 0, 1310, 1311, 0, + 1313, 0, 1315, 0, 1318, 0, 1321, 0, 1324, 0, + 1327, 0, 1330, 0, 1333, 0, 1336, 0, 1339, 0, + 1342, 0, 1345, 0, 1348, 0, 1351, 0, 1354, 0, + 1357, 0, 1360, 0, 1363, 1364, 1365, 0, 1367, 0, + 1369, 0, 1372, 1373, 0, 1375, 0, 1378, 0, 1381, + 0, 0, 1382, 0, 0, 0, 1386, 0, 0, 0, + 0, 1395, 1396, 1397, 1398, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1409, 1410, 1411, 1412, 1413, + 1414, 0, 1416, 0, 1187, 0, 0, 1187, 0, 0, + 0, 0, 0, 1226, 1726, 0, 1511, 1512, 1513, 1514, + 1515, 0, 0, 0, 0, 0, 0, 1455, 1456, 1458, + 0, 0, 1461, 0, 1463, 0, 1698, 927, 930, 932, + 1019, 1068, 1069, 0, 0, 0, 0, 1049, 1725, 973, + 974, 977, 1027, 0, 1559, 0, 0, 1006, 1081, 0, + 1007, 0, 0, 0, 0, 0, 1605, 0, 0, 1729, + 1728, 1728, 1728, 220, 0, 1625, 1626, 1631, 1629, 1630, + 114, 1690, 1694, 1648, 1642, 1660, 1673, 453, 453, 447, + 448, 454, 449, 451, 452, 1577, 0, 1582, 0, 1687, + 0, 960, 1676, 0, 0, 0, 0, 0, 0, 0, + 0, 1052, 0, 0, 1055, 0, 0, 0, 0, 1046, + 1017, 0, 1018, 0, -2, 0, 0, 156, 157, 0, + 0, 0, 179, 180, 0, 0, 186, 456, 457, 224, + 233, 532, 248, 505, 0, 0, 376, 443, 403, 404, + 405, 408, 0, 428, 0, 0, 0, 0, 526, 193, + 1591, 1590, 471, 471, 462, 0, 465, 0, 0, 0, + 1730, 431, 494, 0, 1612, 1613, 685, 0, 0, 692, + 0, 0, 0, 595, 0, 606, 607, 0, 719, -2, + 781, 459, 0, 473, 476, 1034, 0, 0, 608, 0, + 611, 612, 525, 586, 617, 618, 632, 619, 567, 568, + 565, 0, 197, 653, 655, 659, 654, 658, 0, 0, + 0, 590, 0, 678, 590, 651, 0, 521, 1587, 0, + 789, 522, 523, 864, 864, 937, 161, 0, 940, 0, + 0, 0, 0, 1102, 1106, 1119, 1120, 1516, 1542, 430, + 430, 1529, 430, 436, 1532, 430, 1534, 430, 1537, 430, + 1540, 1541, 0, 0, 1149, 0, 0, 0, 0, 1235, + 1552, 0, 0, 1246, 1185, 1186, 1186, 1186, 1186, 1186, + 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, + 1546, 0, 0, 0, 1267, 0, 0, 1271, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 208, 209, 0, + 0, 0, 0, 0, 0, 1466, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1180, 1184, 0, + 1188, 1189, 0, 0, 1418, 0, 0, 1436, 0, 0, + 0, 0, 0, 0, 0, 1556, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1070, 1077, 0, 1077, + 0, 1077, 0, 0, 0, 1712, 1713, 1560, 1561, 1081, + 1562, 996, 1008, 0, 212, 1606, 1607, 1608, 211, 0, + 0, 0, 0, 0, 0, 1719, 0, 1628, 1632, 1666, + 0, 1659, 0, -2, 1668, 0, 0, 0, 1674, 445, + 446, 1000, 143, 1082, 147, 0, 1687, 1702, 0, 1684, + 1691, 1695, 0, 0, 0, 1680, 0, 1081, 1010, 1041, + 1043, 0, 1038, 1053, 1054, 1056, 0, 1058, 0, 1060, + 1061, 1021, 1015, 0, 164, 0, 1081, 1081, 163, 0, + 1066, 183, 184, 185, 531, 252, 257, 0, 0, 0, + 262, 0, 264, 0, 0, 0, 269, 270, 471, 471, + 506, 0, 373, 375, 0, 0, 255, 444, 0, 444, + 0, 435, 437, 0, 507, 527, 1588, 1589, 0, 0, + 464, 468, 469, 470, 0, 688, 0, 716, 0, 0, + 0, 0, 0, 0, 244, 587, 748, 749, 750, 751, + 752, 753, 754, 755, 756, 0, 471, 0, 0, 0, + 471, 471, 471, 0, 773, 458, 0, 0, 744, 741, + 609, 0, 288, 289, 296, 297, 299, 0, 0, 0, + 0, 0, 616, 1021, 200, 0, 0, 0, 0, 661, + 666, 672, 0, 589, 673, 786, 787, 788, 159, 799, + 805, 939, 959, 1090, 1103, 1107, 0, 0, 0, 0, + 1543, 1527, 444, 1530, 1531, 1533, 1535, 1536, 1538, 1539, + 1145, 1146, 1150, 0, 1232, 0, 1234, 0, 1550, 0, + 1247, 1248, 1249, 1250, 1251, 1582, 0, 0, 0, 1266, + 0, 0, 1186, 0, 1279, 1278, 1280, 0, 1282, 1283, + 1288, 1289, 1292, 1294, 1301, 1303, 1307, 1309, 1312, 1314, + 1316, 0, 1319, 0, 1322, 0, 1325, 0, 1328, 0, + 1331, 0, 1334, 0, 1337, 0, 1340, 0, 1343, 0, + 1346, 0, 1349, 0, 1352, 0, 1355, 0, 1358, 0, + 1361, 0, 1366, 1368, 0, 1371, 1374, 1376, 0, 1379, + 0, 1383, 0, 1385, 1387, 1388, 0, 0, 0, 1399, + 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1415, + 0, 1178, 1417, 1190, 1191, 1196, 1420, 0, 0, 0, + 1423, 0, 0, 0, 1427, 1227, 1438, 0, 1443, 0, + 0, 1449, 0, 1453, 0, 1459, 1460, 1462, 1464, 0, + 0, 0, 0, 0, 0, 0, 1047, 1028, 125, 1562, + 1566, 0, -2, 0, 214, 216, 0, 0, 0, 1627, + 1653, 1651, 1651, 1661, 1662, 0, 0, 1669, 0, 0, + 0, 0, 148, 0, 0, 1675, 0, 0, 1696, 0, + 0, 0, 0, 165, 1573, 1035, 1042, 0, 0, 1036, + 0, 1037, 1057, 1059, 1014, 0, 1081, 1081, 154, 155, + 0, 258, 0, 260, 0, 263, 265, 266, 267, 273, + 274, 275, 276, 268, 0, 0, 372, 374, 0, 0, + 417, 429, 419, 0, 0, 1592, 1593, 1594, 1595, 1596, + 1597, 1598, 1599, 1610, 680, 0, 690, 0, 1023, 0, + 683, 0, 598, 0, 0, 0, 471, 471, 471, 0, + 0, 0, 0, 758, 0, 0, 721, 0, 729, 0, + 0, 0, 300, 301, 0, 652, 0, 198, 199, 0, + 0, 657, 591, 592, 1143, 0, 0, 0, 1144, 1528, + 0, 0, 0, 0, 0, 1547, 0, 0, 0, 0, + 1272, 1275, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1391, 0, 0, 0, 710, 711, + 0, 1467, 1183, 1573, 0, 1187, 1197, 1198, 0, 1187, + 1437, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1078, 0, 0, 0, 1029, 1030, 0, 0, + 0, 1067, 1566, 1571, 0, 0, 0, 1615, 1616, 0, + 1620, 1621, 1622, 213, 217, 218, 219, 1656, 0, 1649, + 1652, 1650, 1663, 0, 0, 1670, 0, 1672, 0, 1703, + 1704, 1692, 1685, 960, 1679, 1682, 1684, 1681, 1582, 1039, + 0, 1044, 0, 1573, 153, 0, 261, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 271, 272, + 0, 0, 433, 438, 0, 0, 681, 0, 1024, 693, + 684, 0, 771, 0, 775, 0, 0, 0, 778, 779, + 780, 757, 0, 761, 499, 745, 742, 743, 610, 0, + 201, 202, 0, 0, 0, 1517, 0, 1520, 1230, 1233, + 1231, 0, 1262, 1264, 1265, 1525, 1526, 1281, 1317, 1320, + 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347, 1350, + 1353, 1356, 1359, 1362, 1370, 1377, 1380, 1384, 1389, 0, + 1392, 0, 0, 1393, 0, 712, 1174, 0, 0, 1194, + 1195, 0, 1422, 1424, 1425, 1426, 1439, 0, 1444, 1445, + 0, 1450, 0, 1454, 1465, 0, 1072, 1079, 1080, 0, + 1075, 0, 1076, 0, 1020, 1571, 145, 1572, 1569, 0, + 1567, 1564, 110, 1619, 0, 1640, 0, 1654, 1655, 1664, + 1665, 1671, 0, 0, 1684, 0, 1678, 151, 0, 0, + 0, 1582, 259, 0, 279, 689, 0, 692, 682, 769, + 770, 0, 782, 774, 776, 777, 759, -2, 1609, 0, + 0, 0, 660, 1518, 0, 0, 1394, 0, 708, 709, + 1182, 1175, 0, 1160, 1161, 1179, 1419, 1421, 0, 0, + 0, 1071, 1031, 1032, 1073, 1074, 144, 0, 1568, 1202, + 0, 1563, 0, 210, 89, 90, 43, -2, 0, 0, + 0, 1617, 1618, 1657, 1658, 1688, 0, 1677, 1683, 1040, + 1047, 0, 152, 512, 505, 0, 0, 0, 762, 763, + 764, 765, 766, 767, 768, 649, 203, 204, 0, 579, + 580, 581, 197, 0, 1237, 1390, 1176, 0, 0, 0, + 0, 0, 1440, 0, 1446, 0, 1451, 0, 1570, 0, + 0, 1565, 88, 0, -2, 93, 0, 0, 0, 0, + 1025, 67, 68, 69, 50, 74, 75, 83, 77, 1686, + 694, 0, 696, 0, -2, 500, 513, 0, 253, 280, + 281, 0, 0, 284, 0, 286, 287, 277, 278, 0, + 0, 783, 0, 200, 0, 0, 1167, 1168, 1169, 1170, + 1172, 0, 0, 0, 0, 1203, 1180, 44, 94, 110, + 85, 0, 0, 49, 51, 0, 0, 84, 695, 0, + 0, 455, 0, 705, 501, 502, 0, 508, 509, 510, + 511, 282, 283, 285, 717, 0, 578, 656, 1519, 0, + 0, 1441, 0, 1447, 0, 1452, 0, -2, 46, 0, + 0, 0, 52, 0, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 53, 76, 697, 698, + 706, 0, 503, 0, 504, 0, 0, 0, 686, 0, + 717, 1177, 1171, 1173, 0, 0, 1201, 95, 98, 100, + 0, 0, 87, 110, 71, 78, 79, 80, 0, 82, + 72, 73, 48, 0, 0, 707, 703, 514, 516, 517, + 0, 0, 515, 718, 687, 1442, 1448, 0, 110, 99, + 0, 0, 47, 0, 81, 54, 0, 518, 519, 520, + 0, -2, 110, 86, 70, 699, 45, -2, 700, 701, + 702, } var yyTok1 = [...]int{ 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 158, 3, 3, 3, 186, 178, 3, - 95, 97, 183, 181, 96, 182, 236, 184, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 761, - 166, 165, 167, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 158, 3, 3, 3, 187, 179, 3, + 95, 97, 184, 182, 96, 183, 237, 185, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 787, + 167, 166, 168, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 188, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 189, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 154, 3, 189, + 3, 3, 3, 3, 154, 3, 190, } var yyTok2 = [...]int{ @@ -9944,13 +10796,13 @@ var yyTok2 = [...]int{ 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, - 156, 157, 159, 160, 161, 162, 163, 164, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 179, 180, - 185, 187, 190, 191, 192, 193, 194, 195, 196, 197, + 156, 157, 159, 160, 161, 162, 163, 164, 165, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 180, + 181, 186, 188, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 237, 238, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, @@ -10055,7 +10907,12 @@ var yyTok3 = [...]int{ 58070, 745, 58071, 746, 58072, 747, 58073, 748, 58074, 749, 58075, 750, 58076, 751, 58077, 752, 58078, 753, 58079, 754, 58080, 755, 58081, 756, 58082, 757, 58083, 758, 58084, 759, - 58085, 760, 0, + 58085, 760, 58086, 761, 58087, 762, 58088, 763, 58089, 764, + 58090, 765, 58091, 766, 58092, 767, 58093, 768, 58094, 769, + 58095, 770, 58096, 771, 58097, 772, 58098, 773, 58099, 774, + 58100, 775, 58101, 776, 58102, 777, 58103, 778, 58104, 779, + 58105, 780, 58106, 781, 58107, 782, 58108, 783, 58109, 784, + 58110, 785, 58111, 786, 0, } var yyErrorMessages = [...]struct { @@ -10404,202 +11261,646 @@ yydefault: switch yynt { case 1: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:634 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:676 { - stmt := yyDollar[2].statementUnion() - // If the statement is empty and we have comments - // then we create a special struct which stores them. - // This is required because we need to update the rows_returned - // and other query stats and not return a `query was empty` error - if stmt == nil && yyDollar[1].strs != nil { - stmt = &CommentOnly{Comments: yyDollar[1].strs} - } - setParseTree(yylex, stmt) + setParseTrees(yylex, yyDollar[1].statementsUnion()) } case 2: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:647 + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []Statement +//line sql.y:682 { + yyLOCAL = []Statement{yyDollar[1].statementUnion()} + resetTokenizer(yylex) } + yyVAL.union = yyLOCAL case 3: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:648 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:687 { + yySLICE := (*[]Statement)(yyIaddr(yyVAL.union)) + *yySLICE = append(*yySLICE, yyDollar[3].statementUnion()) + resetTokenizer(yylex) } case 4: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:652 +//line sql.y:694 { - yyLOCAL = yyDollar[1].tableStmtUnion() + yyLOCAL = yyDollar[2].statementUnion() + // If the statement is empty and we have comments + // then we create a special struct which stores them. + // This is required because we need to update the rows_returned + // and other query stats and not return a `query was empty` error + if yyLOCAL == nil && yyDollar[1].strs != nil { + yyLOCAL = &CommentOnly{Comments: yyDollar[1].strs} + } } yyVAL.union = yyLOCAL - case 40: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:691 + case 5: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Statement +//line sql.y:707 { - setParseTree(yylex, nil) + yyLOCAL = yyDollar[1].statementUnion() } - case 41: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *Variable -//line sql.y:697 + yyVAL.union = yyLOCAL + case 6: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL Statement +//line sql.y:711 { - yyLOCAL = NewVariableExpression(yyDollar[1].str, SingleAt) + yyLOCAL = nil } yyVAL.union = yyLOCAL - case 42: + case 7: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:703 + var yyLOCAL Statement +//line sql.y:717 { - yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) + yyLOCAL = yyDollar[1].tableStmtUnion() } + yyVAL.union = yyLOCAL case 43: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *Variable -//line sql.y:709 + var yyLOCAL CompoundStatement +//line sql.y:758 { - yyLOCAL = NewVariableExpression(string(yyDollar[1].str), SingleAt) + yyLOCAL = &SingleStatement{Statement: yyDollar[1].statementUnion()} } yyVAL.union = yyLOCAL case 44: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *Variable -//line sql.y:713 + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL CompoundStatement +//line sql.y:762 { - yyLOCAL = NewVariableExpression(string(yyDollar[1].str), DoubleAt) + yyLOCAL = &BeginEndStatement{Statements: yyDollar[2].compoundStatementsUnion()} } yyVAL.union = yyLOCAL case 45: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Statement -//line sql.y:719 + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL CompoundStatement +//line sql.y:766 { - yyLOCAL = &OtherAdmin{} + yyLOCAL = &IfStatement{SearchCondition: yyDollar[2].exprUnion(), ThenStatements: yyDollar[4].compoundStatementsUnion(), ElseIfBlocks: yyDollar[5].elseIfsUnion(), ElseStatements: yyDollar[6].compoundStatementsUnion()} } yyVAL.union = yyLOCAL case 46: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:725 + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL CompoundStatement +//line sql.y:770 { - yyLOCAL = &Load{} + yyDollar[3].columnType.Options = yyDollar[4].columnTypeOptionsUnion() + yyLOCAL = &DeclareVar{VarNames: yyDollar[2].columnsUnion(), Type: yyDollar[3].columnType} } yyVAL.union = yyLOCAL case 47: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *With -//line sql.y:731 + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL CompoundStatement +//line sql.y:775 { - yyLOCAL = &With{CTEs: yyDollar[2].ctesUnion(), Recursive: false} + yyLOCAL = &DeclareHandler{Action: yyDollar[2].handlerActionUnion(), Conditions: yyDollar[5].handlerConditionsUnion(), Statement: yyDollar[6].compoundStatementUnion()} } yyVAL.union = yyLOCAL case 48: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL *With -//line sql.y:735 + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL CompoundStatement +//line sql.y:779 { - yyLOCAL = &With{CTEs: yyDollar[3].ctesUnion(), Recursive: true} + yyLOCAL = &DeclareCondition{Name: yyDollar[2].identifierCI, Condition: yyDollar[5].handlerConditionUnion()} } yyVAL.union = yyLOCAL case 49: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL *With -//line sql.y:740 + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL CompoundStatement +//line sql.y:783 { - yyLOCAL = nil + yyLOCAL = &Signal{Condition: yyDollar[2].handlerConditionUnion(), SetValues: yyDollar[3].signalSetsUnion()} } yyVAL.union = yyLOCAL case 50: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *With -//line sql.y:744 + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL []*SignalSet +//line sql.y:788 { - yyLOCAL = yyDollar[1].withUnion() + yyLOCAL = nil } yyVAL.union = yyLOCAL - case 51: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:750 - { - yySLICE := (*[]*CommonTableExpr)(yyIaddr(yyVAL.union)) - *yySLICE = append(*yySLICE, yyDollar[3].cteUnion()) - } case 52: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL []*CommonTableExpr -//line sql.y:754 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:795 { - yyLOCAL = []*CommonTableExpr{yyDollar[1].cteUnion()} + yySLICE := (*[]*SignalSet)(yyIaddr(yyVAL.union)) + *yySLICE = append(*yySLICE, yyDollar[2].signalSetUnion()) } - yyVAL.union = yyLOCAL case 53: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL *CommonTableExpr -//line sql.y:760 + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL []*SignalSet +//line sql.y:799 { - yyLOCAL = &CommonTableExpr{ID: yyDollar[1].identifierCS, Columns: yyDollar[2].columnsUnion(), Subquery: yyDollar[4].subqueryUnion().Select} + yyLOCAL = []*SignalSet{yyDollar[2].signalSetUnion()} } yyVAL.union = yyLOCAL case 54: yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL TableStatement -//line sql.y:766 + var yyLOCAL *SignalSet +//line sql.y:805 { - yyLOCAL = yyDollar[2].tableStmtUnion() + yyLOCAL = &SignalSet{ConditionName: yyDollar[1].signalConditionNameUnion(), Value: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 55: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL TableStatement -//line sql.y:770 + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SignalConditionName +//line sql.y:811 { - yyLOCAL = yyDollar[2].tableStmtUnion() + yyLOCAL = ClassOriginType } yyVAL.union = yyLOCAL case 56: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL TableStatement -//line sql.y:774 + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SignalConditionName +//line sql.y:815 { - setLockIfPossible(yylex, yyDollar[2].tableStmtUnion(), yyDollar[3].lockUnion()) - yyLOCAL = yyDollar[2].tableStmtUnion() + yyLOCAL = SubclassOriginType } yyVAL.union = yyLOCAL case 57: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL TableStatement -//line sql.y:797 + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SignalConditionName +//line sql.y:819 { - yyDollar[1].tableStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) + yyLOCAL = MessageTextType + } + yyVAL.union = yyLOCAL + case 58: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SignalConditionName +//line sql.y:823 + { + yyLOCAL = MySQLErrNoType + } + yyVAL.union = yyLOCAL + case 59: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SignalConditionName +//line sql.y:827 + { + yyLOCAL = ConstraintCatalogType + } + yyVAL.union = yyLOCAL + case 60: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SignalConditionName +//line sql.y:831 + { + yyLOCAL = ConstraintSchemaType + } + yyVAL.union = yyLOCAL + case 61: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SignalConditionName +//line sql.y:835 + { + yyLOCAL = ConstraintNameType + } + yyVAL.union = yyLOCAL + case 62: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SignalConditionName +//line sql.y:839 + { + yyLOCAL = CatalogNameType + } + yyVAL.union = yyLOCAL + case 63: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SignalConditionName +//line sql.y:843 + { + yyLOCAL = SchemaNameType + } + yyVAL.union = yyLOCAL + case 64: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SignalConditionName +//line sql.y:847 + { + yyLOCAL = TableNameType + } + yyVAL.union = yyLOCAL + case 65: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SignalConditionName +//line sql.y:851 + { + yyLOCAL = ColumnNameType + } + yyVAL.union = yyLOCAL + case 66: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SignalConditionName +//line sql.y:855 + { + yyLOCAL = CursorNameType + } + yyVAL.union = yyLOCAL + case 67: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL HandlerAction +//line sql.y:861 + { + yyLOCAL = ContinueAction + } + yyVAL.union = yyLOCAL + case 68: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL HandlerAction +//line sql.y:865 + { + yyLOCAL = ExitAction + } + yyVAL.union = yyLOCAL + case 69: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL HandlerAction +//line sql.y:869 + { + yyLOCAL = UndoAction + } + yyVAL.union = yyLOCAL + case 70: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:875 + { + yySLICE := (*[]HandlerCondition)(yyIaddr(yyVAL.union)) + *yySLICE = append(*yySLICE, yyDollar[3].handlerConditionUnion()) + } + case 71: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []HandlerCondition +//line sql.y:879 + { + yyLOCAL = []HandlerCondition{yyDollar[1].handlerConditionUnion()} + } + yyVAL.union = yyLOCAL + case 72: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL HandlerCondition +//line sql.y:885 + { + yyLOCAL = &HandlerConditionErrorCode{ErrorCode: convertStringToInt(yyDollar[1].str)} + } + yyVAL.union = yyLOCAL + case 73: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL HandlerCondition +//line sql.y:889 + { + yyLOCAL = yyDollar[1].handlerConditionUnion() + } + yyVAL.union = yyLOCAL + case 76: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL HandlerCondition +//line sql.y:899 + { + yyLOCAL = &HandlerConditionSQLState{SQLStateValue: NewStrLiteral(yyDollar[3].str)} + } + yyVAL.union = yyLOCAL + case 77: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL HandlerCondition +//line sql.y:905 + { + yyLOCAL = &HandlerConditionNamed{Name: yyDollar[1].identifierCI} + } + yyVAL.union = yyLOCAL + case 78: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL HandlerCondition +//line sql.y:911 + { + yyLOCAL = yyDollar[1].handlerConditionUnion() + } + yyVAL.union = yyLOCAL + case 79: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL HandlerCondition +//line sql.y:915 + { + yyLOCAL = yyDollar[1].handlerConditionUnion() + } + yyVAL.union = yyLOCAL + case 80: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL HandlerCondition +//line sql.y:919 + { + yyLOCAL = &HandlerConditionSQLWarning{} + } + yyVAL.union = yyLOCAL + case 81: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL HandlerCondition +//line sql.y:923 + { + yyLOCAL = &HandlerConditionNotFound{} + } + yyVAL.union = yyLOCAL + case 82: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL HandlerCondition +//line sql.y:927 + { + yyLOCAL = &HandlerConditionSQLException{} + } + yyVAL.union = yyLOCAL + case 83: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:932 + { + } + case 85: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL *ColumnTypeOptions +//line sql.y:936 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 86: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL *ColumnTypeOptions +//line sql.y:940 + { + yyLOCAL = &ColumnTypeOptions{Default: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL + case 87: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *ColumnTypeOptions +//line sql.y:944 + { + yyLOCAL = &ColumnTypeOptions{Default: yyDollar[2].exprUnion(), DefaultLiteral: true} + } + yyVAL.union = yyLOCAL + case 88: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL CompoundStatement +//line sql.y:950 + { + yyLOCAL = yyDollar[1].compoundStatementUnion() + } + yyVAL.union = yyLOCAL + case 91: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL *CompoundStatements +//line sql.y:959 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 92: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *CompoundStatements +//line sql.y:963 + { + yyLOCAL = yyDollar[1].compoundStatementsUnion() + } + yyVAL.union = yyLOCAL + case 93: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *CompoundStatements +//line sql.y:969 + { + yyLOCAL = &CompoundStatements{Statements: []CompoundStatement{yyDollar[1].compoundStatementUnion()}} + } + yyVAL.union = yyLOCAL + case 94: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *CompoundStatements +//line sql.y:973 + { + yyDollar[1].compoundStatementsUnion().Statements = append(yyDollar[1].compoundStatementsUnion().Statements, yyDollar[2].compoundStatementUnion()) + yyLOCAL = yyDollar[1].compoundStatementsUnion() + } + yyVAL.union = yyLOCAL + case 95: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL *CompoundStatements +//line sql.y:979 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 96: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *CompoundStatements +//line sql.y:983 + { + yyLOCAL = yyDollar[2].compoundStatementsUnion() + } + yyVAL.union = yyLOCAL + case 97: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL []*ElseIfBlock +//line sql.y:988 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 98: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []*ElseIfBlock +//line sql.y:992 + { + yyLOCAL = yyDollar[1].elseIfsUnion() + } + yyVAL.union = yyLOCAL + case 99: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:998 + { + yySLICE := (*[]*ElseIfBlock)(yyIaddr(yyVAL.union)) + *yySLICE = append(*yySLICE, yyDollar[2].elseIfUnion()) + } + case 100: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []*ElseIfBlock +//line sql.y:1002 + { + yyLOCAL = []*ElseIfBlock{yyDollar[1].elseIfUnion()} + } + yyVAL.union = yyLOCAL + case 101: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL *ElseIfBlock +//line sql.y:1008 + { + yyLOCAL = &ElseIfBlock{SearchCondition: yyDollar[2].exprUnion(), ThenStatements: yyDollar[4].compoundStatementsUnion()} + } + yyVAL.union = yyLOCAL + case 102: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *Variable +//line sql.y:1014 + { + yyLOCAL = NewVariableExpression(yyDollar[1].str, SingleAt) + } + yyVAL.union = yyLOCAL + case 103: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1020 + { + yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) + } + case 104: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *Variable +//line sql.y:1026 + { + yyLOCAL = NewVariableExpression(string(yyDollar[1].str), SingleAt) + } + yyVAL.union = yyLOCAL + case 105: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *Variable +//line sql.y:1030 + { + yyLOCAL = NewVariableExpression(string(yyDollar[1].str), DoubleAt) + } + yyVAL.union = yyLOCAL + case 106: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Statement +//line sql.y:1036 + { + yyLOCAL = &OtherAdmin{} + } + yyVAL.union = yyLOCAL + case 107: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Statement +//line sql.y:1042 + { + yyLOCAL = &Load{} + } + yyVAL.union = yyLOCAL + case 108: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *With +//line sql.y:1048 + { + yyLOCAL = &With{CTEs: yyDollar[2].ctesUnion(), Recursive: false} + } + yyVAL.union = yyLOCAL + case 109: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL *With +//line sql.y:1052 + { + yyLOCAL = &With{CTEs: yyDollar[3].ctesUnion(), Recursive: true} + } + yyVAL.union = yyLOCAL + case 110: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL *With +//line sql.y:1057 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 111: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *With +//line sql.y:1061 + { + yyLOCAL = yyDollar[1].withUnion() + } + yyVAL.union = yyLOCAL + case 112: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1067 + { + yySLICE := (*[]*CommonTableExpr)(yyIaddr(yyVAL.union)) + *yySLICE = append(*yySLICE, yyDollar[3].cteUnion()) + } + case 113: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []*CommonTableExpr +//line sql.y:1071 + { + yyLOCAL = []*CommonTableExpr{yyDollar[1].cteUnion()} + } + yyVAL.union = yyLOCAL + case 114: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL *CommonTableExpr +//line sql.y:1077 + { + yyLOCAL = &CommonTableExpr{ID: yyDollar[1].identifierCS, Columns: yyDollar[2].columnsUnion(), Subquery: yyDollar[4].subqueryUnion().Select} + } + yyVAL.union = yyLOCAL + case 115: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL TableStatement +//line sql.y:1083 + { + yyLOCAL = yyDollar[2].tableStmtUnion() + } + yyVAL.union = yyLOCAL + case 116: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL TableStatement +//line sql.y:1087 + { + yyLOCAL = yyDollar[2].tableStmtUnion() + } + yyVAL.union = yyLOCAL + case 117: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL TableStatement +//line sql.y:1091 + { + setLockIfPossible(yylex, yyDollar[2].tableStmtUnion(), yyDollar[3].lockUnion()) + yyLOCAL = yyDollar[2].tableStmtUnion() + } + yyVAL.union = yyLOCAL + case 118: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL TableStatement +//line sql.y:1114 + { + yyDollar[1].tableStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) yyDollar[1].tableStmtUnion().SetLimit(yyDollar[3].limitUnion()) yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 58: + case 119: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableStatement -//line sql.y:803 +//line sql.y:1120 { yyDollar[1].tableStmtUnion().SetLimit(yyDollar[2].limitUnion()) yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 59: + case 120: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:808 +//line sql.y:1125 { yyDollar[1].tableStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) yyDollar[1].tableStmtUnion().SetLimit(yyDollar[3].limitUnion()) yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 60: + case 121: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableStatement -//line sql.y:814 +//line sql.y:1131 { yyDollar[2].tableStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].tableStmtUnion().SetOrderBy(yyDollar[3].orderByUnion()) @@ -10607,20 +11908,20 @@ yydefault: yyLOCAL = yyDollar[2].tableStmtUnion() } yyVAL.union = yyLOCAL - case 61: + case 122: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:821 +//line sql.y:1138 { yyDollar[2].tableStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].tableStmtUnion().SetLimit(yyDollar[3].limitUnion()) yyLOCAL = yyDollar[2].tableStmtUnion() } yyVAL.union = yyLOCAL - case 62: + case 123: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableStatement -//line sql.y:827 +//line sql.y:1144 { yyDollar[2].tableStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].tableStmtUnion().SetOrderBy(yyDollar[3].orderByUnion()) @@ -10628,199 +11929,199 @@ yydefault: yyLOCAL = yyDollar[2].tableStmtUnion() } yyVAL.union = yyLOCAL - case 63: + case 124: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:834 +//line sql.y:1151 { yyDollar[2].tableStmtUnion().SetWith(yyDollar[1].withUnion()) } - case 64: + case 125: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL TableStatement -//line sql.y:838 +//line sql.y:1155 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), &SelectExprs{Exprs: []SelectExpr{&Nextval{Expr: yyDollar[5].exprUnion()}}}, []string{yyDollar[3].str} /*options*/, nil, TableExprs{&AliasedTableExpr{Expr: yyDollar[7].tableName}}, nil /*where*/, nil /*groupBy*/, nil /*having*/, nil) } yyVAL.union = yyLOCAL - case 65: + case 126: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableStatement -//line sql.y:844 +//line sql.y:1161 { yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 66: + case 127: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:848 +//line sql.y:1165 { yyLOCAL = &Union{Left: yyDollar[1].tableStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 67: + case 128: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:852 +//line sql.y:1169 { yyLOCAL = &Union{Left: yyDollar[1].tableStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 68: + case 129: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:856 +//line sql.y:1173 { yyLOCAL = &Union{Left: yyDollar[1].tableStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 69: + case 130: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:860 +//line sql.y:1177 { yyLOCAL = &Union{Left: yyDollar[1].tableStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 70: + case 131: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableStatement -//line sql.y:866 +//line sql.y:1183 { yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 71: + case 132: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableStatement -//line sql.y:870 +//line sql.y:1187 { setLockIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].lockUnion()) yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 72: + case 133: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableStatement -//line sql.y:875 +//line sql.y:1192 { yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 73: + case 134: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableStatement -//line sql.y:879 +//line sql.y:1196 { yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 74: + case 135: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:885 +//line sql.y:1202 { yyLOCAL = yyDollar[2].tableStmtUnion() } yyVAL.union = yyLOCAL - case 75: + case 136: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableStatement -//line sql.y:889 +//line sql.y:1206 { setIntoIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].selectIntoUnion()) yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 76: + case 137: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:894 +//line sql.y:1211 { setIntoIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].selectIntoUnion()) setLockIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[3].lockUnion()) yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 77: + case 138: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:900 +//line sql.y:1217 { setLockIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].lockUnion()) setIntoIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[3].selectIntoUnion()) yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 78: + case 139: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableStatement -//line sql.y:906 +//line sql.y:1223 { setIntoIfPossible(yylex, yyDollar[1].tableStmtUnion(), yyDollar[2].selectIntoUnion()) yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 79: + case 140: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:913 +//line sql.y:1230 { yyLOCAL = &ValuesStatement{Comments: Comments(yyDollar[2].strs).Parsed(), ListArg: ListArg(yyDollar[3].str[2:])} } yyVAL.union = yyLOCAL - case 80: + case 141: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableStatement -//line sql.y:917 +//line sql.y:1234 { yyLOCAL = &ValuesStatement{Comments: Comments(yyDollar[2].strs).Parsed(), Rows: yyDollar[3].valuesUnion()} } yyVAL.union = yyLOCAL - case 81: + case 142: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:923 +//line sql.y:1240 { yyLOCAL = &Stream{Comments: Comments(yyDollar[2].strs).Parsed(), SelectExpr: yyDollar[3].selectExprUnion(), Table: yyDollar[5].tableName} } yyVAL.union = yyLOCAL - case 82: + case 143: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:929 +//line sql.y:1246 { yyLOCAL = &VStream{Comments: Comments(yyDollar[2].strs).Parsed(), SelectExpr: yyDollar[3].selectExprUnion(), Table: yyDollar[5].tableName, Where: NewWhere(WhereClause, yyDollar[6].exprUnion()), Limit: yyDollar[7].limitUnion()} } yyVAL.union = yyLOCAL - case 83: + case 144: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL TableStatement -//line sql.y:937 +//line sql.y:1254 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), yyDollar[4].selectExprsUnion() /*SelectExprs*/, yyDollar[3].strs /*options*/, yyDollar[5].selectIntoUnion() /*into*/, yyDollar[6].tableExprsUnion() /*from*/, NewWhere(WhereClause, yyDollar[7].exprUnion()), yyDollar[8].groupByUnion(), NewWhere(HavingClause, yyDollar[9].exprUnion()), yyDollar[10].namedWindowsUnion()) } yyVAL.union = yyLOCAL - case 84: + case 145: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL TableStatement -//line sql.y:941 +//line sql.y:1258 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), yyDollar[4].selectExprsUnion() /*SelectExprs*/, yyDollar[3].strs /*options*/, nil, yyDollar[5].tableExprsUnion() /*from*/, NewWhere(WhereClause, yyDollar[6].exprUnion()), yyDollar[7].groupByUnion(), NewWhere(HavingClause, yyDollar[8].exprUnion()), yyDollar[9].namedWindowsUnion()) } yyVAL.union = yyLOCAL - case 85: + case 146: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableStatement -//line sql.y:945 +//line sql.y:1262 { yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 86: + case 147: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:951 +//line sql.y:1268 { // insert_data returns a *Insert pre-filled with Columns & Values ins := yyDollar[6].insUnion() @@ -10833,10 +12134,10 @@ yydefault: yyLOCAL = ins } yyVAL.union = yyLOCAL - case 87: + case 148: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:963 +//line sql.y:1280 { cols := make(Columns, 0, len(yyDollar[7].updateExprsUnion())) vals := make(ValTuple, 0, len(yyDollar[8].updateExprsUnion())) @@ -10847,329 +12148,329 @@ yydefault: yyLOCAL = &Insert{Action: yyDollar[1].insertActionUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Ignore: yyDollar[3].ignoreUnion(), Table: getAliasedTableExprFromTableName(yyDollar[4].tableName), Partitions: yyDollar[5].partitionsUnion(), Columns: cols, Rows: Values{vals}, OnDup: OnDup(yyDollar[8].updateExprsUnion())} } yyVAL.union = yyLOCAL - case 88: + case 149: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL InsertAction -//line sql.y:975 +//line sql.y:1292 { yyLOCAL = InsertAct } yyVAL.union = yyLOCAL - case 89: + case 150: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL InsertAction -//line sql.y:979 +//line sql.y:1296 { yyLOCAL = ReplaceAct } yyVAL.union = yyLOCAL - case 90: + case 151: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Statement -//line sql.y:985 +//line sql.y:1302 { yyLOCAL = &Update{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), TableExprs: yyDollar[5].tableExprsUnion(), Exprs: yyDollar[7].updateExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion()), OrderBy: yyDollar[9].orderByUnion(), Limit: yyDollar[10].limitUnion()} } yyVAL.union = yyLOCAL - case 91: + case 152: yyDollar = yyS[yypt-11 : yypt+1] var yyLOCAL Statement -//line sql.y:991 +//line sql.y:1308 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), TableExprs: TableExprs{&AliasedTableExpr{Expr: yyDollar[6].tableName, As: yyDollar[7].identifierCS}}, Partitions: yyDollar[8].partitionsUnion(), Where: NewWhere(WhereClause, yyDollar[9].exprUnion()), OrderBy: yyDollar[10].orderByUnion(), Limit: yyDollar[11].limitUnion()} } yyVAL.union = yyLOCAL - case 92: + case 153: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Statement -//line sql.y:995 +//line sql.y:1312 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[6].tableNamesUnion(), TableExprs: yyDollar[8].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[9].exprUnion())} } yyVAL.union = yyLOCAL - case 93: + case 154: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:999 +//line sql.y:1316 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[5].tableNamesUnion(), TableExprs: yyDollar[7].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion())} } yyVAL.union = yyLOCAL - case 94: + case 155: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:1003 +//line sql.y:1320 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[5].tableNamesUnion(), TableExprs: yyDollar[7].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion())} } yyVAL.union = yyLOCAL - case 95: + case 156: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1008 +//line sql.y:1325 { } - case 96: + case 157: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1009 +//line sql.y:1326 { } - case 97: + case 158: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:1013 +//line sql.y:1330 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL - case 98: + case 159: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1017 +//line sql.y:1334 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) } - case 99: + case 160: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:1023 +//line sql.y:1340 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL - case 100: + case 161: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1027 +//line sql.y:1344 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) } - case 101: + case 162: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:1033 +//line sql.y:1350 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL - case 102: + case 163: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1037 +//line sql.y:1354 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) } - case 103: + case 164: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Partitions -//line sql.y:1042 +//line sql.y:1359 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 104: + case 165: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Partitions -//line sql.y:1046 +//line sql.y:1363 { yyLOCAL = yyDollar[3].partitionsUnion() } yyVAL.union = yyLOCAL - case 105: + case 166: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:1052 +//line sql.y:1369 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), yyDollar[3].setExprsUnion()) } yyVAL.union = yyLOCAL - case 106: + case 167: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SetExprs -//line sql.y:1058 +//line sql.y:1375 { yyLOCAL = SetExprs{yyDollar[1].setExprUnion()} } yyVAL.union = yyLOCAL - case 107: + case 168: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1062 +//line sql.y:1379 { yySLICE := (*SetExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].setExprUnion()) } - case 108: + case 169: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1068 +//line sql.y:1385 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: NewStrLiteral("on")} } yyVAL.union = yyLOCAL - case 109: + case 170: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1072 +//line sql.y:1389 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: NewStrLiteral("off")} } yyVAL.union = yyLOCAL - case 110: + case 171: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1076 +//line sql.y:1393 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 111: + case 172: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1080 +//line sql.y:1397 { yyLOCAL = &SetExpr{Var: NewSetVariable(string(yyDollar[1].str), SessionScope), Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 112: + case 173: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1086 +//line sql.y:1403 { - yyLOCAL = NewSetVariable(string(yyDollar[1].str), SessionScope) + yyLOCAL = NewSetVariable(string(yyDollar[1].str), NoScope) } yyVAL.union = yyLOCAL - case 113: + case 174: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1090 +//line sql.y:1407 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 114: + case 175: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Variable -//line sql.y:1094 +//line sql.y:1411 { yyLOCAL = NewSetVariable(string(yyDollar[2].str), yyDollar[1].scopeUnion()) } yyVAL.union = yyLOCAL - case 115: + case 176: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:1100 +//line sql.y:1417 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), UpdateSetExprsScope(yyDollar[5].setExprsUnion(), yyDollar[3].scopeUnion())) } yyVAL.union = yyLOCAL - case 116: + case 177: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:1104 +//line sql.y:1421 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), yyDollar[4].setExprsUnion()) } yyVAL.union = yyLOCAL - case 117: + case 178: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SetExprs -//line sql.y:1110 +//line sql.y:1427 { yyLOCAL = SetExprs{yyDollar[1].setExprUnion()} } yyVAL.union = yyLOCAL - case 118: + case 179: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1114 +//line sql.y:1431 { yySLICE := (*SetExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].setExprUnion()) } - case 119: + case 180: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1120 +//line sql.y:1437 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionIsolationStr, NextTxScope), Expr: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 120: + case 181: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1124 +//line sql.y:1441 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionReadOnlyStr, NextTxScope), Expr: NewStrLiteral("off")} } yyVAL.union = yyLOCAL - case 121: + case 182: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1128 +//line sql.y:1445 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionReadOnlyStr, NextTxScope), Expr: NewStrLiteral("on")} } yyVAL.union = yyLOCAL - case 122: + case 183: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1134 +//line sql.y:1451 { yyVAL.str = RepeatableReadStr } - case 123: + case 184: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1138 +//line sql.y:1455 { yyVAL.str = ReadCommittedStr } - case 124: + case 185: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1142 +//line sql.y:1459 { yyVAL.str = ReadUncommittedStr } - case 125: + case 186: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1146 +//line sql.y:1463 { yyVAL.str = SerializableStr } - case 126: + case 187: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1152 +//line sql.y:1469 { yyLOCAL = SessionScope } yyVAL.union = yyLOCAL - case 127: + case 188: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1156 +//line sql.y:1473 { yyLOCAL = SessionScope } yyVAL.union = yyLOCAL - case 128: + case 189: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1160 +//line sql.y:1477 { yyLOCAL = GlobalScope } yyVAL.union = yyLOCAL - case 129: + case 190: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1166 +//line sql.y:1483 { yyDollar[1].createTableUnion().TableSpec = yyDollar[2].tableSpecUnion() yyDollar[1].createTableUnion().FullyParsed = true yyLOCAL = yyDollar[1].createTableUnion() } yyVAL.union = yyLOCAL - case 130: + case 191: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1172 +//line sql.y:1489 { // Create table [name] like [name] yyDollar[1].createTableUnion().OptLike = yyDollar[2].optLikeUnion() @@ -11177,10 +12478,18 @@ yydefault: yyLOCAL = yyDollar[1].createTableUnion() } yyVAL.union = yyLOCAL - case 131: + case 192: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Statement +//line sql.y:1496 + { + yyLOCAL = yyDollar[1].createProcedureUnion() + } + yyVAL.union = yyLOCAL + case 193: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:1179 +//line sql.y:1500 { indexDef := yyDollar[1].alterTableUnion().AlterOptions[0].(*AddIndexDefinition).IndexDefinition indexDef.Columns = yyDollar[3].indexColumnsUnion() @@ -11190,413 +12499,440 @@ yydefault: yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 132: - yyDollar = yyS[yypt-12 : yypt+1] + case 194: + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:1188 +//line sql.y:1509 { - yyLOCAL = &CreateView{ViewName: yyDollar[8].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), IsReplace: yyDollar[3].booleanUnion(), Algorithm: yyDollar[4].str, Definer: yyDollar[5].definerUnion(), Security: yyDollar[6].str, Columns: yyDollar[9].columnsUnion(), Select: yyDollar[11].tableStmtUnion(), CheckOption: yyDollar[12].str} + yyDollar[1].createViewUnion().Columns = yyDollar[2].columnsUnion() + yyDollar[1].createViewUnion().Select = yyDollar[4].tableStmtUnion() + yyDollar[1].createViewUnion().CheckOption = yyDollar[5].str + yyLOCAL = yyDollar[1].createViewUnion() } yyVAL.union = yyLOCAL - case 133: + case 195: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1192 +//line sql.y:1516 { yyDollar[1].createDatabaseUnion().FullyParsed = true yyDollar[1].createDatabaseUnion().CreateOptions = yyDollar[2].databaseOptionsUnion() yyLOCAL = yyDollar[1].createDatabaseUnion() } yyVAL.union = yyLOCAL - case 134: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL bool -//line sql.y:1199 - { - yyLOCAL = false - } - yyVAL.union = yyLOCAL - case 135: + case 196: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:1203 +//line sql.y:1524 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 136: + case 197: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1208 +//line sql.y:1529 { yyVAL.identifierCI = NewIdentifierCI("") } - case 137: + case 198: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1212 +//line sql.y:1533 { yyVAL.identifierCI = yyDollar[2].identifierCI } - case 138: + case 199: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1218 +//line sql.y:1539 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 139: + case 200: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1223 +//line sql.y:1544 { var v []VindexParam yyLOCAL = v } yyVAL.union = yyLOCAL - case 140: + case 201: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1228 +//line sql.y:1549 { yyLOCAL = yyDollar[2].vindexParamsUnion() } yyVAL.union = yyLOCAL - case 141: + case 202: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1234 +//line sql.y:1555 { yyLOCAL = make([]VindexParam, 0, 4) yyLOCAL = append(yyLOCAL, yyDollar[1].vindexParam) } yyVAL.union = yyLOCAL - case 142: + case 203: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1239 +//line sql.y:1560 { yySLICE := (*[]VindexParam)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].vindexParam) } - case 143: + case 204: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1245 +//line sql.y:1566 { yyVAL.vindexParam = VindexParam{Key: yyDollar[1].identifierCI, Val: yyDollar[3].str} } - case 144: + case 205: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1250 +//line sql.y:1571 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 145: + case 206: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1254 +//line sql.y:1575 { yyLOCAL = yyDollar[1].jsonObjectParamsUnion() } yyVAL.union = yyLOCAL - case 146: + case 207: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1260 +//line sql.y:1581 { yyLOCAL = []*JSONObjectParam{yyDollar[1].jsonObjectParam} } yyVAL.union = yyLOCAL - case 147: + case 208: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1264 +//line sql.y:1585 { yySLICE := (*[]*JSONObjectParam)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jsonObjectParam) } - case 148: + case 209: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1270 +//line sql.y:1591 { yyVAL.jsonObjectParam = &JSONObjectParam{Key: yyDollar[1].exprUnion(), Value: yyDollar[3].exprUnion()} } - case 149: + case 210: + yyDollar = yyS[yypt-10 : yypt+1] + var yyLOCAL *CreateProcedure +//line sql.y:1597 + { + yyLOCAL = &CreateProcedure{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[6].tableName, IfNotExists: yyDollar[5].booleanUnion(), Definer: yyDollar[3].definerUnion(), Params: yyDollar[8].procParamsUnion(), Body: yyDollar[10].compoundStatementUnion()} + } + yyVAL.union = yyLOCAL + case 211: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *CreateTable -//line sql.y:1276 +//line sql.y:1603 { yyLOCAL = &CreateTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[6].tableName, IfNotExists: yyDollar[5].booleanUnion(), Temp: yyDollar[3].booleanUnion()} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 150: + case 212: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL *CreateView +//line sql.y:1619 + { + yyLOCAL = &CreateView{ViewName: yyDollar[6].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), Definer: yyDollar[3].definerUnion(), Security: yyDollar[4].str} + } + yyVAL.union = yyLOCAL + case 213: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL *CreateView +//line sql.y:1623 + { + yyLOCAL = &CreateView{ViewName: yyDollar[8].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), IsReplace: yyDollar[3].booleanUnion(), Algorithm: yyDollar[4].str, Definer: yyDollar[5].definerUnion(), Security: yyDollar[6].str} + } + yyVAL.union = yyLOCAL + case 214: + yyDollar = yyS[yypt-7 : yypt+1] + var yyLOCAL *CreateView +//line sql.y:1627 + { + yyLOCAL = &CreateView{ViewName: yyDollar[7].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), Algorithm: yyDollar[3].str, Definer: yyDollar[4].definerUnion(), Security: yyDollar[5].str} + } + yyVAL.union = yyLOCAL + case 215: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1283 +//line sql.y:1634 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[4].tableName} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 151: + case 216: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1290 +//line sql.y:1641 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[7].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[4].identifierCI}, Options: yyDollar[5].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 152: + case 217: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1295 +//line sql.y:1646 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: IndexTypeFullText}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 153: + case 218: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1300 +//line sql.y:1651 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: IndexTypeSpatial}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 154: + case 219: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1305 +//line sql.y:1656 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: IndexTypeUnique}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 155: + case 220: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *CreateDatabase -//line sql.y:1312 +//line sql.y:1663 { yyLOCAL = &CreateDatabase{Comments: Comments(yyDollar[2].strs).Parsed(), DBName: yyDollar[5].identifierCS, IfNotExists: yyDollar[4].booleanUnion()} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 156: + case 221: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AlterDatabase -//line sql.y:1319 +//line sql.y:1670 { yyLOCAL = &AlterDatabase{Comments: Comments(yyDollar[2].strs).Parsed()} setDDL(yylex, yyLOCAL) } yyVAL.union = yyLOCAL - case 159: + case 224: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1330 +//line sql.y:1681 { yyLOCAL = yyDollar[2].tableSpecUnion() yyLOCAL.Options = yyDollar[4].tableOptionsUnion() yyLOCAL.PartitionOption = yyDollar[5].partitionOptionUnion() } yyVAL.union = yyLOCAL - case 160: + case 225: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1337 +//line sql.y:1688 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 161: + case 226: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1341 +//line sql.y:1692 { yyLOCAL = yyDollar[1].databaseOptionsUnion() } yyVAL.union = yyLOCAL - case 162: + case 227: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1347 +//line sql.y:1698 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } yyVAL.union = yyLOCAL - case 163: + case 228: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1351 +//line sql.y:1702 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } yyVAL.union = yyLOCAL - case 164: + case 229: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1355 +//line sql.y:1706 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } yyVAL.union = yyLOCAL - case 165: + case 230: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1359 +//line sql.y:1710 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } - case 166: + case 231: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1363 +//line sql.y:1714 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } - case 167: + case 232: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1367 +//line sql.y:1718 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } - case 168: + case 233: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:1373 +//line sql.y:1724 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 169: + case 234: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:1377 +//line sql.y:1728 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 170: + case 235: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1383 +//line sql.y:1734 { yyVAL.databaseOption = DatabaseOption{Type: CharacterSetType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 171: + case 236: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1387 +//line sql.y:1738 { yyVAL.databaseOption = DatabaseOption{Type: CharacterSetType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 172: + case 237: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1393 +//line sql.y:1744 { yyVAL.databaseOption = DatabaseOption{Type: CollateType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 173: + case 238: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1397 +//line sql.y:1748 { yyVAL.databaseOption = DatabaseOption{Type: CollateType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 174: + case 239: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1403 +//line sql.y:1754 { yyVAL.databaseOption = DatabaseOption{Type: EncryptionType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 175: + case 240: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1407 +//line sql.y:1758 { yyVAL.databaseOption = DatabaseOption{Type: EncryptionType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } - case 176: + case 241: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OptLike -//line sql.y:1413 +//line sql.y:1764 { yyLOCAL = &OptLike{LikeTable: yyDollar[2].tableName} } yyVAL.union = yyLOCAL - case 177: + case 242: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OptLike -//line sql.y:1417 +//line sql.y:1768 { yyLOCAL = &OptLike{LikeTable: yyDollar[3].tableName} } yyVAL.union = yyLOCAL - case 178: + case 243: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColumnDefinition -//line sql.y:1423 +//line sql.y:1774 { yyLOCAL = []*ColumnDefinition{yyDollar[1].columnDefinitionUnion()} } yyVAL.union = yyLOCAL - case 179: + case 244: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1427 +//line sql.y:1778 { yySLICE := (*[]*ColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].columnDefinitionUnion()) } - case 180: + case 245: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1433 +//line sql.y:1784 { yyLOCAL = &TableSpec{} yyLOCAL.AddColumn(yyDollar[1].columnDefinitionUnion()) } yyVAL.union = yyLOCAL - case 181: + case 246: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1438 +//line sql.y:1789 { yyLOCAL = &TableSpec{} yyLOCAL.AddConstraint(yyDollar[1].constraintDefinitionUnion()) } yyVAL.union = yyLOCAL - case 182: + case 247: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1443 +//line sql.y:1794 { yyVAL.tableSpecUnion().AddColumn(yyDollar[3].columnDefinitionUnion()) } - case 183: + case 248: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1447 +//line sql.y:1798 { yyVAL.tableSpecUnion().AddColumn(yyDollar[3].columnDefinitionUnion()) yyVAL.tableSpecUnion().AddConstraint(yyDollar[4].constraintDefinitionUnion()) } - case 184: + case 249: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1452 +//line sql.y:1803 { yyVAL.tableSpecUnion().AddIndex(yyDollar[3].indexDefinitionUnion()) } - case 185: + case 250: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1456 +//line sql.y:1807 { yyVAL.tableSpecUnion().AddConstraint(yyDollar[3].constraintDefinitionUnion()) } - case 186: + case 251: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1460 +//line sql.y:1811 { yyVAL.tableSpecUnion().AddConstraint(yyDollar[3].constraintDefinitionUnion()) } - case 187: + case 252: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColumnDefinition -//line sql.y:1471 +//line sql.y:1822 { yyDollar[2].columnType.Options = yyDollar[4].columnTypeOptionsUnion() if yyDollar[2].columnType.Options.Collate == "" { @@ -11606,10 +12942,10 @@ yydefault: yyLOCAL = &ColumnDefinition{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType} } yyVAL.union = yyLOCAL - case 188: + case 253: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL *ColumnDefinition -//line sql.y:1480 +//line sql.y:1831 { yyDollar[2].columnType.Options = yyDollar[9].columnTypeOptionsUnion() yyDollar[2].columnType.Options.As = yyDollar[7].exprUnion() @@ -11618,2742 +12954,2742 @@ yydefault: yyLOCAL = &ColumnDefinition{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType} } yyVAL.union = yyLOCAL - case 189: + case 254: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1489 +//line sql.y:1840 { yyVAL.str = "" } - case 190: + case 255: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1493 +//line sql.y:1844 { yyVAL.str = "" } - case 191: + case 256: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1502 +//line sql.y:1853 { yyLOCAL = &ColumnTypeOptions{Null: nil, Default: nil, OnUpdate: nil, Autoincrement: false, KeyOpt: ColKeyNone, Comment: nil, As: nil, Invisible: nil, Format: UnspecifiedFormat, EngineAttribute: nil, SecondaryEngineAttribute: nil} } yyVAL.union = yyLOCAL - case 192: + case 257: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1506 +//line sql.y:1857 { yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(true) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 193: + case 258: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1511 +//line sql.y:1862 { yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(false) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 194: + case 259: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1516 +//line sql.y:1867 { yyDollar[1].columnTypeOptionsUnion().Default = yyDollar[4].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 195: + case 260: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1521 +//line sql.y:1872 { yyDollar[1].columnTypeOptionsUnion().Default = yyDollar[3].exprUnion() yyDollar[1].columnTypeOptionsUnion().DefaultLiteral = true yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 196: + case 261: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1527 +//line sql.y:1878 { yyDollar[1].columnTypeOptionsUnion().OnUpdate = yyDollar[4].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 197: + case 262: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1532 +//line sql.y:1883 { yyDollar[1].columnTypeOptionsUnion().Autoincrement = true yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 198: + case 263: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1537 +//line sql.y:1888 { yyDollar[1].columnTypeOptionsUnion().Comment = NewStrLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 199: + case 264: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1542 +//line sql.y:1893 { yyDollar[1].columnTypeOptionsUnion().KeyOpt = yyDollar[2].colKeyOptUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 200: + case 265: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1547 +//line sql.y:1898 { yyDollar[1].columnTypeOptionsUnion().Collate = encodeSQLString(yyDollar[3].str) } - case 201: + case 266: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1551 +//line sql.y:1902 { yyDollar[1].columnTypeOptionsUnion().Collate = string(yyDollar[3].identifierCI.String()) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 202: + case 267: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1556 +//line sql.y:1907 { yyDollar[1].columnTypeOptionsUnion().Format = yyDollar[3].columnFormatUnion() } - case 203: + case 268: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1560 +//line sql.y:1911 { yyDollar[1].columnTypeOptionsUnion().SRID = NewIntLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 204: + case 269: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1565 +//line sql.y:1916 { yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(false) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 205: + case 270: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1570 +//line sql.y:1921 { yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(true) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 206: + case 271: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1575 +//line sql.y:1926 { yyDollar[1].columnTypeOptionsUnion().EngineAttribute = NewStrLiteral(yyDollar[4].str) } - case 207: + case 272: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1579 +//line sql.y:1930 { yyDollar[1].columnTypeOptionsUnion().SecondaryEngineAttribute = NewStrLiteral(yyDollar[4].str) } - case 208: + case 273: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1585 +//line sql.y:1936 { yyLOCAL = FixedFormat } yyVAL.union = yyLOCAL - case 209: + case 274: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1589 +//line sql.y:1940 { yyLOCAL = DynamicFormat } yyVAL.union = yyLOCAL - case 210: + case 275: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1593 +//line sql.y:1944 { yyLOCAL = DefaultFormat } yyVAL.union = yyLOCAL - case 211: + case 276: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1597 +//line sql.y:1948 { yyLOCAL = CompressedFormat } yyVAL.union = yyLOCAL - case 212: + case 277: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnStorage -//line sql.y:1603 +//line sql.y:1954 { yyLOCAL = VirtualStorage } yyVAL.union = yyLOCAL - case 213: + case 278: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnStorage -//line sql.y:1607 +//line sql.y:1958 { yyLOCAL = StoredStorage } yyVAL.union = yyLOCAL - case 214: + case 279: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1612 +//line sql.y:1963 { yyLOCAL = &ColumnTypeOptions{} } yyVAL.union = yyLOCAL - case 215: + case 280: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1616 +//line sql.y:1967 { yyDollar[1].columnTypeOptionsUnion().Storage = yyDollar[2].columnStorageUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 216: + case 281: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1621 +//line sql.y:1972 { yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(true) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 217: + case 282: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1626 +//line sql.y:1977 { yyDollar[1].columnTypeOptionsUnion().Null = ptr.Of(false) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 218: + case 283: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1631 +//line sql.y:1982 { yyDollar[1].columnTypeOptionsUnion().Comment = NewStrLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 219: + case 284: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1636 +//line sql.y:1987 { yyDollar[1].columnTypeOptionsUnion().KeyOpt = yyDollar[2].colKeyOptUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 220: + case 285: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1641 +//line sql.y:1992 { yyDollar[1].columnTypeOptionsUnion().SRID = NewIntLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 221: + case 286: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1646 +//line sql.y:1997 { yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(false) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 222: + case 287: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1651 +//line sql.y:2002 { yyDollar[1].columnTypeOptionsUnion().Invisible = ptr.Of(true) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() } yyVAL.union = yyLOCAL - case 223: + case 288: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1658 +//line sql.y:2009 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 225: + case 290: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1665 +//line sql.y:2016 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_timestamp"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 226: + case 291: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1669 +//line sql.y:2020 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("localtime"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 227: + case 292: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1673 +//line sql.y:2024 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("localtimestamp"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 228: + case 293: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1677 +//line sql.y:2028 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_timestamp"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 229: + case 294: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1681 +//line sql.y:2032 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("now"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 230: + case 295: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1685 +//line sql.y:2036 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("sysdate"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 233: + case 298: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1695 +//line sql.y:2046 { yyLOCAL = &NullVal{} } yyVAL.union = yyLOCAL - case 235: + case 300: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1702 +//line sql.y:2053 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 236: + case 301: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1706 +//line sql.y:2057 { yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 237: + case 302: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1712 +//line sql.y:2063 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 238: + case 303: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1716 +//line sql.y:2067 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 239: + case 304: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1720 +//line sql.y:2071 { yyLOCAL = yyDollar[1].boolValUnion() } yyVAL.union = yyLOCAL - case 240: + case 305: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1724 +//line sql.y:2075 { yyLOCAL = NewHexLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 241: + case 306: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1728 +//line sql.y:2079 { yyLOCAL = NewHexNumLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 242: + case 307: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1732 +//line sql.y:2083 { yyLOCAL = NewBitLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 243: + case 308: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1736 +//line sql.y:2087 { yyLOCAL = NewBitLiteral("0b" + yyDollar[1].str) } yyVAL.union = yyLOCAL - case 244: + case 309: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1740 +//line sql.y:2091 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 245: + case 310: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1744 +//line sql.y:2095 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewBitLiteral("0b" + yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 246: + case 311: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1748 +//line sql.y:2099 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewHexNumLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 247: + case 312: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1752 +//line sql.y:2103 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewBitLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 248: + case 313: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1756 +//line sql.y:2107 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewHexLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 249: + case 314: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1760 +//line sql.y:2111 { arg := parseBindVariable(yylex, yyDollar[2].str[1:]) yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: arg} } yyVAL.union = yyLOCAL - case 250: + case 315: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1765 +//line sql.y:2116 { yyLOCAL = NewDateLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 251: + case 316: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1769 +//line sql.y:2120 { yyLOCAL = NewTimeLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 252: + case 317: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1773 +//line sql.y:2124 { yyLOCAL = NewTimestampLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 253: + case 318: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1779 +//line sql.y:2130 { yyVAL.str = Armscii8Str } - case 254: + case 319: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1783 +//line sql.y:2134 { yyVAL.str = ASCIIStr } - case 255: + case 320: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1787 +//line sql.y:2138 { yyVAL.str = Big5Str } - case 256: + case 321: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1791 +//line sql.y:2142 { yyVAL.str = UBinaryStr } - case 257: + case 322: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1795 +//line sql.y:2146 { yyVAL.str = Cp1250Str } - case 258: + case 323: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1799 +//line sql.y:2150 { yyVAL.str = Cp1251Str } - case 259: + case 324: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1803 +//line sql.y:2154 { yyVAL.str = Cp1256Str } - case 260: + case 325: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1807 +//line sql.y:2158 { yyVAL.str = Cp1257Str } - case 261: + case 326: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1811 +//line sql.y:2162 { yyVAL.str = Cp850Str } - case 262: + case 327: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1815 +//line sql.y:2166 { yyVAL.str = Cp852Str } - case 263: + case 328: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1819 +//line sql.y:2170 { yyVAL.str = Cp866Str } - case 264: + case 329: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1823 +//line sql.y:2174 { yyVAL.str = Cp932Str } - case 265: + case 330: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1827 +//line sql.y:2178 { yyVAL.str = Dec8Str } - case 266: + case 331: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1831 +//line sql.y:2182 { yyVAL.str = EucjpmsStr } - case 267: + case 332: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1835 +//line sql.y:2186 { yyVAL.str = EuckrStr } - case 268: + case 333: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1839 +//line sql.y:2190 { yyVAL.str = Gb18030Str } - case 269: + case 334: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1843 +//line sql.y:2194 { yyVAL.str = Gb2312Str } - case 270: + case 335: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1847 +//line sql.y:2198 { yyVAL.str = GbkStr } - case 271: + case 336: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1851 +//line sql.y:2202 { yyVAL.str = Geostd8Str } - case 272: + case 337: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1855 +//line sql.y:2206 { yyVAL.str = GreekStr } - case 273: + case 338: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1859 +//line sql.y:2210 { yyVAL.str = HebrewStr } - case 274: + case 339: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1863 +//line sql.y:2214 { yyVAL.str = Hp8Str } - case 275: + case 340: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1867 +//line sql.y:2218 { yyVAL.str = Keybcs2Str } - case 276: + case 341: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1871 +//line sql.y:2222 { yyVAL.str = Koi8rStr } - case 277: + case 342: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1875 +//line sql.y:2226 { yyVAL.str = Koi8uStr } - case 278: + case 343: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1879 +//line sql.y:2230 { yyVAL.str = Latin1Str } - case 279: + case 344: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1883 +//line sql.y:2234 { yyVAL.str = Latin2Str } - case 280: + case 345: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1887 +//line sql.y:2238 { yyVAL.str = Latin5Str } - case 281: + case 346: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1891 +//line sql.y:2242 { yyVAL.str = Latin7Str } - case 282: + case 347: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1895 +//line sql.y:2246 { yyVAL.str = MacceStr } - case 283: + case 348: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1899 +//line sql.y:2250 { yyVAL.str = MacromanStr } - case 284: + case 349: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1903 +//line sql.y:2254 { yyVAL.str = SjisStr } - case 285: + case 350: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1907 +//line sql.y:2258 { yyVAL.str = Swe7Str } - case 286: + case 351: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1911 +//line sql.y:2262 { yyVAL.str = Tis620Str } - case 287: + case 352: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1915 +//line sql.y:2266 { yyVAL.str = Ucs2Str } - case 288: + case 353: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1919 +//line sql.y:2270 { yyVAL.str = UjisStr } - case 289: + case 354: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1923 +//line sql.y:2274 { yyVAL.str = Utf16Str } - case 290: + case 355: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1927 +//line sql.y:2278 { yyVAL.str = Utf16leStr } - case 291: + case 356: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1931 +//line sql.y:2282 { yyVAL.str = Utf32Str } - case 292: + case 357: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1935 +//line sql.y:2286 { yyVAL.str = Utf8mb3Str } - case 293: + case 358: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1939 +//line sql.y:2290 { yyVAL.str = Utf8mb4Str } - case 294: + case 359: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1943 +//line sql.y:2294 { yyVAL.str = Utf8mb3Str } - case 297: + case 362: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1953 +//line sql.y:2304 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 298: + case 363: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1957 +//line sql.y:2308 { yyLOCAL = NewFloatLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 299: + case 364: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1961 +//line sql.y:2312 { yyLOCAL = NewDecimalLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 300: + case 365: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1967 +//line sql.y:2318 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 301: + case 366: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1971 +//line sql.y:2322 { yyLOCAL = AppendString(yyDollar[1].exprUnion(), yyDollar[2].str) } yyVAL.union = yyLOCAL - case 302: + case 367: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1977 +//line sql.y:2328 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 303: + case 368: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1981 +//line sql.y:2332 { yyLOCAL = &UnaryExpr{Operator: NStringOp, Expr: NewStrLiteral(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 304: + case 369: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1985 +//line sql.y:2336 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewStrLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 305: + case 370: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1991 +//line sql.y:2342 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 306: + case 371: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1995 +//line sql.y:2346 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 307: + case 372: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:2001 +//line sql.y:2352 { yyLOCAL = ColKeyPrimary } yyVAL.union = yyLOCAL - case 308: + case 373: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:2005 +//line sql.y:2356 { yyLOCAL = ColKeyUnique } yyVAL.union = yyLOCAL - case 309: + case 374: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:2009 +//line sql.y:2360 { yyLOCAL = ColKeyUniqueKey } yyVAL.union = yyLOCAL - case 310: + case 375: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:2013 +//line sql.y:2364 { yyLOCAL = ColKey } yyVAL.union = yyLOCAL - case 311: + case 376: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2019 +//line sql.y:2370 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].booleanUnion() yyVAL.columnType.Zerofill = yyDollar[3].booleanUnion() } - case 315: + case 380: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2030 +//line sql.y:2381 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].intPtrUnion() } - case 316: + case 381: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2035 +//line sql.y:2386 { yyVAL.columnType = yyDollar[1].columnType } - case 317: + case 382: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2041 +//line sql.y:2392 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 318: + case 383: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2045 +//line sql.y:2396 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 319: + case 384: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2049 +//line sql.y:2400 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 320: + case 385: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2053 +//line sql.y:2404 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 321: + case 386: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2057 +//line sql.y:2408 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 322: + case 387: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2061 +//line sql.y:2412 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 323: + case 388: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2065 +//line sql.y:2416 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 324: + case 389: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2069 +//line sql.y:2420 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 325: + case 390: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2073 +//line sql.y:2424 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 326: + case 391: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2079 +//line sql.y:2430 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 327: + case 392: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2085 +//line sql.y:2436 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 328: + case 393: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2091 +//line sql.y:2442 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 329: + case 394: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2097 +//line sql.y:2448 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 330: + case 395: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2103 +//line sql.y:2454 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 331: + case 396: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2109 +//line sql.y:2460 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 332: + case 397: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2115 +//line sql.y:2466 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 333: + case 398: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2123 +//line sql.y:2474 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 334: + case 399: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2127 +//line sql.y:2478 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } - case 335: + case 400: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2131 +//line sql.y:2482 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } - case 336: + case 401: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2135 +//line sql.y:2486 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } - case 337: + case 402: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2139 +//line sql.y:2490 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } - case 338: + case 403: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2145 +//line sql.y:2496 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset} } - case 339: + case 404: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2149 +//line sql.y:2500 { // CHAR BYTE is an alias for binary. See also: // https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html yyVAL.columnType = &ColumnType{Type: "binary", Length: yyDollar[2].intPtrUnion()} } - case 340: + case 405: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2155 +//line sql.y:2506 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset} } - case 341: + case 406: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2159 +//line sql.y:2510 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } - case 342: + case 407: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2163 +//line sql.y:2514 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } - case 343: + case 408: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2167 +//line sql.y:2518 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset} } - case 344: + case 409: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2171 +//line sql.y:2522 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } - case 345: + case 410: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2175 +//line sql.y:2526 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } - case 346: + case 411: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2179 +//line sql.y:2530 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } - case 347: + case 412: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2183 +//line sql.y:2534 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } - case 348: + case 413: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2187 +//line sql.y:2538 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 349: + case 414: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2191 +//line sql.y:2542 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 350: + case 415: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2195 +//line sql.y:2546 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 351: + case 416: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2199 +//line sql.y:2550 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 352: + case 417: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2203 +//line sql.y:2554 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset} } - case 353: + case 418: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2207 +//line sql.y:2558 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } - case 354: + case 419: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2212 +//line sql.y:2563 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset} } - case 355: + case 420: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2218 +//line sql.y:2569 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 356: + case 421: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2222 +//line sql.y:2573 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 357: + case 422: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2226 +//line sql.y:2577 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 358: + case 423: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2230 +//line sql.y:2581 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 359: + case 424: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2234 +//line sql.y:2585 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 360: + case 425: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2238 +//line sql.y:2589 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 361: + case 426: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2242 +//line sql.y:2593 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 362: + case 427: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2246 +//line sql.y:2597 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } - case 363: + case 428: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2252 +//line sql.y:2603 { yyVAL.strs = make([]string, 0, 4) yyVAL.strs = append(yyVAL.strs, encodeSQLString(yyDollar[1].str)) } - case 364: + case 429: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2257 +//line sql.y:2608 { yyVAL.strs = append(yyDollar[1].strs, encodeSQLString(yyDollar[3].str)) } - case 365: + case 430: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *int -//line sql.y:2262 +//line sql.y:2613 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 366: + case 431: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *int -//line sql.y:2266 +//line sql.y:2617 { yyLOCAL = ptr.Of(convertStringToInt(yyDollar[2].str)) } yyVAL.union = yyLOCAL - case 367: + case 432: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2271 +//line sql.y:2622 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 368: + case 433: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2275 +//line sql.y:2626 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: ptr.Of(convertStringToInt(yyDollar[2].str)), Scale: ptr.Of(convertStringToInt(yyDollar[4].str)), } } - case 369: + case 434: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2284 +//line sql.y:2635 { yyVAL.LengthScaleOption = yyDollar[1].LengthScaleOption } - case 370: + case 435: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2288 +//line sql.y:2639 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: ptr.Of(convertStringToInt(yyDollar[2].str)), } } - case 371: + case 436: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2295 +//line sql.y:2646 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 372: + case 437: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2299 +//line sql.y:2650 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: ptr.Of(convertStringToInt(yyDollar[2].str)), } } - case 373: + case 438: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2305 +//line sql.y:2656 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: ptr.Of(convertStringToInt(yyDollar[2].str)), Scale: ptr.Of(convertStringToInt(yyDollar[4].str)), } } - case 374: + case 439: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2313 +//line sql.y:2664 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 375: + case 440: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2317 +//line sql.y:2668 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 376: + case 441: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2321 +//line sql.y:2672 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 377: + case 442: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2326 +//line sql.y:2677 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 378: + case 443: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2330 +//line sql.y:2681 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 379: + case 444: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2335 +//line sql.y:2686 { yyVAL.columnCharset = ColumnCharset{} } - case 380: + case 445: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2339 +//line sql.y:2690 { yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].identifierCI.String()), Binary: yyDollar[3].booleanUnion()} } - case 381: + case 446: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2343 +//line sql.y:2694 { yyVAL.columnCharset = ColumnCharset{Name: encodeSQLString(yyDollar[2].str), Binary: yyDollar[3].booleanUnion()} } - case 382: + case 447: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2347 +//line sql.y:2698 { yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].str)} } - case 383: + case 448: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2351 +//line sql.y:2702 { // ASCII: Shorthand for CHARACTER SET latin1. yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: yyDollar[2].booleanUnion()} } - case 384: + case 449: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2356 +//line sql.y:2707 { // UNICODE: Shorthand for CHARACTER SET ucs2. yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: yyDollar[2].booleanUnion()} } - case 385: + case 450: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2361 +//line sql.y:2712 { // BINARY: Shorthand for default CHARACTER SET but with binary collation yyVAL.columnCharset = ColumnCharset{Name: "", Binary: true} } - case 386: + case 451: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2366 +//line sql.y:2717 { // BINARY ASCII: Shorthand for CHARACTER SET latin1 with binary collation yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: true} } - case 387: + case 452: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2371 +//line sql.y:2722 { // BINARY UNICODE: Shorthand for CHARACTER SET ucs2 with binary collation yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: true} } - case 388: + case 453: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2377 +//line sql.y:2728 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 389: + case 454: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2381 +//line sql.y:2732 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 390: + case 455: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2386 +//line sql.y:2737 { yyVAL.str = "" } - case 391: + case 456: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2390 +//line sql.y:2741 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } - case 392: + case 457: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2394 +//line sql.y:2745 { yyVAL.str = encodeSQLString(yyDollar[2].str) } - case 393: + case 458: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexDefinition -//line sql.y:2400 +//line sql.y:2751 { yyLOCAL = &IndexDefinition{Info: yyDollar[1].indexInfoUnion(), Columns: yyDollar[3].indexColumnsUnion(), Options: yyDollar[5].indexOptionsUnion()} } yyVAL.union = yyLOCAL - case 394: + case 459: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2405 +//line sql.y:2756 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 395: + case 460: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2409 +//line sql.y:2760 { yyLOCAL = yyDollar[1].indexOptionsUnion() } yyVAL.union = yyLOCAL - case 396: + case 461: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2415 +//line sql.y:2766 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL - case 397: + case 462: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2419 +//line sql.y:2770 { yySLICE := (*[]*IndexOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexOptionUnion()) } - case 398: + case 463: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2425 +//line sql.y:2776 { yyLOCAL = yyDollar[1].indexOptionUnion() } yyVAL.union = yyLOCAL - case 399: + case 464: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2429 +//line sql.y:2780 { // should not be string yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 400: + case 465: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2434 +//line sql.y:2785 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 401: + case 466: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2438 +//line sql.y:2789 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 402: + case 467: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2442 +//line sql.y:2793 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 403: + case 468: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2446 +//line sql.y:2797 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str) + " " + string(yyDollar[2].str), String: yyDollar[3].identifierCI.String()} } yyVAL.union = yyLOCAL - case 404: + case 469: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2450 +//line sql.y:2801 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 405: + case 470: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2454 +//line sql.y:2805 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 406: + case 471: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2460 +//line sql.y:2811 { yyVAL.str = "" } - case 407: + case 472: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2464 +//line sql.y:2815 { yyVAL.str = string(yyDollar[1].str) } - case 408: + case 473: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2470 +//line sql.y:2821 { yyLOCAL = &IndexInfo{Type: IndexTypePrimary, ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI("PRIMARY")} } yyVAL.union = yyLOCAL - case 409: + case 474: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2474 +//line sql.y:2825 { yyLOCAL = &IndexInfo{Type: IndexTypeSpatial, Name: NewIdentifierCI(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 410: + case 475: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2478 +//line sql.y:2829 { yyLOCAL = &IndexInfo{Type: IndexTypeFullText, Name: NewIdentifierCI(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 411: + case 476: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2482 +//line sql.y:2833 { yyLOCAL = &IndexInfo{Type: IndexTypeUnique, ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 412: + case 477: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2486 +//line sql.y:2837 { yyLOCAL = &IndexInfo{Type: IndexTypeDefault, Name: NewIdentifierCI(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 413: + case 478: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2491 +//line sql.y:2842 { yyVAL.str = "" } - case 414: + case 479: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2495 +//line sql.y:2846 { yyVAL.str = yyDollar[2].str } - case 415: + case 480: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2501 +//line sql.y:2852 { yyVAL.str = string(yyDollar[1].str) } - case 416: + case 481: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2505 +//line sql.y:2856 { yyVAL.str = string(yyDollar[1].str) } - case 417: + case 482: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2509 +//line sql.y:2860 { yyVAL.str = string(yyDollar[1].str) } - case 418: + case 483: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2515 +//line sql.y:2866 { yyVAL.str = string(yyDollar[1].str) } - case 419: + case 484: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2519 +//line sql.y:2870 { yyVAL.str = string(yyDollar[1].str) } - case 420: + case 485: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2524 +//line sql.y:2875 { yyVAL.str = "" } - case 421: + case 486: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2528 +//line sql.y:2879 { yyVAL.str = yyDollar[1].str } - case 422: + case 487: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2534 +//line sql.y:2885 { yyVAL.str = string(yyDollar[1].str) } - case 423: + case 488: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2538 +//line sql.y:2889 { yyVAL.str = string(yyDollar[1].str) } - case 424: + case 489: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2543 +//line sql.y:2894 { yyVAL.str = "" } - case 425: + case 490: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2547 +//line sql.y:2898 { yyVAL.str = string(yyDollar[1].identifierCI.String()) } - case 426: + case 491: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexColumn -//line sql.y:2553 +//line sql.y:2904 { yyLOCAL = []*IndexColumn{yyDollar[1].indexColumnUnion()} } yyVAL.union = yyLOCAL - case 427: + case 492: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2557 +//line sql.y:2908 { yySLICE := (*[]*IndexColumn)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].indexColumnUnion()) } - case 428: + case 493: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexColumn -//line sql.y:2563 +//line sql.y:2914 { yyLOCAL = &IndexColumn{Column: yyDollar[1].identifierCI, Length: yyDollar[2].intPtrUnion(), Direction: yyDollar[3].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 429: + case 494: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexColumn -//line sql.y:2567 +//line sql.y:2918 { yyLOCAL = &IndexColumn{Expression: yyDollar[2].exprUnion(), Direction: yyDollar[4].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 430: + case 495: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2573 +//line sql.y:2924 { yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()} } yyVAL.union = yyLOCAL - case 431: + case 496: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2577 +//line sql.y:2928 { yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()} } yyVAL.union = yyLOCAL - case 432: + case 497: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2583 +//line sql.y:2934 { yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()} } yyVAL.union = yyLOCAL - case 433: + case 498: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2587 +//line sql.y:2938 { yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()} } yyVAL.union = yyLOCAL - case 434: + case 499: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL ConstraintInfo -//line sql.y:2593 +//line sql.y:2944 { yyLOCAL = &ForeignKeyDefinition{IndexName: NewIdentifierCI(yyDollar[3].str), Source: yyDollar[5].columnsUnion(), ReferenceDefinition: yyDollar[7].referenceDefinitionUnion()} } yyVAL.union = yyLOCAL - case 435: + case 500: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2599 +//line sql.y:2950 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion()} } yyVAL.union = yyLOCAL - case 436: + case 501: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2603 +//line sql.y:2954 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion()} } yyVAL.union = yyLOCAL - case 437: + case 502: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2607 +//line sql.y:2958 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion()} } yyVAL.union = yyLOCAL - case 438: + case 503: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2611 +//line sql.y:2962 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion(), OnUpdate: yyDollar[8].referenceActionUnion()} } yyVAL.union = yyLOCAL - case 439: + case 504: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2615 +//line sql.y:2966 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion(), OnDelete: yyDollar[8].referenceActionUnion()} } yyVAL.union = yyLOCAL - case 440: + case 505: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2620 +//line sql.y:2971 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 441: + case 506: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2624 +//line sql.y:2975 { yyLOCAL = yyDollar[1].referenceDefinitionUnion() } yyVAL.union = yyLOCAL - case 442: + case 507: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL ConstraintInfo -//line sql.y:2630 +//line sql.y:2981 { yyLOCAL = &CheckConstraintDefinition{Expr: yyDollar[3].exprUnion(), Enforced: yyDollar[5].booleanUnion()} } yyVAL.union = yyLOCAL - case 443: + case 508: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2636 +//line sql.y:2987 { yyLOCAL = yyDollar[2].matchActionUnion() } yyVAL.union = yyLOCAL - case 444: + case 509: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2642 +//line sql.y:2993 { yyLOCAL = Full } yyVAL.union = yyLOCAL - case 445: + case 510: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2646 +//line sql.y:2997 { yyLOCAL = Partial } yyVAL.union = yyLOCAL - case 446: + case 511: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2650 +//line sql.y:3001 { yyLOCAL = Simple } yyVAL.union = yyLOCAL - case 447: + case 512: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2655 +//line sql.y:3006 { yyLOCAL = DefaultMatch } yyVAL.union = yyLOCAL - case 448: + case 513: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2659 +//line sql.y:3010 { yyLOCAL = yyDollar[1].matchActionUnion() } yyVAL.union = yyLOCAL - case 449: + case 514: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2665 +//line sql.y:3016 { yyLOCAL = yyDollar[3].referenceActionUnion() } yyVAL.union = yyLOCAL - case 450: + case 515: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2671 +//line sql.y:3022 { yyLOCAL = yyDollar[3].referenceActionUnion() } yyVAL.union = yyLOCAL - case 451: + case 516: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2677 +//line sql.y:3028 { yyLOCAL = Restrict } yyVAL.union = yyLOCAL - case 452: + case 517: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2681 +//line sql.y:3032 { yyLOCAL = Cascade } yyVAL.union = yyLOCAL - case 453: + case 518: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2685 +//line sql.y:3036 { yyLOCAL = NoAction } yyVAL.union = yyLOCAL - case 454: + case 519: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2689 +//line sql.y:3040 { yyLOCAL = SetDefault } yyVAL.union = yyLOCAL - case 455: + case 520: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2693 +//line sql.y:3044 { yyLOCAL = SetNull } yyVAL.union = yyLOCAL - case 456: + case 521: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2698 +//line sql.y:3049 { yyVAL.str = "" } - case 457: + case 522: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2702 +//line sql.y:3053 { yyVAL.str = string(yyDollar[1].str) } - case 458: + case 523: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2706 +//line sql.y:3057 { yyVAL.str = string(yyDollar[1].str) } - case 459: + case 524: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2712 +//line sql.y:3063 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 460: + case 525: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:2716 +//line sql.y:3067 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 461: + case 526: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2721 +//line sql.y:3072 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 462: + case 527: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2725 +//line sql.y:3076 { yyLOCAL = yyDollar[1].booleanUnion() } yyVAL.union = yyLOCAL - case 463: + case 528: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2730 +//line sql.y:3081 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 464: + case 529: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2734 +//line sql.y:3085 { yyLOCAL = yyDollar[1].tableOptionsUnion() } yyVAL.union = yyLOCAL - case 465: + case 530: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2740 +//line sql.y:3091 { yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()} } yyVAL.union = yyLOCAL - case 466: + case 531: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2744 +//line sql.y:3095 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableOptionUnion()) } - case 467: + case 532: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2748 +//line sql.y:3099 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion()) } - case 468: + case 533: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2754 +//line sql.y:3105 { yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()} } yyVAL.union = yyLOCAL - case 469: + case 534: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2758 +//line sql.y:3109 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion()) } - case 470: + case 535: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2764 +//line sql.y:3115 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 471: + case 536: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2768 +//line sql.y:3119 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 472: + case 537: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2772 +//line sql.y:3123 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 473: + case 538: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2776 +//line sql.y:3127 { yyLOCAL = &TableOption{Name: (string(yyDollar[2].str)), String: yyDollar[4].str, CaseSensitive: true} } yyVAL.union = yyLOCAL - case 474: + case 539: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2780 +//line sql.y:3131 { yyLOCAL = &TableOption{Name: string(yyDollar[2].str), String: yyDollar[4].str, CaseSensitive: true} } yyVAL.union = yyLOCAL - case 475: + case 540: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2784 +//line sql.y:3135 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 476: + case 541: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2788 +//line sql.y:3139 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 477: + case 542: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2792 +//line sql.y:3143 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 478: + case 543: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2796 +//line sql.y:3147 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 479: + case 544: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2800 +//line sql.y:3151 { yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 480: + case 545: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2804 +//line sql.y:3155 { yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 481: + case 546: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2808 +//line sql.y:3159 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 482: + case 547: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2812 +//line sql.y:3163 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 483: + case 548: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2816 +//line sql.y:3167 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: yyDollar[3].identifierCS.String(), CaseSensitive: true} } yyVAL.union = yyLOCAL - case 484: + case 549: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2820 +//line sql.y:3171 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 485: + case 550: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2824 +//line sql.y:3175 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 486: + case 551: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2828 +//line sql.y:3179 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 487: + case 552: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2832 +//line sql.y:3183 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 488: + case 553: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2836 +//line sql.y:3187 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 489: + case 554: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2840 +//line sql.y:3191 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 490: + case 555: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2844 +//line sql.y:3195 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 491: + case 556: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2848 +//line sql.y:3199 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 492: + case 557: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2852 +//line sql.y:3203 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 493: + case 558: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2856 +//line sql.y:3207 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 494: + case 559: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2860 +//line sql.y:3211 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 495: + case 560: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2864 +//line sql.y:3215 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 496: + case 561: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2868 +//line sql.y:3219 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 497: + case 562: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2872 +//line sql.y:3223 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 498: + case 563: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2876 +//line sql.y:3227 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 499: + case 564: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2880 +//line sql.y:3231 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: (yyDollar[3].identifierCI.String() + yyDollar[4].str), CaseSensitive: true} } yyVAL.union = yyLOCAL - case 500: + case 565: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2884 +//line sql.y:3235 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Tables: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL - case 501: + case 566: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2889 +//line sql.y:3240 { yyVAL.str = "" } - case 502: + case 567: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2893 +//line sql.y:3244 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 503: + case 568: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2897 +//line sql.y:3248 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 513: + case 578: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2916 +//line sql.y:3267 { yyVAL.str = String(TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}) } - case 514: + case 579: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2920 +//line sql.y:3271 { yyVAL.str = yyDollar[1].identifierCI.String() } - case 515: + case 580: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2924 +//line sql.y:3275 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 516: + case 581: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2928 +//line sql.y:3279 { yyVAL.str = string(yyDollar[1].str) } - case 517: + case 582: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2933 +//line sql.y:3284 { yyVAL.str = "" } - case 519: + case 584: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2939 +//line sql.y:3290 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 520: + case 585: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2943 +//line sql.y:3294 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 521: + case 586: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColName -//line sql.y:2948 +//line sql.y:3299 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 522: + case 587: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColName -//line sql.y:2952 +//line sql.y:3303 { yyLOCAL = yyDollar[2].colNameUnion() } yyVAL.union = yyLOCAL - case 523: + case 588: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2957 +//line sql.y:3308 { yyVAL.str = "" } - case 524: + case 589: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2961 +//line sql.y:3312 { yyVAL.str = string(yyDollar[2].str) } - case 525: + case 590: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Literal -//line sql.y:2966 +//line sql.y:3317 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 526: + case 591: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Literal -//line sql.y:2970 +//line sql.y:3321 { yyLOCAL = NewIntLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 527: + case 592: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Literal -//line sql.y:2974 +//line sql.y:3325 { yyLOCAL = NewDecimalLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 528: + case 593: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2979 +//line sql.y:3330 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 529: + case 594: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2983 +//line sql.y:3334 { yyLOCAL = yyDollar[1].alterOptionsUnion() } yyVAL.union = yyLOCAL - case 530: + case 595: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2987 +//line sql.y:3338 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &OrderByOption{Cols: yyDollar[5].columnsUnion()}) } - case 531: + case 596: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2991 +//line sql.y:3342 { yyLOCAL = yyDollar[1].alterOptionsUnion() } yyVAL.union = yyLOCAL - case 532: + case 597: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2995 +//line sql.y:3346 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionsUnion()...) } - case 533: + case 598: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2999 +//line sql.y:3350 { yyLOCAL = append(append(yyDollar[1].alterOptionsUnion(), yyDollar[3].alterOptionsUnion()...), &OrderByOption{Cols: yyDollar[7].columnsUnion()}) } yyVAL.union = yyLOCAL - case 534: + case 599: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:3005 +//line sql.y:3356 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 535: + case 600: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3009 +//line sql.y:3360 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) } - case 536: + case 601: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3013 +//line sql.y:3364 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) } - case 537: + case 602: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3019 +//line sql.y:3370 { yyLOCAL = yyDollar[1].tableOptionsUnion() } yyVAL.union = yyLOCAL - case 538: + case 603: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3023 +//line sql.y:3374 { yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()} } yyVAL.union = yyLOCAL - case 539: + case 604: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3027 +//line sql.y:3378 { yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()} } yyVAL.union = yyLOCAL - case 540: + case 605: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3031 +//line sql.y:3382 { yyLOCAL = &AddIndexDefinition{IndexDefinition: yyDollar[2].indexDefinitionUnion()} } yyVAL.union = yyLOCAL - case 541: + case 606: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3035 +//line sql.y:3386 { yyLOCAL = &AddColumns{Columns: yyDollar[4].columnDefinitionsUnion()} } yyVAL.union = yyLOCAL - case 542: + case 607: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3039 +//line sql.y:3390 { yyLOCAL = &AddColumns{Columns: []*ColumnDefinition{yyDollar[3].columnDefinitionUnion()}, First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()} } yyVAL.union = yyLOCAL - case 543: + case 608: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3043 +//line sql.y:3394 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: true} } yyVAL.union = yyLOCAL - case 544: + case 609: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3047 +//line sql.y:3398 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[6].exprUnion(), DefaultLiteral: true} } yyVAL.union = yyLOCAL - case 545: + case 610: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3051 +//line sql.y:3402 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 546: + case 611: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3055 +//line sql.y:3406 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: ptr.Of(false)} } yyVAL.union = yyLOCAL - case 547: + case 612: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3059 +//line sql.y:3410 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: ptr.Of(true)} } yyVAL.union = yyLOCAL - case 548: + case 613: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3063 +//line sql.y:3414 { yyLOCAL = &AlterCheck{Name: yyDollar[3].identifierCI, Enforced: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 549: + case 614: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3067 +//line sql.y:3418 { yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: false} } yyVAL.union = yyLOCAL - case 550: + case 615: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3071 +//line sql.y:3422 { yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: true} } yyVAL.union = yyLOCAL - case 551: + case 616: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3075 +//line sql.y:3426 { yyLOCAL = &ChangeColumn{OldColumn: yyDollar[3].colNameUnion(), NewColDefinition: yyDollar[4].columnDefinitionUnion(), First: yyDollar[5].booleanUnion(), After: yyDollar[6].colNameUnion()} } yyVAL.union = yyLOCAL - case 552: + case 617: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3079 +//line sql.y:3430 { yyLOCAL = &ModifyColumn{NewColDefinition: yyDollar[3].columnDefinitionUnion(), First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()} } yyVAL.union = yyLOCAL - case 553: + case 618: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3083 +//line sql.y:3434 { yyLOCAL = &RenameColumn{OldName: yyDollar[3].colNameUnion(), NewName: yyDollar[5].colNameUnion()} } yyVAL.union = yyLOCAL - case 554: + case 619: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3087 +//line sql.y:3438 { yyLOCAL = &AlterCharset{CharacterSet: yyDollar[4].str, Collate: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 555: + case 620: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3091 +//line sql.y:3442 { yyLOCAL = &KeyState{Enable: false} } yyVAL.union = yyLOCAL - case 556: + case 621: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3095 +//line sql.y:3446 { yyLOCAL = &KeyState{Enable: true} } yyVAL.union = yyLOCAL - case 557: + case 622: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3099 +//line sql.y:3450 { yyLOCAL = &TablespaceOperation{Import: false} } yyVAL.union = yyLOCAL - case 558: + case 623: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3103 +//line sql.y:3454 { yyLOCAL = &TablespaceOperation{Import: true} } yyVAL.union = yyLOCAL - case 559: + case 624: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3107 +//line sql.y:3458 { yyLOCAL = &DropColumn{Name: yyDollar[3].colNameUnion()} } yyVAL.union = yyLOCAL - case 560: + case 625: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3111 +//line sql.y:3462 { yyLOCAL = &DropKey{Type: NormalKeyType, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 561: + case 626: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3115 +//line sql.y:3466 { yyLOCAL = &DropKey{Type: PrimaryKeyType} } yyVAL.union = yyLOCAL - case 562: + case 627: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3119 +//line sql.y:3470 { yyLOCAL = &DropKey{Type: ForeignKeyType, Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 563: + case 628: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3123 +//line sql.y:3474 { yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 564: + case 629: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3127 +//line sql.y:3478 { yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 565: + case 630: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3131 +//line sql.y:3482 { yyLOCAL = &Force{} } yyVAL.union = yyLOCAL - case 566: + case 631: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3135 +//line sql.y:3486 { yyLOCAL = &RenameTableName{Table: yyDollar[3].tableName} } yyVAL.union = yyLOCAL - case 567: + case 632: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3139 +//line sql.y:3490 { yyLOCAL = &RenameIndex{OldName: yyDollar[3].identifierCI, NewName: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 568: + case 633: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:3145 +//line sql.y:3496 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 569: + case 634: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3149 +//line sql.y:3500 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) } - case 570: + case 635: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3155 +//line sql.y:3506 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } yyVAL.union = yyLOCAL - case 571: + case 636: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3159 +//line sql.y:3510 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } yyVAL.union = yyLOCAL - case 572: + case 637: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3163 +//line sql.y:3514 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } yyVAL.union = yyLOCAL - case 573: + case 638: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3167 +//line sql.y:3518 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } yyVAL.union = yyLOCAL - case 574: + case 639: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3171 +//line sql.y:3522 { yyLOCAL = &LockOption{Type: DefaultType} } yyVAL.union = yyLOCAL - case 575: + case 640: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3175 +//line sql.y:3526 { yyLOCAL = &LockOption{Type: NoneType} } yyVAL.union = yyLOCAL - case 576: + case 641: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3179 +//line sql.y:3530 { yyLOCAL = &LockOption{Type: SharedType} } yyVAL.union = yyLOCAL - case 577: + case 642: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3183 +//line sql.y:3534 { yyLOCAL = &LockOption{Type: ExclusiveType} } yyVAL.union = yyLOCAL - case 578: + case 643: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3187 +//line sql.y:3538 { yyLOCAL = &Validation{With: true} } yyVAL.union = yyLOCAL - case 579: + case 644: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3191 +//line sql.y:3542 { yyLOCAL = &Validation{With: false} } yyVAL.union = yyLOCAL - case 580: + case 645: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3197 +//line sql.y:3548 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -14361,10 +15697,10 @@ yydefault: yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 581: + case 646: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:3204 +//line sql.y:3555 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -14372,10 +15708,10 @@ yydefault: yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 582: + case 647: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:3211 +//line sql.y:3562 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -14383,28 +15719,28 @@ yydefault: yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 583: + case 648: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:3218 +//line sql.y:3569 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().PartitionSpec = yyDollar[2].partSpecUnion() yyLOCAL = yyDollar[1].alterTableUnion() } yyVAL.union = yyLOCAL - case 584: + case 649: yyDollar = yyS[yypt-11 : yypt+1] var yyLOCAL Statement -//line sql.y:3224 +//line sql.y:3575 { yyLOCAL = &AlterView{ViewName: yyDollar[7].tableName, Comments: Comments(yyDollar[2].strs).Parsed(), Algorithm: yyDollar[3].str, Definer: yyDollar[4].definerUnion(), Security: yyDollar[5].str, Columns: yyDollar[8].columnsUnion(), Select: yyDollar[10].tableStmtUnion(), CheckOption: yyDollar[11].str} } yyVAL.union = yyLOCAL - case 585: + case 650: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3234 +//line sql.y:3585 { yyDollar[1].alterDatabaseUnion().FullyParsed = true yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS @@ -14412,10 +15748,10 @@ yydefault: yyLOCAL = yyDollar[1].alterDatabaseUnion() } yyVAL.union = yyLOCAL - case 586: + case 651: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3241 +//line sql.y:3592 { yyDollar[1].alterDatabaseUnion().FullyParsed = true yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS @@ -14423,10 +15759,10 @@ yydefault: yyLOCAL = yyDollar[1].alterDatabaseUnion() } yyVAL.union = yyLOCAL - case 587: + case 652: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:3248 +//line sql.y:3599 { yyLOCAL = &AlterVschema{ Action: CreateVindexDDLAction, @@ -14439,10 +15775,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 588: + case 653: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3260 +//line sql.y:3611 { yyLOCAL = &AlterVschema{ Action: DropVindexDDLAction, @@ -14453,26 +15789,26 @@ yydefault: } } yyVAL.union = yyLOCAL - case 589: + case 654: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3270 +//line sql.y:3621 { yyLOCAL = &AlterVschema{Action: AddVschemaTableDDLAction, Table: yyDollar[6].tableName} } yyVAL.union = yyLOCAL - case 590: + case 655: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3274 +//line sql.y:3625 { yyLOCAL = &AlterVschema{Action: DropVschemaTableDDLAction, Table: yyDollar[6].tableName} } yyVAL.union = yyLOCAL - case 591: + case 656: yyDollar = yyS[yypt-13 : yypt+1] var yyLOCAL Statement -//line sql.y:3278 +//line sql.y:3629 { yyLOCAL = &AlterVschema{ Action: AddColVindexDDLAction, @@ -14486,10 +15822,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 592: + case 657: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:3291 +//line sql.y:3642 { yyLOCAL = &AlterVschema{ Action: DropColVindexDDLAction, @@ -14500,26 +15836,26 @@ yydefault: } } yyVAL.union = yyLOCAL - case 593: + case 658: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3301 +//line sql.y:3652 { yyLOCAL = &AlterVschema{Action: AddSequenceDDLAction, Table: yyDollar[6].tableName} } yyVAL.union = yyLOCAL - case 594: + case 659: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3305 +//line sql.y:3656 { yyLOCAL = &AlterVschema{Action: DropSequenceDDLAction, Table: yyDollar[6].tableName} } yyVAL.union = yyLOCAL - case 595: + case 660: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Statement -//line sql.y:3309 +//line sql.y:3660 { yyLOCAL = &AlterVschema{ Action: AddAutoIncDDLAction, @@ -14531,10 +15867,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 596: + case 661: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3320 +//line sql.y:3671 { yyLOCAL = &AlterVschema{ Action: DropAutoIncDDLAction, @@ -14542,10 +15878,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 597: + case 662: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3327 +//line sql.y:3678 { yyLOCAL = &AlterMigration{ Type: RetryMigrationType, @@ -14553,10 +15889,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 598: + case 663: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3334 +//line sql.y:3685 { yyLOCAL = &AlterMigration{ Type: CleanupMigrationType, @@ -14564,20 +15900,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 599: + case 664: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3341 +//line sql.y:3692 { yyLOCAL = &AlterMigration{ Type: CleanupAllMigrationType, } } yyVAL.union = yyLOCAL - case 600: + case 665: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3347 +//line sql.y:3698 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -14585,10 +15921,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 601: + case 666: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3354 +//line sql.y:3705 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -14597,20 +15933,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 602: + case 667: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3362 +//line sql.y:3713 { yyLOCAL = &AlterMigration{ Type: LaunchAllMigrationType, } } yyVAL.union = yyLOCAL - case 603: + case 668: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3368 +//line sql.y:3719 { yyLOCAL = &AlterMigration{ Type: CompleteMigrationType, @@ -14618,20 +15954,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 604: + case 669: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3375 +//line sql.y:3726 { yyLOCAL = &AlterMigration{ Type: CompleteAllMigrationType, } } yyVAL.union = yyLOCAL - case 605: + case 670: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3381 +//line sql.y:3732 { yyLOCAL = &AlterMigration{ Type: CancelMigrationType, @@ -14639,20 +15975,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 606: + case 671: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3388 +//line sql.y:3739 { yyLOCAL = &AlterMigration{ Type: CancelAllMigrationType, } } yyVAL.union = yyLOCAL - case 607: + case 672: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3394 +//line sql.y:3745 { yyLOCAL = &AlterMigration{ Type: ThrottleMigrationType, @@ -14662,10 +15998,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 608: + case 673: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3403 +//line sql.y:3754 { yyLOCAL = &AlterMigration{ Type: ThrottleAllMigrationType, @@ -14674,10 +16010,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 609: + case 674: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3411 +//line sql.y:3762 { yyLOCAL = &AlterMigration{ Type: UnthrottleMigrationType, @@ -14685,20 +16021,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 610: + case 675: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3418 +//line sql.y:3769 { yyLOCAL = &AlterMigration{ Type: UnthrottleAllMigrationType, } } yyVAL.union = yyLOCAL - case 611: + case 676: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3424 +//line sql.y:3775 { yyLOCAL = &AlterMigration{ Type: ForceCutOverMigrationType, @@ -14706,20 +16042,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 612: + case 677: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3431 +//line sql.y:3782 { yyLOCAL = &AlterMigration{ Type: ForceCutOverAllMigrationType, } } yyVAL.union = yyLOCAL - case 613: + case 678: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3437 +//line sql.y:3788 { yyLOCAL = &AlterMigration{ Type: SetCutOverThresholdMigrationType, @@ -14728,18 +16064,18 @@ yydefault: } } yyVAL.union = yyLOCAL - case 614: + case 679: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3446 +//line sql.y:3797 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 615: + case 680: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3450 +//line sql.y:3801 { yyDollar[3].partitionOptionUnion().Partitions = yyDollar[4].integerUnion() yyDollar[3].partitionOptionUnion().SubPartition = yyDollar[5].subPartitionUnion() @@ -14747,10 +16083,10 @@ yydefault: yyLOCAL = yyDollar[3].partitionOptionUnion() } yyVAL.union = yyLOCAL - case 616: + case 681: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3459 +//line sql.y:3810 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -14759,10 +16095,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 617: + case 682: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3467 +//line sql.y:3818 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -14772,10 +16108,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 618: + case 683: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3476 +//line sql.y:3827 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -14783,10 +16119,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 619: + case 684: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3483 +//line sql.y:3834 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -14794,18 +16130,18 @@ yydefault: } } yyVAL.union = yyLOCAL - case 620: + case 685: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3491 +//line sql.y:3842 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 621: + case 686: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3495 +//line sql.y:3846 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -14815,10 +16151,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 622: + case 687: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3504 +//line sql.y:3855 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -14829,678 +16165,678 @@ yydefault: } } yyVAL.union = yyLOCAL - case 623: + case 688: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3515 +//line sql.y:3866 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 624: + case 689: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3519 +//line sql.y:3870 { yyLOCAL = yyDollar[2].partDefsUnion() } yyVAL.union = yyLOCAL - case 625: + case 690: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3524 +//line sql.y:3875 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 626: + case 691: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3528 +//line sql.y:3879 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 627: + case 692: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3533 +//line sql.y:3884 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 628: + case 693: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:3537 +//line sql.y:3888 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 629: + case 694: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL TableExpr -//line sql.y:3543 +//line sql.y:3894 { yyLOCAL = &JSONTableExpr{Expr: yyDollar[3].exprUnion(), Filter: yyDollar[5].exprUnion(), Columns: yyDollar[6].jtColumnListUnion(), Alias: yyDollar[8].identifierCS} } yyVAL.union = yyLOCAL - case 630: + case 695: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL []*JtColumnDefinition -//line sql.y:3549 +//line sql.y:3900 { yyLOCAL = yyDollar[3].jtColumnListUnion() } yyVAL.union = yyLOCAL - case 631: + case 696: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JtColumnDefinition -//line sql.y:3555 +//line sql.y:3906 { yyLOCAL = []*JtColumnDefinition{yyDollar[1].jtColumnDefinitionUnion()} } yyVAL.union = yyLOCAL - case 632: + case 697: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3559 +//line sql.y:3910 { yySLICE := (*[]*JtColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jtColumnDefinitionUnion()) } - case 633: + case 698: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3565 +//line sql.y:3916 { yyLOCAL = &JtColumnDefinition{JtOrdinal: &JtOrdinalColDef{Name: yyDollar[1].identifierCI}} } yyVAL.union = yyLOCAL - case 634: + case 699: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3569 +//line sql.y:3920 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 635: + case 700: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3575 +//line sql.y:3926 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 636: + case 701: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3581 +//line sql.y:3932 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 637: + case 702: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3587 +//line sql.y:3938 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 638: + case 703: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3593 +//line sql.y:3944 { jtNestedPath := &JtNestedPathColDef{Path: yyDollar[3].exprUnion(), Columns: yyDollar[4].jtColumnListUnion()} yyLOCAL = &JtColumnDefinition{JtNestedPath: jtNestedPath} } yyVAL.union = yyLOCAL - case 639: + case 704: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3599 +//line sql.y:3950 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 640: + case 705: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3603 +//line sql.y:3954 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 641: + case 706: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3607 +//line sql.y:3958 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 642: + case 707: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3611 +//line sql.y:3962 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 643: + case 708: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3617 +//line sql.y:3968 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } yyVAL.union = yyLOCAL - case 644: + case 709: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3623 +//line sql.y:3974 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } yyVAL.union = yyLOCAL - case 645: + case 710: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3629 +//line sql.y:3980 { yyLOCAL = &JtOnResponse{ResponseType: ErrorJSONType} } yyVAL.union = yyLOCAL - case 646: + case 711: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3633 +//line sql.y:3984 { yyLOCAL = &JtOnResponse{ResponseType: NullJSONType} } yyVAL.union = yyLOCAL - case 647: + case 712: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3637 +//line sql.y:3988 { yyLOCAL = &JtOnResponse{ResponseType: DefaultJSONType, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 648: + case 713: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3643 +//line sql.y:3994 { yyLOCAL = RangeType } yyVAL.union = yyLOCAL - case 649: + case 714: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3647 +//line sql.y:3998 { yyLOCAL = ListType } yyVAL.union = yyLOCAL - case 650: + case 715: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3652 +//line sql.y:4003 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 651: + case 716: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:3656 +//line sql.y:4007 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 652: + case 717: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3661 +//line sql.y:4012 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 653: + case 718: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:3665 +//line sql.y:4016 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 654: + case 719: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3671 +//line sql.y:4022 { yyLOCAL = &PartitionSpec{Action: AddAction, Definitions: []*PartitionDefinition{yyDollar[4].partDefUnion()}} } yyVAL.union = yyLOCAL - case 655: + case 720: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3675 +//line sql.y:4026 { yyLOCAL = &PartitionSpec{Action: DropAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 656: + case 721: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3679 +//line sql.y:4030 { yyLOCAL = &PartitionSpec{Action: ReorganizeAction, Names: yyDollar[3].partitionsUnion(), Definitions: yyDollar[6].partDefsUnion()} } yyVAL.union = yyLOCAL - case 657: + case 722: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3683 +//line sql.y:4034 { yyLOCAL = &PartitionSpec{Action: DiscardAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 658: + case 723: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3687 +//line sql.y:4038 { yyLOCAL = &PartitionSpec{Action: DiscardAction, IsAll: true} } yyVAL.union = yyLOCAL - case 659: + case 724: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3691 +//line sql.y:4042 { yyLOCAL = &PartitionSpec{Action: ImportAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 660: + case 725: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3695 +//line sql.y:4046 { yyLOCAL = &PartitionSpec{Action: ImportAction, IsAll: true} } yyVAL.union = yyLOCAL - case 661: + case 726: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3699 +//line sql.y:4050 { yyLOCAL = &PartitionSpec{Action: TruncateAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 662: + case 727: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3703 +//line sql.y:4054 { yyLOCAL = &PartitionSpec{Action: TruncateAction, IsAll: true} } yyVAL.union = yyLOCAL - case 663: + case 728: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3707 +//line sql.y:4058 { yyLOCAL = &PartitionSpec{Action: CoalesceAction, Number: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 664: + case 729: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3711 +//line sql.y:4062 { yyLOCAL = &PartitionSpec{Action: ExchangeAction, Names: Partitions{yyDollar[3].identifierCI}, TableName: yyDollar[6].tableName, WithoutValidation: yyDollar[7].booleanUnion()} } yyVAL.union = yyLOCAL - case 665: + case 730: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3715 +//line sql.y:4066 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 666: + case 731: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3719 +//line sql.y:4070 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, IsAll: true} } yyVAL.union = yyLOCAL - case 667: + case 732: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3723 +//line sql.y:4074 { yyLOCAL = &PartitionSpec{Action: CheckAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 668: + case 733: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3727 +//line sql.y:4078 { yyLOCAL = &PartitionSpec{Action: CheckAction, IsAll: true} } yyVAL.union = yyLOCAL - case 669: + case 734: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3731 +//line sql.y:4082 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 670: + case 735: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3735 +//line sql.y:4086 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, IsAll: true} } yyVAL.union = yyLOCAL - case 671: + case 736: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3739 +//line sql.y:4090 { yyLOCAL = &PartitionSpec{Action: RebuildAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 672: + case 737: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3743 +//line sql.y:4094 { yyLOCAL = &PartitionSpec{Action: RebuildAction, IsAll: true} } yyVAL.union = yyLOCAL - case 673: + case 738: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3747 +//line sql.y:4098 { yyLOCAL = &PartitionSpec{Action: RepairAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 674: + case 739: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3751 +//line sql.y:4102 { yyLOCAL = &PartitionSpec{Action: RepairAction, IsAll: true} } yyVAL.union = yyLOCAL - case 675: + case 740: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3755 +//line sql.y:4106 { yyLOCAL = &PartitionSpec{Action: UpgradeAction} } yyVAL.union = yyLOCAL - case 676: + case 741: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3760 +//line sql.y:4111 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 677: + case 742: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3764 +//line sql.y:4115 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 678: + case 743: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3768 +//line sql.y:4119 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 679: + case 744: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3774 +//line sql.y:4125 { yyLOCAL = []*PartitionDefinition{yyDollar[1].partDefUnion()} } yyVAL.union = yyLOCAL - case 680: + case 745: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3778 +//line sql.y:4129 { yySLICE := (*[]*PartitionDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].partDefUnion()) } - case 681: + case 746: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3784 +//line sql.y:4135 { yyVAL.partDefUnion().Options = yyDollar[2].partitionDefinitionOptionsUnion() } - case 682: + case 747: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3789 +//line sql.y:4140 { yyLOCAL = &PartitionDefinitionOptions{} } yyVAL.union = yyLOCAL - case 683: + case 748: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3793 +//line sql.y:4144 { yyDollar[1].partitionDefinitionOptionsUnion().ValueRange = yyDollar[2].partitionValueRangeUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 684: + case 749: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3798 +//line sql.y:4149 { yyDollar[1].partitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 685: + case 750: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3803 +//line sql.y:4154 { yyDollar[1].partitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 686: + case 751: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3808 +//line sql.y:4159 { yyDollar[1].partitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 687: + case 752: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3813 +//line sql.y:4164 { yyDollar[1].partitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 688: + case 753: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3818 +//line sql.y:4169 { yyDollar[1].partitionDefinitionOptionsUnion().MaxRows = ptr.Of(yyDollar[2].integerUnion()) yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 689: + case 754: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3823 +//line sql.y:4174 { yyDollar[1].partitionDefinitionOptionsUnion().MinRows = ptr.Of(yyDollar[2].integerUnion()) yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 690: + case 755: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3828 +//line sql.y:4179 { yyDollar[1].partitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 691: + case 756: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3833 +//line sql.y:4184 { yyDollar[1].partitionDefinitionOptionsUnion().SubPartitionDefinitions = yyDollar[2].subPartitionDefinitionsUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 692: + case 757: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SubPartitionDefinitions -//line sql.y:3839 +//line sql.y:4190 { yyLOCAL = yyDollar[2].subPartitionDefinitionsUnion() } yyVAL.union = yyLOCAL - case 693: + case 758: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SubPartitionDefinitions -//line sql.y:3845 +//line sql.y:4196 { yyLOCAL = SubPartitionDefinitions{yyDollar[1].subPartitionDefinitionUnion()} } yyVAL.union = yyLOCAL - case 694: + case 759: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3849 +//line sql.y:4200 { yySLICE := (*SubPartitionDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].subPartitionDefinitionUnion()) } - case 695: + case 760: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SubPartitionDefinition -//line sql.y:3855 +//line sql.y:4206 { yyLOCAL = &SubPartitionDefinition{Name: yyDollar[2].identifierCI, Options: yyDollar[3].subPartitionDefinitionOptionsUnion()} } yyVAL.union = yyLOCAL - case 696: + case 761: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3860 +//line sql.y:4211 { yyLOCAL = &SubPartitionDefinitionOptions{} } yyVAL.union = yyLOCAL - case 697: + case 762: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3864 +//line sql.y:4215 { yyDollar[1].subPartitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 698: + case 763: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3869 +//line sql.y:4220 { yyDollar[1].subPartitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 699: + case 764: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3874 +//line sql.y:4225 { yyDollar[1].subPartitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 700: + case 765: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3879 +//line sql.y:4230 { yyDollar[1].subPartitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 701: + case 766: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3884 +//line sql.y:4235 { yyDollar[1].subPartitionDefinitionOptionsUnion().MaxRows = ptr.Of(yyDollar[2].integerUnion()) yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 702: + case 767: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3889 +//line sql.y:4240 { yyDollar[1].subPartitionDefinitionOptionsUnion().MinRows = ptr.Of(yyDollar[2].integerUnion()) yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 703: + case 768: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3894 +//line sql.y:4245 { yyDollar[1].subPartitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 704: + case 769: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:3901 +//line sql.y:4252 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -15508,10 +16844,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 705: + case 770: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:3908 +//line sql.y:4259 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -15519,10 +16855,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 706: + case 771: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:3915 +//line sql.y:4266 { yyLOCAL = &PartitionValueRange{ Type: InType, @@ -15530,131 +16866,131 @@ yydefault: } } yyVAL.union = yyLOCAL - case 707: + case 772: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3923 +//line sql.y:4274 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 708: + case 773: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3927 +//line sql.y:4278 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 709: + case 774: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionEngine -//line sql.y:3933 +//line sql.y:4284 { yyLOCAL = &PartitionEngine{Storage: yyDollar[1].booleanUnion(), Name: yyDollar[4].identifierCS.String()} } yyVAL.union = yyLOCAL - case 710: + case 775: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Literal -//line sql.y:3939 +//line sql.y:4290 { yyLOCAL = NewStrLiteral(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 711: + case 776: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -//line sql.y:3945 +//line sql.y:4296 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } yyVAL.union = yyLOCAL - case 712: + case 777: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -//line sql.y:3951 +//line sql.y:4302 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } yyVAL.union = yyLOCAL - case 713: + case 778: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:3957 +//line sql.y:4308 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 714: + case 779: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:3963 +//line sql.y:4314 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 715: + case 780: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3969 +//line sql.y:4320 { yyVAL.str = yyDollar[3].identifierCS.String() } - case 716: + case 781: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinition -//line sql.y:3975 +//line sql.y:4326 { yyLOCAL = &PartitionDefinition{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 717: + case 782: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3981 +//line sql.y:4332 { yyVAL.str = "" } - case 718: + case 783: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3985 +//line sql.y:4336 { yyVAL.str = "" } - case 719: + case 784: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3991 +//line sql.y:4342 { yyLOCAL = &RenameTable{TablePairs: yyDollar[3].renameTablePairsUnion()} } yyVAL.union = yyLOCAL - case 720: + case 785: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*RenameTablePair -//line sql.y:3997 +//line sql.y:4348 { yyLOCAL = []*RenameTablePair{{FromTable: yyDollar[1].tableName, ToTable: yyDollar[3].tableName}} } yyVAL.union = yyLOCAL - case 721: + case 786: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4001 +//line sql.y:4352 { yySLICE := (*[]*RenameTablePair)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &RenameTablePair{FromTable: yyDollar[3].tableName, ToTable: yyDollar[5].tableName}) } - case 722: + case 787: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4007 +//line sql.y:4358 { yyLOCAL = &DropTable{FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Temp: yyDollar[3].booleanUnion()} } yyVAL.union = yyLOCAL - case 723: + case 788: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4011 +//line sql.y:4362 { // Change this to an alter statement if yyDollar[4].identifierCI.Lowered() == "primary" { @@ -15664,1377 +17000,1385 @@ yydefault: } } yyVAL.union = yyLOCAL - case 724: + case 789: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4020 +//line sql.y:4371 { yyLOCAL = &DropView{FromTables: yyDollar[5].tableNamesUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 725: + case 790: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4024 +//line sql.y:4375 { yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[2].strs).Parsed(), DBName: yyDollar[5].identifierCS, IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 726: + case 791: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:4379 + { + yyLOCAL = &DropProcedure{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[5].tableName, IfExists: yyDollar[4].booleanUnion()} + } + yyVAL.union = yyLOCAL + case 792: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4030 +//line sql.y:4385 { yyLOCAL = &TruncateTable{Table: yyDollar[3].tableName} } yyVAL.union = yyLOCAL - case 727: + case 793: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4034 +//line sql.y:4389 { yyLOCAL = &TruncateTable{Table: yyDollar[2].tableName} } yyVAL.union = yyLOCAL - case 728: + case 794: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4040 +//line sql.y:4395 { yyLOCAL = &Analyze{IsLocal: yyDollar[2].booleanUnion(), Table: yyDollar[4].tableName} } yyVAL.union = yyLOCAL - case 729: + case 795: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4046 +//line sql.y:4401 { yyLOCAL = &PurgeBinaryLogs{To: string(yyDollar[5].str)} } yyVAL.union = yyLOCAL - case 730: + case 796: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4050 +//line sql.y:4405 { yyLOCAL = &PurgeBinaryLogs{Before: string(yyDollar[5].str)} } yyVAL.union = yyLOCAL - case 731: + case 797: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4056 +//line sql.y:4411 { yyLOCAL = &Show{&ShowBasic{Command: Charset, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 732: + case 798: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4060 +//line sql.y:4415 { yyLOCAL = &Show{&ShowBasic{Command: Collation, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 733: + case 799: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4064 +//line sql.y:4419 { yyLOCAL = &Show{&ShowBasic{Full: yyDollar[2].booleanUnion(), Command: Column, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 734: + case 800: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4068 +//line sql.y:4423 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 735: + case 801: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4072 +//line sql.y:4427 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 736: + case 802: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4076 +//line sql.y:4431 { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 737: + case 803: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4080 +//line sql.y:4435 { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 738: + case 804: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4084 +//line sql.y:4439 { yyLOCAL = &Show{&ShowBasic{Command: Function, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 739: + case 805: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4088 +//line sql.y:4443 { yyLOCAL = &Show{&ShowBasic{Command: Index, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 740: + case 806: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4092 +//line sql.y:4447 { yyLOCAL = &Show{&ShowBasic{Command: OpenTable, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 741: + case 807: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4096 +//line sql.y:4451 { yyLOCAL = &Show{&ShowBasic{Command: Privilege}} } yyVAL.union = yyLOCAL - case 742: + case 808: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4100 +//line sql.y:4455 { yyLOCAL = &Show{&ShowBasic{Command: Procedure, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 743: + case 809: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4104 +//line sql.y:4459 { yyLOCAL = &Show{&ShowBasic{Command: StatusSession, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 744: + case 810: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4108 +//line sql.y:4463 { yyLOCAL = &Show{&ShowBasic{Command: StatusGlobal, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 745: + case 811: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4112 +//line sql.y:4467 { yyLOCAL = &Show{&ShowBasic{Command: VariableSession, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 746: + case 812: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4116 +//line sql.y:4471 { yyLOCAL = &Show{&ShowBasic{Command: VariableGlobal, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 747: + case 813: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4120 +//line sql.y:4475 { yyLOCAL = &Show{&ShowBasic{Command: TableStatus, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 748: + case 814: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4124 +//line sql.y:4479 { yyLOCAL = &Show{&ShowBasic{Command: Table, Full: yyDollar[2].booleanUnion(), DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 749: + case 815: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4128 +//line sql.y:4483 { yyLOCAL = &Show{&ShowBasic{Command: Trigger, DbName: yyDollar[3].identifierCS, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 750: + case 816: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4132 +//line sql.y:4487 { yyLOCAL = &Show{&ShowCreate{Command: CreateDb, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 751: + case 817: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4136 +//line sql.y:4491 { yyLOCAL = &Show{&ShowCreate{Command: CreateE, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 752: + case 818: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4140 +//line sql.y:4495 { yyLOCAL = &Show{&ShowCreate{Command: CreateF, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 753: + case 819: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4144 +//line sql.y:4499 { yyLOCAL = &Show{&ShowCreate{Command: CreateProc, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 754: + case 820: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4148 +//line sql.y:4503 { yyLOCAL = &Show{&ShowCreate{Command: CreateTbl, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 755: + case 821: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4152 +//line sql.y:4507 { yyLOCAL = &Show{&ShowCreate{Command: CreateTr, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 756: + case 822: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4156 +//line sql.y:4511 { yyLOCAL = &Show{&ShowCreate{Command: CreateV, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 757: + case 823: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4160 +//line sql.y:4515 { yyLOCAL = &Show{&ShowBasic{Command: Engines}} } yyVAL.union = yyLOCAL - case 758: + case 824: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4164 +//line sql.y:4519 { yyLOCAL = &Show{&ShowBasic{Command: Plugins}} } yyVAL.union = yyLOCAL - case 759: + case 825: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4168 +//line sql.y:4523 { yyLOCAL = &Show{&ShowBasic{Command: GtidExecGlobal, DbName: yyDollar[4].identifierCS}} } yyVAL.union = yyLOCAL - case 760: + case 826: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4172 +//line sql.y:4527 { yyLOCAL = &Show{&ShowBasic{Command: VGtidExecGlobal, DbName: yyDollar[4].identifierCS}} } yyVAL.union = yyLOCAL - case 761: + case 827: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4176 +//line sql.y:4531 { yyLOCAL = &Show{&ShowBasic{Command: VitessVariables, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 762: + case 828: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4180 +//line sql.y:4535 { yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 763: + case 829: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4184 +//line sql.y:4539 { yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 764: + case 830: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4188 +//line sql.y:4543 { yyLOCAL = &ShowThrottledApps{} } yyVAL.union = yyLOCAL - case 765: + case 831: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4192 +//line sql.y:4547 { yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 766: + case 832: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4196 +//line sql.y:4551 { yyLOCAL = &ShowThrottlerStatus{} } yyVAL.union = yyLOCAL - case 767: + case 833: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4200 +//line sql.y:4555 { yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}} } yyVAL.union = yyLOCAL - case 768: + case 834: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4204 +//line sql.y:4559 { yyLOCAL = &Show{&ShowBasic{Command: VschemaKeyspaces}} } yyVAL.union = yyLOCAL - case 769: + case 835: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4208 +//line sql.y:4563 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes}} } yyVAL.union = yyLOCAL - case 770: + case 836: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4212 +//line sql.y:4567 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes, Tbl: yyDollar[5].tableName}} } yyVAL.union = yyLOCAL - case 771: + case 837: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4216 +//line sql.y:4571 { yyLOCAL = &Show{&ShowBasic{Command: Warnings}} } yyVAL.union = yyLOCAL - case 772: + case 838: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4220 +//line sql.y:4575 { yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 773: + case 839: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4224 +//line sql.y:4579 { yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 774: + case 840: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4228 +//line sql.y:4583 { yyLOCAL = &Show{&ShowBasic{Command: VitessTarget}} } yyVAL.union = yyLOCAL - case 775: + case 841: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4235 +//line sql.y:4590 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].identifierCI.String())}} } yyVAL.union = yyLOCAL - case 776: + case 842: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4239 +//line sql.y:4594 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 777: + case 843: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4243 +//line sql.y:4598 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}} } yyVAL.union = yyLOCAL - case 778: + case 844: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4247 +//line sql.y:4602 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 779: + case 845: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4251 +//line sql.y:4606 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 780: + case 846: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4255 +//line sql.y:4610 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 781: + case 847: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4259 +//line sql.y:4614 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 782: + case 848: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4263 +//line sql.y:4618 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 783: + case 849: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4267 +//line sql.y:4622 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 784: + case 850: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4271 +//line sql.y:4626 { yyLOCAL = &Show{&ShowTransactionStatus{TransactionID: string(yyDollar[5].str)}} } yyVAL.union = yyLOCAL - case 785: + case 851: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4275 +//line sql.y:4630 { yyLOCAL = &Show{&ShowTransactionStatus{}} } yyVAL.union = yyLOCAL - case 786: + case 852: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4279 +//line sql.y:4634 { yyLOCAL = &Show{&ShowTransactionStatus{Keyspace: yyDollar[5].identifierCS.String()}} } yyVAL.union = yyLOCAL - case 787: + case 853: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4284 +//line sql.y:4639 { } - case 788: + case 854: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4286 +//line sql.y:4641 { } - case 789: + case 855: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4290 +//line sql.y:4645 { yyVAL.str = "" } - case 790: + case 856: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4294 +//line sql.y:4649 { yyVAL.str = "extended " } - case 791: + case 857: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4300 +//line sql.y:4655 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 792: + case 858: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4304 +//line sql.y:4659 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 793: + case 859: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4310 +//line sql.y:4665 { yyVAL.str = string(yyDollar[1].str) } - case 794: + case 860: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4314 +//line sql.y:4669 { yyVAL.str = string(yyDollar[1].str) } - case 795: + case 861: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4320 +//line sql.y:4675 { yyVAL.identifierCS = NewIdentifierCS("") } - case 796: + case 862: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4324 +//line sql.y:4679 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 797: + case 863: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4328 +//line sql.y:4683 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 798: + case 864: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4334 +//line sql.y:4689 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 799: + case 865: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4338 +//line sql.y:4693 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 800: + case 866: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4342 +//line sql.y:4697 { yyLOCAL = &ShowFilter{Filter: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 801: + case 867: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4348 +//line sql.y:4703 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 802: + case 868: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4352 +//line sql.y:4707 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 803: + case 869: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4358 +//line sql.y:4713 { yyVAL.empty = struct{}{} } - case 804: + case 870: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4362 +//line sql.y:4717 { yyVAL.empty = struct{}{} } - case 805: + case 871: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4366 +//line sql.y:4721 { yyVAL.empty = struct{}{} } - case 806: + case 872: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4372 +//line sql.y:4727 { yyVAL.str = string(yyDollar[1].str) } - case 807: + case 873: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4376 +//line sql.y:4731 { yyVAL.str = string(yyDollar[1].str) } - case 808: + case 874: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4382 +//line sql.y:4737 { yyLOCAL = &Use{DBName: yyDollar[2].identifierCS} } yyVAL.union = yyLOCAL - case 809: + case 875: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4386 +//line sql.y:4741 { yyLOCAL = &Use{DBName: IdentifierCS{v: ""}} } yyVAL.union = yyLOCAL - case 810: + case 876: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4390 +//line sql.y:4745 { yyLOCAL = &Use{DBName: NewIdentifierCS(yyDollar[2].identifierCS.String() + "@" + string(yyDollar[3].str))} } yyVAL.union = yyLOCAL - case 811: + case 877: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4397 +//line sql.y:4752 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 812: + case 878: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4401 +//line sql.y:4756 { yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str)) } - case 813: + case 879: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4405 +//line sql.y:4760 { yyVAL.identifierCS = NewIdentifierCS("@@" + string(yyDollar[1].str)) } - case 814: + case 880: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4409 +//line sql.y:4764 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 815: + case 881: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4416 +//line sql.y:4771 { yyLOCAL = &Begin{} } yyVAL.union = yyLOCAL - case 816: + case 882: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4420 +//line sql.y:4775 { yyLOCAL = &Begin{TxAccessModes: yyDollar[3].txAccessModesUnion()} } yyVAL.union = yyLOCAL - case 817: + case 883: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4425 +//line sql.y:4780 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 818: + case 884: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4429 +//line sql.y:4784 { yyLOCAL = yyDollar[1].txAccessModesUnion() } yyVAL.union = yyLOCAL - case 819: + case 885: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4435 +//line sql.y:4790 { yyLOCAL = []TxAccessMode{yyDollar[1].txAccessModeUnion()} } yyVAL.union = yyLOCAL - case 820: + case 886: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4439 +//line sql.y:4794 { yySLICE := (*[]TxAccessMode)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].txAccessModeUnion()) } - case 821: + case 887: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4445 +//line sql.y:4800 { yyLOCAL = WithConsistentSnapshot } yyVAL.union = yyLOCAL - case 822: + case 888: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4449 +//line sql.y:4804 { yyLOCAL = ReadWrite } yyVAL.union = yyLOCAL - case 823: + case 889: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4453 +//line sql.y:4808 { yyLOCAL = ReadOnly } yyVAL.union = yyLOCAL - case 824: + case 890: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4460 +//line sql.y:4815 { yyLOCAL = &Commit{} } yyVAL.union = yyLOCAL - case 825: + case 891: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4466 +//line sql.y:4821 { yyLOCAL = &Rollback{} } yyVAL.union = yyLOCAL - case 826: + case 892: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4470 +//line sql.y:4825 { yyLOCAL = &SRollback{Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 827: + case 893: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4475 +//line sql.y:4830 { yyVAL.empty = struct{}{} } - case 828: + case 894: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4477 +//line sql.y:4832 { yyVAL.empty = struct{}{} } - case 829: + case 895: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4480 +//line sql.y:4835 { yyVAL.empty = struct{}{} } - case 830: + case 896: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4482 +//line sql.y:4837 { yyVAL.empty = struct{}{} } - case 831: + case 897: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4486 +//line sql.y:4841 { yyLOCAL = &Savepoint{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 832: + case 898: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4492 +//line sql.y:4847 { yyLOCAL = &Release{Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 833: + case 899: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4497 +//line sql.y:4852 { yyLOCAL = EmptyType } yyVAL.union = yyLOCAL - case 834: + case 900: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4501 +//line sql.y:4856 { yyLOCAL = JSONType } yyVAL.union = yyLOCAL - case 835: + case 901: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4505 +//line sql.y:4860 { yyLOCAL = TreeType } yyVAL.union = yyLOCAL - case 836: + case 902: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4509 +//line sql.y:4864 { yyLOCAL = TraditionalType } yyVAL.union = yyLOCAL - case 837: + case 903: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4513 +//line sql.y:4868 { yyLOCAL = AnalyzeType } yyVAL.union = yyLOCAL - case 838: + case 904: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4518 +//line sql.y:4873 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 839: + case 905: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4522 +//line sql.y:4877 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 840: + case 906: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4526 +//line sql.y:4881 { yyLOCAL = AllVExplainType } yyVAL.union = yyLOCAL - case 841: + case 907: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4530 +//line sql.y:4885 { yyLOCAL = QueriesVExplainType } yyVAL.union = yyLOCAL - case 842: + case 908: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4534 +//line sql.y:4889 { yyLOCAL = TraceVExplainType } yyVAL.union = yyLOCAL - case 843: + case 909: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4538 +//line sql.y:4893 { yyLOCAL = KeysVExplainType } yyVAL.union = yyLOCAL - case 844: + case 910: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4544 +//line sql.y:4899 { yyVAL.str = yyDollar[1].str } - case 845: + case 911: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4548 +//line sql.y:4903 { yyVAL.str = yyDollar[1].str } - case 846: + case 912: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4552 +//line sql.y:4907 { yyVAL.str = yyDollar[1].str } - case 847: + case 913: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4558 +//line sql.y:4913 { yyLOCAL = yyDollar[1].tableStmtUnion() } yyVAL.union = yyLOCAL - case 848: + case 914: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4562 +//line sql.y:4917 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 849: + case 915: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4566 +//line sql.y:4921 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 850: + case 916: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4570 +//line sql.y:4925 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 851: + case 917: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4575 +//line sql.y:4930 { yyVAL.str = "" } - case 852: + case 918: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4579 +//line sql.y:4934 { yyVAL.str = yyDollar[1].identifierCI.val } - case 853: + case 919: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4583 +//line sql.y:4938 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 854: + case 920: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4589 +//line sql.y:4944 { yyLOCAL = &ExplainTab{Table: yyDollar[3].tableName, Wild: yyDollar[4].str} } yyVAL.union = yyLOCAL - case 855: + case 921: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4593 +//line sql.y:4948 { yyLOCAL = &ExplainStmt{Type: yyDollar[3].explainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 856: + case 922: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4599 +//line sql.y:4954 { yyLOCAL = &VExplainStmt{Type: yyDollar[3].vexplainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 857: + case 923: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4605 +//line sql.y:4960 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 858: + case 924: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4609 +//line sql.y:4964 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 859: + case 925: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4615 +//line sql.y:4970 { yyLOCAL = &LockTables{Tables: yyDollar[3].tableAndLockTypesUnion()} } yyVAL.union = yyLOCAL - case 860: + case 926: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableAndLockTypes -//line sql.y:4621 +//line sql.y:4976 { yyLOCAL = TableAndLockTypes{yyDollar[1].tableAndLockTypeUnion()} } yyVAL.union = yyLOCAL - case 861: + case 927: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4625 +//line sql.y:4980 { yySLICE := (*TableAndLockTypes)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableAndLockTypeUnion()) } - case 862: + case 928: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *TableAndLockType -//line sql.y:4631 +//line sql.y:4986 { yyLOCAL = &TableAndLockType{Table: yyDollar[1].aliasedTableNameUnion(), Lock: yyDollar[2].lockTypeUnion()} } yyVAL.union = yyLOCAL - case 863: + case 929: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4637 +//line sql.y:4992 { yyLOCAL = Read } yyVAL.union = yyLOCAL - case 864: + case 930: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4641 +//line sql.y:4996 { yyLOCAL = ReadLocal } yyVAL.union = yyLOCAL - case 865: + case 931: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4645 +//line sql.y:5000 { yyLOCAL = Write } yyVAL.union = yyLOCAL - case 866: + case 932: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4649 +//line sql.y:5004 { yyLOCAL = LowPriorityWrite } yyVAL.union = yyLOCAL - case 867: + case 933: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4655 +//line sql.y:5010 { yyLOCAL = &UnlockTables{} } yyVAL.union = yyLOCAL - case 868: + case 934: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4661 +//line sql.y:5016 { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 869: + case 935: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4667 +//line sql.y:5022 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), FlushOptions: yyDollar[3].strs} } yyVAL.union = yyLOCAL - case 870: + case 936: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4671 +//line sql.y:5026 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion()} } yyVAL.union = yyLOCAL - case 871: + case 937: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4675 +//line sql.y:5030 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 872: + case 938: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4679 +//line sql.y:5034 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL - case 873: + case 939: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4683 +//line sql.y:5038 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 874: + case 940: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4687 +//line sql.y:5042 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), ForExport: true} } yyVAL.union = yyLOCAL - case 875: + case 941: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4693 +//line sql.y:5048 { yyVAL.strs = []string{yyDollar[1].str} } - case 876: + case 942: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4697 +//line sql.y:5052 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[3].str) } - case 877: + case 943: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4703 +//line sql.y:5058 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 878: + case 944: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4707 +//line sql.y:5062 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 879: + case 945: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4711 +//line sql.y:5066 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 880: + case 946: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4715 +//line sql.y:5070 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 881: + case 947: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4719 +//line sql.y:5074 { yyVAL.str = string(yyDollar[1].str) } - case 882: + case 948: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4723 +//line sql.y:5078 { yyVAL.str = string(yyDollar[1].str) } - case 883: + case 949: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4727 +//line sql.y:5082 { yyVAL.str = string(yyDollar[1].str) } - case 884: + case 950: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4731 +//line sql.y:5086 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyDollar[3].str } - case 885: + case 951: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4735 +//line sql.y:5090 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 886: + case 952: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4739 +//line sql.y:5094 { yyVAL.str = string(yyDollar[1].str) } - case 887: + case 953: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4743 +//line sql.y:5098 { yyVAL.str = string(yyDollar[1].str) } - case 888: + case 954: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4747 +//line sql.y:5102 { yyVAL.str = string(yyDollar[1].str) } - case 889: + case 955: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4752 +//line sql.y:5107 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 890: + case 956: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4756 +//line sql.y:5111 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 891: + case 957: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4760 +//line sql.y:5115 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 892: + case 958: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4765 +//line sql.y:5120 { yyVAL.str = "" } - case 893: + case 959: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4769 +//line sql.y:5124 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String() } - case 894: + case 960: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4774 +//line sql.y:5129 { setAllowComments(yylex, true) } - case 895: + case 961: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4778 +//line sql.y:5133 { yyVAL.strs = yyDollar[2].strs setAllowComments(yylex, false) } - case 896: + case 962: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4784 +//line sql.y:5139 { yyVAL.strs = nil } - case 897: + case 963: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4788 +//line sql.y:5143 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str) } - case 898: + case 964: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4794 +//line sql.y:5149 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 899: + case 965: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:4798 +//line sql.y:5153 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 900: + case 966: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:4802 +//line sql.y:5157 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 901: + case 967: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4807 +//line sql.y:5162 { yyVAL.str = "" } - case 902: + case 968: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4811 +//line sql.y:5166 { yyVAL.str = SQLNoCacheStr } - case 903: + case 969: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4815 +//line sql.y:5170 { yyVAL.str = SQLCacheStr } - case 904: + case 970: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4820 +//line sql.y:5175 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 905: + case 971: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4824 +//line sql.y:5179 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 906: + case 972: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4828 +//line sql.y:5183 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 907: + case 973: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4834 +//line sql.y:5189 { yyLOCAL = &PrepareStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Statement: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 908: + case 974: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4838 +//line sql.y:5193 { yyLOCAL = &PrepareStmt{ Name: yyDollar[3].identifierCI, @@ -17043,600 +18387,600 @@ yydefault: } } yyVAL.union = yyLOCAL - case 909: + case 975: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4848 +//line sql.y:5203 { yyLOCAL = &ExecuteStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Arguments: yyDollar[4].variablesUnion()} } yyVAL.union = yyLOCAL - case 910: + case 976: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*Variable -//line sql.y:4853 +//line sql.y:5208 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 911: + case 977: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []*Variable -//line sql.y:4857 +//line sql.y:5212 { yyLOCAL = yyDollar[2].variablesUnion() } yyVAL.union = yyLOCAL - case 912: + case 978: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4863 +//line sql.y:5218 { yyLOCAL = &DeallocateStmt{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 913: + case 979: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4867 +//line sql.y:5222 { yyLOCAL = &DeallocateStmt{Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 914: + case 980: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4872 +//line sql.y:5227 { yyVAL.strs = nil } - case 915: + case 981: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4876 +//line sql.y:5231 { yyVAL.strs = yyDollar[1].strs } - case 916: + case 982: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4882 +//line sql.y:5237 { yyVAL.strs = []string{yyDollar[1].str} } - case 917: + case 983: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4886 +//line sql.y:5241 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str) } - case 918: + case 984: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4892 +//line sql.y:5247 { yyVAL.str = SQLNoCacheStr } - case 919: + case 985: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4896 +//line sql.y:5251 { yyVAL.str = SQLCacheStr } - case 920: + case 986: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4900 +//line sql.y:5255 { yyVAL.str = DistinctStr } - case 921: + case 987: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4904 +//line sql.y:5259 { yyVAL.str = DistinctStr } - case 922: + case 988: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4908 +//line sql.y:5263 { yyVAL.str = HighPriorityStr } - case 923: + case 989: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4912 +//line sql.y:5267 { yyVAL.str = StraightJoinHint } - case 924: + case 990: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4916 +//line sql.y:5271 { yyVAL.str = SQLBufferResultStr } - case 925: + case 991: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4920 +//line sql.y:5275 { yyVAL.str = SQLSmallResultStr } - case 926: + case 992: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4924 +//line sql.y:5279 { yyVAL.str = SQLBigResultStr } - case 927: + case 993: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4928 +//line sql.y:5283 { yyVAL.str = SQLCalcFoundRowsStr } - case 928: + case 994: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4932 +//line sql.y:5287 { yyVAL.str = AllStr // These are not picked up by NewSelect, and so ALL will be dropped. But this is OK, since it's redundant anyway } - case 929: + case 995: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *SelectExprs -//line sql.y:4938 +//line sql.y:5293 { yyLOCAL = &SelectExprs{Exprs: []SelectExpr{yyDollar[1].selectExprUnion()}} } yyVAL.union = yyLOCAL - case 930: + case 996: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SelectExprs -//line sql.y:4942 +//line sql.y:5297 { res := yyDollar[1].selectExprsUnion() res.Exprs = append(res.Exprs, yyDollar[3].selectExprUnion()) yyLOCAL = res } yyVAL.union = yyLOCAL - case 931: + case 997: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:4950 +//line sql.y:5305 { yyLOCAL = &StarExpr{} } yyVAL.union = yyLOCAL - case 932: + case 998: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:4954 +//line sql.y:5309 { yyLOCAL = &AliasedExpr{Expr: yyDollar[1].exprUnion(), As: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 933: + case 999: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:4958 +//line sql.y:5313 { yyLOCAL = &StarExpr{TableName: TableName{Name: yyDollar[1].identifierCS}} } yyVAL.union = yyLOCAL - case 934: + case 1000: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:4962 +//line sql.y:5317 { yyLOCAL = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 935: + case 1001: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4967 +//line sql.y:5322 { yyVAL.identifierCI = IdentifierCI{} } - case 936: + case 1002: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4971 +//line sql.y:5326 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 937: + case 1003: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4975 +//line sql.y:5330 { yyVAL.identifierCI = yyDollar[2].identifierCI } - case 939: + case 1005: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4982 +//line sql.y:5337 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 940: + case 1006: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableExprs -//line sql.y:4987 +//line sql.y:5342 { yyLOCAL = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewIdentifierCS("dual")}}} } yyVAL.union = yyLOCAL - case 941: + case 1007: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:4991 +//line sql.y:5346 { yyLOCAL = yyDollar[1].tableExprsUnion() } yyVAL.union = yyLOCAL - case 942: + case 1008: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableExprs -//line sql.y:4997 +//line sql.y:5352 { yyLOCAL = yyDollar[2].tableExprsUnion() } yyVAL.union = yyLOCAL - case 943: + case 1009: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5003 +//line sql.y:5358 { yyLOCAL = TableExprs{yyDollar[1].tableExprUnion()} } yyVAL.union = yyLOCAL - case 944: + case 1010: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5007 +//line sql.y:5362 { yySLICE := (*TableExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableExprUnion()) } - case 947: + case 1013: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5017 +//line sql.y:5372 { yyLOCAL = yyDollar[1].aliasedTableNameUnion() } yyVAL.union = yyLOCAL - case 948: + case 1014: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5021 +//line sql.y:5376 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].derivedTableUnion(), As: yyDollar[3].identifierCS, Columns: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 949: + case 1015: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5025 +//line sql.y:5380 { yyLOCAL = &ParenTableExpr{Exprs: yyDollar[2].tableExprsUnion()} } yyVAL.union = yyLOCAL - case 950: + case 1016: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5029 +//line sql.y:5384 { yyLOCAL = yyDollar[1].tableExprUnion() } yyVAL.union = yyLOCAL - case 951: + case 1017: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5035 +//line sql.y:5390 { yyLOCAL = &DerivedTable{Lateral: false, Select: yyDollar[1].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 952: + case 1018: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5039 +//line sql.y:5394 { yyLOCAL = &DerivedTable{Lateral: true, Select: yyDollar[2].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 953: + case 1019: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5045 +//line sql.y:5400 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].identifierCS, Hints: yyDollar[3].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 954: + case 1020: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5049 +//line sql.y:5404 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitionsUnion(), As: yyDollar[6].identifierCS, Hints: yyDollar[7].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 955: + case 1021: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5054 +//line sql.y:5409 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 956: + case 1022: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:5058 +//line sql.y:5413 { yyLOCAL = yyDollar[2].columnsUnion() } yyVAL.union = yyLOCAL - case 957: + case 1023: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5063 +//line sql.y:5418 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 958: + case 1024: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5067 +//line sql.y:5422 { yyLOCAL = yyDollar[1].columnsUnion() } yyVAL.union = yyLOCAL - case 959: + case 1025: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5073 +//line sql.y:5428 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 960: + case 1026: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5077 +//line sql.y:5432 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 961: + case 1027: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5083 +//line sql.y:5438 { yyLOCAL = []*Variable{yyDollar[1].variableUnion()} } yyVAL.union = yyLOCAL - case 962: + case 1028: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5087 +//line sql.y:5442 { yySLICE := (*[]*Variable)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].variableUnion()) } - case 963: + case 1029: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5093 +//line sql.y:5448 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 964: + case 1030: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5097 +//line sql.y:5452 { yyLOCAL = Columns{NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 965: + case 1031: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5101 +//line sql.y:5456 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 966: + case 1032: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5105 +//line sql.y:5460 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, NewIdentifierCI(string(yyDollar[3].str))) } - case 967: + case 1033: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Partitions -//line sql.y:5111 +//line sql.y:5466 { yyLOCAL = Partitions{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 968: + case 1034: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5115 +//line sql.y:5470 { yySLICE := (*Partitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 969: + case 1035: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5128 +//line sql.y:5483 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 970: + case 1036: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5132 +//line sql.y:5487 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 971: + case 1037: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5136 +//line sql.y:5491 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 972: + case 1038: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5140 +//line sql.y:5495 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion()} } yyVAL.union = yyLOCAL - case 973: + case 1039: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5146 +//line sql.y:5501 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 974: + case 1040: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5148 +//line sql.y:5503 { yyVAL.joinCondition = &JoinCondition{Using: yyDollar[3].columnsUnion()} } - case 975: + case 1041: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5152 +//line sql.y:5507 { yyVAL.joinCondition = &JoinCondition{} } - case 976: + case 1042: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5154 +//line sql.y:5509 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 977: + case 1043: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5158 +//line sql.y:5513 { yyVAL.joinCondition = &JoinCondition{} } - case 978: + case 1044: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5160 +//line sql.y:5515 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 979: + case 1045: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5163 +//line sql.y:5518 { yyVAL.empty = struct{}{} } - case 980: + case 1046: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5165 +//line sql.y:5520 { yyVAL.empty = struct{}{} } - case 981: + case 1047: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5168 +//line sql.y:5523 { yyVAL.identifierCS = NewIdentifierCS("") } - case 982: + case 1048: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5172 +//line sql.y:5527 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 983: + case 1049: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5176 +//line sql.y:5531 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 985: + case 1051: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5183 +//line sql.y:5538 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 986: + case 1052: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5189 +//line sql.y:5544 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 987: + case 1053: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5193 +//line sql.y:5548 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 988: + case 1054: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5197 +//line sql.y:5552 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 989: + case 1055: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5203 +//line sql.y:5558 { yyLOCAL = StraightJoinType } yyVAL.union = yyLOCAL - case 990: + case 1056: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5209 +//line sql.y:5564 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 991: + case 1057: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5213 +//line sql.y:5568 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 992: + case 1058: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5217 +//line sql.y:5572 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 993: + case 1059: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5221 +//line sql.y:5576 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 994: + case 1060: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5227 +//line sql.y:5582 { yyLOCAL = NaturalJoinType } yyVAL.union = yyLOCAL - case 995: + case 1061: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5231 +//line sql.y:5586 { if yyDollar[2].joinTypeUnion() == LeftJoinType { yyLOCAL = NaturalLeftJoinType @@ -17645,667 +18989,667 @@ yydefault: } } yyVAL.union = yyLOCAL - case 996: + case 1062: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5241 +//line sql.y:5596 { yyVAL.tableName = yyDollar[2].tableName } - case 997: + case 1063: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5245 +//line sql.y:5600 { yyVAL.tableName = yyDollar[1].tableName } - case 998: + case 1064: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5251 +//line sql.y:5606 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 999: + case 1065: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5255 +//line sql.y:5610 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS} } - case 1000: + case 1066: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5261 +//line sql.y:5616 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 1001: + case 1067: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5266 +//line sql.y:5621 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1002: + case 1068: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5270 +//line sql.y:5625 { yyLOCAL = yyDollar[1].indexHintsUnion() } yyVAL.union = yyLOCAL - case 1003: + case 1069: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5276 +//line sql.y:5631 { yyLOCAL = IndexHints{yyDollar[1].indexHintUnion()} } yyVAL.union = yyLOCAL - case 1004: + case 1070: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5280 +//line sql.y:5635 { yySLICE := (*IndexHints)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexHintUnion()) } - case 1005: + case 1071: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5286 +//line sql.y:5641 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1006: + case 1072: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5290 +//line sql.y:5645 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion()} } yyVAL.union = yyLOCAL - case 1007: + case 1073: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5294 +//line sql.y:5649 { yyLOCAL = &IndexHint{Type: IgnoreOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1008: + case 1074: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5298 +//line sql.y:5653 { yyLOCAL = &IndexHint{Type: ForceOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1009: + case 1075: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5302 +//line sql.y:5657 { yyLOCAL = &IndexHint{Type: UseVindexOp, Indexes: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 1010: + case 1076: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5306 +//line sql.y:5661 { yyLOCAL = &IndexHint{Type: IgnoreVindexOp, Indexes: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 1011: + case 1077: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5311 +//line sql.y:5666 { yyLOCAL = NoForType } yyVAL.union = yyLOCAL - case 1012: + case 1078: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5315 +//line sql.y:5670 { yyLOCAL = JoinForType } yyVAL.union = yyLOCAL - case 1013: + case 1079: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5319 +//line sql.y:5674 { yyLOCAL = OrderByForType } yyVAL.union = yyLOCAL - case 1014: + case 1080: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5323 +//line sql.y:5678 { yyLOCAL = GroupByForType } yyVAL.union = yyLOCAL - case 1015: + case 1081: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:5329 +//line sql.y:5684 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1016: + case 1082: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5333 +//line sql.y:5688 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1017: + case 1083: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5340 +//line sql.y:5695 { yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1018: + case 1084: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5344 +//line sql.y:5699 { yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1019: + case 1085: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5348 +//line sql.y:5703 { yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1020: + case 1086: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5352 +//line sql.y:5707 { yyLOCAL = &NotExpr{Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1021: + case 1087: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5356 +//line sql.y:5711 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].isExprOperatorUnion()} } yyVAL.union = yyLOCAL - case 1022: + case 1088: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5360 +//line sql.y:5715 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1023: + case 1089: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5364 +//line sql.y:5719 { yyLOCAL = &AssignmentExpr{Left: yyDollar[1].variableUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1024: + case 1090: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5368 +//line sql.y:5723 { yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1025: + case 1091: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5374 +//line sql.y:5729 { } - case 1026: + case 1092: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5377 +//line sql.y:5732 { } - case 1027: + case 1093: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5382 +//line sql.y:5737 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp} } yyVAL.union = yyLOCAL - case 1028: + case 1094: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5386 +//line sql.y:5741 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp} } yyVAL.union = yyLOCAL - case 1029: + case 1095: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5390 +//line sql.y:5745 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1030: + case 1096: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5394 +//line sql.y:5749 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: Any, Right: yyDollar[4].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1031: + case 1097: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5398 +//line sql.y:5753 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: Any, Right: yyDollar[4].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1032: + case 1098: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5402 +//line sql.y:5757 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Modifier: All, Right: yyDollar[4].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1033: + case 1099: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5406 +//line sql.y:5761 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1034: + case 1100: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5412 +//line sql.y:5767 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: InOp, Right: yyDollar[3].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1035: + case 1101: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5416 +//line sql.y:5771 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotInOp, Right: yyDollar[4].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1036: + case 1102: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5420 +//line sql.y:5775 { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: true, From: yyDollar[3].exprUnion(), To: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1037: + case 1103: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5424 +//line sql.y:5779 { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: false, From: yyDollar[4].exprUnion(), To: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1038: + case 1104: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5428 +//line sql.y:5783 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1039: + case 1105: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5432 +//line sql.y:5787 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1040: + case 1106: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5436 +//line sql.y:5791 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion(), Escape: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1041: + case 1107: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5440 +//line sql.y:5795 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion(), Escape: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1042: + case 1108: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5444 +//line sql.y:5799 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: RegexpOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1043: + case 1109: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5448 +//line sql.y:5803 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotRegexpOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1044: + case 1110: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5452 +//line sql.y:5807 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1045: + case 1111: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5458 +//line sql.y:5813 { } - case 1046: + case 1112: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5461 +//line sql.y:5816 { } - case 1047: + case 1113: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5467 +//line sql.y:5822 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1048: + case 1114: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5471 +//line sql.y:5826 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1049: + case 1115: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5475 +//line sql.y:5830 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1050: + case 1116: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5479 +//line sql.y:5834 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1051: + case 1117: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5483 +//line sql.y:5838 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1052: + case 1118: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5487 +//line sql.y:5842 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1053: + case 1119: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5491 +//line sql.y:5846 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinaryAdd, Date: yyDollar[1].exprUnion(), Unit: yyDollar[5].intervalTypeUnion(), Interval: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1054: + case 1120: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5495 +//line sql.y:5850 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinarySub, Date: yyDollar[1].exprUnion(), Unit: yyDollar[5].intervalTypeUnion(), Interval: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1055: + case 1121: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5499 +//line sql.y:5854 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1056: + case 1122: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5503 +//line sql.y:5858 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1057: + case 1123: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5507 +//line sql.y:5862 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1058: + case 1124: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5511 +//line sql.y:5866 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1059: + case 1125: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5515 +//line sql.y:5870 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1060: + case 1126: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5519 +//line sql.y:5874 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1061: + case 1127: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5523 +//line sql.y:5878 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1062: + case 1128: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5529 +//line sql.y:5884 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1063: + case 1129: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5533 +//line sql.y:5888 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1064: + case 1130: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5537 +//line sql.y:5892 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1065: + case 1131: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5541 +//line sql.y:5896 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1066: + case 1132: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5545 +//line sql.y:5900 { yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str} } yyVAL.union = yyLOCAL - case 1067: + case 1133: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5549 +//line sql.y:5904 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1068: + case 1134: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5553 +//line sql.y:5908 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1069: + case 1135: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5557 +//line sql.y:5912 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1070: + case 1136: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5561 +//line sql.y:5916 { yyLOCAL = yyDollar[2].exprUnion() // TODO: do we really want to ignore unary '+' before any kind of literals? } yyVAL.union = yyLOCAL - case 1071: + case 1137: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5565 +//line sql.y:5920 { yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1072: + case 1138: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5569 +//line sql.y:5924 { yyLOCAL = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1073: + case 1139: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5573 +//line sql.y:5928 { yyLOCAL = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1074: + case 1140: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5577 +//line sql.y:5932 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1075: + case 1141: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5581 +//line sql.y:5936 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1076: + case 1142: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5585 +//line sql.y:5940 { yyLOCAL = &ExistsExpr{Subquery: yyDollar[2].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1077: + case 1143: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5589 +//line sql.y:5944 { yyLOCAL = &MatchExpr{Columns: yyDollar[2].colNamesUnion(), Expr: yyDollar[5].exprUnion(), Option: yyDollar[6].matchExprOptionUnion()} } yyVAL.union = yyLOCAL - case 1078: + case 1144: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5593 +//line sql.y:5948 { yyLOCAL = &CastExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion(), Array: yyDollar[6].booleanUnion()} } yyVAL.union = yyLOCAL - case 1079: + case 1145: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5597 +//line sql.y:5952 { yyLOCAL = &ConvertExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1080: + case 1146: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5601 +//line sql.y:5956 { yyLOCAL = &ConvertUsingExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 1081: + case 1147: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5605 +//line sql.y:5960 { // From: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary // To convert a string expression to a binary string, these constructs are equivalent: @@ -18314,3218 +19658,3218 @@ yydefault: yyLOCAL = &ConvertExpr{Expr: yyDollar[2].exprUnion(), Type: &ConvertType{Type: yyDollar[1].str}} } yyVAL.union = yyLOCAL - case 1082: + case 1148: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5613 +//line sql.y:5968 { yyLOCAL = &Default{ColName: yyDollar[2].str} } yyVAL.union = yyLOCAL - case 1083: + case 1149: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5617 +//line sql.y:5972 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprBinaryAddLeft, Date: yyDollar[5].exprUnion(), Unit: yyDollar[3].intervalTypeUnion(), Interval: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1084: + case 1150: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5621 +//line sql.y:5976 { yyLOCAL = &IntervalFuncExpr{Expr: yyDollar[3].exprUnion(), Exprs: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1085: + case 1151: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5625 +//line sql.y:5980 { yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[1].exprUnion(), PathList: []Expr{yyDollar[3].exprUnion()}} } yyVAL.union = yyLOCAL - case 1086: + case 1152: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5629 +//line sql.y:5984 { yyLOCAL = &JSONUnquoteExpr{JSONValue: &JSONExtractExpr{JSONDoc: yyDollar[1].exprUnion(), PathList: []Expr{yyDollar[3].exprUnion()}}} } yyVAL.union = yyLOCAL - case 1087: + case 1153: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5635 +//line sql.y:5990 { yyLOCAL = yyDollar[1].colNamesUnion() } yyVAL.union = yyLOCAL - case 1088: + case 1154: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5639 +//line sql.y:5994 { yyLOCAL = yyDollar[2].colNamesUnion() } yyVAL.union = yyLOCAL - case 1089: + case 1155: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5645 +//line sql.y:6000 { yyLOCAL = []*ColName{yyDollar[1].colNameUnion()} } yyVAL.union = yyLOCAL - case 1090: + case 1156: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5649 +//line sql.y:6004 { yySLICE := (*[]*ColName)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].colNameUnion()) } - case 1091: + case 1157: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5655 +//line sql.y:6010 { yyLOCAL = BothTrimType } yyVAL.union = yyLOCAL - case 1092: + case 1158: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5659 +//line sql.y:6014 { yyLOCAL = LeadingTrimType } yyVAL.union = yyLOCAL - case 1093: + case 1159: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5663 +//line sql.y:6018 { yyLOCAL = TrailingTrimType } yyVAL.union = yyLOCAL - case 1094: + case 1160: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5669 +//line sql.y:6024 { yyLOCAL = FrameRowsType } yyVAL.union = yyLOCAL - case 1095: + case 1161: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5673 +//line sql.y:6028 { yyLOCAL = FrameRangeType } yyVAL.union = yyLOCAL - case 1096: + case 1162: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5680 +//line sql.y:6035 { yyLOCAL = CumeDistExprType } yyVAL.union = yyLOCAL - case 1097: + case 1163: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5684 +//line sql.y:6039 { yyLOCAL = DenseRankExprType } yyVAL.union = yyLOCAL - case 1098: + case 1164: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5688 +//line sql.y:6043 { yyLOCAL = PercentRankExprType } yyVAL.union = yyLOCAL - case 1099: + case 1165: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5692 +//line sql.y:6047 { yyLOCAL = RankExprType } yyVAL.union = yyLOCAL - case 1100: + case 1166: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5696 +//line sql.y:6051 { yyLOCAL = RowNumberExprType } yyVAL.union = yyLOCAL - case 1101: + case 1167: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5702 +//line sql.y:6057 { yyLOCAL = &FramePoint{Type: CurrentRowType} } yyVAL.union = yyLOCAL - case 1102: + case 1168: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5706 +//line sql.y:6061 { yyLOCAL = &FramePoint{Type: UnboundedPrecedingType} } yyVAL.union = yyLOCAL - case 1103: + case 1169: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5710 +//line sql.y:6065 { yyLOCAL = &FramePoint{Type: UnboundedFollowingType} } yyVAL.union = yyLOCAL - case 1104: + case 1170: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5714 +//line sql.y:6069 { yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1105: + case 1171: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5718 +//line sql.y:6073 { yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1106: + case 1172: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5722 +//line sql.y:6077 { yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1107: + case 1173: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5726 +//line sql.y:6081 { yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1108: + case 1174: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5731 +//line sql.y:6086 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1109: + case 1175: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5735 +//line sql.y:6090 { yyLOCAL = yyDollar[1].frameClauseUnion() } yyVAL.union = yyLOCAL - case 1110: + case 1176: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5741 +//line sql.y:6096 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[2].framePointUnion()} } yyVAL.union = yyLOCAL - case 1111: + case 1177: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5745 +//line sql.y:6100 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[3].framePointUnion(), End: yyDollar[5].framePointUnion()} } yyVAL.union = yyLOCAL - case 1112: + case 1178: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []Expr -//line sql.y:5750 +//line sql.y:6105 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1113: + case 1179: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []Expr -//line sql.y:5754 +//line sql.y:6109 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL - case 1114: + case 1180: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5759 +//line sql.y:6114 { yyVAL.identifierCI = IdentifierCI{} } - case 1115: + case 1181: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5763 +//line sql.y:6118 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1116: + case 1182: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *WindowSpecification -//line sql.y:5769 +//line sql.y:6124 { yyLOCAL = &WindowSpecification{Name: yyDollar[1].identifierCI, PartitionClause: yyDollar[2].exprsUnion(), OrderClause: yyDollar[3].orderByUnion(), FrameClause: yyDollar[4].frameClauseUnion()} } yyVAL.union = yyLOCAL - case 1117: + case 1183: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5775 +//line sql.y:6130 { yyLOCAL = &OverClause{WindowSpec: yyDollar[3].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1118: + case 1184: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5779 +//line sql.y:6134 { yyLOCAL = &OverClause{WindowName: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 1119: + case 1185: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5785 +//line sql.y:6140 { yyLOCAL = yyDollar[1].overClauseUnion() } yyVAL.union = yyLOCAL - case 1120: + case 1186: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5789 +//line sql.y:6144 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1121: + case 1187: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5794 +//line sql.y:6149 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1123: + case 1189: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5801 +//line sql.y:6156 { yyLOCAL = &NullTreatmentClause{yyDollar[1].nullTreatmentTypeUnion()} } yyVAL.union = yyLOCAL - case 1124: + case 1190: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:5807 +//line sql.y:6162 { yyLOCAL = RespectNullsType } yyVAL.union = yyLOCAL - case 1125: + case 1191: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:5811 +//line sql.y:6166 { yyLOCAL = IgnoreNullsType } yyVAL.union = yyLOCAL - case 1126: + case 1192: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:5817 +//line sql.y:6172 { yyLOCAL = FirstValueExprType } yyVAL.union = yyLOCAL - case 1127: + case 1193: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:5821 +//line sql.y:6176 { yyLOCAL = LastValueExprType } yyVAL.union = yyLOCAL - case 1128: + case 1194: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:5827 +//line sql.y:6182 { yyLOCAL = FromFirstType } yyVAL.union = yyLOCAL - case 1129: + case 1195: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:5831 +//line sql.y:6186 { yyLOCAL = FromLastType } yyVAL.union = yyLOCAL - case 1130: + case 1196: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:5836 +//line sql.y:6191 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1132: + case 1198: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:5843 +//line sql.y:6198 { yyLOCAL = &FromFirstLastClause{yyDollar[1].fromFirstLastTypeUnion()} } yyVAL.union = yyLOCAL - case 1133: + case 1199: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:5849 +//line sql.y:6204 { yyLOCAL = LagExprType } yyVAL.union = yyLOCAL - case 1134: + case 1200: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:5853 +//line sql.y:6208 { yyLOCAL = LeadExprType } yyVAL.union = yyLOCAL - case 1135: + case 1201: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *WindowDefinition -//line sql.y:5859 +//line sql.y:6214 { yyLOCAL = &WindowDefinition{Name: yyDollar[1].identifierCI, WindowSpec: yyDollar[4].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1136: + case 1202: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL WindowDefinitions -//line sql.y:5865 +//line sql.y:6220 { yyLOCAL = WindowDefinitions{yyDollar[1].windowDefinitionUnion()} } yyVAL.union = yyLOCAL - case 1137: + case 1203: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5869 +//line sql.y:6224 { yySLICE := (*WindowDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].windowDefinitionUnion()) } - case 1138: + case 1204: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5875 +//line sql.y:6230 { yyVAL.str = "" } - case 1139: + case 1205: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5879 +//line sql.y:6234 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } - case 1140: + case 1206: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:5885 +//line sql.y:6240 { yyLOCAL = BoolVal(true) } yyVAL.union = yyLOCAL - case 1141: + case 1207: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:5889 +//line sql.y:6244 { yyLOCAL = BoolVal(false) } yyVAL.union = yyLOCAL - case 1142: + case 1208: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5896 +//line sql.y:6251 { yyLOCAL = IsTrueOp } yyVAL.union = yyLOCAL - case 1143: + case 1209: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5900 +//line sql.y:6255 { yyLOCAL = IsNotTrueOp } yyVAL.union = yyLOCAL - case 1144: + case 1210: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5904 +//line sql.y:6259 { yyLOCAL = IsFalseOp } yyVAL.union = yyLOCAL - case 1145: + case 1211: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5908 +//line sql.y:6263 { yyLOCAL = IsNotFalseOp } yyVAL.union = yyLOCAL - case 1146: + case 1212: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5914 +//line sql.y:6269 { yyLOCAL = yyDollar[1].comparisonExprOperatorUnion() } yyVAL.union = yyLOCAL - case 1147: + case 1213: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5918 +//line sql.y:6273 { yyLOCAL = NullSafeEqualOp } yyVAL.union = yyLOCAL - case 1148: + case 1214: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5924 +//line sql.y:6279 { yyLOCAL = EqualOp } yyVAL.union = yyLOCAL - case 1149: + case 1215: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5928 +//line sql.y:6283 { yyLOCAL = LessThanOp } yyVAL.union = yyLOCAL - case 1150: + case 1216: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5932 +//line sql.y:6287 { yyLOCAL = GreaterThanOp } yyVAL.union = yyLOCAL - case 1151: + case 1217: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5936 +//line sql.y:6291 { yyLOCAL = LessEqualOp } yyVAL.union = yyLOCAL - case 1152: + case 1218: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5940 +//line sql.y:6295 { yyLOCAL = GreaterEqualOp } yyVAL.union = yyLOCAL - case 1153: + case 1219: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5944 +//line sql.y:6299 { yyLOCAL = NotEqualOp } yyVAL.union = yyLOCAL - case 1154: + case 1220: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:5950 +//line sql.y:6305 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1155: + case 1221: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:5954 +//line sql.y:6309 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1156: + case 1222: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:5958 +//line sql.y:6313 { yyLOCAL = ListArg(yyDollar[1].str[2:]) markBindVariable(yylex, yyDollar[1].str[2:]) } yyVAL.union = yyLOCAL - case 1157: + case 1223: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Subquery -//line sql.y:5965 +//line sql.y:6320 { yyLOCAL = &Subquery{yyDollar[1].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 1158: + case 1224: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []Expr -//line sql.y:5971 +//line sql.y:6326 { yyLOCAL = []Expr{yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1159: + case 1225: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5975 +//line sql.y:6330 { yySLICE := (*[]Expr)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].exprUnion()) } - case 1160: + case 1226: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5985 +//line sql.y:6340 { yyLOCAL = &FuncExpr{Name: yyDollar[1].identifierCI, Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1161: + case 1227: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5989 +//line sql.y:6344 { yyLOCAL = &FuncExpr{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCI, Exprs: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1162: + case 1228: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5999 +//line sql.y:6354 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("left"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1163: + case 1229: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6003 +//line sql.y:6358 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("right"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1164: + case 1230: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6007 +//line sql.y:6362 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1165: + case 1231: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6011 +//line sql.y:6366 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1166: + case 1232: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6015 +//line sql.y:6370 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1167: + case 1233: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6019 +//line sql.y:6374 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1168: + case 1234: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6023 +//line sql.y:6378 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1169: + case 1235: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6027 +//line sql.y:6382 { yyLOCAL = &CaseExpr{Expr: yyDollar[2].exprUnion(), Whens: yyDollar[3].whensUnion(), Else: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1170: + case 1236: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6031 +//line sql.y:6386 { yyLOCAL = &ValuesFuncExpr{Name: yyDollar[3].colNameUnion()} } yyVAL.union = yyLOCAL - case 1171: + case 1237: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6035 +//line sql.y:6390 { yyLOCAL = &InsertExpr{Str: yyDollar[3].exprUnion(), Pos: yyDollar[5].exprUnion(), Len: yyDollar[7].exprUnion(), NewStr: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1172: + case 1238: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6039 +//line sql.y:6394 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1173: + case 1239: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6050 +//line sql.y:6405 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")} } yyVAL.union = yyLOCAL - case 1174: + case 1240: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6054 +//line sql.y:6409 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1175: + case 1241: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6060 +//line sql.y:6415 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")} } yyVAL.union = yyLOCAL - case 1176: + case 1242: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6064 +//line sql.y:6419 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("curdate")} } yyVAL.union = yyLOCAL - case 1177: + case 1243: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6068 +//line sql.y:6423 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_time"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 1178: + case 1244: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6073 +//line sql.y:6428 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("curtime"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 1179: + case 1245: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6078 +//line sql.y:6433 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_time"), Fsp: yyDollar[2].integerUnion()} } yyVAL.union = yyLOCAL - case 1180: + case 1246: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6082 +//line sql.y:6437 { yyLOCAL = &CountStar{OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1181: + case 1247: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6086 +//line sql.y:6441 { yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1182: + case 1248: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6090 +//line sql.y:6445 { yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1183: + case 1249: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6094 +//line sql.y:6449 { yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1184: + case 1250: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6098 +//line sql.y:6453 { yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1185: + case 1251: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6102 +//line sql.y:6457 { yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1186: + case 1252: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6106 +//line sql.y:6461 { yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1187: + case 1253: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6110 +//line sql.y:6465 { yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1188: + case 1254: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6114 +//line sql.y:6469 { yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1189: + case 1255: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6118 +//line sql.y:6473 { yyLOCAL = &Std{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1190: + case 1256: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6122 +//line sql.y:6477 { yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1191: + case 1257: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6126 +//line sql.y:6481 { yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1192: + case 1258: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6130 +//line sql.y:6485 { yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1193: + case 1259: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6134 +//line sql.y:6489 { yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1194: + case 1260: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6138 +//line sql.y:6493 { yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1195: + case 1261: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6142 +//line sql.y:6497 { yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1196: + case 1262: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6146 +//line sql.y:6501 { yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()} } yyVAL.union = yyLOCAL - case 1197: + case 1263: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6150 +//line sql.y:6505 { yyLOCAL = &AnyValue{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1198: + case 1264: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6154 +//line sql.y:6509 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprTimestampadd, Date: yyDollar[7].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: yyDollar[3].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1199: + case 1265: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6158 +//line sql.y:6513 { yyLOCAL = &TimestampDiffExpr{Unit: yyDollar[3].intervalTypeUnion(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1200: + case 1266: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6162 +//line sql.y:6517 { yyLOCAL = &ExtractFuncExpr{IntervalType: yyDollar[3].intervalTypeUnion(), Expr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1201: + case 1267: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6166 +//line sql.y:6521 { yyLOCAL = &WeightStringFuncExpr{Expr: yyDollar[3].exprUnion(), As: yyDollar[4].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1202: + case 1268: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6170 +//line sql.y:6525 { yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1203: + case 1269: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6174 +//line sql.y:6529 { yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1204: + case 1270: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6178 +//line sql.y:6533 { yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1205: + case 1271: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6182 +//line sql.y:6537 { yyLOCAL = &JSONArrayAgg{Expr: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1206: + case 1272: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6186 +//line sql.y:6541 { yyLOCAL = &JSONObjectAgg{Key: yyDollar[3].exprUnion(), Value: yyDollar[5].exprUnion(), OverClause: yyDollar[7].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1207: + case 1273: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6190 +//line sql.y:6545 { yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, Type: LeadingTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1208: + case 1274: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6194 +//line sql.y:6549 { yyLOCAL = &TrimFuncExpr{TrimFuncType: RTrimType, Type: TrailingTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1209: + case 1275: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6198 +//line sql.y:6553 { yyLOCAL = &TrimFuncExpr{Type: yyDollar[3].trimTypeUnion(), TrimArg: yyDollar[4].exprUnion(), StringArg: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1210: + case 1276: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6202 +//line sql.y:6557 { yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1211: + case 1277: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6206 +//line sql.y:6561 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1212: + case 1278: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6210 +//line sql.y:6565 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 1213: + case 1279: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6214 +//line sql.y:6569 { yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1214: + case 1280: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6218 +//line sql.y:6573 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1215: + case 1281: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6222 +//line sql.y:6577 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1216: + case 1282: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6226 +//line sql.y:6581 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1217: + case 1283: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6230 +//line sql.y:6585 { yyLOCAL = &LockingFunc{Type: GetLock, Name: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1218: + case 1284: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6234 +//line sql.y:6589 { yyLOCAL = &LockingFunc{Type: IsFreeLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1219: + case 1285: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6238 +//line sql.y:6593 { yyLOCAL = &LockingFunc{Type: IsUsedLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1220: + case 1286: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6242 +//line sql.y:6597 { yyLOCAL = &LockingFunc{Type: ReleaseAllLocks} } yyVAL.union = yyLOCAL - case 1221: + case 1287: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6246 +//line sql.y:6601 { yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1222: + case 1288: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6250 +//line sql.y:6605 { yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1223: + case 1289: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6254 +//line sql.y:6609 { yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1224: + case 1290: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6258 +//line sql.y:6613 { yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1225: + case 1291: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6262 +//line sql.y:6617 { yyLOCAL = &GeomFormatExpr{FormatType: BinaryFormat, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1226: + case 1292: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6266 +//line sql.y:6621 { yyLOCAL = &GeomFormatExpr{FormatType: BinaryFormat, Geom: yyDollar[3].exprUnion(), AxisOrderOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1227: + case 1293: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6270 +//line sql.y:6625 { yyLOCAL = &GeomFormatExpr{FormatType: TextFormat, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1228: + case 1294: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6274 +//line sql.y:6629 { yyLOCAL = &GeomFormatExpr{FormatType: TextFormat, Geom: yyDollar[3].exprUnion(), AxisOrderOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1229: + case 1295: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6278 +//line sql.y:6633 { yyLOCAL = &GeomPropertyFuncExpr{Property: IsEmpty, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1230: + case 1296: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6282 +//line sql.y:6637 { yyLOCAL = &GeomPropertyFuncExpr{Property: IsSimple, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1231: + case 1297: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6286 +//line sql.y:6641 { yyLOCAL = &GeomPropertyFuncExpr{Property: Dimension, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1232: + case 1298: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6290 +//line sql.y:6645 { yyLOCAL = &GeomPropertyFuncExpr{Property: Envelope, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1233: + case 1299: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6294 +//line sql.y:6649 { yyLOCAL = &GeomPropertyFuncExpr{Property: GeometryType, Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1234: + case 1300: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6298 +//line sql.y:6653 { yyLOCAL = &PointPropertyFuncExpr{Property: Latitude, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1235: + case 1301: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6302 +//line sql.y:6657 { yyLOCAL = &PointPropertyFuncExpr{Property: Latitude, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1236: + case 1302: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6306 +//line sql.y:6661 { yyLOCAL = &PointPropertyFuncExpr{Property: Longitude, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1237: + case 1303: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6310 +//line sql.y:6665 { yyLOCAL = &PointPropertyFuncExpr{Property: Longitude, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1238: + case 1304: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6314 +//line sql.y:6669 { yyLOCAL = &LinestrPropertyFuncExpr{Property: EndPoint, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1239: + case 1305: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6318 +//line sql.y:6673 { yyLOCAL = &LinestrPropertyFuncExpr{Property: IsClosed, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1240: + case 1306: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6322 +//line sql.y:6677 { yyLOCAL = &LinestrPropertyFuncExpr{Property: Length, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1241: + case 1307: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6326 +//line sql.y:6681 { yyLOCAL = &LinestrPropertyFuncExpr{Property: Length, Linestring: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1242: + case 1308: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6330 +//line sql.y:6685 { yyLOCAL = &LinestrPropertyFuncExpr{Property: NumPoints, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1243: + case 1309: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6334 +//line sql.y:6689 { yyLOCAL = &LinestrPropertyFuncExpr{Property: PointN, Linestring: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1244: + case 1310: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6338 +//line sql.y:6693 { yyLOCAL = &LinestrPropertyFuncExpr{Property: StartPoint, Linestring: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1245: + case 1311: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6342 +//line sql.y:6697 { yyLOCAL = &PointPropertyFuncExpr{Property: XCordinate, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1246: + case 1312: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6346 +//line sql.y:6701 { yyLOCAL = &PointPropertyFuncExpr{Property: XCordinate, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1247: + case 1313: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6350 +//line sql.y:6705 { yyLOCAL = &PointPropertyFuncExpr{Property: YCordinate, Point: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1248: + case 1314: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6354 +//line sql.y:6709 { yyLOCAL = &PointPropertyFuncExpr{Property: YCordinate, Point: yyDollar[3].exprUnion(), ValueToSet: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1249: + case 1315: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6358 +//line sql.y:6713 { yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1250: + case 1316: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6362 +//line sql.y:6717 { yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1251: + case 1317: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6366 +//line sql.y:6721 { yyLOCAL = &GeomFromTextExpr{Type: GeometryFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1252: + case 1318: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6370 +//line sql.y:6725 { yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1253: + case 1319: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6374 +//line sql.y:6729 { yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1254: + case 1320: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6378 +//line sql.y:6733 { yyLOCAL = &GeomFromTextExpr{Type: GeometryCollectionFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1255: + case 1321: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6382 +//line sql.y:6737 { yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1256: + case 1322: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6386 +//line sql.y:6741 { yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1257: + case 1323: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6390 +//line sql.y:6745 { yyLOCAL = &GeomFromTextExpr{Type: LineStringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1258: + case 1324: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6394 +//line sql.y:6749 { yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1259: + case 1325: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6398 +//line sql.y:6753 { yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1260: + case 1326: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6402 +//line sql.y:6757 { yyLOCAL = &GeomFromTextExpr{Type: MultiLinestringFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1261: + case 1327: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6406 +//line sql.y:6761 { yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1262: + case 1328: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6410 +//line sql.y:6765 { yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1263: + case 1329: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6414 +//line sql.y:6769 { yyLOCAL = &GeomFromTextExpr{Type: MultiPointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1264: + case 1330: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6418 +//line sql.y:6773 { yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1265: + case 1331: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6422 +//line sql.y:6777 { yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1266: + case 1332: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6426 +//line sql.y:6781 { yyLOCAL = &GeomFromTextExpr{Type: MultiPolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1267: + case 1333: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6430 +//line sql.y:6785 { yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1268: + case 1334: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6434 +//line sql.y:6789 { yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1269: + case 1335: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6438 +//line sql.y:6793 { yyLOCAL = &GeomFromTextExpr{Type: PointFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1270: + case 1336: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6442 +//line sql.y:6797 { yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1271: + case 1337: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6446 +//line sql.y:6801 { yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1272: + case 1338: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6450 +//line sql.y:6805 { yyLOCAL = &GeomFromTextExpr{Type: PolygonFromText, WktText: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1273: + case 1339: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6454 +//line sql.y:6809 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1274: + case 1340: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6458 +//line sql.y:6813 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1275: + case 1341: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6462 +//line sql.y:6817 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1276: + case 1342: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6466 +//line sql.y:6821 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1277: + case 1343: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6470 +//line sql.y:6825 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1278: + case 1344: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6474 +//line sql.y:6829 { yyLOCAL = &GeomFromWKBExpr{Type: GeometryCollectionFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1279: + case 1345: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6478 +//line sql.y:6833 { yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1280: + case 1346: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6482 +//line sql.y:6837 { yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1281: + case 1347: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6486 +//line sql.y:6841 { yyLOCAL = &GeomFromWKBExpr{Type: LineStringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1282: + case 1348: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6490 +//line sql.y:6845 { yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1283: + case 1349: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6494 +//line sql.y:6849 { yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1284: + case 1350: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6498 +//line sql.y:6853 { yyLOCAL = &GeomFromWKBExpr{Type: MultiLinestringFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1285: + case 1351: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6502 +//line sql.y:6857 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1286: + case 1352: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6506 +//line sql.y:6861 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1287: + case 1353: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6510 +//line sql.y:6865 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1288: + case 1354: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6514 +//line sql.y:6869 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1289: + case 1355: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6518 +//line sql.y:6873 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1290: + case 1356: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6522 +//line sql.y:6877 { yyLOCAL = &GeomFromWKBExpr{Type: MultiPolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1291: + case 1357: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6526 +//line sql.y:6881 { yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1292: + case 1358: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6530 +//line sql.y:6885 { yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1293: + case 1359: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6534 +//line sql.y:6889 { yyLOCAL = &GeomFromWKBExpr{Type: PointFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1294: + case 1360: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6538 +//line sql.y:6893 { yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1295: + case 1361: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6542 +//line sql.y:6897 { yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1296: + case 1362: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6546 +//line sql.y:6901 { yyLOCAL = &GeomFromWKBExpr{Type: PolygonFromWKB, WkbBlob: yyDollar[3].exprUnion(), Srid: yyDollar[5].exprUnion(), AxisOrderOpt: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1297: + case 1363: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6550 +//line sql.y:6905 { yyLOCAL = &PolygonPropertyFuncExpr{Property: Area, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1298: + case 1364: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6554 +//line sql.y:6909 { yyLOCAL = &PolygonPropertyFuncExpr{Property: Centroid, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1299: + case 1365: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6558 +//line sql.y:6913 { yyLOCAL = &PolygonPropertyFuncExpr{Property: ExteriorRing, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1300: + case 1366: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6562 +//line sql.y:6917 { yyLOCAL = &PolygonPropertyFuncExpr{Property: InteriorRingN, Polygon: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1301: + case 1367: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6566 +//line sql.y:6921 { yyLOCAL = &PolygonPropertyFuncExpr{Property: NumInteriorRings, Polygon: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1302: + case 1368: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6570 +//line sql.y:6925 { yyLOCAL = &GeomCollPropertyFuncExpr{Property: GeometryN, GeomColl: yyDollar[3].exprUnion(), PropertyDefArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1303: + case 1369: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6574 +//line sql.y:6929 { yyLOCAL = &GeomCollPropertyFuncExpr{Property: NumGeometries, GeomColl: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1304: + case 1370: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6578 +//line sql.y:6933 { yyLOCAL = &GeoHashFromLatLongExpr{Longitude: yyDollar[3].exprUnion(), Latitude: yyDollar[5].exprUnion(), MaxLength: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1305: + case 1371: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6582 +//line sql.y:6937 { yyLOCAL = &GeoHashFromPointExpr{Point: yyDollar[3].exprUnion(), MaxLength: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1306: + case 1372: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6586 +//line sql.y:6941 { yyLOCAL = &GeomFromGeoHashExpr{GeomType: LatitudeFromHash, GeoHash: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1307: + case 1373: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6590 +//line sql.y:6945 { yyLOCAL = &GeomFromGeoHashExpr{GeomType: LongitudeFromHash, GeoHash: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1308: + case 1374: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6594 +//line sql.y:6949 { yyLOCAL = &GeomFromGeoHashExpr{GeomType: PointFromHash, GeoHash: yyDollar[3].exprUnion(), SridOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1309: + case 1375: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6598 +//line sql.y:6953 { yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1310: + case 1376: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6602 +//line sql.y:6957 { yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion(), HigherDimHandlerOpt: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1311: + case 1377: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6606 +//line sql.y:6961 { yyLOCAL = &GeomFromGeoJSONExpr{GeoJSON: yyDollar[3].exprUnion(), HigherDimHandlerOpt: yyDollar[5].exprUnion(), Srid: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1312: + case 1378: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6610 +//line sql.y:6965 { yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1313: + case 1379: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6614 +//line sql.y:6969 { yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion(), MaxDecimalDigits: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1314: + case 1380: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6618 +//line sql.y:6973 { yyLOCAL = &GeoJSONFromGeomExpr{Geom: yyDollar[3].exprUnion(), MaxDecimalDigits: yyDollar[5].exprUnion(), Bitmask: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1315: + case 1381: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6622 +//line sql.y:6977 { yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1316: + case 1382: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6626 +//line sql.y:6981 { yyLOCAL = &JSONQuoteExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1317: + case 1383: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6630 +//line sql.y:6985 { yyLOCAL = &JSONContainsExpr{Target: yyDollar[3].exprUnion(), Candidate: yyDollar[5].exprsUnion()[0], PathList: yyDollar[5].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1318: + case 1384: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6634 +//line sql.y:6989 { yyLOCAL = &JSONContainsPathExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), PathList: yyDollar[7].exprsUnion()} } yyVAL.union = yyLOCAL - case 1319: + case 1385: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6638 +//line sql.y:6993 { yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1320: + case 1386: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6642 +//line sql.y:6997 { yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1321: + case 1387: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6646 +//line sql.y:7001 { yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1322: + case 1388: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6650 +//line sql.y:7005 { yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1323: + case 1389: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6654 +//line sql.y:7009 { yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1324: + case 1390: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6658 +//line sql.y:7013 { yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1325: + case 1391: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6662 +//line sql.y:7017 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1326: + case 1392: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6666 +//line sql.y:7021 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1327: + case 1393: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6670 +//line sql.y:7025 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1328: + case 1394: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6674 +//line sql.y:7029 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1329: + case 1395: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6678 +//line sql.y:7033 { yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1330: + case 1396: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6682 +//line sql.y:7037 { yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1331: + case 1397: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6686 +//line sql.y:7041 { yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1332: + case 1398: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6690 +//line sql.y:7045 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1333: + case 1399: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6694 +//line sql.y:7049 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1334: + case 1400: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6698 +//line sql.y:7053 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1335: + case 1401: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6702 +//line sql.y:7057 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1336: + case 1402: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6706 +//line sql.y:7061 { yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1337: + case 1403: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6710 +//line sql.y:7065 { yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1338: + case 1404: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6714 +//line sql.y:7069 { yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1339: + case 1405: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6718 +//line sql.y:7073 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1340: + case 1406: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6722 +//line sql.y:7077 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1341: + case 1407: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6726 +//line sql.y:7081 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1342: + case 1408: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6730 +//line sql.y:7085 { yyLOCAL = &JSONRemoveExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1343: + case 1409: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6734 +//line sql.y:7089 { yyLOCAL = &JSONUnquoteExpr{JSONValue: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1344: + case 1410: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6738 +//line sql.y:7093 { yyLOCAL = &MultiPolygonExpr{PolygonParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1345: + case 1411: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6742 +//line sql.y:7097 { yyLOCAL = &MultiPointExpr{PointParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1346: + case 1412: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6746 +//line sql.y:7101 { yyLOCAL = &MultiLinestringExpr{LinestringParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1347: + case 1413: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6750 +//line sql.y:7105 { yyLOCAL = &PolygonExpr{LinestringParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1348: + case 1414: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6754 +//line sql.y:7109 { yyLOCAL = &LineStringExpr{PointParams: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1349: + case 1415: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6758 +//line sql.y:7113 { yyLOCAL = &PointExpr{XCordinate: yyDollar[3].exprUnion(), YCordinate: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1350: + case 1416: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6762 +//line sql.y:7117 { yyLOCAL = &ArgumentLessWindowExpr{Type: yyDollar[1].argumentLessWindowExprTypeUnion(), OverClause: yyDollar[4].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1351: + case 1417: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6766 +//line sql.y:7121 { yyLOCAL = &FirstOrLastValueExpr{Type: yyDollar[1].firstOrLastValueExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1352: + case 1418: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6770 +//line sql.y:7125 { yyLOCAL = &NtileExpr{N: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1353: + case 1419: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6774 +//line sql.y:7129 { yyLOCAL = &NTHValueExpr{Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), FromFirstLastClause: yyDollar[7].fromFirstLastClauseUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1354: + case 1420: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6778 +//line sql.y:7133 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1355: + case 1421: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6782 +//line sql.y:7137 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), Default: yyDollar[6].exprUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1356: + case 1422: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6786 +//line sql.y:7141 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprAdddate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1357: + case 1423: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6790 +//line sql.y:7145 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprAdddate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: IntervalNone} } yyVAL.union = yyLOCAL - case 1358: + case 1424: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6794 +//line sql.y:7149 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprDateAdd, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1359: + case 1425: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6798 +//line sql.y:7153 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprDateSub, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1360: + case 1426: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6802 +//line sql.y:7157 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprSubdate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[6].exprUnion(), Unit: yyDollar[7].intervalTypeUnion()} } yyVAL.union = yyLOCAL - case 1361: + case 1427: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6806 +//line sql.y:7161 { yyLOCAL = &IntervalDateExpr{Syntax: IntervalDateExprSubdate, Date: yyDollar[3].exprUnion(), Interval: yyDollar[5].exprUnion(), Unit: IntervalNone} } yyVAL.union = yyLOCAL - case 1366: + case 1432: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6816 +//line sql.y:7171 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1367: + case 1433: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6820 +//line sql.y:7175 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1368: + case 1434: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6824 +//line sql.y:7179 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1369: + case 1435: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6828 +//line sql.y:7183 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1370: + case 1436: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6833 +//line sql.y:7188 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1371: + case 1437: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6837 +//line sql.y:7192 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1372: + case 1438: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6843 +//line sql.y:7198 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1373: + case 1439: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6847 +//line sql.y:7202 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1374: + case 1440: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6851 +//line sql.y:7206 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1375: + case 1441: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6855 +//line sql.y:7210 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1376: + case 1442: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6859 +//line sql.y:7214 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1377: + case 1443: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6864 +//line sql.y:7219 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1378: + case 1444: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6868 +//line sql.y:7223 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), MatchType: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1379: + case 1445: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6872 +//line sql.y:7227 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1380: + case 1446: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6876 +//line sql.y:7231 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1381: + case 1447: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6880 +//line sql.y:7235 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1382: + case 1448: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6884 +//line sql.y:7239 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1383: + case 1449: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6889 +//line sql.y:7244 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1384: + case 1450: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6893 +//line sql.y:7248 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1385: + case 1451: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6897 +//line sql.y:7252 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1386: + case 1452: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6901 +//line sql.y:7256 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), MatchType: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1387: + case 1453: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6908 +//line sql.y:7263 { yyLOCAL = &ExtractValueExpr{Fragment: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1388: + case 1454: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6912 +//line sql.y:7267 { yyLOCAL = &UpdateXMLExpr{Target: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion(), NewXML: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1389: + case 1455: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6918 +//line sql.y:7273 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatBytesType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1390: + case 1456: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6922 +//line sql.y:7277 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatPicoTimeType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1391: + case 1457: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6926 +//line sql.y:7281 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsCurrentThreadIDType} } yyVAL.union = yyLOCAL - case 1392: + case 1458: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6930 +//line sql.y:7285 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsThreadIDType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1393: + case 1459: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6936 +//line sql.y:7291 { yyLOCAL = >IDFuncExpr{Type: GTIDSubsetType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1394: + case 1460: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6940 +//line sql.y:7295 { yyLOCAL = >IDFuncExpr{Type: GTIDSubtractType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1395: + case 1461: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6944 +//line sql.y:7299 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1396: + case 1462: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6948 +//line sql.y:7303 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1397: + case 1463: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6952 +//line sql.y:7307 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1398: + case 1464: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6956 +//line sql.y:7311 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1399: + case 1465: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6960 +//line sql.y:7315 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion(), Channel: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1400: + case 1466: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6965 +//line sql.y:7320 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1401: + case 1467: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6969 +//line sql.y:7324 { yyLOCAL = yyDollar[2].convertTypeUnion() } yyVAL.union = yyLOCAL - case 1402: + case 1468: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6975 +//line sql.y:7330 { yyLOCAL = IntervalDayHour } yyVAL.union = yyLOCAL - case 1403: + case 1469: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6979 +//line sql.y:7334 { yyLOCAL = IntervalDayMicrosecond } yyVAL.union = yyLOCAL - case 1404: + case 1470: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6983 +//line sql.y:7338 { yyLOCAL = IntervalDayMinute } yyVAL.union = yyLOCAL - case 1405: + case 1471: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6987 +//line sql.y:7342 { yyLOCAL = IntervalDaySecond } yyVAL.union = yyLOCAL - case 1406: + case 1472: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6991 +//line sql.y:7346 { yyLOCAL = IntervalHourMicrosecond } yyVAL.union = yyLOCAL - case 1407: + case 1473: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6995 +//line sql.y:7350 { yyLOCAL = IntervalHourMinute } yyVAL.union = yyLOCAL - case 1408: + case 1474: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:6999 +//line sql.y:7354 { yyLOCAL = IntervalHourSecond } yyVAL.union = yyLOCAL - case 1409: + case 1475: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7003 +//line sql.y:7358 { yyLOCAL = IntervalMinuteMicrosecond } yyVAL.union = yyLOCAL - case 1410: + case 1476: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7007 +//line sql.y:7362 { yyLOCAL = IntervalMinuteSecond } yyVAL.union = yyLOCAL - case 1411: + case 1477: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7011 +//line sql.y:7366 { yyLOCAL = IntervalSecondMicrosecond } yyVAL.union = yyLOCAL - case 1412: + case 1478: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7015 +//line sql.y:7370 { yyLOCAL = IntervalYearMonth } yyVAL.union = yyLOCAL - case 1413: + case 1479: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7019 +//line sql.y:7374 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1414: + case 1480: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7023 +//line sql.y:7378 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1415: + case 1481: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7027 +//line sql.y:7382 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1416: + case 1482: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7031 +//line sql.y:7386 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1417: + case 1483: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7035 +//line sql.y:7390 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1418: + case 1484: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7039 +//line sql.y:7394 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1419: + case 1485: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7043 +//line sql.y:7398 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1420: + case 1486: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7047 +//line sql.y:7402 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1421: + case 1487: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7051 +//line sql.y:7406 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1422: + case 1488: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7057 +//line sql.y:7412 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1423: + case 1489: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7061 +//line sql.y:7416 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1424: + case 1490: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7065 +//line sql.y:7420 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1425: + case 1491: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7069 +//line sql.y:7424 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1426: + case 1492: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7073 +//line sql.y:7428 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1427: + case 1493: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7077 +//line sql.y:7432 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1428: + case 1494: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7081 +//line sql.y:7436 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1429: + case 1495: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7085 +//line sql.y:7440 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1430: + case 1496: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7089 +//line sql.y:7444 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1431: + case 1497: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7093 +//line sql.y:7448 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1432: + case 1498: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7097 +//line sql.y:7452 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1433: + case 1499: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7101 +//line sql.y:7456 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1434: + case 1500: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7105 +//line sql.y:7460 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1435: + case 1501: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7109 +//line sql.y:7464 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1436: + case 1502: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7113 +//line sql.y:7468 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1437: + case 1503: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7117 +//line sql.y:7472 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1438: + case 1504: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7121 +//line sql.y:7476 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1439: + case 1505: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalType -//line sql.y:7125 +//line sql.y:7480 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1442: + case 1508: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:7135 +//line sql.y:7490 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 1443: + case 1509: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:7139 +//line sql.y:7494 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 1444: + case 1510: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:7143 +//line sql.y:7498 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 1445: + case 1511: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7153 +//line sql.y:7508 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("if"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1446: + case 1512: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7157 +//line sql.y:7512 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("database"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1447: + case 1513: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7161 +//line sql.y:7516 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("schema"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1448: + case 1514: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7165 +//line sql.y:7520 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("mod"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1449: + case 1515: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:7169 +//line sql.y:7524 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("replace"), Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1450: + case 1516: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7175 +//line sql.y:7530 { yyLOCAL = NoOption } yyVAL.union = yyLOCAL - case 1451: + case 1517: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7179 +//line sql.y:7534 { yyLOCAL = BooleanModeOpt } yyVAL.union = yyLOCAL - case 1452: + case 1518: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7183 +//line sql.y:7538 { yyLOCAL = NaturalLanguageModeOpt } yyVAL.union = yyLOCAL - case 1453: + case 1519: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7187 +//line sql.y:7542 { yyLOCAL = NaturalLanguageModeWithQueryExpansionOpt } yyVAL.union = yyLOCAL - case 1454: + case 1520: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:7191 +//line sql.y:7546 { yyLOCAL = QueryExpansionOpt } yyVAL.union = yyLOCAL - case 1455: + case 1521: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7197 +//line sql.y:7552 { yyVAL.str = string(yyDollar[1].identifierCI.String()) } - case 1456: + case 1522: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7201 +//line sql.y:7556 { yyVAL.str = string(yyDollar[1].str) } - case 1457: + case 1523: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7205 +//line sql.y:7560 { yyVAL.str = string(yyDollar[1].str) } - case 1458: + case 1524: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7211 +//line sql.y:7566 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1459: + case 1525: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7215 +//line sql.y:7570 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: ptr.Of(convertStringToInt(yyDollar[4].str))} } yyVAL.union = yyLOCAL - case 1460: + case 1526: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7219 +//line sql.y:7574 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: ptr.Of(convertStringToInt(yyDollar[4].str))} } yyVAL.union = yyLOCAL - case 1461: + case 1527: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7225 +//line sql.y:7580 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1462: + case 1528: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7229 +//line sql.y:7584 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion(), Charset: yyDollar[3].columnCharset} } yyVAL.union = yyLOCAL - case 1463: + case 1529: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7233 +//line sql.y:7588 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1464: + case 1530: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7237 +//line sql.y:7592 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1465: + case 1531: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7241 +//line sql.y:7596 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} yyLOCAL.Length = yyDollar[2].LengthScaleOption.Length yyLOCAL.Scale = yyDollar[2].LengthScaleOption.Scale } yyVAL.union = yyLOCAL - case 1466: + case 1532: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7247 +//line sql.y:7602 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1467: + case 1533: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7251 +//line sql.y:7606 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1468: + case 1534: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7255 +//line sql.y:7610 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1469: + case 1535: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7259 +//line sql.y:7614 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1470: + case 1536: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7263 +//line sql.y:7618 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1471: + case 1537: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7267 +//line sql.y:7622 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1472: + case 1538: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7271 +//line sql.y:7626 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1473: + case 1539: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7275 +//line sql.y:7630 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].intPtrUnion()} } yyVAL.union = yyLOCAL - case 1474: + case 1540: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7279 +//line sql.y:7634 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1475: + case 1541: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:7283 +//line sql.y:7638 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1476: + case 1542: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7289 +//line sql.y:7644 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1477: + case 1543: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:7293 +//line sql.y:7648 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1478: + case 1544: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7298 +//line sql.y:7653 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1479: + case 1545: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7302 +//line sql.y:7657 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1480: + case 1546: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7307 +//line sql.y:7662 { yyVAL.str = string("") } - case 1481: + case 1547: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7311 +//line sql.y:7666 { yyVAL.str = encodeSQLString(yyDollar[2].str) } - case 1482: + case 1548: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*When -//line sql.y:7317 +//line sql.y:7672 { yyLOCAL = []*When{yyDollar[1].whenUnion()} } yyVAL.union = yyLOCAL - case 1483: + case 1549: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7321 +//line sql.y:7676 { yySLICE := (*[]*When)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].whenUnion()) } - case 1484: + case 1550: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *When -//line sql.y:7327 +//line sql.y:7682 { yyLOCAL = &When{Cond: yyDollar[2].exprUnion(), Val: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1485: + case 1551: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7332 +//line sql.y:7687 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1486: + case 1552: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7336 +//line sql.y:7691 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1487: + case 1553: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:7342 +//line sql.y:7697 { yyLOCAL = &ColName{Name: yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1488: + case 1554: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:7346 +//line sql.y:7701 { yyLOCAL = &ColName{Name: NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 1489: + case 1555: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColName -//line sql.y:7350 +//line sql.y:7705 { yyLOCAL = &ColName{Qualifier: TableName{Name: yyDollar[1].identifierCS}, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1490: + case 1556: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColName -//line sql.y:7354 +//line sql.y:7709 { yyLOCAL = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}, Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 1491: + case 1557: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7360 +//line sql.y:7715 { yyLOCAL = yyDollar[1].colNameUnion() } yyVAL.union = yyLOCAL - case 1492: + case 1558: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7364 +//line sql.y:7719 { yyLOCAL = &Offset{V: convertStringToInt(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1493: + case 1559: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7370 +//line sql.y:7725 { // TODO(sougou): Deprecate this construct. if yyDollar[1].identifierCI.Lowered() != "value" { @@ -21535,442 +22879,513 @@ yydefault: yyLOCAL = NewIntLiteral("1") } yyVAL.union = yyLOCAL - case 1494: + case 1560: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7379 +//line sql.y:7734 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1495: + case 1561: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7383 +//line sql.y:7738 { yyLOCAL = parseBindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1496: + case 1562: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *GroupBy -//line sql.y:7388 +//line sql.y:7743 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1497: + case 1563: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *GroupBy -//line sql.y:7392 +//line sql.y:7747 { yyLOCAL = &GroupBy{Exprs: yyDollar[3].exprsUnion(), WithRollup: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 1498: + case 1564: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7397 +//line sql.y:7752 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1499: + case 1565: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:7401 +//line sql.y:7756 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1500: + case 1566: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7407 +//line sql.y:7762 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1501: + case 1567: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7411 +//line sql.y:7766 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1502: + case 1568: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *NamedWindow -//line sql.y:7417 +//line sql.y:7772 { yyLOCAL = &NamedWindow{yyDollar[2].windowDefinitionsUnion()} } yyVAL.union = yyLOCAL - case 1503: + case 1569: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7423 +//line sql.y:7778 { yyLOCAL = NamedWindows{yyDollar[1].namedWindowUnion()} } yyVAL.union = yyLOCAL - case 1504: + case 1570: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7427 +//line sql.y:7782 { yySLICE := (*NamedWindows)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].namedWindowUnion()) } - case 1505: + case 1571: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7432 +//line sql.y:7787 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1506: + case 1572: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7436 +//line sql.y:7791 { yyLOCAL = yyDollar[1].namedWindowsUnion() } yyVAL.union = yyLOCAL - case 1507: + case 1573: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7441 +//line sql.y:7796 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1508: + case 1574: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7445 +//line sql.y:7800 { yyLOCAL = yyDollar[1].orderByUnion() } yyVAL.union = yyLOCAL - case 1509: + case 1575: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7451 +//line sql.y:7806 { yyLOCAL = yyDollar[3].orderByUnion() } yyVAL.union = yyLOCAL - case 1510: + case 1576: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7457 +//line sql.y:7812 { yyLOCAL = OrderBy{yyDollar[1].orderUnion()} } yyVAL.union = yyLOCAL - case 1511: + case 1577: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7461 +//line sql.y:7816 { yySLICE := (*OrderBy)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].orderUnion()) } - case 1512: + case 1578: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Order -//line sql.y:7467 +//line sql.y:7822 { yyLOCAL = &Order{Expr: yyDollar[1].exprUnion(), Direction: yyDollar[2].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 1513: + case 1579: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7472 +//line sql.y:7827 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1514: + case 1580: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7476 +//line sql.y:7831 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1515: + case 1581: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7480 +//line sql.y:7835 { yyLOCAL = DescOrder } yyVAL.union = yyLOCAL - case 1516: + case 1582: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Limit -//line sql.y:7485 +//line sql.y:7840 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1517: + case 1583: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Limit -//line sql.y:7489 +//line sql.y:7844 { yyLOCAL = yyDollar[1].limitUnion() } yyVAL.union = yyLOCAL - case 1518: + case 1584: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Limit -//line sql.y:7495 +//line sql.y:7850 { yyLOCAL = &Limit{Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1519: + case 1585: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7499 +//line sql.y:7854 { yyLOCAL = &Limit{Offset: yyDollar[2].exprUnion(), Rowcount: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1520: + case 1586: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7503 +//line sql.y:7858 { yyLOCAL = &Limit{Offset: yyDollar[4].exprUnion(), Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1521: + case 1587: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7508 +//line sql.y:7863 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1522: + case 1588: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7512 +//line sql.y:7867 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1523: + case 1589: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7516 +//line sql.y:7871 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1524: + case 1590: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7520 +//line sql.y:7875 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1525: + case 1591: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7524 +//line sql.y:7879 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1526: + case 1592: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7531 +//line sql.y:7886 { yyLOCAL = &LockOption{Type: DefaultType} } yyVAL.union = yyLOCAL - case 1527: + case 1593: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7535 +//line sql.y:7890 { yyLOCAL = &LockOption{Type: NoneType} } yyVAL.union = yyLOCAL - case 1528: + case 1594: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7539 +//line sql.y:7894 { yyLOCAL = &LockOption{Type: SharedType} } yyVAL.union = yyLOCAL - case 1529: + case 1595: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7543 +//line sql.y:7898 { yyLOCAL = &LockOption{Type: ExclusiveType} } yyVAL.union = yyLOCAL - case 1530: + case 1596: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7549 +//line sql.y:7904 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1531: + case 1597: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7553 +//line sql.y:7908 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1532: + case 1598: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7557 +//line sql.y:7912 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1533: + case 1599: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7561 +//line sql.y:7916 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1534: + case 1600: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7566 +//line sql.y:7921 { yyVAL.str = "" } - case 1535: + case 1602: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7570 +//line sql.y:7928 { yyVAL.str = string(yyDollar[3].str) } - case 1536: + case 1603: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7574 +//line sql.y:7932 { yyVAL.str = string(yyDollar[3].str) } - case 1537: + case 1604: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7578 +//line sql.y:7936 { yyVAL.str = string(yyDollar[3].str) } - case 1538: + case 1605: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7583 +//line sql.y:7941 { yyVAL.str = "" } - case 1539: + case 1606: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7587 +//line sql.y:7945 { yyVAL.str = yyDollar[3].str } - case 1540: + case 1607: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7593 +//line sql.y:7951 { yyVAL.str = string(yyDollar[1].str) } - case 1541: + case 1608: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7597 +//line sql.y:7955 { yyVAL.str = string(yyDollar[1].str) } - case 1542: + case 1609: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7602 +//line sql.y:7960 { yyVAL.str = "" } - case 1543: + case 1610: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7606 +//line sql.y:7964 { yyVAL.str = yyDollar[2].str } - case 1544: + case 1611: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7611 +//line sql.y:7969 { yyVAL.str = "cascaded" } - case 1545: + case 1612: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7615 +//line sql.y:7973 { yyVAL.str = string(yyDollar[1].str) } - case 1546: + case 1613: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7619 +//line sql.y:7977 { yyVAL.str = string(yyDollar[1].str) } - case 1547: + case 1614: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL []*ProcParameter +//line sql.y:7982 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 1615: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []*ProcParameter +//line sql.y:7986 + { + yyLOCAL = yyDollar[1].procParamsUnion() + } + yyVAL.union = yyLOCAL + case 1616: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []*ProcParameter +//line sql.y:7992 + { + yyLOCAL = []*ProcParameter{yyDollar[1].procParamUnion()} + } + yyVAL.union = yyLOCAL + case 1617: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7996 + { + yySLICE := (*[]*ProcParameter)(yyIaddr(yyVAL.union)) + *yySLICE = append(*yySLICE, yyDollar[3].procParamUnion()) + } + case 1618: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL *ProcParameter +//line sql.y:8002 + { + yyLOCAL = &ProcParameter{Mode: yyDollar[1].procParamModeUnion(), Name: yyDollar[2].identifierCI, Type: yyDollar[3].columnType} + } + yyVAL.union = yyLOCAL + case 1619: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL ProcParameterMode +//line sql.y:8007 + { + yyLOCAL = InMode + } + yyVAL.union = yyLOCAL + case 1620: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL ProcParameterMode +//line sql.y:8011 + { + yyLOCAL = InMode + } + yyVAL.union = yyLOCAL + case 1621: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL ProcParameterMode +//line sql.y:8015 + { + yyLOCAL = InoutMode + } + yyVAL.union = yyLOCAL + case 1622: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL ProcParameterMode +//line sql.y:8019 + { + yyLOCAL = OutMode + } + yyVAL.union = yyLOCAL + case 1623: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Definer -//line sql.y:7624 +//line sql.y:8024 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1548: + case 1625: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7628 +//line sql.y:8031 { yyLOCAL = yyDollar[3].definerUnion() } yyVAL.union = yyLOCAL - case 1549: + case 1626: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Definer -//line sql.y:7634 +//line sql.y:8037 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1550: + case 1627: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7640 +//line sql.y:8043 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1551: + case 1628: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Definer -//line sql.y:7646 +//line sql.y:8049 { yyLOCAL = &Definer{ Name: yyDollar[1].str, @@ -21978,464 +23393,503 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1552: + case 1629: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7655 +//line sql.y:8058 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 1553: + case 1630: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7659 +//line sql.y:8062 { yyVAL.str = formatIdentifier(yyDollar[1].str) } - case 1554: + case 1631: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7664 +//line sql.y:8067 { yyVAL.str = "" } - case 1555: + case 1632: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7668 +//line sql.y:8071 { yyVAL.str = formatAddress(yyDollar[1].str) } - case 1556: + case 1633: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Lock -//line sql.y:7674 +//line sql.y:8077 { yyLOCAL = ForUpdateLock } yyVAL.union = yyLOCAL - case 1557: + case 1634: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Lock -//line sql.y:7678 +//line sql.y:8081 { yyLOCAL = ForUpdateLockNoWait } yyVAL.union = yyLOCAL - case 1558: + case 1635: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:7682 +//line sql.y:8085 { yyLOCAL = ForUpdateLockSkipLocked } yyVAL.union = yyLOCAL - case 1559: + case 1636: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Lock -//line sql.y:7686 +//line sql.y:8089 { yyLOCAL = ForShareLock } yyVAL.union = yyLOCAL - case 1560: + case 1637: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Lock -//line sql.y:7690 +//line sql.y:8093 { yyLOCAL = ForShareLockNoWait } yyVAL.union = yyLOCAL - case 1561: + case 1638: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:7694 +//line sql.y:8097 { yyLOCAL = ForShareLockSkipLocked } yyVAL.union = yyLOCAL - case 1562: + case 1639: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:7698 +//line sql.y:8101 { yyLOCAL = ShareModeLock } yyVAL.union = yyLOCAL - case 1563: + case 1640: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7704 +//line sql.y:8107 { yyLOCAL = &SelectInto{Type: IntoOutfileS3, FileName: encodeSQLString(yyDollar[4].str), Charset: yyDollar[5].columnCharset, FormatOption: yyDollar[6].str, ExportOption: yyDollar[7].str, Manifest: yyDollar[8].str, Overwrite: yyDollar[9].str} } yyVAL.union = yyLOCAL - case 1564: + case 1641: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7708 +//line sql.y:8111 { yyLOCAL = &SelectInto{Type: IntoDumpfile, FileName: encodeSQLString(yyDollar[3].str), Charset: ColumnCharset{}, FormatOption: "", ExportOption: "", Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1565: + case 1642: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7712 +//line sql.y:8115 { yyLOCAL = &SelectInto{Type: IntoOutfile, FileName: encodeSQLString(yyDollar[3].str), Charset: yyDollar[4].columnCharset, FormatOption: "", ExportOption: yyDollar[5].str, Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1566: + case 1643: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *SelectInto +//line sql.y:8119 + { + yyLOCAL = &SelectInto{Type: IntoVariables, VarList: yyDollar[2].variablesUnion()} + } + yyVAL.union = yyLOCAL + case 1644: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:8125 + { + yySLICE := (*[]*Variable)(yyIaddr(yyVAL.union)) + *yySLICE = append(*yySLICE, yyDollar[3].variableUnion()) + } + case 1645: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []*Variable +//line sql.y:8129 + { + yyLOCAL = []*Variable{yyDollar[1].variableUnion()} + } + yyVAL.union = yyLOCAL + case 1646: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *Variable +//line sql.y:8135 + { + yyLOCAL = yyDollar[1].variableUnion() + } + yyVAL.union = yyLOCAL + case 1647: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *Variable +//line sql.y:8139 + { + yyLOCAL = &Variable{Name: createIdentifierCI(yyDollar[1].str), Scope: NoScope} + } + yyVAL.union = yyLOCAL + case 1648: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7717 +//line sql.y:8144 { yyVAL.str = "" } - case 1567: + case 1649: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7721 +//line sql.y:8148 { yyVAL.str = " format csv" + yyDollar[3].str } - case 1568: + case 1650: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7725 +//line sql.y:8152 { yyVAL.str = " format text" + yyDollar[3].str } - case 1569: + case 1651: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7730 +//line sql.y:8157 { yyVAL.str = "" } - case 1570: + case 1652: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7734 +//line sql.y:8161 { yyVAL.str = " header" } - case 1571: + case 1653: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7739 +//line sql.y:8166 { yyVAL.str = "" } - case 1572: + case 1654: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7743 +//line sql.y:8170 { yyVAL.str = " manifest on" } - case 1573: + case 1655: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7747 +//line sql.y:8174 { yyVAL.str = " manifest off" } - case 1574: + case 1656: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7752 +//line sql.y:8179 { yyVAL.str = "" } - case 1575: + case 1657: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7756 +//line sql.y:8183 { yyVAL.str = " overwrite on" } - case 1576: + case 1658: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7760 +//line sql.y:8187 { yyVAL.str = " overwrite off" } - case 1577: + case 1659: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7766 +//line sql.y:8193 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1578: + case 1660: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7771 +//line sql.y:8198 { yyVAL.str = "" } - case 1579: + case 1661: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7775 +//line sql.y:8202 { yyVAL.str = " lines" + yyDollar[2].str } - case 1580: + case 1662: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7781 +//line sql.y:8208 { yyVAL.str = yyDollar[1].str } - case 1581: + case 1663: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7785 +//line sql.y:8212 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1582: + case 1664: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7791 +//line sql.y:8218 { yyVAL.str = " starting by " + encodeSQLString(yyDollar[3].str) } - case 1583: + case 1665: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7795 +//line sql.y:8222 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1584: + case 1666: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7800 +//line sql.y:8227 { yyVAL.str = "" } - case 1585: + case 1667: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7804 +//line sql.y:8231 { yyVAL.str = " " + yyDollar[1].str + yyDollar[2].str } - case 1586: + case 1668: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7810 +//line sql.y:8237 { yyVAL.str = yyDollar[1].str } - case 1587: + case 1669: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7814 +//line sql.y:8241 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1588: + case 1670: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7820 +//line sql.y:8247 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1589: + case 1671: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7824 +//line sql.y:8251 { yyVAL.str = yyDollar[1].str + " enclosed by " + encodeSQLString(yyDollar[4].str) } - case 1590: + case 1672: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7828 +//line sql.y:8255 { yyVAL.str = " escaped by " + encodeSQLString(yyDollar[3].str) } - case 1591: + case 1673: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7833 +//line sql.y:8260 { yyVAL.str = "" } - case 1592: + case 1674: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7837 +//line sql.y:8264 { yyVAL.str = " optionally" } - case 1593: + case 1675: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Insert -//line sql.y:7850 +//line sql.y:8277 { yyLOCAL = &Insert{Rows: yyDollar[2].valuesUnion(), RowAlias: yyDollar[3].rowAliasUnion()} } yyVAL.union = yyLOCAL - case 1594: + case 1676: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Insert -//line sql.y:7854 +//line sql.y:8281 { yyLOCAL = &Insert{Rows: yyDollar[1].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 1595: + case 1677: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *Insert -//line sql.y:7858 +//line sql.y:8285 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[5].valuesUnion(), RowAlias: yyDollar[6].rowAliasUnion()} } yyVAL.union = yyLOCAL - case 1596: + case 1678: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *Insert -//line sql.y:7862 +//line sql.y:8289 { yyLOCAL = &Insert{Columns: []IdentifierCI{}, Rows: yyDollar[4].valuesUnion(), RowAlias: yyDollar[5].rowAliasUnion()} } yyVAL.union = yyLOCAL - case 1597: + case 1679: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:7866 +//line sql.y:8293 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[4].tableStmtUnion()} } yyVAL.union = yyLOCAL - case 1598: + case 1680: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:7872 +//line sql.y:8299 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1599: + case 1681: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:7876 +//line sql.y:8303 { yyLOCAL = Columns{yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1600: + case 1682: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7880 +//line sql.y:8307 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 1601: + case 1683: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:7884 +//line sql.y:8311 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[5].identifierCI) } - case 1602: + case 1684: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *RowAlias -//line sql.y:7889 +//line sql.y:8316 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1603: + case 1685: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *RowAlias -//line sql.y:7893 +//line sql.y:8320 { yyLOCAL = &RowAlias{TableName: yyDollar[2].identifierCS} } yyVAL.union = yyLOCAL - case 1604: + case 1686: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *RowAlias -//line sql.y:7897 +//line sql.y:8324 { yyLOCAL = &RowAlias{TableName: yyDollar[2].identifierCS, Columns: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 1605: + case 1687: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7902 +//line sql.y:8329 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1606: + case 1688: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7906 +//line sql.y:8333 { yyLOCAL = yyDollar[5].updateExprsUnion() } yyVAL.union = yyLOCAL - case 1607: + case 1689: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Values -//line sql.y:7912 +//line sql.y:8339 { yyLOCAL = Values{yyDollar[1].valTupleUnion()} } yyVAL.union = yyLOCAL - case 1608: + case 1690: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7916 +//line sql.y:8343 { yySLICE := (*Values)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion()) } - case 1609: + case 1691: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Values -//line sql.y:7922 +//line sql.y:8349 { yyLOCAL = Values{yyDollar[1].valTupleUnion()} } yyVAL.union = yyLOCAL - case 1610: + case 1692: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7926 +//line sql.y:8353 { yySLICE := (*Values)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion()) } - case 1611: + case 1693: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7932 +//line sql.y:8359 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1612: + case 1694: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7936 +//line sql.y:8363 { yyLOCAL = ValTuple{} } yyVAL.union = yyLOCAL - case 1613: + case 1695: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7942 +//line sql.y:8369 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1614: + case 1696: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7946 +//line sql.y:8373 { yyLOCAL = ValTuple{} } yyVAL.union = yyLOCAL - case 1615: + case 1697: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7952 +//line sql.y:8379 { yyLOCAL = ValTuple(yyDollar[2].exprsUnion()) } yyVAL.union = yyLOCAL - case 1616: + case 1698: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7958 +//line sql.y:8385 { yyLOCAL = ValTuple(yyDollar[3].exprsUnion()) } yyVAL.union = yyLOCAL - case 1619: + case 1701: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7968 +//line sql.y:8395 { if len(yyDollar[1].valTupleUnion()) == 1 { yyLOCAL = yyDollar[1].valTupleUnion()[0] @@ -22444,300 +23898,300 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1620: + case 1702: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7978 +//line sql.y:8405 { yyLOCAL = UpdateExprs{yyDollar[1].updateExprUnion()} } yyVAL.union = yyLOCAL - case 1621: + case 1703: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7982 +//line sql.y:8409 { yySLICE := (*UpdateExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].updateExprUnion()) } - case 1622: + case 1704: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *UpdateExpr -//line sql.y:7988 +//line sql.y:8415 { yyLOCAL = &UpdateExpr{Name: yyDollar[1].colNameUnion(), Expr: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1624: + case 1706: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7995 +//line sql.y:8422 { yyVAL.str = "charset" } - case 1627: + case 1709: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:8005 +//line sql.y:8432 { yyLOCAL = NewStrLiteral(yyDollar[1].identifierCI.String()) } yyVAL.union = yyLOCAL - case 1628: + case 1710: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:8009 +//line sql.y:8436 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1629: + case 1711: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:8013 +//line sql.y:8440 { yyLOCAL = &Default{} } yyVAL.union = yyLOCAL - case 1632: + case 1714: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:8022 +//line sql.y:8449 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1633: + case 1715: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:8024 +//line sql.y:8451 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1634: + case 1716: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:8027 +//line sql.y:8454 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1635: + case 1717: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:8029 +//line sql.y:8456 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1636: + case 1718: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:8032 +//line sql.y:8459 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1637: + case 1719: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL bool -//line sql.y:8034 +//line sql.y:8461 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1638: + case 1720: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Ignore -//line sql.y:8037 +//line sql.y:8464 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1639: + case 1721: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Ignore -//line sql.y:8039 +//line sql.y:8466 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1640: + case 1722: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8042 +//line sql.y:8469 { yyVAL.empty = struct{}{} } - case 1641: + case 1723: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8044 +//line sql.y:8471 { yyVAL.empty = struct{}{} } - case 1642: + case 1724: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8046 +//line sql.y:8473 { yyVAL.empty = struct{}{} } - case 1643: + case 1725: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:8050 +//line sql.y:8477 { yyLOCAL = &CallProc{Name: yyDollar[2].tableName, Params: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL - case 1644: + case 1726: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []Expr -//line sql.y:8055 +//line sql.y:8482 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1645: + case 1727: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []Expr -//line sql.y:8059 +//line sql.y:8486 { yyLOCAL = yyDollar[1].exprsUnion() } yyVAL.union = yyLOCAL - case 1646: + case 1728: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:8064 +//line sql.y:8491 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1647: + case 1729: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:8066 +//line sql.y:8493 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL - case 1648: + case 1730: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:8070 +//line sql.y:8497 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), String: string(yyDollar[2].identifierCI.String())} } yyVAL.union = yyLOCAL - case 1649: + case 1731: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8076 +//line sql.y:8503 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1650: + case 1732: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8080 +//line sql.y:8507 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1652: + case 1734: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8087 +//line sql.y:8514 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1653: + case 1735: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8093 +//line sql.y:8520 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1654: + case 1736: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8097 +//line sql.y:8524 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1655: + case 1737: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8103 +//line sql.y:8530 { yyVAL.identifierCS = NewIdentifierCS("") } - case 1656: + case 1738: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8107 +//line sql.y:8534 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 1658: + case 1740: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8114 +//line sql.y:8541 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1659: + case 1741: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:8120 +//line sql.y:8547 { yyLOCAL = &Kill{Type: yyDollar[2].killTypeUnion(), ProcesslistID: convertStringToUInt64(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 1660: + case 1742: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL KillType -//line sql.y:8126 +//line sql.y:8553 { yyLOCAL = ConnectionType } yyVAL.union = yyLOCAL - case 1661: + case 1743: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL KillType -//line sql.y:8130 +//line sql.y:8557 { yyLOCAL = ConnectionType } yyVAL.union = yyLOCAL - case 1662: + case 1744: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL KillType -//line sql.y:8134 +//line sql.y:8561 { yyLOCAL = QueryType } yyVAL.union = yyLOCAL - case 2303: + case 2411: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8803 +//line sql.y:9256 { } - case 2304: + case 2412: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8808 +//line sql.y:9261 { } - case 2305: + case 2413: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8812 +//line sql.y:9265 { skipToEnd(yylex) } - case 2306: + case 2414: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8817 +//line sql.y:9270 { skipToEnd(yylex) } - case 2307: + case 2415: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8821 +//line sql.y:9274 { skipToEnd(yylex) } - case 2308: + case 2416: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8825 +//line sql.y:9278 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 4fb69984e73..42a8c4e7086 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -18,8 +18,15 @@ package sqlparser import "vitess.io/vitess/go/ptr" -func setParseTree(yylex yyLexer, stmt Statement) { - yylex.(*Tokenizer).ParseTree = stmt +func setParseTrees(yylex yyLexer, stmts []Statement) { + if len(stmts) > 1 && stmts[len(stmts)-1] == nil { + stmts = stmts[:len(stmts)-1] + } + yylex.(*Tokenizer).ParseTrees = stmts +} + +func resetTokenizer(yylex yyLexer) { + yylex.(*Tokenizer).reset() } func setAllowComments(yylex yyLexer, allow bool) { @@ -61,7 +68,10 @@ func markBindVariable(yylex yyLexer, bvar string) { %union { statement Statement + statements []Statement selStmt SelectStatement + compoundStatement CompoundStatement + compoundStatements *CompoundStatements tableStmt TableStatement tableExpr TableExpr expr Expr @@ -105,6 +115,8 @@ func markBindVariable(yylex yyLexer, bvar string) { createDatabase *CreateDatabase alterDatabase *AlterDatabase createTable *CreateTable + createView *CreateView + createProcedure *CreateProcedure tableAndLockType *TableAndLockType alterTable *AlterTable tableOption *TableOption @@ -116,6 +128,8 @@ func markBindVariable(yylex yyLexer, bvar string) { constraintDefinition *ConstraintDefinition revertMigration *RevertMigration alterMigration *AlterMigration + elseIf *ElseIfBlock + elseIfs []*ElseIfBlock trimType TrimType frameClause *FrameClause framePoint *FramePoint @@ -145,6 +159,14 @@ func markBindVariable(yylex yyLexer, bvar string) { alterOptions []AlterOption vindexParams []VindexParam jsonObjectParams []*JSONObjectParam + procParam *ProcParameter + procParams []*ProcParameter + handlerAction HandlerAction + handlerCondition HandlerCondition + handlerConditions []HandlerCondition + signalSet *SignalSet + signalSets []*SignalSet + signalConditionName SignalConditionName partDefs []*PartitionDefinition partitionValueRange *PartitionValueRange partitionEngine *PartitionEngine @@ -167,6 +189,7 @@ func markBindVariable(yylex yyLexer, bvar string) { colKeyOpt ColumnKeyOption referenceAction ReferenceAction + procParamMode ProcParameterMode matchAction MatchAction insertAction InsertAction scope Scope @@ -294,7 +317,7 @@ func markBindVariable(yylex yyLexer, bvar string) { %left XOR %left AND %right NOT '!' -%left BETWEEN CASE WHEN THEN ELSE END +%left BETWEEN CASE WHEN THEN ELSE ELSEIF END %left '=' '<' '>' LE GE NE NULL_SAFE_EQUAL IS LIKE REGEXP RLIKE IN ASSIGNMENT_OPT %left '&' %left SHIFT_LEFT SHIFT_RIGHT @@ -320,9 +343,10 @@ func markBindVariable(yylex yyLexer, bvar string) { // DDL Tokens %token CREATE ALTER DROP RENAME ANALYZE ADD FLUSH CHANGE MODIFY DEALLOCATE -%token REVERT QUERIES +%token REVERT QUERIES DECLARE FOUND HANDLER CONTINUE EXIT UNDO +%token SQLEXCEPTION SQLSTATE SQLWARNING CONDITION %token SCHEMA TABLE INDEX VIEW TO IGNORE IF PRIMARY COLUMN SPATIAL FULLTEXT KEY_BLOCK_SIZE CHECK INDEXES -%token ACTION CASCADE CONSTRAINT FOREIGN NO REFERENCES RESTRICT +%token ACTION CASCADE CONSTRAINT FOREIGN NO REFERENCES RESTRICT SIGNAL %token SHOW DESCRIBE EXPLAIN DATE ESCAPE REPAIR OPTIMIZE TRUNCATE COALESCE EXCHANGE REBUILD PARTITIONING REMOVE PREPARE EXECUTE %token MAXVALUE PARTITION REORGANIZE LESS THAN PROCEDURE TRIGGER %token VINDEX VINDEXES DIRECTORY NAME UPGRADE @@ -364,6 +388,7 @@ func markBindVariable(yylex yyLexer, bvar string) { // SET tokens %token NAMES GLOBAL SESSION ISOLATION LEVEL READ WRITE ONLY REPEATABLE COMMITTED UNCOMMITTED SERIALIZABLE +%token CLASS_ORIGIN SUBCLASS_ORIGIN MESSAGE_TEXT MYSQL_ERRNO CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME CATALOG_NAME SCHEMA_NAME TABLE_NAME COLUMN_NAME CURSOR_NAME // Functions %token ADDDATE CURRENT_TIMESTAMP DATABASE CURRENT_DATE CURDATE DATE_ADD DATE_SUB NOW SUBDATE @@ -404,6 +429,7 @@ func markBindVariable(yylex yyLexer, bvar string) { %token SOURCE_COMPRESSION_ALGORITHMS SOURCE_PUBLIC_KEY_PATH SOURCE_TLS_CIPHERSUITES SOURCE_ZSTD_COMPRESSION_LEVEL SRID %token THREAD_PRIORITY TIES UNBOUNDED VCPU VISIBLE RETURNING %token MANUAL PARALLEL QUALIFY TABLESAMPLE +%token OUT INOUT // Performance Schema Functions %token FORMAT_BYTES FORMAT_PICO_TIME PS_CURRENT_THREAD_ID PS_THREAD_ID @@ -432,7 +458,8 @@ func markBindVariable(yylex yyLexer, bvar string) { %type range_or_list %type partitions_opt algorithm_opt subpartitions_opt partition_max_rows partition_min_rows -%type command kill_statement +%type multiple_commands +%type command command_opt kill_statement comment_command_opt %type explain_statement explainable_statement vexplain_statement %type prepare_statement execute_statement deallocate_statement %type stream_statement vstream_statement insert_statement update_statement delete_statement set_statement set_transaction_statement @@ -443,15 +470,27 @@ func markBindVariable(yylex yyLexer, bvar string) { %type with_list %type rename_list %type create_table_prefix +%type create_procedure +%type create_view_prefix %type alter_table_prefix %type alter_option alter_commands_modifier lock_index algorithm_index %type alter_options alter_commands_list alter_commands_modifier_list algorithm_lock_opt %type create_index_prefix %type create_database_prefix %type alter_database_prefix +%type handler_action +%type condition_value_list +%type condition_value error_condition_value sqlstate_condition_value condition_name signal_condition_value +%type signal_set_list_opt signal_set_list +%type signal_set +%type condition_information_item_name %type collate character_set encryption %type create_options create_options_opt %type default_optional first_opt linear_opt jt_exists_opt jt_path_opt partition_storage_opt +%type compound_statement compound_statement_without_semicolon compound_statement_with_semicolon +%type compound_statement_list_opt compound_statement_list else_opt +%type elseif_expression +%type elseif_list elseif_list_opt %type analyze_statement show_statement use_statement purge_statement other_statement %type begin_statement commit_statement rollback_statement savepoint_statement release_statement load_statement %type lock_statement unlock_statement call_statement @@ -489,13 +528,13 @@ func markBindVariable(yylex yyLexer, bvar string) { %type interval timestampadd_interval %type cache_opt separator_opt flush_option for_channel_opt maxvalue %type match_option -%type distinct_opt union_op replace_opt local_opt +%type distinct_opt union_op replace local_opt %type select_expression_list %type select_expression %type select_options select_options_opt flush_option_list -%type select_option algorithm_view security_view security_view_opt -%type generated_always_opt user_username address_opt -%type definer_opt user +%type select_option algorithm_view_opt algorithm_view security_view security_view_opt +%type generated_always_opt user_username address_opt value_opt +%type definer_opt definer user %type expression signed_literal signed_literal_or_null null_as_literal now_or_signed_literal signed_literal bit_expr regular_expressions xml_expressions %type simple_expr literal NUM_literal text_start text_literal text_literal_or_arg bool_pri literal_or_null now predicate tuple_expression null_int_variable_arg performance_schema_function_expressions gtid_function_expressions %type from_opt table_references from_clause @@ -537,13 +576,13 @@ func markBindVariable(yylex yyLexer, bvar string) { %type asc_desc_opt %type limit_opt limit_clause %type into_clause -%type column_attribute_list_opt generated_column_attribute_list_opt +%type column_attribute_list_opt generated_column_attribute_list_opt column_type_default_opt %type header_opt export_options manifest_opt overwrite_opt format_opt optionally_opt regexp_symbol %type fields_opts fields_opt_list fields_opt lines_opts lines_opt lines_opt_list %type locking_clause %type ins_column_list column_list column_list_opt column_list_empty index_list -%type variable_expr set_variable user_defined_variable -%type at_id_list execute_statement_list_opt +%type variable_expr set_variable user_defined_variable into_var +%type at_id_list execute_statement_list_opt into_var_list %type opt_partition_clause partition_list %type on_dup_opt %type update_list @@ -603,6 +642,9 @@ func markBindVariable(yylex yyLexer, bvar string) { %type partition_value_range %type partition_engine %type partition_operation +%type proc_param +%type proc_param_mode +%type proc_params_list proc_params_list_opt %type vindex_param %type vindex_param_list vindex_params_opt %type json_object_param @@ -625,27 +667,50 @@ func markBindVariable(yylex yyLexer, bvar string) { %type tx_chacteristics_opt tx_chars %type tx_char %type kill_type_opt -%start any_command +%start parse %% -any_command: - comment_opt command semicolon_opt +parse: + multiple_commands + { + setParseTrees(yylex, $1) + } + +multiple_commands: + comment_command_opt + { + $$ = []Statement{$1} + resetTokenizer(yylex) + } +| multiple_commands ';' comment_command_opt { - stmt := $2 + $$ = append($1, $3) + resetTokenizer(yylex) + } + +comment_command_opt: + comment_opt command_opt + { + $$ = $2 // If the statement is empty and we have comments // then we create a special struct which stores them. // This is required because we need to update the rows_returned // and other query stats and not return a `query was empty` error - if stmt == nil && $1 != nil { - stmt = &CommentOnly{Comments: $1} + if $$ == nil && $1 != nil { + $$ = &CommentOnly{Comments: $1} } - setParseTree(yylex, stmt) } -semicolon_opt: -/*empty*/ {} -| ';' {} +command_opt: + command + { + $$ = $1 + } +| /*empty*/ + { + $$ = nil + } command: select_statement @@ -687,10 +752,262 @@ command: | execute_statement | deallocate_statement | kill_statement -| /*empty*/ -{ - setParseTree(yylex, nil) -} + +compound_statement_without_semicolon: + command + { + $$ = &SingleStatement{Statement: $1} + } +| BEGIN compound_statement_list_opt END + { + $$ = &BeginEndStatement{Statements: $2} + } +| IF expression THEN compound_statement_list elseif_list_opt else_opt END IF + { + $$ = &IfStatement{SearchCondition: $2, ThenStatements: $4, ElseIfBlocks: $5, ElseStatements: $6} + } +| DECLARE column_list column_type column_type_default_opt + { + $3.Options = $4 + $$ = &DeclareVar{VarNames: $2, Type: $3} + } +| DECLARE handler_action HANDLER FOR condition_value_list compound_statement_without_semicolon + { + $$ = &DeclareHandler{Action: $2, Conditions: $5, Statement: $6} + } +| DECLARE sql_id CONDITION FOR error_condition_value + { + $$ = &DeclareCondition{Name: $2, Condition: $5} + } +| SIGNAL signal_condition_value signal_set_list_opt + { + $$ = &Signal{Condition: $2, SetValues: $3} + } + +signal_set_list_opt: + { + $$ = nil + } +| signal_set_list + +signal_set_list: + signal_set_list signal_set + { + $$ = append($1, $2) + } +| SET signal_set + { + $$ = []*SignalSet{ $2 } + } + +signal_set: + condition_information_item_name '=' literal + { + $$ = &SignalSet{ConditionName: $1, Value: $3} + } + +condition_information_item_name: + CLASS_ORIGIN + { + $$ = ClassOriginType + } +| SUBCLASS_ORIGIN + { + $$ = SubclassOriginType + } +| MESSAGE_TEXT + { + $$ = MessageTextType + } +| MYSQL_ERRNO + { + $$ = MySQLErrNoType + } +| CONSTRAINT_CATALOG + { + $$ = ConstraintCatalogType + } +| CONSTRAINT_SCHEMA + { + $$ = ConstraintSchemaType + } +| CONSTRAINT_NAME + { + $$ = ConstraintNameType + } +| CATALOG_NAME + { + $$ = CatalogNameType + } +| SCHEMA_NAME + { + $$ = SchemaNameType + } +| TABLE_NAME + { + $$ = TableNameType + } +| COLUMN_NAME + { + $$ = ColumnNameType + } +| CURSOR_NAME + { + $$ = CursorNameType + } + +handler_action: + CONTINUE + { + $$ = ContinueAction + } +| EXIT + { + $$ = ExitAction + } +| UNDO + { + $$ = UndoAction + } + +condition_value_list: + condition_value_list ',' condition_value + { + $$ = append($1, $3) + } +| condition_value + { + $$ = []HandlerCondition{ $1 } + } + +error_condition_value: + INTEGRAL + { + $$ = &HandlerConditionErrorCode{ErrorCode: convertStringToInt($1)} + } +| sqlstate_condition_value + { + $$ = $1 + } + +signal_condition_value: + sqlstate_condition_value +| condition_name + +sqlstate_condition_value: + SQLSTATE value_opt STRING + { + $$ = &HandlerConditionSQLState{SQLStateValue: NewStrLiteral($3)} + } + +condition_name: + sql_id + { + $$ = &HandlerConditionNamed{Name: $1} + } + +condition_value: + error_condition_value + { + $$ = $1 + } +| condition_name + { + $$ = $1 + } +| SQLWARNING + { + $$ = &HandlerConditionSQLWarning{} + } +| NOT FOUND + { + $$ = &HandlerConditionNotFound{} + } +| SQLEXCEPTION + { + $$ = &HandlerConditionSQLException{} + } + +value_opt: + {} +| VALUE + +column_type_default_opt: + { + $$ = nil + } +| DEFAULT openb expression closeb + { + $$ = &ColumnTypeOptions{Default: $3} + } +| DEFAULT now_or_signed_literal + { + $$ = &ColumnTypeOptions{Default: $2, DefaultLiteral: true} + } + +compound_statement_with_semicolon: + compound_statement_without_semicolon ';' + { + $$ = $1 + } + +compound_statement: + compound_statement_without_semicolon +| compound_statement_with_semicolon + +compound_statement_list_opt: + { + $$ = nil + } +| compound_statement_list + { + $$ = $1 + } + +compound_statement_list: + compound_statement_with_semicolon + { + $$ = &CompoundStatements{Statements: []CompoundStatement{$1}} + } +| compound_statement_list compound_statement_with_semicolon + { + $1.Statements = append($1.Statements, $2) + $$ = $1 + } + +else_opt: + { + $$ = nil + } +| ELSE compound_statement_list + { + $$ = $2 + } + +elseif_list_opt: + { + $$ = nil + } +| elseif_list + { + $$ = $1 + } + +elseif_list: + elseif_list elseif_expression + { + $$ = append($1, $2) + } +| elseif_expression + { + $$ = []*ElseIfBlock{ $1 } + } + +elseif_expression: + ELSEIF expression THEN compound_statement_list + { + $$ = &ElseIfBlock{SearchCondition: $2, ThenStatements: $4} + } user_defined_variable: AT_ID @@ -1084,7 +1401,7 @@ set_expression: set_variable: ID { - $$ = NewSetVariable(string($1), SessionScope) + $$ = NewSetVariable(string($1), NoScope) } | variable_expr { @@ -1175,6 +1492,10 @@ create_statement: $1.FullyParsed = true $$ = $1 } +| create_procedure + { + $$ = $1 + } | create_index_prefix '(' index_column_list ')' index_option_list_opt algorithm_lock_opt { indexDef := $1.AlterOptions[0].(*AddIndexDefinition).IndexDefinition @@ -1184,9 +1505,12 @@ create_statement: $1.FullyParsed = true $$ = $1 } -| CREATE comment_opt replace_opt algorithm_view definer_opt security_view_opt VIEW table_name column_list_opt AS select_statement check_option_opt +| create_view_prefix column_list_opt AS select_statement check_option_opt { - $$ = &CreateView{ViewName: $8, Comments: Comments($2).Parsed(), IsReplace:$3, Algorithm:$4, Definer: $5 ,Security:$6, Columns:$9, Select: $11, CheckOption: $12 } + $1.Columns = $2 + $1.Select = $4 + $1.CheckOption = $5 + $$ = $1 } | create_database_prefix create_options_opt { @@ -1195,11 +1519,8 @@ create_statement: $$ = $1 } -replace_opt: - { - $$ = false - } -| OR REPLACE +replace: + OR REPLACE { $$ = true } @@ -1271,6 +1592,12 @@ json_object_param: $$ = &JSONObjectParam{Key:$1, Value:$3} } +create_procedure: + CREATE comment_opt definer_opt PROCEDURE not_exists_opt table_name openb proc_params_list_opt closeb compound_statement + { + $$ = &CreateProcedure{Comments: Comments($2).Parsed(), Name: $6, IfNotExists: $5, Definer: $3, Params: $8, Body: $10} + } + create_table_prefix: CREATE comment_opt temp_opt TABLE not_exists_opt table_name { @@ -1278,6 +1605,30 @@ create_table_prefix: setDDL(yylex, $$) } +// We have to split the create_view_prefix into multiple elements +// instead of using a signle replace_opt algorith_view_opt definer_opt +// because that causes a shift reduce conflict on seeing a definer after having +// seen CREATE with CREATE PROCEDURE. To conflict arises because the parser +// doesn't know if it should reduce both replace_opt and algorithm_view_opt or not +// and since it only has 1 token lookahead, it can't make that decision. +// We have to therefore split the cases into multiple elements to resolve the conflict. +// We now explicitly have cases where replace is defined, and a case where explicitly +// algorithm for the view is defined. +create_view_prefix: + CREATE comment_opt definer_opt security_view_opt VIEW table_name + { + $$ = &CreateView{ViewName: $6, Comments: Comments($2).Parsed(), Definer: $3 ,Security:$4} + } +| CREATE comment_opt replace algorithm_view_opt definer_opt security_view_opt VIEW table_name + { + $$ = &CreateView{ViewName: $8, Comments: Comments($2).Parsed(), IsReplace:$3, Algorithm:$4, Definer: $5 ,Security:$6} + } +| CREATE comment_opt algorithm_view definer_opt security_view_opt VIEW table_name + { + $$ = &CreateView{ViewName: $7, Comments: Comments($2).Parsed(), Algorithm:$3, Definer: $4 ,Security:$5} + } + + alter_table_prefix: ALTER comment_opt TABLE table_name { @@ -3220,7 +3571,7 @@ alter_statement: $1.PartitionSpec = $2 $$ = $1 } -| ALTER comment_opt algorithm_view definer_opt security_view_opt VIEW table_name column_list_opt AS select_statement check_option_opt +| ALTER comment_opt algorithm_view_opt definer_opt security_view_opt VIEW table_name column_list_opt AS select_statement check_option_opt { $$ = &AlterView{ViewName: $7, Comments: Comments($2).Parsed(), Algorithm:$3, Definer: $4 ,Security:$5, Columns:$8, Select: $10, CheckOption: $11 } } @@ -4024,6 +4375,10 @@ drop_statement: { $$ = &DropDatabase{Comments: Comments($2).Parsed(), DBName: $5, IfExists: $4} } +| DROP comment_opt PROCEDURE exists_opt table_name + { + $$ = &DropProcedure{Comments: Comments($2).Parsed(), Name: $5, IfExists: $4} + } truncate_statement: TRUNCATE TABLE table_name @@ -7562,11 +7917,14 @@ algorithm_index: $$ = AlgorithmValue($3) } -algorithm_view: +algorithm_view_opt: { $$ = "" } -| ALGORITHM '=' UNDEFINED +| algorithm_view + +algorithm_view: + ALGORITHM '=' UNDEFINED { $$ = string($3) } @@ -7620,11 +7978,56 @@ cascade_or_local_opt: $$ = string($1) } +proc_params_list_opt: + { + $$ = nil + } +| proc_params_list + { + $$ = $1 + } + +proc_params_list: + proc_param + { + $$ = []*ProcParameter{$1} + } +| proc_params_list ',' proc_param + { + $$ = append($$, $3) + } + +proc_param: + proc_param_mode sql_id column_type + { + $$ = &ProcParameter{Mode: $1, Name: $2, Type: $3} + } + +proc_param_mode: + { + $$ = InMode + } +| IN + { + $$ = InMode + } +| INOUT + { + $$ = InoutMode + } +| OUT + { + $$ = OutMode + } + definer_opt: { $$ = nil } -| DEFINER '=' user +| definer + +definer: +DEFINER '=' user { $$ = $3 } @@ -7712,6 +8115,30 @@ INTO OUTFILE S3 STRING charset_opt format_opt export_options manifest_opt overwr { $$ = &SelectInto{Type:IntoOutfile, FileName:encodeSQLString($3), Charset:$4, FormatOption:"", ExportOption:$5, Manifest:"", Overwrite:""} } +| INTO into_var_list +{ + $$ = &SelectInto{Type:IntoVariables, VarList:$2} +} + +into_var_list: + into_var_list ',' into_var + { + $$ = append($1, $3) + } +| into_var + { + $$ = []*Variable{$1} + } + +into_var: + user_defined_variable + { + $$ = $1 + } +| ID + { + $$ = &Variable{Name: createIdentifierCI($1), Scope: NoScope} + } format_opt: { @@ -8162,6 +8589,8 @@ reserved_keyword: | CHECK | COLLATE | COLUMN +| CONDITION +| CONTINUE | CONVERT | CREATE | CROSS @@ -8175,6 +8604,7 @@ reserved_keyword: | SUBSTRING | DATABASE | DATABASES +| DECLARE | DEFAULT | DELETE | DENSE_RANK @@ -8185,9 +8615,11 @@ reserved_keyword: | DIV | DROP | ELSE +| ELSEIF | EMPTY | ESCAPE | EXISTS +| EXIT | EXPLAIN | EXTRACT | FALSE @@ -8208,6 +8640,7 @@ reserved_keyword: | IN | INDEX | INNER +| INOUT | INSERT | INTERVAL | INTO @@ -8246,6 +8679,7 @@ reserved_keyword: | OPTIMIZER_COSTS | OR | ORDER +| OUT | OUTER | OUTFILE | OVER @@ -8270,9 +8704,13 @@ reserved_keyword: | SEPARATOR | SET | SHOW +| SIGNAL | SPATIAL | SQL_BIG_RESULT | SQL_SMALL_RESULT +| SQLEXCEPTION +| SQLSTATE +| SQLWARNING | STORED | STRAIGHT_JOIN | SYSDATE @@ -8282,6 +8720,7 @@ reserved_keyword: | TO | TRAILING | TRUE +| UNDO | UNION | UNIQUE | UNLOCK @@ -8339,15 +8778,18 @@ non_reserved_keyword: | CANCEL | CASCADE | CASCADED +| CATALOG_NAME | CHANNEL | CHAR %prec FUNCTION_CALL_NON_KEYWORD | CHARSET | CHECKSUM +| CLASS_ORIGIN | CLEANUP | CLONE | COALESCE | CODE | COLLATION +| COLUMN_NAME | COLUMN_FORMAT | COLUMNS | COMMENT_KEYWORD @@ -8360,10 +8802,14 @@ non_reserved_keyword: | COMPRESSION | CONNECTION | CONSISTENT +| CONSTRAINT_CATALOG +| CONSTRAINT_NAME +| CONSTRAINT_SCHEMA | COPY | COUNT %prec FUNCTION_CALL_NON_KEYWORD | CSV | CURRENT +| CURSOR_NAME | CUTOVER_THRESHOLD | DATA | DATE %prec STRING_TYPE_PREFIX_NON_KEYWORD @@ -8416,6 +8862,7 @@ non_reserved_keyword: | FORMAT | FORMAT_BYTES %prec FUNCTION_CALL_NON_KEYWORD | FORMAT_PICO_TIME %prec FUNCTION_CALL_NON_KEYWORD +| FOUND | FULL | FUNCTION | GENERAL @@ -8430,6 +8877,7 @@ non_reserved_keyword: | GTID_EXECUTED | GTID_SUBSET %prec FUNCTION_CALL_NON_KEYWORD | GTID_SUBTRACT %prec FUNCTION_CALL_NON_KEYWORD +| HANDLER | HASH | HEADER | HISTOGRAM @@ -8513,6 +8961,7 @@ non_reserved_keyword: | MEMORY | MEMBER | MERGE +| MESSAGE_TEXT | MID %prec FUNCTION_CALL_NON_KEYWORD | MIN %prec FUNCTION_CALL_NON_KEYWORD | MIN_ROWS @@ -8521,6 +8970,7 @@ non_reserved_keyword: | MULTILINESTRING %prec FUNCTION_CALL_NON_KEYWORD | MULTIPOINT %prec FUNCTION_CALL_NON_KEYWORD | MULTIPOLYGON %prec FUNCTION_CALL_NON_KEYWORD +| MYSQL_ERRNO | NAME | NAMES | NCHAR @@ -8605,6 +9055,7 @@ non_reserved_keyword: | ROW_FORMAT | RTRIM %prec FUNCTION_CALL_NON_KEYWORD | S3 +| SCHEMA_NAME | SECONDARY | SECONDARY_ENGINE | SECONDARY_ENGINE_ATTRIBUTE @@ -8696,10 +9147,12 @@ non_reserved_keyword: | ST_StartPoint %prec FUNCTION_CALL_NON_KEYWORD | ST_X %prec FUNCTION_CALL_NON_KEYWORD | ST_Y %prec FUNCTION_CALL_NON_KEYWORD +| SUBCLASS_ORIGIN | SUBDATE %prec FUNCTION_CALL_NON_KEYWORD | SUBPARTITION | SUBPARTITIONS | SUM %prec FUNCTION_CALL_NON_KEYWORD +| TABLE_NAME | TABLES | TABLESAMPLE | TABLESPACE diff --git a/go/vt/sqlparser/testdata/select_cases.txt b/go/vt/sqlparser/testdata/select_cases.txt index 453bc54381a..61a68c4d2d1 100644 --- a/go/vt/sqlparser/testdata/select_cases.txt +++ b/go/vt/sqlparser/testdata/select_cases.txt @@ -284,7 +284,7 @@ INPUT select concat(@a, table_name), @a, table_name from information_schema.tables where table_schema = 'test' order by table_name; END OUTPUT -select concat(@a, table_name), @a, table_name from information_schema.`tables` where table_schema = 'test' order by table_name asc +select concat(@a, `table_name`), @a, `table_name` from information_schema.`tables` where table_schema = 'test' order by `table_name` asc END INPUT select "a" as col1, "c" as col2; @@ -337,8 +337,8 @@ END INPUT select 3 into @v1; END -ERROR -syntax error at position 18 near 'v1' +OUTPUT +select 3 from dual into @v1 END INPUT select /lib64/ user, host, db, info from information_schema.processlist where state = 'User lock' and info = 'select get_lock('ee_16407_5', 60)'; @@ -613,8 +613,8 @@ END INPUT select col1 from test limit 1 into tmp; END -ERROR -syntax error at position 39 near 'tmp' +OUTPUT +select col1 from test limit 1 into tmp END INPUT select substring_index(null,null,null); @@ -685,8 +685,8 @@ END INPUT select j from v2 where j = 1 into k; END -ERROR -syntax error at position 36 near 'k' +OUTPUT +select j from v2 where j = 1 into k END INPUT select substring('hello', -18446744073709551615, -18446744073709551615); @@ -914,7 +914,7 @@ INPUT select a.CONSTRAINT_SCHEMA, b.TABLE_NAME, CONSTRAINT_TYPE, b.CONSTRAINT_NAME, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, b.REFERENCED_TABLE_NAME from information_schema.TABLE_CONSTRAINTS a, information_schema.REFERENTIAL_CONSTRAINTS b where a.CONSTRAINT_SCHEMA COLLATE UTF8_GENERAL_CI = 'test' and a.CONSTRAINT_SCHEMA COLLATE UTF8_GENERAL_CI = b.CONSTRAINT_SCHEMA and a.CONSTRAINT_NAME = b.CONSTRAINT_NAME; END OUTPUT -select a.CONSTRAINT_SCHEMA, b.TABLE_NAME, CONSTRAINT_TYPE, b.CONSTRAINT_NAME, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, b.REFERENCED_TABLE_NAME from information_schema.TABLE_CONSTRAINTS as a, information_schema.REFERENTIAL_CONSTRAINTS as b where a.CONSTRAINT_SCHEMA collate UTF8_GENERAL_CI = 'test' and a.CONSTRAINT_SCHEMA collate UTF8_GENERAL_CI = b.CONSTRAINT_SCHEMA and a.CONSTRAINT_NAME = b.CONSTRAINT_NAME +select a.`CONSTRAINT_SCHEMA`, b.`TABLE_NAME`, CONSTRAINT_TYPE, b.`CONSTRAINT_NAME`, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, b.REFERENCED_TABLE_NAME from information_schema.TABLE_CONSTRAINTS as a, information_schema.REFERENTIAL_CONSTRAINTS as b where a.`CONSTRAINT_SCHEMA` collate UTF8_GENERAL_CI = 'test' and a.`CONSTRAINT_SCHEMA` collate UTF8_GENERAL_CI = b.`CONSTRAINT_SCHEMA` and a.`CONSTRAINT_NAME` = b.`CONSTRAINT_NAME` END INPUT select * from t2 order by a,b; @@ -1058,7 +1058,7 @@ INPUT select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name like 't%' order by table_name; END OUTPUT -select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name like 't%' order by table_name asc +select `table_name`, index_type from information_schema.statistics where table_schema = 'test' and `table_name` like 't%' order by `table_name` asc END INPUT select t1.col1 from t1 where t1.col2 in (select t2.col2 from t2 group by t2.col1, t2.col2 having col_t1 <= 10) group by col_t1 having col_t1 <= 20; @@ -1076,7 +1076,7 @@ INPUT select * from `information_schema`.`REFERENTIAL_CONSTRAINTS` where `CONSTRAINT_SCHEMA` = NULL; END OUTPUT -select * from information_schema.REFERENTIAL_CONSTRAINTS where CONSTRAINT_SCHEMA = null +select * from information_schema.REFERENTIAL_CONSTRAINTS where `CONSTRAINT_SCHEMA` = null END INPUT select truncate(52.64,1),truncate(52.64,2),truncate(52.64,-1),truncate(52.64,-2), truncate(-52.64,1),truncate(-52.64,-1); @@ -1117,8 +1117,8 @@ END INPUT select 141427 + datediff(curdate(),'1970-01-01') into @my_uuid_synthetic; END -ERROR -syntax error at position 73 near 'my_uuid_synthetic' +OUTPUT +select 141427 + datediff(curdate(), '1970-01-01') from dual into @my_uuid_synthetic END INPUT select makedate(1997,0); @@ -1220,7 +1220,7 @@ INPUT select SUBPARTITION_METHOD FROM information_schema.partitions WHERE table_schema="test" AND table_name="t1"; END OUTPUT -select SUBPARTITION_METHOD from information_schema.`partitions` where table_schema = 'test' and table_name = 't1' +select SUBPARTITION_METHOD from information_schema.`partitions` where table_schema = 'test' and `table_name` = 't1' END INPUT select grp,group_concat(a,null) from t1 group by grp; @@ -1274,7 +1274,7 @@ INPUT select TABLE_NAME from information_schema.views where table_schema='test' order by TABLE_NAME; END OUTPUT -select TABLE_NAME from information_schema.views where table_schema = 'test' order by TABLE_NAME asc +select `TABLE_NAME` from information_schema.views where table_schema = 'test' order by `TABLE_NAME` asc END INPUT select c from t2 where a = 2 and b = 'val-2' group by c; @@ -1454,7 +1454,7 @@ INPUT select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name = 'tm' order by table_name; END OUTPUT -select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name = 'tm' order by table_name asc +select `table_name`, index_type from information_schema.statistics where table_schema = 'test' and `table_name` = 'tm' order by `table_name` asc END INPUT select strcmp(_koi8r'a', _koi8r'A'); @@ -1484,7 +1484,7 @@ INPUT select data_type, character_octet_length, character_maximum_length from information_schema.columns where table_name='t1'; END OUTPUT -select data_type, character_octet_length, character_maximum_length from information_schema.`columns` where table_name = 't1' +select data_type, character_octet_length, character_maximum_length from information_schema.`columns` where `table_name` = 't1' END INPUT select ST_asbinary(g) from t1; @@ -1604,7 +1604,7 @@ INPUT select table_schema, table_name, table_comment from information_schema.tables where table_schema like 'mysqltest_%' and table_name like 't_bug44738_%' order by table_name; END OUTPUT -select table_schema, table_name, table_comment from information_schema.`tables` where table_schema like 'mysqltest_%' and table_name like 't_bug44738_%' order by table_name asc +select table_schema, `table_name`, table_comment from information_schema.`tables` where table_schema like 'mysqltest_%' and `table_name` like 't_bug44738_%' order by `table_name` asc END INPUT select 12 mod 0 as 'NULL'; @@ -1760,7 +1760,7 @@ INPUT select * from information_schema.STATISTICS where TABLE_SCHEMA = "mysqltest" order by table_name, index_name; END OUTPUT -select * from information_schema.STATISTICS where TABLE_SCHEMA = 'mysqltest' order by table_name asc, index_name asc +select * from information_schema.STATISTICS where TABLE_SCHEMA = 'mysqltest' order by `table_name` asc, index_name asc END INPUT select convert(char(0xff,0x8f) using utf8mb4); @@ -2156,7 +2156,7 @@ INPUT select statistics.TABLE_NAME, statistics.COLUMN_NAME, statistics.TABLE_CATALOG, statistics.TABLE_SCHEMA, statistics.NON_UNIQUE, statistics.INDEX_SCHEMA, statistics.INDEX_NAME, statistics.SEQ_IN_INDEX, statistics.COLLATION, statistics.SUB_PART, statistics.PACKED, statistics.NULLABLE, statistics.INDEX_TYPE, statistics.COMMENT, columns.TABLE_CATALOG, columns.TABLE_SCHEMA, columns.COLUMN_DEFAULT, columns.IS_NULLABLE, columns.DATA_TYPE, columns.CHARACTER_MAXIMUM_LENGTH, columns.CHARACTER_OCTET_LENGTH, columns.NUMERIC_PRECISION, columns.NUMERIC_SCALE, columns.CHARACTER_SET_NAME, columns.COLLATION_NAME, columns.COLUMN_TYPE, columns.COLUMN_KEY, columns.EXTRA, columns.PRIVILEGES, columns.COLUMN_COMMENT from information_schema.statistics join information_schema.columns using(table_name,column_name) where table_name='user'; END OUTPUT -select statistics.TABLE_NAME, statistics.COLUMN_NAME, statistics.TABLE_CATALOG, statistics.TABLE_SCHEMA, statistics.NON_UNIQUE, statistics.INDEX_SCHEMA, statistics.INDEX_NAME, statistics.SEQ_IN_INDEX, statistics.`COLLATION`, statistics.SUB_PART, statistics.PACKED, statistics.NULLABLE, statistics.INDEX_TYPE, statistics.`COMMENT`, `columns`.TABLE_CATALOG, `columns`.TABLE_SCHEMA, `columns`.COLUMN_DEFAULT, `columns`.IS_NULLABLE, `columns`.DATA_TYPE, `columns`.CHARACTER_MAXIMUM_LENGTH, `columns`.CHARACTER_OCTET_LENGTH, `columns`.NUMERIC_PRECISION, `columns`.NUMERIC_SCALE, `columns`.CHARACTER_SET_NAME, `columns`.COLLATION_NAME, `columns`.COLUMN_TYPE, `columns`.COLUMN_KEY, `columns`.EXTRA, `columns`.`PRIVILEGES`, `columns`.COLUMN_COMMENT from information_schema.statistics join information_schema.`columns` using (table_name, column_name) where table_name = 'user' +select statistics.`TABLE_NAME`, statistics.`COLUMN_NAME`, statistics.TABLE_CATALOG, statistics.TABLE_SCHEMA, statistics.NON_UNIQUE, statistics.INDEX_SCHEMA, statistics.INDEX_NAME, statistics.SEQ_IN_INDEX, statistics.`COLLATION`, statistics.SUB_PART, statistics.PACKED, statistics.NULLABLE, statistics.INDEX_TYPE, statistics.`COMMENT`, `columns`.TABLE_CATALOG, `columns`.TABLE_SCHEMA, `columns`.COLUMN_DEFAULT, `columns`.IS_NULLABLE, `columns`.DATA_TYPE, `columns`.CHARACTER_MAXIMUM_LENGTH, `columns`.CHARACTER_OCTET_LENGTH, `columns`.NUMERIC_PRECISION, `columns`.NUMERIC_SCALE, `columns`.CHARACTER_SET_NAME, `columns`.COLLATION_NAME, `columns`.COLUMN_TYPE, `columns`.COLUMN_KEY, `columns`.EXTRA, `columns`.`PRIVILEGES`, `columns`.COLUMN_COMMENT from information_schema.statistics join information_schema.`columns` using (`table_name`, `column_name`) where `table_name` = 'user' END INPUT select c from t1 where c='cccc'; @@ -2426,7 +2426,7 @@ INPUT select * from information_schema.partitions where table_schema="test" and table_name="t3"; END OUTPUT -select * from information_schema.`partitions` where table_schema = 'test' and table_name = 't3' +select * from information_schema.`partitions` where table_schema = 'test' and `table_name` = 't3' END INPUT select id from t2; @@ -2557,8 +2557,8 @@ END INPUT select max_data_length into @changed_max_data_length from information_schema.tables where table_name='t1'; END -ERROR -syntax error at position 53 near 'changed_max_data_length' +OUTPUT +select max_data_length from information_schema.`tables` where `table_name` = 't1' into @changed_max_data_length END INPUT select 1 and min(a) is null from t1; @@ -2744,7 +2744,7 @@ INPUT select * from information_schema.partitions where table_schema="test" and table_name="t1"; END OUTPUT -select * from information_schema.`partitions` where table_schema = 'test' and table_name = 't1' +select * from information_schema.`partitions` where table_schema = 'test' and `table_name` = 't1' END INPUT select * from t1 join (t2, t3) using (b); @@ -2906,7 +2906,7 @@ INPUT select * from information_schema.TABLE_CONSTRAINTS where TABLE_NAME= "vo"; END OUTPUT -select * from information_schema.TABLE_CONSTRAINTS where TABLE_NAME = 'vo' +select * from information_schema.TABLE_CONSTRAINTS where `TABLE_NAME` = 'vo' END INPUT select distinct a1 from t1 where a2 = 'b'; @@ -3026,7 +3026,7 @@ INPUT select * from information_schema.views where table_name='v1' or table_name='v2'; END OUTPUT -select * from information_schema.views where table_name = 'v1' or table_name = 'v2' +select * from information_schema.views where `table_name` = 'v1' or `table_name` = 'v2' END INPUT select count(*) from t3 where id3; @@ -3086,13 +3086,13 @@ INPUT select * from information_schema.TABLE_CONSTRAINTS where TABLE_SCHEMA= "test" order by constraint_name; END OUTPUT -select * from information_schema.TABLE_CONSTRAINTS where TABLE_SCHEMA = 'test' order by constraint_name asc +select * from information_schema.TABLE_CONSTRAINTS where TABLE_SCHEMA = 'test' order by `constraint_name` asc END INPUT select * from `information_schema`.`VIEWS` where `TABLE_NAME` = NULL; END OUTPUT -select * from information_schema.VIEWS where TABLE_NAME = null +select * from information_schema.VIEWS where `TABLE_NAME` = null END INPUT select locate(_utf8 0xD091, _utf8 0xD0B0D0B1D0B2); @@ -3332,7 +3332,7 @@ INPUT select column_name, NUMERIC_PRECISION, NUMERIC_SCALE from information_schema.columns where table_name='t1' order by column_name; END OUTPUT -select column_name, NUMERIC_PRECISION, NUMERIC_SCALE from information_schema.`columns` where table_name = 't1' order by column_name asc +select `column_name`, NUMERIC_PRECISION, NUMERIC_SCALE from information_schema.`columns` where `table_name` = 't1' order by `column_name` asc END INPUT select "xyz" as name union select "abc" as name order by name desc; @@ -3386,7 +3386,7 @@ INPUT select 1 as f1 from information_schema.tables where "COLUMN_PRIVILEGES"= (select cast(table_name as char) from information_schema.tables where table_schema != 'performance_schema' order by table_name limit 1) limit 1; END OUTPUT -select 1 as f1 from information_schema.`tables` where 'COLUMN_PRIVILEGES' = (select cast(table_name as char) from information_schema.`tables` where table_schema != 'performance_schema' order by table_name asc limit 1) limit 1 +select 1 as f1 from information_schema.`tables` where 'COLUMN_PRIVILEGES' = (select cast(`table_name` as char) from information_schema.`tables` where table_schema != 'performance_schema' order by `table_name` asc limit 1) limit 1 END INPUT select date_sub("1998-01-01 00:00:00",INTERVAL "1:1" HOUR_MINUTE); @@ -3440,7 +3440,7 @@ INPUT select column_name from information_schema.columns where table_schema='test' and table_name='t1'; END OUTPUT -select column_name from information_schema.`columns` where table_schema = 'test' and table_name = 't1' +select `column_name` from information_schema.`columns` where table_schema = 'test' and `table_name` = 't1' END INPUT select a1,a2,b,min(c) from t1 where (ord(a1) > 97) and (ord(a2) + ord(a1) > 194) and (b = 'c') group by a1,a2,b; @@ -3938,7 +3938,7 @@ INPUT select table_name,column_name from information_schema.COLUMNS where table_schema like "test%" order by table_name, column_name; END OUTPUT -select table_name, column_name from information_schema.`COLUMNS` where table_schema like 'test%' order by table_name asc, column_name asc +select `table_name`, `column_name` from information_schema.`COLUMNS` where table_schema like 'test%' order by `table_name` asc, `column_name` asc END INPUT select * from v0; @@ -4189,8 +4189,8 @@ END INPUT select @@session.time_zone into @save_tz; END -ERROR -syntax error at position 41 near 'save_tz' +OUTPUT +select @@time_zone from dual into @save_tz END INPUT select count(*), min(7), max(7) from t1m, t1i; @@ -4496,7 +4496,7 @@ INPUT select TABLE_NAME,TABLE_TYPE,ENGINE from information_schema.tables where table_schema='information_schema' order by table_name collate utf8_general_ci limit 2; END OUTPUT -select TABLE_NAME, TABLE_TYPE, `ENGINE` from information_schema.`tables` where table_schema = 'information_schema' order by table_name collate utf8_general_ci asc limit 2 +select `TABLE_NAME`, TABLE_TYPE, `ENGINE` from information_schema.`tables` where table_schema = 'information_schema' order by `table_name` collate utf8_general_ci asc limit 2 END INPUT select grp,group_concat(a order by a,d+c-ascii(c)-a) from t1 group by grp; @@ -4556,7 +4556,7 @@ INPUT select TABLE_SCHEMA,TABLE_NAME FROM information_schema.TABLES where TABLE_SCHEMA ='mysqltest_LC2'; END OUTPUT -select TABLE_SCHEMA, TABLE_NAME from information_schema.`TABLES` where TABLE_SCHEMA = 'mysqltest_LC2' +select TABLE_SCHEMA, `TABLE_NAME` from information_schema.`TABLES` where TABLE_SCHEMA = 'mysqltest_LC2' END INPUT select hex(weight_string(0x010203)); @@ -4837,8 +4837,8 @@ END INPUT select count(distinct x.id_aams) into not_installed from (select * from (select t1.id_aams, t2.* from t1 left join t2 on t2.code_id = vlt_code_id and t1.id_aams = t2.id_game where t1.id_aams = 1715000360 order by t2.id desc ) as g group by g.id_aams having g.id is null ) as x; END -ERROR -syntax error at position 52 near 'not_installed' +OUTPUT +select count(distinct x.id_aams) from (select * from (select t1.id_aams, t2.* from t1 left join t2 on t2.code_id = vlt_code_id and t1.id_aams = t2.id_game where t1.id_aams = 1715000360 order by t2.id desc) as g group by g.id_aams having g.id is null) as x into not_installed END INPUT select "... and something more ..."; @@ -5017,8 +5017,8 @@ END INPUT select concat('0',mid(@my_uuid,16,3),mid(@my_uuid,10,4),left(@my_uuid,8)) into @my_uuidate; END -ERROR -syntax error at position 91 near 'my_uuidate' +OUTPUT +select concat('0', substr(@my_uuid, 16, 3), substr(@my_uuid, 10, 4), left(@my_uuid, 8)) from dual into @my_uuidate END INPUT select locate('he','hello',null),locate('he',null,2),locate(null,'hello',2); @@ -5138,7 +5138,7 @@ INPUT select column_name, column_default from columns where table_schema='test' and table_name='t1'; END OUTPUT -select column_name, column_default from `columns` where table_schema = 'test' and table_name = 't1' +select `column_name`, column_default from `columns` where table_schema = 'test' and `table_name` = 't1' END INPUT select trim(trailing 'foo' from 'foo'); @@ -5155,8 +5155,8 @@ END INPUT select max_data_length into @orig_max_data_length from information_schema.tables where table_name='t1'; END -ERROR -syntax error at position 50 near 'orig_max_data_length' +OUTPUT +select max_data_length from information_schema.`tables` where `table_name` = 't1' into @orig_max_data_length END INPUT select hex(substr(_utf16 0x00e400e50068,-3)); @@ -5546,7 +5546,7 @@ INPUT select table_name, table_type, auto_increment, table_comment from information_schema.tables where table_schema='test' and table_name='t2'; END OUTPUT -select table_name, table_type, `auto_increment`, table_comment from information_schema.`tables` where table_schema = 'test' and table_name = 't2' +select `table_name`, table_type, `auto_increment`, table_comment from information_schema.`tables` where table_schema = 'test' and `table_name` = 't2' END INPUT select vq1.b,dt.b from v1 vq1, lateral (select vq1.b) dt; @@ -5803,8 +5803,8 @@ END INPUT select ST_GeomFromText("POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))") into @a; END -ERROR -syntax error at position 73 near 'a' +OUTPUT +select st_geometryfromtext('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))') from dual into @a END INPUT select 'a' union select concat('a', -concat('3',4)); @@ -5840,7 +5840,7 @@ INPUT select column_type from information_schema.columns where table_schema="information_schema" and table_name="COLUMNS" and (column_name="character_set_name" or column_name="collation_name"); END OUTPUT -select column_type from information_schema.`columns` where table_schema = 'information_schema' and table_name = 'COLUMNS' and (column_name = 'character_set_name' or column_name = 'collation_name') +select column_type from information_schema.`columns` where table_schema = 'information_schema' and `table_name` = 'COLUMNS' and (`column_name` = 'character_set_name' or `column_name` = 'collation_name') END INPUT select concat(a, if(b>10, _utf8'x', _utf8'y')) from t1; @@ -6332,7 +6332,7 @@ INPUT select * from information_schema.key_column_usage where TABLE_SCHEMA= "test" order by constraint_name; END OUTPUT -select * from information_schema.key_column_usage where TABLE_SCHEMA = 'test' order by constraint_name asc +select * from information_schema.key_column_usage where TABLE_SCHEMA = 'test' order by `constraint_name` asc END INPUT select ST_Length(ST_MLineFromWKB(0x0000000005000000020000000002000000035FB317E5EF3AB327E3A4B378469B67320000000000000000C0240000000000003FF05FD8ADAB9F560000000000000000000000000200000003000000000000000000000000000000000000000000000000BFF08B439581062540240000000000004341C37937E08000)) as length; @@ -6446,7 +6446,7 @@ INPUT select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='' AND TABLE_NAME='nonexisting'; END OUTPUT -select count(*) from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = '' and TABLE_NAME = 'nonexisting' +select count(*) from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = '' and `TABLE_NAME` = 'nonexisting' END INPUT select t1.*, a from t1; @@ -6506,7 +6506,7 @@ INPUT select host,db,user,table_name from mysql.tables_priv where user like 'mysqltest_%' order by host,db,user,table_name; END OUTPUT -select host, db, `user`, table_name from mysql.tables_priv where `user` like 'mysqltest_%' order by host asc, db asc, `user` asc, table_name asc +select host, db, `user`, `table_name` from mysql.tables_priv where `user` like 'mysqltest_%' order by host asc, db asc, `user` asc, `table_name` asc END INPUT select * from t1 where a=18446744073709551615; @@ -6686,7 +6686,7 @@ INPUT select column_name as 'Field',column_type as 'Type',is_nullable as 'Null',column_key as 'Key',column_default as 'Default',extra as 'Extra' from information_schema.columns where table_schema='mysqltest_db1' and table_name='t_no_priv'; END OUTPUT -select column_name as Field, column_type as Type, is_nullable as `Null`, column_key as `Key`, column_default as `Default`, extra as Extra from information_schema.`columns` where table_schema = 'mysqltest_db1' and table_name = 't_no_priv' +select `column_name` as Field, column_type as Type, is_nullable as `Null`, column_key as `Key`, column_default as `Default`, extra as Extra from information_schema.`columns` where table_schema = 'mysqltest_db1' and `table_name` = 't_no_priv' END INPUT select id+0 as a,max(id),concat(facility) as b from t1 group by a order by b desc,a; @@ -6866,7 +6866,7 @@ INPUT select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name like 't%' and index_name = 'l' order by table_name; END OUTPUT -select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name like 't%' and index_name = 'l' order by table_name asc +select `table_name`, index_type from information_schema.statistics where table_schema = 'test' and `table_name` like 't%' and index_name = 'l' order by `table_name` asc END INPUT select (round(-9223372036854775808, -4)); @@ -6896,7 +6896,7 @@ INPUT select table_type from information_schema.tables where table_schema="mysql" and table_name="user"; END OUTPUT -select table_type from information_schema.`tables` where table_schema = 'mysql' and table_name = 'user' +select table_type from information_schema.`tables` where table_schema = 'mysql' and `table_name` = 'user' END INPUT select min(a), max(a) from t1; @@ -7322,7 +7322,7 @@ INPUT select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name like 't%' and index_name = 'w' order by table_name; END OUTPUT -select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name like 't%' and index_name = 'w' order by table_name asc +select `table_name`, index_type from information_schema.statistics where table_schema = 'test' and `table_name` like 't%' and index_name = 'w' order by `table_name` asc END INPUT select /*1*/ user, host, db, command, state, info from information_schema.processlist where (user='event_scheduler') order by info; @@ -7418,7 +7418,7 @@ INPUT select COLUMN_NAME,COLUMN_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE from information_schema.columns where table_name= 't1'; END OUTPUT -select COLUMN_NAME, COLUMN_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE from information_schema.`columns` where table_name = 't1' +select `COLUMN_NAME`, COLUMN_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE from information_schema.`columns` where `table_name` = 't1' END INPUT select * from `information_schema`.`key_column_usage` where `TABLE_SCHEMA` = NULL; @@ -7472,7 +7472,7 @@ INPUT select * from information_schema.views where TABLE_SCHEMA != 'sys' and TABLE_NAME rlike "v[0-4]{1}$" order by table_name; END OUTPUT -select * from information_schema.views where TABLE_SCHEMA != 'sys' and TABLE_NAME regexp 'v[0-4]{1}$' order by table_name asc +select * from information_schema.views where TABLE_SCHEMA != 'sys' and `TABLE_NAME` regexp 'v[0-4]{1}$' order by `table_name` asc END INPUT select group_concat(distinct a) from t1; @@ -7501,8 +7501,8 @@ END INPUT select ST_GeomFromText('linestring(7 6, 15 4)') into @l; END -ERROR -syntax error at position 56 near 'l' +OUTPUT +select st_geometryfromtext('linestring(7 6, 15 4)') from dual into @l END INPUT select concat("max=",connection) 'p1'; @@ -7526,7 +7526,7 @@ INPUT select table_schema, table_name, column_name from information_schema.columns where table_schema not in ('performance_schema', 'sys', 'mysql') and data_type = 'longtext' order by table_name, column_name; END OUTPUT -select table_schema, table_name, column_name from information_schema.`columns` where table_schema not in ('performance_schema', 'sys', 'mysql') and data_type = 'longtext' order by table_name asc, column_name asc +select table_schema, `table_name`, `column_name` from information_schema.`columns` where table_schema not in ('performance_schema', 'sys', 'mysql') and data_type = 'longtext' order by `table_name` asc, `column_name` asc END INPUT select * from t1 ignore key (key1) where text1='teststring' or text1 like 'teststring_%' ORDER BY text1; @@ -7820,7 +7820,7 @@ INPUT select schema_name from information_schema.schemata order by schema_name; END OUTPUT -select schema_name from information_schema.schemata order by schema_name asc +select `schema_name` from information_schema.schemata order by `schema_name` asc END INPUT select std(s1/s2) from bug22555 where i=3; @@ -8054,7 +8054,7 @@ INPUT select column_name,data_type,CHARACTER_OCTET_LENGTH, CHARACTER_MAXIMUM_LENGTH from information_schema.columns where table_name='t1' order by column_name; END OUTPUT -select column_name, data_type, CHARACTER_OCTET_LENGTH, CHARACTER_MAXIMUM_LENGTH from information_schema.`columns` where table_name = 't1' order by column_name asc +select `column_name`, data_type, CHARACTER_OCTET_LENGTH, CHARACTER_MAXIMUM_LENGTH from information_schema.`columns` where `table_name` = 't1' order by `column_name` asc END INPUT select group_concat(c1 order by c1) from t1 group by c1 collate utf8_hungarian_ci; @@ -8174,7 +8174,7 @@ INPUT select constraint_name from information_schema.table_constraints where table_schema='test' order by constraint_name; END OUTPUT -select constraint_name from information_schema.table_constraints where table_schema = 'test' order by constraint_name asc +select `constraint_name` from information_schema.table_constraints where table_schema = 'test' order by `constraint_name` asc END INPUT select * from information_schema.partitions where table_schema="test"; @@ -8228,7 +8228,7 @@ INPUT select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='mysql' AND TABLE_NAME=''; END OUTPUT -select count(*) from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = 'mysql' and TABLE_NAME = '' +select count(*) from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = 'mysql' and `TABLE_NAME` = '' END INPUT select min(a3) from t1 where a2 = 2; @@ -8432,7 +8432,7 @@ INPUT select * from information_schema.COLUMNS where table_name="t1" and column_name= "a" order by table_name; END OUTPUT -select * from information_schema.`COLUMNS` where table_name = 't1' and column_name = 'a' order by table_name asc +select * from information_schema.`COLUMNS` where `table_name` = 't1' and `column_name` = 'a' order by `table_name` asc END INPUT select rpad('hello', 4294967295, '1'); @@ -8600,7 +8600,7 @@ INPUT select * from information_schema.TABLE_CONSTRAINTS where TABLE_SCHEMA= "test" order by TABLE_SCHEMA, TABLE_NAME, CONSTRAINT_NAME; END OUTPUT -select * from information_schema.TABLE_CONSTRAINTS where TABLE_SCHEMA = 'test' order by TABLE_SCHEMA asc, TABLE_NAME asc, CONSTRAINT_NAME asc +select * from information_schema.TABLE_CONSTRAINTS where TABLE_SCHEMA = 'test' order by TABLE_SCHEMA asc, `TABLE_NAME` asc, `CONSTRAINT_NAME` asc END INPUT select distinct least(1,count(distinct a)) from t1 group by a; @@ -8648,7 +8648,7 @@ INPUT select * from information_schema.views where table_schema != 'sys' order by table_name; END OUTPUT -select * from information_schema.views where table_schema != 'sys' order by table_name asc +select * from information_schema.views where table_schema != 'sys' order by `table_name` asc END INPUT select * from t2 left outer join t1 using (n); @@ -8924,7 +8924,7 @@ INPUT select column_name from information_schema.columns where table_schema='test' order by column_name; END OUTPUT -select column_name from information_schema.`columns` where table_schema = 'test' order by column_name asc +select `column_name` from information_schema.`columns` where table_schema = 'test' order by `column_name` asc END INPUT select t1.name, t2.name, t2.id,t3.id from t2 right join t1 on (t1.id = t2.owner) left join t1 as t3 on t3.id=t2.owner; @@ -9248,7 +9248,7 @@ INPUT select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='mysql' AND TABLE_NAME='nonexisting'; END OUTPUT -select count(*) from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = 'mysql' and TABLE_NAME = 'nonexisting' +select count(*) from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = 'mysql' and `TABLE_NAME` = 'nonexisting' END INPUT select (12%0) <=> null as '1'; @@ -9289,8 +9289,8 @@ END INPUT select sysdate() into @b; END -ERROR -syntax error at position 25 near 'b' +OUTPUT +select sysdate() from dual into @b END INPUT select inet_ntoa(null),inet_aton(null); @@ -9326,7 +9326,7 @@ INPUT select host,db,user,table_name from mysql.tables_priv where user = 'mysqltest_1' order by host,db,user,table_name; END OUTPUT -select host, db, `user`, table_name from mysql.tables_priv where `user` = 'mysqltest_1' order by host asc, db asc, `user` asc, table_name asc +select host, db, `user`, `table_name` from mysql.tables_priv where `user` = 'mysqltest_1' order by host asc, db asc, `user` asc, `table_name` asc END INPUT select * from v1a join (t3 natural join t4) on a = y; @@ -9716,7 +9716,7 @@ INPUT select a.ROUTINE_NAME from information_schema.ROUTINES a, information_schema.SCHEMATA b where a.ROUTINE_SCHEMA = b.SCHEMA_NAME AND b.SCHEMA_NAME='test' ORDER BY a.ROUTINE_NAME; END OUTPUT -select a.ROUTINE_NAME from information_schema.ROUTINES as a, information_schema.SCHEMATA as b where a.ROUTINE_SCHEMA = b.SCHEMA_NAME and b.SCHEMA_NAME = 'test' order by a.ROUTINE_NAME asc +select a.ROUTINE_NAME from information_schema.ROUTINES as a, information_schema.SCHEMATA as b where a.ROUTINE_SCHEMA = b.`SCHEMA_NAME` and b.`SCHEMA_NAME` = 'test' order by a.ROUTINE_NAME asc END INPUT select date_format(concat('19980131',131415),'%H|%I|%k|%l|%i|%p|%r|%S|%T| %M|%W|%D|%Y|%y|%a|%b|%j|%m|%d|%h|%s|%w'); @@ -9800,7 +9800,7 @@ INPUT select table_name, auto_increment from information_schema.tables where table_schema = 'test' and table_name in ('t1', 't2'); END OUTPUT -select table_name, `auto_increment` from information_schema.`tables` where table_schema = 'test' and table_name in ('t1', 't2') +select `table_name`, `auto_increment` from information_schema.`tables` where table_schema = 'test' and `table_name` in ('t1', 't2') END INPUT select * from t1 where uncompress(a) is null; @@ -10106,7 +10106,7 @@ INPUT select UNIQUE_CONSTRAINT_NAME from information_schema.referential_constraints where constraint_schema = schema(); END OUTPUT -select UNIQUE_CONSTRAINT_NAME from information_schema.referential_constraints where constraint_schema = schema() +select UNIQUE_CONSTRAINT_NAME from information_schema.referential_constraints where `constraint_schema` = schema() END INPUT select 1e8 sum(distinct df) from t1; @@ -10250,7 +10250,7 @@ INPUT select column_name as 'Field',column_type as 'Type',is_nullable as 'Null',column_key as 'Key',column_default as 'Default',extra as 'Extra' from information_schema.columns where table_schema='mysqltest_db1' and table_name='t_column_priv_only'; END OUTPUT -select column_name as Field, column_type as Type, is_nullable as `Null`, column_key as `Key`, column_default as `Default`, extra as Extra from information_schema.`columns` where table_schema = 'mysqltest_db1' and table_name = 't_column_priv_only' +select `column_name` as Field, column_type as Type, is_nullable as `Null`, column_key as `Key`, column_default as `Default`, extra as Extra from information_schema.`columns` where table_schema = 'mysqltest_db1' and `table_name` = 't_column_priv_only' END INPUT select dayname("1962-03-03"),dayname("1962-03-03")+0; @@ -10382,7 +10382,7 @@ INPUT select * from `information_schema`.`COLUMNS` where `TABLE_NAME` = NULL; END OUTPUT -select * from information_schema.`COLUMNS` where TABLE_NAME = null +select * from information_schema.`COLUMNS` where `TABLE_NAME` = null END INPUT select f1 from t1 where cast("2006-1-1" as date) between f1 and cast('zzz' as date); @@ -10556,13 +10556,13 @@ INPUT select table_name, data_type, column_type from information_schema.columns where column_name = 'numeric_precision' and table_schema = 'information_schema'; END OUTPUT -select table_name, data_type, column_type from information_schema.`columns` where column_name = 'numeric_precision' and table_schema = 'information_schema' +select `table_name`, data_type, column_type from information_schema.`columns` where `column_name` = 'numeric_precision' and table_schema = 'information_schema' END INPUT select * from `information_schema`.`TABLE_CONSTRAINTS` where `TABLE_NAME` = NULL; END OUTPUT -select * from information_schema.TABLE_CONSTRAINTS where TABLE_NAME = null +select * from information_schema.TABLE_CONSTRAINTS where `TABLE_NAME` = null END INPUT select md5(name) from bug20536; @@ -10657,8 +10657,8 @@ END INPUT select uuid() into @my_uuid; END -ERROR -syntax error at position 28 near 'my_uuid' +OUTPUT +select uuid() from dual into @my_uuid END INPUT select NULLIF(NULL,NULL), NULLIF(NULL,1), NULLIF(NULL,1.0), NULLIF(NULL,"test"); @@ -10898,7 +10898,7 @@ INPUT select column_name, privileges from columns where table_name='user' and column_name like '%o%' order by column_name; END OUTPUT -select column_name, `privileges` from `columns` where table_name = 'user' and column_name like '%o%' order by column_name asc +select `column_name`, `privileges` from `columns` where `table_name` = 'user' and `column_name` like '%o%' order by `column_name` asc END INPUT select case when 1<0 then "TRUE" else "FALSE" END; @@ -10963,8 +10963,8 @@ END INPUT select i from v1 where i = 1 into k; END -ERROR -syntax error at position 36 near 'k' +OUTPUT +select i from v1 where i = 1 into k END INPUT select a, t1.*, b from t1; @@ -10982,7 +10982,7 @@ INPUT select schema_name from information_schema.schemata ORDER BY schema_name; END OUTPUT -select schema_name from information_schema.schemata order by schema_name asc +select `schema_name` from information_schema.schemata order by `schema_name` asc END INPUT select id, avg(value1), std(value1), variance(value1) from t1 group by id; @@ -11084,7 +11084,7 @@ INPUT select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name = 'tm' and index_name = 'w' order by table_name; END OUTPUT -select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name = 'tm' and index_name = 'w' order by table_name asc +select `table_name`, index_type from information_schema.statistics where table_schema = 'test' and `table_name` = 'tm' and index_name = 'w' order by `table_name` asc END INPUT select * from t3 order by b,a limit 3; @@ -11522,7 +11522,7 @@ INPUT select TABLE_NAME from information_schema.tables where table_schema='test' order by TABLE_NAME; END OUTPUT -select TABLE_NAME from information_schema.`tables` where table_schema = 'test' order by TABLE_NAME asc +select `TABLE_NAME` from information_schema.`tables` where table_schema = 'test' order by `TABLE_NAME` asc END INPUT select * from ((t3 natural join (t1 natural join t2)) natural join t4) natural join t5; @@ -11780,7 +11780,7 @@ INPUT select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name = 'tm' and index_name = 'q' order by table_name; END OUTPUT -select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name = 'tm' and index_name = 'q' order by table_name asc +select `table_name`, index_type from information_schema.statistics where table_schema = 'test' and `table_name` = 'tm' and index_name = 'q' order by `table_name` asc END INPUT select ST_DISTANCE(ST_GeomFromText('linestring(0 0, 3 6, 6 3, 0 0)'), ST_GeomFromText('polygon((2 2, 3 4, 4 3, 2 2))')); @@ -11804,7 +11804,7 @@ INPUT select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name like 't%' and index_name = 'p' order by table_name; END OUTPUT -select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name like 't%' and index_name = 'p' order by table_name asc +select `table_name`, index_type from information_schema.statistics where table_schema = 'test' and `table_name` like 't%' and index_name = 'p' order by `table_name` asc END INPUT select last_day('2000-02-05') as a, from_days(to_days("960101")) as b; @@ -11822,7 +11822,7 @@ INPUT select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='' AND TABLE_NAME=''; END OUTPUT -select count(*) from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = '' and TABLE_NAME = '' +select count(*) from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = '' and `TABLE_NAME` = '' END INPUT select insert('hello', 4294967297, 1, 'hi'); @@ -12320,7 +12320,7 @@ INPUT select table_name, column_name, data_type from information_schema.columns where table_schema = 'test' and table_name in ('t1', 't2'); END OUTPUT -select table_name, column_name, data_type from information_schema.`columns` where table_schema = 'test' and table_name in ('t1', 't2') +select `table_name`, `column_name`, data_type from information_schema.`columns` where table_schema = 'test' and `table_name` in ('t1', 't2') END INPUT select substring_index('aaaaaaaaa1','aa',3); @@ -12332,7 +12332,7 @@ INPUT select * from information_schema.views where table_schema != 'sys' order by table_schema, table_name; END OUTPUT -select * from information_schema.views where table_schema != 'sys' order by table_schema asc, table_name asc +select * from information_schema.views where table_schema != 'sys' order by table_schema asc, `table_name` asc END INPUT select straight_join from t1,t2 force index (primary) where t1.a=t2.a; @@ -12464,7 +12464,7 @@ INPUT select db, table_name, table_priv from mysql.tables_priv where user='mysqluser10' and host='localhost'; END OUTPUT -select db, table_name, table_priv from mysql.tables_priv where `user` = 'mysqluser10' and host = 'localhost' +select db, `table_name`, table_priv from mysql.tables_priv where `user` = 'mysqluser10' and host = 'localhost' END INPUT select std(o1/o2) from bug22555; @@ -12518,7 +12518,7 @@ INPUT select table_name from tables where table_name='user'; END OUTPUT -select table_name from `tables` where table_name = 'user' +select `table_name` from `tables` where `table_name` = 'user' END INPUT select rpad('abcd',7,'ab'),lpad('abcd',7,'ab'); @@ -12769,8 +12769,8 @@ END INPUT select @@sql_mode into @full_mode; END -ERROR -syntax error at position 34 near 'full_mode' +OUTPUT +select @@sql_mode from dual into @full_mode END INPUT select @a, @b; @@ -12800,7 +12800,7 @@ INPUT select table_name, column_name, privileges from information_schema.columns where table_schema = 'mysqltest' and table_name = 'v1' order by table_name, column_name; END OUTPUT -select table_name, column_name, `privileges` from information_schema.`columns` where table_schema = 'mysqltest' and table_name = 'v1' order by table_name asc, column_name asc +select `table_name`, `column_name`, `privileges` from information_schema.`columns` where table_schema = 'mysqltest' and `table_name` = 'v1' order by `table_name` asc, `column_name` asc END INPUT select * from t1 order by a,b; @@ -12962,7 +12962,7 @@ INPUT select table_name from information_schema.tables where table_schema = 'test' and table_name not in (select table_name from information_schema.columns where table_schema = 'test' and column_name = 'f3') order by table_name; END OUTPUT -select table_name from information_schema.`tables` where table_schema = 'test' and table_name not in (select table_name from information_schema.`columns` where table_schema = 'test' and column_name = 'f3') order by table_name asc +select `table_name` from information_schema.`tables` where table_schema = 'test' and `table_name` not in (select `table_name` from information_schema.`columns` where table_schema = 'test' and `column_name` = 'f3') order by `table_name` asc END INPUT select (select t2.* as 'x' from t2) from t1; @@ -13100,7 +13100,7 @@ INPUT select c,table_name from v1 inner join information_schema.TABLES v2 on (v1.c=v2.table_name) where v1.c rlike "t[1-5]{1}$" order by c; END OUTPUT -select c, table_name from v1 join information_schema.`TABLES` as v2 on v1.c = v2.table_name where v1.c regexp 't[1-5]{1}$' order by c asc +select c, `table_name` from v1 join information_schema.`TABLES` as v2 on v1.c = v2.`table_name` where v1.c regexp 't[1-5]{1}$' order by c asc END INPUT select * from t1 natural join t2 where t1.b > 0; @@ -13178,7 +13178,7 @@ INPUT select * from `information_schema`.`PARTITIONS` where `TABLE_NAME` = NULL; END OUTPUT -select * from information_schema.`PARTITIONS` where TABLE_NAME = null +select * from information_schema.`PARTITIONS` where `TABLE_NAME` = null END INPUT select * from (t1 cross join t2) join (t3 cross join t4) on (a < y and t2.b < t3.c); @@ -13352,7 +13352,7 @@ INPUT select db, table_name, table_priv from mysql.tables_priv where user='mysqluser1' and host='localhost'; END OUTPUT -select db, table_name, table_priv from mysql.tables_priv where `user` = 'mysqluser1' and host = 'localhost' +select db, `table_name`, table_priv from mysql.tables_priv where `user` = 'mysqluser1' and host = 'localhost' END INPUT select a1,a2,b,min(c),max(c) from t1 where (c > 'b1') group by a1,a2,b; @@ -13448,7 +13448,7 @@ INPUT select table_name from information_schema.TABLES where table_schema = "mysqltest" and table_name rlike "t[1-5]{1}$" order by table_name; END OUTPUT -select table_name from information_schema.`TABLES` where table_schema = 'mysqltest' and table_name regexp 't[1-5]{1}$' order by table_name asc +select `table_name` from information_schema.`TABLES` where table_schema = 'mysqltest' and `table_name` regexp 't[1-5]{1}$' order by `table_name` asc END INPUT select count(*) from T1; @@ -13526,7 +13526,7 @@ INPUT select CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH from information_schema.columns where table_schema='test' and table_name = 't1'; END OUTPUT -select CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH from information_schema.`columns` where table_schema = 'test' and table_name = 't1' +select CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH from information_schema.`columns` where table_schema = 'test' and `table_name` = 't1' END INPUT select st_touches(ST_GeomFromText('point(0 0)'), ST_GeomFromText('point(1 1)')); @@ -13658,7 +13658,7 @@ INPUT select AUTO_INCREMENT from information_schema.tables where table_name = 't1'; END OUTPUT -select `AUTO_INCREMENT` from information_schema.`tables` where table_name = 't1' +select `AUTO_INCREMENT` from information_schema.`tables` where `table_name` = 't1' END INPUT select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%'; @@ -13760,7 +13760,7 @@ INPUT select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name = 'tm' and index_name = 'v' order by table_name; END OUTPUT -select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name = 'tm' and index_name = 'v' order by table_name asc +select `table_name`, index_type from information_schema.statistics where table_schema = 'test' and `table_name` = 'tm' and index_name = 'v' order by `table_name` asc END INPUT select v; @@ -13970,7 +13970,7 @@ INPUT select * from information_schema.tables where table_name = NULL; END OUTPUT -select * from information_schema.`tables` where table_name = null +select * from information_schema.`tables` where `table_name` = null END INPUT select max(7) from t1i; @@ -14048,7 +14048,7 @@ INPUT select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name ='tm' order by table_name; END OUTPUT -select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name = 'tm' order by table_name asc +select `table_name`, index_type from information_schema.statistics where table_schema = 'test' and `table_name` = 'tm' order by `table_name` asc END INPUT select count(*) from t1 where id1 > 90; @@ -14096,7 +14096,7 @@ INPUT select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name like 't%' and index_name = 'v' order by table_name; END OUTPUT -select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name like 't%' and index_name = 'v' order by table_name asc +select `table_name`, index_type from information_schema.statistics where table_schema = 'test' and `table_name` like 't%' and index_name = 'v' order by `table_name` asc END INPUT select timestamp("2001-13-01", "01:01:01.000001"); @@ -14132,7 +14132,7 @@ INPUT select TABLE_ROWS from information_schema.tables where table_schema="information_schema" and table_name="COLUMNS"; END OUTPUT -select TABLE_ROWS from information_schema.`tables` where table_schema = 'information_schema' and table_name = 'COLUMNS' +select TABLE_ROWS from information_schema.`tables` where table_schema = 'information_schema' and `table_name` = 'COLUMNS' END INPUT select hex(ujis), hex(ucs2), hex(ujis2), name from t1; @@ -14348,7 +14348,7 @@ INPUT select table_schema, table_name, table_comment from information_schema.tables where table_schema = 'test' and table_name like 't_bug44738_%'; END OUTPUT -select table_schema, table_name, table_comment from information_schema.`tables` where table_schema = 'test' and table_name like 't_bug44738_%' +select table_schema, `table_name`, table_comment from information_schema.`tables` where table_schema = 'test' and `table_name` like 't_bug44738_%' END INPUT select count(*) from t3 where id3 > 90; @@ -14510,7 +14510,7 @@ INPUT select * from information_schema.SCHEMATA where schema_name > 'm' ORDER BY SCHEMA_NAME; END OUTPUT -select * from information_schema.SCHEMATA where schema_name > 'm' order by SCHEMA_NAME asc +select * from information_schema.SCHEMATA where `schema_name` > 'm' order by `SCHEMA_NAME` asc END INPUT select cast(ltrim(' 20.06 ') as decimal(19,2)); @@ -14882,7 +14882,7 @@ INPUT select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name = 'tm' and index_name = 'l' order by table_name; END OUTPUT -select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name = 'tm' and index_name = 'l' order by table_name asc +select `table_name`, index_type from information_schema.statistics where table_schema = 'test' and `table_name` = 'tm' and index_name = 'l' order by `table_name` asc END INPUT select log(2,-1); @@ -14971,8 +14971,8 @@ END INPUT select ST_GeomFromText('linestring(5 5, 15 4)') into @l; END -ERROR -syntax error at position 56 near 'l' +OUTPUT +select st_geometryfromtext('linestring(5 5, 15 4)') from dual into @l END INPUT select a1,a2,b,min(c),max(c) from t1 where a1 >= 'c' or a2 < 'b' group by a1,a2,b; @@ -15614,19 +15614,19 @@ INPUT select Host,Db,User,Table_name,Column_name,Column_priv from mysql.columns_priv order by Column_name; END OUTPUT -select Host, Db, `User`, Table_name, Column_name, Column_priv from mysql.columns_priv order by Column_name asc +select Host, Db, `User`, `Table_name`, `Column_name`, Column_priv from mysql.columns_priv order by `Column_name` asc END INPUT select COLUMN_NAME from information_schema.columns where table_schema='test' order by COLUMN_NAME; END OUTPUT -select COLUMN_NAME from information_schema.`columns` where table_schema = 'test' order by COLUMN_NAME asc +select `COLUMN_NAME` from information_schema.`columns` where table_schema = 'test' order by `COLUMN_NAME` asc END INPUT select @@GLOBAL.relay_log_info_repository into @save_relay_log_info_repository; END -ERROR -syntax error at position 79 near 'save_relay_log_info_repository' +OUTPUT +select @@global.relay_log_info_repository from dual into @save_relay_log_info_repository END INPUT select SUBSTR('abcdefg',-1,-1) FROM DUAL; @@ -15649,8 +15649,8 @@ END INPUT select floor(conv(@my_uuidate,16,10)/@my_uuid_one_day) into @my_uuid_date; END -ERROR -syntax error at position 74 near 'my_uuid_date' +OUTPUT +select floor(conv(@my_uuidate, 16, 10) / @my_uuid_one_day) from dual into @my_uuid_date END INPUT select a1,max(c),min(c) from t3 where (a2 = 'a') and (b = 'b') group by a1; @@ -15860,7 +15860,7 @@ INPUT select table_name, column_name, privileges from information_schema.columns where table_schema = 'mysqltest' and table_name = 't1' order by table_name, column_name; END OUTPUT -select table_name, column_name, `privileges` from information_schema.`columns` where table_schema = 'mysqltest' and table_name = 't1' order by table_name asc, column_name asc +select `table_name`, `column_name`, `privileges` from information_schema.`columns` where table_schema = 'mysqltest' and `table_name` = 't1' order by `table_name` asc, `column_name` asc END INPUT select hex(ujis), hex(ucs2), hex(ujis2), name from t1 where ujis<>ujis2 order by ujis; @@ -15961,8 +15961,8 @@ END INPUT select index_length into @paked_keys_size from information_schema.tables where table_name='t1'; END -ERROR -syntax error at position 42 near 'paked_keys_size' +OUTPUT +select index_length from information_schema.`tables` where `table_name` = 't1' into @paked_keys_size END INPUT select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf16_croatian_ci; @@ -16033,8 +16033,8 @@ END INPUT select CONNECTION_ID() into @thread_id; END -ERROR -syntax error at position 39 near 'thread_id' +OUTPUT +select CONNECTION_ID() from dual into @thread_id END INPUT select * from information_schema.CHARACTER_SETS where CHARACTER_SET_NAME like 'latin1%' order by character_set_name; @@ -16070,7 +16070,7 @@ INPUT select referenced_table_schema, referenced_table_name from information_schema.key_column_usage where constraint_schema = 'db-1' and table_schema != 'PERFORMANCE_SCHEMA' order by referenced_table_schema, referenced_table_name; END OUTPUT -select referenced_table_schema, referenced_table_name from information_schema.key_column_usage where constraint_schema = 'db-1' and table_schema != 'PERFORMANCE_SCHEMA' order by referenced_table_schema asc, referenced_table_name asc +select referenced_table_schema, referenced_table_name from information_schema.key_column_usage where `constraint_schema` = 'db-1' and table_schema != 'PERFORMANCE_SCHEMA' order by referenced_table_schema asc, referenced_table_name asc END INPUT select min(a1) from t1; @@ -16112,7 +16112,7 @@ INPUT select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name like 't%' and index_name = 'q' order by table_name; END OUTPUT -select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name like 't%' and index_name = 'q' order by table_name asc +select `table_name`, index_type from information_schema.statistics where table_schema = 'test' and `table_name` like 't%' and index_name = 'q' order by `table_name` asc END INPUT select export_set(5, name, upper(name)) from bug20536; @@ -16220,7 +16220,7 @@ INPUT select * from information_schema.partitions where table_schema="test" and table_name="t4"; END OUTPUT -select * from information_schema.`partitions` where table_schema = 'test' and table_name = 't4' +select * from information_schema.`partitions` where table_schema = 'test' and `table_name` = 't4' END INPUT select hex(group_concat(a)) from t1; @@ -16406,7 +16406,7 @@ INPUT select * from information_schema.schemata where schema_name = NULL; END OUTPUT -select * from information_schema.schemata where schema_name = null +select * from information_schema.schemata where `schema_name` = null END INPUT select rpad('a',4,'1'),rpad('a',4,'12'),rpad('abcd',3,'12'), rpad(11, 10 , 22), rpad("ab", 10, 22); @@ -16471,14 +16471,14 @@ END INPUT select i from t1 where i = 1 into k; END -ERROR -syntax error at position 36 near 'k' +OUTPUT +select i from t1 where i = 1 into k END INPUT select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name = 'tm' and index_name = 'p' order by table_name; END OUTPUT -select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name = 'tm' and index_name = 'p' order by table_name asc +select `table_name`, index_type from information_schema.statistics where table_schema = 'test' and `table_name` = 'tm' and index_name = 'p' order by `table_name` asc END INPUT select concat('*',v,'*',c,'*',t,'*') as qq from t1 where v='a' order by length(concat('*',v,'*',c,'*',t,'*')); @@ -16502,7 +16502,7 @@ INPUT select column_default from information_schema.columns where table_name= 't1'; END OUTPUT -select column_default from information_schema.`columns` where table_name = 't1' +select column_default from information_schema.`columns` where `table_name` = 't1' END INPUT select * from t1 where a like "abc%"; @@ -16556,7 +16556,7 @@ INPUT select * from information_schema.key_column_usage where TABLE_NAME= "vo"; END OUTPUT -select * from information_schema.key_column_usage where TABLE_NAME = 'vo' +select * from information_schema.key_column_usage where `TABLE_NAME` = 'vo' END INPUT select * from t1 where a='a' order by binary a; @@ -16952,7 +16952,7 @@ INPUT select table_name, column_name, data_type from information_schema.columns where table_schema not in ('performance_schema', 'sys') and data_type = 'datetime' and table_name COLLATE utf8_general_ci not like 'innodb_%' order by table_name, column_name; END OUTPUT -select table_name, column_name, data_type from information_schema.`columns` where table_schema not in ('performance_schema', 'sys') and data_type = 'datetime' and table_name collate utf8_general_ci not like 'innodb_%' order by table_name asc, column_name asc +select `table_name`, `column_name`, data_type from information_schema.`columns` where table_schema not in ('performance_schema', 'sys') and data_type = 'datetime' and `table_name` collate utf8_general_ci not like 'innodb_%' order by `table_name` asc, `column_name` asc END INPUT select hex(@utf81:= CONVERT(@ujis1 USING utf8)); @@ -17210,7 +17210,7 @@ INPUT select table_name from information_schema.views where table_schema='test' order by table_name; END OUTPUT -select table_name from information_schema.views where table_schema = 'test' order by table_name asc +select `table_name` from information_schema.views where table_schema = 'test' order by `table_name` asc END INPUT select row('A','b','c') = row('a' COLLATE latin1_bin,'b','c'); @@ -17462,7 +17462,7 @@ INPUT select table_type from information_schema.tables where table_name="v1"; END OUTPUT -select table_type from information_schema.`tables` where table_name = 'v1' +select table_type from information_schema.`tables` where `table_name` = 'v1' END INPUT select _latin1'a' regexp _latin1'A' collate latin1_bin; @@ -17678,7 +17678,7 @@ INPUT select c, v2.table_name from v1 right join information_schema.TABLES v2 on (v1.c=v2.table_name) where v1.c rlike "t[1-5]{1}$" order by c; END OUTPUT -select c, v2.table_name from v1 right join information_schema.`TABLES` as v2 on v1.c = v2.table_name where v1.c regexp 't[1-5]{1}$' order by c asc +select c, v2.`table_name` from v1 right join information_schema.`TABLES` as v2 on v1.c = v2.`table_name` where v1.c regexp 't[1-5]{1}$' order by c asc END INPUT select t1.i,t2.i,t3.i from t2 right join t3 on (t2.i=t3.i),t1 order by t1.i,t2.i,t3.i; @@ -17816,7 +17816,7 @@ INPUT select * from `information_schema`.`REFERENTIAL_CONSTRAINTS` where `TABLE_NAME` = NULL; END OUTPUT -select * from information_schema.REFERENTIAL_CONSTRAINTS where TABLE_NAME = null +select * from information_schema.REFERENTIAL_CONSTRAINTS where `TABLE_NAME` = null END INPUT select (1.175494351E-37 div 1.7976931348623157E+308); @@ -17863,8 +17863,8 @@ END INPUT select i from t1 where i = 1 into j; END -ERROR -syntax error at position 36 near 'j' +OUTPUT +select i from t1 where i = 1 into j END INPUT select c from t2; @@ -18019,8 +18019,8 @@ END INPUT select count(*) into n from t1; END -ERROR -syntax error at position 23 near 'n' +OUTPUT +select count(*) from t1 into n END INPUT select time("1997-12-31 25:59:59.000001"); @@ -18260,7 +18260,7 @@ INPUT select table_name from information_schema.TABLES where table_schema like "test%" order by table_name; END OUTPUT -select table_name from information_schema.`TABLES` where table_schema like 'test%' order by table_name asc +select `table_name` from information_schema.`TABLES` where table_schema like 'test%' order by `table_name` asc END INPUT select min(a1), max(a1) from t1 where a4 = 0.080; @@ -18302,7 +18302,7 @@ INPUT select host,db,user,table_name,column_name from mysql.columns_priv where user like 'mysqltest_%' order by host,db,user,table_name,column_name; END OUTPUT -select host, db, `user`, table_name, column_name from mysql.columns_priv where `user` like 'mysqltest_%' order by host asc, db asc, `user` asc, table_name asc, column_name asc +select host, db, `user`, `table_name`, `column_name` from mysql.columns_priv where `user` like 'mysqltest_%' order by host asc, db asc, `user` asc, `table_name` asc, `column_name` asc END INPUT select * from renamed_slow_log; @@ -18752,7 +18752,7 @@ INPUT select * from `information_schema`.`key_column_usage` where `TABLE_NAME` = NULL; END OUTPUT -select * from information_schema.key_column_usage where TABLE_NAME = null +select * from information_schema.key_column_usage where `TABLE_NAME` = null END INPUT select user() like "%@%"; @@ -19238,7 +19238,7 @@ INPUT select column_name from information_schema.columns where table_name='t1' order by column_name; END OUTPUT -select column_name from information_schema.`columns` where table_name = 't1' order by column_name asc +select `column_name` from information_schema.`columns` where `table_name` = 't1' order by `column_name` asc END INPUT select * from t1 where t1="ABC"; @@ -19322,7 +19322,7 @@ INPUT select character_maximum_length, character_octet_length from information_schema.columns where table_name='t1'; END OUTPUT -select character_maximum_length, character_octet_length from information_schema.`columns` where table_name = 't1' +select character_maximum_length, character_octet_length from information_schema.`columns` where `table_name` = 't1' END INPUT select soundex(_utf8mb4 0xD091D092D093); @@ -19622,7 +19622,7 @@ INPUT select t.table_name, group_concat(t.table_schema, '.', t.table_name), count(*) as num1 from information_schema.tables t inner join information_schema.columns c1 on t.table_schema = c1.table_schema AND t.table_name = c1.table_name where t.table_name not like 'ndb%' and t.table_schema = 'information_schema' and c1.ordinal_position = (select isnull(c2.column_type) - isnull(group_concat(c2.table_schema, '.', c2.table_name)) + count(*) as num from information_schema.columns c2 where c2.table_schema='information_schema' and (c2.column_type = 'varchar(7)' or c2.column_type = 'varchar(20)') group by c2.column_type order by num limit 1) and t.table_name not like 'INNODB_%' group by t.table_name order by num1, t.table_name COLLATE utf8_general_ci; END OUTPUT -select t.table_name, group_concat(t.table_schema, '.', t.table_name), count(*) as num1 from information_schema.`tables` as t join information_schema.`columns` as c1 on t.table_schema = c1.table_schema and t.table_name = c1.table_name where t.table_name not like 'ndb%' and t.table_schema = 'information_schema' and c1.ordinal_position = (select isnull(c2.column_type) - isnull(group_concat(c2.table_schema, '.', c2.table_name)) + count(*) as num from information_schema.`columns` as c2 where c2.table_schema = 'information_schema' and (c2.column_type = 'varchar(7)' or c2.column_type = 'varchar(20)') group by c2.column_type order by num asc limit 1) and t.table_name not like 'INNODB_%' group by t.table_name order by num1 asc, t.table_name collate utf8_general_ci asc +select t.`table_name`, group_concat(t.table_schema, '.', t.`table_name`), count(*) as num1 from information_schema.`tables` as t join information_schema.`columns` as c1 on t.table_schema = c1.table_schema and t.`table_name` = c1.`table_name` where t.`table_name` not like 'ndb%' and t.table_schema = 'information_schema' and c1.ordinal_position = (select isnull(c2.column_type) - isnull(group_concat(c2.table_schema, '.', c2.`table_name`)) + count(*) as num from information_schema.`columns` as c2 where c2.table_schema = 'information_schema' and (c2.column_type = 'varchar(7)' or c2.column_type = 'varchar(20)') group by c2.column_type order by num asc limit 1) and t.`table_name` not like 'INNODB_%' group by t.`table_name` order by num1 asc, t.`table_name` collate utf8_general_ci asc END INPUT select a1,a2,b, max(c) from t2 where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') group by a1,a2,b; @@ -19760,7 +19760,7 @@ INPUT select * from `information_schema`.`STATISTICS` where `TABLE_NAME` = NULL; END OUTPUT -select * from information_schema.STATISTICS where TABLE_NAME = null +select * from information_schema.STATISTICS where `TABLE_NAME` = null END INPUT select t1.i,t2.i,t3.i from t2 natural right join t3,t1 order by t1.i,t2.i,t3.i; @@ -19874,7 +19874,7 @@ INPUT select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name like 't%' and index_name = 'k' order by table_name; END OUTPUT -select table_name, index_type from information_schema.statistics where table_schema = 'test' and table_name like 't%' and index_name = 'k' order by table_name asc +select `table_name`, index_type from information_schema.statistics where table_schema = 'test' and `table_name` like 't%' and index_name = 'k' order by `table_name` asc END INPUT select * from t1 order by a; @@ -20222,7 +20222,7 @@ INPUT select host,db,user,table_name,column_name from mysql.columns_priv where user = 'mysqltest_1' order by host,db,user,table_name,column_name; END OUTPUT -select host, db, `user`, table_name, column_name from mysql.columns_priv where `user` = 'mysqltest_1' order by host asc, db asc, `user` asc, table_name asc, column_name asc +select host, db, `user`, `table_name`, `column_name` from mysql.columns_priv where `user` = 'mysqltest_1' order by host asc, db asc, `user` asc, `table_name` asc, `column_name` asc END INPUT select week("2000-01-06",1) as '2000', week("2001-01-06",1) as '2001', week("2002-01-06",1) as '2002',week("2003-01-06",1) as '2003', week("2004-01-06",1) as '2004', week("2005-01-06",1) as '2005', week("2006-01-06",1) as '2006'; @@ -20528,7 +20528,7 @@ INPUT select table_name, is_updatable from information_schema.views where table_schema != 'sys' order by table_name; END OUTPUT -select table_name, is_updatable from information_schema.views where table_schema != 'sys' order by table_name asc +select `table_name`, is_updatable from information_schema.views where table_schema != 'sys' order by `table_name` asc END INPUT select events.binlog from events; @@ -20564,7 +20564,7 @@ INPUT select * from information_schema.partitions where table_schema="test" and table_name="t2"; END OUTPUT -select * from information_schema.`partitions` where table_schema = 'test' and table_name = 't2' +select * from information_schema.`partitions` where table_schema = 'test' and `table_name` = 't2' END INPUT select a b, b c from t1 as t2; @@ -20731,8 +20731,8 @@ END INPUT select ST_GeomFromText('linestring(-2 -2, 12 7)') into @l; END -ERROR -syntax error at position 58 near 'l' +OUTPUT +select st_geometryfromtext('linestring(-2 -2, 12 7)') from dual into @l END INPUT select RANDOM_BYTES(1025); @@ -20821,8 +20821,8 @@ END INPUT select ST_GeomFromText('linestring(6 2, 12 1)') into @l; END -ERROR -syntax error at position 56 near 'l' +OUTPUT +select st_geometryfromtext('linestring(6 2, 12 1)') from dual into @l END INPUT select hex(substr(_utf16 0x00e400e5D800DC00,-2)); @@ -21157,8 +21157,8 @@ END INPUT select i from t1 where i=1 into k; END -ERROR -syntax error at position 34 near 'k' +OUTPUT +select i from t1 where i = 1 into k END INPUT select s.*, '*', m.*, (s.match_1_h - m.home) UUX from t2 s straight_join t1 m where m.match_id = 1 order by UUX desc; @@ -21200,7 +21200,7 @@ INPUT select * from information_schema.KEY_COLUMN_USAGE where TABLE_SCHEMA= "test" order by TABLE_SCHEMA, TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME; END OUTPUT -select * from information_schema.KEY_COLUMN_USAGE where TABLE_SCHEMA = 'test' order by TABLE_SCHEMA asc, TABLE_NAME asc, CONSTRAINT_NAME asc, COLUMN_NAME asc +select * from information_schema.KEY_COLUMN_USAGE where TABLE_SCHEMA = 'test' order by TABLE_SCHEMA asc, `TABLE_NAME` asc, `CONSTRAINT_NAME` asc, `COLUMN_NAME` asc END INPUT select left('hello', -4294967295); @@ -21290,7 +21290,7 @@ INPUT select TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATETIME_PRECISION from information_schema.columns where TABLE_SCHEMA='mysqltest' order by table_name, column_name; END OUTPUT -select TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATETIME_PRECISION from information_schema.`columns` where TABLE_SCHEMA = 'mysqltest' order by table_name asc, column_name asc +select `TABLE_NAME`, `COLUMN_NAME`, DATA_TYPE, DATETIME_PRECISION from information_schema.`columns` where TABLE_SCHEMA = 'mysqltest' order by `table_name` asc, `column_name` asc END INPUT select left('hello',2),right('hello',2),substring('hello',2,2),mid('hello',1,5); @@ -21506,7 +21506,7 @@ INPUT select column_name from information_schema.columns where table_schema='test' and table_name='t2'; END OUTPUT -select column_name from information_schema.`columns` where table_schema = 'test' and table_name = 't2' +select `column_name` from information_schema.`columns` where table_schema = 'test' and `table_name` = 't2' END INPUT select if(1,st,st) s from t1 order by s; @@ -22226,7 +22226,7 @@ INPUT select c,table_name from v1 left join information_schema.TABLES v2 on (v1.c=v2.table_name) where v1.c rlike "t[1-5]{1}$" order by c; END OUTPUT -select c, table_name from v1 left join information_schema.`TABLES` as v2 on v1.c = v2.table_name where v1.c regexp 't[1-5]{1}$' order by c asc +select c, `table_name` from v1 left join information_schema.`TABLES` as v2 on v1.c = v2.`table_name` where v1.c regexp 't[1-5]{1}$' order by c asc END INPUT select row_count(); @@ -22424,7 +22424,7 @@ INPUT select SCHEMA_NAME from information_schema.schemata where schema_name='имя_базы_в_кодировке_утф8_длиной_больше_чем_45'; END OUTPUT -select SCHEMA_NAME from information_schema.schemata where schema_name = 'имя_базы_в_кодировке_утф8_длиной_больше_чем_45' +select `SCHEMA_NAME` from information_schema.schemata where `schema_name` = 'имя_базы_в_кодировке_утф8_длиной_больше_чем_45' END INPUT select char(0xd18f using utf8mb4); @@ -22603,8 +22603,8 @@ END INPUT select @@GLOBAL.expire_logs_days into @save_expire_logs_days; END -ERROR -syntax error at position 61 near 'save_expire_logs_days' +OUTPUT +select @@global.expire_logs_days from dual into @save_expire_logs_days END INPUT select * from t1 where a=if(b<10,_ucs2 0x0062,_ucs2 0x00C0); @@ -23084,7 +23084,7 @@ INPUT select Host,Db,User,Table_name,Column_name,Column_priv from mysql.columns_priv; END OUTPUT -select Host, Db, `User`, Table_name, Column_name, Column_priv from mysql.columns_priv +select Host, Db, `User`, `Table_name`, `Column_name`, Column_priv from mysql.columns_priv END INPUT select * from t1 group by f1; diff --git a/go/vt/sqlparser/testdata/union_cases.txt b/go/vt/sqlparser/testdata/union_cases.txt index 2f3505a84ff..47ff5cc00e1 100644 --- a/go/vt/sqlparser/testdata/union_cases.txt +++ b/go/vt/sqlparser/testdata/union_cases.txt @@ -229,8 +229,8 @@ END INPUT SELECT 1 UNION SELECT 1 INTO @var FOR UPDATE; END -ERROR -syntax error at position 34 near 'var' +OUTPUT +select 1 from dual union (select 1 from dual into @var) for update END INPUT select st_intersects(st_union(ST_GeomFromText('point(1 1)'), ST_GeomFromText('multipoint(2 2, 3 3)')), st_intersection(ST_GeomFromText('point(0 0)'), ST_GeomFromText('point(1 1)'))); @@ -1075,8 +1075,8 @@ END INPUT SELECT 1 UNION SELECT 1 FOR UPDATE INTO @var; END -ERROR -syntax error at position 45 near 'var' +OUTPUT +select 1 from dual union select 1 from dual for update END INPUT SELECT ST_ASTEXT(ST_VALIDATE(ST_UNION(ST_GEOMFROMTEXT('MULTIPOLYGON(((-7 -9,-3 7,0 -10,-6 5,10 10,-3 -4,7 9,2 -9)),((1 -10,-3 10,-2 5)))'), ST_GEOMFROMTEXT('POLYGON((6 10,-7 10,-1 -6,0 5,5 4,1 -9,1 3,-10 -7,-10 8))')))) as result; diff --git a/go/vt/sqlparser/token.go b/go/vt/sqlparser/token.go index 58f575f8642..bd869b2d283 100644 --- a/go/vt/sqlparser/token.go +++ b/go/vt/sqlparser/token.go @@ -35,9 +35,10 @@ type Tokenizer struct { SkipSpecialComments bool SkipToEnd bool LastError error - ParseTree Statement + ParseTrees []Statement BindVars map[string]struct{} + lastTokenType int lastToken string posVarIndex int partialDDL Statement @@ -63,7 +64,15 @@ func (p *Parser) NewStringTokenizer(sql string) *Tokenizer { // This function is used by go yacc. func (tkn *Tokenizer) Lex(lval *yySymType) int { if tkn.SkipToEnd { - return tkn.skipStatement() + // We need to check the last token type to + // prevent us from skipping the next query in a multi + // parse mode. If we don't check the last token, we + // will skip the next query. + if tkn.lastTokenType == ';' { + tkn.SkipToEnd = false + } else { + return tkn.skipStatement() + } } typ, val := tkn.Scan() @@ -81,6 +90,7 @@ func (tkn *Tokenizer) Lex(lval *yySymType) int { tkn.partialDDL = nil } lval.str = val + tkn.lastTokenType = typ tkn.lastToken = val return typ } @@ -703,13 +713,9 @@ func (tkn *Tokenizer) peek(dist int) uint16 { return uint16(tkn.buf[tkn.Pos+dist]) } -// reset clears any internal state. +// reset clears posVarIndex to reset the index count we assign to variables for a new query. func (tkn *Tokenizer) reset() { - tkn.ParseTree = nil - tkn.partialDDL = nil - tkn.specialComment = nil tkn.posVarIndex = 0 - tkn.SkipToEnd = false } func isLetter(ch uint16) bool { diff --git a/go/vt/sqlparser/utils_test.go b/go/vt/sqlparser/utils_test.go index 64339211917..f2519de6fdb 100644 --- a/go/vt/sqlparser/utils_test.go +++ b/go/vt/sqlparser/utils_test.go @@ -225,7 +225,7 @@ func TestReplaceTableQualifiers(t *testing.T) { { name: "complex select", in: "select table_name, lastpk from _vt.copy_state where vrepl_id = 1 and id in (select max(id) from _vt.copy_state where vrepl_id = 1 group by vrepl_id, table_name)", - out: "select table_name, lastpk from copy_state where vrepl_id = 1 and id in (select max(id) from copy_state where vrepl_id = 1 group by vrepl_id, table_name)", + out: "select `table_name`, lastpk from copy_state where vrepl_id = 1 and id in (select max(id) from copy_state where vrepl_id = 1 group by vrepl_id, `table_name`)", }, { name: "complex mixed exists select", @@ -237,7 +237,7 @@ func TestReplaceTableQualifiers(t *testing.T) { name: "derived table select", in: "select myder.id from (select max(id) as id from _vt.copy_state where vrepl_id = 1 group by vrepl_id, table_name) as myder where id = 1", newdb: "__vt-metadata", - out: "select myder.id from (select max(id) as id from `__vt-metadata`.copy_state where vrepl_id = 1 group by vrepl_id, table_name) as myder where id = 1", + out: "select myder.id from (select max(id) as id from `__vt-metadata`.copy_state where vrepl_id = 1 group by vrepl_id, `table_name`) as myder where id = 1", }, { name: "complex select", diff --git a/go/vt/vtgate/executor_select_test.go b/go/vt/vtgate/executor_select_test.go index 20290922bca..659bc38fa63 100644 --- a/go/vt/vtgate/executor_select_test.go +++ b/go/vt/vtgate/executor_select_test.go @@ -126,7 +126,7 @@ func TestSelectDBA(t *testing.T) { false) require.NoError(t, err) wantQueries = []*querypb.BoundQuery{{ - Sql: "select count(*) from INFORMATION_SCHEMA.`TABLES` as ist where ist.table_schema = :__vtschemaname /* VARCHAR */ and ist.table_name = :ist_table_name /* VARCHAR */", + Sql: "select count(*) from INFORMATION_SCHEMA.`TABLES` as ist where ist.table_schema = :__vtschemaname /* VARCHAR */ and ist.`table_name` = :ist_table_name /* VARCHAR */", BindVariables: map[string]*querypb.BindVariable{ "__vtschemaname": sqltypes.StringBindVariable("performance_schema"), "ist_table_name": sqltypes.StringBindVariable("foo"), @@ -142,7 +142,7 @@ func TestSelectDBA(t *testing.T) { false) require.NoError(t, err) wantQueries = []*querypb.BoundQuery{{ - Sql: "select 1 from information_schema.table_constraints where constraint_schema = :__vtschemaname /* VARCHAR */ and table_name = :table_name /* VARCHAR */", + Sql: "select 1 from information_schema.table_constraints where `constraint_schema` = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */", BindVariables: map[string]*querypb.BindVariable{ "__vtschemaname": sqltypes.StringBindVariable("vt_ks"), "table_name": sqltypes.StringBindVariable("user"), @@ -158,7 +158,7 @@ func TestSelectDBA(t *testing.T) { false) require.NoError(t, err) wantQueries = []*querypb.BoundQuery{{ - Sql: "select 1 from information_schema.table_constraints where constraint_schema = :__vtschemaname /* VARCHAR */", + Sql: "select 1 from information_schema.table_constraints where `constraint_schema` = :__vtschemaname /* VARCHAR */", BindVariables: map[string]*querypb.BindVariable{ "__vtschemaname": sqltypes.StringBindVariable("vt_ks"), }, @@ -484,7 +484,7 @@ func TestGen4SelectDBA(t *testing.T) { query, map[string]*querypb.BindVariable{}, false) require.NoError(t, err) - expected := "select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_SCHEMA, TABLE_NAME, CONSTRAINT_TYPE, `ENFORCED` from INFORMATION_SCHEMA.TABLE_CONSTRAINTS" + expected := "select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_SCHEMA, `TABLE_NAME`, CONSTRAINT_TYPE, `ENFORCED` from INFORMATION_SCHEMA.TABLE_CONSTRAINTS" wantQueries := []*querypb.BoundQuery{{Sql: expected, BindVariables: map[string]*querypb.BindVariable{}}} utils.MustMatch(t, wantQueries, sbc1.Queries) @@ -496,7 +496,7 @@ func TestGen4SelectDBA(t *testing.T) { false) require.NoError(t, err) wantQueries = []*querypb.BoundQuery{{ - Sql: "select count(*) from INFORMATION_SCHEMA.`TABLES` as ist where ist.table_schema = :__vtschemaname /* VARCHAR */ and ist.table_name = :ist_table_name1 /* VARCHAR */", + Sql: "select count(*) from INFORMATION_SCHEMA.`TABLES` as ist where ist.table_schema = :__vtschemaname /* VARCHAR */ and ist.`table_name` = :ist_table_name1 /* VARCHAR */", BindVariables: map[string]*querypb.BindVariable{ "ist_table_schema": sqltypes.StringBindVariable("performance_schema"), "__vtschemaname": sqltypes.StringBindVariable("performance_schema"), @@ -514,7 +514,7 @@ func TestGen4SelectDBA(t *testing.T) { false) require.NoError(t, err) wantQueries = []*querypb.BoundQuery{{ - Sql: "select :vtg1 /* INT64 */ from information_schema.table_constraints where constraint_schema = :__vtschemaname /* VARCHAR */ and table_name = :table_name1 /* VARCHAR */", + Sql: "select :vtg1 /* INT64 */ from information_schema.table_constraints where `constraint_schema` = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name1 /* VARCHAR */", BindVariables: map[string]*querypb.BindVariable{ "vtg1": sqltypes.Int64BindVariable(1), "constraint_schema": sqltypes.StringBindVariable("vt_ks"), @@ -530,7 +530,7 @@ func TestGen4SelectDBA(t *testing.T) { _, err = executor.Execute(context.Background(), nil, "TestSelectDBA", econtext.NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}), query, map[string]*querypb.BindVariable{}, false) require.NoError(t, err) wantQueries = []*querypb.BoundQuery{{ - Sql: "select :vtg1 /* INT64 */ from information_schema.table_constraints where constraint_schema = :__vtschemaname /* VARCHAR */", + Sql: "select :vtg1 /* INT64 */ from information_schema.table_constraints where `constraint_schema` = :__vtschemaname /* VARCHAR */", BindVariables: map[string]*querypb.BindVariable{ "vtg1": sqltypes.Int64BindVariable(1), "constraint_schema": sqltypes.StringBindVariable("vt_ks"), @@ -546,7 +546,7 @@ func TestGen4SelectDBA(t *testing.T) { query, map[string]*querypb.BindVariable{}) require.NoError(t, err) wantQueries = []*querypb.BoundQuery{{ - Sql: "select t.table_schema, t.table_name, c.column_name, c.column_type from information_schema.`tables` as t, information_schema.`columns` as c where t.table_schema = :__vtschemaname /* VARCHAR */ and c.table_schema = :__vtschemaname /* VARCHAR */ and c.table_schema = t.table_schema and c.table_name = t.table_name order by t.table_schema asc, t.table_name asc, c.column_name asc", + Sql: "select t.table_schema, t.`table_name`, c.`column_name`, c.column_type from information_schema.`tables` as t, information_schema.`columns` as c where t.table_schema = :__vtschemaname /* VARCHAR */ and c.table_schema = :__vtschemaname /* VARCHAR */ and c.table_schema = t.table_schema and c.`table_name` = t.`table_name` order by t.table_schema asc, t.`table_name` asc, c.`column_name` asc", BindVariables: map[string]*querypb.BindVariable{ "t_table_schema": sqltypes.StringBindVariable("TestExecutor"), "__replacevtschemaname": sqltypes.Int64BindVariable(1), @@ -3279,7 +3279,7 @@ func TestSelectFromInformationSchema(t *testing.T) { session.TargetString = "TestExecutor" _, err = exec(executor, session, "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = database()") require.NoError(t, err) - assert.Equal(t, []string{"select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = database()"}, + assert.Equal(t, []string{"select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = database()"}, sbc1.StringQueries()) // `USE TestXBadSharding` and then query info_schema about TestExecutor - should target TestExecutor and not use the default keyspace @@ -3287,7 +3287,7 @@ func TestSelectFromInformationSchema(t *testing.T) { session.TargetString = "TestXBadSharding" _, err = exec(executor, session, "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'TestExecutor'") require.NoError(t, err) - assert.Equal(t, []string{"select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */"}, + assert.Equal(t, []string{"select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */"}, sbc1.StringQueries()) } diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go index 970fa6a00be..838c3771ba2 100644 --- a/go/vt/vtgate/executor_test.go +++ b/go/vt/vtgate/executor_test.go @@ -2849,13 +2849,13 @@ func TestExecutorSettingsInTwoPC(t *testing.T) { expectedQueries: [][]string{ { "select '+08:00' from dual where @@time_zone != '+08:00'", - "set @@time_zone = '+08:00'", - "set @@time_zone = '+08:00'", + "set time_zone = '+08:00'", + "set time_zone = '+08:00'", "insert into user_extra(user_id) values (1)", "insert into user_extra(user_id) values (2)", }, { - "set @@time_zone = '+08:00'", + "set time_zone = '+08:00'", "insert into user_extra(user_id) values (3)", }, }, diff --git a/go/vt/vtgate/planbuilder/ddl.go b/go/vt/vtgate/planbuilder/ddl.go index 7c859a13f25..4804011f240 100644 --- a/go/vt/vtgate/planbuilder/ddl.go +++ b/go/vt/vtgate/planbuilder/ddl.go @@ -120,6 +120,10 @@ func buildDDLPlans(ctx context.Context, sql string, ddlStatement sqlparser.DDLSt destination, keyspace, err = buildDropTable(vschema, ddlStatement) case *sqlparser.RenameTable: destination, keyspace, err = buildRenameTable(vschema, ddl) + case *sqlparser.CreateProcedure: + destination, keyspace, err = buildCreateProcedurePlan(vschema, ddl) + case *sqlparser.DropProcedure: + destination, keyspace, err = buildDropProcedurePlan(vschema, ddl) default: return nil, nil, vterrors.VT13001(fmt.Sprintf("unexpected DDL statement type: %T", ddlStatement)) } @@ -150,6 +154,30 @@ func buildDDLPlans(ctx context.Context, sql string, ddlStatement sqlparser.DDLSt }, nil } +func buildDropProcedurePlan(vschema plancontext.VSchema, dp *sqlparser.DropProcedure) (key.ShardDestination, *vindexes.Keyspace, error) { + destination, keyspace, _, err := vschema.TargetDestination(dp.Name.Qualifier.String()) + if err != nil { + return nil, nil, err + } + // Clear out the qualifier from the table name. + dp.SetTable("", dp.Name.Name.String()) + return destination, keyspace, nil +} + +func buildCreateProcedurePlan(vschema plancontext.VSchema, cp *sqlparser.CreateProcedure) (key.ShardDestination, *vindexes.Keyspace, error) { + destination, keyspace, _, err := vschema.TargetDestination(cp.Name.Qualifier.String()) + if err != nil { + return nil, nil, err + } + if keyspace.Sharded { + return nil, nil, vterrors.VT12001("CREATE PROCEDURE is not supported on sharded keyspaces") + } + // Clear out the qualifier from the table name. + cp.SetTable("", cp.Name.Name.String()) + sqlparser.RemoveSpecificKeyspace(cp, keyspace.Name) + return destination, keyspace, nil +} + func checkFKError(vschema plancontext.VSchema, ddlStatement sqlparser.DDLStatement, keyspace *vindexes.Keyspace) error { fkMode, err := vschema.ForeignKeyMode(keyspace.Name) if err != nil { diff --git a/go/vt/vtgate/planbuilder/plan_test.go b/go/vt/vtgate/planbuilder/plan_test.go index b49f1d695ae..fcdd8b5498e 100644 --- a/go/vt/vtgate/planbuilder/plan_test.go +++ b/go/vt/vtgate/planbuilder/plan_test.go @@ -524,6 +524,15 @@ func (s *planTestSuite) TestWithDefaultKeyspaceFromFile() { s.testFile("call_cases.json", vw, false) } +func (s *planTestSuite) TestSingleUnshardedKeyspace() { + env := vtenv.NewTestEnv() + vschema := loadSchema(s.T(), "vschemas/unsharded_schema.json", false) + vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder) + require.NoError(s.T(), err) + + s.testFile("unsharded_cases.json", vw, false) +} + func (s *planTestSuite) TestWithDefaultKeyspaceFromFileSharded() { // We are testing this separately so we can set a default keyspace env := vtenv.NewTestEnv() diff --git a/go/vt/vtgate/planbuilder/testdata/aggr_cases.json b/go/vt/vtgate/planbuilder/testdata/aggr_cases.json index c368cb62965..a1b53981128 100644 --- a/go/vt/vtgate/planbuilder/testdata/aggr_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/aggr_cases.json @@ -6746,8 +6746,8 @@ "Name": "user", "Sharded": true }, - "FieldQuery": "select `tables`.table_name from (select table_name from `user` where 1 != 1 group by table_name) as `tables` where 1 != 1", - "Query": "select `tables`.table_name from (select table_name from `user` where id = 143 group by table_name) as `tables`", + "FieldQuery": "select `tables`.`table_name` from (select `table_name` from `user` where 1 != 1 group by `table_name`) as `tables` where 1 != 1", + "Query": "select `tables`.`table_name` from (select `table_name` from `user` where id = 143 group by `table_name`) as `tables`", "Table": "`user`", "Values": [ "143" @@ -6761,8 +6761,8 @@ "Name": "user", "Sharded": true }, - "FieldQuery": "select c.column_name from `user` as c where 1 != 1", - "Query": "select c.column_name from `user` as c where c.table_name = :tables_table_name", + "FieldQuery": "select c.`column_name` from `user` as c where 1 != 1", + "Query": "select c.`column_name` from `user` as c where c.`table_name` = :tables_table_name", "Table": "`user`" } ] diff --git a/go/vt/vtgate/planbuilder/testdata/bypass_keyrange_cases.json b/go/vt/vtgate/planbuilder/testdata/bypass_keyrange_cases.json index 86587e0cbe1..54312b95aa9 100644 --- a/go/vt/vtgate/planbuilder/testdata/bypass_keyrange_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/bypass_keyrange_cases.json @@ -188,7 +188,7 @@ "Sharded": false }, "TargetDestination": "ExactKeyRange(-)", - "Query": "select count(*), col from unsharded join vt_main.t1 where exists (select 1 from t2 join information_schema.`tables` where table_name = 't3')" + "Query": "select count(*), col from unsharded join vt_main.t1 where exists (select 1 from t2 join information_schema.`tables` where `table_name` = 't3')" } } } diff --git a/go/vt/vtgate/planbuilder/testdata/bypass_shard_cases.json b/go/vt/vtgate/planbuilder/testdata/bypass_shard_cases.json index d98069f6ac2..4a2ab7e740a 100644 --- a/go/vt/vtgate/planbuilder/testdata/bypass_shard_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/bypass_shard_cases.json @@ -280,7 +280,7 @@ "Sharded": false }, "TargetDestination": "Shard(-80)", - "Query": "select count(*), col from unsharded join vt_main.t1 where exists (select 1 from t2 join information_schema.`tables` where table_name = 't3')" + "Query": "select count(*), col from unsharded join vt_main.t1 where exists (select 1 from t2 join information_schema.`tables` where `table_name` = 't3')" } } } diff --git a/go/vt/vtgate/planbuilder/testdata/ddl_cases.json b/go/vt/vtgate/planbuilder/testdata/ddl_cases.json index 96c1e109e0d..19da42db9b8 100644 --- a/go/vt/vtgate/planbuilder/testdata/ddl_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/ddl_cases.json @@ -39,6 +39,106 @@ ] } }, + { + "comment": "simple create procedure", + "query": "create procedure p1 (in a CHAR(3), out b INT) begin select c from x where d = e; end", + "plan": { + "Type": "DirectDDL", + "QueryType": "DDL", + "Original": "create procedure p1 (in a CHAR(3), out b INT) begin select c from x where d = e; end", + "Instructions": { + "OperatorType": "DDL", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "Query": "create procedure p1 (in a CHAR(3), out b INT) begin select c from x where d = e; end;" + }, + "TablesUsed": [ + "main.p1" + ] + } + }, + { + "comment": "simple drop procedure", + "query": "drop procedure p1", + "plan": { + "Type": "DirectDDL", + "QueryType": "DDL", + "Original": "drop procedure p1", + "Instructions": { + "OperatorType": "DDL", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "Query": "drop procedure p1" + }, + "TablesUsed": [ + "main.p1" + ] + } + }, + { + "comment": "simple create procedure with keyspace", + "query": "create procedure main_2.p1 (in a CHAR(3), out b INT) begin select c from x where d = e; end", + "plan": { + "Type": "DirectDDL", + "QueryType": "DDL", + "Original": "create procedure main_2.p1 (in a CHAR(3), out b INT) begin select c from x where d = e; end", + "Instructions": { + "OperatorType": "DDL", + "Keyspace": { + "Name": "main_2", + "Sharded": false + }, + "Query": "create procedure p1 (in a CHAR(3), out b INT) begin select c from x where d = e; end;" + }, + "TablesUsed": [ + "main_2.p1" + ] + } + }, + { + "comment": "simple drop procedure with keyspace", + "query": "drop procedure if exists user.p1", + "plan": { + "Type": "DirectDDL", + "QueryType": "DDL", + "Original": "drop procedure if exists user.p1", + "Instructions": { + "OperatorType": "DDL", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "Query": "drop procedure if exists p1" + }, + "TablesUsed": [ + "user.p1" + ] + } + }, + { + "comment": "simple create procedure with keyspace inside select too", + "query": "create procedure main_2.p1 (in a CHAR(3), out b INT) begin select c from main_2.x where d = e; end", + "plan": { + "Type": "DirectDDL", + "QueryType": "DDL", + "Original": "create procedure main_2.p1 (in a CHAR(3), out b INT) begin select c from main_2.x where d = e; end", + "Instructions": { + "OperatorType": "DDL", + "Keyspace": { + "Name": "main_2", + "Sharded": false + }, + "Query": "create procedure p1 (in a CHAR(3), out b INT) begin select c from x where d = e; end;" + }, + "TablesUsed": [ + "main_2.p1" + ] + } + }, { "comment": "DDL", "query": "create table a(id int)", diff --git a/go/vt/vtgate/planbuilder/testdata/ddl_cases_no_default_keyspace.json b/go/vt/vtgate/planbuilder/testdata/ddl_cases_no_default_keyspace.json index 9f003a0e255..5aea653785a 100644 --- a/go/vt/vtgate/planbuilder/testdata/ddl_cases_no_default_keyspace.json +++ b/go/vt/vtgate/planbuilder/testdata/ddl_cases_no_default_keyspace.json @@ -647,7 +647,7 @@ { "comment": "Alter View with unknown view", "query": "alter view unknown as select* from user", - "plan": "VT03007: keyspace not specified" + "plan": "VT09005: no database selected: use keyspace<:shard><@type> or keyspace<[range]><@type> (<> are optional)" }, { "comment": "drop table with qualifier in one", @@ -673,7 +673,7 @@ { "comment": "drop table with unknown table", "query": "drop table unknown", - "plan": "VT03007: keyspace not specified" + "plan": "VT09005: no database selected: use keyspace<:shard><@type> or keyspace<[range]><@type> (<> are optional)" }, { "comment": "drop view with 1 view without qualifier", @@ -699,7 +699,7 @@ { "comment": "drop view with unknown view", "query": "drop view unknown", - "plan": "VT03007: keyspace not specified" + "plan": "VT09005: no database selected: use keyspace<:shard><@type> or keyspace<[range]><@type> (<> are optional)" }, { "comment": "Truncate table without qualifier", diff --git a/go/vt/vtgate/planbuilder/testdata/filter_cases.json b/go/vt/vtgate/planbuilder/testdata/filter_cases.json index 65ade5255f4..cf36f2f8ab1 100644 --- a/go/vt/vtgate/planbuilder/testdata/filter_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/filter_cases.json @@ -2940,7 +2940,7 @@ "Sharded": false }, "FieldQuery": "select t.table_schema from information_schema.`tables` as t where 1 != 1", - "Query": "select t.table_schema from information_schema.`tables` as t where t.table_schema in (select c.column_name from information_schema.`columns` as c)", + "Query": "select t.table_schema from information_schema.`tables` as t where t.table_schema in (select c.`column_name` from information_schema.`columns` as c)", "Table": "information_schema.`tables`" } }, diff --git a/go/vt/vtgate/planbuilder/testdata/info_schema57_cases.json b/go/vt/vtgate/planbuilder/testdata/info_schema57_cases.json index 65b16295ba6..8c9b0b0dfcb 100644 --- a/go/vt/vtgate/planbuilder/testdata/info_schema57_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/info_schema57_cases.json @@ -13,8 +13,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_NAME from information_schema.`TABLES` where 1 != 1", - "Query": "select TABLE_NAME from information_schema.`TABLES`", + "FieldQuery": "select `TABLE_NAME` from information_schema.`TABLES` where 1 != 1", + "Query": "select `TABLE_NAME` from information_schema.`TABLES`", "Table": "information_schema.`TABLES`" } } @@ -53,8 +53,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select column_name from information_schema.`columns` where 1 != 1", - "Query": "select column_name from information_schema.`columns` where table_schema = schema()", + "FieldQuery": "select `column_name` from information_schema.`columns` where 1 != 1", + "Query": "select `column_name` from information_schema.`columns` where table_schema = schema()", "Table": "information_schema.`columns`" } } @@ -93,8 +93,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION from information_schema.`COLUMNS` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION from information_schema.`COLUMNS` where `COLUMNS`.COLUMN_NAME = 'toto'", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION from information_schema.`COLUMNS` where 1 != 1", + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION from information_schema.`COLUMNS` where `COLUMNS`.`COLUMN_NAME` = 'toto'", "Table": "information_schema.`COLUMNS`" } } @@ -122,8 +122,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_NAME from information_schema.`columns` where 1 != 1", - "Query": "select distinct TABLE_NAME from information_schema.`columns`", + "FieldQuery": "select `TABLE_NAME` from information_schema.`columns` where 1 != 1", + "Query": "select distinct `TABLE_NAME` from information_schema.`columns`", "Table": "information_schema.`columns`" }, { @@ -186,8 +186,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1", - "Query": "select distinct TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1", + "Query": "select distinct TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['user']", "Table": "information_schema.`tables`" }, @@ -198,8 +198,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1", - "Query": "select distinct TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1", + "Query": "select distinct TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['main']", "Table": "information_schema.`tables`" } @@ -223,8 +223,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select RC.CONSTRAINT_NAME, ORDINAL_POSITION from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC where 1 != 1", - "Query": "select RC.CONSTRAINT_NAME, ORDINAL_POSITION from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC where KCU.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.TABLE_NAME = :KCU_TABLE_NAME /* VARCHAR */ and KCU.COLUMN_NAME = 'id' and KCU.REFERENCED_TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.CONSTRAINT_NAME = 'data_type_table_id_fkey' and KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME order by KCU.CONSTRAINT_NAME asc, KCU.COLUMN_NAME asc", + "FieldQuery": "select RC.`CONSTRAINT_NAME`, ORDINAL_POSITION from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC where 1 != 1", + "Query": "select RC.`CONSTRAINT_NAME`, ORDINAL_POSITION from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC where KCU.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.`TABLE_NAME` = :KCU_TABLE_NAME /* VARCHAR */ and KCU.`COLUMN_NAME` = 'id' and KCU.REFERENCED_TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.`CONSTRAINT_NAME` = 'data_type_table_id_fkey' and KCU.`CONSTRAINT_NAME` = RC.`CONSTRAINT_NAME` order by KCU.`CONSTRAINT_NAME` asc, KCU.`COLUMN_NAME` asc", "SysTableTableName": "[KCU_TABLE_NAME:'data_type_table']", "SysTableTableSchema": "['test']", "Table": "INFORMATION_SCHEMA.KEY_COLUMN_USAGE, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS" @@ -245,8 +245,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select KCU.TABLE_NAME, S.TABLE_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC, INFORMATION_SCHEMA.`TABLES` as S where 1 != 1", - "Query": "select KCU.TABLE_NAME, S.TABLE_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC, INFORMATION_SCHEMA.`TABLES` as S where S.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and S.TABLE_NAME = :S_TABLE_NAME /* VARCHAR */ and KCU.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.TABLE_NAME = :KCU_TABLE_NAME /* VARCHAR */ and KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME order by KCU.CONSTRAINT_NAME asc, KCU.COLUMN_NAME asc", + "FieldQuery": "select KCU.`TABLE_NAME`, S.`TABLE_NAME` from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC, INFORMATION_SCHEMA.`TABLES` as S where 1 != 1", + "Query": "select KCU.`TABLE_NAME`, S.`TABLE_NAME` from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC, INFORMATION_SCHEMA.`TABLES` as S where S.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and S.`TABLE_NAME` = :S_TABLE_NAME /* VARCHAR */ and KCU.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.`TABLE_NAME` = :KCU_TABLE_NAME /* VARCHAR */ and KCU.`CONSTRAINT_NAME` = RC.`CONSTRAINT_NAME` order by KCU.`CONSTRAINT_NAME` asc, KCU.`COLUMN_NAME` asc", "SysTableTableName": "[KCU_TABLE_NAME:'data_type_table', S_TABLE_NAME:'sc']", "SysTableTableSchema": "['test']", "Table": "INFORMATION_SCHEMA.KEY_COLUMN_USAGE, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS, INFORMATION_SCHEMA.`TABLES`" @@ -318,8 +318,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select kcu.constraint_name as constraint_name, kcu.column_name as column_name, kcu.referenced_table_name as referenced_table_name, kcu.referenced_column_name as referenced_column_name, kcu.ordinal_position as ordinal_position, kcu.table_name as table_name from information_schema.key_column_usage as kcu where 1 != 1", - "Query": "select kcu.constraint_name as constraint_name, kcu.column_name as column_name, kcu.referenced_table_name as referenced_table_name, kcu.referenced_column_name as referenced_column_name, kcu.ordinal_position as ordinal_position, kcu.table_name as table_name from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.referenced_column_name is not null order by kcu.ordinal_position asc", + "FieldQuery": "select kcu.`constraint_name` as `constraint_name`, kcu.`column_name` as `column_name`, kcu.referenced_table_name as referenced_table_name, kcu.referenced_column_name as referenced_column_name, kcu.ordinal_position as ordinal_position, kcu.`table_name` as `table_name` from information_schema.key_column_usage as kcu where 1 != 1", + "Query": "select kcu.`constraint_name` as `constraint_name`, kcu.`column_name` as `column_name`, kcu.referenced_table_name as referenced_table_name, kcu.referenced_column_name as referenced_column_name, kcu.ordinal_position as ordinal_position, kcu.`table_name` as `table_name` from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.referenced_column_name is not null order by kcu.ordinal_position asc", "SysTableTableSchema": "[:v1]", "Table": "information_schema.key_column_usage" }, @@ -331,7 +331,7 @@ "Sharded": false }, "FieldQuery": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where 1 != 1", - "Query": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where rc.constraint_schema = :__vtschemaname /* VARCHAR */ and rc.constraint_name = :kcu_constraint_name /* VARCHAR(64) */", + "Query": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where rc.`constraint_schema` = :__vtschemaname /* VARCHAR */ and rc.`constraint_name` = :kcu_constraint_name /* VARCHAR(64) */", "SysTableTableSchema": "[:v2]", "Table": "information_schema.referential_constraints" } @@ -353,8 +353,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.column_name as `column`, fk.constraint_name as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where 1 != 1", - "Query": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.column_name as `column`, fk.constraint_name as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where rc.constraint_schema = database() and rc.table_name = :rc_table_name /* VARCHAR */ and fk.referenced_column_name is not null and fk.table_schema = database() and fk.table_name = :fk_table_name /* VARCHAR */ and rc.constraint_schema = fk.constraint_schema and rc.constraint_name = fk.constraint_name", + "FieldQuery": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where 1 != 1", + "Query": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where rc.`constraint_schema` = database() and rc.`table_name` = :rc_table_name /* VARCHAR */ and fk.referenced_column_name is not null and fk.table_schema = database() and fk.`table_name` = :fk_table_name /* VARCHAR */ and rc.`constraint_schema` = fk.`constraint_schema` and rc.`constraint_name` = fk.`constraint_name`", "SysTableTableName": "[fk_table_name:':vtg1', rc_table_name:':vtg1']", "Table": "information_schema.key_column_usage, information_schema.referential_constraints" } @@ -374,8 +374,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select CATALOG_NAME, SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH from information_schema.schemata where 1 != 1", - "Query": "select CATALOG_NAME, SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH from information_schema.schemata where schema_name = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select `CATALOG_NAME`, `SCHEMA_NAME`, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH from information_schema.schemata where 1 != 1", + "Query": "select `CATALOG_NAME`, `SCHEMA_NAME`, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH from information_schema.schemata where `schema_name` = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['user']", "Table": "information_schema.schemata" } @@ -396,7 +396,7 @@ "Sharded": false }, "FieldQuery": "select table_comment from information_schema.`tables` where 1 != 1", - "Query": "select table_comment from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_name = :table_name /* VARCHAR */", + "Query": "select table_comment from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */", "SysTableTableName": "[table_name:'table_name']", "SysTableTableSchema": "['schema_name']", "Table": "information_schema.`tables`" @@ -417,8 +417,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.column_name as `column`, fk.constraint_name as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where 1 != 1", - "Query": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.column_name as `column`, fk.constraint_name as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where rc.constraint_schema = :__vtschemaname /* VARCHAR */ and rc.table_name = :rc_table_name /* VARCHAR */ and fk.referenced_column_name is not null and fk.table_schema = :__vtschemaname /* VARCHAR */ and fk.table_name = :fk_table_name /* VARCHAR */ and rc.constraint_schema = fk.constraint_schema and rc.constraint_name = fk.constraint_name", + "FieldQuery": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where 1 != 1", + "Query": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where rc.`constraint_schema` = :__vtschemaname /* VARCHAR */ and rc.`table_name` = :rc_table_name /* VARCHAR */ and fk.referenced_column_name is not null and fk.table_schema = :__vtschemaname /* VARCHAR */ and fk.`table_name` = :fk_table_name /* VARCHAR */ and rc.`constraint_schema` = fk.`constraint_schema` and rc.`constraint_name` = fk.`constraint_name`", "SysTableTableName": "[fk_table_name:'table_name', rc_table_name:'table_name']", "SysTableTableSchema": "['table_schema']", "Table": "information_schema.key_column_usage, information_schema.referential_constraints" @@ -439,8 +439,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select column_name from information_schema.statistics where 1 != 1", - "Query": "select column_name from information_schema.statistics where index_name = 'PRIMARY' and table_schema = :__vtschemaname /* VARCHAR */ and table_name = :table_name /* VARCHAR */ order by seq_in_index asc", + "FieldQuery": "select `column_name` from information_schema.statistics where 1 != 1", + "Query": "select `column_name` from information_schema.statistics where index_name = 'PRIMARY' and table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */ order by seq_in_index asc", "SysTableTableName": "[table_name:'table_name']", "SysTableTableSchema": "['table_schema']", "Table": "information_schema.statistics" @@ -462,7 +462,7 @@ "Sharded": false }, "FieldQuery": "select generation_expression from information_schema.`columns` where 1 != 1", - "Query": "select generation_expression from information_schema.`columns` where table_schema = :__vtschemaname /* VARCHAR */ and table_name = :table_name /* VARCHAR */ and column_name = 'column_name'", + "Query": "select generation_expression from information_schema.`columns` where table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */ and `column_name` = 'column_name'", "SysTableTableName": "[table_name:'table_name']", "SysTableTableSchema": "['table_schema']", "Table": "information_schema.`columns`" @@ -503,8 +503,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select table_name from (select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1) as _subquery where 1 != 1", - "Query": "select table_name from (select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */) as _subquery", + "FieldQuery": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1) as _subquery where 1 != 1", + "Query": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */) as _subquery", "SysTableTableSchema": "['table_schema']", "Table": "information_schema.`tables`" } @@ -524,8 +524,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select table_name from (select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1) as _subquery where 1 != 1", - "Query": "select table_name from (select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_type = 'table_type' and table_name = 'table_name') as _subquery", + "FieldQuery": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1) as _subquery where 1 != 1", + "Query": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_type = 'table_type' and `table_name` = 'table_name') as _subquery", "SysTableTableSchema": "['table_schema']", "Table": "information_schema.`tables`" } @@ -546,7 +546,7 @@ "Sharded": false }, "FieldQuery": "select count(*) from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select count(*) from INFORMATION_SCHEMA.`TABLES` where table_schema = :__vtschemaname /* VARCHAR */ and table_name = :table_name /* VARCHAR */", + "Query": "select count(*) from INFORMATION_SCHEMA.`TABLES` where table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */", "SysTableTableName": "[table_name:'foo']", "SysTableTableSchema": "['performance_schema']", "Table": "INFORMATION_SCHEMA.`TABLES`" @@ -568,7 +568,7 @@ "Sharded": false }, "FieldQuery": "select `TABLES`.`CHECKSUM` from information_schema.`TABLES` where 1 != 1", - "Query": "select `TABLES`.`CHECKSUM` from information_schema.`TABLES` where TABLE_NAME in (select TABLE_NAME from information_schema.`COLUMNS`)", + "Query": "select `TABLES`.`CHECKSUM` from information_schema.`TABLES` where `TABLE_NAME` in (select `TABLE_NAME` from information_schema.`COLUMNS`)", "Table": "information_schema.`TABLES`" } } @@ -587,8 +587,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['user', 'main']", "Table": "INFORMATION_SCHEMA.`TABLES`" } @@ -608,8 +608,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = database()", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = database()", "Table": "INFORMATION_SCHEMA.`TABLES`" } } @@ -628,8 +628,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['ks']", "Table": "INFORMATION_SCHEMA.`TABLES`" } @@ -649,8 +649,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and TABLE_NAME = :TABLE_NAME /* VARCHAR */", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and `TABLE_NAME` = :TABLE_NAME /* VARCHAR */", "SysTableTableName": "[TABLE_NAME:'route1']", "SysTableTableSchema": "['ks']", "Table": "INFORMATION_SCHEMA.`TABLES`" @@ -671,8 +671,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_NAME from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_NAME from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and DATA_FREE = 42", + "FieldQuery": "select `TABLE_NAME` from INFORMATION_SCHEMA.`TABLES` where 1 != 1", + "Query": "select `TABLE_NAME` from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and DATA_FREE = 42", "SysTableTableSchema": "['ks']", "Table": "INFORMATION_SCHEMA.`TABLES`" } @@ -692,8 +692,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and (DATA_FREE = 42 or `CHECKSUM` = 'value')", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and (DATA_FREE = 42 or `CHECKSUM` = 'value')", "SysTableTableSchema": "['ks']", "Table": "INFORMATION_SCHEMA.`TABLES`" } @@ -713,8 +713,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select x.table_name from (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as x where 1 != 1", - "Query": "select x.table_name from (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x", + "FieldQuery": "select x.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as x where 1 != 1", + "Query": "select x.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x", "Table": "information_schema.key_column_usage" } } @@ -742,8 +742,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select x.table_name, x.COLUMN_NAME from (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as x where 1 != 1", - "Query": "select x.table_name, x.COLUMN_NAME from (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x", + "FieldQuery": "select x.`table_name`, x.`COLUMN_NAME` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as x where 1 != 1", + "Query": "select x.`table_name`, x.`COLUMN_NAME` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x", "Table": "information_schema.key_column_usage" }, { @@ -802,8 +802,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select a.table_name from (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as a, (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, UNIQUE_CONSTRAINT_CATALOG, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, TABLE_NAME, REFERENCED_TABLE_NAME from information_schema.referential_constraints where 1 != 1) as b where 1 != 1", - "Query": "select a.table_name from (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where a.table_name = :a_table_name /* VARCHAR */) as a, (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, UNIQUE_CONSTRAINT_CATALOG, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, TABLE_NAME, REFERENCED_TABLE_NAME from information_schema.referential_constraints where table_name = :table_name /* VARCHAR */) as b", + "FieldQuery": "select a.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as a, (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, UNIQUE_CONSTRAINT_CATALOG, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, `TABLE_NAME`, REFERENCED_TABLE_NAME from information_schema.referential_constraints where 1 != 1) as b where 1 != 1", + "Query": "select a.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where a.`table_name` = :a_table_name /* VARCHAR */) as a, (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, UNIQUE_CONSTRAINT_CATALOG, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, `TABLE_NAME`, REFERENCED_TABLE_NAME from information_schema.referential_constraints where `table_name` = :table_name /* VARCHAR */) as b", "SysTableTableName": "[a_table_name:'users', table_name:'users']", "Table": "information_schema.key_column_usage, information_schema.referential_constraints" } @@ -819,7 +819,7 @@ "Instructions": { "OperatorType": "Aggregate", "Variant": "Scalar", - "Aggregates": "sum(0) AS sum(found)", + "Aggregates": "sum(0) AS sum(`found`)", "Inputs": [ { "OperatorType": "Concatenate", @@ -831,8 +831,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.`tables` where 1 != 1", - "Query": "select 1 as found from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", + "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['music']", "Table": "information_schema.`tables`" }, @@ -843,8 +843,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.views where 1 != 1", - "Query": "select 1 as found from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ limit 1", + "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", + "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ limit 1", "SysTableTableSchema": "['music']", "Table": "information_schema.views" } @@ -871,8 +871,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.`tables` where 1 != 1", - "Query": "select 1 as found from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", + "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['music']", "Table": "information_schema.`tables`" }, @@ -883,8 +883,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.views where 1 != 1", - "Query": "select 1 as found from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ limit 1", + "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", + "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ limit 1", "SysTableTableSchema": "['music']", "Table": "information_schema.views" } @@ -909,8 +909,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.`tables` where 1 != 1", - "Query": "select 1 as found from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", + "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['music', 'Music']", "Table": "information_schema.`tables`" }, @@ -921,8 +921,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.views where 1 != 1", - "Query": "select 1 as found from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */ limit 1", + "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", + "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */ limit 1", "SysTableTableSchema": "['music', 'user']", "Table": "information_schema.views" } @@ -947,8 +947,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.`tables` where 1 != 1", - "Query": "select 1 as found from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", + "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['music', 'Music']", "Table": "information_schema.`tables`" }, @@ -959,8 +959,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.views where 1 != 1", - "Query": "select 1 as found from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */ limit 1", + "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", + "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */ limit 1", "SysTableTableSchema": "['music', 'user']", "Table": "information_schema.views" } @@ -997,8 +997,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.`tables` where 1 != 1", - "Query": "select 1 as found from information_schema.`tables` where table_name = :table_name1 /* VARCHAR */ and table_name = :table_name1 /* VARCHAR */ limit :__upper_limit", + "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", + "Query": "select 1 as `found` from information_schema.`tables` where `table_name` = :table_name1 /* VARCHAR */ and `table_name` = :table_name1 /* VARCHAR */ limit :__upper_limit", "SysTableTableName": "[table_name1:'Music']", "Table": "information_schema.`tables`" }, @@ -1009,8 +1009,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.views where 1 != 1", - "Query": "select 1 as found from information_schema.views where table_name = :table_name2 /* VARCHAR */ and table_name = :table_name2 /* VARCHAR */ limit :__upper_limit", + "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", + "Query": "select 1 as `found` from information_schema.views where `table_name` = :table_name2 /* VARCHAR */ and `table_name` = :table_name2 /* VARCHAR */ limit :__upper_limit", "SysTableTableName": "[table_name2:'user']", "Table": "information_schema.views" } @@ -1026,8 +1026,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.`tables` where 1 != 1", - "Query": "select 1 as found from information_schema.`tables` where table_name = :table_name /* VARCHAR */ and table_name = :table_name /* VARCHAR */ and :__sq_has_values", + "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", + "Query": "select 1 as `found` from information_schema.`tables` where `table_name` = :table_name /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */ and :__sq_has_values", "SysTableTableName": "[table_name:'Music']", "Table": "information_schema.`tables`" } @@ -1058,8 +1058,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_NAME from information_schema.`tables` as t where 1 != 1", - "Query": "select distinct TABLE_NAME from information_schema.`tables` as t where t.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select `TABLE_NAME` from information_schema.`tables` as t where 1 != 1", + "Query": "select distinct `TABLE_NAME` from information_schema.`tables` as t where t.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['a']", "Table": "information_schema.`tables`" }, @@ -1070,8 +1070,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_NAME from information_schema.`columns` where 1 != 1", - "Query": "select distinct TABLE_NAME from information_schema.`columns`", + "FieldQuery": "select `TABLE_NAME` from information_schema.`columns` where 1 != 1", + "Query": "select distinct `TABLE_NAME` from information_schema.`columns`", "Table": "information_schema.`columns`" } ] @@ -1112,8 +1112,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_NAME from information_schema.`tables` as t where 1 != 1", - "Query": "select distinct TABLE_NAME from information_schema.`tables` as t where t.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select `TABLE_NAME` from information_schema.`tables` as t where 1 != 1", + "Query": "select distinct `TABLE_NAME` from information_schema.`tables` as t where t.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['a']", "Table": "information_schema.`tables`" }, @@ -1124,8 +1124,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select COLUMN_NAME from information_schema.`columns` where 1 != 1", - "Query": "select distinct COLUMN_NAME from information_schema.`columns`", + "FieldQuery": "select `COLUMN_NAME` from information_schema.`columns` where 1 != 1", + "Query": "select distinct `COLUMN_NAME` from information_schema.`columns`", "Table": "information_schema.`columns`" } ] @@ -1141,7 +1141,7 @@ "Sharded": false }, "FieldQuery": "select COLLATION_NAME from information_schema.`COLUMNS` as t where 1 != 1", - "Query": "select COLLATION_NAME from information_schema.`COLUMNS` as t where :__sq_has_values and COLUMN_NAME in ::__sq1", + "Query": "select COLLATION_NAME from information_schema.`COLUMNS` as t where :__sq_has_values and `COLUMN_NAME` in ::__sq1", "Table": "information_schema.`COLUMNS`" } ] @@ -1162,8 +1162,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = 'ks' or TABLE_SCHEMA = 'main'", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = 'ks' or TABLE_SCHEMA = 'main'", "Table": "INFORMATION_SCHEMA.`TABLES`" } } @@ -1182,8 +1182,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_NAME from information_schema.apa where 1 != 1", - "Query": "select TABLE_NAME from information_schema.apa", + "FieldQuery": "select `TABLE_NAME` from information_schema.apa where 1 != 1", + "Query": "select `TABLE_NAME` from information_schema.apa", "Table": "information_schema.apa" } } @@ -1202,8 +1202,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select c.column_name from (select table_name from information_schema.`tables` where 1 != 1) as `tables`, information_schema.`columns` as c where 1 != 1", - "Query": "select c.column_name from (select table_name from information_schema.`tables` where table_schema != 'information_schema' limit 1) as `tables`, information_schema.`columns` as c where `tables`.table_name = c.table_name", + "FieldQuery": "select c.`column_name` from (select `table_name` from information_schema.`tables` where 1 != 1) as `tables`, information_schema.`columns` as c where 1 != 1", + "Query": "select c.`column_name` from (select `table_name` from information_schema.`tables` where table_schema != 'information_schema' limit 1) as `tables`, information_schema.`columns` as c where `tables`.`table_name` = c.`table_name`", "Table": "information_schema.`columns`, information_schema.`tables`" } } diff --git a/go/vt/vtgate/planbuilder/testdata/info_schema80_cases.json b/go/vt/vtgate/planbuilder/testdata/info_schema80_cases.json index 79684d7c1dd..f803cce648b 100644 --- a/go/vt/vtgate/planbuilder/testdata/info_schema80_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/info_schema80_cases.json @@ -13,8 +13,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_NAME from information_schema.`TABLES` where 1 != 1", - "Query": "select TABLE_NAME from information_schema.`TABLES`", + "FieldQuery": "select `TABLE_NAME` from information_schema.`TABLES` where 1 != 1", + "Query": "select `TABLE_NAME` from information_schema.`TABLES`", "Table": "information_schema.`TABLES`" } } @@ -53,8 +53,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select column_name from information_schema.`columns` where 1 != 1", - "Query": "select column_name from information_schema.`columns` where table_schema = schema()", + "FieldQuery": "select `column_name` from information_schema.`columns` where 1 != 1", + "Query": "select `column_name` from information_schema.`columns` where table_schema = schema()", "Table": "information_schema.`columns`" } } @@ -93,8 +93,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION, SRS_ID from information_schema.`COLUMNS` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION, SRS_ID from information_schema.`COLUMNS` where `COLUMNS`.COLUMN_NAME = 'toto'", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION, SRS_ID from information_schema.`COLUMNS` where 1 != 1", + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION, SRS_ID from information_schema.`COLUMNS` where `COLUMNS`.`COLUMN_NAME` = 'toto'", "Table": "information_schema.`COLUMNS`" } } @@ -122,8 +122,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_NAME from information_schema.`columns` where 1 != 1", - "Query": "select distinct TABLE_NAME from information_schema.`columns`", + "FieldQuery": "select `TABLE_NAME` from information_schema.`columns` where 1 != 1", + "Query": "select distinct `TABLE_NAME` from information_schema.`columns`", "Table": "information_schema.`columns`" }, { @@ -186,8 +186,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1", - "Query": "select distinct TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1", + "Query": "select distinct TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['user']", "Table": "information_schema.`tables`" }, @@ -198,8 +198,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1", - "Query": "select distinct TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1", + "Query": "select distinct TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['main']", "Table": "information_schema.`tables`" } @@ -223,8 +223,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select RC.CONSTRAINT_NAME, ORDINAL_POSITION from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC where 1 != 1", - "Query": "select RC.CONSTRAINT_NAME, ORDINAL_POSITION from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC where KCU.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.TABLE_NAME = :KCU_TABLE_NAME /* VARCHAR */ and KCU.COLUMN_NAME = 'id' and KCU.REFERENCED_TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.CONSTRAINT_NAME = 'data_type_table_id_fkey' and KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME order by KCU.CONSTRAINT_NAME asc, KCU.COLUMN_NAME asc", + "FieldQuery": "select RC.`CONSTRAINT_NAME`, ORDINAL_POSITION from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC where 1 != 1", + "Query": "select RC.`CONSTRAINT_NAME`, ORDINAL_POSITION from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC where KCU.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.`TABLE_NAME` = :KCU_TABLE_NAME /* VARCHAR */ and KCU.`COLUMN_NAME` = 'id' and KCU.REFERENCED_TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.`CONSTRAINT_NAME` = 'data_type_table_id_fkey' and KCU.`CONSTRAINT_NAME` = RC.`CONSTRAINT_NAME` order by KCU.`CONSTRAINT_NAME` asc, KCU.`COLUMN_NAME` asc", "SysTableTableName": "[KCU_TABLE_NAME:'data_type_table']", "SysTableTableSchema": "['test']", "Table": "INFORMATION_SCHEMA.KEY_COLUMN_USAGE, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS" @@ -245,8 +245,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select KCU.TABLE_NAME, S.TABLE_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC, INFORMATION_SCHEMA.`TABLES` as S where 1 != 1", - "Query": "select KCU.TABLE_NAME, S.TABLE_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC, INFORMATION_SCHEMA.`TABLES` as S where S.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and S.TABLE_NAME = :S_TABLE_NAME /* VARCHAR */ and KCU.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.TABLE_NAME = :KCU_TABLE_NAME /* VARCHAR */ and KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME order by KCU.CONSTRAINT_NAME asc, KCU.COLUMN_NAME asc", + "FieldQuery": "select KCU.`TABLE_NAME`, S.`TABLE_NAME` from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC, INFORMATION_SCHEMA.`TABLES` as S where 1 != 1", + "Query": "select KCU.`TABLE_NAME`, S.`TABLE_NAME` from INFORMATION_SCHEMA.KEY_COLUMN_USAGE as KCU, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as RC, INFORMATION_SCHEMA.`TABLES` as S where S.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and S.`TABLE_NAME` = :S_TABLE_NAME /* VARCHAR */ and KCU.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and KCU.`TABLE_NAME` = :KCU_TABLE_NAME /* VARCHAR */ and KCU.`CONSTRAINT_NAME` = RC.`CONSTRAINT_NAME` order by KCU.`CONSTRAINT_NAME` asc, KCU.`COLUMN_NAME` asc", "SysTableTableName": "[KCU_TABLE_NAME:'data_type_table', S_TABLE_NAME:'sc']", "SysTableTableSchema": "['test']", "Table": "INFORMATION_SCHEMA.KEY_COLUMN_USAGE, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS, INFORMATION_SCHEMA.`TABLES`" @@ -318,8 +318,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select kcu.constraint_name as constraint_name, kcu.column_name as column_name, kcu.referenced_table_name as referenced_table_name, kcu.referenced_column_name as referenced_column_name, kcu.ordinal_position as ordinal_position, kcu.table_name as table_name from information_schema.key_column_usage as kcu where 1 != 1", - "Query": "select kcu.constraint_name as constraint_name, kcu.column_name as column_name, kcu.referenced_table_name as referenced_table_name, kcu.referenced_column_name as referenced_column_name, kcu.ordinal_position as ordinal_position, kcu.table_name as table_name from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.referenced_column_name is not null order by kcu.ordinal_position asc", + "FieldQuery": "select kcu.`constraint_name` as `constraint_name`, kcu.`column_name` as `column_name`, kcu.referenced_table_name as referenced_table_name, kcu.referenced_column_name as referenced_column_name, kcu.ordinal_position as ordinal_position, kcu.`table_name` as `table_name` from information_schema.key_column_usage as kcu where 1 != 1", + "Query": "select kcu.`constraint_name` as `constraint_name`, kcu.`column_name` as `column_name`, kcu.referenced_table_name as referenced_table_name, kcu.referenced_column_name as referenced_column_name, kcu.ordinal_position as ordinal_position, kcu.`table_name` as `table_name` from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.referenced_column_name is not null order by kcu.ordinal_position asc", "SysTableTableSchema": "[:v1]", "Table": "information_schema.key_column_usage" }, @@ -331,7 +331,7 @@ "Sharded": false }, "FieldQuery": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where 1 != 1", - "Query": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where rc.constraint_schema = :__vtschemaname /* VARCHAR */ and rc.constraint_name = :kcu_constraint_name /* VARCHAR(64) */", + "Query": "select rc.delete_rule as delete_rule, rc.update_rule as update_rule from information_schema.referential_constraints as rc where rc.`constraint_schema` = :__vtschemaname /* VARCHAR */ and rc.`constraint_name` = :kcu_constraint_name /* VARCHAR(64) */", "SysTableTableSchema": "[:v2]", "Table": "information_schema.referential_constraints" } @@ -353,8 +353,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.column_name as `column`, fk.constraint_name as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where 1 != 1", - "Query": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.column_name as `column`, fk.constraint_name as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where rc.constraint_schema = database() and rc.table_name = :rc_table_name /* VARCHAR */ and fk.referenced_column_name is not null and fk.table_schema = database() and fk.table_name = :fk_table_name /* VARCHAR */ and rc.constraint_schema = fk.constraint_schema and rc.constraint_name = fk.constraint_name", + "FieldQuery": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where 1 != 1", + "Query": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where rc.`constraint_schema` = database() and rc.`table_name` = :rc_table_name /* VARCHAR */ and fk.referenced_column_name is not null and fk.table_schema = database() and fk.`table_name` = :fk_table_name /* VARCHAR */ and rc.`constraint_schema` = fk.`constraint_schema` and rc.`constraint_name` = fk.`constraint_name`", "SysTableTableName": "[fk_table_name:':vtg1', rc_table_name:':vtg1']", "Table": "information_schema.key_column_usage, information_schema.referential_constraints" } @@ -374,8 +374,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select CATALOG_NAME, SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH, DEFAULT_ENCRYPTION from information_schema.schemata where 1 != 1", - "Query": "select CATALOG_NAME, SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH, DEFAULT_ENCRYPTION from information_schema.schemata where schema_name = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select `CATALOG_NAME`, `SCHEMA_NAME`, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH, DEFAULT_ENCRYPTION from information_schema.schemata where 1 != 1", + "Query": "select `CATALOG_NAME`, `SCHEMA_NAME`, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH, DEFAULT_ENCRYPTION from information_schema.schemata where `schema_name` = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['user']", "Table": "information_schema.schemata" } @@ -396,7 +396,7 @@ "Sharded": false }, "FieldQuery": "select table_comment from information_schema.`tables` where 1 != 1", - "Query": "select table_comment from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_name = :table_name /* VARCHAR */", + "Query": "select table_comment from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */", "SysTableTableName": "[table_name:'table_name']", "SysTableTableSchema": "['schema_name']", "Table": "information_schema.`tables`" @@ -417,8 +417,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.column_name as `column`, fk.constraint_name as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where 1 != 1", - "Query": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.column_name as `column`, fk.constraint_name as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where rc.constraint_schema = :__vtschemaname /* VARCHAR */ and rc.table_name = :rc_table_name /* VARCHAR */ and fk.referenced_column_name is not null and fk.table_schema = :__vtschemaname /* VARCHAR */ and fk.table_name = :fk_table_name /* VARCHAR */ and rc.constraint_schema = fk.constraint_schema and rc.constraint_name = fk.constraint_name", + "FieldQuery": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where 1 != 1", + "Query": "select fk.referenced_table_name as to_table, fk.referenced_column_name as primary_key, fk.`column_name` as `column`, fk.`constraint_name` as `name`, rc.update_rule as on_update, rc.delete_rule as on_delete from information_schema.referential_constraints as rc, information_schema.key_column_usage as fk where rc.`constraint_schema` = :__vtschemaname /* VARCHAR */ and rc.`table_name` = :rc_table_name /* VARCHAR */ and fk.referenced_column_name is not null and fk.table_schema = :__vtschemaname /* VARCHAR */ and fk.`table_name` = :fk_table_name /* VARCHAR */ and rc.`constraint_schema` = fk.`constraint_schema` and rc.`constraint_name` = fk.`constraint_name`", "SysTableTableName": "[fk_table_name:'table_name', rc_table_name:'table_name']", "SysTableTableSchema": "['table_schema']", "Table": "information_schema.key_column_usage, information_schema.referential_constraints" @@ -449,8 +449,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select cc.constraint_name as `name`, cc.check_clause as expression, cc.constraint_schema from information_schema.check_constraints as cc where 1 != 1", - "Query": "select cc.constraint_name as `name`, cc.check_clause as expression, cc.constraint_schema from information_schema.check_constraints as cc where cc.constraint_schema = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select cc.`constraint_name` as `name`, cc.check_clause as expression, cc.`constraint_schema` from information_schema.check_constraints as cc where 1 != 1", + "Query": "select cc.`constraint_name` as `name`, cc.check_clause as expression, cc.`constraint_schema` from information_schema.check_constraints as cc where cc.`constraint_schema` = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['constraint_schema']", "Table": "information_schema.check_constraints" }, @@ -462,7 +462,7 @@ "Sharded": false }, "FieldQuery": "select 1 from information_schema.table_constraints as tc where 1 != 1", - "Query": "select 1 from information_schema.table_constraints as tc where tc.table_schema = :__vtschemaname /* VARCHAR */ and tc.table_name = :tc_table_name /* VARCHAR */ and tc.constraint_name = :cc_constraint_name /* VARCHAR(64) */ and tc.constraint_schema = :cc_constraint_schema /* VARCHAR(64) */", + "Query": "select 1 from information_schema.table_constraints as tc where tc.table_schema = :__vtschemaname /* VARCHAR */ and tc.`table_name` = :tc_table_name /* VARCHAR */ and tc.`constraint_name` = :cc_constraint_name /* VARCHAR(64) */ and tc.`constraint_schema` = :cc_constraint_schema /* VARCHAR(64) */", "SysTableTableName": "[tc_table_name:'table_name']", "SysTableTableSchema": "['table_schema']", "Table": "information_schema.table_constraints" @@ -485,8 +485,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select column_name from information_schema.statistics where 1 != 1", - "Query": "select column_name from information_schema.statistics where index_name = 'PRIMARY' and table_schema = :__vtschemaname /* VARCHAR */ and table_name = :table_name /* VARCHAR */ order by seq_in_index asc", + "FieldQuery": "select `column_name` from information_schema.statistics where 1 != 1", + "Query": "select `column_name` from information_schema.statistics where index_name = 'PRIMARY' and table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */ order by seq_in_index asc", "SysTableTableName": "[table_name:'table_name']", "SysTableTableSchema": "['table_schema']", "Table": "information_schema.statistics" @@ -508,7 +508,7 @@ "Sharded": false }, "FieldQuery": "select generation_expression from information_schema.`columns` where 1 != 1", - "Query": "select generation_expression from information_schema.`columns` where table_schema = :__vtschemaname /* VARCHAR */ and table_name = :table_name /* VARCHAR */ and column_name = 'column_name'", + "Query": "select generation_expression from information_schema.`columns` where table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */ and `column_name` = 'column_name'", "SysTableTableName": "[table_name:'table_name']", "SysTableTableSchema": "['table_schema']", "Table": "information_schema.`columns`" @@ -549,8 +549,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select table_name from (select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1) as _subquery where 1 != 1", - "Query": "select table_name from (select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */) as _subquery", + "FieldQuery": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1) as _subquery where 1 != 1", + "Query": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */) as _subquery", "SysTableTableSchema": "['table_schema']", "Table": "information_schema.`tables`" } @@ -570,8 +570,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select table_name from (select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1) as _subquery where 1 != 1", - "Query": "select table_name from (select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_type = 'table_type' and table_name = 'table_name') as _subquery", + "FieldQuery": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where 1 != 1) as _subquery where 1 != 1", + "Query": "select `table_name` from (select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_type = 'table_type' and `table_name` = 'table_name') as _subquery", "SysTableTableSchema": "['table_schema']", "Table": "information_schema.`tables`" } @@ -591,8 +591,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select cc.constraint_name as `name` from information_schema.check_constraints as cc where 1 != 1", - "Query": "select cc.constraint_name as `name` from information_schema.check_constraints as cc where cc.constraint_schema = :__vtschemaname /* VARCHAR */ and cc.CONSTRAINT_CATALOG = 'a'", + "FieldQuery": "select cc.`constraint_name` as `name` from information_schema.check_constraints as cc where 1 != 1", + "Query": "select cc.`constraint_name` as `name` from information_schema.check_constraints as cc where cc.`constraint_schema` = :__vtschemaname /* VARCHAR */ and cc.`CONSTRAINT_CATALOG` = 'a'", "SysTableTableSchema": "['a']", "Table": "information_schema.check_constraints" } @@ -613,7 +613,7 @@ "Sharded": false }, "FieldQuery": "select count(*) from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select count(*) from INFORMATION_SCHEMA.`TABLES` where table_schema = :__vtschemaname /* VARCHAR */ and table_name = :table_name /* VARCHAR */", + "Query": "select count(*) from INFORMATION_SCHEMA.`TABLES` where table_schema = :__vtschemaname /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */", "SysTableTableName": "[table_name:'foo']", "SysTableTableSchema": "['performance_schema']", "Table": "INFORMATION_SCHEMA.`TABLES`" @@ -635,7 +635,7 @@ "Sharded": false }, "FieldQuery": "select `TABLES`.`CHECKSUM` from information_schema.`TABLES` where 1 != 1", - "Query": "select `TABLES`.`CHECKSUM` from information_schema.`TABLES` where TABLE_NAME in (select TABLE_NAME from information_schema.`COLUMNS`)", + "Query": "select `TABLES`.`CHECKSUM` from information_schema.`TABLES` where `TABLE_NAME` in (select `TABLE_NAME` from information_schema.`COLUMNS`)", "Table": "information_schema.`TABLES`" } } @@ -654,8 +654,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['user', 'main']", "Table": "INFORMATION_SCHEMA.`TABLES`" } @@ -675,8 +675,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = database()", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = database()", "Table": "INFORMATION_SCHEMA.`TABLES`" } } @@ -695,8 +695,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['ks']", "Table": "INFORMATION_SCHEMA.`TABLES`" } @@ -716,8 +716,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and TABLE_NAME = :TABLE_NAME /* VARCHAR */", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and `TABLE_NAME` = :TABLE_NAME /* VARCHAR */", "SysTableTableName": "[TABLE_NAME:'route1']", "SysTableTableSchema": "['ks']", "Table": "INFORMATION_SCHEMA.`TABLES`" @@ -738,8 +738,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_NAME from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_NAME from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and DATA_FREE = 42", + "FieldQuery": "select `TABLE_NAME` from INFORMATION_SCHEMA.`TABLES` where 1 != 1", + "Query": "select `TABLE_NAME` from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and DATA_FREE = 42", "SysTableTableSchema": "['ks']", "Table": "INFORMATION_SCHEMA.`TABLES`" } @@ -759,8 +759,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and (DATA_FREE = 42 or `CHECKSUM` = 'value')", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = :__vtschemaname /* VARCHAR */ and (DATA_FREE = 42 or `CHECKSUM` = 'value')", "SysTableTableSchema": "['ks']", "Table": "INFORMATION_SCHEMA.`TABLES`" } @@ -780,8 +780,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select x.table_name from (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as x where 1 != 1", - "Query": "select x.table_name from (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x", + "FieldQuery": "select x.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as x where 1 != 1", + "Query": "select x.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x", "Table": "information_schema.key_column_usage" } } @@ -809,8 +809,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select x.table_name, x.COLUMN_NAME from (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as x where 1 != 1", - "Query": "select x.table_name, x.COLUMN_NAME from (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x", + "FieldQuery": "select x.`table_name`, x.`COLUMN_NAME` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as x where 1 != 1", + "Query": "select x.`table_name`, x.`COLUMN_NAME` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a) as x", "Table": "information_schema.key_column_usage" }, { @@ -849,8 +849,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select a.CONSTRAINT_CATALOG, a.CONSTRAINT_SCHEMA, a.CONSTRAINT_NAME, a.CHECK_CLAUSE, b.CHARACTER_SET_NAME, b.DEFAULT_COLLATE_NAME, b.DESCRIPTION, b.MAXLEN from information_schema.CHECK_CONSTRAINTS as a, information_schema.CHARACTER_SETS as b where 1 != 1", - "Query": "select a.CONSTRAINT_CATALOG, a.CONSTRAINT_SCHEMA, a.CONSTRAINT_NAME, a.CHECK_CLAUSE, b.CHARACTER_SET_NAME, b.DEFAULT_COLLATE_NAME, b.DESCRIPTION, b.MAXLEN from information_schema.CHECK_CONSTRAINTS as a, information_schema.CHARACTER_SETS as b", + "FieldQuery": "select a.`CONSTRAINT_CATALOG`, a.`CONSTRAINT_SCHEMA`, a.`CONSTRAINT_NAME`, a.CHECK_CLAUSE, b.CHARACTER_SET_NAME, b.DEFAULT_COLLATE_NAME, b.DESCRIPTION, b.MAXLEN from information_schema.CHECK_CONSTRAINTS as a, information_schema.CHARACTER_SETS as b where 1 != 1", + "Query": "select a.`CONSTRAINT_CATALOG`, a.`CONSTRAINT_SCHEMA`, a.`CONSTRAINT_NAME`, a.CHECK_CLAUSE, b.CHARACTER_SET_NAME, b.DEFAULT_COLLATE_NAME, b.DESCRIPTION, b.MAXLEN from information_schema.CHECK_CONSTRAINTS as a, information_schema.CHARACTER_SETS as b", "Table": "information_schema.CHARACTER_SETS, information_schema.CHECK_CONSTRAINTS" } } @@ -869,8 +869,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select a.table_name from (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as a, (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, UNIQUE_CONSTRAINT_CATALOG, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, TABLE_NAME, REFERENCED_TABLE_NAME from information_schema.referential_constraints where 1 != 1) as b where 1 != 1", - "Query": "select a.table_name from (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where a.table_name = :a_table_name /* VARCHAR */) as a, (select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, UNIQUE_CONSTRAINT_CATALOG, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, TABLE_NAME, REFERENCED_TABLE_NAME from information_schema.referential_constraints where table_name = :table_name /* VARCHAR */) as b", + "FieldQuery": "select a.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where 1 != 1) as a, (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, UNIQUE_CONSTRAINT_CATALOG, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, `TABLE_NAME`, REFERENCED_TABLE_NAME from information_schema.referential_constraints where 1 != 1) as b where 1 != 1", + "Query": "select a.`table_name` from (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as a where a.`table_name` = :a_table_name /* VARCHAR */) as a, (select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, UNIQUE_CONSTRAINT_CATALOG, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE, `TABLE_NAME`, REFERENCED_TABLE_NAME from information_schema.referential_constraints where `table_name` = :table_name /* VARCHAR */) as b", "SysTableTableName": "[a_table_name:'users', table_name:'users']", "Table": "information_schema.key_column_usage, information_schema.referential_constraints" } @@ -886,7 +886,7 @@ "Instructions": { "OperatorType": "Aggregate", "Variant": "Scalar", - "Aggregates": "sum(0) AS sum(found)", + "Aggregates": "sum(0) AS sum(`found`)", "Inputs": [ { "OperatorType": "Concatenate", @@ -898,8 +898,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.`tables` where 1 != 1", - "Query": "select 1 as found from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", + "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['music']", "Table": "information_schema.`tables`" }, @@ -910,8 +910,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.views where 1 != 1", - "Query": "select 1 as found from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ limit 1", + "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", + "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ limit 1", "SysTableTableSchema": "['music']", "Table": "information_schema.views" } @@ -938,8 +938,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.`tables` where 1 != 1", - "Query": "select 1 as found from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", + "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['music']", "Table": "information_schema.`tables`" }, @@ -950,8 +950,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.views where 1 != 1", - "Query": "select 1 as found from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ limit 1", + "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", + "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ limit 1", "SysTableTableSchema": "['music']", "Table": "information_schema.views" } @@ -976,8 +976,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.`tables` where 1 != 1", - "Query": "select 1 as found from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", + "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['music', 'Music']", "Table": "information_schema.`tables`" }, @@ -988,8 +988,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.views where 1 != 1", - "Query": "select 1 as found from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */ limit 1", + "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", + "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */ limit 1", "SysTableTableSchema": "['music', 'user']", "Table": "information_schema.views" } @@ -1014,8 +1014,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.`tables` where 1 != 1", - "Query": "select 1 as found from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", + "Query": "select 1 as `found` from information_schema.`tables` where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['music', 'Music']", "Table": "information_schema.`tables`" }, @@ -1026,8 +1026,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.views where 1 != 1", - "Query": "select 1 as found from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */ limit 1", + "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", + "Query": "select 1 as `found` from information_schema.views where table_schema = :__vtschemaname /* VARCHAR */ and table_schema = :__vtschemaname /* VARCHAR */ limit 1", "SysTableTableSchema": "['music', 'user']", "Table": "information_schema.views" } @@ -1064,8 +1064,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.`tables` where 1 != 1", - "Query": "select 1 as found from information_schema.`tables` where table_name = :table_name1 /* VARCHAR */ and table_name = :table_name1 /* VARCHAR */ limit :__upper_limit", + "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", + "Query": "select 1 as `found` from information_schema.`tables` where `table_name` = :table_name1 /* VARCHAR */ and `table_name` = :table_name1 /* VARCHAR */ limit :__upper_limit", "SysTableTableName": "[table_name1:'Music']", "Table": "information_schema.`tables`" }, @@ -1076,8 +1076,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.views where 1 != 1", - "Query": "select 1 as found from information_schema.views where table_name = :table_name2 /* VARCHAR */ and table_name = :table_name2 /* VARCHAR */ limit :__upper_limit", + "FieldQuery": "select 1 as `found` from information_schema.views where 1 != 1", + "Query": "select 1 as `found` from information_schema.views where `table_name` = :table_name2 /* VARCHAR */ and `table_name` = :table_name2 /* VARCHAR */ limit :__upper_limit", "SysTableTableName": "[table_name2:'user']", "Table": "information_schema.views" } @@ -1093,8 +1093,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select 1 as found from information_schema.`tables` where 1 != 1", - "Query": "select 1 as found from information_schema.`tables` where table_name = :table_name /* VARCHAR */ and table_name = :table_name /* VARCHAR */ and :__sq_has_values", + "FieldQuery": "select 1 as `found` from information_schema.`tables` where 1 != 1", + "Query": "select 1 as `found` from information_schema.`tables` where `table_name` = :table_name /* VARCHAR */ and `table_name` = :table_name /* VARCHAR */ and :__sq_has_values", "SysTableTableName": "[table_name:'Music']", "Table": "information_schema.`tables`" } @@ -1125,8 +1125,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_NAME from information_schema.`tables` as t where 1 != 1", - "Query": "select distinct TABLE_NAME from information_schema.`tables` as t where t.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select `TABLE_NAME` from information_schema.`tables` as t where 1 != 1", + "Query": "select distinct `TABLE_NAME` from information_schema.`tables` as t where t.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['a']", "Table": "information_schema.`tables`" }, @@ -1137,8 +1137,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_NAME from information_schema.`columns` where 1 != 1", - "Query": "select distinct TABLE_NAME from information_schema.`columns`", + "FieldQuery": "select `TABLE_NAME` from information_schema.`columns` where 1 != 1", + "Query": "select distinct `TABLE_NAME` from information_schema.`columns`", "Table": "information_schema.`columns`" } ] @@ -1179,8 +1179,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_NAME from information_schema.`tables` as t where 1 != 1", - "Query": "select distinct TABLE_NAME from information_schema.`tables` as t where t.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", + "FieldQuery": "select `TABLE_NAME` from information_schema.`tables` as t where 1 != 1", + "Query": "select distinct `TABLE_NAME` from information_schema.`tables` as t where t.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */", "SysTableTableSchema": "['a']", "Table": "information_schema.`tables`" }, @@ -1191,8 +1191,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select COLUMN_NAME from information_schema.`columns` where 1 != 1", - "Query": "select distinct COLUMN_NAME from information_schema.`columns`", + "FieldQuery": "select `COLUMN_NAME` from information_schema.`columns` where 1 != 1", + "Query": "select distinct `COLUMN_NAME` from information_schema.`columns`", "Table": "information_schema.`columns`" } ] @@ -1208,7 +1208,7 @@ "Sharded": false }, "FieldQuery": "select COLLATION_NAME from information_schema.`COLUMNS` as t where 1 != 1", - "Query": "select COLLATION_NAME from information_schema.`COLUMNS` as t where :__sq_has_values and COLUMN_NAME in ::__sq1", + "Query": "select COLLATION_NAME from information_schema.`COLUMNS` as t where :__sq_has_values and `COLUMN_NAME` in ::__sq1", "Table": "information_schema.`COLUMNS`" } ] @@ -1229,8 +1229,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", - "Query": "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = 'ks' or TABLE_SCHEMA = 'main'", + "FieldQuery": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where 1 != 1", + "Query": "select TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, TABLE_TYPE, `ENGINE`, VERSION, `ROW_FORMAT`, TABLE_ROWS, `AVG_ROW_LENGTH`, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, `AUTO_INCREMENT`, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT from INFORMATION_SCHEMA.`TABLES` where TABLE_SCHEMA = 'ks' or TABLE_SCHEMA = 'main'", "Table": "INFORMATION_SCHEMA.`TABLES`" } } @@ -1309,8 +1309,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select TABLE_NAME from information_schema.apa where 1 != 1", - "Query": "select TABLE_NAME from information_schema.apa", + "FieldQuery": "select `TABLE_NAME` from information_schema.apa where 1 != 1", + "Query": "select `TABLE_NAME` from information_schema.apa", "Table": "information_schema.apa" } } @@ -1329,8 +1329,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select c.column_name from (select table_name from information_schema.`tables` where 1 != 1) as `tables`, information_schema.`columns` as c where 1 != 1", - "Query": "select c.column_name from (select table_name from information_schema.`tables` where table_schema != 'information_schema' limit 1) as `tables`, information_schema.`columns` as c where `tables`.table_name = c.table_name", + "FieldQuery": "select c.`column_name` from (select `table_name` from information_schema.`tables` where 1 != 1) as `tables`, information_schema.`columns` as c where 1 != 1", + "Query": "select c.`column_name` from (select `table_name` from information_schema.`tables` where table_schema != 'information_schema' limit 1) as `tables`, information_schema.`columns` as c where `tables`.`table_name` = c.`table_name`", "Table": "information_schema.`columns`, information_schema.`tables`" } } diff --git a/go/vt/vtgate/planbuilder/testdata/select_cases.json b/go/vt/vtgate/planbuilder/testdata/select_cases.json index 835fd4497ce..f794e250801 100644 --- a/go/vt/vtgate/planbuilder/testdata/select_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/select_cases.json @@ -3508,8 +3508,8 @@ "Name": "user", "Sharded": true }, - "FieldQuery": "select id as found from `user` where 1 != 1", - "Query": "select id as found from `user`", + "FieldQuery": "select id as `found` from `user` where 1 != 1", + "Query": "select id as `found` from `user`", "Table": "`user`" }, { @@ -3694,7 +3694,7 @@ "Sharded": false }, "FieldQuery": "select 1 from dual where 1 != 1", - "Query": "select 1 from dual where exists (select 1 from information_schema.`TABLES` where `TABLES`.TABLE_NAME = :TABLES_TABLE_NAME /* VARCHAR */ and `TABLES`.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */)", + "Query": "select 1 from dual where exists (select 1 from information_schema.`TABLES` where `TABLES`.`TABLE_NAME` = :TABLES_TABLE_NAME /* VARCHAR */ and `TABLES`.TABLE_SCHEMA = :__vtschemaname /* VARCHAR */)", "SysTableTableName": "[TABLES_TABLE_NAME:'proc']", "SysTableTableSchema": "['mysql']", "Table": "dual" @@ -6286,8 +6286,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select `tables`.table_name from (select table_name from unsharded where 1 != 1) as `tables` where 1 != 1", - "Query": "select `tables`.table_name from (select table_name from unsharded limit 1) as `tables`", + "FieldQuery": "select `tables`.`table_name` from (select `table_name` from unsharded where 1 != 1) as `tables` where 1 != 1", + "Query": "select `tables`.`table_name` from (select `table_name` from unsharded limit 1) as `tables`", "Table": "unsharded" }, { @@ -6297,8 +6297,8 @@ "Name": "user", "Sharded": true }, - "FieldQuery": "select c.column_name from `user` as c where 1 != 1", - "Query": "select c.column_name from `user` as c where c.table_name = :tables_table_name", + "FieldQuery": "select c.`column_name` from `user` as c where 1 != 1", + "Query": "select c.`column_name` from `user` as c where c.`table_name` = :tables_table_name", "Table": "`user`" } ] diff --git a/go/vt/vtgate/planbuilder/testdata/sysschema_default.json b/go/vt/vtgate/planbuilder/testdata/sysschema_default.json index d7a480f9cce..bc5c23a08b2 100644 --- a/go/vt/vtgate/planbuilder/testdata/sysschema_default.json +++ b/go/vt/vtgate/planbuilder/testdata/sysschema_default.json @@ -36,8 +36,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select t.table_schema, t.table_name, c.column_name, c.column_type from information_schema.`tables` as t, information_schema.`columns` as c where 1 != 1", - "Query": "select t.table_schema, t.table_name, c.column_name, c.column_type from information_schema.`tables` as t, information_schema.`columns` as c where t.table_schema = :__vtschemaname /* VARCHAR */ and c.table_schema = :__vtschemaname /* VARCHAR */ and c.table_schema = t.table_schema and c.table_name = t.table_name order by t.table_schema asc, t.table_name asc, c.column_name asc", + "FieldQuery": "select t.table_schema, t.`table_name`, c.`column_name`, c.column_type from information_schema.`tables` as t, information_schema.`columns` as c where 1 != 1", + "Query": "select t.table_schema, t.`table_name`, c.`column_name`, c.column_type from information_schema.`tables` as t, information_schema.`columns` as c where t.table_schema = :__vtschemaname /* VARCHAR */ and c.table_schema = :__vtschemaname /* VARCHAR */ and c.table_schema = t.table_schema and c.`table_name` = t.`table_name` order by t.table_schema asc, t.`table_name` asc, c.`column_name` asc", "SysTableTableSchema": "['user']", "Table": "information_schema.`columns`, information_schema.`tables`" } @@ -57,8 +57,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select (select 1 from information_schema.schemata where 1 != 1) as `(select 1 from information_schema.schemata where schema_name = 'MyDatabase' limit 1)` from dual where 1 != 1", - "Query": "select (select 1 from information_schema.schemata where schema_name = :__vtschemaname /* VARCHAR */ limit 1) as `(select 1 from information_schema.schemata where schema_name = 'MyDatabase' limit 1)` from dual", + "FieldQuery": "select (select 1 from information_schema.schemata where 1 != 1) as `(select 1 from information_schema.schemata where ``schema_name`` = 'MyDatabase' limit 1)` from dual where 1 != 1", + "Query": "select (select 1 from information_schema.schemata where `schema_name` = :__vtschemaname /* VARCHAR */ limit 1) as `(select 1 from information_schema.schemata where ``schema_name`` = 'MyDatabase' limit 1)` from dual", "SysTableTableSchema": "['MyDatabase']", "Table": "dual" }, @@ -82,7 +82,7 @@ "Sharded": false }, "FieldQuery": "select `1` from (select 1 from information_schema.schemata where 1 != 1) as x where 1 != 1", - "Query": "select `1` from (select 1 from information_schema.schemata where schema_name = :__vtschemaname /* VARCHAR */ limit 1) as x", + "Query": "select `1` from (select 1 from information_schema.schemata where `schema_name` = :__vtschemaname /* VARCHAR */ limit 1) as x", "SysTableTableSchema": "['MyDatabase']", "Table": "information_schema.schemata" } diff --git a/go/vt/vtgate/planbuilder/testdata/union_cases.json b/go/vt/vtgate/planbuilder/testdata/union_cases.json index 7325a884c65..989dd9a9ef5 100644 --- a/go/vt/vtgate/planbuilder/testdata/union_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/union_cases.json @@ -1297,7 +1297,7 @@ "Original": "select * from (select kcu.`COLUMN_NAME` from `information_schema`.`key_column_usage` `kcu` where `kcu`.`table_schema` = 'user' and `kcu`.`table_name` = 'user_extra' union select kcu.`COLUMN_NAME` from `information_schema`.`key_column_usage` `kcu` where `kcu`.`table_schema` = 'user' and `kcu`.`table_name` = 'music') `kcu` where `COLUMN_NAME` = 'primary'", "Instructions": { "OperatorType": "Filter", - "Predicate": "COLUMN_NAME = 'primary'", + "Predicate": "`COLUMN_NAME` = 'primary'", "Inputs": [ { "OperatorType": "Distinct", @@ -1315,8 +1315,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select kcu.COLUMN_NAME from information_schema.key_column_usage as kcu where 1 != 1", - "Query": "select distinct kcu.COLUMN_NAME from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.table_name = :kcu_table_name /* VARCHAR */", + "FieldQuery": "select kcu.`COLUMN_NAME` from information_schema.key_column_usage as kcu where 1 != 1", + "Query": "select distinct kcu.`COLUMN_NAME` from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.`table_name` = :kcu_table_name /* VARCHAR */", "SysTableTableName": "[kcu_table_name:'user_extra']", "SysTableTableSchema": "['user']", "Table": "information_schema.key_column_usage" @@ -1328,8 +1328,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select kcu.COLUMN_NAME from information_schema.key_column_usage as kcu where 1 != 1", - "Query": "select distinct kcu.COLUMN_NAME from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.table_name = :kcu_table_name1 /* VARCHAR */", + "FieldQuery": "select kcu.`COLUMN_NAME` from information_schema.key_column_usage as kcu where 1 != 1", + "Query": "select distinct kcu.`COLUMN_NAME` from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.`table_name` = :kcu_table_name1 /* VARCHAR */", "SysTableTableName": "[kcu_table_name1:'music']", "SysTableTableSchema": "['user']", "Table": "information_schema.key_column_usage" @@ -1379,7 +1379,7 @@ "Original": "select * from (select * from `information_schema`.`key_column_usage` `kcu` where `kcu`.`table_schema` = 'user' and `kcu`.`table_name` = 'user_extra' union select * from `information_schema`.`key_column_usage` `kcu` where `kcu`.`table_schema` = 'user' and `kcu`.`table_name` = 'music') `kcu` where `constraint_name` = 'primary'", "Instructions": { "OperatorType": "Filter", - "Predicate": "constraint_name = 'primary'", + "Predicate": "`constraint_name` = 'primary'", "Inputs": [ { "OperatorType": "Distinct", @@ -1408,8 +1408,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as kcu where 1 != 1", - "Query": "select distinct CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.table_name = :kcu_table_name /* VARCHAR */", + "FieldQuery": "select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as kcu where 1 != 1", + "Query": "select distinct `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.`table_name` = :kcu_table_name /* VARCHAR */", "SysTableTableName": "[kcu_table_name:'user_extra']", "SysTableTableSchema": "['user']", "Table": "information_schema.key_column_usage" @@ -1421,8 +1421,8 @@ "Name": "main", "Sharded": false }, - "FieldQuery": "select CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as kcu where 1 != 1", - "Query": "select distinct CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.table_name = :kcu_table_name1 /* VARCHAR */", + "FieldQuery": "select `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as kcu where 1 != 1", + "Query": "select distinct `CONSTRAINT_CATALOG`, `CONSTRAINT_SCHEMA`, `CONSTRAINT_NAME`, TABLE_CATALOG, TABLE_SCHEMA, `TABLE_NAME`, `COLUMN_NAME`, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME from information_schema.key_column_usage as kcu where kcu.table_schema = :__vtschemaname /* VARCHAR */ and kcu.`table_name` = :kcu_table_name1 /* VARCHAR */", "SysTableTableName": "[kcu_table_name1:'music']", "SysTableTableSchema": "['user']", "Table": "information_schema.key_column_usage" diff --git a/go/vt/vtgate/planbuilder/testdata/unsharded_cases.json b/go/vt/vtgate/planbuilder/testdata/unsharded_cases.json new file mode 100644 index 00000000000..7be47c5960b --- /dev/null +++ b/go/vt/vtgate/planbuilder/testdata/unsharded_cases.json @@ -0,0 +1,42 @@ +[ + { + "comment": "simple create procedure when a single keyspace exists", + "query": "create procedure p1 (in a CHAR(3), out b INT) begin select c from x where d = e; end", + "plan": { + "Type": "DirectDDL", + "QueryType": "DDL", + "Original": "create procedure p1 (in a CHAR(3), out b INT) begin select c from x where d = e; end", + "Instructions": { + "OperatorType": "DDL", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "Query": "create procedure p1 (in a CHAR(3), out b INT) begin select c from x where d = e; end;" + }, + "TablesUsed": [ + "main.p1" + ] + } + }, + { + "comment": "simple drop procedure when a single keyspace exists", + "query": "drop procedure p1", + "plan": { + "Type": "DirectDDL", + "QueryType": "DDL", + "Original": "drop procedure p1", + "Instructions": { + "OperatorType": "DDL", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "Query": "drop procedure p1" + }, + "TablesUsed": [ + "main.p1" + ] + } + } +] \ No newline at end of file diff --git a/go/vt/vtgate/planbuilder/testdata/unsupported_cases.json b/go/vt/vtgate/planbuilder/testdata/unsupported_cases.json index e54050bce86..b7945538a35 100644 --- a/go/vt/vtgate/planbuilder/testdata/unsupported_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/unsupported_cases.json @@ -179,6 +179,11 @@ "query": "create view main.view_a as select * from user.user_extra", "plan": "VT12001: unsupported: Select query does not belong to the same keyspace as the view statement" }, + { + "comment": "create procedure in sharded keyspace", + "query": "create procedure user.p1 (in a CHAR(3), out b INT) begin select c from x where d = e; end", + "plan": "VT12001: unsupported: CREATE PROCEDURE is not supported on sharded keyspaces" + }, { "comment": "outer and inner subquery route reference the same \"uu.id\" name\n# but they refer to different things. The first reference is to the outermost query,\n# and the second reference is to the innermost 'from' subquery.\n# This query will never work as the inner derived table is only selecting one of the column", "query": "select id2 from user uu where id in (select id from user where id = uu.id and user.col in (select col from (select id from user_extra where user_id = 5) uu where uu.user_id = uu.id))", diff --git a/go/vt/vtgate/planbuilder/testdata/vschemas/unsharded_schema.json b/go/vt/vtgate/planbuilder/testdata/vschemas/unsharded_schema.json new file mode 100644 index 00000000000..76ebb913aaf --- /dev/null +++ b/go/vt/vtgate/planbuilder/testdata/vschemas/unsharded_schema.json @@ -0,0 +1,7 @@ +{ + "keyspaces": { + "main": { + "sharded": false + } + } +} \ No newline at end of file diff --git a/go/vt/vttablet/tabletmanager/vreplication/controller_plan_test.go b/go/vt/vttablet/tabletmanager/vreplication/controller_plan_test.go index 4d4383a79f1..2f1a1dff8c8 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/controller_plan_test.go +++ b/go/vt/vttablet/tabletmanager/vreplication/controller_plan_test.go @@ -258,7 +258,7 @@ func TestControllerPlan(t *testing.T) { err: "syntax error at position 4 near 'bad'", }, { in: "set a = 1", - err: "unsupported construct: set @@a = 1", + err: "unsupported construct: set a = 1", }} for _, tcase := range tcases { t.Run(tcase.in, func(t *testing.T) { diff --git a/go/vt/vttablet/tabletserver/health_streamer_test.go b/go/vt/vttablet/tabletserver/health_streamer_test.go index 9177cd5c70f..d9910cf6eab 100644 --- a/go/vt/vttablet/tabletserver/health_streamer_test.go +++ b/go/vt/vttablet/tabletserver/health_streamer_test.go @@ -454,8 +454,8 @@ func TestReloadView(t *testing.T) { expGetViewDefinitionsQuery: "select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('view_a', 'view_b')", expCreateStmtQuery: []string{"show create table view_a", "show create table view_b"}, expClearQuery: []string{ - "delete from _vt.views where TABLE_SCHEMA = database() and TABLE_NAME in ('view_a', 'view_b')", - "delete from _vt.views where TABLE_SCHEMA = database() and TABLE_NAME in ('view_b', 'view_a')", + "delete from _vt.views where TABLE_SCHEMA = database() and `TABLE_NAME` in ('view_a', 'view_b')", + "delete from _vt.views where TABLE_SCHEMA = database() and `TABLE_NAME` in ('view_b', 'view_a')", }, expInsertQuery: []string{ "insert into _vt.views(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'view_a', 'create_view_a', 'def_a')", @@ -473,7 +473,7 @@ func TestReloadView(t *testing.T) { expViewsChanged: []string{"view_b"}, expGetViewDefinitionsQuery: "select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('view_b')", expCreateStmtQuery: []string{"show create table view_b"}, - expClearQuery: []string{"delete from _vt.views where TABLE_SCHEMA = database() and TABLE_NAME in ('view_b')"}, + expClearQuery: []string{"delete from _vt.views where TABLE_SCHEMA = database() and `TABLE_NAME` in ('view_b')"}, expInsertQuery: []string{ "insert into _vt.views(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'view_b', 'create_view_mod_b', 'def_mod_b')", }, @@ -491,12 +491,12 @@ func TestReloadView(t *testing.T) { expGetViewDefinitionsQuery: "select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('view_b', 'view_c', 'view_a')", expCreateStmtQuery: []string{"show create table view_a", "show create table view_c"}, expClearQuery: []string{ - "delete from _vt.views where table_schema = database() and table_name in ('view_a', 'view_b', 'view_c')", - "delete from _vt.views where table_schema = database() and table_name in ('view_a', 'view_c', 'view_b')", - "delete from _vt.views where table_schema = database() and table_name in ('view_b', 'view_a', 'view_c')", - "delete from _vt.views where table_schema = database() and table_name in ('view_b', 'view_c', 'view_a')", - "delete from _vt.views where table_schema = database() and table_name in ('view_c', 'view_a', 'view_b')", - "delete from _vt.views where table_schema = database() and table_name in ('view_c', 'view_b', 'view_a')", + "delete from _vt.views where table_schema = database() and `table_name` in ('view_a', 'view_b', 'view_c')", + "delete from _vt.views where table_schema = database() and `table_name` in ('view_a', 'view_c', 'view_b')", + "delete from _vt.views where table_schema = database() and `table_name` in ('view_b', 'view_a', 'view_c')", + "delete from _vt.views where table_schema = database() and `table_name` in ('view_b', 'view_c', 'view_a')", + "delete from _vt.views where table_schema = database() and `table_name` in ('view_c', 'view_a', 'view_b')", + "delete from _vt.views where table_schema = database() and `table_name` in ('view_c', 'view_b', 'view_a')", }, expInsertQuery: []string{ "insert into _vt.views(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'view_a', 'create_view_mod_a', 'def_mod_a')", diff --git a/go/vt/vttablet/tabletserver/planbuilder/plan.go b/go/vt/vttablet/tabletserver/planbuilder/plan.go index e42833ab7da..8d63ea2e37b 100644 --- a/go/vt/vttablet/tabletserver/planbuilder/plan.go +++ b/go/vt/vttablet/tabletserver/planbuilder/plan.go @@ -345,7 +345,7 @@ func BuildSettingQuery(settings []string, parser *sqlparser.Parser) (query strin setExprs = append(setExprs, set.Exprs...) for _, sExpr := range set.Exprs { sysVar := sExpr.Var - if sysVar.Scope != sqlparser.SessionScope { + if sysVar.Scope != sqlparser.SessionScope && sysVar.Scope != sqlparser.NoScope { return "", "", vterrors.Errorf(vtrpcpb.Code_INTERNAL, "[BUG]: session scope expected, got: %s", sysVar.Scope.ToString()) } resetSetExprs = append(resetSetExprs, &sqlparser.SetExpr{Var: sysVar, Expr: lDefault}) diff --git a/go/vt/vttablet/tabletserver/query_executor_test.go b/go/vt/vttablet/tabletserver/query_executor_test.go index 1256465fcb6..7c682be0fab 100644 --- a/go/vt/vttablet/tabletserver/query_executor_test.go +++ b/go/vt/vttablet/tabletserver/query_executor_test.go @@ -1274,7 +1274,7 @@ func TestReplaceSchemaName(t *testing.T) { db := setUpQueryExecutorTest(t) defer db.Close() - queryFmt := "select * from information_schema.schema_name where schema_name = %s" + queryFmt := "select * from information_schema.`schema_name` where `schema_name` = %s" inQuery := fmt.Sprintf(queryFmt, ":"+sqltypes.BvSchemaName) wantQuery := fmt.Sprintf(queryFmt, fmt.Sprintf( "'%s' limit %d", diff --git a/go/vt/vttablet/tabletserver/schema/db_test.go b/go/vt/vttablet/tabletserver/schema/db_test.go index d0ff91b63d5..c08582ea65a 100644 --- a/go/vt/vttablet/tabletserver/schema/db_test.go +++ b/go/vt/vttablet/tabletserver/schema/db_test.go @@ -50,14 +50,14 @@ func TestGenerateFullQuery(t *testing.T) { }{ { name: "No bind variables", - query: "select TABLE_NAME, CREATE_TIME from `tables`", + query: "select `TABLE_NAME`, CREATE_TIME from `tables`", }, { name: "List bind variables", query: "DELETE FROM %s.`tables` WHERE TABLE_SCHEMA = database() AND TABLE_NAME IN ::tableNames", bv: map[string]*querypb.BindVariable{ "tableNames": tablesBV, }, - wantQuery: "delete from _vt.`tables` where TABLE_SCHEMA = database() and TABLE_NAME in ('t1', 'lead')", + wantQuery: "delete from _vt.`tables` where TABLE_SCHEMA = database() and `TABLE_NAME` in ('t1', 'lead')", }, { name: "Multiple bind variables", query: "INSERT INTO %s.`tables`(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, CREATE_TIME) values (database(), :table_name, :create_statement, :create_time)", @@ -66,7 +66,7 @@ func TestGenerateFullQuery(t *testing.T) { "create_statement": sqltypes.StringBindVariable("create table `lead`"), "create_time": sqltypes.Int64BindVariable(1), }, - wantQuery: "insert into _vt.`tables`(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, CREATE_TIME) values (database(), 'lead', 'create table `lead`', 1)", + wantQuery: "insert into _vt.`tables`(TABLE_SCHEMA, `TABLE_NAME`, CREATE_STATEMENT, CREATE_TIME) values (database(), 'lead', 'create table `lead`', 1)", }, { name: "parser error", query: "insert syntax error", @@ -74,7 +74,7 @@ func TestGenerateFullQuery(t *testing.T) { }, { name: "Multiple %v replacements", query: fetchTablesAndViews, - wantQuery: "select table_name, create_statement from _vt.`tables` where table_schema = database() union select table_name, create_statement from _vt.views where table_schema = database()", + wantQuery: "select `table_name`, create_statement from _vt.`tables` where table_schema = database() union select `table_name`, create_statement from _vt.views where table_schema = database()", }, } for _, tt := range tests { @@ -177,7 +177,7 @@ func TestGetViewDefinition(t *testing.T) { bv := map[string]*querypb.BindVariable{"viewNames": viewsBV} // Success - query := "select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('v1', 'lead')" + query := "select `table_name`, view_definition from information_schema.views where table_schema = database() and `table_name` in ('v1', 'lead')" db.AddQuery(query, sqltypes.MakeTestResult( sqltypes.MakeTestFields("table_name|view_definition", "varchar|varchar"), "v1|create_view_v1", @@ -382,7 +382,7 @@ func TestReloadTablesInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.`tables` where table_schema = database() and table_name in ('t1', 'lead')": {}, + "delete from _vt.`tables` where table_schema = database() and `table_name` in ('t1', 'lead')": {}, }, }, { name: "OnlyTablesToReload", @@ -401,13 +401,13 @@ func TestReloadTablesInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.`tables` where table_schema = database() and table_name in ('t1', 'lead')": {}, + "delete from _vt.`tables` where table_schema = database() and `table_name` in ('t1', 'lead')": {}, "show create table t1": sqltypes.MakeTestResult(showCreateTableFields, "t1|create_table_t1"), "show create table `lead`": sqltypes.MakeTestResult(showCreateTableFields, "lead|create_table_lead"), - "insert into _vt.`tables`(table_schema, table_name, create_statement, create_time) values (database(), 't1', 'create_table_t1', 1234)": {}, - "insert into _vt.`tables`(table_schema, table_name, create_statement, create_time) values (database(), 'lead', 'create_table_lead', 1234)": {}, + "insert into _vt.`tables`(table_schema, `table_name`, create_statement, create_time) values (database(), 't1', 'create_table_t1', 1234)": {}, + "insert into _vt.`tables`(table_schema, `table_name`, create_statement, create_time) values (database(), 'lead', 'create_table_lead', 1234)": {}, }, }, { name: "ReloadAndDelete", @@ -427,13 +427,13 @@ func TestReloadTablesInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.`tables` where table_schema = database() and table_name in ('t2', 'from', 't1', 'lead')": {}, + "delete from _vt.`tables` where table_schema = database() and `table_name` in ('t2', 'from', 't1', 'lead')": {}, "show create table t1": sqltypes.MakeTestResult(showCreateTableFields, "t1|create_table_t1"), "show create table `lead`": sqltypes.MakeTestResult(showCreateTableFields, "lead|create_table_lead"), - "insert into _vt.`tables`(table_schema, table_name, create_statement, create_time) values (database(), 't1', 'create_table_t1', 1234)": {}, - "insert into _vt.`tables`(table_schema, table_name, create_statement, create_time) values (database(), 'lead', 'create_table_lead', 1234)": {}, + "insert into _vt.`tables`(table_schema, `table_name`, create_statement, create_time) values (database(), 't1', 'create_table_t1', 1234)": {}, + "insert into _vt.`tables`(table_schema, `table_name`, create_statement, create_time) values (database(), 'lead', 'create_table_lead', 1234)": {}, }, }, { name: "ErrorInInsert", @@ -448,12 +448,12 @@ func TestReloadTablesInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.`tables` where table_schema = database() and table_name in ('t1')": {}, + "delete from _vt.`tables` where table_schema = database() and `table_name` in ('t1')": {}, "show create table t1": sqltypes.MakeTestResult(showCreateTableFields, "t1|create_table_t1"), }, queriesToReject: map[string]error{ - "insert into _vt.`tables`(table_schema, table_name, create_statement, create_time) values (database(), 't1', 'create_table_t1', 1234)": errors.New(errMessage), + "insert into _vt.`tables`(table_schema, `table_name`, create_statement, create_time) values (database(), 't1', 'create_table_t1', 1234)": errors.New(errMessage), }, expectedError: errMessage, }, @@ -504,7 +504,7 @@ func TestReloadViewsInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.views where table_schema = database() and table_name in ('v1', 'lead')": {}, + "delete from _vt.views where table_schema = database() and `table_name` in ('v1', 'lead')": {}, }, }, { name: "OnlyViewsToReload", @@ -523,8 +523,8 @@ func TestReloadViewsInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.views where table_schema = database() and table_name in ('v1', 'lead')": {}, - "select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('v1', 'lead')": sqltypes.MakeTestResult( + "delete from _vt.views where table_schema = database() and `table_name` in ('v1', 'lead')": {}, + "select `table_name`, view_definition from information_schema.views where table_schema = database() and `table_name` in ('v1', 'lead')": sqltypes.MakeTestResult( getViewDefinitionsFields, "lead|select_lead", "v1|select_v1"), @@ -532,8 +532,8 @@ func TestReloadViewsInDB(t *testing.T) { "v1|create_view_v1|utf8mb4|utf8mb4_0900_ai_ci"), "show create table `lead`": sqltypes.MakeTestResult(showCreateTableFields, "lead|create_view_lead|utf8mb4|utf8mb4_0900_ai_ci"), - "insert into _vt.views(table_schema, table_name, create_statement, view_definition) values (database(), 'v1', 'create_view_v1', 'select_v1')": {}, - "insert into _vt.views(table_schema, table_name, create_statement, view_definition) values (database(), 'lead', 'create_view_lead', 'select_lead')": {}, + "insert into _vt.views(table_schema, `table_name`, create_statement, view_definition) values (database(), 'v1', 'create_view_v1', 'select_v1')": {}, + "insert into _vt.views(table_schema, `table_name`, create_statement, view_definition) values (database(), 'lead', 'create_view_lead', 'select_lead')": {}, }, }, { name: "ReloadAndDelete", @@ -553,8 +553,8 @@ func TestReloadViewsInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.views where table_schema = database() and table_name in ('v2', 'from', 'v1', 'lead')": {}, - "select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('v2', 'from', 'v1', 'lead')": sqltypes.MakeTestResult( + "delete from _vt.views where table_schema = database() and `table_name` in ('v2', 'from', 'v1', 'lead')": {}, + "select `table_name`, view_definition from information_schema.views where table_schema = database() and `table_name` in ('v2', 'from', 'v1', 'lead')": sqltypes.MakeTestResult( getViewDefinitionsFields, "lead|select_lead", "v1|select_v1"), @@ -562,8 +562,8 @@ func TestReloadViewsInDB(t *testing.T) { "v1|create_view_v1|utf8mb4|utf8mb4_0900_ai_ci"), "show create table `lead`": sqltypes.MakeTestResult(showCreateTableFields, "lead|create_view_lead|utf8mb4|utf8mb4_0900_ai_ci"), - "insert into _vt.views(table_schema, table_name, create_statement, view_definition) values (database(), 'v1', 'create_view_v1', 'select_v1')": {}, - "insert into _vt.views(table_schema, table_name, create_statement, view_definition) values (database(), 'lead', 'create_view_lead', 'select_lead')": {}, + "insert into _vt.views(table_schema, `table_name`, create_statement, view_definition) values (database(), 'v1', 'create_view_v1', 'select_v1')": {}, + "insert into _vt.views(table_schema, `table_name`, create_statement, view_definition) values (database(), 'lead', 'create_view_lead', 'select_lead')": {}, }, }, { name: "ErrorInInsert", @@ -578,15 +578,15 @@ func TestReloadViewsInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.views where table_schema = database() and table_name in ('v1')": {}, - "select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('v1')": sqltypes.MakeTestResult( + "delete from _vt.views where table_schema = database() and `table_name` in ('v1')": {}, + "select `table_name`, view_definition from information_schema.views where table_schema = database() and `table_name` in ('v1')": sqltypes.MakeTestResult( getViewDefinitionsFields, "v1|select_v1"), "show create table v1": sqltypes.MakeTestResult(showCreateTableFields, "v1|create_view_v1|utf8mb4|utf8mb4_0900_ai_ci"), }, queriesToReject: map[string]error{ - "insert into _vt.views(table_schema, table_name, create_statement, view_definition) values (database(), 'v1', 'create_view_v1', 'select_v1')": errors.New(errMessage), + "insert into _vt.views(table_schema, `table_name`, create_statement, view_definition) values (database(), 'v1', 'create_view_v1', 'select_v1')": errors.New(errMessage), }, expectedError: errMessage, }, @@ -621,7 +621,7 @@ func TestReloadViewsInDB(t *testing.T) { func TestReloadDataInDB(t *testing.T) { showCreateViewFields := sqltypes.MakeTestFields(" View | Create View | character_set_client | collation_connection", "varchar|varchar|varchar|varchar") showCreateTableFields := sqltypes.MakeTestFields("Table | Create Table", "varchar|varchar") - getViewDefinitionsFields := sqltypes.MakeTestFields("table_name|view_definition", "varchar|varchar") + getViewDefinitionsFields := sqltypes.MakeTestFields("`table_name`|view_definition", "varchar|varchar") errMessage := "some error in MySQL" testCases := []struct { name string @@ -642,7 +642,7 @@ func TestReloadDataInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.views where table_schema = database() and table_name in ('v1', 'lead')": {}, + "delete from _vt.views where table_schema = database() and `table_name` in ('v1', 'lead')": {}, }, }, { name: "OnlyViewsToReload", @@ -664,8 +664,8 @@ func TestReloadDataInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.views where table_schema = database() and table_name in ('v1', 'lead')": {}, - "select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('v1', 'lead')": sqltypes.MakeTestResult( + "delete from _vt.views where table_schema = database() and `table_name` in ('v1', 'lead')": {}, + "select `table_name`, view_definition from information_schema.views where table_schema = database() and `table_name` in ('v1', 'lead')": sqltypes.MakeTestResult( getViewDefinitionsFields, "lead|select_lead", "v1|select_v1"), @@ -673,8 +673,8 @@ func TestReloadDataInDB(t *testing.T) { "v1|create_view_v1|utf8mb4|utf8mb4_0900_ai_ci"), "show create table `lead`": sqltypes.MakeTestResult(showCreateViewFields, "lead|create_view_lead|utf8mb4|utf8mb4_0900_ai_ci"), - "insert into _vt.views(table_schema, table_name, create_statement, view_definition) values (database(), 'v1', 'create_view_v1', 'select_v1')": {}, - "insert into _vt.views(table_schema, table_name, create_statement, view_definition) values (database(), 'lead', 'create_view_lead', 'select_lead')": {}, + "insert into _vt.views(table_schema, `table_name`, create_statement, view_definition) values (database(), 'v1', 'create_view_v1', 'select_v1')": {}, + "insert into _vt.views(table_schema, `table_name`, create_statement, view_definition) values (database(), 'lead', 'create_view_lead', 'select_lead')": {}, }, }, { name: "ReloadAndDeleteViews", @@ -700,8 +700,8 @@ func TestReloadDataInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.views where table_schema = database() and table_name in ('v2', 'from', 'v1', 'lead')": {}, - "select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('v2', 'from', 'v1', 'lead')": sqltypes.MakeTestResult( + "delete from _vt.views where table_schema = database() and `table_name` in ('v2', 'from', 'v1', 'lead')": {}, + "select `table_name`, view_definition from information_schema.views where table_schema = database() and `table_name` in ('v2', 'from', 'v1', 'lead')": sqltypes.MakeTestResult( getViewDefinitionsFields, "lead|select_lead", "v1|select_v1"), @@ -709,8 +709,8 @@ func TestReloadDataInDB(t *testing.T) { "v1|create_view_v1|utf8mb4|utf8mb4_0900_ai_ci"), "show create table `lead`": sqltypes.MakeTestResult(showCreateViewFields, "lead|create_view_lead|utf8mb4|utf8mb4_0900_ai_ci"), - "insert into _vt.views(table_schema, table_name, create_statement, view_definition) values (database(), 'v1', 'create_view_v1', 'select_v1')": {}, - "insert into _vt.views(table_schema, table_name, create_statement, view_definition) values (database(), 'lead', 'create_view_lead', 'select_lead')": {}, + "insert into _vt.views(table_schema, `table_name`, create_statement, view_definition) values (database(), 'v1', 'create_view_v1', 'select_v1')": {}, + "insert into _vt.views(table_schema, `table_name`, create_statement, view_definition) values (database(), 'lead', 'create_view_lead', 'select_lead')": {}, }, }, { name: "ErrorInInsertingViewData", @@ -725,15 +725,15 @@ func TestReloadDataInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.views where table_schema = database() and table_name in ('v1')": {}, - "select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('v1')": sqltypes.MakeTestResult( + "delete from _vt.views where table_schema = database() and `table_name` in ('v1')": {}, + "select `table_name`, view_definition from information_schema.views where table_schema = database() and `table_name` in ('v1')": sqltypes.MakeTestResult( getViewDefinitionsFields, "v1|select_v1"), "show create table v1": sqltypes.MakeTestResult(showCreateViewFields, "v1|create_view_v1|utf8mb4|utf8mb4_0900_ai_ci"), }, queriesToReject: map[string]error{ - "insert into _vt.views(table_schema, table_name, create_statement, view_definition) values (database(), 'v1', 'create_view_v1', 'select_v1')": errors.New(errMessage), + "insert into _vt.views(table_schema, `table_name`, create_statement, view_definition) values (database(), 'v1', 'create_view_v1', 'select_v1')": errors.New(errMessage), }, expectedError: errMessage, }, { @@ -746,7 +746,7 @@ func TestReloadDataInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.`tables` where table_schema = database() and table_name in ('t1', 'lead')": {}, + "delete from _vt.`tables` where table_schema = database() and `table_name` in ('t1', 'lead')": {}, }, }, { name: "OnlyTablesToReload", @@ -768,13 +768,13 @@ func TestReloadDataInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.`tables` where table_schema = database() and table_name in ('t1', 'lead')": {}, + "delete from _vt.`tables` where table_schema = database() and `table_name` in ('t1', 'lead')": {}, "show create table t1": sqltypes.MakeTestResult(showCreateTableFields, "t1|create_table_t1"), "show create table `lead`": sqltypes.MakeTestResult(showCreateTableFields, "lead|create_table_lead"), - "insert into _vt.`tables`(table_schema, table_name, create_statement, create_time) values (database(), 't1', 'create_table_t1', 1234)": {}, - "insert into _vt.`tables`(table_schema, table_name, create_statement, create_time) values (database(), 'lead', 'create_table_lead', 1234)": {}, + "insert into _vt.`tables`(table_schema, `table_name`, create_statement, create_time) values (database(), 't1', 'create_table_t1', 1234)": {}, + "insert into _vt.`tables`(table_schema, `table_name`, create_statement, create_time) values (database(), 'lead', 'create_table_lead', 1234)": {}, }, }, { name: "ReloadAndDeleteTables", @@ -800,13 +800,13 @@ func TestReloadDataInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.`tables` where table_schema = database() and table_name in ('t2', 'from', 't1', 'lead')": {}, + "delete from _vt.`tables` where table_schema = database() and `table_name` in ('t2', 'from', 't1', 'lead')": {}, "show create table t1": sqltypes.MakeTestResult(showCreateTableFields, "t1|create_table_t1"), "show create table `lead`": sqltypes.MakeTestResult(showCreateTableFields, "lead|create_table_lead"), - "insert into _vt.`tables`(table_schema, table_name, create_statement, create_time) values (database(), 't1', 'create_table_t1', 1234)": {}, - "insert into _vt.`tables`(table_schema, table_name, create_statement, create_time) values (database(), 'lead', 'create_table_lead', 1234)": {}, + "insert into _vt.`tables`(table_schema, `table_name`, create_statement, create_time) values (database(), 't1', 'create_table_t1', 1234)": {}, + "insert into _vt.`tables`(table_schema, `table_name`, create_statement, create_time) values (database(), 'lead', 'create_table_lead', 1234)": {}, }, }, { name: "ErrorInInsertingTableData", @@ -821,12 +821,12 @@ func TestReloadDataInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.`tables` where table_schema = database() and table_name in ('t1')": {}, + "delete from _vt.`tables` where table_schema = database() and `table_name` in ('t1')": {}, "show create table t1": sqltypes.MakeTestResult(showCreateTableFields, "t1|create_table_t1"), }, queriesToReject: map[string]error{ - "insert into _vt.`tables`(table_schema, table_name, create_statement, create_time) values (database(), 't1', 'create_table_t1', 1234)": errors.New(errMessage), + "insert into _vt.`tables`(table_schema, `table_name`, create_statement, create_time) values (database(), 't1', 'create_table_t1', 1234)": errors.New(errMessage), }, expectedError: errMessage, }, { @@ -862,8 +862,8 @@ func TestReloadDataInDB(t *testing.T) { "begin": {}, "commit": {}, "rollback": {}, - "delete from _vt.views where table_schema = database() and table_name in ('v2', 'from', 'v1', 'lead')": {}, - "select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('v2', 'from', 'v1', 'lead')": sqltypes.MakeTestResult( + "delete from _vt.views where table_schema = database() and `table_name` in ('v2', 'from', 'v1', 'lead')": {}, + "select `table_name`, view_definition from information_schema.views where table_schema = database() and `table_name` in ('v2', 'from', 'v1', 'lead')": sqltypes.MakeTestResult( getViewDefinitionsFields, "lead|select_lead", "v1|select_v1"), @@ -871,15 +871,15 @@ func TestReloadDataInDB(t *testing.T) { "v1|create_view_v1|utf8mb4|utf8mb4_0900_ai_ci"), "show create table `lead`": sqltypes.MakeTestResult(showCreateViewFields, "lead|create_view_lead|utf8mb4|utf8mb4_0900_ai_ci"), - "insert into _vt.views(table_schema, table_name, create_statement, view_definition) values (database(), 'v1', 'create_view_v1', 'select_v1')": {}, - "insert into _vt.views(table_schema, table_name, create_statement, view_definition) values (database(), 'lead', 'create_view_lead', 'select_lead')": {}, - "delete from _vt.`tables` where table_schema = database() and table_name in ('t2', 't1', 'where')": {}, + "insert into _vt.views(table_schema, `table_name`, create_statement, view_definition) values (database(), 'v1', 'create_view_v1', 'select_v1')": {}, + "insert into _vt.views(table_schema, `table_name`, create_statement, view_definition) values (database(), 'lead', 'create_view_lead', 'select_lead')": {}, + "delete from _vt.`tables` where table_schema = database() and `table_name` in ('t2', 't1', 'where')": {}, "show create table t1": sqltypes.MakeTestResult(showCreateTableFields, "t1|create_table_t1"), "show create table `where`": sqltypes.MakeTestResult(showCreateTableFields, "where|create_table_where"), - "insert into _vt.`tables`(table_schema, table_name, create_statement, create_time) values (database(), 't1', 'create_table_t1', 1234)": {}, - "insert into _vt.`tables`(table_schema, table_name, create_statement, create_time) values (database(), 'where', 'create_table_where', 1234)": {}, + "insert into _vt.`tables`(table_schema, `table_name`, create_statement, create_time) values (database(), 't1', 'create_table_t1', 1234)": {}, + "insert into _vt.`tables`(table_schema, `table_name`, create_statement, create_time) values (database(), 'where', 'create_table_where', 1234)": {}, }, }, } @@ -919,11 +919,11 @@ func TestGetFetchViewQuery(t *testing.T) { { name: "No views provided", viewNames: []string{}, - expectedQuery: "select table_name, create_statement from _vt.views where table_schema = database()", + expectedQuery: "select `table_name`, create_statement from _vt.views where table_schema = database()", }, { name: "Few views provided", viewNames: []string{"v1", "v2", "lead"}, - expectedQuery: "select table_name, create_statement from _vt.views where table_schema = database() and table_name in ('v1', 'v2', 'lead')", + expectedQuery: "select `table_name`, create_statement from _vt.views where table_schema = database() and `table_name` in ('v1', 'v2', 'lead')", }, } @@ -946,11 +946,11 @@ func TestGetFetchTableQuery(t *testing.T) { { name: "No tables provided", tableNames: []string{}, - expectedQuery: "select table_name, create_statement from _vt.`tables` where table_schema = database()", + expectedQuery: "select `table_name`, create_statement from _vt.`tables` where table_schema = database()", }, { name: "Few tables provided", tableNames: []string{"v1", "v2", "lead"}, - expectedQuery: "select table_name, create_statement from _vt.`tables` where table_schema = database() and table_name in ('v1', 'v2', 'lead')", + expectedQuery: "select `table_name`, create_statement from _vt.`tables` where table_schema = database() and `table_name` in ('v1', 'v2', 'lead')", }, } @@ -973,11 +973,11 @@ func TestGetFetchTableAndViewsQuery(t *testing.T) { { name: "No tables provided", tableNames: []string{}, - expectedQuery: "select table_name, create_statement from _vt.`tables` where table_schema = database() union select table_name, create_statement from _vt.views where table_schema = database()", + expectedQuery: "select `table_name`, create_statement from _vt.`tables` where table_schema = database() union select `table_name`, create_statement from _vt.views where table_schema = database()", }, { name: "Few tables provided", tableNames: []string{"t1", "t2", "v1", "v2", "lead"}, - expectedQuery: "select table_name, create_statement from _vt.`tables` where table_schema = database() and table_name in ('t1', 't2', 'v1', 'v2', 'lead') union select table_name, create_statement from _vt.views where table_schema = database() and table_name in ('t1', 't2', 'v1', 'v2', 'lead')", + expectedQuery: "select `table_name`, create_statement from _vt.`tables` where table_schema = database() and `table_name` in ('t1', 't2', 'v1', 'v2', 'lead') union select `table_name`, create_statement from _vt.views where table_schema = database() and `table_name` in ('t1', 't2', 'v1', 'v2', 'lead')", }, } diff --git a/go/vt/vttablet/tabletserver/schema/engine_test.go b/go/vt/vttablet/tabletserver/schema/engine_test.go index 7f67b3e3e58..29d4b8e411c 100644 --- a/go/vt/vttablet/tabletserver/schema/engine_test.go +++ b/go/vt/vttablet/tabletserver/schema/engine_test.go @@ -1557,10 +1557,10 @@ func TestEngineReload(t *testing.T) { db.AddQuery("commit", &sqltypes.Result{}) db.AddQuery("rollback", &sqltypes.Result{}) // We are adding both the variants of the delete statements that we can see in the test, since the deleted tables are initially stored as a map, the order is not defined. - db.AddQuery("delete from _vt.`tables` where TABLE_SCHEMA = database() and TABLE_NAME in ('t5', 't4', 'T2', 't2')", &sqltypes.Result{}) - db.AddQuery("delete from _vt.`tables` where TABLE_SCHEMA = database() and TABLE_NAME in ('t4', 't5', 'T2', 't2')", &sqltypes.Result{}) - db.AddQuery("insert into _vt.`tables`(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, CREATE_TIME) values (database(), 't2', 'create_table_t2', 123456790)", &sqltypes.Result{}) - db.AddQuery("insert into _vt.`tables`(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, CREATE_TIME) values (database(), 'T2', 'create_table_T2', 123456789)", &sqltypes.Result{}) + db.AddQuery("delete from _vt.`tables` where TABLE_SCHEMA = database() and `TABLE_NAME` in ('t5', 't4', 'T2', 't2')", &sqltypes.Result{}) + db.AddQuery("delete from _vt.`tables` where TABLE_SCHEMA = database() and `TABLE_NAME` in ('t4', 't5', 'T2', 't2')", &sqltypes.Result{}) + db.AddQuery("insert into _vt.`tables`(TABLE_SCHEMA, `TABLE_NAME`, CREATE_STATEMENT, CREATE_TIME) values (database(), 't2', 'create_table_t2', 123456790)", &sqltypes.Result{}) + db.AddQuery("insert into _vt.`tables`(TABLE_SCHEMA, `TABLE_NAME`, CREATE_STATEMENT, CREATE_TIME) values (database(), 'T2', 'create_table_T2', 123456789)", &sqltypes.Result{}) } // Queries for reloading the views' information. @@ -1571,22 +1571,22 @@ func TestEngineReload(t *testing.T) { fmt.Sprintf("%v|create_table_%v|utf8mb4|utf8mb4_0900_ai_ci", tableName, tableName))) } // We are adding both the variants of the select statements that we can see in the test, since the deleted views are initially stored as a map, the order is not defined. - db.AddQuery("select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('v4', 'v5', 'V2', 'v2')", + db.AddQuery("select `table_name`, view_definition from information_schema.views where table_schema = database() and `table_name` in ('v4', 'v5', 'V2', 'v2')", sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name|view_definition", "varchar|varchar"), "v2|select_v2", "V2|select_V2", )) - db.AddQuery("select table_name, view_definition from information_schema.views where table_schema = database() and table_name in ('v5', 'v4', 'V2', 'v2')", + db.AddQuery("select `table_name`, view_definition from information_schema.views where table_schema = database() and `table_name` in ('v5', 'v4', 'V2', 'v2')", sqltypes.MakeTestResult(sqltypes.MakeTestFields("table_name|view_definition", "varchar|varchar"), "v2|select_v2", "V2|select_V2", )) // We are adding both the variants of the delete statements that we can see in the test, since the deleted views are initially stored as a map, the order is not defined. - db.AddQuery("delete from _vt.views where TABLE_SCHEMA = database() and TABLE_NAME in ('v4', 'v5', 'V2', 'v2')", &sqltypes.Result{}) - db.AddQuery("delete from _vt.views where TABLE_SCHEMA = database() and TABLE_NAME in ('v5', 'v4', 'V2', 'v2')", &sqltypes.Result{}) - db.AddQuery("insert into _vt.views(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'v2', 'create_table_v2', 'select_v2')", &sqltypes.Result{}) - db.AddQuery("insert into _vt.views(TABLE_SCHEMA, TABLE_NAME, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'V2', 'create_table_V2', 'select_V2')", &sqltypes.Result{}) + db.AddQuery("delete from _vt.views where TABLE_SCHEMA = database() and `TABLE_NAME` in ('v4', 'v5', 'V2', 'v2')", &sqltypes.Result{}) + db.AddQuery("delete from _vt.views where TABLE_SCHEMA = database() and `TABLE_NAME` in ('v5', 'v4', 'V2', 'v2')", &sqltypes.Result{}) + db.AddQuery("insert into _vt.views(TABLE_SCHEMA, `TABLE_NAME`, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'v2', 'create_table_v2', 'select_v2')", &sqltypes.Result{}) + db.AddQuery("insert into _vt.views(TABLE_SCHEMA, `TABLE_NAME`, CREATE_STATEMENT, VIEW_DEFINITION) values (database(), 'V2', 'create_table_V2', 'select_V2')", &sqltypes.Result{}) } // adding query pattern for udfs diff --git a/go/vt/vttablet/tabletserver/tabletserver_test.go b/go/vt/vttablet/tabletserver/tabletserver_test.go index ef79560ca8f..93a4c40d0ff 100644 --- a/go/vt/vttablet/tabletserver/tabletserver_test.go +++ b/go/vt/vttablet/tabletserver/tabletserver_test.go @@ -2340,14 +2340,14 @@ func TestReserveExecute_WithoutTx(t *testing.T) { defer tsv.StopService() defer db.Close() - db.AddQueryPattern("set @@sql_mode = ''", &sqltypes.Result{}) + db.AddQueryPattern("set sql_mode = ''", &sqltypes.Result{}) target := querypb.Target{TabletType: topodatapb.TabletType_PRIMARY} state, _, err := tsv.ReserveExecute(ctx, &target, nil, "set sql_mode = ''", nil, 0, &querypb.ExecuteOptions{}) require.NoError(t, err) assert.NotEqual(t, int64(0), state.ReservedID, "reservedID should not be zero") expected := []string{ - "set @@sql_mode = ''", + "set sql_mode = ''", } splitOutput := strings.Split(db.QueryLog(), ";") for _, exp := range expected { @@ -2364,7 +2364,7 @@ func TestReserveExecute_WithTx(t *testing.T) { defer tsv.StopService() defer db.Close() - db.AddQueryPattern("set @@sql_mode = ''", &sqltypes.Result{}) + db.AddQueryPattern("set sql_mode = ''", &sqltypes.Result{}) target := querypb.Target{TabletType: topodatapb.TabletType_PRIMARY} beginState, err := tsv.Begin(ctx, &target, &querypb.ExecuteOptions{}) @@ -2377,7 +2377,7 @@ func TestReserveExecute_WithTx(t *testing.T) { defer tsv.Release(ctx, &target, beginState.TransactionID, reserveState.ReservedID) assert.Equal(t, beginState.TransactionID, reserveState.ReservedID, "reservedID should be equal to transactionID") expected := []string{ - "set @@sql_mode = ''", + "set sql_mode = ''", } splitOutput := strings.Split(db.QueryLog(), ";") for _, exp := range expected { @@ -2470,7 +2470,7 @@ func TestReserveStats(t *testing.T) { defer tsv.StopService() defer db.Close() - db.AddQueryPattern("set @@sql_mode = ''", &sqltypes.Result{}) + db.AddQueryPattern("set sql_mode = ''", &sqltypes.Result{}) target := querypb.Target{TabletType: topodatapb.TabletType_PRIMARY} callerID := &querypb.VTGateCallerID{ diff --git a/tools/check_make_parser.sh b/tools/check_make_parser.sh index c3bd129bd30..6c15a695e43 100755 --- a/tools/check_make_parser.sh +++ b/tools/check_make_parser.sh @@ -20,7 +20,7 @@ fi mv $CUR $TMP output=$(go run ./goyacc -fo $CUR sql.y) -expectedOutput=$'\nconflicts: 4 shift/reduce' +expectedOutput=$'\nconflicts: 5 shift/reduce' if [[ "$output" != "$expectedOutput" ]]; then echo -e "Expected output from goyacc:$expectedOutput\ngot:$output"