diff --git a/go/vt/sqlparser/analyzer.go b/go/vt/sqlparser/analyzer.go index 3469edcd0c2..466a2346584 100644 --- a/go/vt/sqlparser/analyzer.go +++ b/go/vt/sqlparser/analyzer.go @@ -20,7 +20,6 @@ package sqlparser import ( "fmt" - "strconv" "strings" "unicode" @@ -96,6 +95,15 @@ func CanNormalize(stmt Statement) bool { return false } +//IsSetStatement takes Statement and returns if the statement is set statement. +func IsSetStatement(stmt Statement) bool { + switch stmt.(type) { + case *Set: + return true + } + return false +} + // Preview analyzes the beginning of the query using a simpler and faster // textual comparison to identify the statement type. func Preview(sql string) StatementType { @@ -365,101 +373,3 @@ func NewPlanValue(node Expr) (sqltypes.PlanValue, error) { } return sqltypes.PlanValue{}, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "expression is too complex '%v'", String(node)) } - -// SetKey is the extracted key from one SetExpr -type SetKey struct { - Key string - Scope string -} - -// ExtractSetValues returns a map of key-value pairs -// if the query is a SET statement. Values can be bool, int64 or string. -// Since set variable names are case insensitive, all keys are returned -// as lower case. -func ExtractSetValues(sql string) (keyValues map[SetKey]interface{}, scope string, err error) { - stmt, err := Parse(sql) - if err != nil { - return nil, "", err - } - setStmt, ok := stmt.(*Set) - if !ok { - return nil, "", fmt.Errorf("ast did not yield *sqlparser.Set: %T", stmt) - } - result := make(map[SetKey]interface{}) - for _, expr := range setStmt.Exprs { - var scope string - key := expr.Name.Lowered() - - switch expr.Name.at { - case NoAt: - scope = ImplicitStr - case SingleAt: - scope = VariableStr - case DoubleAt: - switch { - case strings.HasPrefix(key, "global."): - scope = GlobalStr - key = strings.TrimPrefix(key, "global.") - case strings.HasPrefix(key, "session."): - scope = SessionStr - key = strings.TrimPrefix(key, "session.") - case strings.HasPrefix(key, "vitess_metadata."): - scope = VitessMetadataStr - key = strings.TrimPrefix(key, "vitess_metadata.") - default: - scope = SessionStr - } - - // This is what correctly allows us to handle queries such as "set @@session.`autocommit`=1" - // it will remove backticks and double quotes that might surround the part after the first period - _, out := NewStringTokenizer(key).Scan() - key = string(out) - } - - if setStmt.Scope != "" && scope != "" { - return nil, "", fmt.Errorf("unsupported in set: mixed using of variable scope") - } - - setKey := SetKey{ - Key: key, - Scope: scope, - } - - switch expr := expr.Expr.(type) { - case *SQLVal: - switch expr.Type { - case StrVal: - result[setKey] = strings.ToLower(string(expr.Val)) - case IntVal: - num, err := strconv.ParseInt(string(expr.Val), 0, 64) - if err != nil { - return nil, "", err - } - result[setKey] = num - case FloatVal: - num, err := strconv.ParseFloat(string(expr.Val), 64) - if err != nil { - return nil, "", err - } - result[setKey] = num - default: - return nil, "", fmt.Errorf("invalid value type: %v", String(expr)) - } - case BoolVal: - var val int64 - if expr { - val = 1 - } - result[setKey] = val - case *ColName: - result[setKey] = expr.Name.String() - case *NullVal: - result[setKey] = nil - case *Default: - result[setKey] = "default" - default: - return nil, "", fmt.Errorf("invalid syntax: %s", String(expr)) - } - } - return result, strings.ToLower(setStmt.Scope), nil -} diff --git a/go/vt/sqlparser/analyzer_test.go b/go/vt/sqlparser/analyzer_test.go index a0d6e731965..5ec11870b21 100644 --- a/go/vt/sqlparser/analyzer_test.go +++ b/go/vt/sqlparser/analyzer_test.go @@ -21,9 +21,6 @@ import ( "strings" "testing" - "github.com/google/go-cmp/cmp" - "github.com/stretchr/testify/require" - "github.com/stretchr/testify/assert" "vitess.io/vitess/go/sqltypes" ) @@ -435,188 +432,6 @@ func TestNewPlanValue(t *testing.T) { } } -func TestExtractSetValues(t *testing.T) { - testcases := []struct { - sql string - out map[SetKey]interface{} - scope string - err string - }{{ - sql: "invalid", - err: "syntax error at position 8 near 'invalid'", - }, { - sql: "select * from t", - err: "ast did not yield *sqlparser.Set: *sqlparser.Select", - }, { - sql: "set autocommit=1+1", - err: "invalid syntax: 1 + 1", - }, { - sql: "set transaction_mode='single'", - out: map[SetKey]interface{}{{Key: "transaction_mode", Scope: ImplicitStr}: "single"}, - }, { - sql: "set autocommit=1", - out: map[SetKey]interface{}{{Key: "autocommit", Scope: ImplicitStr}: int64(1)}, - }, { - sql: "set autocommit=true", - out: map[SetKey]interface{}{{Key: "autocommit", Scope: ImplicitStr}: int64(1)}, - }, { - sql: "set autocommit=false", - out: map[SetKey]interface{}{{Key: "autocommit", Scope: ImplicitStr}: int64(0)}, - }, { - sql: "set autocommit=on", - out: map[SetKey]interface{}{{Key: "autocommit", Scope: ImplicitStr}: "on"}, - }, { - sql: "set autocommit=off", - out: map[SetKey]interface{}{{Key: "autocommit", Scope: ImplicitStr}: "off"}, - }, { - sql: "set @@global.autocommit=1", - out: map[SetKey]interface{}{{Key: "autocommit", Scope: GlobalStr}: int64(1)}, - }, { - sql: "set @@global.autocommit=1", - out: map[SetKey]interface{}{{Key: "autocommit", Scope: GlobalStr}: int64(1)}, - }, { - sql: "set @@session.autocommit=1", - out: map[SetKey]interface{}{{Key: "autocommit", Scope: SessionStr}: int64(1)}, - }, { - sql: "set @@session.`autocommit`=1", - out: map[SetKey]interface{}{{Key: "autocommit", Scope: SessionStr}: int64(1)}, - }, { - sql: "set @@session.'autocommit'=1", - out: map[SetKey]interface{}{{Key: "autocommit", Scope: SessionStr}: int64(1)}, - }, { - sql: "set @@session.\"autocommit\"=1", - out: map[SetKey]interface{}{{Key: "autocommit", Scope: SessionStr}: int64(1)}, - }, { - sql: "set @@session.'\"autocommit'=1", - out: map[SetKey]interface{}{{Key: "\"autocommit", Scope: SessionStr}: int64(1)}, - }, { - sql: "set @@session.`autocommit'`=1", - out: map[SetKey]interface{}{{Key: "autocommit'", Scope: SessionStr}: int64(1)}, - }, { - sql: "set AUTOCOMMIT=1", - out: map[SetKey]interface{}{{Key: "autocommit", Scope: ImplicitStr}: int64(1)}, - }, { - sql: "SET character_set_results = NULL", - out: map[SetKey]interface{}{{Key: "character_set_results", Scope: ImplicitStr}: nil}, - }, { - sql: "SET foo = 0x1234", - err: "invalid value type: 0x1234", - }, { - sql: "SET names utf8", - out: map[SetKey]interface{}{{Key: "names", Scope: ImplicitStr}: "utf8"}, - }, { - sql: "SET names ascii collate ascii_bin", - out: map[SetKey]interface{}{{Key: "names", Scope: ImplicitStr}: "ascii"}, - }, { - sql: "SET charset default", - out: map[SetKey]interface{}{{Key: "charset", Scope: ImplicitStr}: "default"}, - }, { - sql: "SET character set ascii", - out: map[SetKey]interface{}{{Key: "charset", Scope: ImplicitStr}: "ascii"}, - }, { - sql: "SET SESSION wait_timeout = 3600", - out: map[SetKey]interface{}{{Key: "wait_timeout", Scope: ImplicitStr}: int64(3600)}, - scope: SessionStr, - }, { - sql: "SET GLOBAL wait_timeout = 3600", - out: map[SetKey]interface{}{{Key: "wait_timeout", Scope: ImplicitStr}: int64(3600)}, - scope: GlobalStr, - }, { - sql: "set session transaction isolation level repeatable read", - out: map[SetKey]interface{}{{Key: TransactionStr, Scope: ImplicitStr}: IsolationLevelRepeatableRead}, - scope: SessionStr, - }, { - sql: "set session transaction isolation level read committed", - out: map[SetKey]interface{}{{Key: TransactionStr, Scope: ImplicitStr}: IsolationLevelReadCommitted}, - scope: SessionStr, - }, { - sql: "set session transaction isolation level read uncommitted", - out: map[SetKey]interface{}{{Key: TransactionStr, Scope: ImplicitStr}: IsolationLevelReadUncommitted}, - scope: SessionStr, - }, { - sql: "set session transaction isolation level serializable", - out: map[SetKey]interface{}{{Key: TransactionStr, Scope: ImplicitStr}: IsolationLevelSerializable}, - scope: SessionStr, - }, { - sql: "set transaction isolation level serializable", - out: map[SetKey]interface{}{{Key: TransactionStr, Scope: ImplicitStr}: IsolationLevelSerializable}, - }, { - sql: "set transaction read only", - out: map[SetKey]interface{}{{Key: TransactionStr, Scope: ImplicitStr}: TxReadOnly}, - }, { - sql: "set transaction read write", - out: map[SetKey]interface{}{{Key: TransactionStr, Scope: ImplicitStr}: TxReadWrite}, - }, { - sql: "set session transaction read write", - out: map[SetKey]interface{}{{Key: TransactionStr, Scope: ImplicitStr}: TxReadWrite}, - scope: SessionStr, - }, { - sql: "set session tx_read_only = 0", - out: map[SetKey]interface{}{{Key: "tx_read_only", Scope: ImplicitStr}: int64(0)}, - scope: SessionStr, - }, { - sql: "set session tx_read_only = 1", - out: map[SetKey]interface{}{{Key: "tx_read_only", Scope: ImplicitStr}: int64(1)}, - scope: SessionStr, - }, { - sql: "set session sql_safe_updates = 0", - out: map[SetKey]interface{}{{Key: "sql_safe_updates", Scope: ImplicitStr}: int64(0)}, - scope: SessionStr, - }, { - sql: "set session transaction_read_only = 0", - out: map[SetKey]interface{}{{Key: "transaction_read_only", Scope: ImplicitStr}: int64(0)}, - scope: SessionStr, - }, { - sql: "set session transaction_read_only = 1", - out: map[SetKey]interface{}{{Key: "transaction_read_only", Scope: ImplicitStr}: int64(1)}, - scope: SessionStr, - }, { - sql: "set session sql_safe_updates = 1", - out: map[SetKey]interface{}{{Key: "sql_safe_updates", Scope: ImplicitStr}: int64(1)}, - scope: SessionStr, - }, { - sql: "set @foo = 42", - out: map[SetKey]interface{}{ - {Key: "foo", Scope: VariableStr}: int64(42), - }, - scope: ImplicitStr, - }, { - sql: "set @foo.bar.baz = 42", - out: map[SetKey]interface{}{ - {Key: "foo.bar.baz", Scope: VariableStr}: int64(42), - }, - scope: ImplicitStr, - }, { - sql: "set @`string` = 'abc', @`float` = 4.2, @`int` = 42", - out: map[SetKey]interface{}{ - {Key: "string", Scope: VariableStr}: "abc", - {Key: "float", Scope: VariableStr}: 4.2, - {Key: "int", Scope: VariableStr}: int64(42), - }, - scope: ImplicitStr, - }, { - sql: "set session @foo = 42", - err: "unsupported in set: scope and user defined variables", - }, { - sql: "set global @foo = 42", - err: "unsupported in set: scope and user defined variables", - }} - for _, tcase := range testcases { - t.Run(tcase.sql, func(t *testing.T) { - out, _, err := ExtractSetValues(tcase.sql) - if tcase.err != "" { - require.Error(t, err, tcase.err) - } else if err != nil { - require.NoError(t, err) - } - - if diff := cmp.Diff(tcase.out, out); diff != "" { - t.Error(diff) - } - }) - } -} - func newStrVal(in string) *SQLVal { return NewStrVal([]byte(in)) } diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 09c85e8ce93..a52dbbce444 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -132,7 +132,30 @@ type ( Set struct { Comments Comments Exprs SetExprs - Scope string + } + + // SetTransaction represents a SET TRANSACTION statement. + SetTransaction struct { + SQLNode + Comments Comments + Scope string + Characteristics []Characteristic + } + + // Characteristic is a transaction related change + Characteristic interface { + SQLNode + iChar() + } + + // IsolationLevel is self-explanatory in this context + IsolationLevel struct { + Level string + } + + // AccessMode is ReadOnly/ReadWrite + AccessMode struct { + Mode string } // DBDDL represents a CREATE, DROP, or ALTER database statement. @@ -222,6 +245,7 @@ func (*Insert) iStatement() {} func (*Update) iStatement() {} func (*Delete) iStatement() {} func (*Set) iStatement() {} +func (*SetTransaction) iStatement() {} func (*DBDDL) iStatement() {} func (*DDL) iStatement() {} func (*Show) iStatement() {} @@ -782,8 +806,9 @@ type SetExprs []*SetExpr // SetExpr represents a set expression. type SetExpr struct { - Name ColIdent - Expr Expr + Scope string + Name ColIdent + Expr Expr } // OnDup represents an ON DUPLICATE KEY clause. @@ -860,10 +885,22 @@ func (node *Delete) Format(buf *TrackedBuffer) { // Format formats the node. func (node *Set) Format(buf *TrackedBuffer) { + buf.astPrintf(node, "set %v%v", node.Comments, node.Exprs) +} + +// Format formats the node. +func (node *SetTransaction) Format(buf *TrackedBuffer) { if node.Scope == "" { - buf.astPrintf(node, "set %v%v", node.Comments, node.Exprs) + buf.astPrintf(node, "set %vtransaction ", node.Comments) } else { - buf.astPrintf(node, "set %v%s %v", node.Comments, node.Scope, node.Exprs) + buf.astPrintf(node, "set %v%s transaction ", node.Comments, node.Scope) + } + + for i, char := range node.Characteristics { + if i > 0 { + buf.WriteString(", ") + } + buf.astPrintf(node, "%v", char) } } @@ -1719,13 +1756,18 @@ func (node SetExprs) Format(buf *TrackedBuffer) { // Format formats the node. func (node *SetExpr) Format(buf *TrackedBuffer) { + if node.Scope != "" { + buf.WriteString(node.Scope) + buf.WriteString(" ") + } // We don't have to backtick set variable names. - if node.Name.EqualString("charset") || node.Name.EqualString("names") { + switch { + case node.Name.EqualString("charset") || node.Name.EqualString("names"): buf.astPrintf(node, "%s %v", node.Name.String(), node.Expr) - } else if node.Name.EqualString(TransactionStr) { + case node.Name.EqualString(TransactionStr): sqlVal := node.Expr.(*SQLVal) buf.astPrintf(node, "%s %s", node.Name.String(), strings.ToLower(string(sqlVal.Val))) - } else { + default: buf.astPrintf(node, "%v = %v", node.Name, node.Expr) } } @@ -1755,3 +1797,16 @@ func (node TableIdent) Format(buf *TrackedBuffer) { func (node ColIdent) AtCount() AtCount { return node.at } + +func (*IsolationLevel) iChar() {} +func (*AccessMode) iChar() {} + +// Format formats the node. +func (node *IsolationLevel) Format(buf *TrackedBuffer) { + buf.WriteString("isolation level " + node.Level) +} + +// Format formats the node. +func (node *AccessMode) Format(buf *TrackedBuffer) { + buf.WriteString(node.Mode) +} diff --git a/go/vt/sqlparser/constants.go b/go/vt/sqlparser/constants.go index 13c22dc8be5..74807baa0c7 100644 --- a/go/vt/sqlparser/constants.go +++ b/go/vt/sqlparser/constants.go @@ -154,10 +154,11 @@ const ( // TransactionStr is the Name for a SET TRANSACTION statement TransactionStr = "transaction" - IsolationLevelReadUncommitted = "isolation level read uncommitted" - IsolationLevelReadCommitted = "isolation level read committed" - IsolationLevelRepeatableRead = "isolation level repeatable read" - IsolationLevelSerializable = "isolation level serializable" + // Transaction isolation levels + ReadUncommitted = "read uncommitted" + ReadCommitted = "read committed" + RepeatableRead = "repeatable read" + Serializable = "serializable" TxReadOnly = "read only" TxReadWrite = "read write" diff --git a/go/vt/sqlparser/expression_rewriting.go b/go/vt/sqlparser/expression_rewriting.go index be933738aa1..514cafb4636 100644 --- a/go/vt/sqlparser/expression_rewriting.go +++ b/go/vt/sqlparser/expression_rewriting.go @@ -24,8 +24,10 @@ import ( ) // PrepareAST will normalize the query -func PrepareAST(in Statement, bindVars map[string]*querypb.BindVariable, prefix string) (*RewriteASTResult, error) { - Normalize(in, bindVars, prefix) +func PrepareAST(in Statement, bindVars map[string]*querypb.BindVariable, prefix string, parameterize bool) (*RewriteASTResult, error) { + if parameterize { + Normalize(in, bindVars, prefix) + } return RewriteAST(in) } @@ -41,10 +43,17 @@ type BindVarNeeds struct { func RewriteAST(in Statement) (*RewriteASTResult, error) { er := newExpressionRewriter() er.shouldRewriteDatabaseFunc = shouldRewriteDatabaseFunc(in) - Rewrite(in, er.goingDown, nil) + setRewriter := &setNormalizer{} + out, ok := Rewrite(in, er.goingDown, setRewriter.rewriteSetComingUp).(Statement) + if !ok { + return nil, vterrors.Errorf(vtrpc.Code_INTERNAL, "statement rewriting returned a non statement: %s", String(out)) + } + if setRewriter.err != nil { + return nil, setRewriter.err + } r := &RewriteASTResult{ - AST: in, + AST: out, } if _, ok := er.bindVars[LastInsertIDName]; ok { r.NeedLastInsertID = true diff --git a/go/vt/sqlparser/rewriter.go b/go/vt/sqlparser/rewriter.go index bb5e386b09c..b9388e5bc28 100644 --- a/go/vt/sqlparser/rewriter.go +++ b/go/vt/sqlparser/rewriter.go @@ -579,6 +579,20 @@ func (r *replaceSetExprsItems) inc() { *r++ } +type replaceSetTransactionCharacteristics int + +func (r *replaceSetTransactionCharacteristics) replace(newNode, container SQLNode) { + container.(*SetTransaction).Characteristics[int(*r)] = newNode.(Characteristic) +} + +func (r *replaceSetTransactionCharacteristics) inc() { + *r++ +} + +func replaceSetTransactionComments(newNode, parent SQLNode) { + parent.(*SetTransaction).Comments = newNode.(Comments) +} + func replaceShowOnTable(newNode, parent SQLNode) { parent.(*Show).OnTable = newNode.(TableName) } @@ -842,6 +856,8 @@ func (a *application) apply(parent, node SQLNode, replacer replacerFunc) { // (the order of the cases is alphabetical) switch n := node.(type) { case nil: + case *AccessMode: + case *AliasedExpr: a.apply(node, n.As, replaceAliasedExprAs) a.apply(node, n.Expr, replaceAliasedExprExpr) @@ -1029,6 +1045,8 @@ func (a *application) apply(parent, node SQLNode, replacer replacerFunc) { case *IsExpr: a.apply(node, n.Expr, replaceIsExprExpr) + case *IsolationLevel: + case JoinCondition: a.apply(node, n.On, replaceJoinConditionOn) a.apply(node, n.Using, replaceJoinConditionUsing) @@ -1158,6 +1176,15 @@ func (a *application) apply(parent, node SQLNode, replacer replacerFunc) { replacerRef.inc() } + case *SetTransaction: + replacerCharacteristics := replaceSetTransactionCharacteristics(0) + replacerCharacteristicsB := &replacerCharacteristics + for _, item := range n.Characteristics { + a.apply(node, item, replacerCharacteristicsB.replace) + replacerCharacteristicsB.inc() + } + a.apply(node, n.Comments, replaceSetTransactionComments) + case *Show: a.apply(node, n.OnTable, replaceShowOnTable) a.apply(node, n.Table, replaceShowTable) diff --git a/go/vt/sqlparser/set_normalizer.go b/go/vt/sqlparser/set_normalizer.go new file mode 100644 index 00000000000..4926708582f --- /dev/null +++ b/go/vt/sqlparser/set_normalizer.go @@ -0,0 +1,81 @@ +/* +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 ( + "strings" + + "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/vterrors" +) + +type setNormalizer struct { + err error +} + +func (n *setNormalizer) rewriteSetComingUp(cursor *Cursor) bool { + set, ok := cursor.node.(*Set) + if ok { + for i, expr := range set.Exprs { + exp, err := n.normalizeSetExpr(expr) + if err != nil { + n.err = err + return false + } + set.Exprs[i] = exp + } + } + return true +} + +func (n *setNormalizer) normalizeSetExpr(in *SetExpr) (*SetExpr, error) { + switch in.Name.at { // using switch so we can use break + case DoubleAt: + if in.Scope != "" { + return nil, vterrors.Errorf(vtrpc.Code_INVALID_ARGUMENT, "cannot use scope and @@") + } + switch { + case strings.HasPrefix(in.Name.Lowered(), "session."): + in.Name = NewColIdent(in.Name.Lowered()[8:]) + in.Scope = SessionStr + case strings.HasPrefix(in.Name.Lowered(), "global."): + in.Name = NewColIdent(in.Name.Lowered()[7:]) + in.Scope = GlobalStr + case strings.HasPrefix(in.Name.Lowered(), "vitess_metadata."): + in.Name = NewColIdent(in.Name.Lowered()[16:]) + in.Scope = VitessMetadataStr + default: + in.Name.at = NoAt + in.Scope = SessionStr + } + return in, nil + case SingleAt: + if in.Scope != "" { + return nil, vterrors.Errorf(vtrpc.Code_INVALID_ARGUMENT, "cannot mix scope and user defined variables") + } + return in, nil + case NoAt: + switch in.Scope { + case "": + in.Scope = SessionStr + case "local": + in.Scope = SessionStr + } + return in, nil + } + panic("this should never happen") +} diff --git a/go/vt/sqlparser/set_normalizer_test.go b/go/vt/sqlparser/set_normalizer_test.go new file mode 100644 index 00000000000..394ff4f63ee --- /dev/null +++ b/go/vt/sqlparser/set_normalizer_test.go @@ -0,0 +1,84 @@ +/* +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 ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestNormalizeSetExpr(t *testing.T) { + tests := []struct { + in, expected, err string + }{{ + in: "@@foo = 42", + expected: "session foo = 42", + }, { + in: "@@session.foo = 42", + expected: "session foo = 42", + }, { + in: "session foo = 42", + }, { + in: "global foo = 42", + }, { + in: "@@global.foo = 42", + expected: "global foo = 42", + }, { + in: "global @foo = 42", + err: "cannot mix scope and user defined variables", + }, { + in: "global @@foo = 42", + err: "cannot use scope and @@", + }, { + in: "session @@foo = 42", + err: "cannot use scope and @@", + }, { + in: "foo = 42", + expected: "session foo = 42", + }, { + in: "@@vitess_metadata.foo = 42", + expected: "vitess_metadata foo = 42", + }, { + in: "@@x.foo = 42", + expected: "session `x.foo` = 42", + }, { + in: "@@session.x.foo = 42", + expected: "session `x.foo` = 42", + //}, { TODO: we should support local scope as well + // in: "local foo = 42", + // expected: "session foo = 42", + }} + for _, tt := range tests { + t.Run(tt.in, func(t *testing.T) { + if tt.expected == "" { + tt.expected = tt.in + } + + statement, err := Parse("set " + tt.in) + require.NoError(t, err) + rewriter := setNormalizer{} + out, err := rewriter.normalizeSetExpr(statement.(*Set).Exprs[0]) + if tt.err != "" { + require.EqualError(t, err, tt.err) + } else { + require.NoError(t, err) + require.Equal(t, tt.expected, String(out)) + } + }) + } +} diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 76515b81a27..b89da26f663 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -79,6 +79,8 @@ type yySymType struct { setExprs SetExprs updateExpr *UpdateExpr setExpr *SetExpr + characteristic Characteristic + characteristics []Characteristic colIdent ColIdent tableIdent TableIdent convertType *ConvertType @@ -805,34 +807,34 @@ var yyExca = [...]int{ 1, -1, -2, 0, -1, 3, - 5, 32, + 5, 33, -2, 4, - -1, 37, + -1, 38, 33, 299, 127, 299, 139, 299, 164, 313, 165, 313, -2, 301, - -1, 327, - 115, 657, - -2, 653, -1, 328, 115, 658, -2, 654, - -1, 397, - 85, 908, - -2, 66, + -1, 329, + 115, 659, + -2, 655, -1, 398, - 85, 825, + 85, 909, + -2, 66, + -1, 399, + 85, 826, -2, 67, - -1, 403, - 85, 793, - -2, 619, - -1, 405, - 85, 856, - -2, 621, - -1, 706, + -1, 404, + 85, 794, + -2, 620, + -1, 406, + 85, 857, + -2, 622, + -1, 707, 1, 366, 5, 366, 12, 366, @@ -856,1671 +858,1670 @@ var yyExca = [...]int{ 57, 366, 352, 366, -2, 384, - -1, 709, - 54, 47, - 56, 47, - -2, 51, - -1, 864, - 115, 660, - -2, 656, - -1, 1095, - 5, 33, + -1, 710, + 54, 48, + 56, 48, + -2, 52, + -1, 865, + 115, 661, + -2, 657, + -1, 1096, + 5, 34, -2, 452, - -1, 1126, - 5, 32, - -2, 593, - -1, 1374, + -1, 1127, 5, 33, + -2, 593, + -1, 1375, + 5, 34, -2, 594, - -1, 1427, - 5, 32, - -2, 596, - -1, 1507, + -1, 1428, 5, 33, + -2, 596, + -1, 1508, + 5, 34, -2, 597, } const yyPrivate = 57344 -const yyLast = 16225 +const yyLast = 16226 var yyAct = [...]int{ - 327, 1541, 1335, 1495, 1531, 1129, 661, 979, 1440, 332, - 1407, 1223, 1147, 358, 1275, 345, 1309, 306, 952, 1276, - 1022, 1174, 950, 1130, 975, 1272, 57, 988, 1288, 978, - 557, 1282, 80, 889, 896, 1153, 270, 297, 290, 270, - 1394, 1247, 808, 900, 827, 1200, 402, 1086, 1191, 992, - 722, 954, 939, 918, 702, 866, 592, 660, 3, 526, - 1018, 598, 396, 703, 932, 391, 613, 270, 80, 604, - 315, 527, 270, 721, 270, 330, 388, 708, 393, 711, - 675, 56, 298, 299, 300, 301, 1534, 1518, 304, 61, - 546, 1529, 1505, 1526, 1002, 1336, 1517, 1504, 1041, 676, - 1264, 1366, 531, 266, 262, 263, 264, 319, 1008, 305, - 1304, 1305, 1040, 268, 899, 63, 64, 65, 66, 67, - 370, 1303, 376, 377, 374, 375, 373, 372, 371, 969, - 568, 82, 83, 84, 970, 971, 378, 379, 723, 1248, - 724, 82, 83, 84, 390, 258, 586, 303, 256, 528, - 260, 530, 1039, 1469, 626, 625, 635, 636, 628, 629, - 630, 631, 632, 633, 634, 627, 1162, 302, 637, 1161, - 581, 1182, 1163, 1001, 582, 579, 580, 1225, 1250, 1397, - 82, 83, 84, 1009, 1357, 1355, 296, 797, 574, 575, - 584, 796, 1227, 794, 1528, 1525, 1496, 1222, 399, 563, - 933, 565, 1036, 1033, 1034, 585, 1032, 1545, 1488, 993, - 1549, 571, 1252, 547, 1256, 533, 1251, 260, 1249, 1228, - 1441, 801, 1449, 1254, 265, 1148, 1150, 795, 798, 995, - 1226, 785, 1253, 562, 564, 1443, 1298, 1297, 1296, 1043, - 1046, 82, 83, 84, 259, 1255, 1257, 1219, 529, 536, - 273, 261, 1053, 1221, 1477, 1052, 1104, 270, 538, 539, - 1101, 1377, 270, 1233, 548, 995, 257, 1158, 270, 649, - 650, 1114, 1080, 838, 270, 555, 1038, 717, 561, 80, - 617, 976, 553, 80, 965, 80, 627, 835, 832, 637, - 637, 80, 612, 543, 274, 82, 83, 84, 1037, 70, - 1486, 277, 1458, 1442, 1149, 570, 82, 83, 84, 284, - 828, 1286, 1503, 611, 610, 1009, 1210, 572, 1543, 560, - 1268, 1544, 80, 1542, 559, 1470, 1450, 1448, 994, 1180, - 612, 725, 787, 919, 537, 1266, 600, 71, 1042, 545, - 588, 589, 919, 282, 1111, 552, 1206, 1207, 1208, 289, - 1491, 554, 1220, 1044, 1218, 549, 550, 551, 540, 1322, - 541, 649, 650, 542, 994, 649, 650, 822, 873, 601, - 630, 631, 632, 633, 634, 627, 275, 610, 637, 611, - 610, 607, 871, 872, 870, 1509, 270, 270, 270, 1403, - 82, 83, 84, 612, 829, 80, 612, 995, 841, 842, - 1402, 80, 602, 286, 278, 558, 287, 288, 294, 701, - 1195, 1194, 279, 281, 291, 1209, 276, 293, 292, 325, - 1214, 1211, 1202, 1212, 1205, 525, 1201, 82, 83, 84, - 1203, 1204, 626, 625, 635, 636, 628, 629, 630, 631, - 632, 633, 634, 627, 1213, 1183, 637, 54, 1511, 611, - 610, 823, 678, 680, 682, 684, 686, 688, 689, 869, - 1487, 998, 1421, 700, 710, 709, 612, 999, 1099, 715, - 1098, 679, 681, 719, 685, 687, 255, 690, 628, 629, - 630, 631, 632, 633, 634, 627, 1550, 1087, 637, 611, - 610, 532, 1400, 1241, 1192, 1063, 994, 856, 858, 859, - 813, 991, 989, 857, 990, 591, 612, 1077, 1078, 1079, - 713, 987, 993, 626, 625, 635, 636, 628, 629, 630, - 631, 632, 633, 634, 627, 399, 270, 637, 1551, 1455, - 783, 80, 1454, 786, 1318, 788, 270, 270, 80, 80, - 80, 385, 386, 996, 270, 1446, 1527, 270, 837, 591, - 270, 806, 807, 714, 270, 716, 80, 22, 1100, 1513, - 591, 80, 80, 80, 270, 80, 80, 58, 534, 535, - 82, 83, 84, 1285, 891, 80, 80, 82, 83, 84, - 54, 1165, 82, 83, 84, 902, 836, 812, 626, 625, - 635, 636, 628, 629, 630, 631, 632, 633, 634, 627, - 810, 1372, 637, 733, 80, 611, 610, 1273, 1093, 270, - 1285, 611, 610, 789, 790, 80, 1457, 310, 843, 1446, - 1499, 799, 612, 802, 390, 1446, 591, 805, 612, 941, - 944, 945, 946, 942, 867, 943, 947, 936, 890, 1289, - 1290, 818, 1224, 1446, 1478, 1446, 1445, 892, 625, 635, - 636, 628, 629, 630, 631, 632, 633, 634, 627, 80, - 862, 637, 1392, 1391, 864, 348, 347, 350, 351, 352, - 353, 1379, 591, 845, 349, 354, 1376, 591, 909, 912, - 1154, 860, 1328, 1327, 920, 935, 852, 1324, 1325, 1324, - 1323, 1154, 80, 80, 1093, 591, 936, 591, 24, 713, - 270, 902, 591, 1326, 328, 732, 731, 1236, 270, 270, - 1166, 936, 270, 270, 24, 968, 270, 270, 270, 80, - 24, 904, 1124, 1117, 936, 893, 894, 1125, 1116, 928, - 929, 1093, 80, 527, 960, 1285, 81, 959, 962, 712, - 271, 916, 714, 271, 712, 712, 718, 54, 863, 1426, - 839, 800, 1093, 1519, 1409, 651, 652, 653, 654, 655, - 656, 657, 658, 54, 810, 1003, 1384, 1023, 1314, 54, - 1169, 271, 81, 1019, 958, 312, 271, 934, 271, 905, - 906, 966, 963, 911, 914, 915, 270, 80, 1014, 80, - 961, 1045, 983, 1013, 967, 270, 270, 270, 270, 270, - 1410, 270, 270, 1024, 1026, 270, 80, 1536, 927, 1289, - 1290, 930, 931, 941, 944, 945, 946, 942, 1532, 943, - 947, 1316, 270, 1295, 54, 1292, 1273, 270, 1196, 270, - 270, 833, 804, 851, 270, 1294, 1004, 1005, 1006, 1007, - 1020, 1021, 1141, 1139, 1138, 1137, 1523, 1142, 1140, 399, - 316, 317, 1015, 1016, 1017, 1010, 1011, 1012, 1060, 1516, - 1232, 1065, 980, 1027, 1143, 1521, 945, 946, 1075, 1074, - 605, 1187, 1047, 1048, 1049, 1050, 1051, 605, 1054, 1055, - 593, 1068, 1056, 606, 867, 864, 603, 730, 556, 1179, - 606, 1493, 594, 1088, 1492, 1424, 1177, 1171, 1370, 1058, - 1070, 1069, 1405, 1029, 1059, 803, 949, 313, 314, 307, - 1463, 1064, 308, 626, 625, 635, 636, 628, 629, 630, - 631, 632, 633, 634, 627, 1073, 1082, 637, 58, 1462, - 1412, 1154, 583, 1072, 1538, 1537, 1538, 270, 270, 270, - 270, 270, 1105, 1102, 826, 1131, 608, 1474, 1398, 270, - 834, 60, 270, 62, 55, 1, 270, 1530, 1337, 1406, - 270, 271, 1035, 1494, 1439, 1076, 271, 1308, 986, 863, - 977, 1110, 271, 69, 524, 68, 1485, 1164, 271, 80, - 821, 569, 1155, 81, 985, 984, 1167, 81, 1170, 81, - 1126, 1132, 1175, 1175, 1135, 81, 1156, 1447, 1157, 1396, - 1144, 1133, 1134, 997, 1136, 1181, 1000, 1152, 1315, 904, - 1178, 1490, 1091, 1092, 1176, 738, 736, 737, 735, 1159, - 740, 739, 734, 283, 394, 948, 81, 80, 80, 726, - 1025, 1108, 609, 1186, 72, 1188, 1189, 1190, 1217, 865, - 1172, 1173, 874, 875, 876, 877, 878, 879, 880, 881, - 882, 883, 884, 885, 886, 887, 888, 80, 1216, 1031, - 831, 280, 577, 1193, 578, 285, 645, 1071, 1160, 1199, - 400, 1280, 270, 840, 597, 1461, 1411, 1109, 672, 1215, - 917, 80, 333, 855, 346, 343, 344, 846, 1123, 619, - 271, 271, 271, 331, 323, 705, 698, 924, 940, 81, - 890, 938, 937, 1230, 1231, 81, 389, 1291, 1287, 980, - 704, 1235, 1365, 1184, 1185, 1468, 1239, 850, 26, 59, - 318, 19, 18, 17, 20, 16, 334, 15, 80, 80, - 1274, 1240, 14, 1258, 1131, 1265, 544, 1246, 30, 1277, - 21, 13, 1259, 12, 11, 10, 9, 8, 7, 1234, - 6, 5, 80, 4, 309, 23, 2, 1068, 0, 0, - 0, 864, 0, 0, 1293, 1284, 0, 80, 0, 80, - 80, 0, 0, 1175, 1175, 0, 1307, 0, 0, 0, - 1300, 0, 0, 1299, 0, 1279, 0, 0, 1321, 0, - 0, 1302, 0, 0, 1312, 1313, 1306, 270, 1311, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1319, - 1320, 1238, 0, 0, 0, 0, 0, 270, 0, 0, - 0, 0, 0, 80, 0, 1338, 80, 80, 80, 270, - 271, 0, 0, 0, 80, 81, 0, 270, 1330, 0, - 271, 271, 81, 81, 81, 1269, 0, 0, 271, 0, - 0, 271, 0, 1331, 271, 1333, 0, 0, 271, 1346, - 81, 1343, 1344, 0, 357, 81, 81, 81, 271, 81, - 81, 1345, 0, 1353, 1329, 0, 0, 0, 0, 81, - 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1083, 1084, 1085, 1332, 1131, 79, 980, 0, 980, - 1371, 0, 0, 0, 0, 0, 1342, 80, 81, 1381, - 0, 1380, 0, 271, 1167, 80, 0, 0, 1390, 81, - 0, 0, 0, 0, 359, 51, 0, 0, 0, 0, - 80, 0, 401, 0, 0, 0, 0, 80, 0, 0, - 0, 0, 0, 1350, 1351, 0, 1352, 0, 0, 1354, - 0, 1356, 1414, 635, 636, 628, 629, 630, 631, 632, - 633, 634, 627, 81, 1238, 637, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 80, 80, 0, - 80, 0, 0, 1420, 311, 80, 1277, 80, 80, 80, - 270, 0, 1425, 80, 0, 0, 81, 81, 1432, 0, - 0, 0, 0, 0, 271, 1393, 0, 923, 1438, 1444, - 80, 270, 271, 271, 1451, 0, 271, 271, 0, 0, - 271, 271, 271, 81, 1452, 1433, 1453, 1434, 1436, 1437, - 0, 0, 1399, 1427, 1401, 0, 81, 980, 0, 0, - 1277, 1475, 1484, 0, 0, 0, 0, 80, 1483, 0, - 1459, 1482, 0, 0, 0, 0, 647, 0, 80, 80, - 1413, 0, 0, 0, 0, 0, 1498, 1408, 1497, 0, - 1501, 0, 0, 0, 0, 0, 0, 0, 80, 0, - 1506, 0, 566, 0, 1131, 0, 1476, 0, 1460, 270, - 271, 81, 0, 81, 0, 0, 0, 80, 0, 271, - 271, 271, 271, 271, 0, 271, 271, 1242, 1243, 271, - 81, 1515, 0, 706, 0, 0, 0, 1520, 1522, 0, - 80, 1260, 1261, 0, 1262, 1263, 271, 1369, 0, 0, - 0, 271, 0, 271, 271, 1535, 1270, 1271, 271, 0, - 1546, 0, 0, 401, 0, 0, 0, 401, 0, 401, - 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, - 1524, 0, 0, 0, 0, 0, 1510, 626, 625, 635, - 636, 628, 629, 630, 631, 632, 633, 634, 627, 1368, - 0, 637, 0, 0, 0, 0, 615, 0, 1408, 980, - 1363, 0, 0, 0, 0, 0, 0, 0, 0, 1317, - 0, 0, 0, 567, 0, 0, 0, 567, 0, 567, - 0, 0, 0, 0, 0, 567, 0, 0, 0, 626, - 625, 635, 636, 628, 629, 630, 631, 632, 633, 634, - 627, 0, 0, 637, 321, 0, 51, 1362, 0, 0, - 0, 271, 271, 271, 271, 271, 0, 0, 0, 0, - 0, 646, 0, 271, 648, 0, 271, 1361, 0, 401, - 271, 1348, 0, 0, 271, 727, 0, 626, 625, 635, - 636, 628, 629, 630, 631, 632, 633, 634, 627, 0, - 0, 637, 659, 81, 663, 664, 665, 666, 667, 668, - 669, 670, 671, 0, 674, 677, 677, 677, 683, 677, - 677, 683, 677, 691, 692, 693, 694, 695, 696, 697, - 0, 707, 0, 590, 626, 625, 635, 636, 628, 629, - 630, 631, 632, 633, 634, 627, 0, 0, 637, 0, - 1360, 81, 81, 0, 626, 625, 635, 636, 628, 629, - 630, 631, 632, 633, 634, 627, 0, 868, 637, 626, - 625, 635, 636, 628, 629, 630, 631, 632, 633, 634, - 627, 81, 0, 637, 0, 573, 0, 576, 0, 0, - 0, 0, 0, 587, 0, 0, 271, 0, 0, 0, - 1415, 1416, 1417, 1418, 1419, 81, 0, 0, 1422, 1423, - 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, - 0, 0, 401, 401, 401, 0, 0, 626, 625, 635, - 636, 628, 629, 630, 631, 632, 633, 634, 627, 0, - 401, 637, 0, 0, 0, 401, 401, 401, 0, 401, - 401, 0, 81, 81, 706, 0, 0, 0, 706, 401, - 401, 0, 706, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 567, 81, 0, 0, 0, - 0, 0, 567, 567, 567, 0, 0, 0, 847, 0, - 0, 81, 0, 81, 81, 0, 0, 0, 0, 615, - 567, 0, 401, 0, 0, 567, 567, 567, 0, 567, - 567, 0, 0, 0, 0, 0, 0, 0, 0, 567, - 567, 271, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 271, 0, 895, 0, 0, 0, 81, 0, 0, - 81, 81, 81, 271, 0, 0, 0, 0, 81, 921, - 0, 271, 595, 599, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1539, 0, 0, 925, 926, 0, 618, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 401, 0, 0, 0, 0, 663, 0, - 0, 0, 0, 0, 662, 0, 401, 868, 0, 0, - 0, 0, 0, 673, 0, 0, 0, 0, 0, 844, - 0, 81, 0, 784, 0, 0, 0, 0, 0, 81, - 791, 792, 793, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 951, 0, 81, 0, 707, 0, 811, 0, - 707, 81, 0, 815, 816, 817, 0, 819, 820, 0, - 0, 401, 0, 401, 0, 0, 0, 824, 825, 0, - 0, 0, 0, 706, 706, 706, 706, 706, 901, 903, - 401, 0, 0, 0, 0, 0, 0, 0, 706, 0, - 0, 81, 81, 0, 81, 0, 706, 0, 0, 81, - 0, 81, 81, 81, 271, 0, 0, 81, 0, 0, - 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, - 0, 567, 0, 567, 81, 271, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 81, 81, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 81, 0, 0, 0, 0, 0, 1081, 0, - 0, 0, 0, 271, 814, 0, 0, 0, 0, 0, - 921, 81, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 830, 0, - 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 401, 0, 853, 854, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1127, 1128, 0, - 0, 707, 707, 707, 707, 707, 0, 0, 0, 1028, - 0, 1030, 0, 0, 0, 0, 951, 0, 1151, 0, - 0, 0, 0, 0, 707, 0, 0, 0, 1057, 0, - 0, 1197, 401, 0, 0, 0, 0, 0, 662, 0, - 1089, 907, 908, 0, 1090, 0, 0, 0, 0, 0, - 0, 0, 1095, 1096, 1097, 0, 0, 0, 0, 1103, - 0, 401, 1106, 1107, 0, 0, 0, 0, 1113, 0, - 0, 596, 1115, 0, 0, 1118, 1119, 1120, 1121, 1122, - 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, - 0, 0, 567, 0, 0, 0, 0, 0, 1146, 0, - 974, 0, 0, 706, 0, 0, 0, 269, 0, 0, - 295, 0, 0, 0, 0, 0, 0, 0, 0, 401, - 0, 567, 0, 0, 0, 0, 0, 0, 0, 921, - 0, 0, 1281, 1283, 0, 322, 0, 0, 392, 0, - 0, 0, 0, 269, 0, 269, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1283, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 401, 0, 401, 1310, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 25, 52, 27, 28, 0, - 1278, 0, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 43, 0, 0, 0, 0, 29, 48, - 49, 1066, 1067, 0, 599, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1334, 0, 38, - 1339, 1340, 1341, 54, 0, 621, 0, 624, 401, 1244, - 1245, 0, 0, 638, 639, 640, 641, 642, 643, 644, - 1198, 622, 623, 620, 626, 625, 635, 636, 628, 629, - 630, 631, 632, 633, 634, 627, 0, 0, 637, 0, - 0, 0, 0, 0, 0, 0, 0, 1094, 0, 1229, + 328, 1542, 1336, 1496, 1532, 1130, 662, 980, 1441, 333, + 1408, 1224, 1310, 1148, 1276, 346, 1009, 953, 359, 1277, + 1023, 1175, 951, 1131, 558, 1273, 58, 989, 307, 979, + 1283, 403, 1289, 81, 897, 1248, 1154, 271, 809, 291, + 271, 1395, 828, 890, 901, 1201, 1192, 1087, 723, 993, + 955, 867, 940, 976, 703, 919, 593, 599, 1019, 527, + 722, 614, 397, 661, 3, 392, 704, 605, 271, 81, + 331, 316, 528, 271, 933, 271, 389, 709, 712, 57, + 677, 547, 1535, 1519, 1530, 1506, 298, 1527, 1337, 1518, + 62, 1505, 1265, 1367, 532, 1305, 1306, 676, 1304, 1042, + 267, 263, 264, 265, 971, 972, 724, 304, 725, 320, + 83, 84, 85, 1041, 269, 970, 306, 64, 65, 66, + 67, 68, 587, 259, 303, 1183, 257, 1002, 261, 1226, + 569, 1398, 299, 300, 301, 302, 1010, 585, 305, 1358, + 1356, 297, 83, 84, 85, 391, 83, 84, 85, 798, + 529, 1228, 531, 1040, 1470, 627, 626, 636, 637, 629, + 630, 631, 632, 633, 634, 635, 628, 795, 371, 638, + 377, 378, 375, 376, 374, 373, 372, 1529, 564, 797, + 566, 586, 1227, 1163, 379, 380, 1162, 582, 1526, 1164, + 799, 583, 580, 581, 83, 84, 85, 575, 576, 400, + 1497, 1223, 934, 1037, 1034, 1035, 1546, 1033, 1489, 994, + 572, 1550, 563, 565, 548, 796, 1149, 1151, 534, 996, + 1450, 266, 260, 627, 626, 636, 637, 629, 630, 631, + 632, 633, 634, 635, 628, 1249, 261, 638, 1442, 1229, + 1044, 1047, 802, 786, 258, 1299, 1220, 275, 1298, 83, + 84, 85, 1222, 1444, 278, 1297, 996, 530, 271, 539, + 540, 900, 285, 271, 537, 549, 274, 262, 1054, 271, + 1478, 1053, 1378, 1105, 1251, 271, 556, 1039, 1088, 562, + 81, 1010, 1234, 322, 81, 1159, 81, 1102, 650, 651, + 1115, 977, 81, 1081, 839, 1150, 283, 718, 561, 1038, + 618, 1211, 290, 554, 571, 638, 1504, 544, 1253, 966, + 1257, 829, 1252, 996, 1250, 833, 573, 1544, 995, 1255, + 1545, 1443, 1543, 81, 1451, 1449, 1471, 628, 1254, 276, + 638, 1207, 1208, 1209, 836, 538, 613, 601, 1487, 1043, + 546, 1256, 1258, 83, 84, 85, 553, 550, 551, 552, + 1459, 1221, 555, 1219, 1045, 995, 287, 279, 1267, 288, + 289, 295, 1287, 612, 611, 280, 282, 292, 726, 277, + 294, 293, 541, 920, 542, 71, 602, 543, 650, 651, + 613, 560, 1003, 874, 823, 611, 1181, 271, 271, 271, + 589, 590, 650, 651, 788, 830, 81, 872, 873, 871, + 1210, 613, 81, 1492, 603, 1215, 1212, 1203, 1213, 1206, + 702, 1202, 995, 72, 533, 1204, 1205, 992, 990, 326, + 991, 920, 622, 1112, 625, 608, 1510, 988, 994, 1214, + 639, 640, 641, 642, 643, 644, 645, 1370, 623, 624, + 621, 627, 626, 636, 637, 629, 630, 631, 632, 633, + 634, 635, 628, 680, 682, 638, 686, 688, 721, 691, + 592, 999, 559, 256, 701, 711, 710, 1000, 824, 716, + 679, 681, 683, 685, 687, 689, 690, 627, 626, 636, + 637, 629, 630, 631, 632, 633, 634, 635, 628, 1101, + 1404, 638, 535, 536, 1242, 1403, 83, 84, 85, 627, + 626, 636, 637, 629, 630, 631, 632, 633, 634, 635, + 628, 1196, 1551, 638, 627, 626, 636, 637, 629, 630, + 631, 632, 633, 634, 635, 628, 400, 271, 638, 386, + 387, 784, 81, 1195, 787, 55, 789, 271, 271, 81, + 81, 81, 612, 611, 1184, 271, 1512, 870, 271, 1323, + 1488, 271, 807, 808, 1552, 271, 1422, 81, 592, 613, + 1401, 1193, 81, 81, 81, 271, 81, 81, 629, 630, + 631, 632, 633, 634, 635, 628, 81, 81, 638, 1078, + 1079, 1080, 813, 1064, 814, 1364, 811, 55, 83, 84, + 85, 23, 596, 600, 636, 637, 629, 630, 631, 632, + 633, 634, 635, 628, 734, 81, 638, 1447, 1528, 619, + 271, 1456, 612, 611, 790, 791, 81, 1514, 592, 1269, + 1447, 1500, 800, 526, 803, 391, 1447, 592, 806, 613, + 844, 842, 843, 631, 632, 633, 634, 635, 628, 891, + 868, 638, 819, 1455, 663, 857, 859, 860, 893, 1319, + 865, 858, 311, 674, 83, 84, 85, 863, 838, 59, + 81, 997, 627, 626, 636, 637, 629, 630, 631, 632, + 633, 634, 635, 628, 1286, 846, 638, 861, 1274, 910, + 913, 1286, 612, 611, 903, 921, 1100, 853, 1099, 1447, + 1479, 1447, 1446, 81, 81, 1373, 837, 1393, 1392, 613, + 1094, 271, 1380, 592, 329, 1377, 592, 612, 611, 271, + 271, 1329, 1328, 271, 271, 612, 611, 271, 271, 271, + 81, 894, 895, 1155, 613, 83, 84, 85, 905, 892, + 929, 930, 613, 81, 528, 961, 1155, 82, 1458, 963, + 917, 272, 1325, 1326, 272, 1325, 1324, 1094, 592, 864, + 811, 83, 84, 85, 937, 1166, 652, 653, 654, 655, + 656, 657, 658, 659, 1011, 1012, 1013, 937, 1369, 937, + 592, 1327, 272, 82, 903, 592, 25, 272, 935, 272, + 1286, 968, 967, 964, 960, 959, 713, 271, 81, 1167, + 81, 962, 1046, 984, 969, 567, 271, 271, 271, 271, + 271, 1237, 271, 271, 1025, 25, 271, 81, 627, 626, + 636, 637, 629, 630, 631, 632, 633, 634, 635, 628, + 733, 732, 638, 271, 714, 55, 936, 714, 271, 1125, + 271, 271, 1118, 25, 1126, 271, 1117, 1094, 713, 1021, + 1022, 840, 801, 719, 815, 313, 1094, 1520, 1410, 1004, + 400, 1225, 937, 1061, 55, 1385, 349, 348, 351, 352, + 353, 354, 1427, 981, 1028, 350, 355, 715, 831, 717, + 715, 865, 713, 1048, 1049, 1050, 1051, 1052, 1069, 1055, + 1056, 1024, 55, 1057, 1315, 942, 945, 946, 947, 943, + 868, 944, 948, 1170, 55, 854, 855, 1411, 1070, 1020, + 1059, 1071, 1290, 1291, 1027, 1060, 1015, 942, 945, 946, + 947, 943, 1065, 944, 948, 1014, 1537, 1290, 1291, 1533, + 1317, 1293, 1274, 1083, 1197, 834, 805, 906, 907, 1142, + 1140, 912, 915, 916, 1143, 1141, 852, 1296, 271, 271, + 271, 271, 271, 1295, 1139, 1138, 1132, 1524, 663, 1517, + 271, 908, 909, 271, 317, 318, 928, 271, 1233, 931, + 932, 271, 272, 1144, 1066, 946, 947, 272, 1522, 606, + 864, 1076, 1075, 272, 1111, 1188, 731, 557, 1165, 272, + 81, 1180, 607, 1156, 82, 604, 606, 1168, 82, 1171, + 82, 594, 1133, 1176, 1176, 1136, 82, 1127, 1157, 607, + 1158, 1145, 1494, 595, 1493, 1134, 1135, 1153, 1137, 1425, + 975, 1178, 1172, 1371, 1406, 1177, 905, 1030, 1160, 804, + 950, 1464, 1185, 1186, 314, 315, 1074, 82, 81, 81, + 308, 1463, 309, 59, 1073, 1413, 1155, 335, 584, 1106, + 866, 1173, 1174, 875, 876, 877, 878, 879, 880, 881, + 882, 883, 884, 885, 886, 887, 888, 889, 81, 1539, + 1538, 1539, 1194, 1187, 1103, 1189, 1190, 1191, 827, 609, + 1475, 1399, 835, 271, 61, 63, 56, 1, 1531, 574, + 1216, 577, 81, 1338, 1407, 1036, 1495, 588, 1440, 1309, + 987, 272, 272, 272, 978, 70, 525, 69, 925, 1486, + 82, 891, 1231, 1232, 822, 570, 82, 986, 985, 1448, + 981, 1397, 998, 1077, 1182, 1001, 1316, 1240, 1179, 1200, + 1491, 1067, 1068, 739, 600, 1005, 1006, 1007, 1008, 81, + 81, 1275, 1241, 737, 738, 1132, 1266, 1260, 736, 1247, + 741, 1016, 1017, 1018, 1259, 1278, 740, 865, 735, 284, + 1235, 395, 949, 81, 1069, 727, 1026, 610, 73, 1218, + 1092, 1093, 1217, 1032, 832, 281, 578, 1285, 81, 1294, + 81, 81, 579, 286, 1176, 1176, 646, 1308, 1072, 1109, + 1161, 1301, 401, 1300, 394, 1281, 841, 1095, 598, 1322, + 1462, 1412, 1280, 1303, 1110, 1313, 1314, 1307, 271, 1312, + 673, 918, 334, 856, 1113, 347, 344, 345, 847, 1124, + 620, 332, 1239, 324, 706, 699, 941, 939, 271, 938, + 390, 1292, 1288, 705, 81, 1236, 1339, 81, 81, 81, + 271, 272, 1366, 1469, 851, 81, 82, 27, 271, 1320, + 1321, 272, 272, 82, 82, 82, 1270, 60, 319, 272, + 20, 19, 272, 18, 21, 272, 1344, 1345, 17, 272, + 1347, 82, 16, 15, 358, 545, 82, 82, 82, 272, + 82, 82, 31, 1346, 1354, 1330, 22, 14, 13, 12, + 82, 82, 11, 10, 9, 8, 7, 6, 1331, 5, + 4, 310, 1084, 1085, 1086, 1333, 1132, 80, 981, 24, + 981, 1372, 2, 1332, 0, 1334, 0, 1343, 81, 82, + 1382, 0, 1381, 0, 272, 1168, 81, 0, 0, 0, + 82, 0, 0, 0, 360, 52, 0, 785, 0, 0, + 1391, 81, 0, 402, 792, 793, 794, 0, 81, 0, + 0, 1400, 0, 1402, 0, 0, 0, 0, 0, 0, + 0, 0, 812, 1415, 0, 0, 0, 816, 817, 818, + 0, 820, 821, 0, 82, 1239, 0, 0, 648, 1414, + 0, 825, 826, 0, 0, 0, 0, 52, 81, 81, + 0, 81, 0, 0, 0, 312, 81, 0, 81, 81, + 81, 271, 1278, 1426, 81, 1421, 1268, 82, 82, 0, + 0, 0, 0, 0, 0, 272, 1445, 924, 1439, 0, + 1433, 81, 271, 272, 272, 1452, 0, 272, 272, 0, + 0, 272, 272, 272, 82, 707, 0, 1434, 0, 1435, + 1437, 1438, 0, 0, 0, 0, 0, 82, 981, 1302, + 1428, 0, 1476, 1485, 0, 0, 1278, 0, 81, 1484, + 0, 0, 1460, 1483, 1453, 0, 1454, 0, 0, 81, + 81, 0, 0, 0, 0, 0, 0, 1499, 1409, 1498, + 0, 1502, 0, 0, 0, 0, 0, 0, 0, 81, + 0, 1507, 0, 0, 0, 1132, 0, 0, 0, 1461, + 271, 272, 82, 1477, 82, 0, 0, 0, 81, 0, + 272, 272, 272, 272, 272, 0, 272, 272, 1243, 1244, + 272, 82, 1516, 0, 0, 0, 0, 0, 1521, 1523, + 0, 81, 1261, 1262, 0, 1263, 1264, 272, 0, 0, + 0, 0, 272, 0, 272, 272, 1536, 1271, 1272, 272, + 1363, 1547, 0, 0, 402, 0, 0, 0, 402, 0, + 402, 0, 0, 1368, 0, 0, 402, 0, 0, 0, + 0, 0, 1525, 663, 0, 0, 0, 1511, 0, 0, + 0, 1383, 0, 0, 1384, 0, 0, 1386, 0, 0, + 0, 0, 0, 1029, 0, 1031, 0, 616, 0, 1409, + 981, 1362, 0, 0, 0, 0, 0, 0, 0, 0, + 1318, 0, 1058, 0, 568, 0, 0, 0, 568, 0, + 568, 0, 0, 0, 0, 0, 568, 627, 626, 636, + 637, 629, 630, 631, 632, 633, 634, 635, 628, 0, + 0, 638, 1351, 1352, 0, 1353, 0, 52, 1355, 1361, + 1357, 0, 272, 272, 272, 272, 272, 0, 0, 0, + 0, 0, 647, 0, 272, 649, 0, 272, 0, 869, + 402, 272, 1349, 0, 0, 272, 728, 0, 627, 626, + 636, 637, 629, 630, 631, 632, 633, 634, 635, 628, + 0, 0, 638, 660, 82, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 1394, 675, 678, 678, 678, 684, + 678, 678, 684, 678, 692, 693, 694, 695, 696, 697, + 698, 0, 708, 0, 591, 0, 627, 626, 636, 637, + 629, 630, 631, 632, 633, 634, 635, 628, 0, 0, + 638, 0, 82, 82, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1089, 0, 707, 1501, 663, 0, + 707, 0, 0, 0, 707, 0, 0, 0, 0, 0, + 0, 0, 82, 0, 627, 626, 636, 637, 629, 630, + 631, 632, 633, 634, 635, 628, 0, 272, 638, 0, + 0, 1416, 1417, 1418, 1419, 1420, 82, 0, 0, 1423, + 1424, 0, 0, 0, 0, 0, 402, 0, 0, 0, + 0, 0, 0, 402, 402, 402, 627, 626, 636, 637, + 629, 630, 631, 632, 633, 634, 635, 628, 0, 0, + 638, 402, 0, 0, 1199, 0, 402, 402, 402, 0, + 402, 402, 0, 82, 82, 0, 0, 0, 0, 0, + 402, 402, 626, 636, 637, 629, 630, 631, 632, 633, + 634, 635, 628, 1230, 0, 638, 568, 82, 0, 0, + 0, 0, 0, 568, 568, 568, 0, 0, 0, 848, + 0, 0, 82, 0, 82, 82, 0, 0, 0, 0, + 616, 568, 0, 402, 0, 0, 568, 568, 568, 0, + 568, 568, 0, 0, 0, 0, 0, 0, 0, 0, + 568, 568, 272, 0, 0, 0, 0, 0, 0, 869, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 272, 0, 896, 0, 0, 0, 82, 0, + 0, 82, 82, 82, 272, 0, 0, 0, 0, 82, + 922, 0, 272, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1540, 0, 0, 926, 927, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 52, 707, 707, 707, 707, 707, + 0, 0, 0, 0, 402, 0, 0, 0, 0, 664, + 707, 0, 0, 0, 0, 0, 0, 402, 707, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 845, 0, 82, 0, 0, 0, 0, 0, 0, 0, + 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 952, 0, 82, 0, 708, 0, 0, + 0, 708, 82, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 402, 0, 402, 0, 0, 0, 0, 0, + 756, 0, 0, 0, 0, 0, 0, 0, 0, 902, + 904, 402, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 82, 82, 0, 82, 0, 0, 0, 0, + 82, 0, 82, 82, 82, 272, 0, 0, 82, 0, + 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, + 0, 0, 568, 0, 568, 82, 272, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1405, 0, 0, 0, + 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 82, 82, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 757, 0, 0, 82, 0, 0, 0, 0, 0, 1082, + 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, + 0, 922, 82, 770, 773, 774, 775, 776, 777, 778, + 0, 779, 780, 781, 782, 783, 758, 759, 760, 761, + 742, 743, 771, 0, 745, 82, 746, 747, 748, 749, + 750, 751, 752, 753, 754, 755, 762, 763, 764, 765, + 766, 767, 768, 769, 402, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1128, 1129, + 0, 0, 708, 708, 708, 708, 708, 0, 0, 0, + 0, 0, 0, 0, 0, 707, 0, 952, 0, 1152, + 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, + 0, 0, 1198, 402, 0, 772, 0, 0, 0, 0, + 0, 1090, 0, 0, 0, 1091, 0, 0, 0, 0, + 0, 0, 0, 1096, 1097, 1098, 0, 0, 0, 0, + 1104, 0, 402, 1107, 1108, 0, 0, 0, 0, 1114, + 0, 597, 0, 1116, 0, 0, 1119, 1120, 1121, 1122, + 1123, 0, 0, 0, 0, 0, 402, 0, 0, 0, + 0, 0, 0, 568, 0, 0, 0, 0, 0, 1147, + 0, 0, 25, 26, 53, 28, 29, 0, 270, 0, + 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, + 402, 44, 568, 0, 0, 0, 30, 49, 50, 0, + 922, 0, 0, 1282, 1284, 0, 323, 0, 0, 393, + 0, 0, 0, 0, 270, 0, 270, 39, 0, 0, + 0, 55, 0, 0, 0, 0, 0, 1284, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 402, 0, 402, 1311, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1279, 0, 52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 32, 33, 35, 34, 37, 0, + 51, 0, 0, 0, 0, 0, 0, 0, 1335, 0, + 0, 1340, 1341, 1342, 0, 0, 0, 0, 0, 402, + 1245, 1246, 0, 38, 45, 46, 0, 0, 47, 48, + 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 40, 41, 0, 42, 43, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 922, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, + 1396, 0, 0, 0, 0, 0, 0, 0, 0, 270, + 1365, 0, 0, 0, 270, 402, 0, 0, 0, 0, + 270, 0, 402, 0, 0, 0, 270, 0, 0, 0, + 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1387, 1388, 1389, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1430, 1431, 0, 1432, 0, 0, 1348, 0, + 1396, 0, 1396, 1396, 1396, 568, 1350, 0, 1311, 0, + 0, 0, 0, 0, 0, 0, 0, 1359, 1360, 0, + 0, 0, 0, 0, 0, 1396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1374, 1375, 1376, + 0, 1379, 0, 0, 0, 0, 0, 0, 1279, 0, + 0, 1429, 0, 0, 0, 0, 0, 0, 1390, 0, + 0, 0, 1490, 0, 0, 0, 0, 0, 270, 270, + 270, 0, 0, 402, 402, 0, 0, 0, 0, 0, + 0, 1457, 0, 0, 0, 0, 0, 0, 0, 0, + 922, 0, 0, 1509, 0, 0, 0, 0, 0, 0, + 0, 0, 1279, 0, 52, 0, 0, 0, 0, 0, + 0, 0, 1515, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1436, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1465, 1466, 1467, 1468, 0, 1472, + 0, 1473, 1474, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1480, 0, 1481, 1482, 0, 0, 0, + 0, 0, 0, 0, 1534, 0, 0, 0, 270, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 270, 270, + 0, 0, 0, 0, 0, 0, 270, 1503, 0, 270, + 0, 0, 270, 0, 0, 1508, 810, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, + 0, 0, 0, 1513, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 270, 0, 0, 0, 0, 0, 0, 1548, 1549, + 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 323, 0, 0, 0, 0, 323, 323, 0, + 0, 323, 323, 323, 0, 0, 0, 923, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 323, 323, 323, 323, + 323, 0, 270, 0, 0, 0, 0, 0, 0, 0, + 270, 957, 0, 0, 270, 270, 0, 0, 270, 965, + 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, + 0, 0, 0, 0, 0, 0, 0, 270, 270, 270, + 270, 270, 0, 270, 270, 0, 0, 270, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 270, 0, 0, 0, 0, 270, + 0, 1062, 1063, 0, 0, 0, 270, 0, 0, 0, + 0, 810, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 921, 0, 0, 0, 1112, 0, 31, 32, 34, 33, - 36, 707, 50, 0, 0, 0, 0, 0, 0, 0, - 0, 401, 0, 0, 0, 0, 0, 0, 0, 1395, - 0, 0, 0, 0, 0, 37, 44, 45, 269, 1364, - 46, 47, 35, 269, 401, 0, 0, 0, 0, 269, - 0, 401, 0, 0, 0, 269, 39, 40, 0, 41, - 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1386, 1387, 1388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1429, 1430, 0, 1431, 0, 0, 1347, 0, 1395, - 0, 1395, 1395, 1395, 567, 1349, 0, 1310, 0, 0, - 0, 0, 0, 0, 0, 0, 1358, 1359, 0, 0, - 0, 0, 0, 0, 1395, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1373, 1374, 1375, 0, - 1378, 0, 53, 0, 0, 0, 0, 1278, 0, 0, - 1428, 0, 0, 0, 0, 0, 0, 1389, 0, 0, - 0, 1489, 0, 0, 0, 0, 0, 269, 269, 269, - 0, 0, 401, 401, 0, 0, 0, 0, 0, 0, - 1456, 0, 0, 0, 0, 0, 0, 0, 0, 921, - 0, 0, 1508, 0, 0, 0, 1267, 0, 0, 0, - 0, 1278, 0, 51, 0, 0, 0, 0, 0, 0, - 0, 1514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1395, 0, 0, 0, 0, 1301, - 0, 0, 0, 0, 1435, 0, 0, 0, 0, 0, + 323, 323, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1404, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1464, 1465, 1466, 1467, 0, 1471, 0, - 1472, 1473, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1479, 0, 1480, 1481, 0, 0, 0, 0, - 0, 0, 0, 1533, 0, 0, 0, 269, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 269, 269, 0, - 0, 0, 0, 0, 0, 269, 1502, 0, 269, 0, - 0, 269, 0, 0, 1507, 809, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 0, 0, 1512, 1367, 0, 0, 0, 0, 0, 0, - 0, 0, 755, 662, 0, 0, 0, 0, 0, 0, - 0, 1382, 0, 0, 1383, 0, 0, 1385, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 923, 270, + 270, 270, 270, 270, 0, 0, 0, 0, 0, 0, + 0, 1146, 0, 0, 270, 0, 0, 0, 957, 0, + 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 0, 0, 1547, 1548, 809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 322, 0, 743, 0, 0, 322, 322, 0, 0, - 322, 322, 322, 0, 0, 0, 922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 322, 322, 322, 322, 322, - 0, 269, 756, 0, 0, 0, 0, 0, 0, 269, - 956, 0, 0, 269, 269, 0, 0, 269, 964, 809, - 0, 0, 0, 0, 0, 769, 772, 773, 774, 775, - 776, 777, 0, 778, 779, 780, 781, 782, 757, 758, - 759, 760, 741, 742, 770, 0, 744, 0, 745, 746, - 747, 748, 749, 750, 751, 752, 753, 754, 761, 762, - 763, 764, 765, 766, 767, 768, 0, 1500, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, - 0, 0, 0, 0, 0, 0, 269, 269, 269, 269, - 269, 0, 269, 269, 0, 0, 269, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 771, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 269, 0, - 1061, 1062, 0, 0, 0, 269, 0, 0, 0, 0, - 809, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, - 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, + 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 922, 269, 269, - 269, 269, 269, 0, 0, 0, 0, 0, 0, 0, - 1145, 0, 0, 269, 0, 0, 0, 956, 0, 0, - 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 809, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 922, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 0, 0, 0, 269, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 922, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 511, 499, 0, 456, - 514, 429, 446, 522, 447, 450, 487, 414, 469, 170, - 444, 956, 433, 409, 440, 410, 431, 458, 114, 462, - 428, 501, 472, 513, 142, 434, 520, 144, 478, 0, - 216, 158, 269, 0, 460, 503, 467, 496, 455, 488, - 419, 477, 515, 445, 485, 516, 0, 0, 0, 82, - 83, 84, 0, 981, 982, 0, 0, 0, 0, 0, - 104, 0, 482, 510, 442, 484, 486, 408, 479, 0, - 412, 415, 521, 506, 437, 438, 1168, 0, 0, 0, - 0, 0, 0, 459, 468, 493, 453, 0, 0, 0, - 0, 0, 0, 0, 0, 435, 922, 476, 0, 0, - 0, 416, 413, 0, 0, 457, 0, 0, 0, 418, - 269, 436, 494, 0, 406, 123, 498, 505, 454, 272, - 509, 452, 451, 512, 189, 0, 220, 126, 141, 100, - 138, 86, 96, 0, 125, 167, 196, 200, 502, 432, - 441, 108, 439, 198, 177, 236, 475, 179, 197, 145, - 226, 190, 235, 245, 246, 223, 243, 250, 213, 89, - 222, 234, 105, 208, 91, 232, 219, 156, 135, 136, - 90, 0, 194, 113, 121, 110, 169, 229, 230, 109, - 253, 97, 242, 93, 98, 241, 163, 225, 233, 157, - 150, 92, 231, 155, 149, 140, 117, 128, 187, 147, - 188, 129, 160, 159, 161, 0, 411, 0, 217, 239, - 254, 102, 427, 224, 248, 249, 0, 0, 103, 122, - 116, 186, 120, 162, 99, 131, 214, 139, 146, 193, - 252, 176, 199, 106, 238, 215, 423, 426, 421, 422, - 470, 471, 517, 518, 519, 495, 417, 0, 424, 425, - 0, 500, 507, 508, 474, 85, 94, 143, 251, 191, - 119, 240, 407, 420, 112, 430, 0, 0, 443, 448, - 449, 461, 463, 464, 465, 466, 473, 480, 481, 483, - 489, 490, 491, 492, 497, 504, 523, 87, 88, 95, - 101, 107, 111, 115, 118, 124, 127, 130, 132, 133, - 134, 137, 148, 151, 152, 153, 154, 164, 165, 166, - 168, 171, 172, 173, 174, 175, 178, 180, 181, 182, - 183, 184, 185, 192, 195, 201, 202, 203, 204, 205, - 206, 207, 209, 210, 211, 212, 218, 221, 227, 228, - 237, 244, 247, 511, 499, 0, 456, 514, 429, 446, - 522, 447, 450, 487, 414, 469, 170, 444, 0, 433, - 409, 440, 410, 431, 458, 114, 462, 428, 501, 472, - 513, 142, 434, 520, 144, 478, 0, 216, 158, 0, - 0, 460, 503, 467, 496, 455, 488, 419, 477, 515, - 445, 485, 516, 0, 0, 0, 82, 83, 84, 0, - 981, 982, 0, 0, 0, 0, 0, 104, 0, 482, - 510, 442, 484, 486, 408, 479, 0, 412, 415, 521, - 506, 437, 438, 0, 0, 0, 0, 0, 0, 0, - 459, 468, 493, 453, 0, 0, 0, 0, 0, 0, - 0, 0, 435, 0, 476, 0, 0, 0, 416, 413, - 0, 0, 457, 0, 0, 0, 418, 0, 436, 494, - 0, 406, 123, 498, 505, 454, 272, 509, 452, 451, - 512, 189, 0, 220, 126, 141, 100, 138, 86, 96, - 0, 125, 167, 196, 200, 502, 432, 441, 108, 439, - 198, 177, 236, 475, 179, 197, 145, 226, 190, 235, - 245, 246, 223, 243, 250, 213, 89, 222, 234, 105, - 208, 91, 232, 219, 156, 135, 136, 90, 0, 194, - 113, 121, 110, 169, 229, 230, 109, 253, 97, 242, - 93, 98, 241, 163, 225, 233, 157, 150, 92, 231, - 155, 149, 140, 117, 128, 187, 147, 188, 129, 160, - 159, 161, 0, 411, 0, 217, 239, 254, 102, 427, - 224, 248, 249, 0, 0, 103, 122, 116, 186, 120, - 162, 99, 131, 214, 139, 146, 193, 252, 176, 199, - 106, 238, 215, 423, 426, 421, 422, 470, 471, 517, - 518, 519, 495, 417, 0, 424, 425, 0, 500, 507, - 508, 474, 85, 94, 143, 251, 191, 119, 240, 407, - 420, 112, 430, 0, 0, 443, 448, 449, 461, 463, - 464, 465, 466, 473, 480, 481, 483, 489, 490, 491, - 492, 497, 504, 523, 87, 88, 95, 101, 107, 111, - 115, 118, 124, 127, 130, 132, 133, 134, 137, 148, - 151, 152, 153, 154, 164, 165, 166, 168, 171, 172, - 173, 174, 175, 178, 180, 181, 182, 183, 184, 185, - 192, 195, 201, 202, 203, 204, 205, 206, 207, 209, - 210, 211, 212, 218, 221, 227, 228, 237, 244, 247, - 511, 499, 0, 456, 514, 429, 446, 522, 447, 450, - 487, 414, 469, 170, 444, 0, 433, 409, 440, 410, - 431, 458, 114, 462, 428, 501, 472, 513, 142, 434, - 520, 144, 478, 0, 216, 158, 0, 0, 460, 503, - 467, 496, 455, 488, 419, 477, 515, 445, 485, 516, - 54, 0, 0, 82, 83, 84, 0, 0, 0, 0, - 0, 0, 0, 0, 104, 0, 482, 510, 442, 484, - 486, 408, 479, 0, 412, 415, 521, 506, 437, 438, - 0, 0, 0, 0, 0, 0, 0, 459, 468, 493, - 453, 0, 0, 0, 0, 0, 0, 0, 0, 435, - 0, 476, 0, 0, 0, 416, 413, 0, 0, 457, - 0, 0, 0, 418, 0, 436, 494, 0, 406, 123, - 498, 505, 454, 272, 509, 452, 451, 512, 189, 0, - 220, 126, 141, 100, 138, 86, 96, 0, 125, 167, - 196, 200, 502, 432, 441, 108, 439, 198, 177, 236, - 475, 179, 197, 145, 226, 190, 235, 245, 246, 223, - 243, 250, 213, 89, 222, 234, 105, 208, 91, 232, - 219, 156, 135, 136, 90, 0, 194, 113, 121, 110, - 169, 229, 230, 109, 253, 97, 242, 93, 98, 241, - 163, 225, 233, 157, 150, 92, 231, 155, 149, 140, - 117, 128, 187, 147, 188, 129, 160, 159, 161, 0, - 411, 0, 217, 239, 254, 102, 427, 224, 248, 249, - 0, 0, 103, 122, 116, 186, 120, 162, 99, 131, - 214, 139, 146, 193, 252, 176, 199, 106, 238, 215, - 423, 426, 421, 422, 470, 471, 517, 518, 519, 495, - 417, 0, 424, 425, 0, 500, 507, 508, 474, 85, - 94, 143, 251, 191, 119, 240, 407, 420, 112, 430, - 0, 0, 443, 448, 449, 461, 463, 464, 465, 466, - 473, 480, 481, 483, 489, 490, 491, 492, 497, 504, - 523, 87, 88, 95, 101, 107, 111, 115, 118, 124, - 127, 130, 132, 133, 134, 137, 148, 151, 152, 153, - 154, 164, 165, 166, 168, 171, 172, 173, 174, 175, - 178, 180, 181, 182, 183, 184, 185, 192, 195, 201, - 202, 203, 204, 205, 206, 207, 209, 210, 211, 212, - 218, 221, 227, 228, 237, 244, 247, 511, 499, 0, - 456, 514, 429, 446, 522, 447, 450, 487, 414, 469, - 170, 444, 0, 433, 409, 440, 410, 431, 458, 114, - 462, 428, 501, 472, 513, 142, 434, 520, 144, 478, - 0, 216, 158, 0, 0, 460, 503, 467, 496, 455, - 488, 419, 477, 515, 445, 485, 516, 0, 0, 0, - 82, 83, 84, 0, 0, 0, 0, 0, 0, 0, - 0, 104, 0, 482, 510, 442, 484, 486, 408, 479, - 0, 412, 415, 521, 506, 437, 438, 0, 0, 0, - 0, 0, 0, 0, 459, 468, 493, 453, 0, 0, - 0, 0, 0, 0, 1237, 0, 435, 0, 476, 0, - 0, 0, 416, 413, 0, 0, 457, 0, 0, 0, - 418, 0, 436, 494, 0, 406, 123, 498, 505, 454, - 272, 509, 452, 451, 512, 189, 0, 220, 126, 141, - 100, 138, 86, 96, 0, 125, 167, 196, 200, 502, - 432, 441, 108, 439, 198, 177, 236, 475, 179, 197, - 145, 226, 190, 235, 245, 246, 223, 243, 250, 213, - 89, 222, 234, 105, 208, 91, 232, 219, 156, 135, - 136, 90, 0, 194, 113, 121, 110, 169, 229, 230, - 109, 253, 97, 242, 93, 98, 241, 163, 225, 233, - 157, 150, 92, 231, 155, 149, 140, 117, 128, 187, - 147, 188, 129, 160, 159, 161, 0, 411, 0, 217, - 239, 254, 102, 427, 224, 248, 249, 0, 0, 103, - 122, 116, 186, 120, 162, 99, 131, 214, 139, 146, - 193, 252, 176, 199, 106, 238, 215, 423, 426, 421, - 422, 470, 471, 517, 518, 519, 495, 417, 0, 424, - 425, 0, 500, 507, 508, 474, 85, 94, 143, 251, - 191, 119, 240, 407, 420, 112, 430, 0, 0, 443, - 448, 449, 461, 463, 464, 465, 466, 473, 480, 481, - 483, 489, 490, 491, 492, 497, 504, 523, 87, 88, - 95, 101, 107, 111, 115, 118, 124, 127, 130, 132, - 133, 134, 137, 148, 151, 152, 153, 154, 164, 165, - 166, 168, 171, 172, 173, 174, 175, 178, 180, 181, - 182, 183, 184, 185, 192, 195, 201, 202, 203, 204, - 205, 206, 207, 209, 210, 211, 212, 218, 221, 227, - 228, 237, 244, 247, 511, 499, 0, 456, 514, 429, - 446, 522, 447, 450, 487, 414, 469, 170, 444, 0, - 433, 409, 440, 410, 431, 458, 114, 462, 428, 501, - 472, 513, 142, 434, 520, 144, 478, 0, 216, 158, - 0, 0, 460, 503, 467, 496, 455, 488, 419, 477, - 515, 445, 485, 516, 0, 0, 0, 82, 83, 84, - 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, - 482, 510, 442, 484, 486, 408, 479, 0, 412, 415, - 521, 506, 437, 438, 0, 0, 0, 0, 0, 0, - 0, 459, 468, 493, 453, 0, 0, 0, 0, 0, - 0, 965, 0, 435, 0, 476, 0, 0, 0, 416, - 413, 0, 0, 457, 0, 0, 0, 418, 0, 436, - 494, 0, 406, 123, 498, 505, 454, 272, 509, 452, - 451, 512, 189, 0, 220, 126, 141, 100, 138, 86, - 96, 0, 125, 167, 196, 200, 502, 432, 441, 108, - 439, 198, 177, 236, 475, 179, 197, 145, 226, 190, - 235, 245, 246, 223, 243, 250, 213, 89, 222, 234, - 105, 208, 91, 232, 219, 156, 135, 136, 90, 0, - 194, 113, 121, 110, 169, 229, 230, 109, 253, 97, - 242, 93, 98, 241, 163, 225, 233, 157, 150, 92, - 231, 155, 149, 140, 117, 128, 187, 147, 188, 129, - 160, 159, 161, 0, 411, 0, 217, 239, 254, 102, - 427, 224, 248, 249, 0, 0, 103, 122, 116, 186, - 120, 162, 99, 131, 214, 139, 146, 193, 252, 176, - 199, 106, 238, 215, 423, 426, 421, 422, 470, 471, - 517, 518, 519, 495, 417, 0, 424, 425, 0, 500, - 507, 508, 474, 85, 94, 143, 251, 191, 119, 240, - 407, 420, 112, 430, 0, 0, 443, 448, 449, 461, - 463, 464, 465, 466, 473, 480, 481, 483, 489, 490, - 491, 492, 497, 504, 523, 87, 88, 95, 101, 107, - 111, 115, 118, 124, 127, 130, 132, 133, 134, 137, - 148, 151, 152, 153, 154, 164, 165, 166, 168, 171, - 172, 173, 174, 175, 178, 180, 181, 182, 183, 184, - 185, 192, 195, 201, 202, 203, 204, 205, 206, 207, - 209, 210, 211, 212, 218, 221, 227, 228, 237, 244, - 247, 511, 499, 0, 456, 514, 429, 446, 522, 447, - 450, 487, 414, 469, 170, 444, 0, 433, 409, 440, - 410, 431, 458, 114, 462, 428, 501, 472, 513, 142, - 434, 520, 144, 478, 0, 216, 158, 0, 0, 460, - 503, 467, 496, 455, 488, 419, 477, 515, 445, 485, - 516, 0, 0, 0, 82, 83, 84, 0, 0, 0, - 0, 0, 0, 0, 0, 104, 0, 482, 510, 442, - 484, 486, 408, 479, 0, 412, 415, 521, 506, 437, - 438, 0, 0, 0, 0, 0, 0, 0, 459, 468, - 493, 453, 0, 0, 0, 0, 0, 0, 861, 0, - 435, 0, 476, 0, 0, 0, 416, 413, 0, 0, - 457, 0, 0, 0, 418, 0, 436, 494, 0, 406, - 123, 498, 505, 454, 272, 509, 452, 451, 512, 189, - 0, 220, 126, 141, 100, 138, 86, 96, 0, 125, - 167, 196, 200, 502, 432, 441, 108, 439, 198, 177, - 236, 475, 179, 197, 145, 226, 190, 235, 245, 246, - 223, 243, 250, 213, 89, 222, 234, 105, 208, 91, - 232, 219, 156, 135, 136, 90, 0, 194, 113, 121, - 110, 169, 229, 230, 109, 253, 97, 242, 93, 98, - 241, 163, 225, 233, 157, 150, 92, 231, 155, 149, - 140, 117, 128, 187, 147, 188, 129, 160, 159, 161, - 0, 411, 0, 217, 239, 254, 102, 427, 224, 248, - 249, 0, 0, 103, 122, 116, 186, 120, 162, 99, - 131, 214, 139, 146, 193, 252, 176, 199, 106, 238, - 215, 423, 426, 421, 422, 470, 471, 517, 518, 519, - 495, 417, 0, 424, 425, 0, 500, 507, 508, 474, - 85, 94, 143, 251, 191, 119, 240, 407, 420, 112, - 430, 0, 0, 443, 448, 449, 461, 463, 464, 465, - 466, 473, 480, 481, 483, 489, 490, 491, 492, 497, - 504, 523, 87, 88, 95, 101, 107, 111, 115, 118, - 124, 127, 130, 132, 133, 134, 137, 148, 151, 152, - 153, 154, 164, 165, 166, 168, 171, 172, 173, 174, - 175, 178, 180, 181, 182, 183, 184, 185, 192, 195, - 201, 202, 203, 204, 205, 206, 207, 209, 210, 211, - 212, 218, 221, 227, 228, 237, 244, 247, 511, 499, - 0, 456, 514, 429, 446, 522, 447, 450, 487, 414, - 469, 170, 444, 0, 433, 409, 440, 410, 431, 458, - 114, 462, 428, 501, 472, 513, 142, 434, 520, 144, - 478, 0, 216, 158, 0, 0, 460, 503, 467, 496, - 455, 488, 419, 477, 515, 445, 485, 516, 0, 0, - 0, 82, 83, 84, 0, 0, 0, 0, 0, 0, - 0, 0, 104, 0, 482, 510, 442, 484, 486, 408, - 479, 0, 412, 415, 521, 506, 437, 438, 0, 0, - 0, 0, 0, 0, 0, 459, 468, 493, 453, 0, - 0, 0, 0, 0, 0, 0, 0, 435, 0, 476, - 0, 0, 0, 416, 413, 0, 0, 457, 0, 0, - 0, 418, 0, 436, 494, 0, 406, 123, 498, 505, - 454, 272, 509, 452, 451, 512, 189, 0, 220, 126, - 141, 100, 138, 86, 96, 0, 125, 167, 196, 200, - 502, 432, 441, 108, 439, 198, 177, 236, 475, 179, - 197, 145, 226, 190, 235, 245, 246, 223, 243, 250, - 213, 89, 222, 234, 105, 208, 91, 232, 219, 156, - 135, 136, 90, 0, 194, 113, 121, 110, 169, 229, - 230, 109, 253, 97, 242, 93, 98, 241, 163, 225, - 233, 157, 150, 92, 231, 155, 149, 140, 117, 128, - 187, 147, 188, 129, 160, 159, 161, 0, 411, 0, - 217, 239, 254, 102, 427, 224, 248, 249, 0, 0, - 103, 122, 116, 186, 120, 162, 99, 131, 214, 139, - 146, 193, 252, 176, 199, 106, 238, 215, 423, 426, - 421, 422, 470, 471, 517, 518, 519, 495, 417, 0, - 424, 425, 0, 500, 507, 508, 474, 85, 94, 143, - 251, 191, 119, 240, 407, 420, 112, 430, 0, 0, - 443, 448, 449, 461, 463, 464, 465, 466, 473, 480, - 481, 483, 489, 490, 491, 492, 497, 504, 523, 87, - 88, 95, 101, 107, 111, 115, 118, 124, 127, 130, - 132, 133, 134, 137, 148, 151, 152, 153, 154, 164, - 165, 166, 168, 171, 172, 173, 174, 175, 178, 180, - 181, 182, 183, 184, 185, 192, 195, 201, 202, 203, - 204, 205, 206, 207, 209, 210, 211, 212, 218, 221, - 227, 228, 237, 244, 247, 511, 499, 0, 456, 514, - 429, 446, 522, 447, 450, 487, 414, 469, 170, 444, - 0, 433, 409, 440, 410, 431, 458, 114, 462, 428, - 501, 472, 513, 142, 434, 520, 144, 478, 0, 216, - 158, 0, 0, 460, 503, 467, 496, 455, 488, 419, - 477, 515, 445, 485, 516, 0, 0, 0, 82, 83, - 84, 0, 0, 0, 0, 0, 0, 0, 0, 104, - 0, 482, 510, 442, 484, 486, 408, 479, 0, 412, - 415, 521, 506, 437, 438, 0, 0, 0, 0, 0, - 0, 0, 459, 468, 493, 453, 0, 0, 0, 0, - 0, 0, 0, 0, 435, 0, 476, 0, 0, 0, - 416, 413, 0, 0, 457, 0, 0, 0, 418, 0, - 436, 494, 0, 406, 123, 498, 505, 454, 272, 509, - 452, 451, 512, 189, 0, 220, 126, 141, 100, 138, - 86, 96, 0, 125, 167, 196, 200, 502, 432, 441, - 108, 439, 198, 177, 236, 475, 179, 197, 145, 226, - 190, 235, 245, 246, 223, 243, 250, 213, 89, 222, - 234, 105, 208, 91, 232, 219, 156, 135, 136, 90, - 0, 194, 113, 121, 110, 169, 229, 230, 109, 253, - 97, 242, 93, 404, 241, 163, 225, 233, 157, 150, - 92, 231, 155, 149, 140, 117, 128, 187, 147, 188, - 129, 160, 159, 161, 0, 411, 0, 217, 239, 254, - 102, 427, 224, 248, 249, 0, 0, 103, 122, 116, - 186, 120, 405, 403, 131, 214, 139, 146, 193, 252, - 176, 199, 106, 238, 215, 423, 426, 421, 422, 470, - 471, 517, 518, 519, 495, 417, 0, 424, 425, 0, - 500, 507, 508, 474, 85, 94, 143, 251, 191, 119, - 240, 407, 420, 112, 430, 0, 0, 443, 448, 449, - 461, 463, 464, 465, 466, 473, 480, 481, 483, 489, - 490, 491, 492, 497, 504, 523, 87, 88, 95, 101, - 107, 111, 115, 118, 124, 127, 130, 132, 133, 134, - 137, 148, 151, 152, 153, 154, 164, 165, 166, 168, - 171, 172, 173, 174, 175, 178, 180, 181, 182, 183, - 184, 185, 192, 195, 201, 202, 203, 204, 205, 206, - 207, 209, 210, 211, 212, 218, 221, 227, 228, 237, - 244, 247, 511, 499, 0, 456, 514, 429, 446, 522, - 447, 450, 487, 414, 469, 170, 444, 0, 433, 409, - 440, 410, 431, 458, 114, 462, 428, 501, 472, 513, - 142, 434, 520, 144, 478, 0, 216, 158, 0, 0, - 460, 503, 467, 496, 455, 488, 419, 477, 515, 445, - 485, 516, 0, 0, 0, 82, 83, 84, 0, 0, - 0, 0, 0, 0, 0, 0, 104, 0, 482, 510, - 442, 484, 486, 408, 479, 0, 412, 415, 521, 506, - 437, 438, 0, 0, 0, 0, 0, 0, 0, 459, - 468, 493, 453, 0, 0, 0, 0, 0, 0, 0, - 0, 435, 0, 476, 0, 0, 0, 416, 413, 0, - 0, 457, 0, 0, 0, 418, 0, 436, 494, 0, - 406, 123, 498, 505, 454, 272, 509, 452, 451, 512, - 189, 0, 220, 126, 141, 100, 138, 86, 96, 0, - 125, 167, 196, 200, 502, 432, 441, 108, 439, 198, - 177, 236, 475, 179, 197, 145, 226, 190, 235, 245, - 246, 223, 243, 250, 213, 89, 222, 720, 105, 208, - 91, 232, 219, 156, 135, 136, 90, 0, 194, 113, - 121, 110, 169, 229, 230, 109, 253, 97, 242, 93, - 404, 241, 163, 225, 233, 157, 150, 92, 231, 155, - 149, 140, 117, 128, 187, 147, 188, 129, 160, 159, - 161, 0, 411, 0, 217, 239, 254, 102, 427, 224, - 248, 249, 0, 0, 103, 122, 116, 186, 120, 405, - 403, 131, 214, 139, 146, 193, 252, 176, 199, 106, - 238, 215, 423, 426, 421, 422, 470, 471, 517, 518, - 519, 495, 417, 0, 424, 425, 0, 500, 507, 508, - 474, 85, 94, 143, 251, 191, 119, 240, 407, 420, - 112, 430, 0, 0, 443, 448, 449, 461, 463, 464, - 465, 466, 473, 480, 481, 483, 489, 490, 491, 492, - 497, 504, 523, 87, 88, 95, 101, 107, 111, 115, - 118, 124, 127, 130, 132, 133, 134, 137, 148, 151, - 152, 153, 154, 164, 165, 166, 168, 171, 172, 173, - 174, 175, 178, 180, 181, 182, 183, 184, 185, 192, - 195, 201, 202, 203, 204, 205, 206, 207, 209, 210, - 211, 212, 218, 221, 227, 228, 237, 244, 247, 511, - 499, 0, 456, 514, 429, 446, 522, 447, 450, 487, - 414, 469, 170, 444, 0, 433, 409, 440, 410, 431, - 458, 114, 462, 428, 501, 472, 513, 142, 434, 520, - 144, 478, 0, 216, 158, 0, 0, 460, 503, 467, - 496, 455, 488, 419, 477, 515, 445, 485, 516, 0, - 0, 0, 82, 83, 84, 0, 0, 0, 0, 0, - 0, 0, 0, 104, 0, 482, 510, 442, 484, 486, - 408, 479, 0, 412, 415, 521, 506, 437, 438, 0, - 0, 0, 0, 0, 0, 0, 459, 468, 493, 453, - 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, - 476, 0, 0, 0, 416, 413, 0, 0, 457, 0, - 0, 0, 418, 0, 436, 494, 0, 406, 123, 498, - 505, 454, 272, 509, 452, 451, 512, 189, 0, 220, - 126, 141, 100, 138, 86, 96, 0, 125, 167, 196, - 200, 502, 432, 441, 108, 439, 198, 177, 236, 475, - 179, 197, 145, 226, 190, 235, 245, 246, 223, 243, - 250, 213, 89, 222, 395, 105, 208, 91, 232, 219, - 156, 135, 136, 90, 0, 194, 113, 121, 110, 169, - 229, 230, 109, 253, 97, 242, 93, 404, 241, 163, - 225, 233, 157, 150, 92, 231, 155, 149, 140, 117, - 128, 187, 147, 188, 129, 160, 159, 161, 0, 411, - 0, 217, 239, 254, 102, 427, 224, 248, 249, 0, - 0, 103, 122, 116, 186, 120, 405, 403, 398, 397, - 139, 146, 193, 252, 176, 199, 106, 238, 215, 423, - 426, 421, 422, 470, 471, 517, 518, 519, 495, 417, - 0, 424, 425, 0, 500, 507, 508, 474, 85, 94, - 143, 251, 191, 119, 240, 407, 420, 112, 430, 0, - 0, 443, 448, 449, 461, 463, 464, 465, 466, 473, - 480, 481, 483, 489, 490, 491, 492, 497, 504, 523, - 87, 88, 95, 101, 107, 111, 115, 118, 124, 127, - 130, 132, 133, 134, 137, 148, 151, 152, 153, 154, - 164, 165, 166, 168, 171, 172, 173, 174, 175, 178, - 180, 181, 182, 183, 184, 185, 192, 195, 201, 202, - 203, 204, 205, 206, 207, 209, 210, 211, 212, 218, - 221, 227, 228, 237, 244, 247, 170, 0, 0, 897, - 0, 329, 0, 0, 0, 114, 0, 326, 0, 0, - 0, 142, 898, 369, 144, 0, 0, 216, 158, 0, - 0, 0, 0, 360, 361, 0, 0, 0, 0, 0, - 0, 0, 0, 54, 0, 0, 82, 83, 84, 348, - 347, 350, 351, 352, 353, 0, 0, 104, 349, 354, - 355, 356, 0, 0, 0, 324, 341, 0, 368, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 338, 339, - 320, 0, 0, 0, 383, 0, 340, 0, 0, 335, - 336, 337, 342, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 123, 382, 0, 0, 272, 0, 0, 380, - 0, 189, 0, 220, 126, 141, 100, 138, 86, 96, - 0, 125, 167, 196, 200, 0, 0, 0, 108, 0, - 198, 177, 236, 0, 179, 197, 145, 226, 190, 235, - 245, 246, 223, 243, 250, 213, 89, 222, 234, 105, - 208, 91, 232, 219, 156, 135, 136, 90, 0, 194, - 113, 121, 110, 169, 229, 230, 109, 253, 97, 242, - 93, 98, 241, 163, 225, 233, 157, 150, 92, 231, - 155, 149, 140, 117, 128, 187, 147, 188, 129, 160, - 159, 161, 0, 0, 0, 217, 239, 254, 102, 0, - 224, 248, 249, 0, 0, 103, 122, 116, 186, 120, - 162, 99, 131, 214, 139, 146, 193, 252, 176, 199, - 106, 238, 215, 370, 381, 376, 377, 374, 375, 373, - 372, 371, 384, 362, 363, 364, 365, 367, 0, 378, - 379, 366, 85, 94, 143, 251, 191, 119, 240, 0, - 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 88, 95, 101, 107, 111, - 115, 118, 124, 127, 130, 132, 133, 134, 137, 148, - 151, 152, 153, 154, 164, 165, 166, 168, 171, 172, - 173, 174, 175, 178, 180, 181, 182, 183, 184, 185, - 192, 195, 201, 202, 203, 204, 205, 206, 207, 209, - 210, 211, 212, 218, 221, 227, 228, 237, 244, 247, - 170, 0, 0, 0, 0, 329, 0, 0, 0, 114, - 0, 326, 0, 0, 0, 142, 0, 369, 144, 0, - 0, 216, 158, 0, 0, 0, 0, 360, 361, 0, - 0, 0, 0, 0, 0, 972, 0, 54, 0, 0, - 82, 83, 84, 348, 347, 350, 351, 352, 353, 0, - 0, 104, 349, 354, 355, 356, 973, 0, 0, 324, - 341, 0, 368, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 338, 339, 0, 0, 0, 0, 383, 0, - 340, 0, 0, 335, 336, 337, 342, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 123, 382, 0, 0, - 272, 0, 0, 380, 0, 189, 0, 220, 126, 141, - 100, 138, 86, 96, 0, 125, 167, 196, 200, 0, - 0, 0, 108, 0, 198, 177, 236, 0, 179, 197, - 145, 226, 190, 235, 245, 246, 223, 243, 250, 213, - 89, 222, 234, 105, 208, 91, 232, 219, 156, 135, - 136, 90, 0, 194, 113, 121, 110, 169, 229, 230, - 109, 253, 97, 242, 93, 98, 241, 163, 225, 233, - 157, 150, 92, 231, 155, 149, 140, 117, 128, 187, - 147, 188, 129, 160, 159, 161, 0, 0, 0, 217, - 239, 254, 102, 0, 224, 248, 249, 0, 0, 103, - 122, 116, 186, 120, 162, 99, 131, 214, 139, 146, - 193, 252, 176, 199, 106, 238, 215, 370, 381, 376, - 377, 374, 375, 373, 372, 371, 384, 362, 363, 364, - 365, 367, 0, 378, 379, 366, 85, 94, 143, 251, - 191, 119, 240, 0, 0, 112, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 88, - 95, 101, 107, 111, 115, 118, 124, 127, 130, 132, - 133, 134, 137, 148, 151, 152, 153, 154, 164, 165, - 166, 168, 171, 172, 173, 174, 175, 178, 180, 181, - 182, 183, 184, 185, 192, 195, 201, 202, 203, 204, - 205, 206, 207, 209, 210, 211, 212, 218, 221, 227, - 228, 237, 244, 247, 170, 0, 0, 0, 0, 329, - 0, 0, 0, 114, 0, 326, 0, 0, 0, 142, - 0, 369, 144, 0, 0, 216, 158, 0, 0, 0, - 0, 360, 361, 0, 0, 0, 0, 0, 0, 0, - 0, 54, 0, 591, 82, 83, 84, 348, 347, 350, - 351, 352, 353, 0, 0, 104, 349, 354, 355, 356, - 0, 0, 0, 324, 341, 0, 368, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 338, 339, 0, 0, - 0, 0, 383, 0, 340, 0, 0, 335, 336, 337, - 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 123, 382, 0, 0, 272, 0, 0, 380, 0, 189, - 0, 220, 126, 141, 100, 138, 86, 96, 0, 125, - 167, 196, 200, 0, 0, 0, 108, 0, 198, 177, - 236, 0, 179, 197, 145, 226, 190, 235, 245, 246, - 223, 243, 250, 213, 89, 222, 234, 105, 208, 91, - 232, 219, 156, 135, 136, 90, 0, 194, 113, 121, - 110, 169, 229, 230, 109, 253, 97, 242, 93, 98, - 241, 163, 225, 233, 157, 150, 92, 231, 155, 149, - 140, 117, 128, 187, 147, 188, 129, 160, 159, 161, - 0, 0, 0, 217, 239, 254, 102, 0, 224, 248, - 249, 0, 0, 103, 122, 116, 186, 120, 162, 99, - 131, 214, 139, 146, 193, 252, 176, 199, 106, 238, - 215, 370, 381, 376, 377, 374, 375, 373, 372, 371, - 384, 362, 363, 364, 365, 367, 0, 378, 379, 366, - 85, 94, 143, 251, 191, 119, 240, 0, 0, 112, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 88, 95, 101, 107, 111, 115, 118, - 124, 127, 130, 132, 133, 134, 137, 148, 151, 152, - 153, 154, 164, 165, 166, 168, 171, 172, 173, 174, - 175, 178, 180, 181, 182, 183, 184, 185, 192, 195, - 201, 202, 203, 204, 205, 206, 207, 209, 210, 211, - 212, 218, 221, 227, 228, 237, 244, 247, 170, 0, - 0, 0, 0, 329, 0, 0, 0, 114, 0, 326, - 0, 0, 0, 142, 0, 369, 144, 0, 0, 216, - 158, 0, 0, 0, 0, 360, 361, 0, 0, 0, - 0, 0, 0, 0, 0, 54, 0, 0, 82, 83, - 84, 348, 347, 350, 351, 352, 353, 0, 0, 104, - 349, 354, 355, 356, 0, 0, 0, 324, 341, 0, - 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 338, 339, 320, 0, 0, 0, 383, 0, 340, 0, - 0, 335, 336, 337, 342, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 123, 382, 0, 0, 272, 0, - 0, 380, 0, 189, 0, 220, 126, 141, 100, 138, - 86, 96, 0, 125, 167, 196, 200, 0, 0, 0, - 108, 0, 198, 177, 236, 0, 179, 197, 145, 226, - 190, 235, 245, 246, 223, 243, 250, 213, 89, 222, - 234, 105, 208, 91, 232, 219, 156, 135, 136, 90, - 0, 194, 113, 121, 110, 169, 229, 230, 109, 253, - 97, 242, 93, 98, 241, 163, 225, 233, 157, 150, - 92, 231, 155, 149, 140, 117, 128, 187, 147, 188, - 129, 160, 159, 161, 0, 0, 0, 217, 239, 254, - 102, 0, 224, 248, 249, 0, 0, 103, 122, 116, - 186, 120, 162, 99, 131, 214, 139, 146, 193, 252, - 176, 199, 106, 238, 215, 370, 381, 376, 377, 374, - 375, 373, 372, 371, 384, 362, 363, 364, 365, 367, - 0, 378, 379, 366, 85, 94, 143, 251, 191, 119, - 240, 0, 0, 112, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 87, 88, 95, 101, - 107, 111, 115, 118, 124, 127, 130, 132, 133, 134, - 137, 148, 151, 152, 153, 154, 164, 165, 166, 168, - 171, 172, 173, 174, 175, 178, 180, 181, 182, 183, - 184, 185, 192, 195, 201, 202, 203, 204, 205, 206, - 207, 209, 210, 211, 212, 218, 221, 227, 228, 237, - 244, 247, 170, 0, 0, 0, 0, 329, 0, 0, - 0, 114, 0, 326, 0, 0, 0, 142, 0, 369, - 144, 0, 0, 216, 158, 0, 0, 0, 0, 360, - 361, 0, 0, 0, 0, 0, 0, 0, 0, 54, - 0, 0, 82, 83, 84, 348, 913, 350, 351, 352, - 353, 0, 0, 104, 349, 354, 355, 356, 0, 0, - 0, 324, 341, 0, 368, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 338, 339, 320, 0, 0, 0, - 383, 0, 340, 0, 0, 335, 336, 337, 342, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 123, 382, - 0, 0, 272, 0, 0, 380, 0, 189, 0, 220, - 126, 141, 100, 138, 86, 96, 0, 125, 167, 196, - 200, 0, 0, 0, 108, 0, 198, 177, 236, 0, - 179, 197, 145, 226, 190, 235, 245, 246, 223, 243, - 250, 213, 89, 222, 234, 105, 208, 91, 232, 219, - 156, 135, 136, 90, 0, 194, 113, 121, 110, 169, - 229, 230, 109, 253, 97, 242, 93, 98, 241, 163, - 225, 233, 157, 150, 92, 231, 155, 149, 140, 117, - 128, 187, 147, 188, 129, 160, 159, 161, 0, 0, - 0, 217, 239, 254, 102, 0, 224, 248, 249, 0, - 0, 103, 122, 116, 186, 120, 162, 99, 131, 214, - 139, 146, 193, 252, 176, 199, 106, 238, 215, 370, - 381, 376, 377, 374, 375, 373, 372, 371, 384, 362, - 363, 364, 365, 367, 0, 378, 379, 366, 85, 94, - 143, 251, 191, 119, 240, 0, 0, 112, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 88, 95, 101, 107, 111, 115, 118, 124, 127, - 130, 132, 133, 134, 137, 148, 151, 152, 153, 154, - 164, 165, 166, 168, 171, 172, 173, 174, 175, 178, - 180, 181, 182, 183, 184, 185, 192, 195, 201, 202, - 203, 204, 205, 206, 207, 209, 210, 211, 212, 218, - 221, 227, 228, 237, 244, 247, 170, 0, 0, 0, - 0, 329, 0, 0, 0, 114, 0, 326, 0, 0, - 0, 142, 0, 369, 144, 0, 0, 216, 158, 0, - 0, 0, 0, 360, 361, 0, 0, 0, 0, 0, - 0, 0, 0, 54, 0, 0, 82, 83, 84, 348, - 910, 350, 351, 352, 353, 0, 0, 104, 349, 354, - 355, 356, 0, 0, 0, 324, 341, 0, 368, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 338, 339, - 320, 0, 0, 0, 383, 0, 340, 0, 0, 335, - 336, 337, 342, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 123, 382, 0, 0, 272, 0, 0, 380, - 0, 189, 0, 220, 126, 141, 100, 138, 86, 96, - 0, 125, 167, 196, 200, 0, 0, 0, 108, 0, - 198, 177, 236, 0, 179, 197, 145, 226, 190, 235, - 245, 246, 223, 243, 250, 213, 89, 222, 234, 105, - 208, 91, 232, 219, 156, 135, 136, 90, 0, 194, - 113, 121, 110, 169, 229, 230, 109, 253, 97, 242, - 93, 98, 241, 163, 225, 233, 157, 150, 92, 231, - 155, 149, 140, 117, 128, 187, 147, 188, 129, 160, - 159, 161, 0, 0, 0, 217, 239, 254, 102, 0, - 224, 248, 249, 0, 0, 103, 122, 116, 186, 120, - 162, 99, 131, 214, 139, 146, 193, 252, 176, 199, - 106, 238, 215, 370, 381, 376, 377, 374, 375, 373, - 372, 371, 384, 362, 363, 364, 365, 367, 0, 378, - 379, 366, 85, 94, 143, 251, 191, 119, 240, 0, - 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 88, 95, 101, 107, 111, - 115, 118, 124, 127, 130, 132, 133, 134, 137, 148, - 151, 152, 153, 154, 164, 165, 166, 168, 171, 172, - 173, 174, 175, 178, 180, 181, 182, 183, 184, 185, - 192, 195, 201, 202, 203, 204, 205, 206, 207, 209, - 210, 211, 212, 218, 221, 227, 228, 237, 244, 247, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 170, 0, 0, 0, 0, 329, 0, 0, - 0, 114, 0, 326, 0, 0, 0, 142, 0, 369, - 144, 0, 0, 216, 158, 0, 0, 0, 0, 360, - 361, 0, 0, 0, 0, 0, 0, 0, 0, 54, - 0, 0, 82, 83, 84, 348, 347, 350, 351, 352, - 353, 0, 0, 104, 349, 354, 355, 356, 0, 0, - 0, 324, 341, 0, 368, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 338, 339, 0, 0, 0, 0, - 383, 0, 340, 0, 0, 335, 336, 337, 342, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 123, 382, - 0, 0, 272, 0, 0, 380, 0, 189, 0, 220, - 126, 141, 100, 138, 86, 96, 0, 125, 167, 196, - 200, 0, 0, 0, 108, 0, 198, 177, 236, 0, - 179, 197, 145, 226, 190, 235, 245, 246, 223, 243, - 250, 213, 89, 222, 234, 105, 208, 91, 232, 219, - 156, 135, 136, 90, 0, 194, 113, 121, 110, 169, - 229, 230, 109, 253, 97, 242, 93, 98, 241, 163, - 225, 233, 157, 150, 92, 231, 155, 149, 140, 117, - 128, 187, 147, 188, 129, 160, 159, 161, 0, 0, - 0, 217, 239, 254, 102, 0, 224, 248, 249, 0, - 0, 103, 122, 116, 186, 120, 162, 99, 131, 214, - 139, 146, 193, 252, 176, 199, 106, 238, 215, 370, - 381, 376, 377, 374, 375, 373, 372, 371, 384, 362, - 363, 364, 365, 367, 0, 378, 379, 366, 85, 94, - 143, 251, 191, 119, 240, 0, 0, 112, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 88, 95, 101, 107, 111, 115, 118, 124, 127, - 130, 132, 133, 134, 137, 148, 151, 152, 153, 154, - 164, 165, 166, 168, 171, 172, 173, 174, 175, 178, - 180, 181, 182, 183, 184, 185, 192, 195, 201, 202, - 203, 204, 205, 206, 207, 209, 210, 211, 212, 218, - 221, 227, 228, 237, 244, 247, 170, 0, 0, 0, - 0, 329, 0, 0, 0, 114, 0, 326, 0, 0, - 0, 142, 0, 369, 144, 0, 0, 216, 158, 0, - 0, 0, 0, 360, 361, 0, 0, 0, 0, 0, - 0, 0, 0, 54, 0, 0, 82, 83, 84, 348, - 347, 350, 351, 352, 353, 0, 0, 104, 349, 354, - 355, 356, 0, 0, 0, 324, 341, 0, 368, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 338, 339, - 0, 0, 0, 0, 383, 0, 340, 0, 0, 335, - 336, 337, 342, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 123, 382, 0, 0, 272, 0, 0, 380, - 0, 189, 0, 220, 126, 141, 100, 138, 86, 96, - 0, 125, 167, 196, 200, 0, 0, 0, 108, 0, - 198, 177, 236, 0, 179, 197, 145, 226, 190, 235, - 245, 246, 223, 243, 250, 213, 89, 222, 234, 105, - 208, 91, 232, 219, 156, 135, 136, 90, 0, 194, - 113, 121, 110, 169, 229, 230, 109, 253, 97, 242, - 93, 98, 241, 163, 225, 233, 157, 150, 92, 231, - 155, 149, 140, 117, 128, 187, 147, 188, 129, 160, - 159, 161, 0, 0, 0, 217, 239, 254, 102, 0, - 224, 248, 249, 0, 0, 103, 122, 116, 186, 120, - 162, 99, 131, 214, 139, 146, 193, 252, 176, 199, - 106, 238, 215, 370, 381, 376, 377, 374, 375, 373, - 372, 371, 384, 362, 363, 364, 365, 367, 0, 378, - 379, 366, 85, 94, 143, 251, 191, 119, 240, 0, - 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 88, 95, 101, 107, 111, - 115, 118, 124, 127, 130, 132, 133, 134, 137, 148, - 151, 152, 153, 154, 164, 165, 166, 168, 171, 172, - 173, 174, 175, 178, 180, 181, 182, 183, 184, 185, - 192, 195, 201, 202, 203, 204, 205, 206, 207, 209, - 210, 211, 212, 218, 221, 227, 228, 237, 244, 247, - 170, 0, 0, 0, 0, 0, 0, 0, 0, 114, - 0, 0, 0, 0, 0, 142, 0, 369, 144, 0, - 0, 216, 158, 0, 0, 0, 0, 360, 361, 0, - 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, - 82, 83, 84, 348, 347, 350, 351, 352, 353, 0, - 0, 104, 349, 354, 355, 356, 0, 0, 0, 0, - 341, 0, 368, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 338, 339, 0, 0, 0, 0, 383, 0, - 340, 0, 0, 335, 336, 337, 342, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 123, 382, 0, 0, - 272, 0, 0, 380, 0, 189, 0, 220, 126, 141, - 100, 138, 86, 96, 0, 125, 167, 196, 200, 0, - 0, 0, 108, 0, 198, 177, 236, 1540, 179, 197, - 145, 226, 190, 235, 245, 246, 223, 243, 250, 213, - 89, 222, 234, 105, 208, 91, 232, 219, 156, 135, - 136, 90, 0, 194, 113, 121, 110, 169, 229, 230, - 109, 253, 97, 242, 93, 98, 241, 163, 225, 233, - 157, 150, 92, 231, 155, 149, 140, 117, 128, 187, - 147, 188, 129, 160, 159, 161, 0, 0, 0, 217, - 239, 254, 102, 0, 224, 248, 249, 0, 0, 103, - 122, 116, 186, 120, 162, 99, 131, 214, 139, 146, - 193, 252, 176, 199, 106, 238, 215, 370, 381, 376, - 377, 374, 375, 373, 372, 371, 384, 362, 363, 364, - 365, 367, 0, 378, 379, 366, 85, 94, 143, 251, - 191, 119, 240, 0, 0, 112, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 88, - 95, 101, 107, 111, 115, 118, 124, 127, 130, 132, - 133, 134, 137, 148, 151, 152, 153, 154, 164, 165, - 166, 168, 171, 172, 173, 174, 175, 178, 180, 181, - 182, 183, 184, 185, 192, 195, 201, 202, 203, 204, - 205, 206, 207, 209, 210, 211, 212, 218, 221, 227, - 228, 237, 244, 247, 170, 0, 0, 0, 0, 0, - 0, 0, 0, 114, 0, 0, 0, 0, 0, 142, - 0, 369, 144, 0, 0, 216, 158, 0, 0, 0, - 0, 360, 361, 0, 0, 0, 0, 0, 0, 0, - 0, 54, 0, 591, 82, 83, 84, 348, 347, 350, - 351, 352, 353, 0, 0, 104, 349, 354, 355, 356, - 0, 0, 0, 0, 341, 0, 368, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 338, 339, 0, 0, - 0, 0, 383, 0, 340, 0, 0, 335, 336, 337, - 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 123, 382, 0, 0, 272, 0, 0, 380, 0, 189, - 0, 220, 126, 141, 100, 138, 86, 96, 0, 125, - 167, 196, 200, 0, 0, 0, 108, 0, 198, 177, - 236, 0, 179, 197, 145, 226, 190, 235, 245, 246, - 223, 243, 250, 213, 89, 222, 234, 105, 208, 91, - 232, 219, 156, 135, 136, 90, 0, 194, 113, 121, - 110, 169, 229, 230, 109, 253, 97, 242, 93, 98, - 241, 163, 225, 233, 157, 150, 92, 231, 155, 149, - 140, 117, 128, 187, 147, 188, 129, 160, 159, 161, - 0, 0, 0, 217, 239, 254, 102, 0, 224, 248, - 249, 0, 0, 103, 122, 116, 186, 120, 162, 99, - 131, 214, 139, 146, 193, 252, 176, 199, 106, 238, - 215, 370, 381, 376, 377, 374, 375, 373, 372, 371, - 384, 362, 363, 364, 365, 367, 0, 378, 379, 366, - 85, 94, 143, 251, 191, 119, 240, 0, 0, 112, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 88, 95, 101, 107, 111, 115, 118, - 124, 127, 130, 132, 133, 134, 137, 148, 151, 152, - 153, 154, 164, 165, 166, 168, 171, 172, 173, 174, - 175, 178, 180, 181, 182, 183, 184, 185, 192, 195, - 201, 202, 203, 204, 205, 206, 207, 209, 210, 211, - 212, 218, 221, 227, 228, 237, 244, 247, 170, 0, - 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, - 0, 0, 0, 142, 0, 369, 144, 0, 0, 216, - 158, 0, 0, 0, 0, 360, 361, 0, 0, 0, - 0, 0, 0, 0, 0, 54, 0, 0, 82, 83, - 84, 348, 347, 350, 351, 352, 353, 0, 0, 104, - 349, 354, 355, 356, 0, 0, 0, 0, 341, 0, - 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 338, 339, 0, 0, 0, 0, 383, 0, 340, 0, - 0, 335, 336, 337, 342, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 123, 382, 0, 0, 272, 0, - 0, 380, 0, 189, 0, 220, 126, 141, 100, 138, - 86, 96, 0, 125, 167, 196, 200, 0, 0, 0, - 108, 0, 198, 177, 236, 0, 179, 197, 145, 226, - 190, 235, 245, 246, 223, 243, 250, 213, 89, 222, - 234, 105, 208, 91, 232, 219, 156, 135, 136, 90, - 0, 194, 113, 121, 110, 169, 229, 230, 109, 253, - 97, 242, 93, 98, 241, 163, 225, 233, 157, 150, - 92, 231, 155, 149, 140, 117, 128, 187, 147, 188, - 129, 160, 159, 161, 0, 0, 0, 217, 239, 254, - 102, 0, 224, 248, 249, 0, 0, 103, 122, 116, - 186, 120, 162, 99, 131, 214, 139, 146, 193, 252, - 176, 199, 106, 238, 215, 370, 381, 376, 377, 374, - 375, 373, 372, 371, 384, 362, 363, 364, 365, 367, - 0, 378, 379, 366, 85, 94, 143, 251, 191, 119, - 240, 0, 0, 112, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 87, 88, 95, 101, - 107, 111, 115, 118, 124, 127, 130, 132, 133, 134, - 137, 148, 151, 152, 153, 154, 164, 165, 166, 168, - 171, 172, 173, 174, 175, 178, 180, 181, 182, 183, - 184, 185, 192, 195, 201, 202, 203, 204, 205, 206, - 207, 209, 210, 211, 212, 218, 221, 227, 228, 237, - 244, 247, 170, 0, 0, 0, 0, 0, 0, 0, - 0, 114, 0, 0, 0, 0, 0, 142, 0, 0, - 144, 0, 0, 216, 158, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 82, 83, 84, 0, 0, 0, 0, 0, - 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 626, 625, 635, 636, 628, 629, 630, 631, 632, 633, - 634, 627, 0, 0, 637, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, - 0, 0, 272, 0, 0, 0, 0, 189, 0, 220, - 126, 141, 100, 138, 86, 96, 0, 125, 167, 196, - 200, 0, 0, 0, 108, 0, 198, 177, 236, 0, - 179, 197, 145, 226, 190, 235, 245, 246, 223, 243, - 250, 213, 89, 222, 234, 105, 208, 91, 232, 219, - 156, 135, 136, 90, 0, 194, 113, 121, 110, 169, - 229, 230, 109, 253, 97, 242, 93, 98, 241, 163, - 225, 233, 157, 150, 92, 231, 155, 149, 140, 117, - 128, 187, 147, 188, 129, 160, 159, 161, 0, 0, - 0, 217, 239, 254, 102, 0, 224, 248, 249, 0, - 0, 103, 122, 116, 186, 120, 162, 99, 131, 214, - 139, 146, 193, 252, 176, 199, 106, 238, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 85, 94, - 143, 251, 191, 119, 240, 0, 0, 112, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 88, 95, 101, 107, 111, 115, 118, 124, 127, - 130, 132, 133, 134, 137, 148, 151, 152, 153, 154, - 164, 165, 166, 168, 171, 172, 173, 174, 175, 178, - 180, 181, 182, 183, 184, 185, 192, 195, 201, 202, - 203, 204, 205, 206, 207, 209, 210, 211, 212, 218, - 221, 227, 228, 237, 244, 247, 170, 0, 0, 0, - 614, 0, 0, 0, 0, 114, 0, 0, 0, 0, - 0, 142, 0, 0, 144, 0, 0, 216, 158, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 82, 83, 84, 0, - 616, 0, 0, 0, 0, 0, 0, 104, 0, 0, - 0, 0, 0, 611, 610, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 123, 0, 0, 0, 272, 0, 0, 0, - 0, 189, 0, 220, 126, 141, 100, 138, 86, 96, - 0, 125, 167, 196, 200, 0, 0, 0, 108, 0, - 198, 177, 236, 0, 179, 197, 145, 226, 190, 235, - 245, 246, 223, 243, 250, 213, 89, 222, 234, 105, - 208, 91, 232, 219, 156, 135, 136, 90, 0, 194, - 113, 121, 110, 169, 229, 230, 109, 253, 97, 242, - 93, 98, 241, 163, 225, 233, 157, 150, 92, 231, - 155, 149, 140, 117, 128, 187, 147, 188, 129, 160, - 159, 161, 0, 0, 0, 217, 239, 254, 102, 0, - 224, 248, 249, 0, 0, 103, 122, 116, 186, 120, - 162, 99, 131, 214, 139, 146, 193, 252, 176, 199, - 106, 238, 215, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 85, 94, 143, 251, 191, 119, 240, 0, - 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 88, 95, 101, 107, 111, - 115, 118, 124, 127, 130, 132, 133, 134, 137, 148, - 151, 152, 153, 154, 164, 165, 166, 168, 171, 172, - 173, 174, 175, 178, 180, 181, 182, 183, 184, 185, - 192, 195, 201, 202, 203, 204, 205, 206, 207, 209, - 210, 211, 212, 218, 221, 227, 228, 237, 244, 247, - 170, 0, 0, 0, 0, 0, 0, 0, 0, 114, - 0, 0, 0, 0, 0, 142, 0, 0, 144, 0, - 0, 216, 158, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82, 83, 84, 0, 0, 0, 0, 0, 0, 0, - 0, 104, 0, 0, 0, 0, 0, 74, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 123, 76, 77, 0, - 73, 0, 0, 0, 78, 189, 0, 220, 126, 141, - 100, 138, 86, 96, 0, 125, 167, 196, 200, 0, - 0, 0, 108, 0, 198, 177, 236, 0, 179, 197, - 145, 226, 190, 235, 245, 246, 223, 243, 250, 213, - 89, 222, 234, 105, 208, 91, 232, 219, 156, 135, - 136, 90, 0, 194, 113, 121, 110, 169, 229, 230, - 109, 253, 97, 242, 93, 98, 241, 163, 225, 233, - 157, 150, 92, 231, 155, 149, 140, 117, 128, 187, - 147, 188, 129, 160, 159, 161, 0, 0, 0, 217, - 239, 254, 102, 0, 224, 248, 249, 0, 0, 103, - 122, 116, 186, 120, 162, 99, 131, 214, 139, 146, - 193, 252, 176, 199, 106, 238, 215, 0, 75, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 85, 94, 143, 251, - 191, 119, 240, 0, 0, 112, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 88, - 95, 101, 107, 111, 115, 118, 124, 127, 130, 132, - 133, 134, 137, 148, 151, 152, 153, 154, 164, 165, - 166, 168, 171, 172, 173, 174, 175, 178, 180, 181, - 182, 183, 184, 185, 192, 195, 201, 202, 203, 204, - 205, 206, 207, 209, 210, 211, 212, 218, 221, 227, - 228, 237, 244, 247, 170, 0, 0, 0, 955, 0, - 0, 0, 0, 114, 0, 0, 0, 0, 0, 142, - 0, 0, 144, 0, 0, 216, 158, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 83, 84, 0, 957, 0, - 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 123, 0, 0, 0, 272, 0, 0, 0, 0, 189, - 0, 220, 126, 141, 100, 138, 86, 96, 0, 125, - 167, 196, 200, 0, 0, 0, 108, 0, 198, 177, - 236, 0, 179, 197, 145, 226, 190, 235, 245, 246, - 223, 243, 250, 213, 89, 222, 234, 105, 208, 91, - 232, 219, 156, 135, 136, 90, 0, 194, 113, 121, - 110, 169, 229, 230, 109, 253, 97, 242, 93, 98, - 241, 163, 225, 233, 157, 150, 92, 231, 155, 149, - 140, 117, 128, 187, 147, 188, 129, 160, 159, 161, - 0, 0, 0, 217, 239, 254, 102, 0, 224, 248, - 249, 0, 0, 103, 122, 116, 186, 120, 162, 99, - 131, 214, 139, 146, 193, 252, 176, 199, 106, 238, - 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 85, 94, 143, 251, 191, 119, 240, 0, 0, 112, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 88, 95, 101, 107, 111, 115, 118, - 124, 127, 130, 132, 133, 134, 137, 148, 151, 152, - 153, 154, 164, 165, 166, 168, 171, 172, 173, 174, - 175, 178, 180, 181, 182, 183, 184, 185, 192, 195, - 201, 202, 203, 204, 205, 206, 207, 209, 210, 211, - 212, 218, 221, 227, 228, 237, 244, 247, 24, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 170, 0, 0, 0, 0, 0, 0, 0, 0, 114, - 0, 0, 0, 0, 0, 142, 0, 0, 144, 0, - 0, 216, 158, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, - 82, 83, 84, 0, 0, 0, 0, 0, 0, 0, - 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, - 272, 0, 0, 0, 0, 189, 0, 220, 126, 141, - 100, 138, 86, 96, 0, 125, 167, 196, 200, 0, - 0, 0, 108, 0, 198, 177, 236, 0, 179, 197, - 145, 226, 190, 235, 245, 246, 223, 243, 250, 213, - 89, 222, 234, 105, 208, 91, 232, 219, 156, 135, - 136, 90, 0, 194, 113, 121, 110, 169, 229, 230, - 109, 253, 97, 242, 93, 98, 241, 163, 225, 233, - 157, 150, 92, 231, 155, 149, 140, 117, 128, 187, - 147, 188, 129, 160, 159, 161, 0, 0, 0, 217, - 239, 254, 102, 0, 224, 248, 249, 0, 0, 103, - 122, 116, 186, 120, 162, 99, 131, 214, 139, 146, - 193, 252, 176, 199, 106, 238, 215, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 85, 94, 143, 251, - 191, 119, 240, 0, 0, 112, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 88, - 95, 101, 107, 111, 115, 118, 124, 127, 130, 132, - 133, 134, 137, 148, 151, 152, 153, 154, 164, 165, - 166, 168, 171, 172, 173, 174, 175, 178, 180, 181, - 182, 183, 184, 185, 192, 195, 201, 202, 203, 204, - 205, 206, 207, 209, 210, 211, 212, 218, 221, 227, - 228, 237, 244, 247, 170, 0, 0, 0, 955, 0, - 0, 0, 0, 114, 0, 0, 0, 0, 0, 142, - 0, 0, 144, 0, 0, 216, 158, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 83, 84, 0, 957, 0, - 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 123, 0, 0, 0, 272, 0, 0, 0, 0, 189, - 0, 220, 126, 141, 100, 138, 86, 96, 0, 125, - 167, 196, 200, 0, 0, 0, 108, 0, 198, 177, - 236, 0, 953, 197, 145, 226, 190, 235, 245, 246, - 223, 243, 250, 213, 89, 222, 234, 105, 208, 91, - 232, 219, 156, 135, 136, 90, 0, 194, 113, 121, - 110, 169, 229, 230, 109, 253, 97, 242, 93, 98, - 241, 163, 225, 233, 157, 150, 92, 231, 155, 149, - 140, 117, 128, 187, 147, 188, 129, 160, 159, 161, - 0, 0, 0, 217, 239, 254, 102, 0, 224, 248, - 249, 0, 0, 103, 122, 116, 186, 120, 162, 99, - 131, 214, 139, 146, 193, 252, 176, 199, 106, 238, - 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 85, 94, 143, 251, 191, 119, 240, 0, 0, 112, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 88, 95, 101, 107, 111, 115, 118, - 124, 127, 130, 132, 133, 134, 137, 148, 151, 152, - 153, 154, 164, 165, 166, 168, 171, 172, 173, 174, - 175, 178, 180, 181, 182, 183, 184, 185, 192, 195, - 201, 202, 203, 204, 205, 206, 207, 209, 210, 211, - 212, 218, 221, 227, 228, 237, 244, 247, 170, 0, - 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, - 0, 0, 0, 142, 0, 0, 144, 0, 0, 216, - 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 83, - 84, 0, 0, 848, 0, 0, 849, 0, 0, 104, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 123, 0, 0, 0, 272, 0, - 0, 0, 0, 189, 0, 220, 126, 141, 100, 138, - 86, 96, 0, 125, 167, 196, 200, 0, 0, 0, - 108, 0, 198, 177, 236, 0, 179, 197, 145, 226, - 190, 235, 245, 246, 223, 243, 250, 213, 89, 222, - 234, 105, 208, 91, 232, 219, 156, 135, 136, 90, - 0, 194, 113, 121, 110, 169, 229, 230, 109, 253, - 97, 242, 93, 98, 241, 163, 225, 233, 157, 150, - 92, 231, 155, 149, 140, 117, 128, 187, 147, 188, - 129, 160, 159, 161, 0, 0, 0, 217, 239, 254, - 102, 0, 224, 248, 249, 0, 0, 103, 122, 116, - 186, 120, 162, 99, 131, 214, 139, 146, 193, 252, - 176, 199, 106, 238, 215, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 85, 94, 143, 251, 191, 119, - 240, 0, 0, 112, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 87, 88, 95, 101, - 107, 111, 115, 118, 124, 127, 130, 132, 133, 134, - 137, 148, 151, 152, 153, 154, 164, 165, 166, 168, - 171, 172, 173, 174, 175, 178, 180, 181, 182, 183, - 184, 185, 192, 195, 201, 202, 203, 204, 205, 206, - 207, 209, 210, 211, 212, 218, 221, 227, 228, 237, - 244, 247, 170, 0, 0, 0, 0, 0, 0, 0, - 0, 114, 0, 729, 0, 0, 0, 142, 0, 0, - 144, 0, 0, 216, 158, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 82, 83, 84, 0, 728, 0, 0, 0, - 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, - 0, 0, 272, 0, 0, 0, 0, 189, 0, 220, - 126, 141, 100, 138, 86, 96, 0, 125, 167, 196, - 200, 0, 0, 0, 108, 0, 198, 177, 236, 0, - 179, 197, 145, 226, 190, 235, 245, 246, 223, 243, - 250, 213, 89, 222, 234, 105, 208, 91, 232, 219, - 156, 135, 136, 90, 0, 194, 113, 121, 110, 169, - 229, 230, 109, 253, 97, 242, 93, 98, 241, 163, - 225, 233, 157, 150, 92, 231, 155, 149, 140, 117, - 128, 187, 147, 188, 129, 160, 159, 161, 0, 0, - 0, 217, 239, 254, 102, 0, 224, 248, 249, 0, - 0, 103, 122, 116, 186, 120, 162, 99, 131, 214, - 139, 146, 193, 252, 176, 199, 106, 238, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 85, 94, - 143, 251, 191, 119, 240, 0, 0, 112, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 88, 95, 101, 107, 111, 115, 118, 124, 127, - 130, 132, 133, 134, 137, 148, 151, 152, 153, 154, - 164, 165, 166, 168, 171, 172, 173, 174, 175, 178, - 180, 181, 182, 183, 184, 185, 192, 195, 201, 202, - 203, 204, 205, 206, 207, 209, 210, 211, 212, 218, - 221, 227, 228, 237, 244, 247, 170, 0, 0, 0, - 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, - 0, 142, 0, 0, 144, 0, 0, 216, 158, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 591, 82, 83, 84, 0, - 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 123, 0, 0, 0, 272, 0, 0, 0, - 0, 189, 0, 220, 126, 141, 100, 138, 86, 96, - 0, 125, 167, 196, 200, 0, 0, 0, 108, 0, - 198, 177, 236, 0, 179, 197, 145, 226, 190, 235, - 245, 246, 223, 243, 250, 213, 89, 222, 234, 105, - 208, 91, 232, 219, 156, 135, 136, 90, 0, 194, - 113, 121, 110, 169, 229, 230, 109, 253, 97, 242, - 93, 98, 241, 163, 225, 233, 157, 150, 92, 231, - 155, 149, 140, 117, 128, 187, 147, 188, 129, 160, - 159, 161, 0, 0, 0, 217, 239, 254, 102, 0, - 224, 248, 249, 0, 0, 103, 122, 116, 186, 120, - 162, 99, 131, 214, 139, 146, 193, 252, 176, 199, - 106, 238, 215, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 85, 94, 143, 251, 191, 119, 240, 0, - 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 88, 95, 101, 107, 111, - 115, 118, 124, 127, 130, 132, 133, 134, 137, 148, - 151, 152, 153, 154, 164, 165, 166, 168, 171, 172, - 173, 174, 175, 178, 180, 181, 182, 183, 184, 185, - 192, 195, 201, 202, 203, 204, 205, 206, 207, 209, - 210, 211, 212, 218, 221, 227, 228, 237, 244, 247, - 170, 0, 0, 0, 0, 0, 0, 0, 0, 114, - 0, 0, 0, 0, 0, 142, 0, 0, 144, 0, - 0, 216, 158, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, - 82, 83, 84, 0, 0, 0, 0, 0, 0, 0, - 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, - 272, 0, 0, 0, 0, 189, 0, 220, 126, 141, - 100, 138, 86, 96, 0, 125, 167, 196, 200, 0, - 0, 0, 108, 0, 198, 177, 236, 0, 179, 197, - 145, 226, 190, 235, 245, 246, 223, 243, 250, 213, - 89, 222, 234, 105, 208, 91, 232, 219, 156, 135, - 136, 90, 0, 194, 113, 121, 110, 169, 229, 230, - 109, 253, 97, 242, 93, 98, 241, 163, 225, 233, - 157, 150, 92, 231, 155, 149, 140, 117, 128, 187, - 147, 188, 129, 160, 159, 161, 0, 0, 0, 217, - 239, 254, 102, 0, 224, 248, 249, 0, 0, 103, - 122, 116, 186, 120, 162, 99, 131, 214, 139, 146, - 193, 252, 176, 199, 106, 238, 215, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 85, 94, 143, 251, - 191, 119, 240, 0, 0, 112, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 88, - 95, 101, 107, 111, 115, 118, 124, 127, 130, 132, - 133, 134, 137, 148, 151, 152, 153, 154, 164, 165, - 166, 168, 171, 172, 173, 174, 175, 178, 180, 181, - 182, 183, 184, 185, 192, 195, 201, 202, 203, 204, - 205, 206, 207, 209, 210, 211, 212, 218, 221, 227, - 228, 237, 244, 247, 170, 0, 0, 0, 0, 0, - 0, 0, 0, 114, 0, 0, 0, 0, 0, 142, - 0, 0, 144, 0, 0, 216, 158, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 83, 84, 0, 957, 0, - 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 123, 0, 0, 0, 272, 0, 0, 0, 0, 189, - 0, 220, 126, 141, 100, 138, 86, 96, 0, 125, - 167, 196, 200, 0, 0, 0, 108, 0, 198, 177, - 236, 0, 179, 197, 145, 226, 190, 235, 245, 246, - 223, 243, 250, 213, 89, 222, 234, 105, 208, 91, - 232, 219, 156, 135, 136, 90, 0, 194, 113, 121, - 110, 169, 229, 230, 109, 253, 97, 242, 93, 98, - 241, 163, 225, 233, 157, 150, 92, 231, 155, 149, - 140, 117, 128, 187, 147, 188, 129, 160, 159, 161, - 0, 0, 0, 217, 239, 254, 102, 0, 224, 248, - 249, 0, 0, 103, 122, 116, 186, 120, 162, 99, - 131, 214, 139, 146, 193, 252, 176, 199, 106, 238, - 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 85, 94, 143, 251, 191, 119, 240, 0, 0, 112, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 88, 95, 101, 107, 111, 115, 118, - 124, 127, 130, 132, 133, 134, 137, 148, 151, 152, - 153, 154, 164, 165, 166, 168, 171, 172, 173, 174, - 175, 178, 180, 181, 182, 183, 184, 185, 192, 195, - 201, 202, 203, 204, 205, 206, 207, 209, 210, 211, - 212, 218, 221, 227, 228, 237, 244, 247, 170, 0, - 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, - 0, 0, 0, 142, 0, 0, 144, 0, 0, 216, - 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 83, - 84, 0, 616, 0, 0, 0, 0, 0, 0, 104, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 123, 0, 0, 0, 272, 0, - 0, 0, 0, 189, 0, 220, 126, 141, 100, 138, - 86, 96, 0, 125, 167, 196, 200, 0, 0, 0, - 108, 0, 198, 177, 236, 0, 179, 197, 145, 226, - 190, 235, 245, 246, 223, 243, 250, 213, 89, 222, - 234, 105, 208, 91, 232, 219, 156, 135, 136, 90, - 0, 194, 113, 121, 110, 169, 229, 230, 109, 253, - 97, 242, 93, 98, 241, 163, 225, 233, 157, 150, - 92, 231, 155, 149, 140, 117, 128, 187, 147, 188, - 129, 160, 159, 161, 0, 0, 0, 217, 239, 254, - 102, 0, 224, 248, 249, 0, 0, 103, 122, 116, - 186, 120, 162, 99, 131, 214, 139, 146, 193, 252, - 176, 199, 106, 238, 215, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 85, 94, 143, 251, 191, 119, - 240, 0, 0, 112, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 87, 88, 95, 101, - 107, 111, 115, 118, 124, 127, 130, 132, 133, 134, - 137, 148, 151, 152, 153, 154, 164, 165, 166, 168, - 171, 172, 173, 174, 175, 178, 180, 181, 182, 183, - 184, 185, 192, 195, 201, 202, 203, 204, 205, 206, - 207, 209, 210, 211, 212, 218, 221, 227, 228, 237, - 244, 247, 170, 0, 0, 0, 0, 0, 0, 0, - 699, 114, 0, 0, 0, 0, 0, 142, 0, 0, - 144, 0, 0, 216, 158, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 82, 83, 84, 0, 0, 0, 0, 0, - 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, - 0, 0, 272, 0, 0, 0, 0, 189, 0, 220, - 126, 141, 100, 138, 86, 96, 0, 125, 167, 196, - 200, 0, 0, 0, 108, 0, 198, 177, 236, 0, - 179, 197, 145, 226, 190, 235, 245, 246, 223, 243, - 250, 213, 89, 222, 234, 105, 208, 91, 232, 219, - 156, 135, 136, 90, 0, 194, 113, 121, 110, 169, - 229, 230, 109, 253, 97, 242, 93, 98, 241, 163, - 225, 233, 157, 150, 92, 231, 155, 149, 140, 117, - 128, 187, 147, 188, 129, 160, 159, 161, 0, 0, - 0, 217, 239, 254, 102, 0, 224, 248, 249, 0, - 0, 103, 122, 116, 186, 120, 162, 99, 131, 214, - 139, 146, 193, 252, 176, 199, 106, 238, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 85, 94, - 143, 251, 191, 119, 240, 0, 0, 112, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 88, 95, 101, 107, 111, 115, 118, 124, 127, - 130, 132, 133, 134, 137, 148, 151, 152, 153, 154, - 164, 165, 166, 168, 171, 172, 173, 174, 175, 178, - 180, 181, 182, 183, 184, 185, 192, 195, 201, 202, - 203, 204, 205, 206, 207, 209, 210, 211, 212, 218, - 221, 227, 228, 237, 244, 247, 387, 0, 0, 0, - 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, - 0, 0, 114, 0, 0, 0, 0, 0, 142, 0, - 0, 144, 0, 0, 216, 158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 82, 83, 84, 0, 0, 0, 0, - 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, - 0, 0, 0, 272, 0, 0, 0, 0, 189, 0, - 220, 126, 141, 100, 138, 86, 96, 0, 125, 167, - 196, 200, 0, 0, 0, 108, 0, 198, 177, 236, - 0, 179, 197, 145, 226, 190, 235, 245, 246, 223, - 243, 250, 213, 89, 222, 234, 105, 208, 91, 232, - 219, 156, 135, 136, 90, 0, 194, 113, 121, 110, - 169, 229, 230, 109, 253, 97, 242, 93, 98, 241, - 163, 225, 233, 157, 150, 92, 231, 155, 149, 140, - 117, 128, 187, 147, 188, 129, 160, 159, 161, 0, - 0, 0, 217, 239, 254, 102, 0, 224, 248, 249, - 0, 0, 103, 122, 116, 186, 120, 162, 99, 131, - 214, 139, 146, 193, 252, 176, 199, 106, 238, 215, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, - 94, 143, 251, 191, 119, 240, 0, 0, 112, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 87, 88, 95, 101, 107, 111, 115, 118, 124, - 127, 130, 132, 133, 134, 137, 148, 151, 152, 153, - 154, 164, 165, 166, 168, 171, 172, 173, 174, 175, - 178, 180, 181, 182, 183, 184, 185, 192, 195, 201, - 202, 203, 204, 205, 206, 207, 209, 210, 211, 212, - 218, 221, 227, 228, 237, 244, 247, 170, 0, 0, - 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, - 0, 0, 142, 0, 0, 144, 0, 0, 216, 158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 82, 83, 84, - 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 123, 0, 267, 0, 272, 0, 0, - 0, 0, 189, 0, 220, 126, 141, 100, 138, 86, - 96, 0, 125, 167, 196, 200, 0, 0, 0, 108, - 0, 198, 177, 236, 0, 179, 197, 145, 226, 190, - 235, 245, 246, 223, 243, 250, 213, 89, 222, 234, - 105, 208, 91, 232, 219, 156, 135, 136, 90, 0, - 194, 113, 121, 110, 169, 229, 230, 109, 253, 97, - 242, 93, 98, 241, 163, 225, 233, 157, 150, 92, - 231, 155, 149, 140, 117, 128, 187, 147, 188, 129, - 160, 159, 161, 0, 0, 0, 217, 239, 254, 102, - 0, 224, 248, 249, 0, 0, 103, 122, 116, 186, - 120, 162, 99, 131, 214, 139, 146, 193, 252, 176, - 199, 106, 238, 215, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 85, 94, 143, 251, 191, 119, 240, - 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 87, 88, 95, 101, 107, - 111, 115, 118, 124, 127, 130, 132, 133, 134, 137, - 148, 151, 152, 153, 154, 164, 165, 166, 168, 171, - 172, 173, 174, 175, 178, 180, 181, 182, 183, 184, - 185, 192, 195, 201, 202, 203, 204, 205, 206, 207, - 209, 210, 211, 212, 218, 221, 227, 228, 237, 244, - 247, 170, 0, 0, 0, 0, 0, 0, 0, 0, - 114, 0, 0, 0, 0, 0, 142, 0, 0, 144, - 0, 0, 216, 158, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 82, 83, 84, 0, 0, 0, 0, 0, 0, - 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, - 0, 272, 0, 0, 0, 0, 189, 0, 220, 126, - 141, 100, 138, 86, 96, 0, 125, 167, 196, 200, - 0, 0, 0, 108, 0, 198, 177, 236, 0, 179, - 197, 145, 226, 190, 235, 245, 246, 223, 243, 250, - 213, 89, 222, 234, 105, 208, 91, 232, 219, 156, - 135, 136, 90, 0, 194, 113, 121, 110, 169, 229, - 230, 109, 253, 97, 242, 93, 98, 241, 163, 225, - 233, 157, 150, 92, 231, 155, 149, 140, 117, 128, - 187, 147, 188, 129, 160, 159, 161, 0, 0, 0, - 217, 239, 254, 102, 0, 224, 248, 249, 0, 0, - 103, 122, 116, 186, 120, 162, 99, 131, 214, 139, - 146, 193, 252, 176, 199, 106, 238, 215, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 85, 94, 143, - 251, 191, 119, 240, 0, 0, 112, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, - 88, 95, 101, 107, 111, 115, 118, 124, 127, 130, - 132, 133, 134, 137, 148, 151, 152, 153, 154, 164, - 165, 166, 168, 171, 172, 173, 174, 175, 178, 180, - 181, 182, 183, 184, 185, 192, 195, 201, 202, 203, - 204, 205, 206, 207, 209, 210, 211, 212, 218, 221, - 227, 228, 237, 244, 247, + 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 923, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 270, 0, 0, 0, 0, 0, 0, 0, 270, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 923, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 512, 500, 0, + 457, 515, 430, 447, 523, 448, 451, 488, 415, 470, + 171, 445, 957, 434, 410, 441, 411, 432, 459, 115, + 463, 429, 502, 473, 514, 143, 435, 521, 145, 479, + 0, 217, 159, 270, 0, 461, 504, 468, 497, 456, + 489, 420, 478, 516, 446, 486, 517, 0, 0, 0, + 83, 84, 85, 0, 982, 983, 0, 0, 0, 0, + 0, 105, 0, 483, 511, 443, 485, 487, 409, 480, + 0, 413, 416, 522, 507, 438, 439, 1169, 0, 0, + 0, 0, 0, 0, 460, 469, 494, 454, 0, 0, + 0, 0, 0, 0, 0, 0, 436, 923, 477, 0, + 0, 0, 417, 414, 0, 0, 458, 0, 0, 0, + 419, 270, 437, 495, 0, 407, 124, 499, 506, 455, + 273, 510, 453, 452, 513, 190, 0, 221, 127, 142, + 101, 139, 87, 97, 0, 126, 168, 197, 201, 503, + 433, 442, 109, 440, 199, 178, 237, 476, 180, 198, + 146, 227, 191, 236, 246, 247, 224, 244, 251, 214, + 90, 223, 235, 106, 209, 92, 233, 220, 157, 136, + 137, 91, 0, 195, 114, 122, 111, 170, 230, 231, + 110, 254, 98, 243, 94, 99, 242, 164, 226, 234, + 158, 151, 93, 232, 156, 150, 141, 118, 129, 188, + 148, 189, 130, 161, 160, 162, 0, 412, 0, 218, + 240, 255, 103, 428, 225, 249, 250, 0, 0, 104, + 123, 117, 187, 121, 163, 100, 132, 215, 140, 147, + 194, 253, 177, 200, 107, 239, 216, 424, 427, 422, + 423, 471, 472, 518, 519, 520, 496, 418, 0, 425, + 426, 0, 501, 508, 509, 475, 86, 95, 144, 252, + 192, 120, 241, 408, 421, 113, 431, 0, 0, 444, + 449, 450, 462, 464, 465, 466, 467, 474, 481, 482, + 484, 490, 491, 492, 493, 498, 505, 524, 88, 89, + 96, 102, 108, 112, 116, 119, 125, 128, 131, 133, + 134, 135, 138, 149, 152, 153, 154, 155, 165, 166, + 167, 169, 172, 173, 174, 175, 176, 179, 181, 182, + 183, 184, 185, 186, 193, 196, 202, 203, 204, 205, + 206, 207, 208, 210, 211, 212, 213, 219, 222, 228, + 229, 238, 245, 248, 512, 500, 0, 457, 515, 430, + 447, 523, 448, 451, 488, 415, 470, 171, 445, 0, + 434, 410, 441, 411, 432, 459, 115, 463, 429, 502, + 473, 514, 143, 435, 521, 145, 479, 0, 217, 159, + 0, 0, 461, 504, 468, 497, 456, 489, 420, 478, + 516, 446, 486, 517, 0, 0, 0, 83, 84, 85, + 0, 982, 983, 0, 0, 0, 0, 0, 105, 0, + 483, 511, 443, 485, 487, 409, 480, 0, 413, 416, + 522, 507, 438, 439, 0, 0, 0, 0, 0, 0, + 0, 460, 469, 494, 454, 0, 0, 0, 0, 0, + 0, 0, 0, 436, 0, 477, 0, 0, 0, 417, + 414, 0, 0, 458, 0, 0, 0, 419, 0, 437, + 495, 0, 407, 124, 499, 506, 455, 273, 510, 453, + 452, 513, 190, 0, 221, 127, 142, 101, 139, 87, + 97, 0, 126, 168, 197, 201, 503, 433, 442, 109, + 440, 199, 178, 237, 476, 180, 198, 146, 227, 191, + 236, 246, 247, 224, 244, 251, 214, 90, 223, 235, + 106, 209, 92, 233, 220, 157, 136, 137, 91, 0, + 195, 114, 122, 111, 170, 230, 231, 110, 254, 98, + 243, 94, 99, 242, 164, 226, 234, 158, 151, 93, + 232, 156, 150, 141, 118, 129, 188, 148, 189, 130, + 161, 160, 162, 0, 412, 0, 218, 240, 255, 103, + 428, 225, 249, 250, 0, 0, 104, 123, 117, 187, + 121, 163, 100, 132, 215, 140, 147, 194, 253, 177, + 200, 107, 239, 216, 424, 427, 422, 423, 471, 472, + 518, 519, 520, 496, 418, 0, 425, 426, 0, 501, + 508, 509, 475, 86, 95, 144, 252, 192, 120, 241, + 408, 421, 113, 431, 0, 0, 444, 449, 450, 462, + 464, 465, 466, 467, 474, 481, 482, 484, 490, 491, + 492, 493, 498, 505, 524, 88, 89, 96, 102, 108, + 112, 116, 119, 125, 128, 131, 133, 134, 135, 138, + 149, 152, 153, 154, 155, 165, 166, 167, 169, 172, + 173, 174, 175, 176, 179, 181, 182, 183, 184, 185, + 186, 193, 196, 202, 203, 204, 205, 206, 207, 208, + 210, 211, 212, 213, 219, 222, 228, 229, 238, 245, + 248, 512, 500, 0, 457, 515, 430, 447, 523, 448, + 451, 488, 415, 470, 171, 445, 0, 434, 410, 441, + 411, 432, 459, 115, 463, 429, 502, 473, 514, 143, + 435, 521, 145, 479, 0, 217, 159, 0, 0, 461, + 504, 468, 497, 456, 489, 420, 478, 516, 446, 486, + 517, 55, 0, 0, 83, 84, 85, 0, 0, 0, + 0, 0, 0, 0, 0, 105, 0, 483, 511, 443, + 485, 487, 409, 480, 0, 413, 416, 522, 507, 438, + 439, 0, 0, 0, 0, 0, 0, 0, 460, 469, + 494, 454, 0, 0, 0, 0, 0, 0, 0, 0, + 436, 0, 477, 0, 0, 0, 417, 414, 0, 0, + 458, 0, 0, 0, 419, 0, 437, 495, 0, 407, + 124, 499, 506, 455, 273, 510, 453, 452, 513, 190, + 0, 221, 127, 142, 101, 139, 87, 97, 0, 126, + 168, 197, 201, 503, 433, 442, 109, 440, 199, 178, + 237, 476, 180, 198, 146, 227, 191, 236, 246, 247, + 224, 244, 251, 214, 90, 223, 235, 106, 209, 92, + 233, 220, 157, 136, 137, 91, 0, 195, 114, 122, + 111, 170, 230, 231, 110, 254, 98, 243, 94, 99, + 242, 164, 226, 234, 158, 151, 93, 232, 156, 150, + 141, 118, 129, 188, 148, 189, 130, 161, 160, 162, + 0, 412, 0, 218, 240, 255, 103, 428, 225, 249, + 250, 0, 0, 104, 123, 117, 187, 121, 163, 100, + 132, 215, 140, 147, 194, 253, 177, 200, 107, 239, + 216, 424, 427, 422, 423, 471, 472, 518, 519, 520, + 496, 418, 0, 425, 426, 0, 501, 508, 509, 475, + 86, 95, 144, 252, 192, 120, 241, 408, 421, 113, + 431, 0, 0, 444, 449, 450, 462, 464, 465, 466, + 467, 474, 481, 482, 484, 490, 491, 492, 493, 498, + 505, 524, 88, 89, 96, 102, 108, 112, 116, 119, + 125, 128, 131, 133, 134, 135, 138, 149, 152, 153, + 154, 155, 165, 166, 167, 169, 172, 173, 174, 175, + 176, 179, 181, 182, 183, 184, 185, 186, 193, 196, + 202, 203, 204, 205, 206, 207, 208, 210, 211, 212, + 213, 219, 222, 228, 229, 238, 245, 248, 512, 500, + 0, 457, 515, 430, 447, 523, 448, 451, 488, 415, + 470, 171, 445, 0, 434, 410, 441, 411, 432, 459, + 115, 463, 429, 502, 473, 514, 143, 435, 521, 145, + 479, 0, 217, 159, 0, 0, 461, 504, 468, 497, + 456, 489, 420, 478, 516, 446, 486, 517, 0, 0, + 0, 83, 84, 85, 0, 0, 0, 0, 0, 0, + 0, 0, 105, 0, 483, 511, 443, 485, 487, 409, + 480, 0, 413, 416, 522, 507, 438, 439, 0, 0, + 0, 0, 0, 0, 0, 460, 469, 494, 454, 0, + 0, 0, 0, 0, 0, 1238, 0, 436, 0, 477, + 0, 0, 0, 417, 414, 0, 0, 458, 0, 0, + 0, 419, 0, 437, 495, 0, 407, 124, 499, 506, + 455, 273, 510, 453, 452, 513, 190, 0, 221, 127, + 142, 101, 139, 87, 97, 0, 126, 168, 197, 201, + 503, 433, 442, 109, 440, 199, 178, 237, 476, 180, + 198, 146, 227, 191, 236, 246, 247, 224, 244, 251, + 214, 90, 223, 235, 106, 209, 92, 233, 220, 157, + 136, 137, 91, 0, 195, 114, 122, 111, 170, 230, + 231, 110, 254, 98, 243, 94, 99, 242, 164, 226, + 234, 158, 151, 93, 232, 156, 150, 141, 118, 129, + 188, 148, 189, 130, 161, 160, 162, 0, 412, 0, + 218, 240, 255, 103, 428, 225, 249, 250, 0, 0, + 104, 123, 117, 187, 121, 163, 100, 132, 215, 140, + 147, 194, 253, 177, 200, 107, 239, 216, 424, 427, + 422, 423, 471, 472, 518, 519, 520, 496, 418, 0, + 425, 426, 0, 501, 508, 509, 475, 86, 95, 144, + 252, 192, 120, 241, 408, 421, 113, 431, 0, 0, + 444, 449, 450, 462, 464, 465, 466, 467, 474, 481, + 482, 484, 490, 491, 492, 493, 498, 505, 524, 88, + 89, 96, 102, 108, 112, 116, 119, 125, 128, 131, + 133, 134, 135, 138, 149, 152, 153, 154, 155, 165, + 166, 167, 169, 172, 173, 174, 175, 176, 179, 181, + 182, 183, 184, 185, 186, 193, 196, 202, 203, 204, + 205, 206, 207, 208, 210, 211, 212, 213, 219, 222, + 228, 229, 238, 245, 248, 512, 500, 0, 457, 515, + 430, 447, 523, 448, 451, 488, 415, 470, 171, 445, + 0, 434, 410, 441, 411, 432, 459, 115, 463, 429, + 502, 473, 514, 143, 435, 521, 145, 479, 0, 217, + 159, 0, 0, 461, 504, 468, 497, 456, 489, 420, + 478, 516, 446, 486, 517, 0, 0, 0, 83, 84, + 85, 0, 0, 0, 0, 0, 0, 0, 0, 105, + 0, 483, 511, 443, 485, 487, 409, 480, 0, 413, + 416, 522, 507, 438, 439, 0, 0, 0, 0, 0, + 0, 0, 460, 469, 494, 454, 0, 0, 0, 0, + 0, 0, 966, 0, 436, 0, 477, 0, 0, 0, + 417, 414, 0, 0, 458, 0, 0, 0, 419, 0, + 437, 495, 0, 407, 124, 499, 506, 455, 273, 510, + 453, 452, 513, 190, 0, 221, 127, 142, 101, 139, + 87, 97, 0, 126, 168, 197, 201, 503, 433, 442, + 109, 440, 199, 178, 237, 476, 180, 198, 146, 227, + 191, 236, 246, 247, 224, 244, 251, 214, 90, 223, + 235, 106, 209, 92, 233, 220, 157, 136, 137, 91, + 0, 195, 114, 122, 111, 170, 230, 231, 110, 254, + 98, 243, 94, 99, 242, 164, 226, 234, 158, 151, + 93, 232, 156, 150, 141, 118, 129, 188, 148, 189, + 130, 161, 160, 162, 0, 412, 0, 218, 240, 255, + 103, 428, 225, 249, 250, 0, 0, 104, 123, 117, + 187, 121, 163, 100, 132, 215, 140, 147, 194, 253, + 177, 200, 107, 239, 216, 424, 427, 422, 423, 471, + 472, 518, 519, 520, 496, 418, 0, 425, 426, 0, + 501, 508, 509, 475, 86, 95, 144, 252, 192, 120, + 241, 408, 421, 113, 431, 0, 0, 444, 449, 450, + 462, 464, 465, 466, 467, 474, 481, 482, 484, 490, + 491, 492, 493, 498, 505, 524, 88, 89, 96, 102, + 108, 112, 116, 119, 125, 128, 131, 133, 134, 135, + 138, 149, 152, 153, 154, 155, 165, 166, 167, 169, + 172, 173, 174, 175, 176, 179, 181, 182, 183, 184, + 185, 186, 193, 196, 202, 203, 204, 205, 206, 207, + 208, 210, 211, 212, 213, 219, 222, 228, 229, 238, + 245, 248, 512, 500, 0, 457, 515, 430, 447, 523, + 448, 451, 488, 415, 470, 171, 445, 0, 434, 410, + 441, 411, 432, 459, 115, 463, 429, 502, 473, 514, + 143, 435, 521, 145, 479, 0, 217, 159, 0, 0, + 461, 504, 468, 497, 456, 489, 420, 478, 516, 446, + 486, 517, 0, 0, 0, 83, 84, 85, 0, 0, + 0, 0, 0, 0, 0, 0, 105, 0, 483, 511, + 443, 485, 487, 409, 480, 0, 413, 416, 522, 507, + 438, 439, 0, 0, 0, 0, 0, 0, 0, 460, + 469, 494, 454, 0, 0, 0, 0, 0, 0, 862, + 0, 436, 0, 477, 0, 0, 0, 417, 414, 0, + 0, 458, 0, 0, 0, 419, 0, 437, 495, 0, + 407, 124, 499, 506, 455, 273, 510, 453, 452, 513, + 190, 0, 221, 127, 142, 101, 139, 87, 97, 0, + 126, 168, 197, 201, 503, 433, 442, 109, 440, 199, + 178, 237, 476, 180, 198, 146, 227, 191, 236, 246, + 247, 224, 244, 251, 214, 90, 223, 235, 106, 209, + 92, 233, 220, 157, 136, 137, 91, 0, 195, 114, + 122, 111, 170, 230, 231, 110, 254, 98, 243, 94, + 99, 242, 164, 226, 234, 158, 151, 93, 232, 156, + 150, 141, 118, 129, 188, 148, 189, 130, 161, 160, + 162, 0, 412, 0, 218, 240, 255, 103, 428, 225, + 249, 250, 0, 0, 104, 123, 117, 187, 121, 163, + 100, 132, 215, 140, 147, 194, 253, 177, 200, 107, + 239, 216, 424, 427, 422, 423, 471, 472, 518, 519, + 520, 496, 418, 0, 425, 426, 0, 501, 508, 509, + 475, 86, 95, 144, 252, 192, 120, 241, 408, 421, + 113, 431, 0, 0, 444, 449, 450, 462, 464, 465, + 466, 467, 474, 481, 482, 484, 490, 491, 492, 493, + 498, 505, 524, 88, 89, 96, 102, 108, 112, 116, + 119, 125, 128, 131, 133, 134, 135, 138, 149, 152, + 153, 154, 155, 165, 166, 167, 169, 172, 173, 174, + 175, 176, 179, 181, 182, 183, 184, 185, 186, 193, + 196, 202, 203, 204, 205, 206, 207, 208, 210, 211, + 212, 213, 219, 222, 228, 229, 238, 245, 248, 512, + 500, 0, 457, 515, 430, 447, 523, 448, 451, 488, + 415, 470, 171, 445, 0, 434, 410, 441, 411, 432, + 459, 115, 463, 429, 502, 473, 514, 143, 435, 521, + 145, 479, 0, 217, 159, 0, 0, 461, 504, 468, + 497, 456, 489, 420, 478, 516, 446, 486, 517, 0, + 0, 0, 83, 84, 85, 0, 0, 0, 0, 0, + 0, 0, 0, 105, 0, 483, 511, 443, 485, 487, + 409, 480, 0, 413, 416, 522, 507, 438, 439, 0, + 0, 0, 0, 0, 0, 0, 460, 469, 494, 454, + 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, + 477, 0, 0, 0, 417, 414, 0, 0, 458, 0, + 0, 0, 419, 0, 437, 495, 0, 407, 124, 499, + 506, 455, 273, 510, 453, 452, 513, 190, 0, 221, + 127, 142, 101, 139, 87, 97, 0, 126, 168, 197, + 201, 503, 433, 442, 109, 440, 199, 178, 237, 476, + 180, 198, 146, 227, 191, 236, 246, 247, 224, 244, + 251, 214, 90, 223, 235, 106, 209, 92, 233, 220, + 157, 136, 137, 91, 0, 195, 114, 122, 111, 170, + 230, 231, 110, 254, 98, 243, 94, 99, 242, 164, + 226, 234, 158, 151, 93, 232, 156, 150, 141, 118, + 129, 188, 148, 189, 130, 161, 160, 162, 0, 412, + 0, 218, 240, 255, 103, 428, 225, 249, 250, 0, + 0, 104, 123, 117, 187, 121, 163, 100, 132, 215, + 140, 147, 194, 253, 177, 200, 107, 239, 216, 424, + 427, 422, 423, 471, 472, 518, 519, 520, 496, 418, + 0, 425, 426, 0, 501, 508, 509, 475, 86, 95, + 144, 252, 192, 120, 241, 408, 421, 113, 431, 0, + 0, 444, 449, 450, 462, 464, 465, 466, 467, 474, + 481, 482, 484, 490, 491, 492, 493, 498, 505, 524, + 88, 89, 96, 102, 108, 112, 116, 119, 125, 128, + 131, 133, 134, 135, 138, 149, 152, 153, 154, 155, + 165, 166, 167, 169, 172, 173, 174, 175, 176, 179, + 181, 182, 183, 184, 185, 186, 193, 196, 202, 203, + 204, 205, 206, 207, 208, 210, 211, 212, 213, 219, + 222, 228, 229, 238, 245, 248, 512, 500, 0, 457, + 515, 430, 447, 523, 448, 451, 488, 415, 470, 171, + 445, 0, 434, 410, 441, 411, 432, 459, 115, 463, + 429, 502, 473, 514, 143, 435, 521, 145, 479, 0, + 217, 159, 0, 0, 461, 504, 468, 497, 456, 489, + 420, 478, 516, 446, 486, 517, 0, 0, 0, 83, + 84, 85, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 0, 483, 511, 443, 485, 487, 409, 480, 0, + 413, 416, 522, 507, 438, 439, 0, 0, 0, 0, + 0, 0, 0, 460, 469, 494, 454, 0, 0, 0, + 0, 0, 0, 0, 0, 436, 0, 477, 0, 0, + 0, 417, 414, 0, 0, 458, 0, 0, 0, 419, + 0, 437, 495, 0, 407, 124, 499, 506, 455, 273, + 510, 453, 452, 513, 190, 0, 221, 127, 142, 101, + 139, 87, 97, 0, 126, 168, 197, 201, 503, 433, + 442, 109, 440, 199, 178, 237, 476, 180, 198, 146, + 227, 191, 236, 246, 247, 224, 244, 251, 214, 90, + 223, 235, 106, 209, 92, 233, 220, 157, 136, 137, + 91, 0, 195, 114, 122, 111, 170, 230, 231, 110, + 254, 98, 243, 94, 405, 242, 164, 226, 234, 158, + 151, 93, 232, 156, 150, 141, 118, 129, 188, 148, + 189, 130, 161, 160, 162, 0, 412, 0, 218, 240, + 255, 103, 428, 225, 249, 250, 0, 0, 104, 123, + 117, 187, 121, 406, 404, 132, 215, 140, 147, 194, + 253, 177, 200, 107, 239, 216, 424, 427, 422, 423, + 471, 472, 518, 519, 520, 496, 418, 0, 425, 426, + 0, 501, 508, 509, 475, 86, 95, 144, 252, 192, + 120, 241, 408, 421, 113, 431, 0, 0, 444, 449, + 450, 462, 464, 465, 466, 467, 474, 481, 482, 484, + 490, 491, 492, 493, 498, 505, 524, 88, 89, 96, + 102, 108, 112, 116, 119, 125, 128, 131, 133, 134, + 135, 138, 149, 152, 153, 154, 155, 165, 166, 167, + 169, 172, 173, 174, 175, 176, 179, 181, 182, 183, + 184, 185, 186, 193, 196, 202, 203, 204, 205, 206, + 207, 208, 210, 211, 212, 213, 219, 222, 228, 229, + 238, 245, 248, 512, 500, 0, 457, 515, 430, 447, + 523, 448, 451, 488, 415, 470, 171, 445, 0, 434, + 410, 441, 411, 432, 459, 115, 463, 429, 502, 473, + 514, 143, 435, 521, 145, 479, 0, 217, 159, 0, + 0, 461, 504, 468, 497, 456, 489, 420, 478, 516, + 446, 486, 517, 0, 0, 0, 83, 84, 85, 0, + 0, 0, 0, 0, 0, 0, 0, 105, 0, 483, + 511, 443, 485, 487, 409, 480, 0, 413, 416, 522, + 507, 438, 439, 0, 0, 0, 0, 0, 0, 0, + 460, 469, 494, 454, 0, 0, 0, 0, 0, 0, + 0, 0, 436, 0, 477, 0, 0, 0, 417, 414, + 0, 0, 458, 0, 0, 0, 419, 0, 437, 495, + 0, 407, 124, 499, 506, 455, 273, 510, 453, 452, + 513, 190, 0, 221, 127, 142, 101, 139, 87, 97, + 0, 126, 168, 197, 201, 503, 433, 442, 109, 440, + 199, 178, 237, 476, 180, 198, 146, 227, 191, 236, + 246, 247, 224, 244, 251, 214, 90, 223, 720, 106, + 209, 92, 233, 220, 157, 136, 137, 91, 0, 195, + 114, 122, 111, 170, 230, 231, 110, 254, 98, 243, + 94, 405, 242, 164, 226, 234, 158, 151, 93, 232, + 156, 150, 141, 118, 129, 188, 148, 189, 130, 161, + 160, 162, 0, 412, 0, 218, 240, 255, 103, 428, + 225, 249, 250, 0, 0, 104, 123, 117, 187, 121, + 406, 404, 132, 215, 140, 147, 194, 253, 177, 200, + 107, 239, 216, 424, 427, 422, 423, 471, 472, 518, + 519, 520, 496, 418, 0, 425, 426, 0, 501, 508, + 509, 475, 86, 95, 144, 252, 192, 120, 241, 408, + 421, 113, 431, 0, 0, 444, 449, 450, 462, 464, + 465, 466, 467, 474, 481, 482, 484, 490, 491, 492, + 493, 498, 505, 524, 88, 89, 96, 102, 108, 112, + 116, 119, 125, 128, 131, 133, 134, 135, 138, 149, + 152, 153, 154, 155, 165, 166, 167, 169, 172, 173, + 174, 175, 176, 179, 181, 182, 183, 184, 185, 186, + 193, 196, 202, 203, 204, 205, 206, 207, 208, 210, + 211, 212, 213, 219, 222, 228, 229, 238, 245, 248, + 512, 500, 0, 457, 515, 430, 447, 523, 448, 451, + 488, 415, 470, 171, 445, 0, 434, 410, 441, 411, + 432, 459, 115, 463, 429, 502, 473, 514, 143, 435, + 521, 145, 479, 0, 217, 159, 0, 0, 461, 504, + 468, 497, 456, 489, 420, 478, 516, 446, 486, 517, + 0, 0, 0, 83, 84, 85, 0, 0, 0, 0, + 0, 0, 0, 0, 105, 0, 483, 511, 443, 485, + 487, 409, 480, 0, 413, 416, 522, 507, 438, 439, + 0, 0, 0, 0, 0, 0, 0, 460, 469, 494, + 454, 0, 0, 0, 0, 0, 0, 0, 0, 436, + 0, 477, 0, 0, 0, 417, 414, 0, 0, 458, + 0, 0, 0, 419, 0, 437, 495, 0, 407, 124, + 499, 506, 455, 273, 510, 453, 452, 513, 190, 0, + 221, 127, 142, 101, 139, 87, 97, 0, 126, 168, + 197, 201, 503, 433, 442, 109, 440, 199, 178, 237, + 476, 180, 198, 146, 227, 191, 236, 246, 247, 224, + 244, 251, 214, 90, 223, 396, 106, 209, 92, 233, + 220, 157, 136, 137, 91, 0, 195, 114, 122, 111, + 170, 230, 231, 110, 254, 98, 243, 94, 405, 242, + 164, 226, 234, 158, 151, 93, 232, 156, 150, 141, + 118, 129, 188, 148, 189, 130, 161, 160, 162, 0, + 412, 0, 218, 240, 255, 103, 428, 225, 249, 250, + 0, 0, 104, 123, 117, 187, 121, 406, 404, 399, + 398, 140, 147, 194, 253, 177, 200, 107, 239, 216, + 424, 427, 422, 423, 471, 472, 518, 519, 520, 496, + 418, 0, 425, 426, 0, 501, 508, 509, 475, 86, + 95, 144, 252, 192, 120, 241, 408, 421, 113, 431, + 0, 0, 444, 449, 450, 462, 464, 465, 466, 467, + 474, 481, 482, 484, 490, 491, 492, 493, 498, 505, + 524, 88, 89, 96, 102, 108, 112, 116, 119, 125, + 128, 131, 133, 134, 135, 138, 149, 152, 153, 154, + 155, 165, 166, 167, 169, 172, 173, 174, 175, 176, + 179, 181, 182, 183, 184, 185, 186, 193, 196, 202, + 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, + 219, 222, 228, 229, 238, 245, 248, 171, 0, 0, + 898, 0, 330, 0, 0, 0, 115, 0, 327, 0, + 0, 0, 143, 899, 370, 145, 0, 0, 217, 159, + 0, 0, 0, 0, 361, 362, 0, 0, 0, 0, + 0, 0, 0, 0, 55, 0, 0, 83, 84, 85, + 349, 348, 351, 352, 353, 354, 0, 0, 105, 350, + 355, 356, 357, 0, 0, 0, 325, 342, 0, 369, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, + 340, 321, 0, 0, 0, 384, 0, 341, 0, 0, + 336, 337, 338, 343, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 124, 383, 0, 0, 273, 0, 0, + 381, 0, 190, 0, 221, 127, 142, 101, 139, 87, + 97, 0, 126, 168, 197, 201, 0, 0, 0, 109, + 0, 199, 178, 237, 0, 180, 198, 146, 227, 191, + 236, 246, 247, 224, 244, 251, 214, 90, 223, 235, + 106, 209, 92, 233, 220, 157, 136, 137, 91, 0, + 195, 114, 122, 111, 170, 230, 231, 110, 254, 98, + 243, 94, 99, 242, 164, 226, 234, 158, 151, 93, + 232, 156, 150, 141, 118, 129, 188, 148, 189, 130, + 161, 160, 162, 0, 0, 0, 218, 240, 255, 103, + 0, 225, 249, 250, 0, 0, 104, 123, 117, 187, + 121, 163, 100, 132, 215, 140, 147, 194, 253, 177, + 200, 107, 239, 216, 371, 382, 377, 378, 375, 376, + 374, 373, 372, 385, 363, 364, 365, 366, 368, 0, + 379, 380, 367, 86, 95, 144, 252, 192, 120, 241, + 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 88, 89, 96, 102, 108, + 112, 116, 119, 125, 128, 131, 133, 134, 135, 138, + 149, 152, 153, 154, 155, 165, 166, 167, 169, 172, + 173, 174, 175, 176, 179, 181, 182, 183, 184, 185, + 186, 193, 196, 202, 203, 204, 205, 206, 207, 208, + 210, 211, 212, 213, 219, 222, 228, 229, 238, 245, + 248, 171, 0, 0, 0, 0, 330, 0, 0, 0, + 115, 0, 327, 0, 0, 0, 143, 0, 370, 145, + 0, 0, 217, 159, 0, 0, 0, 0, 361, 362, + 0, 0, 0, 0, 0, 0, 973, 0, 55, 0, + 0, 83, 84, 85, 349, 348, 351, 352, 353, 354, + 0, 0, 105, 350, 355, 356, 357, 974, 0, 0, + 325, 342, 0, 369, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 339, 340, 0, 0, 0, 0, 384, + 0, 341, 0, 0, 336, 337, 338, 343, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 124, 383, 0, + 0, 273, 0, 0, 381, 0, 190, 0, 221, 127, + 142, 101, 139, 87, 97, 0, 126, 168, 197, 201, + 0, 0, 0, 109, 0, 199, 178, 237, 0, 180, + 198, 146, 227, 191, 236, 246, 247, 224, 244, 251, + 214, 90, 223, 235, 106, 209, 92, 233, 220, 157, + 136, 137, 91, 0, 195, 114, 122, 111, 170, 230, + 231, 110, 254, 98, 243, 94, 99, 242, 164, 226, + 234, 158, 151, 93, 232, 156, 150, 141, 118, 129, + 188, 148, 189, 130, 161, 160, 162, 0, 0, 0, + 218, 240, 255, 103, 0, 225, 249, 250, 0, 0, + 104, 123, 117, 187, 121, 163, 100, 132, 215, 140, + 147, 194, 253, 177, 200, 107, 239, 216, 371, 382, + 377, 378, 375, 376, 374, 373, 372, 385, 363, 364, + 365, 366, 368, 0, 379, 380, 367, 86, 95, 144, + 252, 192, 120, 241, 0, 0, 113, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, + 89, 96, 102, 108, 112, 116, 119, 125, 128, 131, + 133, 134, 135, 138, 149, 152, 153, 154, 155, 165, + 166, 167, 169, 172, 173, 174, 175, 176, 179, 181, + 182, 183, 184, 185, 186, 193, 196, 202, 203, 204, + 205, 206, 207, 208, 210, 211, 212, 213, 219, 222, + 228, 229, 238, 245, 248, 171, 0, 0, 0, 0, + 330, 0, 0, 0, 115, 0, 327, 0, 0, 0, + 143, 0, 370, 145, 0, 0, 217, 159, 0, 0, + 0, 0, 361, 362, 0, 0, 0, 0, 0, 0, + 0, 0, 55, 0, 592, 83, 84, 85, 349, 348, + 351, 352, 353, 354, 0, 0, 105, 350, 355, 356, + 357, 0, 0, 0, 325, 342, 0, 369, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 339, 340, 0, + 0, 0, 0, 384, 0, 341, 0, 0, 336, 337, + 338, 343, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 124, 383, 0, 0, 273, 0, 0, 381, 0, + 190, 0, 221, 127, 142, 101, 139, 87, 97, 0, + 126, 168, 197, 201, 0, 0, 0, 109, 0, 199, + 178, 237, 0, 180, 198, 146, 227, 191, 236, 246, + 247, 224, 244, 251, 214, 90, 223, 235, 106, 209, + 92, 233, 220, 157, 136, 137, 91, 0, 195, 114, + 122, 111, 170, 230, 231, 110, 254, 98, 243, 94, + 99, 242, 164, 226, 234, 158, 151, 93, 232, 156, + 150, 141, 118, 129, 188, 148, 189, 130, 161, 160, + 162, 0, 0, 0, 218, 240, 255, 103, 0, 225, + 249, 250, 0, 0, 104, 123, 117, 187, 121, 163, + 100, 132, 215, 140, 147, 194, 253, 177, 200, 107, + 239, 216, 371, 382, 377, 378, 375, 376, 374, 373, + 372, 385, 363, 364, 365, 366, 368, 0, 379, 380, + 367, 86, 95, 144, 252, 192, 120, 241, 0, 0, + 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 88, 89, 96, 102, 108, 112, 116, + 119, 125, 128, 131, 133, 134, 135, 138, 149, 152, + 153, 154, 155, 165, 166, 167, 169, 172, 173, 174, + 175, 176, 179, 181, 182, 183, 184, 185, 186, 193, + 196, 202, 203, 204, 205, 206, 207, 208, 210, 211, + 212, 213, 219, 222, 228, 229, 238, 245, 248, 171, + 0, 0, 0, 0, 330, 0, 0, 0, 115, 0, + 327, 0, 0, 0, 143, 0, 370, 145, 0, 0, + 217, 159, 0, 0, 0, 0, 361, 362, 0, 0, + 0, 0, 0, 0, 0, 0, 55, 0, 0, 83, + 84, 85, 349, 348, 351, 352, 353, 354, 0, 0, + 105, 350, 355, 356, 357, 0, 0, 0, 325, 342, + 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 339, 340, 321, 0, 0, 0, 384, 0, 341, + 0, 0, 336, 337, 338, 343, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 124, 383, 0, 0, 273, + 0, 0, 381, 0, 190, 0, 221, 127, 142, 101, + 139, 87, 97, 0, 126, 168, 197, 201, 0, 0, + 0, 109, 0, 199, 178, 237, 0, 180, 198, 146, + 227, 191, 236, 246, 247, 224, 244, 251, 214, 90, + 223, 235, 106, 209, 92, 233, 220, 157, 136, 137, + 91, 0, 195, 114, 122, 111, 170, 230, 231, 110, + 254, 98, 243, 94, 99, 242, 164, 226, 234, 158, + 151, 93, 232, 156, 150, 141, 118, 129, 188, 148, + 189, 130, 161, 160, 162, 0, 0, 0, 218, 240, + 255, 103, 0, 225, 249, 250, 0, 0, 104, 123, + 117, 187, 121, 163, 100, 132, 215, 140, 147, 194, + 253, 177, 200, 107, 239, 216, 371, 382, 377, 378, + 375, 376, 374, 373, 372, 385, 363, 364, 365, 366, + 368, 0, 379, 380, 367, 86, 95, 144, 252, 192, + 120, 241, 0, 0, 113, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 88, 89, 96, + 102, 108, 112, 116, 119, 125, 128, 131, 133, 134, + 135, 138, 149, 152, 153, 154, 155, 165, 166, 167, + 169, 172, 173, 174, 175, 176, 179, 181, 182, 183, + 184, 185, 186, 193, 196, 202, 203, 204, 205, 206, + 207, 208, 210, 211, 212, 213, 219, 222, 228, 229, + 238, 245, 248, 171, 0, 0, 0, 0, 330, 0, + 0, 0, 115, 0, 327, 0, 0, 0, 143, 0, + 370, 145, 0, 0, 217, 159, 0, 0, 0, 0, + 361, 362, 0, 0, 0, 0, 0, 0, 0, 0, + 55, 0, 0, 83, 84, 85, 349, 914, 351, 352, + 353, 354, 0, 0, 105, 350, 355, 356, 357, 0, + 0, 0, 325, 342, 0, 369, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 339, 340, 321, 0, 0, + 0, 384, 0, 341, 0, 0, 336, 337, 338, 343, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, + 383, 0, 0, 273, 0, 0, 381, 0, 190, 0, + 221, 127, 142, 101, 139, 87, 97, 0, 126, 168, + 197, 201, 0, 0, 0, 109, 0, 199, 178, 237, + 0, 180, 198, 146, 227, 191, 236, 246, 247, 224, + 244, 251, 214, 90, 223, 235, 106, 209, 92, 233, + 220, 157, 136, 137, 91, 0, 195, 114, 122, 111, + 170, 230, 231, 110, 254, 98, 243, 94, 99, 242, + 164, 226, 234, 158, 151, 93, 232, 156, 150, 141, + 118, 129, 188, 148, 189, 130, 161, 160, 162, 0, + 0, 0, 218, 240, 255, 103, 0, 225, 249, 250, + 0, 0, 104, 123, 117, 187, 121, 163, 100, 132, + 215, 140, 147, 194, 253, 177, 200, 107, 239, 216, + 371, 382, 377, 378, 375, 376, 374, 373, 372, 385, + 363, 364, 365, 366, 368, 0, 379, 380, 367, 86, + 95, 144, 252, 192, 120, 241, 0, 0, 113, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 88, 89, 96, 102, 108, 112, 116, 119, 125, + 128, 131, 133, 134, 135, 138, 149, 152, 153, 154, + 155, 165, 166, 167, 169, 172, 173, 174, 175, 176, + 179, 181, 182, 183, 184, 185, 186, 193, 196, 202, + 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, + 219, 222, 228, 229, 238, 245, 248, 171, 0, 0, + 0, 0, 330, 0, 0, 0, 115, 0, 327, 0, + 0, 0, 143, 0, 370, 145, 0, 0, 217, 159, + 0, 0, 0, 0, 361, 362, 0, 0, 0, 0, + 0, 0, 0, 0, 55, 0, 0, 83, 84, 85, + 349, 911, 351, 352, 353, 354, 0, 0, 105, 350, + 355, 356, 357, 0, 0, 0, 325, 342, 0, 369, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, + 340, 321, 0, 0, 0, 384, 0, 341, 0, 0, + 336, 337, 338, 343, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 124, 383, 0, 0, 273, 0, 0, + 381, 0, 190, 0, 221, 127, 142, 101, 139, 87, + 97, 0, 126, 168, 197, 201, 0, 0, 0, 109, + 0, 199, 178, 237, 0, 180, 198, 146, 227, 191, + 236, 246, 247, 224, 244, 251, 214, 90, 223, 235, + 106, 209, 92, 233, 220, 157, 136, 137, 91, 0, + 195, 114, 122, 111, 170, 230, 231, 110, 254, 98, + 243, 94, 99, 242, 164, 226, 234, 158, 151, 93, + 232, 156, 150, 141, 118, 129, 188, 148, 189, 130, + 161, 160, 162, 0, 0, 0, 218, 240, 255, 103, + 0, 225, 249, 250, 0, 0, 104, 123, 117, 187, + 121, 163, 100, 132, 215, 140, 147, 194, 253, 177, + 200, 107, 239, 216, 371, 382, 377, 378, 375, 376, + 374, 373, 372, 385, 363, 364, 365, 366, 368, 0, + 379, 380, 367, 86, 95, 144, 252, 192, 120, 241, + 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 88, 89, 96, 102, 108, + 112, 116, 119, 125, 128, 131, 133, 134, 135, 138, + 149, 152, 153, 154, 155, 165, 166, 167, 169, 172, + 173, 174, 175, 176, 179, 181, 182, 183, 184, 185, + 186, 193, 196, 202, 203, 204, 205, 206, 207, 208, + 210, 211, 212, 213, 219, 222, 228, 229, 238, 245, + 248, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 171, 0, 0, 0, 0, 330, 0, + 0, 0, 115, 0, 327, 0, 0, 0, 143, 0, + 370, 145, 0, 0, 217, 159, 0, 0, 0, 0, + 361, 362, 0, 0, 0, 0, 0, 0, 0, 0, + 55, 0, 0, 83, 84, 85, 349, 348, 351, 352, + 353, 354, 0, 0, 105, 350, 355, 356, 357, 0, + 0, 0, 325, 342, 0, 369, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 339, 340, 0, 0, 0, + 0, 384, 0, 341, 0, 0, 336, 337, 338, 343, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, + 383, 0, 0, 273, 0, 0, 381, 0, 190, 0, + 221, 127, 142, 101, 139, 87, 97, 0, 126, 168, + 197, 201, 0, 0, 0, 109, 0, 199, 178, 237, + 0, 180, 198, 146, 227, 191, 236, 246, 247, 224, + 244, 251, 214, 90, 223, 235, 106, 209, 92, 233, + 220, 157, 136, 137, 91, 0, 195, 114, 122, 111, + 170, 230, 231, 110, 254, 98, 243, 94, 99, 242, + 164, 226, 234, 158, 151, 93, 232, 156, 150, 141, + 118, 129, 188, 148, 189, 130, 161, 160, 162, 0, + 0, 0, 218, 240, 255, 103, 0, 225, 249, 250, + 0, 0, 104, 123, 117, 187, 121, 163, 100, 132, + 215, 140, 147, 194, 253, 177, 200, 107, 239, 216, + 371, 382, 377, 378, 375, 376, 374, 373, 372, 385, + 363, 364, 365, 366, 368, 0, 379, 380, 367, 86, + 95, 144, 252, 192, 120, 241, 0, 0, 113, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 88, 89, 96, 102, 108, 112, 116, 119, 125, + 128, 131, 133, 134, 135, 138, 149, 152, 153, 154, + 155, 165, 166, 167, 169, 172, 173, 174, 175, 176, + 179, 181, 182, 183, 184, 185, 186, 193, 196, 202, + 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, + 219, 222, 228, 229, 238, 245, 248, 171, 0, 0, + 0, 0, 330, 0, 0, 0, 115, 0, 327, 0, + 0, 0, 143, 0, 370, 145, 0, 0, 217, 159, + 0, 0, 0, 0, 361, 362, 0, 0, 0, 0, + 0, 0, 0, 0, 55, 0, 0, 83, 84, 85, + 349, 348, 351, 352, 353, 354, 0, 0, 105, 350, + 355, 356, 357, 0, 0, 0, 325, 342, 0, 369, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, + 340, 0, 0, 0, 0, 384, 0, 341, 0, 0, + 336, 337, 338, 343, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 124, 383, 0, 0, 273, 0, 0, + 381, 0, 190, 0, 221, 127, 142, 101, 139, 87, + 97, 0, 126, 168, 197, 201, 0, 0, 0, 109, + 0, 199, 178, 237, 0, 180, 198, 146, 227, 191, + 236, 246, 247, 224, 244, 251, 214, 90, 223, 235, + 106, 209, 92, 233, 220, 157, 136, 137, 91, 0, + 195, 114, 122, 111, 170, 230, 231, 110, 254, 98, + 243, 94, 99, 242, 164, 226, 234, 158, 151, 93, + 232, 156, 150, 141, 118, 129, 188, 148, 189, 130, + 161, 160, 162, 0, 0, 0, 218, 240, 255, 103, + 0, 225, 249, 250, 0, 0, 104, 123, 117, 187, + 121, 163, 100, 132, 215, 140, 147, 194, 253, 177, + 200, 107, 239, 216, 371, 382, 377, 378, 375, 376, + 374, 373, 372, 385, 363, 364, 365, 366, 368, 0, + 379, 380, 367, 86, 95, 144, 252, 192, 120, 241, + 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 88, 89, 96, 102, 108, + 112, 116, 119, 125, 128, 131, 133, 134, 135, 138, + 149, 152, 153, 154, 155, 165, 166, 167, 169, 172, + 173, 174, 175, 176, 179, 181, 182, 183, 184, 185, + 186, 193, 196, 202, 203, 204, 205, 206, 207, 208, + 210, 211, 212, 213, 219, 222, 228, 229, 238, 245, + 248, 171, 0, 0, 0, 0, 0, 0, 0, 0, + 115, 0, 0, 0, 0, 0, 143, 0, 370, 145, + 0, 0, 217, 159, 0, 0, 0, 0, 361, 362, + 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, + 0, 83, 84, 85, 349, 348, 351, 352, 353, 354, + 0, 0, 105, 350, 355, 356, 357, 0, 0, 0, + 0, 342, 0, 369, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 339, 340, 0, 0, 0, 0, 384, + 0, 341, 0, 0, 336, 337, 338, 343, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 124, 383, 0, + 0, 273, 0, 0, 381, 0, 190, 0, 221, 127, + 142, 101, 139, 87, 97, 0, 126, 168, 197, 201, + 0, 0, 0, 109, 0, 199, 178, 237, 1541, 180, + 198, 146, 227, 191, 236, 246, 247, 224, 244, 251, + 214, 90, 223, 235, 106, 209, 92, 233, 220, 157, + 136, 137, 91, 0, 195, 114, 122, 111, 170, 230, + 231, 110, 254, 98, 243, 94, 99, 242, 164, 226, + 234, 158, 151, 93, 232, 156, 150, 141, 118, 129, + 188, 148, 189, 130, 161, 160, 162, 0, 0, 0, + 218, 240, 255, 103, 0, 225, 249, 250, 0, 0, + 104, 123, 117, 187, 121, 163, 100, 132, 215, 140, + 147, 194, 253, 177, 200, 107, 239, 216, 371, 382, + 377, 378, 375, 376, 374, 373, 372, 385, 363, 364, + 365, 366, 368, 0, 379, 380, 367, 86, 95, 144, + 252, 192, 120, 241, 0, 0, 113, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, + 89, 96, 102, 108, 112, 116, 119, 125, 128, 131, + 133, 134, 135, 138, 149, 152, 153, 154, 155, 165, + 166, 167, 169, 172, 173, 174, 175, 176, 179, 181, + 182, 183, 184, 185, 186, 193, 196, 202, 203, 204, + 205, 206, 207, 208, 210, 211, 212, 213, 219, 222, + 228, 229, 238, 245, 248, 171, 0, 0, 0, 0, + 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, + 143, 0, 370, 145, 0, 0, 217, 159, 0, 0, + 0, 0, 361, 362, 0, 0, 0, 0, 0, 0, + 0, 0, 55, 0, 592, 83, 84, 85, 349, 348, + 351, 352, 353, 354, 0, 0, 105, 350, 355, 356, + 357, 0, 0, 0, 0, 342, 0, 369, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 339, 340, 0, + 0, 0, 0, 384, 0, 341, 0, 0, 336, 337, + 338, 343, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 124, 383, 0, 0, 273, 0, 0, 381, 0, + 190, 0, 221, 127, 142, 101, 139, 87, 97, 0, + 126, 168, 197, 201, 0, 0, 0, 109, 0, 199, + 178, 237, 0, 180, 198, 146, 227, 191, 236, 246, + 247, 224, 244, 251, 214, 90, 223, 235, 106, 209, + 92, 233, 220, 157, 136, 137, 91, 0, 195, 114, + 122, 111, 170, 230, 231, 110, 254, 98, 243, 94, + 99, 242, 164, 226, 234, 158, 151, 93, 232, 156, + 150, 141, 118, 129, 188, 148, 189, 130, 161, 160, + 162, 0, 0, 0, 218, 240, 255, 103, 0, 225, + 249, 250, 0, 0, 104, 123, 117, 187, 121, 163, + 100, 132, 215, 140, 147, 194, 253, 177, 200, 107, + 239, 216, 371, 382, 377, 378, 375, 376, 374, 373, + 372, 385, 363, 364, 365, 366, 368, 0, 379, 380, + 367, 86, 95, 144, 252, 192, 120, 241, 0, 0, + 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 88, 89, 96, 102, 108, 112, 116, + 119, 125, 128, 131, 133, 134, 135, 138, 149, 152, + 153, 154, 155, 165, 166, 167, 169, 172, 173, 174, + 175, 176, 179, 181, 182, 183, 184, 185, 186, 193, + 196, 202, 203, 204, 205, 206, 207, 208, 210, 211, + 212, 213, 219, 222, 228, 229, 238, 245, 248, 171, + 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, + 0, 0, 0, 0, 143, 0, 370, 145, 0, 0, + 217, 159, 0, 0, 0, 0, 361, 362, 0, 0, + 0, 0, 0, 0, 0, 0, 55, 0, 0, 83, + 84, 85, 349, 348, 351, 352, 353, 354, 0, 0, + 105, 350, 355, 356, 357, 0, 0, 0, 0, 342, + 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 339, 340, 0, 0, 0, 0, 384, 0, 341, + 0, 0, 336, 337, 338, 343, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 124, 383, 0, 0, 273, + 0, 0, 381, 0, 190, 0, 221, 127, 142, 101, + 139, 87, 97, 0, 126, 168, 197, 201, 0, 0, + 0, 109, 0, 199, 178, 237, 0, 180, 198, 146, + 227, 191, 236, 246, 247, 224, 244, 251, 214, 90, + 223, 235, 106, 209, 92, 233, 220, 157, 136, 137, + 91, 0, 195, 114, 122, 111, 170, 230, 231, 110, + 254, 98, 243, 94, 99, 242, 164, 226, 234, 158, + 151, 93, 232, 156, 150, 141, 118, 129, 188, 148, + 189, 130, 161, 160, 162, 0, 0, 0, 218, 240, + 255, 103, 0, 225, 249, 250, 0, 0, 104, 123, + 117, 187, 121, 163, 100, 132, 215, 140, 147, 194, + 253, 177, 200, 107, 239, 216, 371, 382, 377, 378, + 375, 376, 374, 373, 372, 385, 363, 364, 365, 366, + 368, 0, 379, 380, 367, 86, 95, 144, 252, 192, + 120, 241, 0, 0, 113, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 88, 89, 96, + 102, 108, 112, 116, 119, 125, 128, 131, 133, 134, + 135, 138, 149, 152, 153, 154, 155, 165, 166, 167, + 169, 172, 173, 174, 175, 176, 179, 181, 182, 183, + 184, 185, 186, 193, 196, 202, 203, 204, 205, 206, + 207, 208, 210, 211, 212, 213, 219, 222, 228, 229, + 238, 245, 248, 171, 0, 0, 0, 0, 0, 0, + 0, 0, 115, 0, 0, 0, 0, 0, 143, 0, + 0, 145, 0, 0, 217, 159, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 83, 84, 85, 0, 0, 0, 0, + 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 627, 626, 636, 637, 629, 630, 631, 632, 633, + 634, 635, 628, 0, 0, 638, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, + 0, 0, 0, 273, 0, 0, 0, 0, 190, 0, + 221, 127, 142, 101, 139, 87, 97, 0, 126, 168, + 197, 201, 0, 0, 0, 109, 0, 199, 178, 237, + 0, 180, 198, 146, 227, 191, 236, 246, 247, 224, + 244, 251, 214, 90, 223, 235, 106, 209, 92, 233, + 220, 157, 136, 137, 91, 0, 195, 114, 122, 111, + 170, 230, 231, 110, 254, 98, 243, 94, 99, 242, + 164, 226, 234, 158, 151, 93, 232, 156, 150, 141, + 118, 129, 188, 148, 189, 130, 161, 160, 162, 0, + 0, 0, 218, 240, 255, 103, 0, 225, 249, 250, + 0, 0, 104, 123, 117, 187, 121, 163, 100, 132, + 215, 140, 147, 194, 253, 177, 200, 107, 239, 216, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, + 95, 144, 252, 192, 120, 241, 0, 0, 113, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 88, 89, 96, 102, 108, 112, 116, 119, 125, + 128, 131, 133, 134, 135, 138, 149, 152, 153, 154, + 155, 165, 166, 167, 169, 172, 173, 174, 175, 176, + 179, 181, 182, 183, 184, 185, 186, 193, 196, 202, + 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, + 219, 222, 228, 229, 238, 245, 248, 171, 0, 0, + 0, 615, 0, 0, 0, 0, 115, 0, 0, 0, + 0, 0, 143, 0, 0, 145, 0, 0, 217, 159, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 83, 84, 85, + 0, 617, 0, 0, 0, 0, 0, 0, 105, 0, + 0, 0, 0, 0, 612, 611, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 124, 0, 0, 0, 273, 0, 0, + 0, 0, 190, 0, 221, 127, 142, 101, 139, 87, + 97, 0, 126, 168, 197, 201, 0, 0, 0, 109, + 0, 199, 178, 237, 0, 180, 198, 146, 227, 191, + 236, 246, 247, 224, 244, 251, 214, 90, 223, 235, + 106, 209, 92, 233, 220, 157, 136, 137, 91, 0, + 195, 114, 122, 111, 170, 230, 231, 110, 254, 98, + 243, 94, 99, 242, 164, 226, 234, 158, 151, 93, + 232, 156, 150, 141, 118, 129, 188, 148, 189, 130, + 161, 160, 162, 0, 0, 0, 218, 240, 255, 103, + 0, 225, 249, 250, 0, 0, 104, 123, 117, 187, + 121, 163, 100, 132, 215, 140, 147, 194, 253, 177, + 200, 107, 239, 216, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 86, 95, 144, 252, 192, 120, 241, + 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 88, 89, 96, 102, 108, + 112, 116, 119, 125, 128, 131, 133, 134, 135, 138, + 149, 152, 153, 154, 155, 165, 166, 167, 169, 172, + 173, 174, 175, 176, 179, 181, 182, 183, 184, 185, + 186, 193, 196, 202, 203, 204, 205, 206, 207, 208, + 210, 211, 212, 213, 219, 222, 228, 229, 238, 245, + 248, 171, 0, 0, 0, 0, 0, 0, 0, 0, + 115, 0, 0, 0, 0, 0, 143, 0, 0, 145, + 0, 0, 217, 159, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 83, 84, 85, 0, 0, 0, 0, 0, 0, + 0, 0, 105, 0, 0, 0, 0, 0, 75, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 124, 77, 78, + 0, 74, 0, 0, 0, 79, 190, 0, 221, 127, + 142, 101, 139, 87, 97, 0, 126, 168, 197, 201, + 0, 0, 0, 109, 0, 199, 178, 237, 0, 180, + 198, 146, 227, 191, 236, 246, 247, 224, 244, 251, + 214, 90, 223, 235, 106, 209, 92, 233, 220, 157, + 136, 137, 91, 0, 195, 114, 122, 111, 170, 230, + 231, 110, 254, 98, 243, 94, 99, 242, 164, 226, + 234, 158, 151, 93, 232, 156, 150, 141, 118, 129, + 188, 148, 189, 130, 161, 160, 162, 0, 0, 0, + 218, 240, 255, 103, 0, 225, 249, 250, 0, 0, + 104, 123, 117, 187, 121, 163, 100, 132, 215, 140, + 147, 194, 253, 177, 200, 107, 239, 216, 0, 76, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 86, 95, 144, + 252, 192, 120, 241, 0, 0, 113, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, + 89, 96, 102, 108, 112, 116, 119, 125, 128, 131, + 133, 134, 135, 138, 149, 152, 153, 154, 155, 165, + 166, 167, 169, 172, 173, 174, 175, 176, 179, 181, + 182, 183, 184, 185, 186, 193, 196, 202, 203, 204, + 205, 206, 207, 208, 210, 211, 212, 213, 219, 222, + 228, 229, 238, 245, 248, 171, 0, 0, 0, 956, + 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, + 143, 0, 0, 145, 0, 0, 217, 159, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 83, 84, 85, 0, 958, + 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 124, 0, 0, 0, 273, 0, 0, 0, 0, + 190, 0, 221, 127, 142, 101, 139, 87, 97, 0, + 126, 168, 197, 201, 0, 0, 0, 109, 0, 199, + 178, 237, 0, 180, 198, 146, 227, 191, 236, 246, + 247, 224, 244, 251, 214, 90, 223, 235, 106, 209, + 92, 233, 220, 157, 136, 137, 91, 0, 195, 114, + 122, 111, 170, 230, 231, 110, 254, 98, 243, 94, + 99, 242, 164, 226, 234, 158, 151, 93, 232, 156, + 150, 141, 118, 129, 188, 148, 189, 130, 161, 160, + 162, 0, 0, 0, 218, 240, 255, 103, 0, 225, + 249, 250, 0, 0, 104, 123, 117, 187, 121, 163, + 100, 132, 215, 140, 147, 194, 253, 177, 200, 107, + 239, 216, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 86, 95, 144, 252, 192, 120, 241, 0, 0, + 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 88, 89, 96, 102, 108, 112, 116, + 119, 125, 128, 131, 133, 134, 135, 138, 149, 152, + 153, 154, 155, 165, 166, 167, 169, 172, 173, 174, + 175, 176, 179, 181, 182, 183, 184, 185, 186, 193, + 196, 202, 203, 204, 205, 206, 207, 208, 210, 211, + 212, 213, 219, 222, 228, 229, 238, 245, 248, 25, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, + 115, 0, 0, 0, 0, 0, 143, 0, 0, 145, + 0, 0, 217, 159, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, + 0, 83, 84, 85, 0, 0, 0, 0, 0, 0, + 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, + 0, 273, 0, 0, 0, 0, 190, 0, 221, 127, + 142, 101, 139, 87, 97, 0, 126, 168, 197, 201, + 0, 0, 0, 109, 0, 199, 178, 237, 0, 180, + 198, 146, 227, 191, 236, 246, 247, 224, 244, 251, + 214, 90, 223, 235, 106, 209, 92, 233, 220, 157, + 136, 137, 91, 0, 195, 114, 122, 111, 170, 230, + 231, 110, 254, 98, 243, 94, 99, 242, 164, 226, + 234, 158, 151, 93, 232, 156, 150, 141, 118, 129, + 188, 148, 189, 130, 161, 160, 162, 0, 0, 0, + 218, 240, 255, 103, 0, 225, 249, 250, 0, 0, + 104, 123, 117, 187, 121, 163, 100, 132, 215, 140, + 147, 194, 253, 177, 200, 107, 239, 216, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 86, 95, 144, + 252, 192, 120, 241, 0, 0, 113, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, + 89, 96, 102, 108, 112, 116, 119, 125, 128, 131, + 133, 134, 135, 138, 149, 152, 153, 154, 155, 165, + 166, 167, 169, 172, 173, 174, 175, 176, 179, 181, + 182, 183, 184, 185, 186, 193, 196, 202, 203, 204, + 205, 206, 207, 208, 210, 211, 212, 213, 219, 222, + 228, 229, 238, 245, 248, 171, 0, 0, 0, 956, + 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, + 143, 0, 0, 145, 0, 0, 217, 159, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 83, 84, 85, 0, 958, + 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 124, 0, 0, 0, 273, 0, 0, 0, 0, + 190, 0, 221, 127, 142, 101, 139, 87, 97, 0, + 126, 168, 197, 201, 0, 0, 0, 109, 0, 199, + 178, 237, 0, 954, 198, 146, 227, 191, 236, 246, + 247, 224, 244, 251, 214, 90, 223, 235, 106, 209, + 92, 233, 220, 157, 136, 137, 91, 0, 195, 114, + 122, 111, 170, 230, 231, 110, 254, 98, 243, 94, + 99, 242, 164, 226, 234, 158, 151, 93, 232, 156, + 150, 141, 118, 129, 188, 148, 189, 130, 161, 160, + 162, 0, 0, 0, 218, 240, 255, 103, 0, 225, + 249, 250, 0, 0, 104, 123, 117, 187, 121, 163, + 100, 132, 215, 140, 147, 194, 253, 177, 200, 107, + 239, 216, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 86, 95, 144, 252, 192, 120, 241, 0, 0, + 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 88, 89, 96, 102, 108, 112, 116, + 119, 125, 128, 131, 133, 134, 135, 138, 149, 152, + 153, 154, 155, 165, 166, 167, 169, 172, 173, 174, + 175, 176, 179, 181, 182, 183, 184, 185, 186, 193, + 196, 202, 203, 204, 205, 206, 207, 208, 210, 211, + 212, 213, 219, 222, 228, 229, 238, 245, 248, 171, + 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, + 0, 0, 0, 0, 143, 0, 0, 145, 0, 0, + 217, 159, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, + 84, 85, 0, 0, 849, 0, 0, 850, 0, 0, + 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 124, 0, 0, 0, 273, + 0, 0, 0, 0, 190, 0, 221, 127, 142, 101, + 139, 87, 97, 0, 126, 168, 197, 201, 0, 0, + 0, 109, 0, 199, 178, 237, 0, 180, 198, 146, + 227, 191, 236, 246, 247, 224, 244, 251, 214, 90, + 223, 235, 106, 209, 92, 233, 220, 157, 136, 137, + 91, 0, 195, 114, 122, 111, 170, 230, 231, 110, + 254, 98, 243, 94, 99, 242, 164, 226, 234, 158, + 151, 93, 232, 156, 150, 141, 118, 129, 188, 148, + 189, 130, 161, 160, 162, 0, 0, 0, 218, 240, + 255, 103, 0, 225, 249, 250, 0, 0, 104, 123, + 117, 187, 121, 163, 100, 132, 215, 140, 147, 194, + 253, 177, 200, 107, 239, 216, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 86, 95, 144, 252, 192, + 120, 241, 0, 0, 113, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 88, 89, 96, + 102, 108, 112, 116, 119, 125, 128, 131, 133, 134, + 135, 138, 149, 152, 153, 154, 155, 165, 166, 167, + 169, 172, 173, 174, 175, 176, 179, 181, 182, 183, + 184, 185, 186, 193, 196, 202, 203, 204, 205, 206, + 207, 208, 210, 211, 212, 213, 219, 222, 228, 229, + 238, 245, 248, 171, 0, 0, 0, 0, 0, 0, + 0, 0, 115, 0, 730, 0, 0, 0, 143, 0, + 0, 145, 0, 0, 217, 159, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 83, 84, 85, 0, 729, 0, 0, + 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, + 0, 0, 0, 273, 0, 0, 0, 0, 190, 0, + 221, 127, 142, 101, 139, 87, 97, 0, 126, 168, + 197, 201, 0, 0, 0, 109, 0, 199, 178, 237, + 0, 180, 198, 146, 227, 191, 236, 246, 247, 224, + 244, 251, 214, 90, 223, 235, 106, 209, 92, 233, + 220, 157, 136, 137, 91, 0, 195, 114, 122, 111, + 170, 230, 231, 110, 254, 98, 243, 94, 99, 242, + 164, 226, 234, 158, 151, 93, 232, 156, 150, 141, + 118, 129, 188, 148, 189, 130, 161, 160, 162, 0, + 0, 0, 218, 240, 255, 103, 0, 225, 249, 250, + 0, 0, 104, 123, 117, 187, 121, 163, 100, 132, + 215, 140, 147, 194, 253, 177, 200, 107, 239, 216, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, + 95, 144, 252, 192, 120, 241, 0, 0, 113, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 88, 89, 96, 102, 108, 112, 116, 119, 125, + 128, 131, 133, 134, 135, 138, 149, 152, 153, 154, + 155, 165, 166, 167, 169, 172, 173, 174, 175, 176, + 179, 181, 182, 183, 184, 185, 186, 193, 196, 202, + 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, + 219, 222, 228, 229, 238, 245, 248, 171, 0, 0, + 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, + 0, 0, 143, 0, 0, 145, 0, 0, 217, 159, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 592, 83, 84, 85, + 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 124, 0, 0, 0, 273, 0, 0, + 0, 0, 190, 0, 221, 127, 142, 101, 139, 87, + 97, 0, 126, 168, 197, 201, 0, 0, 0, 109, + 0, 199, 178, 237, 0, 180, 198, 146, 227, 191, + 236, 246, 247, 224, 244, 251, 214, 90, 223, 235, + 106, 209, 92, 233, 220, 157, 136, 137, 91, 0, + 195, 114, 122, 111, 170, 230, 231, 110, 254, 98, + 243, 94, 99, 242, 164, 226, 234, 158, 151, 93, + 232, 156, 150, 141, 118, 129, 188, 148, 189, 130, + 161, 160, 162, 0, 0, 0, 218, 240, 255, 103, + 0, 225, 249, 250, 0, 0, 104, 123, 117, 187, + 121, 163, 100, 132, 215, 140, 147, 194, 253, 177, + 200, 107, 239, 216, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 86, 95, 144, 252, 192, 120, 241, + 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 88, 89, 96, 102, 108, + 112, 116, 119, 125, 128, 131, 133, 134, 135, 138, + 149, 152, 153, 154, 155, 165, 166, 167, 169, 172, + 173, 174, 175, 176, 179, 181, 182, 183, 184, 185, + 186, 193, 196, 202, 203, 204, 205, 206, 207, 208, + 210, 211, 212, 213, 219, 222, 228, 229, 238, 245, + 248, 171, 0, 0, 0, 0, 0, 0, 0, 0, + 115, 0, 0, 0, 0, 0, 143, 0, 0, 145, + 0, 0, 217, 159, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, + 0, 83, 84, 85, 0, 0, 0, 0, 0, 0, + 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, + 0, 273, 0, 0, 0, 0, 190, 0, 221, 127, + 142, 101, 139, 87, 97, 0, 126, 168, 197, 201, + 0, 0, 0, 109, 0, 199, 178, 237, 0, 180, + 198, 146, 227, 191, 236, 246, 247, 224, 244, 251, + 214, 90, 223, 235, 106, 209, 92, 233, 220, 157, + 136, 137, 91, 0, 195, 114, 122, 111, 170, 230, + 231, 110, 254, 98, 243, 94, 99, 242, 164, 226, + 234, 158, 151, 93, 232, 156, 150, 141, 118, 129, + 188, 148, 189, 130, 161, 160, 162, 0, 0, 0, + 218, 240, 255, 103, 0, 225, 249, 250, 0, 0, + 104, 123, 117, 187, 121, 163, 100, 132, 215, 140, + 147, 194, 253, 177, 200, 107, 239, 216, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 86, 95, 144, + 252, 192, 120, 241, 0, 0, 113, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, + 89, 96, 102, 108, 112, 116, 119, 125, 128, 131, + 133, 134, 135, 138, 149, 152, 153, 154, 155, 165, + 166, 167, 169, 172, 173, 174, 175, 176, 179, 181, + 182, 183, 184, 185, 186, 193, 196, 202, 203, 204, + 205, 206, 207, 208, 210, 211, 212, 213, 219, 222, + 228, 229, 238, 245, 248, 171, 0, 0, 0, 0, + 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, + 143, 0, 0, 145, 0, 0, 217, 159, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 83, 84, 85, 0, 958, + 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 124, 0, 0, 0, 273, 0, 0, 0, 0, + 190, 0, 221, 127, 142, 101, 139, 87, 97, 0, + 126, 168, 197, 201, 0, 0, 0, 109, 0, 199, + 178, 237, 0, 180, 198, 146, 227, 191, 236, 246, + 247, 224, 244, 251, 214, 90, 223, 235, 106, 209, + 92, 233, 220, 157, 136, 137, 91, 0, 195, 114, + 122, 111, 170, 230, 231, 110, 254, 98, 243, 94, + 99, 242, 164, 226, 234, 158, 151, 93, 232, 156, + 150, 141, 118, 129, 188, 148, 189, 130, 161, 160, + 162, 0, 0, 0, 218, 240, 255, 103, 0, 225, + 249, 250, 0, 0, 104, 123, 117, 187, 121, 163, + 100, 132, 215, 140, 147, 194, 253, 177, 200, 107, + 239, 216, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 86, 95, 144, 252, 192, 120, 241, 0, 0, + 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 88, 89, 96, 102, 108, 112, 116, + 119, 125, 128, 131, 133, 134, 135, 138, 149, 152, + 153, 154, 155, 165, 166, 167, 169, 172, 173, 174, + 175, 176, 179, 181, 182, 183, 184, 185, 186, 193, + 196, 202, 203, 204, 205, 206, 207, 208, 210, 211, + 212, 213, 219, 222, 228, 229, 238, 245, 248, 171, + 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, + 0, 0, 0, 0, 143, 0, 0, 145, 0, 0, + 217, 159, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, + 84, 85, 0, 617, 0, 0, 0, 0, 0, 0, + 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 124, 0, 0, 0, 273, + 0, 0, 0, 0, 190, 0, 221, 127, 142, 101, + 139, 87, 97, 0, 126, 168, 197, 201, 0, 0, + 0, 109, 0, 199, 178, 237, 0, 180, 198, 146, + 227, 191, 236, 246, 247, 224, 244, 251, 214, 90, + 223, 235, 106, 209, 92, 233, 220, 157, 136, 137, + 91, 0, 195, 114, 122, 111, 170, 230, 231, 110, + 254, 98, 243, 94, 99, 242, 164, 226, 234, 158, + 151, 93, 232, 156, 150, 141, 118, 129, 188, 148, + 189, 130, 161, 160, 162, 0, 0, 0, 218, 240, + 255, 103, 0, 225, 249, 250, 0, 0, 104, 123, + 117, 187, 121, 163, 100, 132, 215, 140, 147, 194, + 253, 177, 200, 107, 239, 216, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 86, 95, 144, 252, 192, + 120, 241, 0, 0, 113, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 88, 89, 96, + 102, 108, 112, 116, 119, 125, 128, 131, 133, 134, + 135, 138, 149, 152, 153, 154, 155, 165, 166, 167, + 169, 172, 173, 174, 175, 176, 179, 181, 182, 183, + 184, 185, 186, 193, 196, 202, 203, 204, 205, 206, + 207, 208, 210, 211, 212, 213, 219, 222, 228, 229, + 238, 245, 248, 171, 0, 0, 0, 0, 0, 0, + 0, 700, 115, 0, 0, 0, 0, 0, 143, 0, + 0, 145, 0, 0, 217, 159, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 83, 84, 85, 0, 0, 0, 0, + 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, + 0, 0, 0, 273, 0, 0, 0, 0, 190, 0, + 221, 127, 142, 101, 139, 87, 97, 0, 126, 168, + 197, 201, 0, 0, 0, 109, 0, 199, 178, 237, + 0, 180, 198, 146, 227, 191, 236, 246, 247, 224, + 244, 251, 214, 90, 223, 235, 106, 209, 92, 233, + 220, 157, 136, 137, 91, 0, 195, 114, 122, 111, + 170, 230, 231, 110, 254, 98, 243, 94, 99, 242, + 164, 226, 234, 158, 151, 93, 232, 156, 150, 141, + 118, 129, 188, 148, 189, 130, 161, 160, 162, 0, + 0, 0, 218, 240, 255, 103, 0, 225, 249, 250, + 0, 0, 104, 123, 117, 187, 121, 163, 100, 132, + 215, 140, 147, 194, 253, 177, 200, 107, 239, 216, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, + 95, 144, 252, 192, 120, 241, 0, 0, 113, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 88, 89, 96, 102, 108, 112, 116, 119, 125, + 128, 131, 133, 134, 135, 138, 149, 152, 153, 154, + 155, 165, 166, 167, 169, 172, 173, 174, 175, 176, + 179, 181, 182, 183, 184, 185, 186, 193, 196, 202, + 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, + 219, 222, 228, 229, 238, 245, 248, 388, 0, 0, + 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, + 0, 0, 0, 115, 0, 0, 0, 0, 0, 143, + 0, 0, 145, 0, 0, 217, 159, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 83, 84, 85, 0, 0, 0, + 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 124, 0, 0, 0, 273, 0, 0, 0, 0, 190, + 0, 221, 127, 142, 101, 139, 87, 97, 0, 126, + 168, 197, 201, 0, 0, 0, 109, 0, 199, 178, + 237, 0, 180, 198, 146, 227, 191, 236, 246, 247, + 224, 244, 251, 214, 90, 223, 235, 106, 209, 92, + 233, 220, 157, 136, 137, 91, 0, 195, 114, 122, + 111, 170, 230, 231, 110, 254, 98, 243, 94, 99, + 242, 164, 226, 234, 158, 151, 93, 232, 156, 150, + 141, 118, 129, 188, 148, 189, 130, 161, 160, 162, + 0, 0, 0, 218, 240, 255, 103, 0, 225, 249, + 250, 0, 0, 104, 123, 117, 187, 121, 163, 100, + 132, 215, 140, 147, 194, 253, 177, 200, 107, 239, + 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 95, 144, 252, 192, 120, 241, 0, 0, 113, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 89, 96, 102, 108, 112, 116, 119, + 125, 128, 131, 133, 134, 135, 138, 149, 152, 153, + 154, 155, 165, 166, 167, 169, 172, 173, 174, 175, + 176, 179, 181, 182, 183, 184, 185, 186, 193, 196, + 202, 203, 204, 205, 206, 207, 208, 210, 211, 212, + 213, 219, 222, 228, 229, 238, 245, 248, 171, 0, + 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, + 0, 0, 0, 143, 0, 0, 145, 0, 0, 217, + 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83, 84, + 85, 0, 0, 0, 0, 0, 0, 0, 0, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 124, 0, 268, 0, 273, 0, + 0, 0, 0, 190, 0, 221, 127, 142, 101, 139, + 87, 97, 0, 126, 168, 197, 201, 0, 0, 0, + 109, 0, 199, 178, 237, 0, 180, 198, 146, 227, + 191, 236, 246, 247, 224, 244, 251, 214, 90, 223, + 235, 106, 209, 92, 233, 220, 157, 136, 137, 91, + 0, 195, 114, 122, 111, 170, 230, 231, 110, 254, + 98, 243, 94, 99, 242, 164, 226, 234, 158, 151, + 93, 232, 156, 150, 141, 118, 129, 188, 148, 189, + 130, 161, 160, 162, 0, 0, 0, 218, 240, 255, + 103, 0, 225, 249, 250, 0, 0, 104, 123, 117, + 187, 121, 163, 100, 132, 215, 140, 147, 194, 253, + 177, 200, 107, 239, 216, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 86, 95, 144, 252, 192, 120, + 241, 0, 0, 113, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 88, 89, 96, 102, + 108, 112, 116, 119, 125, 128, 131, 133, 134, 135, + 138, 149, 152, 153, 154, 155, 165, 166, 167, 169, + 172, 173, 174, 175, 176, 179, 181, 182, 183, 184, + 185, 186, 193, 196, 202, 203, 204, 205, 206, 207, + 208, 210, 211, 212, 213, 219, 222, 228, 229, 238, + 245, 248, 171, 0, 0, 0, 0, 0, 0, 0, + 0, 115, 0, 0, 0, 0, 0, 143, 0, 0, + 145, 0, 0, 217, 159, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83, 84, 85, 0, 0, 0, 0, 0, + 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, + 0, 0, 273, 0, 0, 0, 0, 190, 0, 221, + 127, 142, 101, 139, 87, 97, 0, 126, 168, 197, + 201, 0, 0, 0, 109, 0, 199, 178, 237, 0, + 180, 198, 146, 227, 191, 236, 246, 247, 224, 244, + 251, 214, 90, 223, 235, 106, 209, 92, 233, 220, + 157, 136, 137, 91, 0, 195, 114, 122, 111, 170, + 230, 231, 110, 254, 98, 243, 94, 99, 242, 164, + 226, 234, 158, 151, 93, 232, 156, 150, 141, 118, + 129, 188, 148, 189, 130, 161, 160, 162, 0, 0, + 0, 218, 240, 255, 103, 0, 225, 249, 250, 0, + 0, 104, 123, 117, 187, 121, 163, 100, 132, 215, + 140, 147, 194, 253, 177, 200, 107, 239, 216, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 86, 95, + 144, 252, 192, 120, 241, 0, 0, 113, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 88, 89, 96, 102, 108, 112, 116, 119, 125, 128, + 131, 133, 134, 135, 138, 149, 152, 153, 154, 155, + 165, 166, 167, 169, 172, 173, 174, 175, 176, 179, + 181, 182, 183, 184, 185, 186, 193, 196, 202, 203, + 204, 205, 206, 207, 208, 210, 211, 212, 213, 219, + 222, 228, 229, 238, 245, 248, } var yyPact = [...]int{ - 2438, -1000, -271, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 913, 946, -1000, -1000, -1000, -1000, -1000, -1000, - 244, 11512, 20, 125, -22, 15539, 124, 183, 15873, -1000, - 16, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -55, -75, - -1000, 708, -1000, -1000, -1000, -1000, -1000, 892, 896, 769, - 887, 809, -1000, 8160, 87, 87, 15205, 6824, -1000, -1000, - 332, 15873, 121, 15873, -152, 84, 84, 84, -1000, -1000, + 2356, -1000, -273, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1018, 1069, -1000, -1000, -1000, -1000, -1000, + -1000, 320, 11513, -2, 141, -25, 15540, 140, 136, 15874, + -1000, -29, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -98, + -115, -1000, 770, -1000, -1000, -1000, -1000, -1000, 1013, 1016, + 839, 1004, 913, -1000, 8161, 106, 106, 15206, 6825, -1000, + -1000, 530, 15874, 130, 15874, -160, 87, 87, 87, -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, @@ -2537,23 +2538,23 @@ 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, 123, 15873, 524, 524, 240, - -1000, 15873, 82, 524, 82, 82, 82, 15873, -1000, 167, - -1000, -1000, -1000, 15873, 524, 858, 312, 73, 4395, -1000, - 178, -1000, 4395, 24, 4395, -52, 920, 25, -17, -1000, - 4395, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 448, 861, 9508, 9508, 913, - -1000, 708, -1000, -1000, -1000, 849, -1000, -1000, 313, 935, - -1000, 11178, 165, -1000, 9508, 2418, 525, -1000, -1000, 525, - -1000, -1000, 153, -1000, -1000, 10510, 10510, 10510, 10510, 10510, - 10510, 10510, 10510, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 525, -1000, 9174, - 525, 525, 525, 525, 525, 525, 525, 525, 9508, 525, - 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, - 525, 525, 525, 525, 525, 14864, 13862, 15873, 688, 499, - -1000, -1000, 162, 690, 6477, -98, -1000, -1000, -1000, 246, - 13194, -1000, -1000, -1000, 857, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 138, 15874, 596, 596, + 254, -1000, 15874, 83, 596, 83, 83, 83, 15874, -1000, + 188, -1000, -1000, -1000, 15874, 596, 947, 369, 52, 4396, + -1000, 177, -1000, 4396, 33, 4396, -35, 1026, -28, -41, + -1000, 4396, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 501, 972, 9509, 9509, + 1018, -1000, 770, -1000, -1000, -1000, 948, -1000, -1000, 357, + 1058, -1000, 11179, 185, -1000, 9509, 345, 532, -1000, -1000, + 532, -1000, -1000, 172, -1000, -1000, 10511, 10511, 10511, 10511, + 10511, 10511, 10511, 10511, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 532, -1000, + 9175, 532, 532, 532, 532, 532, 532, 532, 532, 9509, + 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, + 532, 532, 532, 532, 532, 532, 14865, 13863, 15874, 816, + 813, -1000, -1000, 182, 787, 6478, -130, -1000, -1000, -1000, + 283, 13195, -1000, -1000, -1000, 946, -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, @@ -2564,216 +2565,205 @@ 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, 649, 15873, -1000, 2882, -1000, 524, - 4395, 103, 524, 255, 524, 15873, 15873, 4395, 4395, 4395, - 31, 65, 61, 15873, 695, 92, 15873, 882, 779, 15873, - 524, 524, -1000, 5783, -1000, 4395, 312, -1000, 438, 9508, - 4395, 4395, 4395, 15873, 4395, 4395, -1000, -1000, -1000, 356, - -1000, -1000, -1000, -1000, 4395, 4395, -1000, 933, 299, -1000, - -1000, -1000, -1000, 9508, 195, -1000, 778, -1000, -1000, -1000, - -1000, -1000, -1000, 941, 192, 530, 158, 694, -1000, 374, - 892, 448, 809, 12860, 789, -1000, -1000, -1000, 15873, -1000, - 9508, 9508, 426, -1000, 14530, -1000, -1000, 5436, 200, 10510, - 392, 289, 10510, 10510, 10510, 10510, 10510, 10510, 10510, 10510, - 10510, 10510, 10510, 10510, 10510, 10510, 10510, 512, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 524, -1000, 708, 604, - 604, 180, 180, 180, 180, 180, 180, 180, 10844, 7158, - 448, 645, 304, 9174, 8160, 8160, 9508, 9508, 8828, 8494, - 8160, 856, 252, 304, 15873, -1000, -1000, 10176, -1000, -1000, - -1000, -1000, -1000, 448, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 15873, 15873, 8160, 8160, 8160, 8160, 8160, 44, 15873, - -1000, 655, 770, -1000, -1000, -1000, 884, 12192, 12526, 44, - 683, 13862, 15873, -1000, -1000, 13862, 15873, 5089, 6130, 690, - -98, 659, -1000, -108, -105, 7492, 171, -1000, -1000, -1000, - -1000, 4048, 369, 486, 390, -45, -1000, -1000, -1000, 710, - -1000, 710, 710, 710, 710, -10, -10, -10, -10, -1000, - -1000, -1000, -1000, -1000, 738, 733, -1000, 710, 710, 710, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 718, 718, - 718, 712, 712, 750, -1000, 15873, 4395, 880, 4395, -1000, - 83, -1000, -1000, -1000, 15873, 15873, 15873, 15873, 15873, 132, - 15873, 15873, 689, -1000, 15873, 4395, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 304, -1000, -1000, -1000, -1000, -1000, - -1000, 15873, -1000, -1000, -1000, -1000, 15873, 312, 15873, 15873, - 304, -1000, 433, 15873, -1000, 822, 9508, 9508, 5783, 9508, - -1000, -1000, -1000, 861, -1000, 856, 914, -1000, 834, 833, - 8160, -1000, -1000, 200, 301, -1000, -1000, 436, -1000, -1000, - -1000, -1000, 157, 525, -1000, 1653, -1000, -1000, -1000, -1000, - 392, 10510, 10510, 10510, 336, 1653, 817, 1255, 551, 180, - 268, 268, 179, 179, 179, 179, 179, 378, 378, -1000, - -1000, -1000, 448, -1000, -1000, -1000, 448, 8160, 8160, 675, - -1000, -1000, 9508, -1000, 448, 638, 638, 414, 536, 249, - 932, 638, 245, 931, 638, 638, 8160, 261, -1000, 9508, - 448, -1000, 156, -1000, 492, 672, 667, 638, 448, 448, - 638, 638, 692, 525, -1000, 15873, 13862, 13862, 13862, 13862, - 13862, -1000, 802, 801, -1000, 800, 799, 821, 15873, -1000, - 640, 12192, 174, 525, -1000, 14196, -1000, -1000, 919, 13862, - 668, -1000, 668, -1000, 152, -1000, -1000, 659, -98, -72, - -1000, -1000, -1000, -1000, 304, -1000, 519, 654, 3701, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 715, 524, -1000, 869, - 201, 237, 524, 868, -1000, -1000, -1000, 860, -1000, 258, - -48, -1000, -1000, 382, -10, -10, -1000, -1000, 171, 841, - 171, 171, 171, 432, 432, -1000, -1000, -1000, -1000, 348, - -1000, -1000, -1000, 347, -1000, 775, 15873, 4395, -1000, -1000, - -1000, -1000, 288, 288, 225, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 41, 588, -1000, -1000, - -1000, -1000, 15, 30, 90, -1000, 4395, -1000, 299, 299, - -1000, -1000, -1000, -1000, -1000, 820, 304, 304, 148, -1000, - -1000, 15873, -1000, -1000, -1000, -1000, 696, -1000, -1000, -1000, - 4742, 8160, -1000, 336, 1653, 417, -1000, 10510, 10510, -1000, - -1000, 638, 638, 8160, 304, -1000, -1000, -1000, 28, 512, - 28, 10510, 10510, -1000, 10510, 10510, -1000, -164, 552, 251, - -1000, 9508, 238, -1000, 5783, -1000, 10510, 10510, -1000, -1000, - -1000, -1000, -1000, 773, 15873, 525, -1000, 12192, 15873, 679, - -1000, 226, 770, 756, 772, 586, -1000, -1000, -1000, -1000, - 792, -1000, 780, -1000, -1000, -1000, -1000, -1000, 111, 110, - 109, 15873, -1000, 913, 9508, 668, -1000, -1000, 182, -1000, - -1000, -117, -132, -1000, -1000, -1000, 4048, -1000, 4048, 15873, - 66, -1000, 524, 524, -1000, -1000, -1000, 713, 768, 10510, - -1000, -1000, -1000, 477, 171, 171, -1000, 248, -1000, -1000, - -1000, 633, -1000, 631, 647, 626, 15873, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 764, 15874, -1000, 2030, -1000, + 596, 4396, 115, 596, 317, 596, 15874, 15874, 4396, 4396, + 4396, 5, 53, 23, 15874, 786, 113, 15874, 996, 873, + 15874, 596, 596, -1000, 5784, -1000, 4396, 369, -1000, 522, + 9509, 4396, 4396, 4396, 15874, 4396, 4396, -1000, -1000, -1000, + 373, -1000, -1000, -1000, -1000, 4396, 4396, -1000, 1057, 300, + -1000, -1000, -1000, -1000, 9509, 222, -1000, 872, -1000, -1000, + -1000, -1000, -1000, -1000, 1063, 239, 640, 179, 785, -1000, + 607, 1013, 501, 913, 12861, 892, -1000, -1000, -1000, 15874, + -1000, 9509, 9509, 574, -1000, 14531, -1000, -1000, 5437, 244, + 10511, 480, 304, 10511, 10511, 10511, 10511, 10511, 10511, 10511, + 10511, 10511, 10511, 10511, 10511, 10511, 10511, 10511, 667, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 596, -1000, 770, + 795, 795, 195, 195, 195, 195, 195, 195, 195, 10845, + 7159, 501, 718, 288, 9175, 8161, 8161, 9509, 9509, 8829, + 8495, 8161, 965, 292, 288, 15874, -1000, -1000, 10177, -1000, + -1000, -1000, -1000, -1000, 501, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 15874, 15874, 8161, 8161, 8161, 8161, 8161, 46, + 15874, -1000, 796, 842, -1000, -1000, -1000, 998, 12193, 12527, + 46, 730, 13863, 15874, -1000, -1000, 13863, 15874, 5090, 6131, + -130, -1000, 738, -1000, -122, -135, 7493, 181, -1000, -1000, + -1000, -1000, 4049, 285, 604, 390, -91, -1000, -1000, -1000, + 794, -1000, 794, 794, 794, 794, -57, -57, -57, -57, + -1000, -1000, -1000, -1000, -1000, 860, 851, -1000, 794, 794, + 794, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 844, + 844, 844, 826, 826, 850, -1000, 15874, 4396, 994, 4396, + -1000, 84, -1000, -1000, -1000, 15874, 15874, 15874, 15874, 15874, + 148, 15874, 15874, 782, -1000, 15874, 4396, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 288, -1000, -1000, -1000, -1000, + -1000, -1000, 15874, -1000, -1000, -1000, -1000, 15874, 369, 15874, + 15874, 288, -1000, 521, 15874, -1000, 925, 9509, 9509, 5784, + 9509, -1000, -1000, -1000, 972, -1000, 965, 1015, -1000, 937, + 936, 8161, -1000, -1000, 244, 309, -1000, -1000, 508, -1000, + -1000, -1000, -1000, 178, 532, -1000, 1710, -1000, -1000, -1000, + -1000, 480, 10511, 10511, 10511, 127, 1710, 1668, 496, 1745, + 195, 531, 531, 220, 220, 220, 220, 220, 468, 468, + -1000, -1000, -1000, 501, -1000, -1000, -1000, 501, 8161, 8161, + 781, -1000, -1000, 9509, -1000, 501, 691, 691, 632, 467, + 276, 1053, 691, 262, 1028, 691, 691, 8161, 340, -1000, + 9509, 501, -1000, 175, -1000, 403, 780, 776, 691, 501, + 501, 691, 691, 799, 532, -1000, 15874, 13863, 13863, 13863, + 13863, 13863, -1000, 902, 901, -1000, 887, 886, 920, 15874, + -1000, 713, 12193, 165, 532, -1000, 14197, -1000, -1000, 1024, + 13863, 711, -1000, 711, -1000, 170, -1000, -1000, 738, -130, + -55, -1000, -1000, -1000, -1000, 288, -1000, 693, 733, 3702, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 838, 596, -1000, + 984, 228, 191, 596, 983, -1000, -1000, -1000, 952, -1000, + 315, -94, -1000, -1000, 481, -57, -57, -1000, -1000, 181, + 945, 181, 181, 181, 499, 499, -1000, -1000, -1000, -1000, + 470, -1000, -1000, -1000, 448, -1000, 871, 15874, 4396, -1000, + -1000, -1000, -1000, 273, 273, 224, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 45, 797, -1000, + -1000, -1000, -1000, -33, -11, 110, -1000, 4396, -1000, 300, + 300, -1000, -1000, -1000, -1000, -1000, 918, 288, 288, 167, + -1000, -1000, 15874, -1000, -1000, -1000, -1000, 790, -1000, -1000, + -1000, 4743, 8161, -1000, 127, 1710, 418, -1000, 10511, 10511, + -1000, -1000, 691, 691, 8161, 288, -1000, -1000, -1000, 124, + 667, 124, 10511, 10511, -1000, 10511, 10511, -1000, -172, 644, + 274, -1000, 9509, 537, -1000, 5784, -1000, 10511, 10511, -1000, + -1000, -1000, -1000, -1000, 869, 15874, 532, -1000, 12193, 15874, + 724, -1000, 277, 842, 849, 868, 864, -1000, -1000, -1000, + -1000, 900, -1000, 894, -1000, -1000, -1000, -1000, -1000, 128, + 121, 118, 15874, -1000, 1018, 9509, 711, -1000, -1000, 207, + -1000, -1000, -140, -147, -1000, -1000, -1000, 4049, -1000, 4049, + 15874, 66, -1000, 596, 596, -1000, -1000, -1000, 829, 867, + 10511, -1000, -1000, -1000, 592, 181, 181, -1000, 438, -1000, + -1000, -1000, 689, -1000, 686, 715, 655, 15874, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 15873, -1000, -1000, -1000, - -1000, -1000, 15873, -172, 524, 15873, 15873, 15873, 15873, -1000, - 312, 312, -1000, 5783, -1000, 919, 13862, -1000, -1000, 448, - -1000, 10510, 1653, 1653, -1000, -1000, -1000, 448, 710, 710, - -1000, 710, 712, -1000, 710, 7, 710, 6, 448, 448, - 1711, 1638, 1618, 1571, 525, -159, -1000, 304, 9508, -1000, - 1523, 1471, -1000, 871, 554, 545, -1000, -1000, 7826, 448, - 620, 146, 615, -1000, 913, 15873, 9508, -1000, -1000, 9508, - 711, -1000, 9508, -1000, -1000, -1000, 525, 525, 525, 615, - 892, 304, -1000, -1000, -1000, -1000, 3701, -1000, 606, -1000, - 710, -1000, -1000, -1000, 15873, -36, 939, 1653, -1000, -1000, - -1000, -1000, -1000, -10, 430, -10, 337, -1000, 326, 4395, - -1000, -1000, -1000, -1000, 876, -1000, 5783, -1000, -1000, 699, - 746, -1000, -1000, -1000, -1000, 917, 581, -1000, 1653, -1000, - -1000, 122, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 10510, 10510, 10510, 10510, 10510, 892, 400, 304, 10510, 10510, - 867, -1000, 525, -1000, -1000, 714, 15873, 15873, -1000, 15873, - 892, -1000, 304, 304, 15873, 304, 13528, 15873, 15873, 11846, - -1000, 166, 15873, -1000, 589, -1000, 194, -1000, -125, 171, - -1000, 171, 475, 472, -1000, 525, 560, -1000, 217, 15873, - 15873, 915, 894, -1000, -1000, 492, 492, 492, 492, 58, - 448, -1000, 492, 492, 938, -1000, 525, -1000, 708, 139, - -1000, -1000, -1000, 587, 569, -1000, 569, 569, 174, 166, - -1000, 524, 215, 398, -1000, 63, 15873, 281, 866, -1000, - 863, -1000, -1000, -1000, -1000, -1000, 40, 5783, 4048, 563, - -1000, -1000, 9508, 9508, -1000, -1000, -1000, -1000, 448, 47, - -176, -1000, -1000, -1000, 15873, 545, 448, 15873, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 322, -1000, -1000, 15873, -1000, - -1000, 386, -1000, -1000, 503, -1000, 15873, -1000, -1000, 588, - 304, 529, -1000, 819, -170, -182, 517, -1000, -1000, -1000, - 698, -1000, -1000, 40, 830, -172, -1000, 806, -1000, 15873, - -1000, 37, -1000, -174, 489, 35, -177, 765, 525, -183, - 754, -1000, 925, 9842, -1000, -1000, 927, 177, 177, 492, - 448, -1000, -1000, -1000, 70, 457, -1000, -1000, -1000, -1000, - -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 15874, -1000, -1000, + -1000, -1000, -1000, 15874, -179, 596, 15874, 15874, 15874, 15874, + -1000, 369, 369, -1000, 5784, -1000, 1024, 13863, -1000, -1000, + 501, -1000, 10511, 1710, 1710, -1000, -1000, -1000, 501, 794, + 794, -1000, 794, 826, -1000, 794, -38, 794, -39, 501, + 501, 1620, 1572, 1521, 566, 532, -167, -1000, 288, 9509, + -1000, 712, 381, -1000, 986, 625, 639, -1000, -1000, 7827, + 501, 649, 157, 646, -1000, 1018, 15874, 9509, -1000, -1000, + 9509, 800, -1000, 9509, -1000, -1000, -1000, 532, 532, 532, + 646, 1013, 288, -1000, -1000, -1000, -1000, 3702, -1000, 641, + -1000, 794, -1000, -1000, -1000, 15874, -84, 1062, 1710, -1000, + -1000, -1000, -1000, -1000, -57, 498, -57, 432, -1000, 427, + 4396, -1000, -1000, -1000, -1000, 988, -1000, 5784, -1000, -1000, + 793, 843, -1000, -1000, -1000, -1000, 1022, 698, -1000, 1710, + -1000, -1000, 88, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 10511, 10511, 10511, 10511, 10511, 1013, 494, 288, 10511, + 10511, 981, -1000, 532, -1000, -1000, 827, 15874, 15874, -1000, + 15874, 1013, -1000, 288, 288, 15874, 288, 13529, 15874, 15874, + 11847, -1000, 184, 15874, -1000, 635, -1000, 192, -1000, -77, + 181, -1000, 181, 586, 554, -1000, 532, 682, -1000, 265, + 15874, 15874, 1017, 1005, -1000, -1000, 403, 403, 403, 403, + 59, 501, -1000, 403, 403, 1061, -1000, 532, -1000, 770, + 155, -1000, -1000, -1000, 633, 570, -1000, 570, 570, 165, + 184, -1000, 596, 253, 488, -1000, 63, 15874, 334, 976, + -1000, 974, -1000, -1000, -1000, -1000, -1000, 44, 5784, 4049, + 564, -1000, -1000, 9509, 9509, -1000, -1000, -1000, -1000, 501, + 41, -183, -1000, -1000, -1000, 15874, 639, 501, 15874, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 363, -1000, -1000, 15874, + -1000, -1000, 484, -1000, -1000, 561, -1000, 15874, -1000, -1000, + 797, 288, 628, -1000, 909, -177, -186, 618, -1000, -1000, + -1000, 792, -1000, -1000, 44, 933, -179, -1000, 907, -1000, + 15874, -1000, 30, -1000, -180, 551, 18, -184, 866, 532, + -187, 863, -1000, 1050, 9843, -1000, -1000, 1052, 176, 176, + 403, 501, -1000, -1000, -1000, 71, 483, -1000, -1000, -1000, + -1000, -1000, -1000, } var yyPgo = [...]int{ - 0, 1156, 57, 557, 1155, 1154, 1153, 1151, 1150, 1148, - 1147, 1146, 1145, 1144, 1143, 1141, 1140, 1138, 1136, 1132, - 1127, 1125, 1124, 1123, 1122, 1121, 89, 1120, 1119, 1118, - 69, 1117, 70, 1115, 1112, 47, 114, 34, 43, 1634, - 1111, 22, 54, 63, 1110, 28, 1108, 1107, 76, 1106, - 1102, 52, 1101, 1098, 77, 1096, 65, 1095, 12, 35, - 1094, 1093, 1089, 1088, 75, 419, 1087, 1086, 15, 1085, - 1084, 99, 1083, 55, 6, 14, 13, 19, 1082, 1126, - 9, 1080, 53, 1078, 1077, 1076, 1075, 26, 1074, 61, - 1073, 17, 56, 1071, 40, 64, 31, 25, 5, 78, - 73, 1070, 23, 62, 50, 1068, 1067, 476, 1066, 1065, - 44, 1064, 1062, 1061, 30, 1060, 90, 491, 1059, 1058, - 1038, 1034, 46, 704, 1264, 130, 66, 1032, 1030, 1029, - 2331, 42, 51, 18, 1025, 37, 1482, 33, 1024, 1023, - 41, 1022, 1021, 1020, 1018, 1017, 1016, 1015, 94, 1011, - 1010, 1008, 108, 24, 1006, 1005, 60, 20, 1003, 999, - 997, 48, 59, 985, 984, 49, 981, 980, 21, 976, - 975, 974, 973, 970, 29, 7, 968, 16, 967, 8, - 964, 27, 963, 3, 962, 10, 959, 2, 0, 958, - 11, 45, 1, 957, 4, 955, 954, 1324, 1407, 79, - 953, 80, + 0, 1302, 63, 591, 1299, 1291, 1290, 1289, 1287, 1286, + 1285, 1284, 1283, 1282, 1279, 1278, 1277, 1276, 1272, 1265, + 1263, 1262, 1258, 1254, 1253, 1251, 1250, 90, 1248, 1247, + 1237, 67, 1234, 71, 1233, 1232, 47, 261, 34, 44, + 283, 1225, 22, 54, 66, 1223, 32, 1222, 1221, 76, + 1220, 1219, 52, 1217, 1216, 77, 1215, 65, 1214, 13, + 36, 1213, 1211, 1210, 1209, 70, 419, 1208, 1207, 15, + 1206, 1205, 80, 1203, 51, 6, 14, 18, 19, 1202, + 1037, 9, 1201, 55, 1200, 1194, 1191, 1190, 26, 1188, + 57, 1186, 28, 56, 1185, 41, 74, 30, 25, 5, + 1184, 1182, 23, 62, 48, 60, 1180, 1178, 463, 1176, + 1173, 42, 1172, 1166, 1165, 24, 1164, 81, 414, 1163, + 1162, 1159, 1158, 31, 704, 1264, 130, 61, 1157, 1156, + 1155, 2331, 38, 50, 17, 1152, 86, 795, 43, 1151, + 1149, 35, 1148, 1146, 1140, 1138, 1134, 1133, 1123, 382, + 1120, 1118, 1116, 16, 53, 1115, 1114, 58, 20, 1112, + 1111, 1109, 46, 59, 1108, 1107, 49, 1105, 1104, 21, + 1099, 1097, 1096, 1095, 1094, 29, 7, 1090, 12, 1089, + 8, 1088, 27, 1086, 3, 1085, 10, 1084, 2, 0, + 1083, 11, 45, 1, 1078, 4, 1077, 1076, 1324, 1407, + 78, 1075, 97, } var yyR1 = [...]int{ - 0, 195, 196, 196, 1, 1, 1, 1, 1, 1, + 0, 196, 197, 197, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 188, 188, 188, 2, 2, 2, - 6, 3, 4, 4, 5, 5, 7, 7, 29, 29, - 8, 9, 9, 9, 9, 199, 199, 48, 48, 49, - 49, 95, 95, 10, 10, 10, 10, 100, 100, 104, - 104, 104, 105, 105, 105, 105, 138, 138, 11, 11, - 11, 11, 11, 11, 11, 190, 190, 189, 187, 187, - 186, 186, 185, 17, 170, 172, 172, 171, 171, 171, - 171, 162, 141, 141, 141, 141, 144, 144, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, - 143, 143, 145, 145, 145, 145, 145, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, - 161, 161, 148, 148, 156, 156, 157, 157, 157, 154, - 154, 155, 155, 158, 158, 158, 150, 150, 151, 151, - 159, 159, 152, 152, 152, 153, 153, 153, 160, 160, - 160, 160, 160, 149, 149, 163, 163, 180, 180, 179, - 179, 179, 169, 169, 176, 176, 176, 176, 176, 166, - 166, 166, 167, 167, 165, 165, 168, 168, 178, 178, - 177, 164, 164, 181, 181, 181, 181, 193, 194, 192, - 192, 192, 192, 192, 173, 173, 173, 174, 174, 174, - 175, 175, 175, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, - 191, 191, 191, 191, 184, 182, 182, 183, 183, 13, - 18, 18, 14, 14, 14, 14, 14, 15, 15, 19, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 111, 111, 113, - 113, 109, 109, 112, 112, 110, 110, 110, 114, 114, - 114, 115, 115, 139, 139, 139, 21, 21, 23, 23, - 24, 25, 22, 22, 22, 22, 22, 22, 22, 16, - 200, 26, 27, 27, 28, 28, 28, 32, 32, 32, - 30, 30, 30, 31, 31, 37, 37, 36, 36, 38, - 38, 38, 38, 127, 127, 127, 126, 126, 40, 40, - 41, 41, 42, 42, 43, 43, 43, 43, 57, 57, - 94, 94, 96, 96, 44, 44, 44, 44, 45, 45, - 46, 46, 47, 47, 134, 134, 133, 133, 133, 132, - 132, 50, 50, 50, 52, 51, 51, 51, 51, 53, - 53, 55, 55, 54, 54, 56, 58, 58, 58, 58, - 58, 59, 59, 39, 39, 39, 39, 39, 39, 39, - 108, 108, 61, 61, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 72, 72, 72, 72, 72, 72, - 62, 62, 62, 62, 62, 62, 62, 35, 35, 73, - 73, 73, 79, 74, 74, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 69, 69, 69, - 69, 67, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 201, 201, 71, 70, 70, 70, 70, 70, 70, 70, - 33, 33, 33, 33, 33, 137, 137, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 83, 83, 34, 34, 81, 81, 82, 84, 84, 80, - 80, 80, 64, 64, 64, 64, 64, 64, 64, 64, - 66, 66, 66, 85, 85, 86, 86, 87, 87, 88, - 88, 89, 90, 90, 90, 91, 91, 91, 91, 92, - 92, 92, 63, 63, 63, 63, 63, 63, 93, 93, - 93, 93, 97, 97, 75, 75, 77, 77, 76, 78, - 98, 98, 102, 99, 99, 103, 103, 103, 103, 101, - 101, 101, 129, 129, 129, 106, 106, 116, 116, 117, - 117, 107, 107, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 119, 119, 119, 120, 120, 121, 121, - 121, 128, 128, 124, 124, 125, 125, 130, 130, 131, - 131, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, - 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 1, 1, 1, 1, 1, 189, 189, 189, 2, 2, + 2, 6, 3, 4, 4, 5, 5, 7, 7, 30, + 30, 8, 9, 9, 9, 9, 200, 200, 49, 49, + 50, 50, 96, 96, 10, 11, 11, 105, 105, 104, + 104, 104, 106, 106, 106, 106, 139, 139, 12, 12, + 12, 12, 12, 12, 12, 191, 191, 190, 188, 188, + 187, 187, 186, 18, 171, 173, 173, 172, 172, 172, + 172, 163, 142, 142, 142, 142, 145, 145, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, + 144, 144, 146, 146, 146, 146, 146, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, + 162, 162, 149, 149, 157, 157, 158, 158, 158, 155, + 155, 156, 156, 159, 159, 159, 151, 151, 152, 152, + 160, 160, 153, 153, 153, 154, 154, 154, 161, 161, + 161, 161, 161, 150, 150, 164, 164, 181, 181, 180, + 180, 180, 170, 170, 177, 177, 177, 177, 177, 167, + 167, 167, 168, 168, 166, 166, 169, 169, 179, 179, + 178, 165, 165, 182, 182, 182, 182, 194, 195, 193, + 193, 193, 193, 193, 174, 174, 174, 175, 175, 175, + 176, 176, 176, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 185, 183, 183, 184, 184, 14, + 19, 19, 15, 15, 15, 15, 15, 16, 16, 20, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 112, 112, 114, + 114, 110, 110, 113, 113, 111, 111, 111, 115, 115, + 115, 116, 116, 140, 140, 140, 22, 22, 24, 24, + 25, 26, 23, 23, 23, 23, 23, 23, 23, 17, + 201, 27, 28, 28, 29, 29, 29, 33, 33, 33, + 31, 31, 31, 32, 32, 38, 38, 37, 37, 39, + 39, 39, 39, 128, 128, 128, 127, 127, 41, 41, + 42, 42, 43, 43, 44, 44, 44, 44, 58, 58, + 95, 95, 97, 97, 45, 45, 45, 45, 46, 46, + 47, 47, 48, 48, 135, 135, 134, 134, 134, 133, + 133, 51, 51, 51, 53, 52, 52, 52, 52, 54, + 54, 56, 56, 55, 55, 57, 59, 59, 59, 59, + 59, 60, 60, 40, 40, 40, 40, 40, 40, 40, + 109, 109, 62, 62, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 73, 73, 73, 73, 73, 73, + 63, 63, 63, 63, 63, 63, 63, 36, 36, 74, + 74, 74, 80, 75, 75, 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, 70, 70, 70, + 70, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, + 202, 202, 72, 71, 71, 71, 71, 71, 71, 71, + 34, 34, 34, 34, 34, 138, 138, 141, 141, 141, + 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, + 84, 84, 35, 35, 82, 82, 83, 85, 85, 81, + 81, 81, 65, 65, 65, 65, 65, 65, 65, 65, + 67, 67, 67, 86, 86, 87, 87, 88, 88, 89, + 89, 90, 91, 91, 91, 92, 92, 92, 92, 93, + 93, 93, 64, 64, 64, 64, 64, 64, 94, 94, + 94, 94, 98, 98, 76, 76, 78, 78, 77, 79, + 99, 99, 102, 100, 100, 100, 103, 103, 103, 103, + 101, 101, 101, 130, 130, 130, 107, 107, 117, 117, + 118, 118, 108, 108, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 120, 120, 120, 121, 121, 122, + 122, 122, 129, 129, 125, 125, 126, 126, 131, 131, + 132, 132, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, @@ -2785,21 +2775,33 @@ var yyR1 = [...]int{ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 197, 198, 135, 136, 136, 136, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 198, 199, 136, 137, 137, 137, } var yyR2 = [...]int{ 0, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 1, 4, 6, 7, - 5, 10, 1, 3, 1, 3, 7, 8, 1, 1, - 9, 8, 7, 6, 6, 1, 1, 1, 3, 1, - 3, 0, 4, 3, 4, 5, 4, 1, 3, 3, + 1, 1, 1, 1, 0, 1, 1, 1, 4, 6, + 7, 5, 10, 1, 3, 1, 3, 7, 8, 1, + 1, 9, 8, 7, 6, 6, 1, 1, 1, 3, + 1, 3, 0, 4, 3, 5, 4, 1, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 8, 4, 6, 5, 5, 0, 2, 1, 0, 2, 1, 3, 3, 4, 4, 2, 4, 1, 3, 3, @@ -2855,11 +2857,11 @@ var yyR2 = [...]int{ 3, 2, 0, 1, 1, 0, 2, 4, 4, 0, 2, 4, 2, 1, 3, 5, 4, 6, 1, 3, 3, 5, 0, 5, 1, 3, 1, 2, 3, 1, - 1, 3, 3, 1, 3, 3, 3, 3, 3, 1, - 2, 1, 1, 1, 1, 1, 1, 0, 2, 0, - 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 3, 1, 2, 3, 3, 3, 3, 3, + 1, 2, 1, 1, 1, 1, 1, 1, 0, 2, + 0, 3, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, + 1, 1, 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, @@ -2889,178 +2891,178 @@ 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, 0, 0, 1, 1, + 1, 1, 1, 0, 0, 1, 1, } var yyChk = [...]int{ - -1000, -195, -1, -2, -6, -7, -8, -9, -10, -11, - -12, -13, -14, -15, -19, -20, -21, -23, -24, -25, - -22, -16, -3, -4, 6, 7, -29, 9, 10, 30, - -17, 118, 119, 121, 120, 154, 122, 147, 51, 168, - 169, 171, 172, 25, 148, 149, 152, 153, 31, 32, - 124, -197, 8, 254, 55, -196, 352, -87, 15, -28, - 5, -26, -200, -26, -26, -26, -26, -26, -170, -172, - 55, 93, -121, 128, 75, 246, 125, 126, 132, -124, - -188, -123, 58, 59, 60, 264, 140, 296, 297, 168, - 179, 173, 200, 192, 265, 298, 141, 190, 193, 233, - 138, 299, 220, 227, 69, 171, 242, 300, 150, 188, - 184, 301, 273, 182, 27, 302, 229, 205, 303, 269, - 231, 183, 228, 124, 304, 143, 136, 305, 206, 210, - 306, 234, 307, 308, 309, 177, 178, 310, 139, 236, - 204, 137, 33, 266, 36, 158, 237, 208, 311, 203, - 199, 312, 313, 314, 315, 202, 176, 198, 40, 212, - 211, 213, 232, 195, 316, 317, 318, 144, 319, 185, - 18, 320, 321, 322, 323, 324, 240, 153, 325, 156, - 326, 327, 328, 329, 330, 331, 230, 207, 209, 133, - 160, 268, 332, 238, 181, 333, 145, 157, 152, 241, - 146, 334, 335, 336, 337, 338, 339, 340, 172, 341, - 342, 343, 344, 167, 235, 244, 39, 217, 345, 175, - 135, 346, 169, 164, 222, 196, 159, 347, 348, 186, - 187, 201, 174, 197, 170, 161, 154, 349, 243, 218, - 270, 194, 191, 165, 350, 162, 163, 351, 223, 224, - 166, 267, 239, 189, 219, -107, 128, 246, 125, 224, - 130, 126, 126, 127, 128, 246, 125, 126, -54, -130, - -188, -123, 128, 126, 111, 193, 233, 118, 221, 229, - -113, 230, 160, -139, 126, -109, 220, 223, 224, 166, - -188, 231, 235, 234, 225, -130, 170, -135, -135, -135, - -135, -135, 222, 222, -135, -2, -91, 17, 16, -5, - -3, -197, 6, 20, 21, -32, 41, 42, -27, -38, - 102, -39, -130, -60, 77, -65, 29, -188, -123, 23, - -64, -61, -80, -78, -79, 111, 112, 113, 100, 101, - 108, 78, 114, -69, -67, -68, -70, 62, 61, 70, - 63, 64, 65, 66, 71, 72, 73, -124, -76, -197, - 45, 46, 255, 256, 257, 258, 263, 259, 80, 35, - 245, 253, 252, 251, 249, 250, 247, 248, 261, 262, - 131, 246, 125, 106, 254, -107, -107, 11, -48, -49, - -54, -56, -130, -99, -138, 170, -103, 235, 234, -125, - -101, -124, -122, 233, 193, 232, 123, 271, 76, 22, - 24, 215, 79, 111, 16, 80, 110, 255, 118, 49, - 272, 247, 248, 245, 257, 258, 246, 221, 29, 10, - 274, 25, 148, 21, 34, 104, 120, 83, 84, 151, - 23, 149, 73, 277, 19, 52, 11, 13, 278, 279, - 14, 131, 130, 95, 127, 47, 8, 114, 26, 92, - 43, 280, 28, 281, 282, 283, 284, 45, 93, 17, - 249, 250, 31, 285, 263, 155, 106, 50, 37, 77, - 286, 287, 71, 288, 74, 53, 75, 15, 48, 289, - 290, 291, 292, 94, 121, 254, 46, 293, 125, 6, - 260, 30, 147, 44, 294, 126, 82, 261, 262, 129, - 72, 5, 132, 32, 9, 51, 54, 251, 252, 253, - 35, 81, 12, 295, -171, 93, -162, -188, -54, 127, - -54, 254, -117, 131, -117, -117, 126, -54, -188, -188, - 118, 120, 123, 53, -18, -54, -116, 131, -188, -116, - -116, -116, -54, 115, -54, -188, 30, -114, 93, 12, - 246, -188, 160, 126, 161, 128, -136, -197, -125, -166, - 127, 33, 139, -136, 164, 165, -136, -112, -111, 227, - 228, 222, 226, 12, 165, 222, 163, -136, -135, -135, - -198, 57, -92, 19, 31, -39, -130, -88, -89, -39, - -87, -2, -26, 37, -30, 21, 34, 68, 11, -127, - 76, 75, 92, -126, 22, -124, 62, 115, -39, -62, - 95, 77, 93, 94, 79, 97, 96, 107, 100, 101, - 102, 103, 104, 105, 106, 98, 99, 110, 85, 86, - 87, 88, 89, 90, 91, -108, -197, -79, -197, 116, - 117, -65, -65, -65, -65, -65, -65, -65, -65, -197, - -2, -74, -39, -197, -197, -197, -197, -197, -197, -197, - -197, -197, -83, -39, -197, -201, -71, -197, -201, -71, - -201, -71, -201, -197, -201, -71, -201, -71, -201, -201, - -71, -197, -197, -197, -197, -197, -197, -197, -55, 26, - -54, -41, -42, -43, -44, -57, -79, -197, -54, -54, - -48, -199, 56, 11, 54, -199, 56, 115, 56, -99, - 170, -100, -104, 236, 238, 85, -129, -124, 62, 29, - 30, 57, 56, -54, -141, -144, -146, -145, -147, -142, - -143, 190, 191, 111, 194, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 30, 150, 186, 187, 188, - 189, 206, 207, 208, 209, 210, 211, 212, 213, 173, - 192, 265, 174, 175, 176, 177, 178, 179, 181, 182, - 183, 184, 185, -188, -136, 128, -188, 77, -188, -54, - -54, -136, -136, -136, 162, 162, 126, 126, 167, -54, - 56, 129, -48, 23, 53, -54, -188, -188, -131, -130, - -122, -136, -114, 62, -39, -136, -136, -136, -54, -136, - -136, -167, 11, 95, -136, -136, 11, -110, 11, 95, - -39, -115, 93, 53, 9, 95, 56, 18, 115, 56, - -90, 24, 25, -91, -198, -32, -66, -124, 63, 66, - -31, 44, -54, -39, -39, -72, 71, 77, 72, 73, - -126, 102, -131, -125, -122, -65, -73, -76, -79, 67, - 95, 93, 94, 79, -65, -65, -65, -65, -65, -65, - -65, -65, -65, -65, -65, -65, -65, -65, -65, -137, - -188, 62, -188, -64, -64, -124, -37, 21, 34, -36, - -38, -198, 56, -198, -2, -36, -36, -39, -39, -80, - 62, -36, -80, 62, -36, -36, -30, -81, -82, 81, - -80, -124, -130, -198, -65, -124, -124, -36, -37, -37, - -36, -36, -95, 156, -54, 30, 56, -50, -52, -51, - -53, 43, 47, 49, 44, 45, 46, 50, -134, 22, - -41, -197, -133, 156, -132, 22, -130, 62, -95, 54, - -41, -54, -41, -56, -130, 102, -103, -100, 56, 237, - 239, 240, 53, 74, -39, -153, 110, -173, -174, -175, - -125, 62, 63, -162, -163, -164, -176, 142, -181, 133, - 135, 132, -165, 143, 127, 28, 57, -158, 71, 77, - -154, 218, -148, 55, -148, -148, -148, -148, -152, 193, - -152, -152, -152, 55, 55, -148, -148, -148, -156, 55, - -156, -156, -157, 55, -157, -128, 54, -54, -136, 23, - -136, -118, 123, 120, 121, -184, 119, 215, 193, 69, - 29, 15, 255, 156, 270, -188, 157, -54, -54, -54, - -54, -54, 123, 120, -54, -54, -54, -136, -54, -54, - -114, -130, -130, 62, -54, 39, -39, -39, -131, -89, - -92, -106, 19, 11, 35, 35, -36, 71, 72, 73, - 115, -197, -73, -65, -65, -65, -35, 151, 76, -198, - -198, -36, -36, 56, -39, -198, -198, -198, 56, 54, - 22, 11, 11, -198, 11, 11, -198, -198, -36, -84, - -82, 83, -39, -198, 115, -198, 56, 56, -198, -198, - -198, -198, -198, -63, 30, 35, -2, -197, -197, -98, - -102, -80, -42, -43, -43, -42, -43, 43, 43, 43, - 48, 43, 48, 43, -51, -130, -198, -58, 51, 130, - 52, -197, -132, -59, 12, -41, -59, -59, 115, -104, - -105, 241, 238, 244, -188, 62, 56, -175, 85, 55, - -188, 28, -165, -165, -168, -188, -168, 28, -150, 29, - 71, -155, 219, 63, -152, -152, -153, 30, -153, -153, - -153, -161, 62, -161, 63, 63, 53, -124, -136, -135, - -191, 138, 134, 142, 143, 136, 58, 59, 60, 127, - 28, 133, 135, 156, 132, -191, -119, -120, 129, 22, - 127, 28, 156, -190, 54, 162, 215, 162, 129, -136, - -110, -110, 40, 115, -54, -40, 11, 102, -125, -37, - -35, 76, -65, -65, -198, -198, -38, -140, 111, 190, - 150, 188, 184, 204, 195, 217, 186, 218, -137, -140, - -65, -65, -65, -65, 264, -87, 84, -39, 82, -125, - -65, -65, -97, 53, -98, -75, -77, -76, -197, -2, - -93, -124, -96, -124, -59, 56, 85, -46, -45, 53, - 54, -47, 53, -45, 43, 43, 127, 127, 127, -96, - -87, -39, -59, 238, 242, 243, -174, -175, -178, -177, - -124, -181, -168, -168, 55, -151, 53, -65, 57, -153, - -153, -188, 111, 57, 56, 57, 56, 57, 56, -54, - -135, -135, -54, -135, -124, -187, 267, -189, -188, -124, - -124, -124, -54, -114, -114, -59, -41, -198, -65, -198, - -148, -148, -148, -157, -148, 178, -148, 178, -198, -198, - 19, 19, 19, 19, -197, -34, 260, -39, 56, 56, - 27, -97, 56, -198, -198, -198, 56, 115, -198, 56, - -87, -102, -39, -39, 55, -39, -197, -197, -197, -198, - -91, 57, 56, -148, -94, -124, -159, 215, 9, -152, - 62, -152, 63, 63, -136, 26, -186, -185, -125, 55, - 54, -85, 13, -152, -188, -65, -65, -65, -65, -65, - -91, 62, -65, -65, 28, -77, 35, -2, -197, -124, - -124, -124, -91, -94, -94, -198, -94, -94, -133, -180, - -179, 54, 137, 69, -177, 57, 56, -160, 133, 28, - 132, -68, -153, -153, 57, 57, -197, 56, 85, -94, - -54, -86, 14, 16, -198, -198, -198, -198, -33, 95, - 267, -198, -198, -198, 9, -75, -2, 115, 57, -198, - -198, -198, -58, -179, -188, -169, 85, 62, 145, -124, - -149, 69, 28, 28, -182, -183, 156, -185, -175, 57, - -39, -74, -198, 265, 50, 268, -98, -198, -124, 63, - -54, 62, -198, 56, -124, -190, 40, 266, 269, 55, - -183, 35, -187, 40, -94, 158, 267, 57, 159, 268, - -193, -194, 53, -197, 269, -194, 53, 10, 9, -65, - 155, -192, 146, 141, 144, 30, -192, -198, -198, 140, - 29, 71, + -1000, -196, -1, -2, -6, -7, -8, -9, -10, -11, + -12, -13, -14, -15, -16, -20, -21, -22, -24, -25, + -26, -23, -17, -3, -4, 6, 7, -30, 9, 10, + 30, -18, 118, 119, 121, 120, 154, 122, 147, 51, + 168, 169, 171, 172, 25, 148, 149, 152, 153, 31, + 32, 124, -198, 8, 254, 55, -197, 352, -88, 15, + -29, 5, -27, -201, -27, -27, -27, -27, -27, -171, + -173, 55, 93, -122, 128, 75, 246, 125, 126, 132, + -125, -189, -124, 58, 59, 60, 264, 140, 296, 297, + 168, 179, 173, 200, 192, 265, 298, 141, 190, 193, + 233, 138, 299, 220, 227, 69, 171, 242, 300, 150, + 188, 184, 301, 273, 182, 27, 302, 229, 205, 303, + 269, 231, 183, 228, 124, 304, 143, 136, 305, 206, + 210, 306, 234, 307, 308, 309, 177, 178, 310, 139, + 236, 204, 137, 33, 266, 36, 158, 237, 208, 311, + 203, 199, 312, 313, 314, 315, 202, 176, 198, 40, + 212, 211, 213, 232, 195, 316, 317, 318, 144, 319, + 185, 18, 320, 321, 322, 323, 324, 240, 153, 325, + 156, 326, 327, 328, 329, 330, 331, 230, 207, 209, + 133, 160, 268, 332, 238, 181, 333, 145, 157, 152, + 241, 146, 334, 335, 336, 337, 338, 339, 340, 172, + 341, 342, 343, 344, 167, 235, 244, 39, 217, 345, + 175, 135, 346, 169, 164, 222, 196, 159, 347, 348, + 186, 187, 201, 174, 197, 170, 161, 154, 349, 243, + 218, 270, 194, 191, 165, 350, 162, 163, 351, 223, + 224, 166, 267, 239, 189, 219, -108, 128, 246, 125, + 224, 130, 126, 126, 127, 128, 246, 125, 126, -55, + -131, -189, -124, 128, 126, 111, 193, 233, 118, 221, + 229, -114, 230, 160, -140, 126, -110, 220, 223, 224, + 166, -189, 231, 235, 234, 225, -131, 170, -136, -136, + -136, -136, -136, 222, 222, -136, -2, -92, 17, 16, + -5, -3, -198, 6, 20, 21, -33, 41, 42, -28, + -39, 102, -40, -131, -61, 77, -66, 29, -189, -124, + 23, -65, -62, -81, -79, -80, 111, 112, 113, 100, + 101, 108, 78, 114, -70, -68, -69, -71, 62, 61, + 70, 63, 64, 65, 66, 71, 72, 73, -125, -77, + -198, 45, 46, 255, 256, 257, 258, 263, 259, 80, + 35, 245, 253, 252, 251, 249, 250, 247, 248, 261, + 262, 131, 246, 125, 106, 254, -108, -108, 11, -49, + -50, -55, -57, -131, -100, -139, 170, -103, 235, 234, + -126, -101, -125, -123, 233, 193, 232, 123, 271, 76, + 22, 24, 215, 79, 111, 16, 80, 110, 255, 118, + 49, 272, 247, 248, 245, 257, 258, 246, 221, 29, + 10, 274, 25, 148, 21, 34, 104, 120, 83, 84, + 151, 23, 149, 73, 277, 19, 52, 11, 13, 278, + 279, 14, 131, 130, 95, 127, 47, 8, 114, 26, + 92, 43, 280, 28, 281, 282, 283, 284, 45, 93, + 17, 249, 250, 31, 285, 263, 155, 106, 50, 37, + 77, 286, 287, 71, 288, 74, 53, 75, 15, 48, + 289, 290, 291, 292, 94, 121, 254, 46, 293, 125, + 6, 260, 30, 147, 44, 294, 126, 82, 261, 262, + 129, 72, 5, 132, 32, 9, 51, 54, 251, 252, + 253, 35, 81, 12, 295, -172, 93, -163, -189, -55, + 127, -55, 254, -118, 131, -118, -118, 126, -55, -189, + -189, 118, 120, 123, 53, -19, -55, -117, 131, -189, + -117, -117, -117, -55, 115, -55, -189, 30, -115, 93, + 12, 246, -189, 160, 126, 161, 128, -137, -198, -126, + -167, 127, 33, 139, -137, 164, 165, -137, -113, -112, + 227, 228, 222, 226, 12, 165, 222, 163, -137, -136, + -136, -199, 57, -93, 19, 31, -40, -131, -89, -90, + -40, -88, -2, -27, 37, -31, 21, 34, 68, 11, + -128, 76, 75, 92, -127, 22, -125, 62, 115, -40, + -63, 95, 77, 93, 94, 79, 97, 96, 107, 100, + 101, 102, 103, 104, 105, 106, 98, 99, 110, 85, + 86, 87, 88, 89, 90, 91, -109, -198, -80, -198, + 116, 117, -66, -66, -66, -66, -66, -66, -66, -66, + -198, -2, -75, -40, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -84, -40, -198, -202, -72, -198, -202, + -72, -202, -72, -202, -198, -202, -72, -202, -72, -202, + -202, -72, -198, -198, -198, -198, -198, -198, -198, -56, + 26, -55, -42, -43, -44, -45, -58, -80, -198, -55, + -55, -49, -200, 56, 11, 54, -200, 56, 115, 56, + 170, -103, -105, -104, 236, 238, 85, -130, -125, 62, + 29, 30, 57, 56, -55, -142, -145, -147, -146, -148, + -143, -144, 190, 191, 111, 194, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 30, 150, 186, 187, + 188, 189, 206, 207, 208, 209, 210, 211, 212, 213, + 173, 192, 265, 174, 175, 176, 177, 178, 179, 181, + 182, 183, 184, 185, -189, -137, 128, -189, 77, -189, + -55, -55, -137, -137, -137, 162, 162, 126, 126, 167, + -55, 56, 129, -49, 23, 53, -55, -189, -189, -132, + -131, -123, -137, -115, 62, -40, -137, -137, -137, -55, + -137, -137, -168, 11, 95, -137, -137, 11, -111, 11, + 95, -40, -116, 93, 53, 9, 95, 56, 18, 115, + 56, -91, 24, 25, -92, -199, -33, -67, -125, 63, + 66, -32, 44, -55, -40, -40, -73, 71, 77, 72, + 73, -127, 102, -132, -126, -123, -66, -74, -77, -80, + 67, 95, 93, 94, 79, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -138, -189, 62, -189, -65, -65, -125, -38, 21, 34, + -37, -39, -199, 56, -199, -2, -37, -37, -40, -40, + -81, 62, -37, -81, 62, -37, -37, -31, -82, -83, + 81, -81, -125, -131, -199, -66, -125, -125, -37, -38, + -38, -37, -37, -96, 156, -55, 30, 56, -51, -53, + -52, -54, 43, 47, 49, 44, 45, 46, 50, -135, + 22, -42, -198, -134, 156, -133, 22, -131, 62, -96, + 54, -42, -55, -42, -57, -131, 102, -103, -105, 56, + 237, 239, 240, 53, 74, -40, -154, 110, -174, -175, + -176, -126, 62, 63, -163, -164, -165, -177, 142, -182, + 133, 135, 132, -166, 143, 127, 28, 57, -159, 71, + 77, -155, 218, -149, 55, -149, -149, -149, -149, -153, + 193, -153, -153, -153, 55, 55, -149, -149, -149, -157, + 55, -157, -157, -158, 55, -158, -129, 54, -55, -137, + 23, -137, -119, 123, 120, 121, -185, 119, 215, 193, + 69, 29, 15, 255, 156, 270, -189, 157, -55, -55, + -55, -55, -55, 123, 120, -55, -55, -55, -137, -55, + -55, -115, -131, -131, 62, -55, 39, -40, -40, -132, + -90, -93, -107, 19, 11, 35, 35, -37, 71, 72, + 73, 115, -198, -74, -66, -66, -66, -36, 151, 76, + -199, -199, -37, -37, 56, -40, -199, -199, -199, 56, + 54, 22, 11, 11, -199, 11, 11, -199, -199, -37, + -85, -83, 83, -40, -199, 115, -199, 56, 56, -199, + -199, -199, -199, -199, -64, 30, 35, -2, -198, -198, + -99, -102, -81, -43, -44, -44, -43, -44, 43, 43, + 43, 48, 43, 48, 43, -52, -131, -199, -59, 51, + 130, 52, -198, -133, -60, 12, -42, -60, -60, 115, + -104, -106, 241, 238, 244, -189, 62, 56, -176, 85, + 55, -189, 28, -166, -166, -169, -189, -169, 28, -151, + 29, 71, -156, 219, 63, -153, -153, -154, 30, -154, + -154, -154, -162, 62, -162, 63, 63, 53, -125, -137, + -136, -192, 138, 134, 142, 143, 136, 58, 59, 60, + 127, 28, 133, 135, 156, 132, -192, -120, -121, 129, + 22, 127, 28, 156, -191, 54, 162, 215, 162, 129, + -137, -111, -111, 40, 115, -55, -41, 11, 102, -126, + -38, -36, 76, -66, -66, -199, -199, -39, -141, 111, + 190, 150, 188, 184, 204, 195, 217, 186, 218, -138, + -141, -66, -66, -66, -66, 264, -88, 84, -40, 82, + -126, -66, -66, -98, 53, -99, -76, -78, -77, -198, + -2, -94, -125, -97, -125, -60, 56, 85, -47, -46, + 53, 54, -48, 53, -46, 43, 43, 127, 127, 127, + -97, -88, -40, -60, 238, 242, 243, -175, -176, -179, + -178, -125, -182, -169, -169, 55, -152, 53, -66, 57, + -154, -154, -189, 111, 57, 56, 57, 56, 57, 56, + -55, -136, -136, -55, -136, -125, -188, 267, -190, -189, + -125, -125, -125, -55, -115, -115, -60, -42, -199, -66, + -199, -149, -149, -149, -158, -149, 178, -149, 178, -199, + -199, 19, 19, 19, 19, -198, -35, 260, -40, 56, + 56, 27, -98, 56, -199, -199, -199, 56, 115, -199, + 56, -88, -102, -40, -40, 55, -40, -198, -198, -198, + -199, -92, 57, 56, -149, -95, -125, -160, 215, 9, + -153, 62, -153, 63, 63, -137, 26, -187, -186, -126, + 55, 54, -86, 13, -153, -189, -66, -66, -66, -66, + -66, -92, 62, -66, -66, 28, -78, 35, -2, -198, + -125, -125, -125, -92, -95, -95, -199, -95, -95, -134, + -181, -180, 54, 137, 69, -178, 57, 56, -161, 133, + 28, 132, -69, -154, -154, 57, 57, -198, 56, 85, + -95, -55, -87, 14, 16, -199, -199, -199, -199, -34, + 95, 267, -199, -199, -199, 9, -76, -2, 115, 57, + -199, -199, -199, -59, -180, -189, -170, 85, 62, 145, + -125, -150, 69, 28, 28, -183, -184, 156, -186, -176, + 57, -40, -75, -199, 265, 50, 268, -99, -199, -125, + 63, -55, 62, -199, 56, -125, -191, 40, 266, 269, + 55, -184, 35, -188, 40, -95, 158, 267, 57, 159, + 268, -194, -195, 53, -198, 269, -195, 53, 10, 9, + -66, 155, -193, 146, 141, 144, 30, -193, -199, -199, + 140, 29, 71, } var yyDef = [...]int{ - 23, -2, 2, -2, 5, 6, 7, 8, 9, 10, + 24, -2, 2, -2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 577, 0, 330, 330, 330, 330, 330, 330, - 0, 648, 631, 0, 0, 0, 0, -2, 317, 318, - 0, 320, 321, 952, 952, 952, 952, 952, 0, 0, - 952, 0, 38, 39, 950, 1, 3, 585, 0, 0, - 334, 337, 332, 0, 631, 631, 0, 0, 68, 69, - 0, 0, 0, 939, 0, 629, 629, 629, 649, 650, - 653, 654, 24, 25, 26, 779, 780, 781, 782, 783, + 21, 22, 23, 577, 0, 330, 330, 330, 330, 330, + 330, 0, 649, 632, 0, 0, 0, 0, -2, 317, + 318, 0, 320, 321, 953, 953, 953, 953, 953, 0, + 0, 953, 0, 39, 40, 951, 1, 3, 585, 0, + 0, 334, 337, 332, 0, 632, 632, 0, 0, 68, + 69, 0, 0, 0, 940, 0, 630, 630, 630, 650, + 651, 654, 655, 25, 26, 27, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, @@ -3076,23 +3078,23 @@ var yyDef = [...]int{ 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, - 934, 935, 936, 937, 938, 940, 941, 942, 943, 944, - 945, 946, 947, 948, 949, 0, 0, 0, 0, 0, - 632, 0, 627, 0, 627, 627, 627, 0, 268, 403, - 657, 658, 939, 0, 0, 0, 308, 0, 953, 280, - 0, 282, 953, 0, 953, 0, 289, 0, 0, 295, - 953, 300, 314, 315, 302, 316, 319, 322, 323, 324, - 325, 326, 952, 952, 329, 32, 589, 0, 0, 577, - 34, 0, 330, 335, 336, 340, 338, 339, 331, 0, - 349, 353, 0, 413, 0, 418, 420, -2, -2, 0, - 455, 456, 457, 458, 459, 0, 0, 0, 0, 0, - 0, 0, 0, 483, 484, 485, 486, 562, 563, 564, - 565, 566, 567, 568, 569, 422, 423, 559, 609, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, - 520, 520, 520, 520, 520, 520, 520, 520, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 49, 403, 53, 0, 928, 613, -2, -2, 0, - 0, 655, 656, -2, 792, -2, 661, 662, 663, 664, + 934, 935, 936, 937, 938, 939, 941, 942, 943, 944, + 945, 946, 947, 948, 949, 950, 0, 0, 0, 0, + 0, 633, 0, 628, 0, 628, 628, 628, 0, 268, + 403, 658, 659, 940, 0, 0, 0, 308, 0, 954, + 280, 0, 282, 954, 0, 954, 0, 289, 0, 0, + 295, 954, 300, 314, 315, 302, 316, 319, 322, 323, + 324, 325, 326, 953, 953, 329, 33, 589, 0, 0, + 577, 35, 0, 330, 335, 336, 340, 338, 339, 331, + 0, 349, 353, 0, 413, 0, 418, 420, -2, -2, + 0, 455, 456, 457, 458, 459, 0, 0, 0, 0, + 0, 0, 0, 0, 483, 484, 485, 486, 562, 563, + 564, 565, 566, 567, 568, 569, 422, 423, 559, 609, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, + 0, 520, 520, 520, 520, 520, 520, 520, 520, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 48, 50, 403, 54, 0, 929, 613, -2, -2, + 0, 0, 656, 657, -2, 793, -2, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, @@ -3104,110 +3106,110 @@ var yyDef = [...]int{ 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, - 775, 776, 777, 778, 0, 0, 87, 0, 85, 0, - 953, 0, 0, 0, 0, 0, 0, 953, 953, 953, - 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, - 0, 0, 267, 0, 269, 953, 308, 272, 0, 0, - 953, 953, 953, 0, 953, 953, 279, 954, 955, 0, - 189, 190, 191, 283, 953, 953, 285, 0, 305, 303, - 304, 297, 298, 0, 311, 292, 293, 296, 327, 328, - 33, 951, 27, 0, 0, 586, 0, 578, 579, 582, - 585, 32, 337, 0, 343, 341, 342, 333, 0, 350, - 0, 0, 0, 354, 0, 356, 357, 0, 416, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 440, 441, - 442, 443, 444, 445, 446, 419, 0, 433, 0, 0, - 0, 475, 476, 477, 478, 479, 480, 481, 0, 345, - 32, 0, 453, 0, 0, 0, 0, 0, 0, 0, - 0, 340, 0, 551, 0, 504, 512, 0, 505, 513, - 506, 514, 507, 0, 508, 515, 509, 516, 510, 511, - 517, 0, 0, 0, 345, 345, 0, 0, 51, 0, - 402, 0, 360, 362, 363, 364, -2, 0, 386, -2, - 0, 0, 0, 45, 46, 0, 0, 0, 0, 54, - 928, 56, 57, 0, 0, 0, 165, 622, 623, 624, - 620, 214, 0, 0, 153, 149, 93, 94, 95, 142, - 97, 142, 142, 142, 142, 162, 162, 162, 162, 125, - 126, 127, 128, 129, 0, 0, 112, 142, 142, 142, - 116, 132, 133, 134, 135, 136, 137, 138, 139, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 144, 144, - 144, 146, 146, 651, 71, 0, 953, 0, 953, 83, - 0, 228, 230, 231, 0, 0, 0, 0, 0, 0, - 0, 0, 262, 628, 0, 953, 265, 266, 404, 659, - 660, 270, 271, 309, 310, 273, 274, 275, 276, 277, - 278, 0, 192, 193, 284, 288, 0, 308, 0, 0, - 290, 291, 0, 0, 590, 0, 0, 0, 0, 0, - 581, 583, 584, 589, 35, 340, 0, 570, 0, 0, - 0, 344, 30, 414, 415, 417, 434, 0, 436, 438, - 355, 351, 0, 560, -2, 424, 425, 449, 450, 451, - 0, 0, 0, 0, 447, 429, 0, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 474, - 535, 536, 0, 472, 473, 482, 0, 0, 0, 346, - 347, 452, 0, 608, 32, 0, 0, 0, 0, 457, - 562, 0, 457, 562, 0, 0, 0, 557, 554, 0, - 0, 559, 0, 521, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, - 0, 391, 0, 0, 394, 0, 0, 0, 0, 385, - 0, 0, 406, 873, 387, 0, 389, 390, 411, 0, - 411, 48, 411, 50, 0, 405, 614, 55, 0, 0, - 60, 61, 615, 616, 617, 618, 0, 84, 215, 217, - 220, 221, 222, 88, 89, 90, 0, 0, 202, 0, - 0, 196, 196, 0, 194, 195, 86, 156, 154, 0, - 151, 150, 96, 0, 162, 162, 119, 120, 165, 0, - 165, 165, 165, 0, 0, 113, 114, 115, 107, 0, - 108, 109, 110, 0, 111, 0, 0, 953, 73, 630, - 74, 952, 0, 0, 643, 229, 633, 634, 635, 636, - 637, 638, 639, 640, 641, 642, 0, 75, 233, 235, - 234, 238, 0, 0, 0, 260, 953, 264, 305, 305, - 287, 306, 307, 312, 294, 0, 587, 588, 0, 580, - 28, 0, 625, 626, 571, 572, 358, 435, 437, 439, - 0, 345, 426, 447, 430, 0, 427, 0, 0, 421, - 487, 0, 0, 0, 454, -2, 491, 492, 0, 0, - 0, 0, 0, 528, 0, 0, 529, 0, 577, 0, - 555, 0, 0, 503, 0, 522, 0, 0, 523, 524, - 525, 526, 527, 602, 0, 0, -2, 0, 0, 411, - 610, 0, 361, 380, 382, 0, 377, 392, 393, 395, - 0, 397, 0, 399, 400, 365, 367, 368, 0, 0, - 0, 0, 388, 577, 0, 411, 43, 44, 0, 58, - 59, 0, 0, 65, 166, 167, 0, 218, 0, 0, - 0, 184, 196, 196, 187, 197, 188, 0, 158, 0, - 155, 92, 152, 0, 165, 165, 121, 0, 122, 123, - 124, 0, 140, 0, 0, 0, 0, 652, 72, 223, - 952, 240, 241, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 952, 0, 952, 644, 645, - 646, 647, 0, 78, 0, 0, 0, 0, 0, 263, - 308, 308, 591, 0, 29, 411, 0, 352, 561, 0, - 428, 0, 448, 431, 488, 489, 348, 0, 142, 142, - 540, 142, 146, 543, 142, 545, 142, 548, 0, 0, - 0, 0, 0, 0, 0, 552, 502, 558, 0, 560, - 0, 0, 36, 0, 602, 592, 604, 606, 0, 32, - 0, 598, 0, 372, 577, 0, 0, 374, 381, 0, - 0, 375, 0, 376, 396, 398, 0, 0, 0, 0, - 585, 412, 42, 62, 63, 64, 216, 219, 0, 198, - 142, 201, 185, 186, 0, 160, 0, 157, 143, 117, - 118, 163, 164, 162, 0, 162, 0, 147, 0, 953, - 224, 225, 226, 227, 0, 232, 0, 76, 77, 0, - 0, 237, 261, 281, 286, 573, 359, 490, 432, 493, - 537, 162, 541, 542, 544, 546, 547, 549, 495, 494, - 0, 0, 0, 0, 0, 585, 0, 556, 0, 0, - 0, 37, 0, 607, -2, 0, 0, 0, 52, 0, - 585, 611, 612, 378, 0, 383, 0, 0, 0, 386, - 41, 176, 0, 200, 0, 370, 168, 161, 0, 165, - 141, 165, 0, 0, 70, 0, 79, 80, 0, 0, - 0, 575, 0, 538, 539, 0, 0, 0, 0, 530, - 0, 553, 0, 0, 0, 605, 0, -2, 0, 600, - 599, 373, 40, 0, 0, 408, 0, 0, 406, 175, - 177, 0, 182, 0, 199, 0, 0, 173, 0, 170, - 172, 159, 130, 131, 145, 148, 0, 0, 0, 0, - 239, 31, 0, 0, 496, 498, 497, 499, 0, 0, - 0, 501, 518, 519, 0, 595, 32, 0, 379, 407, - 409, 410, 369, 178, 179, 0, 183, 181, 0, 371, - 91, 0, 169, 171, 0, 255, 0, 81, 82, 75, - 576, 574, 500, 0, 0, 0, 603, -2, 601, 180, - 0, 174, 254, 0, 0, 78, 531, 0, 534, 0, - 256, 0, 236, 532, 0, 0, 0, 203, 0, 0, - 204, 205, 0, 0, 533, 206, 0, 0, 0, 0, - 0, 207, 209, 210, 0, 0, 208, 257, 258, 211, - 212, 213, + 775, 776, 777, 778, 779, 0, 0, 87, 0, 85, + 0, 954, 0, 0, 0, 0, 0, 0, 954, 954, + 954, 0, 0, 0, 0, 259, 0, 0, 0, 0, + 0, 0, 0, 267, 0, 269, 954, 308, 272, 0, + 0, 954, 954, 954, 0, 954, 954, 279, 955, 956, + 0, 189, 190, 191, 283, 954, 954, 285, 0, 305, + 303, 304, 297, 298, 0, 311, 292, 293, 296, 327, + 328, 34, 952, 28, 0, 0, 586, 0, 578, 579, + 582, 585, 33, 337, 0, 343, 341, 342, 333, 0, + 350, 0, 0, 0, 354, 0, 356, 357, 0, 416, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, + 441, 442, 443, 444, 445, 446, 419, 0, 433, 0, + 0, 0, 475, 476, 477, 478, 479, 480, 481, 0, + 345, 33, 0, 453, 0, 0, 0, 0, 0, 0, + 0, 0, 340, 0, 551, 0, 504, 512, 0, 505, + 513, 506, 514, 507, 0, 508, 515, 509, 516, 510, + 511, 517, 0, 0, 0, 345, 345, 0, 0, 52, + 0, 402, 0, 360, 362, 363, 364, -2, 0, 386, + -2, 0, 0, 0, 46, 47, 0, 0, 0, 0, + 929, 614, 56, 57, 0, 0, 0, 165, 623, 624, + 625, 621, 214, 0, 0, 153, 149, 93, 94, 95, + 142, 97, 142, 142, 142, 142, 162, 162, 162, 162, + 125, 126, 127, 128, 129, 0, 0, 112, 142, 142, + 142, 116, 132, 133, 134, 135, 136, 137, 138, 139, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 144, + 144, 144, 146, 146, 652, 71, 0, 954, 0, 954, + 83, 0, 228, 230, 231, 0, 0, 0, 0, 0, + 0, 0, 0, 262, 629, 0, 954, 265, 266, 404, + 660, 661, 270, 271, 309, 310, 273, 274, 275, 276, + 277, 278, 0, 192, 193, 284, 288, 0, 308, 0, + 0, 290, 291, 0, 0, 590, 0, 0, 0, 0, + 0, 581, 583, 584, 589, 36, 340, 0, 570, 0, + 0, 0, 344, 31, 414, 415, 417, 434, 0, 436, + 438, 355, 351, 0, 560, -2, 424, 425, 449, 450, + 451, 0, 0, 0, 0, 447, 429, 0, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, + 474, 535, 536, 0, 472, 473, 482, 0, 0, 0, + 346, 347, 452, 0, 608, 33, 0, 0, 0, 0, + 457, 562, 0, 457, 562, 0, 0, 0, 557, 554, + 0, 0, 559, 0, 521, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, + 0, 0, 391, 0, 0, 394, 0, 0, 0, 0, + 385, 0, 0, 406, 874, 387, 0, 389, 390, 411, + 0, 411, 49, 411, 51, 0, 405, 615, 55, 0, + 0, 60, 61, 616, 617, 618, 619, 0, 84, 215, + 217, 220, 221, 222, 88, 89, 90, 0, 0, 202, + 0, 0, 196, 196, 0, 194, 195, 86, 156, 154, + 0, 151, 150, 96, 0, 162, 162, 119, 120, 165, + 0, 165, 165, 165, 0, 0, 113, 114, 115, 107, + 0, 108, 109, 110, 0, 111, 0, 0, 954, 73, + 631, 74, 953, 0, 0, 644, 229, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 75, 233, + 235, 234, 238, 0, 0, 0, 260, 954, 264, 305, + 305, 287, 306, 307, 312, 294, 0, 587, 588, 0, + 580, 29, 0, 626, 627, 571, 572, 358, 435, 437, + 439, 0, 345, 426, 447, 430, 0, 427, 0, 0, + 421, 487, 0, 0, 0, 454, -2, 491, 492, 0, + 0, 0, 0, 0, 528, 0, 0, 529, 0, 577, + 0, 555, 0, 0, 503, 0, 522, 0, 0, 523, + 524, 525, 526, 527, 602, 0, 0, -2, 0, 0, + 411, 610, 0, 361, 380, 382, 0, 377, 392, 393, + 395, 0, 397, 0, 399, 400, 365, 367, 368, 0, + 0, 0, 0, 388, 577, 0, 411, 44, 45, 0, + 58, 59, 0, 0, 65, 166, 167, 0, 218, 0, + 0, 0, 184, 196, 196, 187, 197, 188, 0, 158, + 0, 155, 92, 152, 0, 165, 165, 121, 0, 122, + 123, 124, 0, 140, 0, 0, 0, 0, 653, 72, + 223, 953, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 953, 0, 953, 645, + 646, 647, 648, 0, 78, 0, 0, 0, 0, 0, + 263, 308, 308, 591, 0, 30, 411, 0, 352, 561, + 0, 428, 0, 448, 431, 488, 489, 348, 0, 142, + 142, 540, 142, 146, 543, 142, 545, 142, 548, 0, + 0, 0, 0, 0, 0, 0, 552, 502, 558, 0, + 560, 0, 0, 37, 0, 602, 592, 604, 606, 0, + 33, 0, 598, 0, 372, 577, 0, 0, 374, 381, + 0, 0, 375, 0, 376, 396, 398, 0, 0, 0, + 0, 585, 412, 43, 62, 63, 64, 216, 219, 0, + 198, 142, 201, 185, 186, 0, 160, 0, 157, 143, + 117, 118, 163, 164, 162, 0, 162, 0, 147, 0, + 954, 224, 225, 226, 227, 0, 232, 0, 76, 77, + 0, 0, 237, 261, 281, 286, 573, 359, 490, 432, + 493, 537, 162, 541, 542, 544, 546, 547, 549, 495, + 494, 0, 0, 0, 0, 0, 585, 0, 556, 0, + 0, 0, 38, 0, 607, -2, 0, 0, 0, 53, + 0, 585, 611, 612, 378, 0, 383, 0, 0, 0, + 386, 42, 176, 0, 200, 0, 370, 168, 161, 0, + 165, 141, 165, 0, 0, 70, 0, 79, 80, 0, + 0, 0, 575, 0, 538, 539, 0, 0, 0, 0, + 530, 0, 553, 0, 0, 0, 605, 0, -2, 0, + 600, 599, 373, 41, 0, 0, 408, 0, 0, 406, + 175, 177, 0, 182, 0, 199, 0, 0, 173, 0, + 170, 172, 159, 130, 131, 145, 148, 0, 0, 0, + 0, 239, 32, 0, 0, 496, 498, 497, 499, 0, + 0, 0, 501, 518, 519, 0, 595, 33, 0, 379, + 407, 409, 410, 369, 178, 179, 0, 183, 181, 0, + 371, 91, 0, 169, 171, 0, 255, 0, 81, 82, + 75, 576, 574, 500, 0, 0, 0, 603, -2, 601, + 180, 0, 174, 254, 0, 0, 78, 531, 0, 534, + 0, 256, 0, 236, 532, 0, 0, 0, 203, 0, + 0, 204, 205, 0, 0, 533, 206, 0, 0, 0, + 0, 0, 207, 209, 210, 0, 0, 208, 257, 258, + 211, 212, 213, } var yyTok1 = [...]int{ @@ -3612,53 +3614,53 @@ yydefault: case 1: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:325 +//line sql.y:329 { setParseTree(yylex, yyDollar[1].statement) } case 2: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:330 +//line sql.y:334 { } case 3: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:331 +//line sql.y:335 { } case 4: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:335 +//line sql.y:339 { yyVAL.statement = yyDollar[1].selStmt } - case 23: + case 24: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:357 +//line sql.y:362 { setParseTree(yylex, nil) } - case 24: + case 25: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:363 +//line sql.y:368 { yyVAL.colIdent = NewColIdentWithAt(string(yyDollar[1].bytes), NoAt) } - case 25: + case 26: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:367 +//line sql.y:372 { yyVAL.colIdent = NewColIdentWithAt(string(yyDollar[1].bytes), SingleAt) } - case 26: + case 27: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:371 +//line sql.y:376 { yyVAL.colIdent = NewColIdentWithAt(string(yyDollar[1].bytes), DoubleAt) } - case 27: + case 28: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:377 +//line sql.y:382 { sel := yyDollar[1].selStmt.(*Select) sel.OrderBy = yyDollar[2].orderBy @@ -3666,57 +3668,57 @@ yydefault: sel.Lock = yyDollar[4].str yyVAL.selStmt = sel } - case 28: + case 29: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:385 +//line sql.y:390 { yyVAL.selStmt = &Union{Type: yyDollar[2].str, Left: yyDollar[1].selStmt, Right: yyDollar[3].selStmt, OrderBy: yyDollar[4].orderBy, Limit: yyDollar[5].limit, Lock: yyDollar[6].str} } - case 29: + case 30: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:389 +//line sql.y:394 { yyVAL.selStmt = &Select{Comments: Comments(yyDollar[2].bytes2), Cache: yyDollar[3].str, SelectExprs: SelectExprs{Nextval{Expr: yyDollar[5].expr}}, From: TableExprs{&AliasedTableExpr{Expr: yyDollar[7].tableName}}} } - case 30: + case 31: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:395 +//line sql.y:400 { yyVAL.statement = &Stream{Comments: Comments(yyDollar[2].bytes2), SelectExpr: yyDollar[3].selectExpr, Table: yyDollar[5].tableName} } - case 31: + case 32: yyDollar = yyS[yypt-10 : yypt+1] -//line sql.y:402 +//line sql.y:407 { yyVAL.selStmt = &Select{Comments: Comments(yyDollar[2].bytes2), Cache: yyDollar[3].str, Distinct: yyDollar[4].str, Hints: yyDollar[5].str, SelectExprs: yyDollar[6].selectExprs, From: yyDollar[7].tableExprs, Where: NewWhere(WhereStr, yyDollar[8].expr), GroupBy: GroupBy(yyDollar[9].exprs), Having: NewWhere(HavingStr, yyDollar[10].expr)} } - case 32: + case 33: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:408 +//line sql.y:413 { yyVAL.selStmt = yyDollar[1].selStmt } - case 33: + case 34: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:412 +//line sql.y:417 { yyVAL.selStmt = &ParenSelect{Select: yyDollar[2].selStmt} } - case 34: + case 35: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:418 +//line sql.y:423 { yyVAL.selStmt = yyDollar[1].selStmt } - case 35: + case 36: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:422 +//line sql.y:427 { yyVAL.selStmt = &ParenSelect{Select: yyDollar[2].selStmt} } - case 36: + case 37: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:429 +//line sql.y:434 { // insert_data returns a *Insert pre-filled with Columns & Values ins := yyDollar[6].ins @@ -3728,9 +3730,9 @@ yydefault: ins.OnDup = OnDup(yyDollar[7].updateExprs) yyVAL.statement = ins } - case 37: + case 38: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:441 +//line sql.y:446 { cols := make(Columns, 0, len(yyDollar[7].updateExprs)) vals := make(ValTuple, 0, len(yyDollar[8].updateExprs)) @@ -3740,194 +3742,188 @@ yydefault: } yyVAL.statement = &Insert{Action: yyDollar[1].str, Comments: Comments(yyDollar[2].bytes2), Ignore: yyDollar[3].str, Table: yyDollar[4].tableName, Partitions: yyDollar[5].partitions, Columns: cols, Rows: Values{vals}, OnDup: OnDup(yyDollar[8].updateExprs)} } - case 38: + case 39: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:453 +//line sql.y:458 { yyVAL.str = InsertStr } - case 39: + case 40: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:457 +//line sql.y:462 { yyVAL.str = ReplaceStr } - case 40: + case 41: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:463 +//line sql.y:468 { yyVAL.statement = &Update{Comments: Comments(yyDollar[2].bytes2), Ignore: yyDollar[3].str, TableExprs: yyDollar[4].tableExprs, Exprs: yyDollar[6].updateExprs, Where: NewWhere(WhereStr, yyDollar[7].expr), OrderBy: yyDollar[8].orderBy, Limit: yyDollar[9].limit} } - case 41: + case 42: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:469 +//line sql.y:474 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), TableExprs: TableExprs{&AliasedTableExpr{Expr: yyDollar[4].tableName}}, Partitions: yyDollar[5].partitions, Where: NewWhere(WhereStr, yyDollar[6].expr), OrderBy: yyDollar[7].orderBy, Limit: yyDollar[8].limit} } - case 42: + case 43: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:473 +//line sql.y:478 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[4].tableNames, TableExprs: yyDollar[6].tableExprs, Where: NewWhere(WhereStr, yyDollar[7].expr)} } - case 43: - yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:477 - { - yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[3].tableNames, TableExprs: yyDollar[5].tableExprs, Where: NewWhere(WhereStr, yyDollar[6].expr)} - } case 44: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:481 +//line sql.y:482 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[3].tableNames, TableExprs: yyDollar[5].tableExprs, Where: NewWhere(WhereStr, yyDollar[6].expr)} } case 45: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] //line sql.y:486 { + yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[3].tableNames, TableExprs: yyDollar[5].tableExprs, Where: NewWhere(WhereStr, yyDollar[6].expr)} } case 46: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:487 +//line sql.y:491 { } case 47: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:491 +//line sql.y:492 { - yyVAL.tableNames = TableNames{yyDollar[1].tableName} } case 48: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:496 + { + yyVAL.tableNames = TableNames{yyDollar[1].tableName} + } + case 49: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:495 +//line sql.y:500 { yyVAL.tableNames = append(yyVAL.tableNames, yyDollar[3].tableName) } - case 49: + case 50: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:501 +//line sql.y:506 { yyVAL.tableNames = TableNames{yyDollar[1].tableName} } - case 50: + case 51: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:505 +//line sql.y:510 { yyVAL.tableNames = append(yyVAL.tableNames, yyDollar[3].tableName) } - case 51: + case 52: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:510 +//line sql.y:515 { yyVAL.partitions = nil } - case 52: + case 53: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:514 +//line sql.y:519 { yyVAL.partitions = yyDollar[3].partitions } - case 53: + case 54: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:520 +//line sql.y:525 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Exprs: yyDollar[3].setExprs} } - case 54: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:524 - { - yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Scope: yyDollar[3].str, Exprs: yyDollar[4].setExprs} - } case 55: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:528 +//line sql.y:531 { - yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Scope: yyDollar[3].str, Exprs: yyDollar[5].setExprs} + yyVAL.statement = &SetTransaction{Comments: Comments(yyDollar[2].bytes2), Scope: yyDollar[3].str, Characteristics: yyDollar[5].characteristics} } case 56: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:532 +//line sql.y:535 { - yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Exprs: yyDollar[4].setExprs} + yyVAL.statement = &SetTransaction{Comments: Comments(yyDollar[2].bytes2), Characteristics: yyDollar[4].characteristics} } case 57: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:538 +//line sql.y:541 { - yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} + yyVAL.characteristics = []Characteristic{yyDollar[1].characteristic} } case 58: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:542 +//line sql.y:545 { - yyVAL.setExprs = append(yyVAL.setExprs, yyDollar[3].setExpr) + yyVAL.characteristics = append(yyVAL.characteristics, yyDollar[3].characteristic) } case 59: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:548 +//line sql.y:551 { - yyVAL.setExpr = &SetExpr{Name: NewColIdent(TransactionStr), Expr: NewStrVal([]byte(yyDollar[3].str))} + yyVAL.characteristic = &IsolationLevel{Level: string(yyDollar[3].str)} } case 60: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:552 +//line sql.y:555 { - yyVAL.setExpr = &SetExpr{Name: NewColIdent(TransactionStr), Expr: NewStrVal([]byte(TxReadWrite))} + yyVAL.characteristic = &AccessMode{Mode: TxReadWrite} } case 61: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:556 +//line sql.y:559 { - yyVAL.setExpr = &SetExpr{Name: NewColIdent(TransactionStr), Expr: NewStrVal([]byte(TxReadOnly))} + yyVAL.characteristic = &AccessMode{Mode: TxReadOnly} } case 62: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:562 +//line sql.y:565 { - yyVAL.str = IsolationLevelRepeatableRead + yyVAL.str = RepeatableRead } case 63: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:566 +//line sql.y:569 { - yyVAL.str = IsolationLevelReadCommitted + yyVAL.str = ReadCommitted } case 64: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:570 +//line sql.y:573 { - yyVAL.str = IsolationLevelReadUncommitted + yyVAL.str = ReadUncommitted } case 65: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:574 +//line sql.y:577 { - yyVAL.str = IsolationLevelSerializable + yyVAL.str = Serializable } case 66: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:580 +//line sql.y:583 { yyVAL.str = SessionStr } case 67: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:584 +//line sql.y:587 { yyVAL.str = GlobalStr } case 68: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:590 +//line sql.y:593 { yyDollar[1].ddl.TableSpec = yyDollar[2].TableSpec yyVAL.statement = yyDollar[1].ddl } case 69: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:595 +//line sql.y:598 { // Create table [name] like [name] yyDollar[1].ddl.OptLike = yyDollar[2].optLike @@ -3935,139 +3931,139 @@ yydefault: } case 70: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:601 +//line sql.y:604 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[7].tableName} } case 71: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:606 +//line sql.y:609 { yyVAL.statement = &DDL{Action: CreateStr, Table: yyDollar[3].tableName.ToViewName()} } case 72: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:610 +//line sql.y:613 { yyVAL.statement = &DDL{Action: CreateStr, Table: yyDollar[5].tableName.ToViewName()} } case 73: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:614 +//line sql.y:617 { yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].colIdent.String())} } case 74: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:618 +//line sql.y:621 { yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].colIdent.String())} } case 75: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:623 +//line sql.y:626 { yyVAL.colIdent = NewColIdent("") } case 76: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:627 +//line sql.y:630 { yyVAL.colIdent = yyDollar[2].colIdent } case 77: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:633 +//line sql.y:636 { yyVAL.colIdent = yyDollar[1].colIdent } case 78: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:638 +//line sql.y:641 { var v []VindexParam yyVAL.vindexParams = v } case 79: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:643 +//line sql.y:646 { yyVAL.vindexParams = yyDollar[2].vindexParams } case 80: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:649 +//line sql.y:652 { yyVAL.vindexParams = make([]VindexParam, 0, 4) yyVAL.vindexParams = append(yyVAL.vindexParams, yyDollar[1].vindexParam) } case 81: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:654 +//line sql.y:657 { yyVAL.vindexParams = append(yyVAL.vindexParams, yyDollar[3].vindexParam) } case 82: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:660 +//line sql.y:663 { yyVAL.vindexParam = VindexParam{Key: yyDollar[1].colIdent, Val: yyDollar[3].str} } case 83: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:666 +//line sql.y:669 { yyVAL.ddl = &DDL{Action: CreateStr, Table: yyDollar[4].tableName} setDDL(yylex, yyVAL.ddl) } case 84: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:673 +//line sql.y:676 { yyVAL.TableSpec = yyDollar[2].TableSpec yyVAL.TableSpec.Options = yyDollar[4].str } case 85: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:680 +//line sql.y:683 { yyVAL.optLike = &OptLike{LikeTable: yyDollar[2].tableName} } case 86: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:684 +//line sql.y:687 { yyVAL.optLike = &OptLike{LikeTable: yyDollar[3].tableName} } case 87: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:690 +//line sql.y:693 { yyVAL.TableSpec = &TableSpec{} yyVAL.TableSpec.AddColumn(yyDollar[1].columnDefinition) } case 88: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:695 +//line sql.y:698 { yyVAL.TableSpec.AddColumn(yyDollar[3].columnDefinition) } case 89: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:699 +//line sql.y:702 { yyVAL.TableSpec.AddIndex(yyDollar[3].indexDefinition) } case 90: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:703 +//line sql.y:706 { yyVAL.TableSpec.AddConstraint(yyDollar[3].constraintDefinition) } case 91: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:709 +//line sql.y:712 { yyDollar[2].columnType.NotNull = yyDollar[3].boolVal yyDollar[2].columnType.Default = yyDollar[4].optVal @@ -4079,7 +4075,7 @@ yydefault: } case 92: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:720 +//line sql.y:723 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].boolVal @@ -4087,74 +4083,74 @@ yydefault: } case 96: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:731 +//line sql.y:734 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].sqlVal } case 97: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:736 +//line sql.y:739 { yyVAL.columnType = yyDollar[1].columnType } case 98: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:742 +//line sql.y:745 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 99: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:746 +//line sql.y:749 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 100: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:750 +//line sql.y:753 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 101: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:754 +//line sql.y:757 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 102: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:758 +//line sql.y:761 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 103: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:762 +//line sql.y:765 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 104: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:766 +//line sql.y:769 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 105: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:770 +//line sql.y:773 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 106: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:774 +//line sql.y:777 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 107: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:780 +//line sql.y:783 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -4162,7 +4158,7 @@ yydefault: } case 108: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:786 +//line sql.y:789 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -4170,7 +4166,7 @@ yydefault: } case 109: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:792 +//line sql.y:795 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -4178,7 +4174,7 @@ yydefault: } case 110: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:798 +//line sql.y:801 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -4186,7 +4182,7 @@ yydefault: } case 111: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:804 +//line sql.y:807 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -4194,206 +4190,206 @@ yydefault: } case 112: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:812 +//line sql.y:815 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 113: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:816 +//line sql.y:819 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 114: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:820 +//line sql.y:823 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 115: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:824 +//line sql.y:827 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 116: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:828 +//line sql.y:831 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 117: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:834 +//line sql.y:837 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } case 118: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:838 +//line sql.y:841 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } case 119: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:842 +//line sql.y:845 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 120: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:846 +//line sql.y:849 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 121: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:850 +//line sql.y:853 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 122: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:854 +//line sql.y:857 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 123: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:858 +//line sql.y:861 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 124: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:862 +//line sql.y:865 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 125: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:866 +//line sql.y:869 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 126: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:870 +//line sql.y:873 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 127: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:874 +//line sql.y:877 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 128: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:878 +//line sql.y:881 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 129: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:882 +//line sql.y:885 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 130: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:886 +//line sql.y:889 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} } case 131: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:891 +//line sql.y:894 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} } case 132: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:897 +//line sql.y:900 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 133: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:901 +//line sql.y:904 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 134: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:905 +//line sql.y:908 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 135: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:909 +//line sql.y:912 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 136: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:913 +//line sql.y:916 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 137: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:917 +//line sql.y:920 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 138: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:921 +//line sql.y:924 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 139: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:925 +//line sql.y:928 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 140: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:931 +//line sql.y:934 { yyVAL.strs = make([]string, 0, 4) yyVAL.strs = append(yyVAL.strs, "'"+string(yyDollar[1].bytes)+"'") } case 141: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:936 +//line sql.y:939 { yyVAL.strs = append(yyDollar[1].strs, "'"+string(yyDollar[3].bytes)+"'") } case 142: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:941 +//line sql.y:944 { yyVAL.sqlVal = nil } case 143: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:945 +//line sql.y:948 { yyVAL.sqlVal = NewIntVal(yyDollar[2].bytes) } case 144: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:950 +//line sql.y:953 { yyVAL.LengthScaleOption = LengthScaleOption{} } case 145: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:954 +//line sql.y:957 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), @@ -4402,13 +4398,13 @@ yydefault: } case 146: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:962 +//line sql.y:965 { yyVAL.LengthScaleOption = LengthScaleOption{} } case 147: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:966 +//line sql.y:969 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), @@ -4416,7 +4412,7 @@ yydefault: } case 148: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:972 +//line sql.y:975 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), @@ -4425,508 +4421,508 @@ yydefault: } case 149: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:980 +//line sql.y:983 { yyVAL.boolVal = BoolVal(false) } case 150: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:984 +//line sql.y:987 { yyVAL.boolVal = BoolVal(true) } case 151: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:989 +//line sql.y:992 { yyVAL.boolVal = BoolVal(false) } case 152: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:993 +//line sql.y:996 { yyVAL.boolVal = BoolVal(true) } case 153: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:999 +//line sql.y:1002 { yyVAL.boolVal = BoolVal(false) } case 154: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1003 +//line sql.y:1006 { yyVAL.boolVal = BoolVal(false) } case 155: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1007 +//line sql.y:1010 { yyVAL.boolVal = BoolVal(true) } case 156: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1012 +//line sql.y:1015 { yyVAL.optVal = nil } case 157: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1016 +//line sql.y:1019 { yyVAL.optVal = yyDollar[2].expr } case 158: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1021 +//line sql.y:1024 { yyVAL.optVal = nil } case 159: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1025 +//line sql.y:1028 { yyVAL.optVal = yyDollar[3].expr } case 160: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1030 +//line sql.y:1033 { yyVAL.boolVal = BoolVal(false) } case 161: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1034 +//line sql.y:1037 { yyVAL.boolVal = BoolVal(true) } case 162: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1039 +//line sql.y:1042 { yyVAL.str = "" } case 163: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1043 +//line sql.y:1046 { yyVAL.str = string(yyDollar[3].colIdent.String()) } case 164: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1047 +//line sql.y:1050 { yyVAL.str = string(yyDollar[3].bytes) } case 165: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1052 +//line sql.y:1055 { yyVAL.str = "" } case 166: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1056 +//line sql.y:1059 { yyVAL.str = string(yyDollar[2].colIdent.String()) } case 167: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1060 +//line sql.y:1063 { yyVAL.str = string(yyDollar[2].bytes) } case 168: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1065 +//line sql.y:1068 { yyVAL.colKeyOpt = colKeyNone } case 169: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1069 +//line sql.y:1072 { yyVAL.colKeyOpt = colKeyPrimary } case 170: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1073 +//line sql.y:1076 { yyVAL.colKeyOpt = colKey } case 171: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1077 +//line sql.y:1080 { yyVAL.colKeyOpt = colKeyUniqueKey } case 172: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1081 +//line sql.y:1084 { yyVAL.colKeyOpt = colKeyUnique } case 173: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1086 +//line sql.y:1089 { yyVAL.sqlVal = nil } case 174: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1090 +//line sql.y:1093 { yyVAL.sqlVal = NewStrVal(yyDollar[2].bytes) } case 175: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1096 +//line sql.y:1099 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns, Options: yyDollar[5].indexOptions} } case 176: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1100 +//line sql.y:1103 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns} } case 177: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1106 +//line sql.y:1109 { yyVAL.indexOptions = []*IndexOption{yyDollar[1].indexOption} } case 178: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1110 +//line sql.y:1113 { yyVAL.indexOptions = append(yyVAL.indexOptions, yyDollar[2].indexOption) } case 179: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1116 +//line sql.y:1119 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Using: string(yyDollar[2].colIdent.String())} } case 180: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1120 +//line sql.y:1123 { // should not be string yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Value: NewIntVal(yyDollar[3].bytes)} } case 181: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1125 +//line sql.y:1128 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Value: NewStrVal(yyDollar[2].bytes)} } case 182: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1131 +//line sql.y:1134 { yyVAL.str = "" } case 183: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1135 +//line sql.y:1138 { yyVAL.str = string(yyDollar[1].bytes) } case 184: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1141 +//line sql.y:1144 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].bytes), Name: NewColIdent("PRIMARY"), Primary: true, Unique: true} } case 185: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1145 +//line sql.y:1148 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(yyDollar[3].str), Spatial: true, Unique: false} } case 186: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1149 +//line sql.y:1152 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(yyDollar[3].str), Unique: true} } case 187: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1153 +//line sql.y:1156 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes), Name: NewColIdent(yyDollar[2].str), Unique: true} } case 188: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1157 +//line sql.y:1160 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].str), Name: NewColIdent(yyDollar[2].str), Unique: false} } case 189: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1163 +//line sql.y:1166 { yyVAL.str = string(yyDollar[1].bytes) } case 190: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1167 +//line sql.y:1170 { yyVAL.str = string(yyDollar[1].bytes) } case 191: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1171 +//line sql.y:1174 { yyVAL.str = string(yyDollar[1].bytes) } case 192: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1178 +//line sql.y:1181 { yyVAL.str = string(yyDollar[1].bytes) } case 193: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1182 +//line sql.y:1185 { yyVAL.str = string(yyDollar[1].bytes) } case 194: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1188 +//line sql.y:1191 { yyVAL.str = string(yyDollar[1].bytes) } case 195: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1192 +//line sql.y:1195 { yyVAL.str = string(yyDollar[1].bytes) } case 196: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1197 +//line sql.y:1200 { yyVAL.str = "" } case 197: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1201 +//line sql.y:1204 { yyVAL.str = string(yyDollar[1].colIdent.String()) } case 198: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1207 +//line sql.y:1210 { yyVAL.indexColumns = []*IndexColumn{yyDollar[1].indexColumn} } case 199: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1211 +//line sql.y:1214 { yyVAL.indexColumns = append(yyVAL.indexColumns, yyDollar[3].indexColumn) } case 200: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1217 +//line sql.y:1220 { yyVAL.indexColumn = &IndexColumn{Column: yyDollar[1].colIdent, Length: yyDollar[2].sqlVal} } case 201: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1223 +//line sql.y:1226 { yyVAL.constraintDefinition = &ConstraintDefinition{Name: string(yyDollar[2].colIdent.String()), Details: yyDollar[3].constraintInfo} } case 202: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1227 +//line sql.y:1230 { yyVAL.constraintDefinition = &ConstraintDefinition{Details: yyDollar[1].constraintInfo} } case 203: yyDollar = yyS[yypt-10 : yypt+1] -//line sql.y:1234 +//line sql.y:1237 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns} } case 204: yyDollar = yyS[yypt-11 : yypt+1] -//line sql.y:1238 +//line sql.y:1241 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnDelete: yyDollar[11].ReferenceAction} } case 205: yyDollar = yyS[yypt-11 : yypt+1] -//line sql.y:1242 +//line sql.y:1245 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnUpdate: yyDollar[11].ReferenceAction} } case 206: yyDollar = yyS[yypt-12 : yypt+1] -//line sql.y:1246 +//line sql.y:1249 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnDelete: yyDollar[11].ReferenceAction, OnUpdate: yyDollar[12].ReferenceAction} } case 207: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1252 +//line sql.y:1255 { yyVAL.ReferenceAction = yyDollar[3].ReferenceAction } case 208: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1258 +//line sql.y:1261 { yyVAL.ReferenceAction = yyDollar[3].ReferenceAction } case 209: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1264 +//line sql.y:1267 { yyVAL.ReferenceAction = Restrict } case 210: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1268 +//line sql.y:1271 { yyVAL.ReferenceAction = Cascade } case 211: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1272 +//line sql.y:1275 { yyVAL.ReferenceAction = NoAction } case 212: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1276 +//line sql.y:1279 { yyVAL.ReferenceAction = SetDefault } case 213: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1280 +//line sql.y:1283 { yyVAL.ReferenceAction = SetNull } case 214: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1285 +//line sql.y:1288 { yyVAL.str = "" } case 215: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1289 +//line sql.y:1292 { yyVAL.str = " " + string(yyDollar[1].str) } case 216: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1293 +//line sql.y:1296 { yyVAL.str = string(yyDollar[1].str) + ", " + string(yyDollar[3].str) } case 217: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1301 +//line sql.y:1304 { yyVAL.str = yyDollar[1].str } case 218: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1305 +//line sql.y:1308 { yyVAL.str = yyDollar[1].str + " " + yyDollar[2].str } case 219: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1309 +//line sql.y:1312 { yyVAL.str = yyDollar[1].str + "=" + yyDollar[3].str } case 220: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1315 +//line sql.y:1318 { yyVAL.str = yyDollar[1].colIdent.String() } case 221: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1319 +//line sql.y:1322 { yyVAL.str = "'" + string(yyDollar[1].bytes) + "'" } case 222: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1323 +//line sql.y:1326 { yyVAL.str = string(yyDollar[1].bytes) } case 223: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1329 +//line sql.y:1332 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } case 224: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1333 +//line sql.y:1336 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } case 225: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1337 +//line sql.y:1340 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } case 226: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1341 +//line sql.y:1344 { // Change this to a rename statement yyVAL.statement = &DDL{Action: RenameStr, FromTables: TableNames{yyDollar[4].tableName}, ToTables: TableNames{yyDollar[7].tableName}} } case 227: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1346 +//line sql.y:1349 { // Rename an index can just be an alter yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } case 228: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1351 +//line sql.y:1354 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName.ToViewName()} } case 229: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1355 +//line sql.y:1358 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, PartitionSpec: yyDollar[5].partSpec} } case 230: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1359 +//line sql.y:1362 { yyVAL.statement = &DBDDL{Action: AlterStr, DBName: string(yyDollar[3].colIdent.String())} } case 231: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1363 +//line sql.y:1366 { yyVAL.statement = &DBDDL{Action: AlterStr, DBName: string(yyDollar[3].colIdent.String())} } case 232: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1367 +//line sql.y:1370 { yyVAL.statement = &DDL{ Action: CreateVindexStr, @@ -4940,7 +4936,7 @@ yydefault: } case 233: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1379 +//line sql.y:1382 { yyVAL.statement = &DDL{ Action: DropVindexStr, @@ -4952,19 +4948,19 @@ yydefault: } case 234: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1389 +//line sql.y:1392 { yyVAL.statement = &DDL{Action: AddVschemaTableStr, Table: yyDollar[5].tableName} } case 235: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1393 +//line sql.y:1396 { yyVAL.statement = &DDL{Action: DropVschemaTableStr, Table: yyDollar[5].tableName} } case 236: yyDollar = yyS[yypt-12 : yypt+1] -//line sql.y:1397 +//line sql.y:1400 { yyVAL.statement = &DDL{ Action: AddColVindexStr, @@ -4979,7 +4975,7 @@ yydefault: } case 237: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1410 +//line sql.y:1413 { yyVAL.statement = &DDL{ Action: DropColVindexStr, @@ -4991,13 +4987,13 @@ yydefault: } case 238: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1420 +//line sql.y:1423 { yyVAL.statement = &DDL{Action: AddSequenceStr, Table: yyDollar[5].tableName} } case 239: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:1424 +//line sql.y:1427 { yyVAL.statement = &DDL{ Action: AddAutoIncStr, @@ -5010,49 +5006,49 @@ yydefault: } case 254: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1453 +//line sql.y:1456 { yyVAL.partSpec = &PartitionSpec{Action: ReorganizeStr, Name: yyDollar[3].colIdent, Definitions: yyDollar[6].partDefs} } case 255: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1459 +//line sql.y:1462 { yyVAL.partDefs = []*PartitionDefinition{yyDollar[1].partDef} } case 256: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1463 +//line sql.y:1466 { yyVAL.partDefs = append(yyDollar[1].partDefs, yyDollar[3].partDef) } case 257: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1469 +//line sql.y:1472 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Limit: yyDollar[7].expr} } case 258: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1473 +//line sql.y:1476 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Maxvalue: true} } case 259: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1479 +//line sql.y:1482 { yyVAL.statement = yyDollar[3].ddl } case 260: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1485 +//line sql.y:1488 { yyVAL.ddl = &DDL{Action: RenameStr, FromTables: TableNames{yyDollar[1].tableName}, ToTables: TableNames{yyDollar[3].tableName}} } case 261: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1489 +//line sql.y:1492 { yyVAL.ddl = yyDollar[1].ddl yyVAL.ddl.FromTables = append(yyVAL.ddl.FromTables, yyDollar[3].tableName) @@ -5060,7 +5056,7 @@ yydefault: } case 262: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1497 +//line sql.y:1500 { var exists bool if yyDollar[3].byt != 0 { @@ -5070,14 +5066,14 @@ yydefault: } case 263: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1505 +//line sql.y:1508 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[5].tableName} } case 264: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1510 +//line sql.y:1513 { var exists bool if yyDollar[3].byt != 0 { @@ -5087,143 +5083,143 @@ yydefault: } case 265: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1518 +//line sql.y:1521 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].colIdent.String())} } case 266: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1522 +//line sql.y:1525 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].colIdent.String())} } case 267: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1528 +//line sql.y:1531 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[3].tableName} } case 268: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1532 +//line sql.y:1535 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[2].tableName} } case 269: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1537 +//line sql.y:1540 { yyVAL.statement = &OtherRead{} } case 270: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1543 +//line sql.y:1546 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].colIdent.String())} } case 271: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1548 +//line sql.y:1551 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[4].showFilter} yyVAL.statement = &Show{Type: CharsetStr, ShowTablesOpt: showTablesOpt} } case 272: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1553 +//line sql.y:1556 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt} } case 273: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1558 +//line sql.y:1561 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 274: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1563 +//line sql.y:1566 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].colIdent.String())} } case 275: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1567 +//line sql.y:1570 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 276: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1571 +//line sql.y:1574 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Table: yyDollar[4].tableName} } case 277: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1575 +//line sql.y:1578 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 278: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1579 +//line sql.y:1582 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 279: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1583 +//line sql.y:1586 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 280: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1587 +//line sql.y:1590 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 281: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1591 +//line sql.y:1594 { showTablesOpt := &ShowTablesOpt{DbName: yyDollar[6].str, Filter: yyDollar[7].showFilter} yyVAL.statement = &Show{Extended: string(yyDollar[2].str), Type: string(yyDollar[3].str), ShowTablesOpt: showTablesOpt, OnTable: yyDollar[5].tableName} } case 282: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1597 +//line sql.y:1600 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 283: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1601 +//line sql.y:1604 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 284: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1605 +//line sql.y:1608 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } case 285: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1609 +//line sql.y:1612 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 286: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1613 +//line sql.y:1616 { showTablesOpt := &ShowTablesOpt{Full: yyDollar[2].str, DbName: yyDollar[6].str, Filter: yyDollar[7].showFilter} yyVAL.statement = &Show{Type: string(yyDollar[3].str), ShowTablesOpt: showTablesOpt, OnTable: yyDollar[5].tableName} } case 287: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1618 +//line sql.y:1621 { // this is ugly, but I couldn't find a better way for now if yyDollar[3].str == "processlist" { @@ -5235,19 +5231,19 @@ yydefault: } case 288: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1628 +//line sql.y:1631 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } case 289: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1632 +//line sql.y:1635 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 290: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1636 +//line sql.y:1639 { // Cannot dereference $4 directly, or else the parser stackcannot be pooled. See yyParsePooled showCollationFilterOpt := yyDollar[4].expr @@ -5255,441 +5251,441 @@ yydefault: } case 291: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1642 +//line sql.y:1645 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[4].showFilter} yyVAL.statement = &Show{Scope: string(yyDollar[2].bytes), Type: string(yyDollar[3].bytes), ShowTablesOpt: showTablesOpt} } case 292: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1647 +//line sql.y:1650 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 293: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1651 +//line sql.y:1654 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 294: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1655 +//line sql.y:1658 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), OnTable: yyDollar[5].tableName} } case 295: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1659 +//line sql.y:1662 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 296: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1673 +//line sql.y:1676 { yyVAL.statement = &Show{Type: string(yyDollar[2].colIdent.String())} } case 297: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1679 +//line sql.y:1682 { yyVAL.str = string(yyDollar[1].bytes) } case 298: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1683 +//line sql.y:1686 { yyVAL.str = string(yyDollar[1].bytes) } case 299: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1689 +//line sql.y:1692 { yyVAL.str = "" } case 300: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1693 +//line sql.y:1696 { yyVAL.str = "extended " } case 301: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1699 +//line sql.y:1702 { yyVAL.str = "" } case 302: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1703 +//line sql.y:1706 { yyVAL.str = "full " } case 303: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1709 +//line sql.y:1712 { yyVAL.str = string(yyDollar[1].bytes) } case 304: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1713 +//line sql.y:1716 { yyVAL.str = string(yyDollar[1].bytes) } case 305: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1719 +//line sql.y:1722 { yyVAL.str = "" } case 306: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1723 +//line sql.y:1726 { yyVAL.str = yyDollar[2].tableIdent.v } case 307: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1727 +//line sql.y:1730 { yyVAL.str = yyDollar[2].tableIdent.v } case 308: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1733 +//line sql.y:1736 { yyVAL.showFilter = nil } case 309: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1737 +//line sql.y:1740 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } case 310: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1741 +//line sql.y:1744 { yyVAL.showFilter = &ShowFilter{Filter: yyDollar[2].expr} } case 311: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1747 +//line sql.y:1750 { yyVAL.showFilter = nil } case 312: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1751 +//line sql.y:1754 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } case 313: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1757 +//line sql.y:1760 { yyVAL.str = "" } case 314: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1761 +//line sql.y:1764 { yyVAL.str = SessionStr } case 315: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1765 +//line sql.y:1768 { yyVAL.str = GlobalStr } case 316: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1771 +//line sql.y:1774 { yyVAL.statement = &Use{DBName: yyDollar[2].tableIdent} } case 317: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1775 +//line sql.y:1778 { yyVAL.statement = &Use{DBName: TableIdent{v: ""}} } case 318: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1781 +//line sql.y:1784 { yyVAL.statement = &Begin{} } case 319: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1785 +//line sql.y:1788 { yyVAL.statement = &Begin{} } case 320: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1791 +//line sql.y:1794 { yyVAL.statement = &Commit{} } case 321: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1797 +//line sql.y:1800 { yyVAL.statement = &Rollback{} } case 322: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1803 +//line sql.y:1806 { yyVAL.statement = &OtherRead{} } case 323: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1807 +//line sql.y:1810 { yyVAL.statement = &OtherRead{} } case 324: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1811 +//line sql.y:1814 { yyVAL.statement = &OtherRead{} } case 325: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1815 +//line sql.y:1818 { yyVAL.statement = &OtherAdmin{} } case 326: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1819 +//line sql.y:1822 { yyVAL.statement = &OtherAdmin{} } case 327: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1823 +//line sql.y:1826 { yyVAL.statement = &OtherAdmin{} } case 328: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1827 +//line sql.y:1830 { yyVAL.statement = &OtherAdmin{} } case 329: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1833 +//line sql.y:1836 { yyVAL.statement = &DDL{Action: FlushStr} } case 330: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1837 +//line sql.y:1840 { setAllowComments(yylex, true) } case 331: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1841 +//line sql.y:1844 { yyVAL.bytes2 = yyDollar[2].bytes2 setAllowComments(yylex, false) } case 332: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1847 +//line sql.y:1850 { yyVAL.bytes2 = nil } case 333: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1851 +//line sql.y:1854 { yyVAL.bytes2 = append(yyDollar[1].bytes2, yyDollar[2].bytes) } case 334: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1857 +//line sql.y:1860 { yyVAL.str = UnionStr } case 335: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1861 +//line sql.y:1864 { yyVAL.str = UnionAllStr } case 336: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1865 +//line sql.y:1868 { yyVAL.str = UnionDistinctStr } case 337: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1870 +//line sql.y:1873 { yyVAL.str = "" } case 338: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1874 +//line sql.y:1877 { yyVAL.str = SQLNoCacheStr } case 339: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1878 +//line sql.y:1881 { yyVAL.str = SQLCacheStr } case 340: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1883 +//line sql.y:1886 { yyVAL.str = "" } case 341: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1887 +//line sql.y:1890 { yyVAL.str = DistinctStr } case 342: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1891 +//line sql.y:1894 { yyVAL.str = DistinctStr } case 343: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1896 +//line sql.y:1899 { yyVAL.str = "" } case 344: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1900 +//line sql.y:1903 { yyVAL.str = StraightJoinHint } case 345: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1905 +//line sql.y:1908 { yyVAL.selectExprs = nil } case 346: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1909 +//line sql.y:1912 { yyVAL.selectExprs = yyDollar[1].selectExprs } case 347: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1915 +//line sql.y:1918 { yyVAL.selectExprs = SelectExprs{yyDollar[1].selectExpr} } case 348: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1919 +//line sql.y:1922 { yyVAL.selectExprs = append(yyVAL.selectExprs, yyDollar[3].selectExpr) } case 349: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1925 +//line sql.y:1928 { yyVAL.selectExpr = &StarExpr{} } case 350: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1929 +//line sql.y:1932 { yyVAL.selectExpr = &AliasedExpr{Expr: yyDollar[1].expr, As: yyDollar[2].colIdent} } case 351: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1933 +//line sql.y:1936 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Name: yyDollar[1].tableIdent}} } case 352: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1937 +//line sql.y:1940 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}} } case 353: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1942 +//line sql.y:1945 { yyVAL.colIdent = ColIdent{} } case 354: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1946 +//line sql.y:1949 { yyVAL.colIdent = yyDollar[1].colIdent } case 355: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1950 +//line sql.y:1953 { yyVAL.colIdent = yyDollar[2].colIdent } case 357: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1957 +//line sql.y:1960 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } case 358: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1962 +//line sql.y:1965 { yyVAL.tableExprs = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewTableIdent("dual")}}} } case 359: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1966 +//line sql.y:1969 { yyVAL.tableExprs = yyDollar[2].tableExprs } case 360: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1972 +//line sql.y:1975 { yyVAL.tableExprs = TableExprs{yyDollar[1].tableExpr} } case 361: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1976 +//line sql.y:1979 { yyVAL.tableExprs = append(yyVAL.tableExprs, yyDollar[3].tableExpr) } case 364: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1986 +//line sql.y:1989 { yyVAL.tableExpr = yyDollar[1].aliasedTableName } case 365: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1990 +//line sql.y:1993 { yyVAL.tableExpr = &AliasedTableExpr{Expr: yyDollar[1].subquery, As: yyDollar[3].tableIdent} } case 366: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1994 +//line sql.y:1997 { // missed alias for subquery yylex.Error("Every derived table must have its own alias") @@ -5697,199 +5693,199 @@ yydefault: } case 367: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2000 +//line sql.y:2003 { yyVAL.tableExpr = &ParenTableExpr{Exprs: yyDollar[2].tableExprs} } case 368: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2006 +//line sql.y:2009 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].tableIdent, Hints: yyDollar[3].indexHints} } case 369: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2010 +//line sql.y:2013 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitions, As: yyDollar[6].tableIdent, Hints: yyDollar[7].indexHints} } case 370: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2016 +//line sql.y:2019 { yyVAL.columns = Columns{yyDollar[1].colIdent} } case 371: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2020 +//line sql.y:2023 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } case 372: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2026 +//line sql.y:2029 { yyVAL.partitions = Partitions{yyDollar[1].colIdent} } case 373: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2030 +//line sql.y:2033 { yyVAL.partitions = append(yyVAL.partitions, yyDollar[3].colIdent) } case 374: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2043 +//line sql.y:2046 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } case 375: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2047 +//line sql.y:2050 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } case 376: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2051 +//line sql.y:2054 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } case 377: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2055 +//line sql.y:2058 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr} } case 378: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2061 +//line sql.y:2064 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } case 379: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2063 +//line sql.y:2066 { yyVAL.joinCondition = JoinCondition{Using: yyDollar[3].columns} } case 380: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2067 +//line sql.y:2070 { yyVAL.joinCondition = JoinCondition{} } case 381: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2069 +//line sql.y:2072 { yyVAL.joinCondition = yyDollar[1].joinCondition } case 382: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2073 +//line sql.y:2076 { yyVAL.joinCondition = JoinCondition{} } case 383: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2075 +//line sql.y:2078 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } case 384: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2078 +//line sql.y:2081 { yyVAL.empty = struct{}{} } case 385: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2080 +//line sql.y:2083 { yyVAL.empty = struct{}{} } case 386: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2083 +//line sql.y:2086 { yyVAL.tableIdent = NewTableIdent("") } case 387: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2087 +//line sql.y:2090 { yyVAL.tableIdent = yyDollar[1].tableIdent } case 388: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2091 +//line sql.y:2094 { yyVAL.tableIdent = yyDollar[2].tableIdent } case 390: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2098 +//line sql.y:2101 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } case 391: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2104 +//line sql.y:2107 { yyVAL.str = JoinStr } case 392: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2108 +//line sql.y:2111 { yyVAL.str = JoinStr } case 393: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2112 +//line sql.y:2115 { yyVAL.str = JoinStr } case 394: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2118 +//line sql.y:2121 { yyVAL.str = StraightJoinStr } case 395: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2124 +//line sql.y:2127 { yyVAL.str = LeftJoinStr } case 396: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2128 +//line sql.y:2131 { yyVAL.str = LeftJoinStr } case 397: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2132 +//line sql.y:2135 { yyVAL.str = RightJoinStr } case 398: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2136 +//line sql.y:2139 { yyVAL.str = RightJoinStr } case 399: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2142 +//line sql.y:2145 { yyVAL.str = NaturalJoinStr } case 400: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2146 +//line sql.y:2149 { if yyDollar[2].str == LeftJoinStr { yyVAL.str = NaturalLeftJoinStr @@ -5899,469 +5895,469 @@ yydefault: } case 401: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2156 +//line sql.y:2159 { yyVAL.tableName = yyDollar[2].tableName } case 402: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2160 +//line sql.y:2163 { yyVAL.tableName = yyDollar[1].tableName } case 403: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2166 +//line sql.y:2169 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } case 404: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2170 +//line sql.y:2173 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent} } case 405: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2176 +//line sql.y:2179 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } case 406: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2181 +//line sql.y:2184 { yyVAL.indexHints = nil } case 407: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2185 +//line sql.y:2188 { yyVAL.indexHints = &IndexHints{Type: UseStr, Indexes: yyDollar[4].columns} } case 408: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2189 +//line sql.y:2192 { yyVAL.indexHints = &IndexHints{Type: UseStr} } case 409: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2193 +//line sql.y:2196 { yyVAL.indexHints = &IndexHints{Type: IgnoreStr, Indexes: yyDollar[4].columns} } case 410: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2197 +//line sql.y:2200 { yyVAL.indexHints = &IndexHints{Type: ForceStr, Indexes: yyDollar[4].columns} } case 411: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2202 +//line sql.y:2205 { yyVAL.expr = nil } case 412: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2206 +//line sql.y:2209 { yyVAL.expr = yyDollar[2].expr } case 413: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2212 +//line sql.y:2215 { yyVAL.expr = yyDollar[1].expr } case 414: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2216 +//line sql.y:2219 { yyVAL.expr = &AndExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } case 415: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2220 +//line sql.y:2223 { yyVAL.expr = &OrExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } case 416: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2224 +//line sql.y:2227 { yyVAL.expr = &NotExpr{Expr: yyDollar[2].expr} } case 417: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2228 +//line sql.y:2231 { yyVAL.expr = &IsExpr{Operator: yyDollar[3].str, Expr: yyDollar[1].expr} } case 418: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2232 +//line sql.y:2235 { yyVAL.expr = yyDollar[1].expr } case 419: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2236 +//line sql.y:2239 { yyVAL.expr = &Default{ColName: yyDollar[2].str} } case 420: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2242 +//line sql.y:2245 { yyVAL.str = "" } case 421: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2246 +//line sql.y:2249 { yyVAL.str = string(yyDollar[2].colIdent.String()) } case 422: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2252 +//line sql.y:2255 { yyVAL.boolVal = BoolVal(true) } case 423: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2256 +//line sql.y:2259 { yyVAL.boolVal = BoolVal(false) } case 424: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2262 +//line sql.y:2265 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: yyDollar[2].str, Right: yyDollar[3].expr} } case 425: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2266 +//line sql.y:2269 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: InStr, Right: yyDollar[3].colTuple} } case 426: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2270 +//line sql.y:2273 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotInStr, Right: yyDollar[4].colTuple} } case 427: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2274 +//line sql.y:2277 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: LikeStr, Right: yyDollar[3].expr, Escape: yyDollar[4].expr} } case 428: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2278 +//line sql.y:2281 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotLikeStr, Right: yyDollar[4].expr, Escape: yyDollar[5].expr} } case 429: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2282 +//line sql.y:2285 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: RegexpStr, Right: yyDollar[3].expr} } case 430: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2286 +//line sql.y:2289 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotRegexpStr, Right: yyDollar[4].expr} } case 431: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2290 +//line sql.y:2293 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: BetweenStr, From: yyDollar[3].expr, To: yyDollar[5].expr} } case 432: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2294 +//line sql.y:2297 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: NotBetweenStr, From: yyDollar[4].expr, To: yyDollar[6].expr} } case 433: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2298 +//line sql.y:2301 { yyVAL.expr = &ExistsExpr{Subquery: yyDollar[2].subquery} } case 434: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2304 +//line sql.y:2307 { yyVAL.str = IsNullStr } case 435: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2308 +//line sql.y:2311 { yyVAL.str = IsNotNullStr } case 436: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2312 +//line sql.y:2315 { yyVAL.str = IsTrueStr } case 437: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2316 +//line sql.y:2319 { yyVAL.str = IsNotTrueStr } case 438: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2320 +//line sql.y:2323 { yyVAL.str = IsFalseStr } case 439: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2324 +//line sql.y:2327 { yyVAL.str = IsNotFalseStr } case 440: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2330 +//line sql.y:2333 { yyVAL.str = EqualStr } case 441: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2334 +//line sql.y:2337 { yyVAL.str = LessThanStr } case 442: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2338 +//line sql.y:2341 { yyVAL.str = GreaterThanStr } case 443: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2342 +//line sql.y:2345 { yyVAL.str = LessEqualStr } case 444: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2346 +//line sql.y:2349 { yyVAL.str = GreaterEqualStr } case 445: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2350 +//line sql.y:2353 { yyVAL.str = NotEqualStr } case 446: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2354 +//line sql.y:2357 { yyVAL.str = NullSafeEqualStr } case 447: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2359 +//line sql.y:2362 { yyVAL.expr = nil } case 448: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2363 +//line sql.y:2366 { yyVAL.expr = yyDollar[2].expr } case 449: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2369 +//line sql.y:2372 { yyVAL.colTuple = yyDollar[1].valTuple } case 450: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2373 +//line sql.y:2376 { yyVAL.colTuple = yyDollar[1].subquery } case 451: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2377 +//line sql.y:2380 { yyVAL.colTuple = ListArg(yyDollar[1].bytes) } case 452: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2383 +//line sql.y:2386 { yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } case 453: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2389 +//line sql.y:2392 { yyVAL.exprs = Exprs{yyDollar[1].expr} } case 454: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2393 +//line sql.y:2396 { yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) } case 455: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2399 +//line sql.y:2402 { yyVAL.expr = yyDollar[1].expr } case 456: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2403 +//line sql.y:2406 { yyVAL.expr = yyDollar[1].boolVal } case 457: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2407 +//line sql.y:2410 { yyVAL.expr = yyDollar[1].colName } case 458: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2411 +//line sql.y:2414 { yyVAL.expr = yyDollar[1].expr } case 459: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2415 +//line sql.y:2418 { yyVAL.expr = yyDollar[1].subquery } case 460: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2419 +//line sql.y:2422 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitAndStr, Right: yyDollar[3].expr} } case 461: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2423 +//line sql.y:2426 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitOrStr, Right: yyDollar[3].expr} } case 462: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2427 +//line sql.y:2430 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitXorStr, Right: yyDollar[3].expr} } case 463: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2431 +//line sql.y:2434 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: PlusStr, Right: yyDollar[3].expr} } case 464: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2435 +//line sql.y:2438 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MinusStr, Right: yyDollar[3].expr} } case 465: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2439 +//line sql.y:2442 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MultStr, Right: yyDollar[3].expr} } case 466: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2443 +//line sql.y:2446 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: DivStr, Right: yyDollar[3].expr} } case 467: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2447 +//line sql.y:2450 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: IntDivStr, Right: yyDollar[3].expr} } case 468: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2451 +//line sql.y:2454 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } case 469: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2455 +//line sql.y:2458 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } case 470: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2459 +//line sql.y:2462 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftLeftStr, Right: yyDollar[3].expr} } case 471: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2463 +//line sql.y:2466 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftRightStr, Right: yyDollar[3].expr} } case 472: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2467 +//line sql.y:2470 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONExtractOp, Right: yyDollar[3].expr} } case 473: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2471 +//line sql.y:2474 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONUnquoteExtractOp, Right: yyDollar[3].expr} } case 474: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2475 +//line sql.y:2478 { yyVAL.expr = &CollateExpr{Expr: yyDollar[1].expr, Charset: yyDollar[3].str} } case 475: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2479 +//line sql.y:2482 { yyVAL.expr = &UnaryExpr{Operator: BinaryStr, Expr: yyDollar[2].expr} } case 476: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2483 +//line sql.y:2486 { yyVAL.expr = &UnaryExpr{Operator: UBinaryStr, Expr: yyDollar[2].expr} } case 477: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2487 +//line sql.y:2490 { yyVAL.expr = &UnaryExpr{Operator: Utf8mb4Str, Expr: yyDollar[2].expr} } case 478: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2491 +//line sql.y:2494 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { yyVAL.expr = num @@ -6371,7 +6367,7 @@ yydefault: } case 479: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2499 +//line sql.y:2502 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { // Handle double negative @@ -6387,19 +6383,19 @@ yydefault: } case 480: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2513 +//line sql.y:2516 { yyVAL.expr = &UnaryExpr{Operator: TildaStr, Expr: yyDollar[2].expr} } case 481: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2517 +//line sql.y:2520 { yyVAL.expr = &UnaryExpr{Operator: BangStr, Expr: yyDollar[2].expr} } case 482: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2521 +//line sql.y:2524 { // This rule prevents the usage of INTERVAL // as a function. If support is needed for that, @@ -6409,325 +6405,325 @@ yydefault: } case 487: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2539 +//line sql.y:2542 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Exprs: yyDollar[3].selectExprs} } case 488: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2543 +//line sql.y:2546 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } case 489: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2547 +//line sql.y:2550 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } case 490: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2551 +//line sql.y:2554 { yyVAL.expr = &FuncExpr{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].colIdent, Exprs: yyDollar[5].selectExprs} } case 491: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2561 +//line sql.y:2564 { yyVAL.expr = &FuncExpr{Name: NewColIdent("left"), Exprs: yyDollar[3].selectExprs} } case 492: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2565 +//line sql.y:2568 { yyVAL.expr = &FuncExpr{Name: NewColIdent("right"), Exprs: yyDollar[3].selectExprs} } case 493: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2569 +//line sql.y:2572 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } case 494: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2573 +//line sql.y:2576 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } case 495: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2577 +//line sql.y:2580 { yyVAL.expr = &ConvertUsingExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].str} } case 496: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2581 +//line sql.y:2584 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } case 497: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2585 +//line sql.y:2588 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } case 498: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2589 +//line sql.y:2592 { yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } case 499: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2593 +//line sql.y:2596 { yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } case 500: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:2597 +//line sql.y:2600 { yyVAL.expr = &MatchExpr{Columns: yyDollar[3].selectExprs, Expr: yyDollar[7].expr, Option: yyDollar[8].str} } case 501: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2601 +//line sql.y:2604 { yyVAL.expr = &GroupConcatExpr{Distinct: yyDollar[3].str, Exprs: yyDollar[4].selectExprs, OrderBy: yyDollar[5].orderBy, Separator: yyDollar[6].str, Limit: yyDollar[7].limit} } case 502: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2605 +//line sql.y:2608 { yyVAL.expr = &CaseExpr{Expr: yyDollar[2].expr, Whens: yyDollar[3].whens, Else: yyDollar[4].expr} } case 503: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2609 +//line sql.y:2612 { yyVAL.expr = &ValuesFuncExpr{Name: yyDollar[3].colName} } case 504: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2619 +//line sql.y:2622 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_timestamp")} } case 505: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2623 +//line sql.y:2626 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_timestamp")} } case 506: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2627 +//line sql.y:2630 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_time")} } case 507: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2632 +//line sql.y:2635 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_date")} } case 508: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2637 +//line sql.y:2640 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtime")} } case 509: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2642 +//line sql.y:2645 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtimestamp")} } case 510: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2648 +//line sql.y:2651 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_date")} } case 511: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2653 +//line sql.y:2656 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_time")} } case 512: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2658 +//line sql.y:2661 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_timestamp"), Fsp: yyDollar[2].expr} } case 513: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2662 +//line sql.y:2665 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_timestamp"), Fsp: yyDollar[2].expr} } case 514: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2666 +//line sql.y:2669 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_time"), Fsp: yyDollar[2].expr} } case 515: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2671 +//line sql.y:2674 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtime"), Fsp: yyDollar[2].expr} } case 516: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2676 +//line sql.y:2679 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtimestamp"), Fsp: yyDollar[2].expr} } case 517: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2681 +//line sql.y:2684 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_time"), Fsp: yyDollar[2].expr} } case 518: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2685 +//line sql.y:2688 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } case 519: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2689 +//line sql.y:2692 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } case 522: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2699 +//line sql.y:2702 { yyVAL.expr = yyDollar[2].expr } case 523: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2709 +//line sql.y:2712 { yyVAL.expr = &FuncExpr{Name: NewColIdent("if"), Exprs: yyDollar[3].selectExprs} } case 524: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2713 +//line sql.y:2716 { yyVAL.expr = &FuncExpr{Name: NewColIdent("database"), Exprs: yyDollar[3].selectExprs} } case 525: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2717 +//line sql.y:2720 { yyVAL.expr = &FuncExpr{Name: NewColIdent("schema"), Exprs: yyDollar[3].selectExprs} } case 526: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2721 +//line sql.y:2724 { yyVAL.expr = &FuncExpr{Name: NewColIdent("mod"), Exprs: yyDollar[3].selectExprs} } case 527: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2725 +//line sql.y:2728 { yyVAL.expr = &FuncExpr{Name: NewColIdent("replace"), Exprs: yyDollar[3].selectExprs} } case 528: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2729 +//line sql.y:2732 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } case 529: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2733 +//line sql.y:2736 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } case 530: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2739 +//line sql.y:2742 { yyVAL.str = "" } case 531: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2743 +//line sql.y:2746 { yyVAL.str = BooleanModeStr } case 532: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2747 +//line sql.y:2750 { yyVAL.str = NaturalLanguageModeStr } case 533: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2751 +//line sql.y:2754 { yyVAL.str = NaturalLanguageModeWithQueryExpansionStr } case 534: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2755 +//line sql.y:2758 { yyVAL.str = QueryExpansionStr } case 535: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2761 +//line sql.y:2764 { yyVAL.str = string(yyDollar[1].colIdent.String()) } case 536: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2765 +//line sql.y:2768 { yyVAL.str = string(yyDollar[1].bytes) } case 537: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2771 +//line sql.y:2774 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 538: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2775 +//line sql.y:2778 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: yyDollar[3].str, Operator: CharacterSetStr} } case 539: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2779 +//line sql.y:2782 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: string(yyDollar[3].colIdent.String())} } case 540: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2783 +//line sql.y:2786 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 541: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2787 +//line sql.y:2790 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 542: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2791 +//line sql.y:2794 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} yyVAL.convertType.Length = yyDollar[2].LengthScaleOption.Length @@ -6735,169 +6731,169 @@ yydefault: } case 543: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2797 +//line sql.y:2800 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 544: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2801 +//line sql.y:2804 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 545: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2805 +//line sql.y:2808 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 546: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2809 +//line sql.y:2812 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 547: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2813 +//line sql.y:2816 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 548: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2817 +//line sql.y:2820 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 549: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2821 +//line sql.y:2824 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 550: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2826 +//line sql.y:2829 { yyVAL.expr = nil } case 551: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2830 +//line sql.y:2833 { yyVAL.expr = yyDollar[1].expr } case 552: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2835 +//line sql.y:2838 { yyVAL.str = string("") } case 553: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2839 +//line sql.y:2842 { yyVAL.str = " separator '" + string(yyDollar[2].bytes) + "'" } case 554: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2845 +//line sql.y:2848 { yyVAL.whens = []*When{yyDollar[1].when} } case 555: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2849 +//line sql.y:2852 { yyVAL.whens = append(yyDollar[1].whens, yyDollar[2].when) } case 556: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2855 +//line sql.y:2858 { yyVAL.when = &When{Cond: yyDollar[2].expr, Val: yyDollar[4].expr} } case 557: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2860 +//line sql.y:2863 { yyVAL.expr = nil } case 558: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2864 +//line sql.y:2867 { yyVAL.expr = yyDollar[2].expr } case 559: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2870 +//line sql.y:2873 { yyVAL.colName = &ColName{Name: yyDollar[1].colIdent} } case 560: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2874 +//line sql.y:2877 { yyVAL.colName = &ColName{Qualifier: TableName{Name: yyDollar[1].tableIdent}, Name: yyDollar[3].colIdent} } case 561: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2878 +//line sql.y:2881 { yyVAL.colName = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}, Name: yyDollar[5].colIdent} } case 562: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2884 +//line sql.y:2887 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } case 563: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2888 +//line sql.y:2891 { yyVAL.expr = NewHexVal(yyDollar[1].bytes) } case 564: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2892 +//line sql.y:2895 { yyVAL.expr = NewBitVal(yyDollar[1].bytes) } case 565: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2896 +//line sql.y:2899 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } case 566: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2900 +//line sql.y:2903 { yyVAL.expr = NewFloatVal(yyDollar[1].bytes) } case 567: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2904 +//line sql.y:2907 { yyVAL.expr = NewHexNum(yyDollar[1].bytes) } case 568: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2908 +//line sql.y:2911 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } case 569: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2912 +//line sql.y:2915 { yyVAL.expr = &NullVal{} } case 570: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2918 +//line sql.y:2921 { // TODO(sougou): Deprecate this construct. if yyDollar[1].colIdent.Lowered() != "value" { @@ -6908,237 +6904,237 @@ yydefault: } case 571: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2927 +//line sql.y:2930 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } case 572: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2931 +//line sql.y:2934 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } case 573: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2936 +//line sql.y:2939 { yyVAL.exprs = nil } case 574: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2940 +//line sql.y:2943 { yyVAL.exprs = yyDollar[3].exprs } case 575: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2945 +//line sql.y:2948 { yyVAL.expr = nil } case 576: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2949 +//line sql.y:2952 { yyVAL.expr = yyDollar[2].expr } case 577: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2954 +//line sql.y:2957 { yyVAL.orderBy = nil } case 578: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2958 +//line sql.y:2961 { yyVAL.orderBy = yyDollar[3].orderBy } case 579: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2964 +//line sql.y:2967 { yyVAL.orderBy = OrderBy{yyDollar[1].order} } case 580: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2968 +//line sql.y:2971 { yyVAL.orderBy = append(yyDollar[1].orderBy, yyDollar[3].order) } case 581: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2974 +//line sql.y:2977 { yyVAL.order = &Order{Expr: yyDollar[1].expr, Direction: yyDollar[2].str} } case 582: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2979 +//line sql.y:2982 { yyVAL.str = AscScr } case 583: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2983 +//line sql.y:2986 { yyVAL.str = AscScr } case 584: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2987 +//line sql.y:2990 { yyVAL.str = DescScr } case 585: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2992 +//line sql.y:2995 { yyVAL.limit = nil } case 586: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2996 +//line sql.y:2999 { yyVAL.limit = &Limit{Rowcount: yyDollar[2].expr} } case 587: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3000 +//line sql.y:3003 { yyVAL.limit = &Limit{Offset: yyDollar[2].expr, Rowcount: yyDollar[4].expr} } case 588: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3004 +//line sql.y:3007 { yyVAL.limit = &Limit{Offset: yyDollar[4].expr, Rowcount: yyDollar[2].expr} } case 589: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3009 +//line sql.y:3012 { yyVAL.str = "" } case 590: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3013 +//line sql.y:3016 { yyVAL.str = ForUpdateStr } case 591: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3017 +//line sql.y:3020 { yyVAL.str = ShareModeStr } case 592: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3030 +//line sql.y:3033 { yyVAL.ins = &Insert{Rows: yyDollar[2].values} } case 593: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3034 +//line sql.y:3037 { yyVAL.ins = &Insert{Rows: yyDollar[1].selStmt} } case 594: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3038 +//line sql.y:3041 { // Drop the redundant parenthesis. yyVAL.ins = &Insert{Rows: yyDollar[2].selStmt} } case 595: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3043 +//line sql.y:3046 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].values} } case 596: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3047 +//line sql.y:3050 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[4].selStmt} } case 597: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:3051 +//line sql.y:3054 { // Drop the redundant parenthesis. yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].selStmt} } case 598: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3058 +//line sql.y:3061 { yyVAL.columns = Columns{yyDollar[1].colIdent} } case 599: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3062 +//line sql.y:3065 { yyVAL.columns = Columns{yyDollar[3].colIdent} } case 600: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3066 +//line sql.y:3069 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } case 601: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3070 +//line sql.y:3073 { yyVAL.columns = append(yyVAL.columns, yyDollar[5].colIdent) } case 602: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3075 +//line sql.y:3078 { yyVAL.updateExprs = nil } case 603: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3079 +//line sql.y:3082 { yyVAL.updateExprs = yyDollar[5].updateExprs } case 604: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3085 +//line sql.y:3088 { yyVAL.values = Values{yyDollar[1].valTuple} } case 605: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3089 +//line sql.y:3092 { yyVAL.values = append(yyDollar[1].values, yyDollar[3].valTuple) } case 606: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3095 +//line sql.y:3098 { yyVAL.valTuple = yyDollar[1].valTuple } case 607: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3099 +//line sql.y:3102 { yyVAL.valTuple = ValTuple{} } case 608: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3105 +//line sql.y:3108 { yyVAL.valTuple = ValTuple(yyDollar[2].exprs) } case 609: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3111 +//line sql.y:3114 { if len(yyDollar[1].valTuple) == 1 { yyVAL.expr = yyDollar[1].valTuple[0] @@ -7148,310 +7144,317 @@ yydefault: } case 610: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3121 +//line sql.y:3124 { yyVAL.updateExprs = UpdateExprs{yyDollar[1].updateExpr} } case 611: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3125 +//line sql.y:3128 { yyVAL.updateExprs = append(yyDollar[1].updateExprs, yyDollar[3].updateExpr) } case 612: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3131 +//line sql.y:3134 { yyVAL.updateExpr = &UpdateExpr{Name: yyDollar[1].colName, Expr: yyDollar[3].expr} } case 613: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3137 +//line sql.y:3140 { yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} } case 614: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:3144 + { + yyDollar[2].setExpr.Scope = yyDollar[1].str + yyVAL.setExprs = SetExprs{yyDollar[2].setExpr} + } + case 615: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3141 +//line sql.y:3149 { yyVAL.setExprs = append(yyDollar[1].setExprs, yyDollar[3].setExpr) } - case 615: + case 616: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3147 +//line sql.y:3155 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrVal([]byte("on"))} } - case 616: + case 617: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3151 +//line sql.y:3159 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrVal([]byte("off"))} } - case 617: + case 618: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3155 +//line sql.y:3163 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: yyDollar[3].expr} } - case 618: + case 619: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3159 +//line sql.y:3167 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(string(yyDollar[1].bytes)), Expr: yyDollar[2].expr} } - case 620: + case 621: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3166 +//line sql.y:3174 { yyVAL.bytes = []byte("charset") } - case 622: + case 623: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3173 +//line sql.y:3181 { yyVAL.expr = NewStrVal([]byte(yyDollar[1].colIdent.String())) } - case 623: + case 624: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3177 +//line sql.y:3185 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 624: + case 625: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3181 +//line sql.y:3189 { yyVAL.expr = &Default{} } - case 627: + case 628: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3190 +//line sql.y:3198 { yyVAL.byt = 0 } - case 628: + case 629: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3192 +//line sql.y:3200 { yyVAL.byt = 1 } - case 629: + case 630: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3195 +//line sql.y:3203 { yyVAL.empty = struct{}{} } - case 630: + case 631: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3197 +//line sql.y:3205 { yyVAL.empty = struct{}{} } - case 631: + case 632: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3200 +//line sql.y:3208 { yyVAL.str = "" } - case 632: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3202 - { - yyVAL.str = IgnoreStr - } case 633: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3206 +//line sql.y:3210 { - yyVAL.empty = struct{}{} + yyVAL.str = IgnoreStr } case 634: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3208 +//line sql.y:3214 { yyVAL.empty = struct{}{} } case 635: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3210 +//line sql.y:3216 { yyVAL.empty = struct{}{} } case 636: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3212 +//line sql.y:3218 { yyVAL.empty = struct{}{} } case 637: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3214 +//line sql.y:3220 { yyVAL.empty = struct{}{} } case 638: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3216 +//line sql.y:3222 { yyVAL.empty = struct{}{} } case 639: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3218 +//line sql.y:3224 { yyVAL.empty = struct{}{} } case 640: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3220 +//line sql.y:3226 { yyVAL.empty = struct{}{} } case 641: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3222 +//line sql.y:3228 { yyVAL.empty = struct{}{} } case 642: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3224 +//line sql.y:3230 { yyVAL.empty = struct{}{} } case 643: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3227 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3232 { yyVAL.empty = struct{}{} } case 644: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3229 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:3235 { yyVAL.empty = struct{}{} } case 645: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3231 +//line sql.y:3237 { yyVAL.empty = struct{}{} } case 646: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3235 +//line sql.y:3239 { yyVAL.empty = struct{}{} } case 647: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3237 +//line sql.y:3243 { yyVAL.empty = struct{}{} } case 648: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3240 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3245 { yyVAL.empty = struct{}{} } case 649: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3242 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:3248 { yyVAL.empty = struct{}{} } case 650: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3244 +//line sql.y:3250 { yyVAL.empty = struct{}{} } case 651: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3252 + { + yyVAL.empty = struct{}{} + } + case 652: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3247 +//line sql.y:3255 { yyVAL.colIdent = ColIdent{} } - case 652: + case 653: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3249 +//line sql.y:3257 { yyVAL.colIdent = yyDollar[2].colIdent } - case 653: + case 654: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3253 +//line sql.y:3261 { yyVAL.colIdent = yyDollar[1].colIdent } - case 654: + case 655: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3257 +//line sql.y:3265 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 656: + case 657: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3264 +//line sql.y:3272 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 657: + case 658: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3270 +//line sql.y:3278 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].colIdent.String())) } - case 658: + case 659: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3274 +//line sql.y:3282 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 660: + case 661: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3281 +//line sql.y:3289 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 950: + case 951: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3596 +//line sql.y:3604 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 951: + case 952: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3605 +//line sql.y:3613 { decNesting(yylex) } - case 952: + case 953: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3610 +//line sql.y:3618 { skipToEnd(yylex) } - case 953: + case 954: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3615 +//line sql.y:3623 { skipToEnd(yylex) } - case 954: + case 955: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3619 +//line sql.y:3627 { skipToEnd(yylex) } - case 955: + case 956: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3623 +//line sql.y:3631 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 77f8742635b..0d47d334911 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -89,6 +89,8 @@ func skipToEnd(yylex interface{}) { setExprs SetExprs updateExpr *UpdateExpr setExpr *SetExpr + characteristic Characteristic + characteristics []Characteristic colIdent ColIdent tableIdent TableIdent convertType *ConvertType @@ -213,7 +215,7 @@ func skipToEnd(yylex interface{}) { %type command %type select_statement base_select union_lhs union_rhs -%type stream_statement insert_statement update_statement delete_statement set_statement +%type stream_statement insert_statement update_statement delete_statement set_statement set_transaction_statement %type create_statement alter_statement rename_statement drop_statement truncate_statement flush_statement %type create_table_prefix rename_list %type analyze_statement show_statement use_statement other_statement @@ -262,10 +264,12 @@ func skipToEnd(yylex interface{}) { %type opt_partition_clause partition_list %type on_dup_opt %type update_list -%type set_list transaction_chars +%type set_list %type charset_or_character_set %type update_expression -%type set_expression transaction_char +%type set_expression +%type transaction_char +%type transaction_chars %type isolation_level %type for_from %type ignore_opt default_opt @@ -340,6 +344,7 @@ command: | update_statement | delete_statement | set_statement +| set_transaction_statement | create_statement | alter_statement | rename_statement @@ -520,23 +525,21 @@ set_statement: { $$ = &Set{Comments: Comments($2), Exprs: $3} } -| SET comment_opt set_session_or_global set_list - { - $$ = &Set{Comments: Comments($2), Scope: $3, Exprs: $4} - } -| SET comment_opt set_session_or_global TRANSACTION transaction_chars + +set_transaction_statement: + SET comment_opt set_session_or_global TRANSACTION transaction_chars { - $$ = &Set{Comments: Comments($2), Scope: $3, Exprs: $5} + $$ = &SetTransaction{Comments: Comments($2), Scope: $3, Characteristics: $5} } | SET comment_opt TRANSACTION transaction_chars { - $$ = &Set{Comments: Comments($2), Exprs: $4} + $$ = &SetTransaction{Comments: Comments($2), Characteristics: $4} } transaction_chars: transaction_char { - $$ = SetExprs{$1} + $$ = []Characteristic{$1} } | transaction_chars ',' transaction_char { @@ -546,33 +549,33 @@ transaction_chars: transaction_char: ISOLATION LEVEL isolation_level { - $$ = &SetExpr{Name: NewColIdent(TransactionStr), Expr: NewStrVal([]byte($3))} + $$ = &IsolationLevel{Level: string($3)} } | READ WRITE { - $$ = &SetExpr{Name: NewColIdent(TransactionStr), Expr: NewStrVal([]byte(TxReadWrite))} + $$ = &AccessMode{Mode: TxReadWrite} } | READ ONLY { - $$ = &SetExpr{Name: NewColIdent(TransactionStr), Expr: NewStrVal([]byte(TxReadOnly))} + $$ = &AccessMode{Mode: TxReadOnly} } isolation_level: REPEATABLE READ { - $$ = IsolationLevelRepeatableRead + $$ = RepeatableRead } | READ COMMITTED { - $$ = IsolationLevelReadCommitted + $$ = ReadCommitted } | READ UNCOMMITTED { - $$ = IsolationLevelReadUncommitted + $$ = ReadUncommitted } | SERIALIZABLE { - $$ = IsolationLevelSerializable + $$ = Serializable } set_session_or_global: @@ -3137,6 +3140,11 @@ set_list: { $$ = SetExprs{$1} } +| set_session_or_global set_expression + { + $2.Scope = $1 + $$ = SetExprs{$2} + } | set_list ',' set_expression { $$ = append($1, $3) diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 2b7fc6c85b9..6b74c39d77b 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -24,10 +24,14 @@ import ( "net/http" "regexp" "sort" + "strconv" "strings" "sync" "time" + "vitess.io/vitess/go/vt/log" + vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" + "golang.org/x/net/context" "vitess.io/vitess/go/trace" @@ -38,7 +42,6 @@ import ( "vitess.io/vitess/go/stats" "vitess.io/vitess/go/vt/callerid" "vitess.io/vitess/go/vt/key" - "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/srvtopo" "vitess.io/vitess/go/vt/topo/topoproto" @@ -50,7 +53,6 @@ import ( querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" - vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" ) @@ -294,226 +296,279 @@ func (e *Executor) handleRollback(ctx context.Context, safeSession *SafeSession, } func (e *Executor) handleSet(ctx context.Context, safeSession *SafeSession, sql string, logStats *LogStats) (*sqltypes.Result, error) { - vals, scope, err := sqlparser.ExtractSetValues(sql) + stmt, err := sqlparser.Parse(sql) + if err != nil { + return nil, err + } + rewrittenAST, err := sqlparser.PrepareAST(stmt, nil, "vtg", false) + if err != nil { + return nil, err + } + set, ok := rewrittenAST.AST.(*sqlparser.Set) + if !ok { + _, ok := rewrittenAST.AST.(*sqlparser.SetTransaction) + if !ok { + return nil, vterrors.New(vtrpcpb.Code_INTERNAL, "unexpected statement type") + } + // Parser ensures set transaction is well-formed. + + // TODO: This is a NOP, modeled off of tx_isolation and tx_read_only. It's incredibly + // dangerous that it's a NOP, but fixing that is left to. + return &sqltypes.Result{}, nil + } + execStart := time.Now() logStats.PlanTime = execStart.Sub(logStats.StartTime) defer func() { logStats.ExecuteTime = time.Since(execStart) }() - if err != nil { - return &sqltypes.Result{}, vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, err.Error()) - } + for _, expr := range set.Exprs { + // This is what correctly allows us to handle queries such as "set @@session.`autocommit`=1" + // it will remove backticks and double quotes that might surround the part after the first period + _, out := sqlparser.NewStringTokenizer(expr.Name.Lowered()).Scan() + name := string(out) + switch expr.Scope { + case sqlparser.GlobalStr: + return nil, vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, "unsupported in set: global") + case sqlparser.SessionStr: + value, err := getValueFor(expr) + if err != nil { + return nil, err + } + return &sqltypes.Result{}, handleSessionSetting(ctx, name, safeSession, value, e.txConn, sql) + case sqlparser.VitessMetadataStr: + value, err := getValueFor(expr) + if err != nil { + return nil, err + } + val, ok := value.(string) + if !ok { + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for charset: %v", value) + } + return e.handleSetVitessMetadata(ctx, name, val) + case "": // we should only get here with UDVs + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "should have been handled by planning") - if scope == sqlparser.GlobalStr { - return &sqltypes.Result{}, vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, "unsupported in set: global") + } } - for k, v := range vals { - switch k.Scope { - case sqlparser.GlobalStr: - return &sqltypes.Result{}, vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, "unsupported in set: global") - case sqlparser.VitessMetadataStr: - return e.handleSetVitessMetadata(ctx, k, v) - case sqlparser.VariableStr: - err := handleSetUserDefinedVariables(safeSession, k, v) + return &sqltypes.Result{}, nil +} + +func getValueFor(expr *sqlparser.SetExpr) (interface{}, error) { + switch expr := expr.Expr.(type) { + case *sqlparser.SQLVal: + switch expr.Type { + case sqlparser.StrVal: + return strings.ToLower(string(expr.Val)), nil + case sqlparser.IntVal: + num, err := strconv.ParseInt(string(expr.Val), 0, 64) if err != nil { return nil, err } - case sqlparser.ImplicitStr: - switch k.Key { - case "autocommit": - val, err := validateSetOnOff(v, k.Key) - if err != nil { - return nil, err - } + return num, nil + case sqlparser.FloatVal: + num, err := strconv.ParseFloat(string(expr.Val), 64) + if err != nil { + return nil, err + } + return num, nil + default: + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid value type: %v", sqlparser.String(expr)) + } + case sqlparser.BoolVal: + var val int64 + if expr { + val = 1 + } + return val, nil + case *sqlparser.NullVal: + return nil, nil + case *sqlparser.ColName: + return expr.Name.String(), nil + case *sqlparser.Default: + return "default", nil + default: + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid syntax: %s", sqlparser.String(expr)) + } - switch val { - case 0: - safeSession.Autocommit = false - case 1: - if safeSession.InTransaction() { - if err := e.txConn.Commit(ctx, safeSession); err != nil { - return nil, err - } - } - safeSession.Autocommit = true - default: - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value for autocommit: %d", val) - } - case "client_found_rows": - val, ok := v.(int64) - if !ok { - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for client_found_rows: %T", v) - } - if safeSession.Options == nil { - safeSession.Options = &querypb.ExecuteOptions{} - } - switch val { - case 0: - safeSession.Options.ClientFoundRows = false - case 1: - safeSession.Options.ClientFoundRows = true - default: - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value for client_found_rows: %d", val) - } - case "skip_query_plan_cache": - val, ok := v.(int64) - if !ok { - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for skip_query_plan_cache: %T", v) - } - if safeSession.Options == nil { - safeSession.Options = &querypb.ExecuteOptions{} - } - switch val { - case 0: - safeSession.Options.SkipQueryPlanCache = false - case 1: - safeSession.Options.SkipQueryPlanCache = true - default: - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value for skip_query_plan_cache: %d", val) - } - case "sql_safe_updates": - val, err := validateSetOnOff(v, k.Key) - if err != nil { - return nil, err - } +} - switch val { - case 0, 1: - // no op - default: - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value for sql_safe_updates: %d", val) - } - case "transaction_mode": - val, ok := v.(string) - if !ok { - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for transaction_mode: %T", v) - } - out, ok := vtgatepb.TransactionMode_value[strings.ToUpper(val)] - if !ok { - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid transaction_mode: %s", val) - } - safeSession.TransactionMode = vtgatepb.TransactionMode(out) - case sqlparser.TransactionStr: - // Parser ensures it's well-formed. - - // TODO: This is a NOP, modeled off of tx_isolation and tx_read_only. It's incredibly - // dangerous that it's a NOP, but fixing that is left to. Note that vtqueryservice needs - // to be updated as well: - // https://github.com/vitessio/vitess/issues/4127 - case "tx_isolation": - val, ok := v.(string) - if !ok { - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for tx_isolation: %T", v) - } - switch val { - case "repeatable read", "read committed", "read uncommitted", "serializable": - // TODO (4127): This is a dangerous NOP. - default: - return nil, fmt.Errorf("unexpected value for tx_isolation: %v", val) - } - case "tx_read_only", "transaction_read_only": - val, err := validateSetOnOff(v, k.Key) - if err != nil { - return nil, err - } - switch val { - case 0, 1: - // TODO (4127): This is a dangerous NOP. - default: - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value for %v: %d", k.Key, val) - } - case "workload": - val, ok := v.(string) - if !ok { - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for workload: %T", v) - } - out, ok := querypb.ExecuteOptions_Workload_value[strings.ToUpper(val)] - if !ok { - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid workload: %s", val) - } - if safeSession.Options == nil { - safeSession.Options = &querypb.ExecuteOptions{} - } - safeSession.Options.Workload = querypb.ExecuteOptions_Workload(out) - case "sql_select_limit": - var val int64 - - switch cast := v.(type) { - case int64: - val = cast - case string: - if !strings.EqualFold(cast, "default") { - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected string value for sql_select_limit: %v", v) - } - default: - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for sql_select_limit: %T", v) - } +func handleSessionSetting(ctx context.Context, name string, session *SafeSession, value interface{}, conn *TxConn, sql string) error { + switch name { + case "autocommit": + val, err := validateSetOnOff(value, name) + if err != nil { + return err + } - if safeSession.Options == nil { - safeSession.Options = &querypb.ExecuteOptions{} - } - safeSession.Options.SqlSelectLimit = val - case "sql_auto_is_null": - val, ok := v.(int64) - if !ok { - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for sql_auto_is_null: %T", v) - } - switch val { - case 0: - // This is the default setting for MySQL. Do nothing. - case 1: - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "sql_auto_is_null is not currently supported") - default: - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value for sql_auto_is_null: %d", val) - } - case "character_set_results": - // This is a statement that mysql-connector-j sends at the beginning. We return a canned response for it. - switch v { - case nil, "utf8", "utf8mb4", "latin1": - default: - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "disallowed value for character_set_results: %v", v) - } - case "wait_timeout": - _, ok := v.(int64) - if !ok { - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for wait_timeout: %T", v) - } - case "sql_mode", "net_write_timeout", "net_read_timeout", "lc_messages", "collation_connection", "foreign_key_checks", "sql_quote_show_create", "unique_checks": - log.Warningf("Ignored inapplicable SET %v = %v", k, v) - warnings.Add("IgnoredSet", 1) - case "charset", "names": - val, ok := v.(string) - if !ok { - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for charset/names: %T", v) - } - switch val { - case "", "utf8", "utf8mb4", "latin1", "default": - break - default: - return nil, fmt.Errorf("unexpected value for charset/names: %v", val) + switch val { + case 0: + session.Autocommit = false + case 1: + if session.InTransaction() { + if err := conn.Commit(ctx, session); err != nil { + return err } - default: - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unsupported construct: %s", sql) } - + session.Autocommit = true + default: + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value for autocommit: %d", val) + } + case "client_found_rows": + val, ok := value.(int64) + if !ok { + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for client_found_rows: %T", value) + } + if session.Options == nil { + session.Options = &querypb.ExecuteOptions{} + } + switch val { + case 0: + session.Options.ClientFoundRows = false + case 1: + session.Options.ClientFoundRows = true + default: + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value for client_found_rows: %d", val) + } + case "skip_query_plan_cache": + val, ok := value.(int64) + if !ok { + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for skip_query_plan_cache: %T", value) + } + if session.Options == nil { + session.Options = &querypb.ExecuteOptions{} + } + switch val { + case 0: + session.Options.SkipQueryPlanCache = false + case 1: + session.Options.SkipQueryPlanCache = true + default: + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value for skip_query_plan_cache: %d", val) + } + case "sql_safe_updates": + val, err := validateSetOnOff(value, name) + if err != nil { + return err } - } - return &sqltypes.Result{}, nil -} + switch val { + case 0, 1: + // no op + default: + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value for sql_safe_updates: %d", val) + } + case "transaction_mode": + val, ok := value.(string) + if !ok { + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for transaction_mode: %T", value) + } + out, ok := vtgatepb.TransactionMode_value[strings.ToUpper(val)] + if !ok { + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid transaction_mode: %s", val) + } + session.TransactionMode = vtgatepb.TransactionMode(out) + case "tx_isolation": // TODO move this to set tx + val, ok := value.(string) + if !ok { + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for tx_isolation: %T", value) + } + switch val { + case "repeatable read", "read committed", "read uncommitted", "serializable": + // TODO (4127): This is a dangerous NOP. + default: + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value for tx_isolation: %v", val) + } + case "tx_read_only", "transaction_read_only": // TODO move this to set tx + val, err := validateSetOnOff(value, name) + if err != nil { + return err + } + switch val { + case 0, 1: + // TODO (4127): This is a dangerous NOP. + default: + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value for %v: %d", name, val) + } + case "workload": + val, ok := value.(string) + if !ok { + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for workload: %T", value) + } + out, ok := querypb.ExecuteOptions_Workload_value[strings.ToUpper(val)] + if !ok { + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid workload: %s", val) + } + if session.Options == nil { + session.Options = &querypb.ExecuteOptions{} + } + session.Options.Workload = querypb.ExecuteOptions_Workload(out) + case "sql_select_limit": + var val int64 + + switch cast := value.(type) { + case int64: + val = cast + case string: + if !strings.EqualFold(cast, "default") { + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected string value for sql_select_limit: %v", value) + } + default: + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for sql_select_limit: %T", value) + } -func handleSetUserDefinedVariables(session *SafeSession, k sqlparser.SetKey, v interface{}) error { - variable, err := sqltypes.BuildBindVariable(v) - if err != nil { - return err + if session.Options == nil { + session.Options = &querypb.ExecuteOptions{} + } + session.Options.SqlSelectLimit = val + case "sql_auto_is_null": + val, ok := value.(int64) + if !ok { + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for sql_auto_is_null: %T", value) + } + switch val { + case 0: + // This is the default setting for MySQL. Do nothing. + case 1: + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "sql_auto_is_null is not currently supported") + default: + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value for sql_auto_is_null: %d", val) + } + case "character_set_results": + // This is a statement that mysql-connector-j sends at the beginning. We return a canned response for it. + switch value { + case nil, "utf8", "utf8mb4", "latin1": + default: + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "disallowed value for character_set_results: %v", value) + } + case "wait_timeout": + _, ok := value.(int64) + if !ok { + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for wait_timeout: %T", value) + } + case "sql_mode", "net_write_timeout", "net_read_timeout", "lc_messages", "collation_connection", "foreign_key_checks", "sql_quote_show_create", "unique_checks": + log.Warningf("Ignored inapplicable SET %v = %v", name, value) + warnings.Add("IgnoredSet", 1) + case "charset", "names": + val, ok := value.(string) + if !ok { + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for charset/names: %T", value) + } + switch val { + case "", "utf8", "utf8mb4", "latin1", "default": + break + default: + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value for charset/names: %v", val) + } + default: + return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unsupported construct: %s", sql) } - session.SetUserDefinedVariable(k.Key, variable) return nil } -func (e *Executor) handleSetVitessMetadata(ctx context.Context, k sqlparser.SetKey, v interface{}) (*sqltypes.Result, error) { +func (e *Executor) handleSetVitessMetadata(ctx context.Context, name, value string) (*sqltypes.Result, error) { //TODO(kalfonso): move to its own acl check and consolidate into an acl component that can handle multiple operations (vschema, metadata) allowed := vschemaacl.Authorized(callerid.ImmediateCallerIDFromContext(ctx)) if !allowed { @@ -521,20 +576,15 @@ func (e *Executor) handleSetVitessMetadata(ctx context.Context, k sqlparser.SetK } - val, ok := v.(string) - if !ok { - return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected value type for charset: %T", v) - } - ts, err := e.serv.GetTopoServer() if err != nil { return nil, err } - if val == "" { - err = ts.DeleteMetadata(ctx, k.Key) + if value == "" { + err = ts.DeleteMetadata(ctx, name) } else { - err = ts.UpsertMetadata(ctx, k.Key, val) + err = ts.UpsertMetadata(ctx, name, value) } if err != nil { @@ -1179,39 +1229,36 @@ func (e *Executor) getPlan(vcursor *vcursorImpl, sql string, comments sqlparser. if err != nil { return nil, err } - if !e.normalize || !sqlparser.CanNormalize(stmt) { - plan, err := planbuilder.BuildFromStmt(sql, stmt, vcursor, sqlparser.BindVarNeeds{}) + + // Normalize if possible and retry. + query := sql + statement := stmt + bindVarNeeds := sqlparser.BindVarNeeds{} + if (e.normalize && sqlparser.CanNormalize(stmt)) || sqlparser.IsSetStatement(stmt) { + parameterize := e.normalize // the public flag is called normalize + result, err := sqlparser.PrepareAST(stmt, bindVars, "vtg", parameterize) if err != nil { return nil, err } - if !skipQueryPlanCache && !sqlparser.SkipQueryPlanCacheDirective(stmt) && plan.Instructions != nil { - e.plans.Set(planKey, plan) - } - return plan, nil - } - - // Normalize and retry. - result, err := sqlparser.PrepareAST(stmt, bindVars, "vtg") - if err != nil { - return nil, vterrors.Wrap(err, "failed to rewrite ast before planning") + statement = result.AST + bindVarNeeds = result.BindVarNeeds + query = sqlparser.String(statement) } - rewrittenStatement := result.AST - normalized := sqlparser.String(rewrittenStatement) if logStats != nil { - logStats.SQL = comments.Leading + normalized + comments.Trailing + logStats.SQL = comments.Leading + query + comments.Trailing logStats.BindVariables = bindVars } - planKey = vcursor.planPrefixKey() + ":" + normalized + planKey = vcursor.planPrefixKey() + ":" + query if plan, ok := e.plans.Get(planKey); ok { return plan.(*engine.Plan), nil } - plan, err := planbuilder.BuildFromStmt(normalized, rewrittenStatement, vcursor, result.BindVarNeeds) + plan, err := planbuilder.BuildFromStmt(query, statement, vcursor, bindVarNeeds) if err != nil { return nil, err } - if !skipQueryPlanCache && !sqlparser.SkipQueryPlanCacheDirective(rewrittenStatement) && plan.Instructions != nil { + if !skipQueryPlanCache && !sqlparser.SkipQueryPlanCacheDirective(statement) && plan.Instructions != nil { e.plans.Set(planKey, plan) } return plan, nil diff --git a/go/vt/vtgate/executor_set_test.go b/go/vt/vtgate/executor_set_test.go index 6cf23168966..17b3f6a4dcc 100644 --- a/go/vt/vtgate/executor_set_test.go +++ b/go/vt/vtgate/executor_set_test.go @@ -19,6 +19,7 @@ package vtgate import ( "testing" + "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/test/utils" "vitess.io/vitess/go/vt/vterrors" @@ -117,7 +118,7 @@ func TestExecutorSet(t *testing.T) { err: "unsupported in set: global", }, { in: "set global @@session.client_found_rows = 1", - err: "unsupported in set: global", + err: "cannot use scope and @@", }, { in: "set client_found_rows = 'aa'", err: "unexpected value type for client_found_rows: string", @@ -206,8 +207,12 @@ func TestExecutorSet(t *testing.T) { in: "set net_write_timeout = 600", out: &vtgatepb.Session{Autocommit: true}, }, { - in: "set sql_mode = 'STRICT_ALL_TABLES'", - out: &vtgatepb.Session{Autocommit: true}, + in: "set sql_mode = 'STRICT_ALL_TABLES'", + out: &vtgatepb.Session{Autocommit: true, + Warnings: []*querypb.QueryWarning{{ + Code: mysql.ERNotSupportedYet, + Message: "Ignored inapplicable SET sql_mode = 'STRICT_ALL_TABLES'", + }}}, }, { in: "set net_read_timeout = 600", out: &vtgatepb.Session{Autocommit: true}, @@ -253,6 +258,30 @@ func TestExecutorSet(t *testing.T) { }, { in: "set @foo = 2.1, @bar = 'baz'", out: &vtgatepb.Session{UserDefinedVariables: createMap([]string{"foo", "bar"}, []interface{}{2.1, "baz"}), Autocommit: true}, + }, { + in: "set session transaction isolation level repeatable read", + out: &vtgatepb.Session{Autocommit: true}, + }, { + in: "set session transaction isolation level read committed", + out: &vtgatepb.Session{Autocommit: true}, + }, { + in: "set session transaction isolation level read uncommitted", + out: &vtgatepb.Session{Autocommit: true}, + }, { + in: "set session transaction isolation level serializable", + out: &vtgatepb.Session{Autocommit: true}, + }, { + in: "set transaction isolation level serializable", + out: &vtgatepb.Session{Autocommit: true}, + }, { + in: "set transaction read only", + out: &vtgatepb.Session{Autocommit: true}, + }, { + in: "set transaction read write", + out: &vtgatepb.Session{Autocommit: true}, + }, { + in: "set session transaction read write", + out: &vtgatepb.Session{Autocommit: true}, }} for _, tcase := range testcases { t.Run(tcase.in, func(t *testing.T) { diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go index 810d4ae498a..950712b508e 100644 --- a/go/vt/vtgate/executor_test.go +++ b/go/vt/vtgate/executor_test.go @@ -345,7 +345,7 @@ func TestExecutorAutocommit(t *testing.T) { if err != nil { t.Fatal(err) } - _ = testQueryLog(t, logChan, "TestExecute", "SET", "set autocommit=1", 0) + _ = testQueryLog(t, logChan, "TestExecute", "SET", "set session autocommit = 1", 0) // Setting autocommit=1 commits existing transaction. if got, want := sbclookup.CommitCount.Get(), startCount+1; got != want { diff --git a/go/vt/vtgate/planbuilder/builder.go b/go/vt/vtgate/planbuilder/builder.go index 091235bd2b7..54b076790e2 100644 --- a/go/vt/vtgate/planbuilder/builder.go +++ b/go/vt/vtgate/planbuilder/builder.go @@ -305,7 +305,7 @@ func BuildFromStmt(query string, stmt sqlparser.Statement, vschema ContextVSchem instruction, err = buildOtherReadAndAdmin(query, vschema) case *sqlparser.Set: instruction, err = buildSetPlan(query, stmt, vschema) - case *sqlparser.Show, *sqlparser.DBDDL: + case *sqlparser.Show, *sqlparser.DBDDL, *sqlparser.SetTransaction: return nil, ErrPlanNotSupported case *sqlparser.Begin, *sqlparser.Commit, *sqlparser.Rollback: // Empty by design. Not executed by a plan diff --git a/go/vt/vtgate/planbuilder/set.go b/go/vt/vtgate/planbuilder/set.go index 9330e9dd46e..d145a5f5470 100644 --- a/go/vt/vtgate/planbuilder/set.go +++ b/go/vt/vtgate/planbuilder/set.go @@ -18,11 +18,13 @@ package planbuilder import ( "fmt" + "strings" - "vitess.io/vitess/go/vt/key" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" - "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vterrors" + + "vitess.io/vitess/go/vt/key" + "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vtgate/engine" ) @@ -38,13 +40,11 @@ func buildSetPlan(sql string, stmt *sqlparser.Set, vschema ContextVSchema) (engi var setOp engine.SetOp var err error - if stmt.Scope == sqlparser.GlobalStr { - return nil, vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, "unsupported in set: global") - } - for _, expr := range stmt.Exprs { - switch expr.Name.AtCount() { - case sqlparser.SingleAt: + switch expr.Scope { + case sqlparser.GlobalStr: + return nil, vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, "unsupported in set: global") + case "": pv, err := sqlparser.NewPlanValue(expr.Expr) if err != nil { return nil, err @@ -53,7 +53,7 @@ func buildSetPlan(sql string, stmt *sqlparser.Set, vschema ContextVSchema) (engi Name: expr.Name.Lowered(), PlanValue: pv, } - case sqlparser.DoubleAt: + case sqlparser.SessionStr: planFunc, ok := sysVarPlanningFunc[expr.Name.Lowered()] if !ok { return nil, ErrPlanNotSupported @@ -85,6 +85,10 @@ func buildSetOpIgnore(expr *sqlparser.SetExpr, _ ContextVSchema) (engine.SetOp, func buildSetOpCheckAndIgnore(expr *sqlparser.SetExpr, vschema ContextVSchema) (engine.SetOp, error) { keyspace, err := vschema.DefaultKeyspace() if err != nil { + //TODO: Record warning for switching plan construct. + if strings.HasPrefix(err.Error(), "no keyspace in database name specified") { + return buildSetOpIgnore(expr, vschema) + } return nil, err }