From 3316399b4f3a329a983fd6fe73a96908f3bedacd Mon Sep 17 00:00:00 2001 From: Rohit Nayak Date: Wed, 2 Sep 2020 18:19:09 +0200 Subject: [PATCH 1/6] VStream From: POC supporting 'vstream * from table' with where and limit Signed-off-by: Rohit Nayak --- go/vt/discovery/healthcheck.go | 3 + go/vt/sqlparser/analyzer.go | 5 + go/vt/sqlparser/ast.go | 16 + go/vt/sqlparser/parse_test.go | 2 + go/vt/sqlparser/parser.go | 4 + go/vt/sqlparser/rewriter.go | 27 + go/vt/sqlparser/sql.go | 8074 ++++++++++++----------- go/vt/sqlparser/sql.y | 11 +- go/vt/sqlparser/token.go | 1 + go/vt/vtgate/executor.go | 9 +- go/vt/vtgate/executor_framework_test.go | 4 +- go/vt/vtgate/executor_vstream.go | 189 + go/vt/vtgate/executor_vstream_test.go | 132 + go/vt/vtgate/tabletgateway.go | 2 + 14 files changed, 4452 insertions(+), 4027 deletions(-) create mode 100644 go/vt/vtgate/executor_vstream.go create mode 100644 go/vt/vtgate/executor_vstream_test.go diff --git a/go/vt/discovery/healthcheck.go b/go/vt/discovery/healthcheck.go index d0ca06a7062..2795302d1e1 100644 --- a/go/vt/discovery/healthcheck.go +++ b/go/vt/discovery/healthcheck.go @@ -572,6 +572,9 @@ func (hc *HealthCheckImpl) GetHealthyTabletStats(target *query.Target) []*Tablet var result []*TabletHealth hc.mu.Lock() defer hc.mu.Unlock() + if target.Shard == "" { + target.Shard = "0" + } return append(result, hc.healthy[hc.keyFromTarget(target)]...) } diff --git a/go/vt/sqlparser/analyzer.go b/go/vt/sqlparser/analyzer.go index ed4c9df4305..d4b1153e276 100644 --- a/go/vt/sqlparser/analyzer.go +++ b/go/vt/sqlparser/analyzer.go @@ -56,6 +56,7 @@ const ( StmtSavepoint StmtSRollback StmtRelease + StmtVStream ) //ASTToStatementType returns a StatementType from an AST stmt @@ -138,6 +139,8 @@ func Preview(sql string) StatementType { return StmtSelect case "stream": return StmtStream + case "vstream": + return StmtVStream case "insert": return StmtInsert case "replace": @@ -192,6 +195,8 @@ func (s StatementType) String() string { return "SELECT" case StmtStream: return "STREAM" + case StmtVStream: + return "VSTREAM" case StmtInsert: return "INSERT" case StmtReplace: diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 1f55f7149e2..889fff62d67 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -86,6 +86,15 @@ type ( Lock string } + // VStream represents a VSTREAM statement. + VStream struct { + Comments Comments + SelectExpr SelectExpr + Table TableName + Where *Where + Limit *Limit + } + // Stream represents a SELECT statement. Stream struct { Comments Comments @@ -270,6 +279,7 @@ type ( func (*Union) iStatement() {} func (*Select) iStatement() {} func (*Stream) iStatement() {} +func (*VStream) iStatement() {} func (*Insert) iStatement() {} func (*Update) iStatement() {} func (*Delete) iStatement() {} @@ -921,6 +931,12 @@ func (node *UnionSelect) Format(buf *TrackedBuffer) { buf.astPrintf(node, " %s %v", node.Type, node.Statement) } +// Format formats the node. +func (node *VStream) Format(buf *TrackedBuffer) { + buf.astPrintf(node, "vstream %v%v from %v", + node.Comments, node.SelectExpr, node.Table) +} + // Format formats the node. func (node *Stream) Format(buf *TrackedBuffer) { buf.astPrintf(node, "stream %v%v from %v", diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index 094bb8a2e5f..4ceccb55b82 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -1588,6 +1588,8 @@ var ( input: "delete from t partition (p0) where a = 1", }, { input: "stream * from t", + }, { + input: "vstream * from t", }, { input: "stream /* comment */ * from t", }, { diff --git a/go/vt/sqlparser/parser.go b/go/vt/sqlparser/parser.go index 1885a408a70..5e295fa9f67 100644 --- a/go/vt/sqlparser/parser.go +++ b/go/vt/sqlparser/parser.go @@ -20,6 +20,7 @@ import ( "errors" "fmt" "io" + "runtime/debug" "sync" "vitess.io/vitess/go/vt/log" @@ -93,6 +94,7 @@ func Parse(sql string) (Statement, error) { return nil, vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, tokenizer.LastError.Error()) } if tokenizer.ParseTree == nil { + log.Infof("Empty Statement: %s", debug.Stack()) return nil, ErrEmpty } return tokenizer.ParseTree, nil @@ -106,6 +108,8 @@ func ParseStrictDDL(sql string) (Statement, error) { return nil, tokenizer.LastError } if tokenizer.ParseTree == nil { + log.Infof("Empty Statement DDL: %s", debug.Stack()) + return nil, ErrEmpty } return tokenizer.ParseTree, nil diff --git a/go/vt/sqlparser/rewriter.go b/go/vt/sqlparser/rewriter.go index 43c2aff3acd..02c328695c9 100644 --- a/go/vt/sqlparser/rewriter.go +++ b/go/vt/sqlparser/rewriter.go @@ -805,6 +805,26 @@ func replaceUseDBName(newNode, parent SQLNode) { parent.(*Use).DBName = newNode.(TableIdent) } +func replaceVStreamComments(newNode, parent SQLNode) { + parent.(*VStream).Comments = newNode.(Comments) +} + +func replaceVStreamLimit(newNode, parent SQLNode) { + parent.(*VStream).Limit = newNode.(*Limit) +} + +func replaceVStreamSelectExpr(newNode, parent SQLNode) { + parent.(*VStream).SelectExpr = newNode.(SelectExpr) +} + +func replaceVStreamTable(newNode, parent SQLNode) { + parent.(*VStream).Table = newNode.(TableName) +} + +func replaceVStreamWhere(newNode, parent SQLNode) { + parent.(*VStream).Where = newNode.(*Where) +} + type replaceValTupleItems int func (r *replaceValTupleItems) replace(newNode, container SQLNode) { @@ -1348,6 +1368,13 @@ func (a *application) apply(parent, node SQLNode, replacer replacerFunc) { case *Use: a.apply(node, n.DBName, replaceUseDBName) + case *VStream: + a.apply(node, n.Comments, replaceVStreamComments) + a.apply(node, n.Limit, replaceVStreamLimit) + a.apply(node, n.SelectExpr, replaceVStreamSelectExpr) + a.apply(node, n.Table, replaceVStreamTable) + a.apply(node, n.Where, replaceVStreamWhere) + case ValTuple: replacer := replaceValTupleItems(0) replacerRef := &replacer diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 665f08b34e1..7bd224b61a1 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -113,345 +113,346 @@ const LEX_ERROR = 57346 const UNION = 57347 const SELECT = 57348 const STREAM = 57349 -const INSERT = 57350 -const UPDATE = 57351 -const DELETE = 57352 -const FROM = 57353 -const WHERE = 57354 -const GROUP = 57355 -const HAVING = 57356 -const ORDER = 57357 -const BY = 57358 -const LIMIT = 57359 -const OFFSET = 57360 -const FOR = 57361 -const ALL = 57362 -const DISTINCT = 57363 -const AS = 57364 -const EXISTS = 57365 -const ASC = 57366 -const DESC = 57367 -const INTO = 57368 -const DUPLICATE = 57369 -const KEY = 57370 -const DEFAULT = 57371 -const SET = 57372 -const LOCK = 57373 -const UNLOCK = 57374 -const KEYS = 57375 -const DO = 57376 -const DISTINCTROW = 57377 -const VALUES = 57378 -const LAST_INSERT_ID = 57379 -const NEXT = 57380 -const VALUE = 57381 -const SHARE = 57382 -const MODE = 57383 -const SQL_NO_CACHE = 57384 -const SQL_CACHE = 57385 -const SQL_CALC_FOUND_ROWS = 57386 -const JOIN = 57387 -const STRAIGHT_JOIN = 57388 -const LEFT = 57389 -const RIGHT = 57390 -const INNER = 57391 -const OUTER = 57392 -const CROSS = 57393 -const NATURAL = 57394 -const USE = 57395 -const FORCE = 57396 -const ON = 57397 -const USING = 57398 -const ID = 57399 -const AT_ID = 57400 -const AT_AT_ID = 57401 -const HEX = 57402 -const STRING = 57403 -const INTEGRAL = 57404 -const FLOAT = 57405 -const HEXNUM = 57406 -const VALUE_ARG = 57407 -const LIST_ARG = 57408 -const COMMENT = 57409 -const COMMENT_KEYWORD = 57410 -const BIT_LITERAL = 57411 -const NULL = 57412 -const TRUE = 57413 -const FALSE = 57414 -const OFF = 57415 -const OR = 57416 -const XOR = 57417 -const AND = 57418 -const NOT = 57419 -const BETWEEN = 57420 -const CASE = 57421 -const WHEN = 57422 -const THEN = 57423 -const ELSE = 57424 -const END = 57425 -const LE = 57426 -const GE = 57427 -const NE = 57428 -const NULL_SAFE_EQUAL = 57429 -const IS = 57430 -const LIKE = 57431 -const REGEXP = 57432 -const IN = 57433 -const SHIFT_LEFT = 57434 -const SHIFT_RIGHT = 57435 -const DIV = 57436 -const MOD = 57437 -const UNARY = 57438 -const COLLATE = 57439 -const BINARY = 57440 -const UNDERSCORE_BINARY = 57441 -const UNDERSCORE_UTF8MB4 = 57442 -const UNDERSCORE_UTF8 = 57443 -const UNDERSCORE_LATIN1 = 57444 -const INTERVAL = 57445 -const JSON_EXTRACT_OP = 57446 -const JSON_UNQUOTE_EXTRACT_OP = 57447 -const CREATE = 57448 -const ALTER = 57449 -const DROP = 57450 -const RENAME = 57451 -const ANALYZE = 57452 -const ADD = 57453 -const FLUSH = 57454 -const SCHEMA = 57455 -const TABLE = 57456 -const INDEX = 57457 -const VIEW = 57458 -const TO = 57459 -const IGNORE = 57460 -const IF = 57461 -const UNIQUE = 57462 -const PRIMARY = 57463 -const COLUMN = 57464 -const SPATIAL = 57465 -const FULLTEXT = 57466 -const KEY_BLOCK_SIZE = 57467 -const CHECK = 57468 -const INDEXES = 57469 -const ACTION = 57470 -const CASCADE = 57471 -const CONSTRAINT = 57472 -const FOREIGN = 57473 -const NO = 57474 -const REFERENCES = 57475 -const RESTRICT = 57476 -const SHOW = 57477 -const DESCRIBE = 57478 -const EXPLAIN = 57479 -const DATE = 57480 -const ESCAPE = 57481 -const REPAIR = 57482 -const OPTIMIZE = 57483 -const TRUNCATE = 57484 -const MAXVALUE = 57485 -const PARTITION = 57486 -const REORGANIZE = 57487 -const LESS = 57488 -const THAN = 57489 -const PROCEDURE = 57490 -const TRIGGER = 57491 -const VINDEX = 57492 -const VINDEXES = 57493 -const STATUS = 57494 -const VARIABLES = 57495 -const WARNINGS = 57496 -const SEQUENCE = 57497 -const BEGIN = 57498 -const START = 57499 -const TRANSACTION = 57500 -const COMMIT = 57501 -const ROLLBACK = 57502 -const SAVEPOINT = 57503 -const RELEASE = 57504 -const WORK = 57505 -const BIT = 57506 -const TINYINT = 57507 -const SMALLINT = 57508 -const MEDIUMINT = 57509 -const INT = 57510 -const INTEGER = 57511 -const BIGINT = 57512 -const INTNUM = 57513 -const REAL = 57514 -const DOUBLE = 57515 -const FLOAT_TYPE = 57516 -const DECIMAL = 57517 -const NUMERIC = 57518 -const TIME = 57519 -const TIMESTAMP = 57520 -const DATETIME = 57521 -const YEAR = 57522 -const CHAR = 57523 -const VARCHAR = 57524 -const BOOL = 57525 -const CHARACTER = 57526 -const VARBINARY = 57527 -const NCHAR = 57528 -const TEXT = 57529 -const TINYTEXT = 57530 -const MEDIUMTEXT = 57531 -const LONGTEXT = 57532 -const BLOB = 57533 -const TINYBLOB = 57534 -const MEDIUMBLOB = 57535 -const LONGBLOB = 57536 -const JSON = 57537 -const ENUM = 57538 -const GEOMETRY = 57539 -const POINT = 57540 -const LINESTRING = 57541 -const POLYGON = 57542 -const GEOMETRYCOLLECTION = 57543 -const MULTIPOINT = 57544 -const MULTILINESTRING = 57545 -const MULTIPOLYGON = 57546 -const NULLX = 57547 -const AUTO_INCREMENT = 57548 -const APPROXNUM = 57549 -const SIGNED = 57550 -const UNSIGNED = 57551 -const ZEROFILL = 57552 -const COLLATION = 57553 -const DATABASES = 57554 -const TABLES = 57555 -const VITESS_METADATA = 57556 -const VSCHEMA = 57557 -const FULL = 57558 -const PROCESSLIST = 57559 -const COLUMNS = 57560 -const FIELDS = 57561 -const ENGINES = 57562 -const PLUGINS = 57563 -const EXTENDED = 57564 -const NAMES = 57565 -const CHARSET = 57566 -const GLOBAL = 57567 -const SESSION = 57568 -const ISOLATION = 57569 -const LEVEL = 57570 -const READ = 57571 -const WRITE = 57572 -const ONLY = 57573 -const REPEATABLE = 57574 -const COMMITTED = 57575 -const UNCOMMITTED = 57576 -const SERIALIZABLE = 57577 -const CURRENT_TIMESTAMP = 57578 -const DATABASE = 57579 -const CURRENT_DATE = 57580 -const CURRENT_TIME = 57581 -const LOCALTIME = 57582 -const LOCALTIMESTAMP = 57583 -const UTC_DATE = 57584 -const UTC_TIME = 57585 -const UTC_TIMESTAMP = 57586 -const REPLACE = 57587 -const CONVERT = 57588 -const CAST = 57589 -const SUBSTR = 57590 -const SUBSTRING = 57591 -const GROUP_CONCAT = 57592 -const SEPARATOR = 57593 -const TIMESTAMPADD = 57594 -const TIMESTAMPDIFF = 57595 -const MATCH = 57596 -const AGAINST = 57597 -const BOOLEAN = 57598 -const LANGUAGE = 57599 -const WITH = 57600 -const QUERY = 57601 -const EXPANSION = 57602 -const UNUSED = 57603 -const ARRAY = 57604 -const CUME_DIST = 57605 -const DESCRIPTION = 57606 -const DENSE_RANK = 57607 -const EMPTY = 57608 -const EXCEPT = 57609 -const FIRST_VALUE = 57610 -const GROUPING = 57611 -const GROUPS = 57612 -const JSON_TABLE = 57613 -const LAG = 57614 -const LAST_VALUE = 57615 -const LATERAL = 57616 -const LEAD = 57617 -const MEMBER = 57618 -const NTH_VALUE = 57619 -const NTILE = 57620 -const OF = 57621 -const OVER = 57622 -const PERCENT_RANK = 57623 -const RANK = 57624 -const RECURSIVE = 57625 -const ROW_NUMBER = 57626 -const SYSTEM = 57627 -const WINDOW = 57628 -const ACTIVE = 57629 -const ADMIN = 57630 -const BUCKETS = 57631 -const CLONE = 57632 -const COMPONENT = 57633 -const DEFINITION = 57634 -const ENFORCED = 57635 -const EXCLUDE = 57636 -const FOLLOWING = 57637 -const GEOMCOLLECTION = 57638 -const GET_MASTER_PUBLIC_KEY = 57639 -const HISTOGRAM = 57640 -const HISTORY = 57641 -const INACTIVE = 57642 -const INVISIBLE = 57643 -const LOCKED = 57644 -const MASTER_COMPRESSION_ALGORITHMS = 57645 -const MASTER_PUBLIC_KEY_PATH = 57646 -const MASTER_TLS_CIPHERSUITES = 57647 -const MASTER_ZSTD_COMPRESSION_LEVEL = 57648 -const NESTED = 57649 -const NETWORK_NAMESPACE = 57650 -const NOWAIT = 57651 -const NULLS = 57652 -const OJ = 57653 -const OLD = 57654 -const OPTIONAL = 57655 -const ORDINALITY = 57656 -const ORGANIZATION = 57657 -const OTHERS = 57658 -const PATH = 57659 -const PERSIST = 57660 -const PERSIST_ONLY = 57661 -const PRECEDING = 57662 -const PRIVILEGE_CHECKS_USER = 57663 -const PROCESS = 57664 -const RANDOM = 57665 -const REFERENCE = 57666 -const REQUIRE_ROW_FORMAT = 57667 -const RESOURCE = 57668 -const RESPECT = 57669 -const RESTART = 57670 -const RETAIN = 57671 -const REUSE = 57672 -const ROLE = 57673 -const SECONDARY = 57674 -const SECONDARY_ENGINE = 57675 -const SECONDARY_LOAD = 57676 -const SECONDARY_UNLOAD = 57677 -const SKIP = 57678 -const SRID = 57679 -const THREAD_PRIORITY = 57680 -const TIES = 57681 -const UNBOUNDED = 57682 -const VCPU = 57683 -const VISIBLE = 57684 -const FORMAT = 57685 -const TREE = 57686 -const VITESS = 57687 -const TRADITIONAL = 57688 +const VSTREAM = 57350 +const INSERT = 57351 +const UPDATE = 57352 +const DELETE = 57353 +const FROM = 57354 +const WHERE = 57355 +const GROUP = 57356 +const HAVING = 57357 +const ORDER = 57358 +const BY = 57359 +const LIMIT = 57360 +const OFFSET = 57361 +const FOR = 57362 +const ALL = 57363 +const DISTINCT = 57364 +const AS = 57365 +const EXISTS = 57366 +const ASC = 57367 +const DESC = 57368 +const INTO = 57369 +const DUPLICATE = 57370 +const KEY = 57371 +const DEFAULT = 57372 +const SET = 57373 +const LOCK = 57374 +const UNLOCK = 57375 +const KEYS = 57376 +const DO = 57377 +const DISTINCTROW = 57378 +const VALUES = 57379 +const LAST_INSERT_ID = 57380 +const NEXT = 57381 +const VALUE = 57382 +const SHARE = 57383 +const MODE = 57384 +const SQL_NO_CACHE = 57385 +const SQL_CACHE = 57386 +const SQL_CALC_FOUND_ROWS = 57387 +const JOIN = 57388 +const STRAIGHT_JOIN = 57389 +const LEFT = 57390 +const RIGHT = 57391 +const INNER = 57392 +const OUTER = 57393 +const CROSS = 57394 +const NATURAL = 57395 +const USE = 57396 +const FORCE = 57397 +const ON = 57398 +const USING = 57399 +const ID = 57400 +const AT_ID = 57401 +const AT_AT_ID = 57402 +const HEX = 57403 +const STRING = 57404 +const INTEGRAL = 57405 +const FLOAT = 57406 +const HEXNUM = 57407 +const VALUE_ARG = 57408 +const LIST_ARG = 57409 +const COMMENT = 57410 +const COMMENT_KEYWORD = 57411 +const BIT_LITERAL = 57412 +const NULL = 57413 +const TRUE = 57414 +const FALSE = 57415 +const OFF = 57416 +const OR = 57417 +const XOR = 57418 +const AND = 57419 +const NOT = 57420 +const BETWEEN = 57421 +const CASE = 57422 +const WHEN = 57423 +const THEN = 57424 +const ELSE = 57425 +const END = 57426 +const LE = 57427 +const GE = 57428 +const NE = 57429 +const NULL_SAFE_EQUAL = 57430 +const IS = 57431 +const LIKE = 57432 +const REGEXP = 57433 +const IN = 57434 +const SHIFT_LEFT = 57435 +const SHIFT_RIGHT = 57436 +const DIV = 57437 +const MOD = 57438 +const UNARY = 57439 +const COLLATE = 57440 +const BINARY = 57441 +const UNDERSCORE_BINARY = 57442 +const UNDERSCORE_UTF8MB4 = 57443 +const UNDERSCORE_UTF8 = 57444 +const UNDERSCORE_LATIN1 = 57445 +const INTERVAL = 57446 +const JSON_EXTRACT_OP = 57447 +const JSON_UNQUOTE_EXTRACT_OP = 57448 +const CREATE = 57449 +const ALTER = 57450 +const DROP = 57451 +const RENAME = 57452 +const ANALYZE = 57453 +const ADD = 57454 +const FLUSH = 57455 +const SCHEMA = 57456 +const TABLE = 57457 +const INDEX = 57458 +const VIEW = 57459 +const TO = 57460 +const IGNORE = 57461 +const IF = 57462 +const UNIQUE = 57463 +const PRIMARY = 57464 +const COLUMN = 57465 +const SPATIAL = 57466 +const FULLTEXT = 57467 +const KEY_BLOCK_SIZE = 57468 +const CHECK = 57469 +const INDEXES = 57470 +const ACTION = 57471 +const CASCADE = 57472 +const CONSTRAINT = 57473 +const FOREIGN = 57474 +const NO = 57475 +const REFERENCES = 57476 +const RESTRICT = 57477 +const SHOW = 57478 +const DESCRIBE = 57479 +const EXPLAIN = 57480 +const DATE = 57481 +const ESCAPE = 57482 +const REPAIR = 57483 +const OPTIMIZE = 57484 +const TRUNCATE = 57485 +const MAXVALUE = 57486 +const PARTITION = 57487 +const REORGANIZE = 57488 +const LESS = 57489 +const THAN = 57490 +const PROCEDURE = 57491 +const TRIGGER = 57492 +const VINDEX = 57493 +const VINDEXES = 57494 +const STATUS = 57495 +const VARIABLES = 57496 +const WARNINGS = 57497 +const SEQUENCE = 57498 +const BEGIN = 57499 +const START = 57500 +const TRANSACTION = 57501 +const COMMIT = 57502 +const ROLLBACK = 57503 +const SAVEPOINT = 57504 +const RELEASE = 57505 +const WORK = 57506 +const BIT = 57507 +const TINYINT = 57508 +const SMALLINT = 57509 +const MEDIUMINT = 57510 +const INT = 57511 +const INTEGER = 57512 +const BIGINT = 57513 +const INTNUM = 57514 +const REAL = 57515 +const DOUBLE = 57516 +const FLOAT_TYPE = 57517 +const DECIMAL = 57518 +const NUMERIC = 57519 +const TIME = 57520 +const TIMESTAMP = 57521 +const DATETIME = 57522 +const YEAR = 57523 +const CHAR = 57524 +const VARCHAR = 57525 +const BOOL = 57526 +const CHARACTER = 57527 +const VARBINARY = 57528 +const NCHAR = 57529 +const TEXT = 57530 +const TINYTEXT = 57531 +const MEDIUMTEXT = 57532 +const LONGTEXT = 57533 +const BLOB = 57534 +const TINYBLOB = 57535 +const MEDIUMBLOB = 57536 +const LONGBLOB = 57537 +const JSON = 57538 +const ENUM = 57539 +const GEOMETRY = 57540 +const POINT = 57541 +const LINESTRING = 57542 +const POLYGON = 57543 +const GEOMETRYCOLLECTION = 57544 +const MULTIPOINT = 57545 +const MULTILINESTRING = 57546 +const MULTIPOLYGON = 57547 +const NULLX = 57548 +const AUTO_INCREMENT = 57549 +const APPROXNUM = 57550 +const SIGNED = 57551 +const UNSIGNED = 57552 +const ZEROFILL = 57553 +const COLLATION = 57554 +const DATABASES = 57555 +const TABLES = 57556 +const VITESS_METADATA = 57557 +const VSCHEMA = 57558 +const FULL = 57559 +const PROCESSLIST = 57560 +const COLUMNS = 57561 +const FIELDS = 57562 +const ENGINES = 57563 +const PLUGINS = 57564 +const EXTENDED = 57565 +const NAMES = 57566 +const CHARSET = 57567 +const GLOBAL = 57568 +const SESSION = 57569 +const ISOLATION = 57570 +const LEVEL = 57571 +const READ = 57572 +const WRITE = 57573 +const ONLY = 57574 +const REPEATABLE = 57575 +const COMMITTED = 57576 +const UNCOMMITTED = 57577 +const SERIALIZABLE = 57578 +const CURRENT_TIMESTAMP = 57579 +const DATABASE = 57580 +const CURRENT_DATE = 57581 +const CURRENT_TIME = 57582 +const LOCALTIME = 57583 +const LOCALTIMESTAMP = 57584 +const UTC_DATE = 57585 +const UTC_TIME = 57586 +const UTC_TIMESTAMP = 57587 +const REPLACE = 57588 +const CONVERT = 57589 +const CAST = 57590 +const SUBSTR = 57591 +const SUBSTRING = 57592 +const GROUP_CONCAT = 57593 +const SEPARATOR = 57594 +const TIMESTAMPADD = 57595 +const TIMESTAMPDIFF = 57596 +const MATCH = 57597 +const AGAINST = 57598 +const BOOLEAN = 57599 +const LANGUAGE = 57600 +const WITH = 57601 +const QUERY = 57602 +const EXPANSION = 57603 +const UNUSED = 57604 +const ARRAY = 57605 +const CUME_DIST = 57606 +const DESCRIPTION = 57607 +const DENSE_RANK = 57608 +const EMPTY = 57609 +const EXCEPT = 57610 +const FIRST_VALUE = 57611 +const GROUPING = 57612 +const GROUPS = 57613 +const JSON_TABLE = 57614 +const LAG = 57615 +const LAST_VALUE = 57616 +const LATERAL = 57617 +const LEAD = 57618 +const MEMBER = 57619 +const NTH_VALUE = 57620 +const NTILE = 57621 +const OF = 57622 +const OVER = 57623 +const PERCENT_RANK = 57624 +const RANK = 57625 +const RECURSIVE = 57626 +const ROW_NUMBER = 57627 +const SYSTEM = 57628 +const WINDOW = 57629 +const ACTIVE = 57630 +const ADMIN = 57631 +const BUCKETS = 57632 +const CLONE = 57633 +const COMPONENT = 57634 +const DEFINITION = 57635 +const ENFORCED = 57636 +const EXCLUDE = 57637 +const FOLLOWING = 57638 +const GEOMCOLLECTION = 57639 +const GET_MASTER_PUBLIC_KEY = 57640 +const HISTOGRAM = 57641 +const HISTORY = 57642 +const INACTIVE = 57643 +const INVISIBLE = 57644 +const LOCKED = 57645 +const MASTER_COMPRESSION_ALGORITHMS = 57646 +const MASTER_PUBLIC_KEY_PATH = 57647 +const MASTER_TLS_CIPHERSUITES = 57648 +const MASTER_ZSTD_COMPRESSION_LEVEL = 57649 +const NESTED = 57650 +const NETWORK_NAMESPACE = 57651 +const NOWAIT = 57652 +const NULLS = 57653 +const OJ = 57654 +const OLD = 57655 +const OPTIONAL = 57656 +const ORDINALITY = 57657 +const ORGANIZATION = 57658 +const OTHERS = 57659 +const PATH = 57660 +const PERSIST = 57661 +const PERSIST_ONLY = 57662 +const PRECEDING = 57663 +const PRIVILEGE_CHECKS_USER = 57664 +const PROCESS = 57665 +const RANDOM = 57666 +const REFERENCE = 57667 +const REQUIRE_ROW_FORMAT = 57668 +const RESOURCE = 57669 +const RESPECT = 57670 +const RESTART = 57671 +const RETAIN = 57672 +const REUSE = 57673 +const ROLE = 57674 +const SECONDARY = 57675 +const SECONDARY_ENGINE = 57676 +const SECONDARY_LOAD = 57677 +const SECONDARY_UNLOAD = 57678 +const SKIP = 57679 +const SRID = 57680 +const THREAD_PRIORITY = 57681 +const TIES = 57682 +const UNBOUNDED = 57683 +const VCPU = 57684 +const VISIBLE = 57685 +const FORMAT = 57686 +const TREE = 57687 +const VITESS = 57688 +const TRADITIONAL = 57689 var yyToknames = [...]string{ "$end", @@ -461,6 +462,7 @@ var yyToknames = [...]string{ "UNION", "SELECT", "STREAM", + "VSTREAM", "INSERT", "UPDATE", "DELETE", @@ -830,432 +832,446 @@ var yyExca = [...]int{ -1, 1, 1, -1, -2, 0, - -1, 42, - 33, 305, - 132, 305, - 144, 305, - 169, 319, - 170, 319, - -2, 307, - -1, 47, - 134, 329, - -2, 327, - -1, 70, - 38, 365, - -2, 373, - -1, 388, - 120, 696, - -2, 692, - -1, 389, - 120, 697, - -2, 693, - -1, 403, - 38, 366, - -2, 378, - -1, 404, - 38, 367, - -2, 379, - -1, 427, - 88, 950, - -2, 72, - -1, 428, - 88, 866, - -2, 73, - -1, 433, - 88, 833, - -2, 658, - -1, 435, - 88, 897, - -2, 660, - -1, 755, - 56, 54, - 58, 54, - -2, 58, - -1, 933, - 120, 699, + -1, 44, + 34, 307, + 133, 307, + 145, 307, + 170, 321, + 171, 321, + -2, 309, + -1, 49, + 135, 331, + -2, 329, + -1, 72, + 39, 367, + -2, 375, + -1, 391, + 121, 698, + -2, 694, + -1, 392, + 121, 699, -2, 695, - -1, 1361, - 5, 617, - 17, 617, - 19, 617, - 31, 617, - 59, 617, - -2, 404, + -1, 406, + 39, 368, + -2, 380, + -1, 407, + 39, 369, + -2, 381, + -1, 431, + 89, 952, + -2, 74, + -1, 432, + 89, 868, + -2, 75, + -1, 437, + 89, 835, + -2, 660, + -1, 439, + 89, 899, + -2, 662, + -1, 760, + 57, 56, + 59, 56, + -2, 60, + -1, 938, + 121, 701, + -2, 697, + -1, 1369, + 5, 619, + 18, 619, + 20, 619, + 32, 619, + 60, 619, + -2, 406, } const yyPrivate = 57344 -const yyLast = 17680 +const yyLast = 17848 var yyAct = [...]int{ - 388, 1600, 1590, 1400, 1557, 1288, 332, 1193, 1473, 1506, - 1038, 1213, 1460, 1341, 347, 1374, 588, 1011, 1194, 1338, - 1081, 1047, 599, 722, 1342, 1239, 1037, 1347, 1353, 69, - 3, 683, 361, 927, 1034, 1307, 1265, 89, 432, 597, - 396, 283, 855, 303, 283, 1132, 874, 729, 1181, 89, - 920, 283, 769, 997, 318, 748, 1256, 1051, 1013, 749, - 405, 732, 897, 727, 1008, 953, 334, 27, 390, 768, - 739, 1077, 766, 990, 557, 67, 283, 89, 421, 757, - 558, 283, 330, 283, 65, 418, 70, 883, 323, 1067, - 64, 7, 696, 6, 5, 1593, 1577, 1588, 1100, 429, - 577, 1565, 1585, 1401, 1576, 1061, 1564, 319, 697, 1324, - 322, 1430, 1099, 562, 1369, 1370, 1368, 72, 73, 74, - 75, 76, 373, 1028, 379, 380, 377, 378, 376, 375, - 374, 617, 271, 391, 411, 269, 321, 273, 381, 382, - 1029, 1030, 320, 91, 92, 93, 1247, 1060, 29, 426, - 58, 32, 33, 1463, 1098, 1532, 645, 644, 654, 655, - 647, 648, 649, 650, 651, 652, 653, 646, 1290, 770, - 656, 771, 1068, 279, 275, 276, 277, 1227, 1421, 1419, - 1226, 612, 309, 1228, 311, 613, 610, 611, 882, 91, - 92, 93, 313, 616, 844, 91, 92, 93, 615, 57, - 1292, 29, 30, 58, 32, 33, 843, 1095, 1092, 1093, - 1587, 1091, 841, 605, 606, 1584, 1558, 1287, 1550, 991, - 62, 1052, 1608, 1604, 1291, 34, 53, 54, 578, 56, - 602, 1214, 1216, 564, 272, 845, 884, 885, 886, 1507, - 273, 1515, 842, 1293, 1102, 1105, 848, 1284, 43, 619, - 832, 1054, 57, 1286, 1509, 1364, 270, 1363, 1362, 560, - 594, 930, 596, 567, 286, 274, 1112, 668, 669, 1111, - 283, 569, 570, 1539, 1443, 283, 327, 579, 1054, 1223, - 1151, 283, 1148, 1186, 1097, 1161, 1140, 283, 586, 763, - 743, 592, 89, 681, 593, 595, 89, 278, 89, 584, - 646, 1035, 656, 656, 89, 1024, 1096, 875, 970, 636, - 91, 92, 93, 1215, 89, 89, 574, 1308, 36, 37, - 39, 38, 41, 879, 55, 1508, 869, 1563, 590, 601, - 1275, 79, 1533, 1548, 1524, 604, 1068, 607, 1326, 1602, - 1351, 603, 1603, 618, 1601, 625, 1101, 42, 61, 60, - 1516, 1514, 51, 52, 40, 1053, 772, 1285, 1310, 1283, - 629, 1103, 1271, 1272, 1273, 91, 92, 93, 44, 45, - 80, 46, 47, 48, 49, 630, 631, 954, 580, 581, - 582, 834, 1053, 591, 571, 1245, 572, 633, 563, 573, - 668, 669, 668, 669, 876, 1312, 666, 1316, 954, 1311, - 1158, 1309, 767, 636, 59, 1147, 1314, 628, 1553, 626, - 627, 57, 589, 870, 89, 1313, 283, 283, 283, 1387, - 1057, 904, 720, 900, 1568, 89, 736, 1058, 1315, 1317, - 684, 89, 1609, 1469, 1274, 902, 903, 901, 719, 1279, - 1276, 1267, 1277, 1270, 1468, 1266, 268, 429, 1570, 1268, - 1269, 649, 650, 651, 652, 653, 646, 59, 1260, 656, - 634, 635, 633, 1278, 1259, 400, 733, 699, 701, 703, - 705, 707, 709, 710, 565, 566, 1610, 1248, 636, 424, - 721, 747, 1549, 700, 702, 1486, 706, 708, 400, 711, - 647, 648, 649, 650, 651, 652, 653, 646, 1466, 761, - 656, 975, 976, 756, 1257, 645, 644, 654, 655, 647, - 648, 649, 650, 651, 652, 653, 646, 1122, 1054, 656, - 415, 416, 754, 645, 644, 654, 655, 647, 648, 649, - 650, 651, 652, 653, 646, 860, 1350, 656, 1512, 1586, - 634, 635, 633, 91, 92, 93, 1572, 400, 1328, 1439, - 91, 92, 93, 1521, 634, 635, 633, 283, 636, 635, - 633, 830, 89, 281, 833, 1520, 835, 283, 283, 89, - 89, 89, 636, 314, 1339, 283, 636, 1350, 283, 556, - 1133, 283, 853, 854, 1383, 283, 68, 89, 1125, 1126, - 1127, 1055, 89, 89, 89, 283, 89, 89, 420, 1512, - 1561, 831, 632, 559, 859, 561, 89, 89, 838, 839, - 840, 993, 670, 671, 672, 673, 674, 675, 676, 677, - 678, 679, 1053, 857, 1512, 400, 858, 1050, 1048, 983, - 1049, 862, 863, 864, 1523, 866, 867, 1046, 1052, 994, - 634, 635, 633, 1289, 1391, 871, 872, 654, 655, 647, - 648, 649, 650, 651, 652, 653, 646, 921, 636, 656, - 91, 92, 93, 849, 731, 640, 923, 643, 1512, 1540, - 1512, 1511, 898, 657, 658, 659, 660, 661, 662, 663, - 89, 641, 642, 639, 645, 644, 654, 655, 647, 648, - 649, 650, 651, 652, 653, 646, 942, 945, 656, 91, - 92, 93, 955, 922, 931, 1146, 899, 1145, 892, 894, - 895, 1458, 1457, 89, 89, 893, 972, 91, 92, 93, - 933, 1230, 1445, 400, 932, 994, 634, 635, 633, 1442, - 400, 89, 937, 1393, 1392, 684, 1389, 1390, 283, 1389, - 1388, 89, 66, 1018, 636, 758, 283, 983, 400, 963, - 964, 924, 925, 759, 283, 283, 971, 984, 283, 283, - 967, 29, 283, 283, 283, 89, 931, 934, 89, 759, - 977, 994, 400, 632, 400, 634, 635, 633, 1231, 89, - 558, 1027, 933, 1009, 1164, 1188, 989, 429, 779, 778, - 429, 1189, 568, 636, 985, 57, 400, 576, 760, 1163, - 762, 1039, 857, 583, 983, 1182, 983, 758, 973, 585, - 847, 987, 57, 1578, 760, 1433, 758, 999, 1002, 1003, - 1004, 1000, 1019, 1001, 1005, 1182, 1021, 1354, 1355, 1017, - 1476, 764, 1475, 283, 89, 1026, 89, 1025, 1104, 393, - 1062, 1022, 283, 283, 283, 283, 283, 1450, 283, 283, - 1083, 994, 283, 89, 1042, 1082, 645, 644, 654, 655, - 647, 648, 649, 650, 651, 652, 653, 646, 1379, 283, - 656, 1350, 1234, 1087, 283, 1089, 283, 283, 1354, 1355, - 1085, 283, 89, 1069, 1070, 1071, 29, 1078, 29, 1073, - 57, 1119, 1116, 1072, 1063, 1064, 1065, 1066, 1079, 1080, - 1595, 1591, 1381, 1357, 350, 349, 352, 353, 354, 355, - 1074, 1075, 1076, 351, 356, 896, 1493, 1339, 905, 906, - 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, - 917, 918, 919, 1261, 898, 1360, 880, 57, 746, 57, - 755, 1427, 851, 1359, 1205, 1203, 1202, 938, 939, 1206, - 1204, 944, 947, 948, 999, 1002, 1003, 1004, 1000, 1201, - 1001, 1005, 1582, 1207, 1128, 1003, 1004, 406, 899, 1575, - 1332, 1171, 730, 1580, 1180, 959, 962, 1179, 1142, 965, - 966, 407, 1252, 777, 587, 283, 1244, 1555, 734, 735, - 409, 1170, 408, 723, 950, 283, 283, 283, 283, 283, - 1195, 1175, 391, 1141, 1554, 724, 1491, 283, 951, 1242, - 1236, 283, 1437, 1471, 1088, 283, 850, 1007, 1157, 283, - 1190, 645, 644, 654, 655, 647, 648, 649, 650, 651, - 652, 653, 646, 394, 395, 656, 1229, 1174, 89, 397, - 1212, 1436, 398, 68, 389, 1183, 1185, 1235, 1232, 1184, - 1196, 1240, 1240, 1199, 1178, 1197, 1198, 1335, 1200, 1208, - 1039, 1435, 1177, 1182, 614, 1152, 1219, 1149, 1221, 873, - 1222, 1597, 1596, 1218, 737, 1597, 1537, 1241, 1464, 780, - 1224, 90, 969, 1220, 393, 284, 89, 89, 284, 836, - 837, 66, 71, 90, 63, 284, 1, 846, 1589, 1402, - 420, 1472, 1251, 852, 1253, 1254, 1255, 1237, 1238, 1094, - 406, 1556, 1505, 1373, 1045, 1036, 89, 865, 78, 555, - 284, 90, 77, 1547, 407, 284, 1263, 284, 868, 1280, - 1258, 403, 404, 409, 600, 408, 958, 1044, 1043, 1513, - 1462, 89, 1056, 1246, 1059, 1264, 1380, 921, 1243, 1552, - 785, 783, 784, 1249, 1250, 1294, 782, 787, 786, 781, - 296, 881, 310, 1304, 1295, 1296, 1306, 1006, 773, 1084, - 738, 81, 1282, 1303, 1281, 1297, 1090, 283, 878, 1129, - 1130, 1131, 293, 1319, 1329, 608, 609, 89, 298, 1305, - 1137, 1138, 89, 89, 664, 1195, 1340, 1318, 1176, 1225, - 933, 430, 423, 1325, 932, 1345, 399, 974, 726, 1304, - 1434, 1155, 1334, 1156, 693, 952, 752, 333, 89, 891, - 348, 345, 1343, 346, 978, 1187, 638, 331, 1358, 325, - 751, 744, 89, 998, 89, 89, 996, 995, 1240, 1240, - 419, 1356, 1349, 1352, 1372, 1365, 750, 982, 402, 1429, - 1531, 401, 949, 1386, 1039, 1432, 1039, 1376, 1371, 50, - 986, 621, 283, 1377, 1378, 315, 31, 1366, 992, 1367, - 644, 654, 655, 647, 648, 649, 650, 651, 652, 653, - 646, 1020, 283, 656, 1384, 1385, 410, 22, 89, 21, - 1403, 89, 89, 89, 283, 20, 645, 644, 654, 655, - 647, 648, 649, 650, 651, 652, 653, 646, 19, 18, - 656, 24, 1408, 1409, 284, 17, 16, 15, 575, 284, - 1395, 35, 26, 25, 14, 284, 13, 12, 11, 10, - 9, 284, 8, 1417, 4, 1396, 90, 1398, 624, 23, - 90, 682, 90, 2, 0, 0, 1412, 0, 90, 0, - 0, 0, 0, 0, 0, 1086, 0, 1195, 90, 90, - 1438, 362, 28, 0, 1106, 1107, 1108, 1109, 1110, 1447, - 1113, 1114, 89, 0, 1115, 0, 0, 0, 0, 0, - 89, 0, 1232, 0, 0, 0, 0, 0, 0, 0, - 28, 1117, 0, 0, 1039, 89, 1118, 1446, 0, 0, - 0, 0, 89, 1123, 0, 0, 0, 1456, 0, 0, - 1299, 1300, 0, 0, 1414, 1415, 1479, 1416, 0, 0, - 1418, 0, 1420, 0, 1474, 1320, 1321, 392, 1322, 1323, - 0, 0, 0, 0, 1470, 0, 1477, 0, 0, 0, - 1330, 1331, 0, 89, 89, 0, 89, 0, 0, 0, - 0, 89, 0, 89, 89, 89, 283, 0, 90, 89, - 284, 284, 284, 1499, 1492, 1500, 1502, 1503, 1490, 90, - 1485, 1494, 1343, 1504, 1510, 90, 89, 283, 1465, 1517, - 1467, 1459, 0, 0, 0, 0, 0, 1498, 1525, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1518, 0, 1519, 0, 0, 1478, 0, 1538, 1546, 0, - 0, 0, 0, 89, 0, 1545, 1544, 0, 0, 0, - 0, 1382, 0, 0, 89, 89, 1343, 0, 0, 0, - 0, 0, 1559, 0, 0, 1560, 0, 0, 0, 0, - 89, 0, 0, 0, 1195, 1566, 1474, 1039, 0, 0, - 0, 283, 0, 0, 0, 0, 0, 0, 0, 89, - 0, 0, 0, 0, 0, 0, 0, 1574, 0, 0, - 0, 0, 0, 0, 0, 1410, 0, 1579, 1581, 89, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1583, 1594, 0, 0, 0, 0, 0, 0, 1605, - 0, 284, 0, 0, 0, 0, 90, 0, 0, 0, - 0, 284, 284, 90, 90, 90, 0, 0, 0, 284, - 0, 0, 284, 0, 0, 284, 0, 0, 0, 284, - 0, 90, 413, 0, 0, 0, 90, 90, 90, 284, - 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 90, 0, 598, 0, 0, 0, 598, 0, 598, - 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, - 665, 667, 0, 0, 0, 0, 0, 0, 0, 1333, - 0, 1480, 1481, 1482, 1483, 1484, 0, 0, 0, 1487, - 1488, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 680, 0, 0, 90, 685, 686, 687, 688, 689, - 690, 691, 692, 0, 695, 698, 698, 698, 704, 698, - 698, 704, 698, 712, 713, 714, 715, 716, 717, 718, - 0, 0, 0, 0, 28, 0, 0, 90, 90, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, - 93, 0, 0, 0, 0, 90, 0, 0, 753, 0, - 0, 0, 284, 0, 1394, 90, 0, 0, 0, 0, - 284, 0, 0, 0, 0, 0, 0, 0, 284, 284, - 0, 0, 284, 284, 1397, 0, 284, 284, 284, 90, - 0, 0, 90, 0, 359, 0, 1407, 0, 0, 935, - 936, 0, 287, 90, 0, 0, 0, 0, 0, 0, - 0, 290, 0, 0, 0, 0, 0, 0, 0, 297, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 88, 0, 0, 0, 0, 0, 968, 0, 0, - 0, 0, 0, 312, 0, 0, 0, 0, 0, 1598, - 0, 0, 0, 295, 0, 0, 0, 284, 90, 302, - 90, 0, 0, 0, 0, 0, 284, 284, 284, 284, - 284, 431, 284, 284, 1426, 0, 284, 90, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, - 0, 0, 0, 284, 0, 0, 0, 0, 284, 0, - 284, 284, 0, 598, 0, 284, 90, 1425, 0, 0, - 598, 598, 598, 0, 0, 0, 299, 291, 0, 300, - 301, 307, 0, 0, 0, 292, 294, 304, 598, 289, - 306, 305, 0, 598, 598, 598, 0, 598, 598, 637, - 0, 0, 0, 0, 0, 0, 0, 598, 598, 0, - 0, 0, 0, 0, 645, 644, 654, 655, 647, 648, - 649, 650, 651, 652, 653, 646, 0, 0, 656, 0, - 0, 0, 0, 0, 0, 324, 0, 0, 0, 1526, - 0, 0, 0, 0, 694, 0, 0, 645, 644, 654, - 655, 647, 648, 649, 650, 651, 652, 653, 646, 0, - 0, 656, 0, 0, 0, 0, 0, 0, 0, 284, - 725, 728, 0, 0, 0, 0, 0, 0, 0, 284, - 284, 284, 284, 284, 0, 0, 0, 0, 0, 0, - 0, 284, 0, 1424, 0, 284, 0, 0, 0, 284, - 1135, 0, 0, 284, 1136, 0, 0, 0, 0, 0, - 0, 0, 0, 1569, 0, 1143, 1144, 0, 0, 0, - 0, 1150, 90, 0, 1153, 1154, 0, 0, 0, 0, - 0, 0, 1160, 0, 0, 0, 1162, 0, 0, 1165, - 1166, 1167, 1168, 1169, 0, 0, 431, 0, 0, 0, - 431, 0, 431, 0, 0, 1010, 0, 0, 431, 753, - 0, 0, 0, 753, 0, 0, 0, 0, 620, 622, - 90, 90, 0, 645, 644, 654, 655, 647, 648, 649, - 650, 651, 652, 653, 646, 1210, 1211, 656, 1298, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 0, 0, 0, 0, 0, 0, 0, 645, 644, - 654, 655, 647, 648, 649, 650, 651, 652, 653, 646, - 0, 1134, 656, 0, 0, 90, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 598, 0, 598, 0, 0, - 0, 645, 644, 654, 655, 647, 648, 649, 650, 651, - 652, 653, 646, 0, 598, 656, 0, 0, 0, 0, - 0, 284, 0, 861, 0, 0, 0, 0, 741, 0, - 0, 90, 0, 0, 0, 0, 90, 90, 0, 431, - 0, 0, 0, 0, 0, 774, 0, 877, 0, 645, - 644, 654, 655, 647, 648, 649, 650, 651, 652, 653, - 646, 0, 90, 656, 0, 887, 888, 889, 890, 0, - 0, 0, 0, 0, 1301, 1302, 90, 0, 90, 90, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1139, 0, 0, 392, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 940, 941, 0, 0, 0, 0, 284, 0, 0, 0, - 0, 0, 90, 0, 0, 90, 90, 90, 284, 0, - 0, 0, 0, 0, 0, 0, 753, 0, 0, 1361, - 0, 0, 1191, 1192, 0, 0, 753, 753, 753, 753, - 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1010, 0, 1217, 0, 431, 0, 0, 0, - 753, 0, 0, 431, 431, 431, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 431, 0, 0, 0, 1033, 431, 431, 431, 0, - 431, 431, 0, 0, 0, 0, 90, 0, 0, 0, - 431, 431, 0, 0, 90, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 1411, 0, 0, 0, 1413, 0, 90, 0, 598, 0, - 0, 0, 0, 0, 0, 1422, 1423, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, - 0, 1440, 1441, 0, 1444, 0, 0, 90, 90, 0, - 90, 0, 0, 0, 926, 90, 431, 90, 90, 90, - 284, 0, 1455, 90, 0, 0, 0, 0, 0, 0, - 956, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 284, 0, 0, 0, 0, 0, 960, 961, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 979, 0, 0, 0, 0, - 0, 1344, 0, 28, 0, 741, 0, 90, 431, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, - 0, 0, 431, 0, 90, 0, 0, 1159, 0, 1501, - 0, 0, 0, 431, 0, 284, 0, 0, 802, 0, - 0, 0, 360, 90, 1172, 1173, 728, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1527, 1528, 1529, - 1530, 0, 1534, 90, 1535, 1536, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1541, 0, 1542, - 1543, 0, 0, 282, 0, 0, 308, 0, 431, 0, - 431, 0, 0, 282, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 431, 1562, 0, - 0, 0, 0, 0, 0, 414, 0, 0, 422, 0, - 0, 0, 790, 282, 0, 282, 1428, 0, 0, 0, - 0, 0, 0, 1571, 0, 0, 1124, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 803, 1452, 1453, 1454, 0, 0, 0, - 0, 0, 0, 0, 0, 1606, 1607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 816, - 819, 820, 821, 822, 823, 824, 598, 825, 826, 827, - 828, 829, 804, 805, 806, 807, 788, 789, 817, 0, - 791, 0, 792, 793, 794, 795, 796, 797, 798, 799, - 800, 801, 808, 809, 810, 811, 812, 813, 814, 815, - 0, 1327, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1344, 0, 28, 0, 0, 0, 0, 956, 0, - 0, 0, 0, 0, 0, 1336, 0, 0, 0, 0, + 391, 1608, 1598, 1408, 1565, 1295, 1200, 1044, 1514, 1481, + 335, 1220, 1468, 1349, 350, 1382, 1017, 1201, 364, 1246, + 592, 1346, 1043, 726, 1350, 1087, 1040, 1053, 1361, 1355, + 436, 1314, 733, 687, 1138, 1187, 925, 879, 399, 92, + 603, 321, 860, 286, 1272, 306, 286, 774, 71, 3, + 1263, 92, 1057, 286, 1019, 932, 1003, 736, 408, 731, + 1014, 69, 416, 1083, 754, 958, 902, 28, 393, 753, + 759, 337, 771, 773, 561, 996, 422, 425, 67, 286, + 92, 743, 762, 562, 286, 888, 286, 66, 8, 1073, + 7, 6, 326, 700, 72, 581, 322, 1601, 1585, 325, + 1596, 701, 1573, 1593, 1409, 1584, 333, 1572, 1331, 1438, + 566, 1377, 1378, 284, 1035, 1036, 1376, 94, 95, 96, + 433, 327, 775, 317, 776, 1034, 74, 75, 76, 77, + 78, 79, 414, 418, 324, 394, 323, 30, 1254, 1106, + 60, 34, 35, 282, 278, 279, 280, 621, 1066, 424, + 1297, 1471, 430, 1105, 563, 1074, 565, 1540, 649, 648, + 658, 659, 651, 652, 653, 654, 655, 656, 657, 650, + 1429, 1427, 660, 1067, 274, 1234, 314, 272, 1233, 276, + 887, 1235, 935, 316, 94, 95, 96, 616, 598, 59, + 600, 617, 614, 615, 376, 1104, 382, 383, 380, 381, + 379, 378, 377, 94, 95, 96, 1298, 312, 619, 620, + 384, 385, 849, 1299, 609, 610, 846, 1595, 848, 1592, + 1558, 1566, 597, 599, 1315, 1294, 997, 1058, 606, 1616, + 1612, 1523, 1221, 1223, 889, 890, 891, 582, 1060, 568, + 1515, 276, 1300, 853, 837, 1291, 623, 1372, 1101, 1098, + 1099, 1293, 1097, 850, 847, 1517, 571, 1060, 1371, 1370, + 564, 289, 277, 1118, 1157, 1317, 1117, 281, 672, 673, + 94, 95, 96, 286, 573, 574, 275, 1547, 286, 1154, + 583, 1451, 1230, 1192, 286, 1108, 1111, 1167, 1146, 768, + 286, 590, 747, 685, 596, 92, 588, 650, 273, 92, + 660, 92, 1319, 1041, 1323, 660, 1318, 92, 1316, 1030, + 975, 595, 578, 1321, 1222, 909, 884, 92, 92, 94, + 95, 96, 1320, 640, 880, 1103, 1516, 605, 1571, 907, + 908, 906, 874, 82, 1541, 1322, 1324, 1282, 1556, 607, + 1524, 1522, 1059, 572, 1074, 1333, 1610, 1102, 580, 1611, + 594, 1609, 637, 1532, 587, 1292, 959, 1290, 1359, 807, + 589, 1059, 639, 637, 567, 634, 635, 629, 640, 1278, + 1279, 1280, 83, 1395, 672, 673, 584, 585, 586, 640, + 575, 777, 576, 633, 959, 577, 1164, 1107, 839, 672, + 673, 1152, 641, 1151, 61, 653, 654, 655, 656, 657, + 650, 1063, 1109, 660, 670, 1252, 740, 632, 1064, 630, + 631, 881, 638, 639, 637, 772, 271, 92, 1561, 875, + 286, 286, 286, 94, 95, 96, 723, 1576, 327, 92, + 640, 1153, 1477, 688, 593, 92, 1476, 698, 897, 899, + 900, 1281, 1267, 795, 724, 898, 1286, 1283, 1274, 1284, + 1277, 1266, 1273, 569, 570, 1255, 1275, 1276, 1617, 560, + 638, 639, 637, 729, 732, 1578, 1557, 737, 1335, 433, + 1285, 703, 705, 707, 709, 711, 713, 714, 640, 704, + 706, 752, 710, 712, 808, 715, 638, 639, 637, 1494, + 751, 725, 760, 419, 420, 428, 1474, 1264, 761, 638, + 639, 637, 1618, 1128, 640, 865, 766, 1131, 1132, 1133, + 821, 824, 825, 826, 827, 828, 829, 640, 830, 831, + 832, 833, 834, 809, 810, 811, 812, 793, 794, 822, + 403, 796, 1529, 797, 798, 799, 800, 801, 802, 803, + 804, 805, 806, 813, 814, 815, 816, 817, 818, 819, + 820, 658, 659, 651, 652, 653, 654, 655, 656, 657, + 650, 286, 1528, 660, 59, 835, 92, 1391, 838, 1061, + 840, 286, 286, 92, 92, 92, 905, 1520, 1594, 286, + 1580, 403, 286, 980, 981, 286, 858, 859, 735, 286, + 68, 92, 94, 95, 96, 1358, 92, 92, 92, 286, + 92, 92, 823, 94, 95, 96, 977, 927, 1520, 1569, + 92, 92, 864, 94, 95, 96, 1024, 1237, 763, 862, + 648, 658, 659, 651, 652, 653, 654, 655, 656, 657, + 650, 785, 1447, 660, 1520, 403, 638, 639, 637, 1520, + 1548, 841, 842, 1520, 1519, 403, 976, 1466, 1465, 851, + 1453, 403, 424, 1347, 640, 857, 1358, 866, 854, 1450, + 403, 926, 903, 1401, 1400, 638, 639, 637, 636, 870, + 928, 1531, 651, 652, 653, 654, 655, 656, 657, 650, + 764, 882, 660, 640, 92, 353, 352, 355, 356, 357, + 358, 1397, 1398, 1399, 354, 359, 1397, 1396, 30, 892, + 893, 894, 895, 1000, 947, 950, 988, 403, 1000, 403, + 960, 636, 403, 784, 783, 904, 938, 92, 92, 999, + 1188, 942, 30, 1195, 989, 765, 936, 767, 937, 1196, + 1005, 1008, 1009, 1010, 1006, 92, 1007, 1011, 70, 688, + 1362, 1363, 286, 396, 764, 92, 1188, 1000, 1238, 286, + 59, 286, 1033, 1501, 945, 946, 1170, 1169, 988, 286, + 286, 763, 972, 286, 286, 939, 1000, 286, 286, 286, + 92, 988, 982, 92, 59, 968, 969, 978, 938, 929, + 930, 988, 852, 769, 92, 562, 59, 1586, 936, 765, + 994, 763, 1358, 1483, 30, 59, 990, 1068, 1458, 862, + 1088, 1387, 1005, 1008, 1009, 1010, 1006, 1015, 1007, 1011, + 433, 1241, 991, 433, 1362, 1363, 1368, 1084, 1079, 995, + 1078, 998, 1296, 1025, 1045, 1484, 992, 1027, 1091, 1603, + 1599, 1389, 1365, 1347, 1026, 1268, 1023, 885, 286, 92, + 1039, 92, 1031, 1110, 1032, 1028, 59, 286, 286, 286, + 286, 286, 856, 286, 286, 1367, 1212, 286, 92, 1048, + 1089, 1213, 1210, 1214, 1209, 1009, 1010, 1211, 1208, 1590, + 1583, 1177, 943, 944, 286, 1339, 949, 952, 953, 286, + 734, 286, 286, 1588, 1186, 1185, 286, 92, 1075, 1076, + 1077, 727, 955, 1259, 782, 1085, 1086, 591, 1251, 1479, + 1125, 967, 1563, 728, 970, 971, 956, 1562, 1092, 1499, + 1249, 1243, 1445, 1094, 855, 1013, 400, 1112, 1113, 1114, + 1115, 1116, 1444, 1119, 1120, 903, 401, 1121, 70, 649, + 648, 658, 659, 651, 652, 653, 654, 655, 656, 657, + 650, 409, 1184, 660, 1123, 397, 398, 1443, 1342, 1124, + 1183, 1188, 618, 1605, 1604, 410, 1129, 1158, 1155, 878, + 748, 741, 738, 739, 412, 1605, 411, 1069, 1070, 1071, + 1072, 1545, 1472, 1134, 974, 396, 68, 73, 904, 65, + 1, 1148, 1597, 1080, 1081, 1082, 1139, 1410, 1480, 1100, + 286, 1564, 1513, 1381, 1051, 1042, 1176, 81, 559, 80, + 1555, 286, 286, 286, 286, 286, 1181, 394, 1147, 873, + 1202, 604, 409, 286, 1050, 1049, 1521, 286, 1470, 1062, + 1253, 286, 1165, 1163, 1065, 286, 410, 1388, 1250, 1560, + 790, 1193, 788, 406, 407, 412, 789, 411, 1180, 1178, + 1179, 732, 1236, 787, 92, 1197, 1189, 792, 392, 1191, + 1190, 1239, 791, 1242, 786, 299, 886, 1247, 1247, 1226, + 313, 1228, 1012, 1229, 778, 1219, 1204, 1205, 1215, 1207, + 1203, 1090, 742, 1206, 84, 1225, 1289, 1248, 1288, 1096, + 883, 1231, 296, 612, 1045, 1227, 613, 93, 301, 668, + 1182, 287, 92, 92, 287, 1232, 434, 427, 1353, 93, + 1258, 287, 1260, 1261, 1262, 979, 730, 1442, 1244, 1245, + 1341, 1162, 697, 957, 757, 336, 1143, 1144, 896, 351, + 348, 349, 92, 983, 1194, 642, 334, 287, 93, 328, + 1265, 756, 287, 749, 287, 1004, 1002, 1161, 1271, 1001, + 423, 1364, 1360, 1287, 755, 987, 405, 92, 1437, 1539, + 404, 954, 52, 926, 625, 318, 33, 413, 23, 1256, + 1257, 1302, 1303, 22, 21, 20, 19, 25, 18, 17, + 1304, 16, 1313, 579, 37, 27, 26, 15, 14, 13, + 1312, 12, 11, 286, 1060, 1326, 10, 1311, 9, 1325, + 5, 4, 628, 92, 1332, 24, 686, 2, 938, 92, + 92, 1310, 1348, 0, 0, 0, 1202, 0, 1336, 0, + 937, 0, 0, 0, 0, 1351, 94, 95, 96, 0, + 0, 0, 0, 0, 0, 92, 0, 1334, 0, 601, + 0, 0, 1345, 1311, 0, 1366, 1357, 0, 0, 92, + 0, 92, 92, 0, 0, 1247, 1247, 0, 1380, 0, + 0, 1343, 0, 1340, 1373, 0, 0, 0, 0, 1374, + 1394, 1379, 0, 1375, 1385, 1386, 0, 0, 963, 286, + 1384, 0, 0, 0, 0, 0, 0, 0, 0, 1045, + 0, 1045, 0, 1392, 1393, 0, 0, 0, 1059, 286, + 0, 0, 0, 1056, 1054, 92, 1055, 1411, 92, 92, + 92, 286, 0, 1052, 1058, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1403, 0, 0, 0, 0, 0, + 0, 287, 0, 1416, 1417, 0, 287, 0, 0, 1404, + 0, 1406, 287, 0, 0, 0, 0, 0, 287, 1402, + 402, 0, 0, 93, 0, 1425, 0, 93, 0, 93, + 0, 1420, 0, 0, 0, 93, 0, 0, 0, 1405, + 0, 0, 0, 0, 0, 93, 93, 365, 29, 1202, + 1446, 1415, 0, 0, 0, 0, 1455, 0, 0, 0, + 92, 0, 0, 0, 0, 0, 0, 1239, 92, 0, + 1454, 0, 0, 0, 0, 0, 0, 29, 1439, 0, + 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, + 92, 0, 0, 1464, 0, 327, 0, 0, 0, 0, + 1045, 0, 1456, 0, 1487, 1457, 0, 0, 1459, 0, + 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, + 0, 0, 0, 0, 1485, 0, 0, 0, 0, 0, + 1482, 92, 92, 0, 92, 0, 0, 0, 0, 92, + 0, 92, 92, 92, 286, 93, 1351, 92, 287, 287, + 287, 1507, 1500, 1508, 1510, 1511, 1493, 93, 1498, 0, + 1512, 0, 1518, 93, 92, 286, 1473, 1525, 1475, 1422, + 1423, 0, 1424, 1506, 0, 1426, 1533, 1428, 1502, 0, + 1526, 0, 1527, 0, 0, 0, 1497, 327, 0, 0, + 0, 0, 0, 1486, 0, 1546, 1554, 0, 0, 0, + 1351, 92, 1553, 0, 1552, 0, 0, 0, 608, 0, + 611, 0, 92, 92, 0, 0, 622, 0, 0, 0, + 1568, 1567, 0, 0, 0, 0, 0, 0, 92, 0, + 0, 0, 1574, 0, 0, 1534, 1202, 1467, 0, 286, + 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, + 0, 0, 1482, 1045, 0, 1582, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1587, 1589, 92, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1591, + 1602, 0, 0, 0, 0, 0, 0, 1613, 0, 287, + 0, 0, 0, 0, 93, 0, 0, 0, 0, 287, + 287, 93, 93, 93, 0, 0, 0, 287, 0, 1577, + 287, 0, 0, 287, 0, 0, 0, 287, 0, 93, + 0, 0, 0, 0, 93, 93, 93, 287, 93, 93, + 0, 0, 0, 0, 0, 0, 0, 0, 93, 93, + 0, 0, 602, 0, 0, 0, 602, 0, 602, 0, + 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + 0, 0, 0, 644, 0, 647, 0, 0, 0, 669, + 671, 661, 662, 663, 664, 665, 666, 667, 0, 645, + 646, 643, 649, 648, 658, 659, 651, 652, 653, 654, + 655, 656, 657, 650, 0, 0, 660, 403, 0, 0, + 684, 0, 93, 0, 689, 690, 691, 692, 693, 694, + 695, 696, 0, 699, 702, 702, 702, 708, 702, 702, + 708, 702, 716, 717, 718, 719, 720, 721, 722, 0, + 0, 0, 0, 29, 0, 93, 93, 649, 648, 658, + 659, 651, 652, 653, 654, 655, 656, 657, 650, 0, + 0, 660, 0, 93, 0, 0, 0, 0, 758, 0, + 287, 0, 0, 93, 0, 836, 0, 287, 0, 287, + 0, 0, 843, 844, 845, 0, 0, 287, 287, 0, + 0, 287, 287, 0, 0, 287, 287, 287, 93, 1441, + 863, 93, 0, 0, 0, 867, 868, 869, 0, 871, + 872, 0, 93, 0, 0, 0, 0, 0, 0, 876, + 877, 0, 0, 362, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 31, 32, 60, 34, 35, 0, 0, + 649, 648, 658, 659, 651, 652, 653, 654, 655, 656, + 657, 650, 64, 0, 660, 0, 0, 36, 55, 56, + 0, 58, 91, 0, 0, 0, 287, 93, 0, 93, + 1305, 0, 0, 0, 315, 287, 287, 287, 287, 287, + 45, 287, 287, 0, 59, 287, 93, 0, 0, 0, + 649, 648, 658, 659, 651, 652, 653, 654, 655, 656, + 657, 650, 287, 435, 660, 0, 0, 287, 0, 287, + 287, 0, 0, 602, 287, 93, 0, 0, 0, 1440, + 602, 602, 602, 649, 648, 658, 659, 651, 652, 653, + 654, 655, 656, 657, 650, 940, 941, 660, 602, 0, + 0, 0, 0, 602, 602, 602, 0, 602, 602, 0, + 38, 39, 41, 40, 43, 0, 57, 602, 602, 0, + 649, 648, 658, 659, 651, 652, 653, 654, 655, 656, + 657, 650, 0, 973, 660, 0, 0, 0, 0, 44, + 63, 62, 0, 0, 53, 54, 42, 0, 94, 95, + 96, 0, 0, 1435, 0, 0, 0, 0, 0, 0, + 46, 47, 0, 48, 49, 50, 51, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, + 287, 287, 287, 287, 0, 0, 0, 0, 0, 0, + 0, 287, 290, 0, 0, 287, 0, 0, 1093, 287, + 1095, 293, 0, 287, 0, 0, 0, 0, 0, 300, + 0, 0, 0, 0, 0, 0, 0, 1122, 0, 0, + 0, 0, 93, 649, 648, 658, 659, 651, 652, 653, + 654, 655, 656, 657, 650, 0, 0, 660, 0, 61, + 0, 0, 0, 298, 0, 0, 0, 0, 0, 305, + 0, 0, 0, 0, 0, 0, 1016, 0, 0, 0, + 758, 0, 0, 0, 758, 0, 0, 0, 435, 0, + 93, 93, 435, 0, 435, 0, 0, 0, 0, 291, + 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 624, 626, 0, 0, 0, 0, 0, 0, 0, 0, + 93, 0, 0, 0, 0, 0, 302, 294, 0, 303, + 304, 310, 0, 0, 0, 295, 297, 307, 0, 292, + 309, 308, 0, 0, 0, 93, 0, 1141, 0, 0, + 0, 1142, 0, 0, 0, 0, 602, 330, 602, 0, + 0, 1434, 1149, 1150, 0, 0, 0, 0, 1156, 0, + 0, 1159, 1160, 0, 0, 602, 0, 0, 0, 1166, + 0, 287, 0, 1168, 0, 0, 1171, 1172, 1173, 1174, + 1175, 93, 0, 0, 1433, 0, 0, 93, 93, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 745, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 435, 93, 0, 0, 0, 0, 779, 0, + 0, 0, 0, 1217, 1218, 0, 0, 93, 0, 93, + 93, 649, 648, 658, 659, 651, 652, 653, 654, 655, + 656, 657, 650, 0, 1145, 660, 0, 395, 0, 0, + 0, 0, 0, 1432, 0, 0, 0, 287, 0, 0, + 0, 0, 1270, 0, 649, 648, 658, 659, 651, 652, + 653, 654, 655, 656, 657, 650, 0, 287, 660, 0, + 0, 0, 0, 93, 0, 0, 93, 93, 93, 287, + 0, 1301, 0, 0, 0, 0, 0, 758, 0, 0, + 0, 0, 0, 0, 1198, 1199, 0, 0, 758, 758, + 758, 758, 758, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1016, 0, 1224, 0, 0, 0, + 0, 0, 758, 649, 648, 658, 659, 651, 652, 653, + 654, 655, 656, 657, 650, 0, 0, 660, 0, 435, + 0, 0, 1308, 1309, 0, 0, 435, 435, 435, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, + 0, 0, 0, 0, 435, 0, 93, 0, 0, 435, + 435, 435, 1140, 435, 435, 0, 0, 0, 0, 0, + 0, 93, 0, 435, 435, 0, 0, 0, 93, 0, + 602, 0, 649, 648, 658, 659, 651, 652, 653, 654, + 655, 656, 657, 650, 0, 0, 660, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1369, 602, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, + 93, 0, 93, 0, 0, 0, 0, 93, 0, 93, + 93, 93, 287, 0, 0, 93, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 931, 0, 435, + 0, 0, 93, 287, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 961, 0, 0, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 0, 0, 0, 0, + 965, 966, 0, 0, 1352, 0, 29, 0, 0, 93, + 0, 0, 0, 0, 0, 0, 0, 0, 984, 1419, + 93, 93, 0, 1421, 0, 0, 0, 0, 745, 0, + 0, 435, 0, 0, 1430, 1431, 93, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, + 0, 0, 0, 435, 0, 93, 435, 0, 0, 0, + 0, 1448, 1449, 0, 1452, 0, 0, 435, 0, 0, + 0, 0, 1478, 0, 0, 93, 0, 0, 0, 0, + 0, 0, 1463, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 435, 0, 435, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1436, + 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1509, + 1130, 0, 0, 0, 0, 0, 0, 0, 1460, 1461, + 1462, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 363, 0, 0, 0, 0, 0, 1535, 1536, 1537, + 1538, 0, 1542, 0, 1543, 1544, 0, 0, 0, 0, + 602, 0, 0, 0, 0, 0, 0, 1549, 0, 1550, + 1551, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 285, 0, 0, 311, 0, 0, + 0, 0, 0, 0, 285, 0, 0, 0, 1570, 0, + 0, 0, 0, 0, 0, 1352, 0, 29, 0, 0, + 0, 0, 0, 0, 0, 0, 417, 417, 0, 0, + 426, 0, 0, 1579, 0, 285, 0, 285, 0, 0, + 0, 0, 0, 961, 0, 0, 0, 1530, 0, 0, + 901, 0, 0, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 0, 1352, + 0, 0, 0, 0, 0, 1614, 1615, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 964, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1269, 435, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1600, 0, 435, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1522, 0, 0, 0, 0, 0, 0, - 0, 818, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 431, 0, 0, 1344, 0, 0, 0, 0, + 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 282, 0, 0, 0, 0, 282, 0, 0, - 0, 0, 0, 282, 0, 0, 0, 0, 0, 282, + 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 285, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 0, 285, 435, 0, 0, 961, + 0, 285, 1354, 1356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1262, 431, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 435, 0, 435, 1383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1592, - 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, - 0, 1431, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 431, 324, 0, 0, - 0, 0, 0, 0, 1448, 0, 0, 1449, 0, 0, - 1451, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 431, 0, 956, 0, 414, 1346, 1348, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 282, 282, - 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1348, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 431, 0, 431, 1375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1489, 324, + 0, 0, 0, 0, 0, 1135, 1136, 1137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1407, 0, + 0, 1412, 1413, 1414, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 285, 285, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1399, 0, 0, 1404, 1405, 1406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, + 0, 1469, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, + 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, - 0, 0, 0, 0, 0, 956, 0, 0, 0, 282, - 282, 0, 0, 0, 0, 0, 0, 282, 0, 0, - 282, 0, 0, 282, 0, 0, 431, 856, 0, 0, - 0, 0, 0, 0, 1461, 0, 0, 282, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, - 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1503, 1504, 0, 1505, 0, 0, + 0, 0, 1469, 0, 1469, 1469, 1469, 0, 0, 0, + 1383, 0, 285, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 285, 285, 0, 0, 0, 1469, 0, 0, + 285, 0, 0, 285, 0, 0, 285, 0, 0, 0, + 861, 0, 0, 0, 0, 0, 0, 1306, 1307, 0, + 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1327, 1328, 1559, 1329, 1330, 0, 0, 0, + 0, 0, 0, 0, 0, 435, 435, 1337, 1338, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 961, + 0, 1575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1495, 1496, 0, - 1497, 0, 0, 0, 0, 1461, 0, 1461, 1461, 1461, - 0, 0, 0, 1375, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 414, 856, 0, 0, 0, 414, 414, - 1461, 0, 414, 414, 414, 0, 0, 0, 957, 0, + 1469, 0, 0, 0, 0, 0, 417, 861, 0, 0, + 0, 417, 417, 0, 0, 417, 417, 417, 0, 0, + 0, 962, 0, 0, 0, 0, 0, 0, 0, 1390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 414, 414, 414, - 414, 414, 0, 0, 0, 0, 0, 1551, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 431, 431, - 282, 0, 0, 0, 0, 0, 856, 0, 282, 0, - 0, 0, 956, 0, 1567, 0, 282, 1015, 0, 0, - 282, 282, 0, 0, 282, 1023, 856, 0, 0, 0, - 0, 0, 0, 1573, 0, 0, 0, 0, 0, 0, + 417, 417, 417, 417, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1461, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 285, 0, 0, 0, 0, 0, 861, + 285, 0, 285, 0, 0, 0, 0, 0, 0, 0, + 285, 1021, 0, 1418, 285, 285, 0, 0, 285, 1029, + 861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, - 0, 0, 0, 0, 282, 282, 282, 282, 282, 0, - 282, 282, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 282, 0, 0, 0, 0, 282, 0, 1120, 1121, - 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 0, 0, 0, 0, 285, 285, + 285, 285, 285, 0, 285, 285, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, + 285, 0, 1126, 1127, 0, 0, 0, 285, 0, 0, + 1488, 1489, 1490, 1491, 1492, 0, 0, 0, 1495, 1496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 414, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 417, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 414, 282, 0, 0, - 0, 0, 0, 0, 0, 0, 957, 282, 282, 282, - 282, 282, 0, 0, 0, 0, 0, 0, 0, 1209, - 0, 0, 0, 282, 0, 0, 0, 1015, 0, 0, - 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 417, 285, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 962, 285, 285, 285, 285, 285, 0, 0, 0, + 0, 0, 0, 0, 1216, 0, 0, 0, 285, 0, + 0, 0, 1021, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1263,30 +1279,30 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 856, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, + 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 957, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 962, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 962, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1294,1381 +1310,1387 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1015, 0, - 0, 0, 0, 0, 541, 529, 0, 486, 544, 459, - 476, 552, 477, 480, 517, 444, 499, 180, 474, 282, - 463, 439, 470, 440, 461, 488, 123, 492, 458, 531, - 502, 543, 152, 0, 464, 550, 154, 508, 0, 227, - 168, 0, 0, 0, 490, 533, 497, 526, 485, 518, - 449, 507, 545, 475, 515, 546, 0, 0, 0, 91, - 92, 93, 0, 1040, 1041, 0, 0, 0, 0, 0, - 113, 0, 512, 540, 472, 514, 516, 554, 438, 509, - 957, 442, 445, 551, 536, 467, 468, 1233, 0, 0, - 0, 0, 0, 282, 489, 498, 523, 483, 0, 0, - 0, 0, 0, 0, 0, 0, 465, 0, 506, 0, - 0, 0, 446, 443, 0, 0, 0, 0, 487, 0, - 0, 0, 448, 0, 466, 524, 0, 436, 132, 528, - 535, 484, 285, 539, 482, 481, 542, 199, 0, 231, - 136, 151, 109, 148, 95, 105, 0, 134, 177, 207, - 211, 532, 462, 471, 117, 469, 209, 187, 248, 505, - 189, 208, 155, 237, 200, 247, 257, 258, 234, 255, - 263, 224, 98, 233, 245, 114, 219, 0, 0, 0, - 100, 243, 230, 166, 145, 146, 99, 0, 205, 122, - 130, 119, 179, 240, 241, 118, 266, 106, 254, 102, - 107, 253, 173, 236, 244, 167, 160, 101, 242, 165, - 159, 150, 126, 138, 197, 157, 198, 139, 170, 169, - 171, 0, 441, 0, 228, 251, 267, 111, 457, 235, - 261, 262, 0, 201, 112, 131, 125, 196, 129, 172, - 108, 141, 225, 149, 156, 204, 265, 186, 210, 115, - 250, 226, 453, 456, 451, 452, 500, 501, 547, 548, - 549, 525, 447, 0, 454, 455, 0, 530, 537, 538, - 504, 94, 103, 153, 264, 202, 128, 252, 437, 450, - 121, 460, 0, 0, 473, 478, 479, 491, 493, 494, - 495, 496, 503, 510, 511, 513, 519, 520, 521, 522, - 527, 534, 553, 96, 97, 104, 110, 116, 120, 124, - 127, 133, 137, 140, 142, 143, 144, 147, 158, 161, - 162, 163, 164, 174, 175, 176, 178, 181, 182, 183, - 184, 185, 188, 190, 191, 192, 193, 194, 195, 203, - 206, 212, 213, 214, 215, 216, 217, 218, 220, 221, - 222, 223, 229, 232, 238, 239, 249, 256, 259, 135, - 246, 260, 541, 529, 0, 486, 544, 459, 476, 552, - 477, 480, 517, 444, 499, 180, 474, 0, 463, 439, - 470, 440, 461, 488, 123, 492, 458, 531, 502, 543, - 152, 0, 464, 550, 154, 508, 0, 227, 168, 0, - 0, 0, 490, 533, 497, 526, 485, 518, 449, 507, - 545, 475, 515, 546, 0, 0, 0, 91, 92, 93, - 0, 1040, 1041, 0, 0, 0, 0, 0, 113, 0, - 512, 540, 472, 514, 516, 554, 438, 509, 0, 442, - 445, 551, 536, 467, 468, 0, 0, 0, 0, 0, - 0, 0, 489, 498, 523, 483, 0, 0, 0, 0, - 0, 0, 0, 0, 465, 0, 506, 0, 0, 0, - 446, 443, 0, 0, 0, 0, 487, 0, 0, 0, - 448, 0, 466, 524, 0, 436, 132, 528, 535, 484, - 285, 539, 482, 481, 542, 199, 0, 231, 136, 151, - 109, 148, 95, 105, 0, 134, 177, 207, 211, 532, - 462, 471, 117, 469, 209, 187, 248, 505, 189, 208, - 155, 237, 200, 247, 257, 258, 234, 255, 263, 224, - 98, 233, 245, 114, 219, 0, 0, 0, 100, 243, - 230, 166, 145, 146, 99, 0, 205, 122, 130, 119, - 179, 240, 241, 118, 266, 106, 254, 102, 107, 253, - 173, 236, 244, 167, 160, 101, 242, 165, 159, 150, - 126, 138, 197, 157, 198, 139, 170, 169, 171, 0, - 441, 0, 228, 251, 267, 111, 457, 235, 261, 262, - 0, 201, 112, 131, 125, 196, 129, 172, 108, 141, - 225, 149, 156, 204, 265, 186, 210, 115, 250, 226, - 453, 456, 451, 452, 500, 501, 547, 548, 549, 525, - 447, 0, 454, 455, 0, 530, 537, 538, 504, 94, - 103, 153, 264, 202, 128, 252, 437, 450, 121, 460, - 0, 0, 473, 478, 479, 491, 493, 494, 495, 496, - 503, 510, 511, 513, 519, 520, 521, 522, 527, 534, - 553, 96, 97, 104, 110, 116, 120, 124, 127, 133, - 137, 140, 142, 143, 144, 147, 158, 161, 162, 163, - 164, 174, 175, 176, 178, 181, 182, 183, 184, 185, - 188, 190, 191, 192, 193, 194, 195, 203, 206, 212, - 213, 214, 215, 216, 217, 218, 220, 221, 222, 223, - 229, 232, 238, 239, 249, 256, 259, 135, 246, 260, - 541, 529, 0, 486, 544, 459, 476, 552, 477, 480, - 517, 444, 499, 180, 474, 0, 463, 439, 470, 440, - 461, 488, 123, 492, 458, 531, 502, 543, 152, 0, - 464, 550, 154, 508, 0, 227, 168, 0, 0, 0, - 490, 533, 497, 526, 485, 518, 449, 507, 545, 475, - 515, 546, 57, 0, 0, 91, 92, 93, 0, 0, - 0, 0, 0, 0, 0, 0, 113, 0, 512, 540, - 472, 514, 516, 554, 438, 509, 0, 442, 445, 551, - 536, 467, 468, 0, 0, 0, 0, 0, 0, 0, - 489, 498, 523, 483, 0, 0, 0, 0, 0, 0, - 0, 0, 465, 0, 506, 0, 0, 0, 446, 443, - 0, 0, 0, 0, 487, 0, 0, 0, 448, 0, - 466, 524, 0, 436, 132, 528, 535, 484, 285, 539, - 482, 481, 542, 199, 0, 231, 136, 151, 109, 148, - 95, 105, 0, 134, 177, 207, 211, 532, 462, 471, - 117, 469, 209, 187, 248, 505, 189, 208, 155, 237, - 200, 247, 257, 258, 234, 255, 263, 224, 98, 233, - 245, 114, 219, 0, 0, 0, 100, 243, 230, 166, - 145, 146, 99, 0, 205, 122, 130, 119, 179, 240, - 241, 118, 266, 106, 254, 102, 107, 253, 173, 236, - 244, 167, 160, 101, 242, 165, 159, 150, 126, 138, - 197, 157, 198, 139, 170, 169, 171, 0, 441, 0, - 228, 251, 267, 111, 457, 235, 261, 262, 0, 201, - 112, 131, 125, 196, 129, 172, 108, 141, 225, 149, - 156, 204, 265, 186, 210, 115, 250, 226, 453, 456, - 451, 452, 500, 501, 547, 548, 549, 525, 447, 0, - 454, 455, 0, 530, 537, 538, 504, 94, 103, 153, - 264, 202, 128, 252, 437, 450, 121, 460, 0, 0, - 473, 478, 479, 491, 493, 494, 495, 496, 503, 510, - 511, 513, 519, 520, 521, 522, 527, 534, 553, 96, - 97, 104, 110, 116, 120, 124, 127, 133, 137, 140, - 142, 143, 144, 147, 158, 161, 162, 163, 164, 174, - 175, 176, 178, 181, 182, 183, 184, 185, 188, 190, - 191, 192, 193, 194, 195, 203, 206, 212, 213, 214, - 215, 216, 217, 218, 220, 221, 222, 223, 229, 232, - 238, 239, 249, 256, 259, 135, 246, 260, 541, 529, - 0, 486, 544, 459, 476, 552, 477, 480, 517, 444, - 499, 180, 474, 0, 463, 439, 470, 440, 461, 488, - 123, 492, 458, 531, 502, 543, 152, 0, 464, 550, - 154, 508, 0, 227, 168, 0, 0, 0, 490, 533, - 497, 526, 485, 518, 449, 507, 545, 475, 515, 546, - 0, 0, 0, 91, 92, 93, 0, 0, 0, 0, - 0, 0, 0, 0, 113, 0, 512, 540, 472, 514, - 516, 554, 438, 509, 0, 442, 445, 551, 536, 467, - 468, 0, 0, 0, 0, 0, 0, 0, 489, 498, - 523, 483, 0, 0, 0, 0, 0, 0, 1337, 0, - 465, 0, 506, 0, 0, 0, 446, 443, 0, 0, - 0, 0, 487, 0, 0, 0, 448, 0, 466, 524, - 0, 436, 132, 528, 535, 484, 285, 539, 482, 481, - 542, 199, 0, 231, 136, 151, 109, 148, 95, 105, - 0, 134, 177, 207, 211, 532, 462, 471, 117, 469, - 209, 187, 248, 505, 189, 208, 155, 237, 200, 247, - 257, 258, 234, 255, 263, 224, 98, 233, 245, 114, - 219, 0, 0, 0, 100, 243, 230, 166, 145, 146, - 99, 0, 205, 122, 130, 119, 179, 240, 241, 118, - 266, 106, 254, 102, 107, 253, 173, 236, 244, 167, - 160, 101, 242, 165, 159, 150, 126, 138, 197, 157, - 198, 139, 170, 169, 171, 0, 441, 0, 228, 251, - 267, 111, 457, 235, 261, 262, 0, 201, 112, 131, - 125, 196, 129, 172, 108, 141, 225, 149, 156, 204, - 265, 186, 210, 115, 250, 226, 453, 456, 451, 452, - 500, 501, 547, 548, 549, 525, 447, 0, 454, 455, - 0, 530, 537, 538, 504, 94, 103, 153, 264, 202, - 128, 252, 437, 450, 121, 460, 0, 0, 473, 478, - 479, 491, 493, 494, 495, 496, 503, 510, 511, 513, - 519, 520, 521, 522, 527, 534, 553, 96, 97, 104, - 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, - 144, 147, 158, 161, 162, 163, 164, 174, 175, 176, - 178, 181, 182, 183, 184, 185, 188, 190, 191, 192, - 193, 194, 195, 203, 206, 212, 213, 214, 215, 216, - 217, 218, 220, 221, 222, 223, 229, 232, 238, 239, - 249, 256, 259, 135, 246, 260, 541, 529, 0, 486, - 544, 459, 476, 552, 477, 480, 517, 444, 499, 180, - 474, 0, 463, 439, 470, 440, 461, 488, 123, 492, - 458, 531, 502, 543, 152, 0, 464, 550, 154, 508, - 0, 227, 168, 0, 0, 0, 490, 533, 497, 526, - 485, 518, 449, 507, 545, 475, 515, 546, 0, 0, - 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, - 0, 0, 113, 0, 512, 540, 472, 514, 516, 554, - 438, 509, 0, 442, 445, 551, 536, 467, 468, 0, - 0, 0, 0, 0, 0, 0, 489, 498, 523, 483, - 0, 0, 0, 0, 0, 0, 1024, 0, 465, 0, - 506, 0, 0, 0, 446, 443, 0, 0, 0, 0, - 487, 0, 0, 0, 448, 0, 466, 524, 0, 436, - 132, 528, 535, 484, 285, 539, 482, 481, 542, 199, - 0, 231, 136, 151, 109, 148, 95, 105, 0, 134, - 177, 207, 211, 532, 462, 471, 117, 469, 209, 187, - 248, 505, 189, 208, 155, 237, 200, 247, 257, 258, - 234, 255, 263, 224, 98, 233, 245, 114, 219, 0, - 0, 0, 100, 243, 230, 166, 145, 146, 99, 0, - 205, 122, 130, 119, 179, 240, 241, 118, 266, 106, - 254, 102, 107, 253, 173, 236, 244, 167, 160, 101, - 242, 165, 159, 150, 126, 138, 197, 157, 198, 139, - 170, 169, 171, 0, 441, 0, 228, 251, 267, 111, - 457, 235, 261, 262, 0, 201, 112, 131, 125, 196, - 129, 172, 108, 141, 225, 149, 156, 204, 265, 186, - 210, 115, 250, 226, 453, 456, 451, 452, 500, 501, - 547, 548, 549, 525, 447, 0, 454, 455, 0, 530, - 537, 538, 504, 94, 103, 153, 264, 202, 128, 252, - 437, 450, 121, 460, 0, 0, 473, 478, 479, 491, - 493, 494, 495, 496, 503, 510, 511, 513, 519, 520, - 521, 522, 527, 534, 553, 96, 97, 104, 110, 116, - 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, - 158, 161, 162, 163, 164, 174, 175, 176, 178, 181, - 182, 183, 184, 185, 188, 190, 191, 192, 193, 194, - 195, 203, 206, 212, 213, 214, 215, 216, 217, 218, - 220, 221, 222, 223, 229, 232, 238, 239, 249, 256, - 259, 135, 246, 260, 541, 529, 0, 486, 544, 459, - 476, 552, 477, 480, 517, 444, 499, 180, 474, 0, - 463, 439, 470, 440, 461, 488, 123, 492, 458, 531, - 502, 543, 152, 0, 464, 550, 154, 508, 0, 227, - 168, 0, 0, 0, 490, 533, 497, 526, 485, 518, - 449, 507, 545, 475, 515, 546, 0, 0, 0, 91, - 92, 93, 0, 0, 0, 0, 0, 0, 0, 0, - 113, 0, 512, 540, 472, 514, 516, 554, 438, 509, - 0, 442, 445, 551, 536, 467, 468, 0, 0, 0, - 0, 0, 0, 0, 489, 498, 523, 483, 0, 0, - 0, 0, 0, 0, 988, 0, 465, 0, 506, 0, - 0, 0, 446, 443, 0, 0, 0, 0, 487, 0, - 0, 0, 448, 0, 466, 524, 0, 436, 132, 528, - 535, 484, 285, 539, 482, 481, 542, 199, 0, 231, - 136, 151, 109, 148, 95, 105, 0, 134, 177, 207, - 211, 532, 462, 471, 117, 469, 209, 187, 248, 505, - 189, 208, 155, 237, 200, 247, 257, 258, 234, 255, - 263, 224, 98, 233, 245, 114, 219, 0, 0, 0, - 100, 243, 230, 166, 145, 146, 99, 0, 205, 122, - 130, 119, 179, 240, 241, 118, 266, 106, 254, 102, - 107, 253, 173, 236, 244, 167, 160, 101, 242, 165, - 159, 150, 126, 138, 197, 157, 198, 139, 170, 169, - 171, 0, 441, 0, 228, 251, 267, 111, 457, 235, - 261, 262, 0, 201, 112, 131, 125, 196, 129, 172, - 108, 141, 225, 149, 156, 204, 265, 186, 210, 115, - 250, 226, 453, 456, 451, 452, 500, 501, 547, 548, - 549, 525, 447, 0, 454, 455, 0, 530, 537, 538, - 504, 94, 103, 153, 264, 202, 128, 252, 437, 450, - 121, 460, 0, 0, 473, 478, 479, 491, 493, 494, - 495, 496, 503, 510, 511, 513, 519, 520, 521, 522, - 527, 534, 553, 96, 97, 104, 110, 116, 120, 124, - 127, 133, 137, 140, 142, 143, 144, 147, 158, 161, - 162, 163, 164, 174, 175, 176, 178, 181, 182, 183, - 184, 185, 188, 190, 191, 192, 193, 194, 195, 203, - 206, 212, 213, 214, 215, 216, 217, 218, 220, 221, - 222, 223, 229, 232, 238, 239, 249, 256, 259, 135, - 246, 260, 541, 529, 0, 486, 544, 459, 476, 552, - 477, 480, 517, 444, 499, 180, 474, 0, 463, 439, - 470, 440, 461, 488, 123, 492, 458, 531, 502, 543, - 152, 0, 464, 550, 154, 508, 0, 227, 168, 0, - 0, 0, 490, 533, 497, 526, 485, 518, 449, 507, - 545, 475, 515, 546, 0, 0, 0, 91, 92, 93, - 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, - 512, 540, 472, 514, 516, 554, 438, 509, 0, 442, - 445, 551, 536, 467, 468, 0, 0, 0, 0, 0, - 0, 0, 489, 498, 523, 483, 0, 0, 0, 0, - 0, 0, 0, 0, 465, 0, 506, 0, 0, 0, - 446, 443, 0, 0, 0, 0, 487, 0, 0, 0, - 448, 0, 466, 524, 0, 436, 132, 528, 535, 484, - 285, 539, 482, 481, 542, 199, 0, 231, 136, 151, - 109, 148, 95, 105, 0, 134, 177, 207, 211, 532, - 462, 471, 117, 469, 209, 187, 248, 505, 189, 208, - 155, 237, 200, 247, 257, 258, 234, 255, 263, 224, - 98, 233, 245, 114, 219, 0, 0, 0, 100, 243, - 230, 166, 145, 146, 99, 0, 205, 122, 130, 119, - 179, 240, 241, 118, 266, 106, 254, 102, 107, 253, - 173, 236, 244, 167, 160, 101, 242, 165, 159, 150, - 126, 138, 197, 157, 198, 139, 170, 169, 171, 0, - 441, 0, 228, 251, 267, 111, 457, 235, 261, 262, - 0, 201, 112, 131, 125, 196, 129, 172, 108, 141, - 225, 149, 156, 204, 265, 186, 210, 115, 250, 226, - 453, 456, 451, 452, 500, 501, 547, 548, 549, 525, - 447, 0, 454, 455, 0, 530, 537, 538, 504, 94, - 103, 153, 264, 202, 128, 252, 437, 450, 121, 460, - 0, 0, 473, 478, 479, 491, 493, 494, 495, 496, - 503, 510, 511, 513, 519, 520, 521, 522, 527, 534, - 553, 96, 97, 104, 110, 116, 120, 124, 127, 133, - 137, 140, 142, 143, 144, 147, 158, 161, 162, 163, - 164, 174, 175, 176, 178, 181, 182, 183, 184, 185, - 188, 190, 191, 192, 193, 194, 195, 203, 206, 212, - 213, 214, 215, 216, 217, 218, 220, 221, 222, 223, - 229, 232, 238, 239, 249, 256, 259, 135, 246, 260, - 541, 529, 0, 486, 544, 459, 476, 552, 477, 480, - 517, 444, 499, 180, 474, 0, 463, 439, 470, 440, - 461, 488, 123, 492, 458, 531, 502, 543, 152, 0, - 464, 550, 154, 508, 0, 227, 168, 0, 0, 0, - 490, 533, 497, 526, 485, 518, 449, 507, 545, 475, - 515, 546, 0, 0, 0, 91, 92, 93, 0, 0, - 0, 0, 0, 0, 0, 0, 113, 0, 512, 540, - 472, 514, 516, 554, 438, 509, 0, 442, 445, 551, - 536, 467, 468, 0, 0, 0, 0, 0, 0, 0, - 489, 498, 523, 483, 0, 0, 0, 0, 0, 0, - 0, 0, 465, 0, 506, 0, 0, 0, 446, 443, - 0, 0, 0, 0, 487, 0, 0, 0, 448, 0, - 466, 524, 0, 436, 132, 528, 535, 484, 285, 539, - 482, 481, 542, 199, 0, 231, 136, 151, 109, 148, - 95, 105, 0, 134, 177, 207, 211, 532, 462, 471, - 117, 469, 209, 187, 248, 505, 189, 208, 155, 237, - 200, 247, 257, 258, 234, 255, 263, 224, 98, 233, - 245, 114, 219, 0, 0, 0, 100, 243, 230, 166, - 145, 146, 99, 0, 205, 122, 130, 119, 179, 240, - 241, 118, 266, 106, 254, 102, 434, 253, 173, 236, - 244, 167, 160, 101, 242, 165, 159, 150, 126, 138, - 197, 157, 198, 139, 170, 169, 171, 0, 441, 0, - 228, 251, 267, 111, 457, 235, 261, 262, 0, 201, - 112, 131, 125, 196, 129, 435, 433, 428, 427, 149, - 156, 204, 265, 186, 210, 115, 250, 226, 453, 456, - 451, 452, 500, 501, 547, 548, 549, 525, 447, 0, - 454, 455, 0, 530, 537, 538, 504, 94, 103, 153, - 264, 202, 128, 252, 437, 450, 121, 460, 0, 0, - 473, 478, 479, 491, 493, 494, 495, 496, 503, 510, - 511, 513, 519, 520, 521, 522, 527, 534, 553, 96, - 97, 104, 110, 116, 120, 124, 127, 133, 137, 140, - 142, 143, 144, 147, 158, 161, 162, 163, 164, 174, - 175, 176, 178, 181, 182, 183, 184, 185, 188, 190, - 191, 192, 193, 194, 195, 203, 206, 212, 213, 214, - 215, 216, 217, 218, 220, 221, 222, 223, 229, 232, - 238, 239, 249, 256, 259, 135, 246, 260, 541, 529, - 0, 486, 544, 459, 476, 552, 477, 480, 517, 444, - 499, 180, 474, 0, 463, 439, 470, 440, 461, 488, - 123, 492, 458, 531, 502, 543, 152, 0, 464, 550, - 154, 508, 0, 227, 168, 0, 0, 0, 490, 533, - 497, 526, 485, 518, 449, 507, 545, 475, 515, 546, - 0, 0, 0, 91, 92, 93, 0, 0, 0, 0, - 0, 0, 0, 0, 113, 0, 512, 540, 472, 514, - 516, 554, 438, 509, 0, 442, 445, 551, 536, 467, - 468, 0, 0, 0, 0, 0, 0, 0, 489, 498, - 523, 483, 0, 0, 0, 0, 0, 0, 0, 0, - 465, 0, 506, 0, 0, 0, 446, 443, 0, 0, - 0, 0, 487, 0, 0, 0, 448, 0, 466, 524, - 0, 436, 132, 528, 535, 484, 285, 539, 482, 481, - 542, 199, 0, 231, 136, 151, 109, 148, 95, 105, - 0, 134, 177, 207, 211, 532, 462, 471, 117, 469, - 209, 187, 248, 505, 189, 208, 155, 237, 200, 247, - 257, 258, 234, 255, 263, 224, 98, 233, 765, 114, - 219, 0, 0, 0, 100, 243, 230, 166, 145, 146, - 99, 0, 205, 122, 130, 119, 179, 240, 241, 118, - 266, 106, 254, 102, 434, 253, 173, 236, 244, 167, - 160, 101, 242, 165, 159, 150, 126, 138, 197, 157, - 198, 139, 170, 169, 171, 0, 441, 0, 228, 251, - 267, 111, 457, 235, 261, 262, 0, 201, 112, 131, - 125, 196, 129, 435, 433, 428, 427, 149, 156, 204, - 265, 186, 210, 115, 250, 226, 453, 456, 451, 452, - 500, 501, 547, 548, 549, 525, 447, 0, 454, 455, - 0, 530, 537, 538, 504, 94, 103, 153, 264, 202, - 128, 252, 437, 450, 121, 460, 0, 0, 473, 478, - 479, 491, 493, 494, 495, 496, 503, 510, 511, 513, - 519, 520, 521, 522, 527, 534, 553, 96, 97, 104, - 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, - 144, 147, 158, 161, 162, 163, 164, 174, 175, 176, - 178, 181, 182, 183, 184, 185, 188, 190, 191, 192, - 193, 194, 195, 203, 206, 212, 213, 214, 215, 216, - 217, 218, 220, 221, 222, 223, 229, 232, 238, 239, - 249, 256, 259, 135, 246, 260, 541, 529, 0, 486, - 544, 459, 476, 552, 477, 480, 517, 444, 499, 180, - 474, 0, 463, 439, 470, 440, 461, 488, 123, 492, - 458, 531, 502, 543, 152, 0, 464, 550, 154, 508, - 0, 227, 168, 0, 0, 0, 490, 533, 497, 526, - 485, 518, 449, 507, 545, 475, 515, 546, 0, 0, - 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, - 0, 0, 113, 0, 512, 540, 472, 514, 516, 554, - 438, 509, 0, 442, 445, 551, 536, 467, 468, 0, - 0, 0, 0, 0, 0, 0, 489, 498, 523, 483, - 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, - 506, 0, 0, 0, 446, 443, 0, 0, 0, 0, - 487, 0, 0, 0, 448, 0, 466, 524, 0, 436, - 132, 528, 535, 484, 285, 539, 482, 481, 542, 199, - 0, 231, 136, 151, 109, 148, 95, 105, 0, 134, - 177, 207, 211, 532, 462, 471, 117, 469, 209, 187, - 248, 505, 189, 208, 155, 237, 200, 247, 257, 258, - 234, 255, 263, 224, 98, 233, 425, 114, 219, 0, - 0, 0, 100, 243, 230, 166, 145, 146, 99, 0, - 205, 122, 130, 119, 179, 240, 241, 118, 266, 106, - 254, 102, 434, 253, 173, 236, 244, 167, 160, 101, - 242, 165, 159, 150, 126, 138, 197, 157, 198, 139, - 170, 169, 171, 0, 441, 0, 228, 251, 267, 111, - 457, 235, 261, 262, 0, 201, 112, 131, 125, 196, - 129, 435, 433, 428, 427, 149, 156, 204, 265, 186, - 210, 115, 250, 226, 453, 456, 451, 452, 500, 501, - 547, 548, 549, 525, 447, 0, 454, 455, 0, 530, - 537, 538, 504, 94, 103, 153, 264, 202, 128, 252, - 437, 450, 121, 460, 0, 0, 473, 478, 479, 491, - 493, 494, 495, 496, 503, 510, 511, 513, 519, 520, - 521, 522, 527, 534, 553, 96, 97, 104, 110, 116, - 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, - 158, 161, 162, 163, 164, 174, 175, 176, 178, 181, - 182, 183, 184, 185, 188, 190, 191, 192, 193, 194, - 195, 203, 206, 212, 213, 214, 215, 216, 217, 218, - 220, 221, 222, 223, 229, 232, 238, 239, 249, 256, - 259, 135, 246, 260, 180, 0, 0, 928, 0, 329, - 0, 0, 0, 123, 0, 328, 0, 0, 0, 152, - 0, 929, 372, 154, 0, 0, 227, 168, 0, 0, - 0, 0, 0, 363, 364, 0, 0, 0, 0, 0, - 0, 0, 0, 57, 0, 0, 91, 92, 93, 350, - 349, 352, 353, 354, 355, 0, 0, 113, 351, 356, - 357, 358, 0, 0, 0, 0, 326, 343, 0, 371, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, - 341, 412, 0, 0, 0, 386, 0, 342, 0, 0, - 335, 336, 338, 337, 339, 344, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 132, 385, 0, 0, 285, - 0, 0, 383, 0, 199, 0, 231, 136, 151, 109, - 148, 95, 105, 0, 134, 177, 207, 211, 0, 0, - 0, 117, 0, 209, 187, 248, 0, 189, 208, 155, - 237, 200, 247, 257, 258, 234, 255, 263, 224, 98, - 233, 245, 114, 219, 0, 0, 0, 100, 243, 230, - 166, 145, 146, 99, 0, 205, 122, 130, 119, 179, - 240, 241, 118, 266, 106, 254, 102, 107, 253, 173, - 236, 244, 167, 160, 101, 242, 165, 159, 150, 126, - 138, 197, 157, 198, 139, 170, 169, 171, 0, 0, - 0, 228, 251, 267, 111, 0, 235, 261, 262, 0, - 201, 112, 131, 125, 196, 129, 172, 108, 141, 225, - 149, 156, 204, 265, 186, 210, 115, 250, 226, 373, - 384, 379, 380, 377, 378, 376, 375, 374, 387, 365, - 366, 367, 368, 370, 0, 381, 382, 369, 94, 103, - 153, 264, 202, 128, 252, 0, 0, 121, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 97, 104, 110, 116, 120, 124, 127, 133, 137, - 140, 142, 143, 144, 147, 158, 161, 162, 163, 164, - 174, 175, 176, 178, 181, 182, 183, 184, 185, 188, - 190, 191, 192, 193, 194, 195, 203, 206, 212, 213, - 214, 215, 216, 217, 218, 220, 221, 222, 223, 229, - 232, 238, 239, 249, 256, 259, 135, 246, 260, 180, - 0, 0, 0, 0, 329, 0, 0, 0, 123, 0, - 328, 0, 0, 0, 152, 0, 0, 372, 154, 0, - 0, 227, 168, 0, 0, 0, 0, 0, 363, 364, - 0, 0, 0, 0, 0, 0, 1031, 0, 57, 0, - 0, 91, 92, 93, 350, 349, 352, 353, 354, 355, - 0, 0, 113, 351, 356, 357, 358, 1032, 0, 0, - 0, 326, 343, 0, 371, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 340, 341, 0, 0, 0, 0, - 386, 0, 342, 0, 0, 335, 336, 338, 337, 339, - 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 132, 385, 0, 0, 285, 0, 0, 383, 0, 199, - 0, 231, 136, 151, 109, 148, 95, 105, 0, 134, - 177, 207, 211, 0, 0, 0, 117, 0, 209, 187, - 248, 0, 189, 208, 155, 237, 200, 247, 257, 258, - 234, 255, 263, 224, 98, 233, 245, 114, 219, 0, - 0, 0, 100, 243, 230, 166, 145, 146, 99, 0, - 205, 122, 130, 119, 179, 240, 241, 118, 266, 106, - 254, 102, 107, 253, 173, 236, 244, 167, 160, 101, - 242, 165, 159, 150, 126, 138, 197, 157, 198, 139, - 170, 169, 171, 0, 0, 0, 228, 251, 267, 111, - 0, 235, 261, 262, 0, 201, 112, 131, 125, 196, - 129, 172, 108, 141, 225, 149, 156, 204, 265, 186, - 210, 115, 250, 226, 373, 384, 379, 380, 377, 378, - 376, 375, 374, 387, 365, 366, 367, 368, 370, 0, - 381, 382, 369, 94, 103, 153, 264, 202, 128, 252, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 97, 104, 110, 116, - 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, - 158, 161, 162, 163, 164, 174, 175, 176, 178, 181, - 182, 183, 184, 185, 188, 190, 191, 192, 193, 194, - 195, 203, 206, 212, 213, 214, 215, 216, 217, 218, - 220, 221, 222, 223, 229, 232, 238, 239, 249, 256, - 259, 135, 246, 260, 180, 0, 0, 0, 0, 329, - 0, 0, 0, 123, 0, 328, 0, 0, 0, 152, - 0, 0, 372, 154, 0, 0, 227, 168, 0, 0, - 0, 0, 0, 363, 364, 0, 0, 0, 0, 0, - 0, 0, 0, 57, 0, 400, 91, 92, 93, 350, - 349, 352, 353, 354, 355, 0, 0, 113, 351, 356, - 357, 358, 0, 0, 0, 0, 326, 343, 0, 371, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, - 341, 0, 0, 0, 0, 386, 0, 342, 0, 0, - 335, 336, 338, 337, 339, 344, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 132, 385, 0, 0, 285, - 0, 0, 383, 0, 199, 0, 231, 136, 151, 109, - 148, 95, 105, 0, 134, 177, 207, 211, 0, 0, - 0, 117, 0, 209, 187, 248, 0, 189, 208, 155, - 237, 200, 247, 257, 258, 234, 255, 263, 224, 98, - 233, 245, 114, 219, 0, 0, 0, 100, 243, 230, - 166, 145, 146, 99, 0, 205, 122, 130, 119, 179, - 240, 241, 118, 266, 106, 254, 102, 107, 253, 173, - 236, 244, 167, 160, 101, 242, 165, 159, 150, 126, - 138, 197, 157, 198, 139, 170, 169, 171, 0, 0, - 0, 228, 251, 267, 111, 0, 235, 261, 262, 0, - 201, 112, 131, 125, 196, 129, 172, 108, 141, 225, - 149, 156, 204, 265, 186, 210, 115, 250, 226, 373, - 384, 379, 380, 377, 378, 376, 375, 374, 387, 365, - 366, 367, 368, 370, 0, 381, 382, 369, 94, 103, - 153, 264, 202, 128, 252, 0, 0, 121, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 97, 104, 110, 116, 120, 124, 127, 133, 137, - 140, 142, 143, 144, 147, 158, 161, 162, 163, 164, - 174, 175, 176, 178, 181, 182, 183, 184, 185, 188, - 190, 191, 192, 193, 194, 195, 203, 206, 212, 213, - 214, 215, 216, 217, 218, 220, 221, 222, 223, 229, - 232, 238, 239, 249, 256, 259, 135, 246, 260, 180, - 0, 0, 0, 0, 329, 0, 0, 0, 123, 0, - 328, 0, 0, 0, 152, 0, 0, 372, 154, 0, - 0, 227, 168, 0, 0, 0, 0, 0, 363, 364, - 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, - 0, 91, 92, 93, 350, 349, 352, 353, 354, 355, - 0, 0, 113, 351, 356, 357, 358, 0, 0, 0, - 0, 326, 343, 0, 371, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 340, 341, 412, 0, 0, 0, - 386, 0, 342, 0, 0, 335, 336, 338, 337, 339, - 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 132, 385, 0, 0, 285, 0, 0, 383, 0, 199, - 0, 231, 136, 151, 109, 148, 95, 105, 0, 134, - 177, 207, 211, 0, 0, 0, 117, 0, 209, 187, - 248, 0, 189, 208, 155, 237, 200, 247, 257, 258, - 234, 255, 263, 224, 98, 233, 245, 114, 219, 0, - 0, 0, 100, 243, 230, 166, 145, 146, 99, 0, - 205, 122, 130, 119, 179, 240, 241, 118, 266, 106, - 254, 102, 107, 253, 173, 236, 244, 167, 160, 101, - 242, 165, 159, 150, 126, 138, 197, 157, 198, 139, - 170, 169, 171, 0, 0, 0, 228, 251, 267, 111, - 0, 235, 261, 262, 0, 201, 112, 131, 125, 196, - 129, 172, 108, 141, 225, 149, 156, 204, 265, 186, - 210, 115, 250, 226, 373, 384, 379, 380, 377, 378, - 376, 375, 374, 387, 365, 366, 367, 368, 370, 0, - 381, 382, 369, 94, 103, 153, 264, 202, 128, 252, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 97, 104, 110, 116, - 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, - 158, 161, 162, 163, 164, 174, 175, 176, 178, 181, - 182, 183, 184, 185, 188, 190, 191, 192, 193, 194, - 195, 203, 206, 212, 213, 214, 215, 216, 217, 218, - 220, 221, 222, 223, 229, 232, 238, 239, 249, 256, - 259, 135, 246, 260, 180, 0, 0, 0, 0, 329, - 0, 0, 0, 123, 0, 328, 0, 0, 0, 152, - 0, 0, 372, 154, 0, 0, 227, 168, 0, 0, - 0, 0, 0, 363, 364, 0, 0, 0, 0, 0, - 0, 0, 0, 57, 0, 0, 91, 92, 93, 350, - 946, 352, 353, 354, 355, 0, 0, 113, 351, 356, - 357, 358, 0, 0, 0, 0, 326, 343, 0, 371, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, - 341, 412, 0, 0, 0, 386, 0, 342, 0, 0, - 335, 336, 338, 337, 339, 344, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 132, 385, 0, 0, 285, - 0, 0, 383, 0, 199, 0, 231, 136, 151, 109, - 148, 95, 105, 0, 134, 177, 207, 211, 0, 0, - 0, 117, 0, 209, 187, 248, 0, 189, 208, 155, - 237, 200, 247, 257, 258, 234, 255, 263, 224, 98, - 233, 245, 114, 219, 0, 0, 0, 100, 243, 230, - 166, 145, 146, 99, 0, 205, 122, 130, 119, 179, - 240, 241, 118, 266, 106, 254, 102, 107, 253, 173, - 236, 244, 167, 160, 101, 242, 165, 159, 150, 126, - 138, 197, 157, 198, 139, 170, 169, 171, 0, 0, - 0, 228, 251, 267, 111, 0, 235, 261, 262, 0, - 201, 112, 131, 125, 196, 129, 172, 108, 141, 225, - 149, 156, 204, 265, 186, 210, 115, 250, 226, 373, - 384, 379, 380, 377, 378, 376, 375, 374, 387, 365, - 366, 367, 368, 370, 0, 381, 382, 369, 94, 103, - 153, 264, 202, 128, 252, 0, 0, 121, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 97, 104, 110, 116, 120, 124, 127, 133, 137, - 140, 142, 143, 144, 147, 158, 161, 162, 163, 164, - 174, 175, 176, 178, 181, 182, 183, 184, 185, 188, - 190, 191, 192, 193, 194, 195, 203, 206, 212, 213, - 214, 215, 216, 217, 218, 220, 221, 222, 223, 229, - 232, 238, 239, 249, 256, 259, 135, 246, 260, 180, - 0, 0, 0, 0, 329, 0, 0, 0, 123, 0, - 328, 0, 0, 0, 152, 0, 0, 372, 154, 0, - 0, 227, 168, 0, 0, 0, 0, 0, 363, 364, - 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, - 0, 91, 92, 93, 350, 943, 352, 353, 354, 355, - 0, 0, 113, 351, 356, 357, 358, 0, 0, 0, - 0, 326, 343, 0, 371, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 340, 341, 412, 0, 0, 0, - 386, 0, 342, 0, 0, 335, 336, 338, 337, 339, - 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 132, 385, 0, 0, 285, 0, 0, 383, 0, 199, - 0, 231, 136, 151, 109, 148, 95, 105, 0, 134, - 177, 207, 211, 0, 0, 0, 117, 0, 209, 187, - 248, 0, 189, 208, 155, 237, 200, 247, 257, 258, - 234, 255, 263, 224, 98, 233, 245, 114, 219, 0, - 0, 0, 100, 243, 230, 166, 145, 146, 99, 0, - 205, 122, 130, 119, 179, 240, 241, 118, 266, 106, - 254, 102, 107, 253, 173, 236, 244, 167, 160, 101, - 242, 165, 159, 150, 126, 138, 197, 157, 198, 139, - 170, 169, 171, 0, 0, 0, 228, 251, 267, 111, - 0, 235, 261, 262, 0, 201, 112, 131, 125, 196, - 129, 172, 108, 141, 225, 149, 156, 204, 265, 186, - 210, 115, 250, 226, 373, 384, 379, 380, 377, 378, - 376, 375, 374, 387, 365, 366, 367, 368, 370, 0, - 381, 382, 369, 94, 103, 153, 264, 202, 128, 252, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 97, 104, 110, 116, - 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, - 158, 161, 162, 163, 164, 174, 175, 176, 178, 181, - 182, 183, 184, 185, 188, 190, 191, 192, 193, 194, - 195, 203, 206, 212, 213, 214, 215, 216, 217, 218, - 220, 221, 222, 223, 229, 232, 238, 239, 249, 256, - 259, 135, 246, 260, 393, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, - 0, 329, 0, 0, 0, 123, 0, 328, 0, 0, - 0, 152, 0, 0, 372, 154, 0, 0, 227, 168, - 0, 0, 0, 0, 0, 363, 364, 0, 0, 0, - 0, 0, 0, 0, 0, 57, 0, 0, 91, 92, - 93, 350, 349, 352, 353, 354, 355, 0, 0, 113, - 351, 356, 357, 358, 0, 0, 0, 0, 326, 343, - 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 340, 341, 0, 0, 0, 0, 386, 0, 342, - 0, 0, 335, 336, 338, 337, 339, 344, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 132, 385, 0, - 0, 285, 0, 0, 383, 0, 199, 0, 231, 136, - 151, 109, 148, 95, 105, 0, 134, 177, 207, 211, - 0, 0, 0, 117, 0, 209, 187, 248, 0, 189, - 208, 155, 237, 200, 247, 257, 258, 234, 255, 263, - 224, 98, 233, 245, 114, 219, 0, 0, 0, 100, - 243, 230, 166, 145, 146, 99, 0, 205, 122, 130, - 119, 179, 240, 241, 118, 266, 106, 254, 102, 107, - 253, 173, 236, 244, 167, 160, 101, 242, 165, 159, - 150, 126, 138, 197, 157, 198, 139, 170, 169, 171, - 0, 0, 0, 228, 251, 267, 111, 0, 235, 261, - 262, 0, 201, 112, 131, 125, 196, 129, 172, 108, - 141, 225, 149, 156, 204, 265, 186, 210, 115, 250, - 226, 373, 384, 379, 380, 377, 378, 376, 375, 374, - 387, 365, 366, 367, 368, 370, 0, 381, 382, 369, - 94, 103, 153, 264, 202, 128, 252, 0, 0, 121, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 96, 97, 104, 110, 116, 120, 124, 127, - 133, 137, 140, 142, 143, 144, 147, 158, 161, 162, - 163, 164, 174, 175, 176, 178, 181, 182, 183, 184, - 185, 188, 190, 191, 192, 193, 194, 195, 203, 206, - 212, 213, 214, 215, 216, 217, 218, 220, 221, 222, - 223, 229, 232, 238, 239, 249, 256, 259, 135, 246, - 260, 180, 0, 0, 0, 0, 329, 0, 0, 0, - 123, 0, 328, 0, 0, 0, 152, 0, 0, 372, - 154, 0, 0, 227, 168, 0, 0, 0, 0, 0, - 363, 364, 0, 0, 0, 0, 0, 0, 0, 0, - 57, 0, 0, 91, 92, 93, 350, 349, 352, 353, - 354, 355, 0, 0, 113, 351, 356, 357, 358, 0, - 0, 0, 0, 326, 343, 0, 371, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 340, 341, 0, 0, - 0, 0, 386, 0, 342, 0, 0, 335, 336, 338, - 337, 339, 344, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 132, 385, 0, 0, 285, 0, 0, 383, - 0, 199, 0, 231, 136, 151, 109, 148, 95, 105, - 0, 134, 177, 207, 211, 0, 0, 0, 117, 0, - 209, 187, 248, 0, 189, 208, 155, 237, 200, 247, - 257, 258, 234, 255, 263, 224, 98, 233, 245, 114, - 219, 0, 0, 0, 100, 243, 230, 166, 145, 146, - 99, 0, 205, 122, 130, 119, 179, 240, 241, 118, - 266, 106, 254, 102, 107, 253, 173, 236, 244, 167, - 160, 101, 242, 165, 159, 150, 126, 138, 197, 157, - 198, 139, 170, 169, 171, 0, 0, 0, 228, 251, - 267, 111, 0, 235, 261, 262, 0, 201, 112, 131, - 125, 196, 129, 172, 108, 141, 225, 149, 156, 204, - 265, 186, 210, 115, 250, 226, 373, 384, 379, 380, - 377, 378, 376, 375, 374, 387, 365, 366, 367, 368, - 370, 0, 381, 382, 369, 94, 103, 153, 264, 202, - 128, 252, 0, 0, 121, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 97, 104, - 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, - 144, 147, 158, 161, 162, 163, 164, 174, 175, 176, - 178, 181, 182, 183, 184, 185, 188, 190, 191, 192, - 193, 194, 195, 203, 206, 212, 213, 214, 215, 216, - 217, 218, 220, 221, 222, 223, 229, 232, 238, 239, - 249, 256, 259, 135, 246, 260, 180, 0, 0, 0, - 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, - 0, 152, 0, 0, 372, 154, 0, 0, 227, 168, - 0, 0, 0, 0, 0, 363, 364, 0, 0, 0, - 0, 0, 0, 0, 0, 57, 0, 0, 91, 92, - 93, 350, 349, 352, 353, 354, 355, 0, 0, 113, - 351, 356, 357, 358, 0, 0, 0, 0, 0, 343, - 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 340, 341, 0, 0, 0, 0, 386, 0, 342, - 0, 0, 335, 336, 338, 337, 339, 344, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 132, 385, 0, - 0, 285, 0, 0, 383, 0, 199, 0, 231, 136, - 151, 109, 148, 95, 105, 0, 134, 177, 207, 211, - 0, 0, 0, 117, 0, 209, 187, 248, 1599, 189, - 208, 155, 237, 200, 247, 257, 258, 234, 255, 263, - 224, 98, 233, 245, 114, 219, 0, 0, 0, 100, - 243, 230, 166, 145, 146, 99, 0, 205, 122, 130, - 119, 179, 240, 241, 118, 266, 106, 254, 102, 107, - 253, 173, 236, 244, 167, 160, 101, 242, 165, 159, - 150, 126, 138, 197, 157, 198, 139, 170, 169, 171, - 0, 0, 0, 228, 251, 267, 111, 0, 235, 261, - 262, 0, 201, 112, 131, 125, 196, 129, 172, 108, - 141, 225, 149, 156, 204, 265, 186, 210, 115, 250, - 226, 373, 384, 379, 380, 377, 378, 376, 375, 374, - 387, 365, 366, 367, 368, 370, 0, 381, 382, 369, - 94, 103, 153, 264, 202, 128, 252, 0, 0, 121, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 96, 97, 104, 110, 116, 120, 124, 127, - 133, 137, 140, 142, 143, 144, 147, 158, 161, 162, - 163, 164, 174, 175, 176, 178, 181, 182, 183, 184, - 185, 188, 190, 191, 192, 193, 194, 195, 203, 206, - 212, 213, 214, 215, 216, 217, 218, 220, 221, 222, - 223, 229, 232, 238, 239, 249, 256, 259, 135, 246, - 260, 180, 0, 0, 0, 0, 0, 0, 0, 0, - 123, 0, 0, 0, 0, 0, 152, 0, 0, 372, - 154, 0, 0, 227, 168, 0, 0, 0, 0, 0, - 363, 364, 0, 0, 0, 0, 0, 0, 0, 0, - 57, 0, 400, 91, 92, 93, 350, 349, 352, 353, - 354, 355, 0, 0, 113, 351, 356, 357, 358, 0, - 0, 0, 0, 0, 343, 0, 371, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 340, 341, 0, 0, - 0, 0, 386, 0, 342, 0, 0, 335, 336, 338, - 337, 339, 344, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 132, 385, 0, 0, 285, 0, 0, 383, - 0, 199, 0, 231, 136, 151, 109, 148, 95, 105, - 0, 134, 177, 207, 211, 0, 0, 0, 117, 0, - 209, 187, 248, 0, 189, 208, 155, 237, 200, 247, - 257, 258, 234, 255, 263, 224, 98, 233, 245, 114, - 219, 0, 0, 0, 100, 243, 230, 166, 145, 146, - 99, 0, 205, 122, 130, 119, 179, 240, 241, 118, - 266, 106, 254, 102, 107, 253, 173, 236, 244, 167, - 160, 101, 242, 165, 159, 150, 126, 138, 197, 157, - 198, 139, 170, 169, 171, 0, 0, 0, 228, 251, - 267, 111, 0, 235, 261, 262, 0, 201, 112, 131, - 125, 196, 129, 172, 108, 141, 225, 149, 156, 204, - 265, 186, 210, 115, 250, 226, 373, 384, 379, 380, - 377, 378, 376, 375, 374, 387, 365, 366, 367, 368, - 370, 0, 381, 382, 369, 94, 103, 153, 264, 202, - 128, 252, 0, 0, 121, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 97, 104, - 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, - 144, 147, 158, 161, 162, 163, 164, 174, 175, 176, - 178, 181, 182, 183, 184, 185, 188, 190, 191, 192, - 193, 194, 195, 203, 206, 212, 213, 214, 215, 216, - 217, 218, 220, 221, 222, 223, 229, 232, 238, 239, - 249, 256, 259, 135, 246, 260, 180, 0, 0, 0, - 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, - 0, 152, 0, 0, 372, 154, 0, 0, 227, 168, - 0, 0, 0, 0, 0, 363, 364, 0, 0, 0, - 0, 0, 0, 0, 0, 57, 0, 0, 91, 92, - 93, 350, 349, 352, 353, 354, 355, 0, 0, 113, - 351, 356, 357, 358, 0, 0, 0, 0, 0, 343, - 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 340, 341, 0, 0, 0, 0, 386, 0, 342, - 0, 0, 335, 336, 338, 337, 339, 344, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 132, 385, 0, - 0, 285, 0, 0, 383, 0, 199, 0, 231, 136, - 151, 109, 148, 95, 105, 0, 134, 177, 207, 211, - 0, 0, 0, 117, 0, 209, 187, 248, 0, 189, - 208, 155, 237, 200, 247, 257, 258, 234, 255, 263, - 224, 98, 233, 245, 114, 219, 0, 0, 0, 100, - 243, 230, 166, 145, 146, 99, 0, 205, 122, 130, - 119, 179, 240, 241, 118, 266, 106, 254, 102, 107, - 253, 173, 236, 244, 167, 160, 101, 242, 165, 159, - 150, 126, 138, 197, 157, 198, 139, 170, 169, 171, - 0, 0, 0, 228, 251, 267, 111, 0, 235, 261, - 262, 0, 201, 112, 131, 125, 196, 129, 172, 108, - 141, 225, 149, 156, 204, 265, 186, 210, 115, 250, - 226, 373, 384, 379, 380, 377, 378, 376, 375, 374, - 387, 365, 366, 367, 368, 370, 0, 381, 382, 369, - 94, 103, 153, 264, 202, 128, 252, 0, 0, 121, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 96, 97, 104, 110, 116, 120, 124, 127, - 133, 137, 140, 142, 143, 144, 147, 158, 161, 162, - 163, 164, 174, 175, 176, 178, 181, 182, 183, 184, - 185, 188, 190, 191, 192, 193, 194, 195, 203, 206, - 212, 213, 214, 215, 216, 217, 218, 220, 221, 222, - 223, 229, 232, 238, 239, 249, 256, 259, 135, 246, - 260, 180, 0, 0, 0, 0, 0, 0, 0, 0, - 123, 0, 0, 0, 0, 0, 152, 0, 0, 0, - 154, 0, 0, 227, 168, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 91, 92, 93, 0, 0, 0, 0, - 0, 0, 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, 0, 0, 0, - 0, 0, 645, 644, 654, 655, 647, 648, 649, 650, - 651, 652, 653, 646, 0, 0, 656, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 132, 0, 0, 0, 285, 0, 0, 0, - 0, 199, 0, 231, 136, 151, 109, 148, 95, 105, - 0, 134, 177, 207, 211, 0, 0, 0, 117, 0, - 209, 187, 248, 0, 189, 208, 155, 237, 200, 247, - 257, 258, 234, 255, 263, 224, 98, 233, 245, 114, - 219, 0, 0, 0, 100, 243, 230, 166, 145, 146, - 99, 0, 205, 122, 130, 119, 179, 240, 241, 118, - 266, 106, 254, 102, 107, 253, 173, 236, 244, 167, - 160, 101, 242, 165, 159, 150, 126, 138, 197, 157, - 198, 139, 170, 169, 171, 0, 0, 0, 228, 251, - 267, 111, 0, 235, 261, 262, 0, 201, 112, 131, - 125, 196, 129, 172, 108, 141, 225, 149, 156, 204, - 265, 186, 210, 115, 250, 226, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 94, 103, 153, 264, 202, - 128, 252, 0, 0, 121, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 97, 104, - 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, - 144, 147, 158, 161, 162, 163, 164, 174, 175, 176, - 178, 181, 182, 183, 184, 185, 188, 190, 191, 192, - 193, 194, 195, 203, 206, 212, 213, 214, 215, 216, - 217, 218, 220, 221, 222, 223, 229, 232, 238, 239, - 249, 256, 259, 135, 246, 260, 180, 0, 0, 0, - 740, 0, 0, 0, 0, 123, 0, 0, 0, 0, - 0, 152, 0, 0, 0, 154, 0, 0, 227, 168, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, - 93, 0, 742, 0, 0, 0, 0, 0, 0, 113, - 0, 0, 0, 0, 0, 634, 635, 633, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, - 0, 285, 0, 0, 0, 0, 199, 0, 231, 136, - 151, 109, 148, 95, 105, 0, 134, 177, 207, 211, - 0, 0, 0, 117, 0, 209, 187, 248, 0, 189, - 208, 155, 237, 200, 247, 257, 258, 234, 255, 263, - 224, 98, 233, 245, 114, 219, 0, 0, 0, 100, - 243, 230, 166, 145, 146, 99, 0, 205, 122, 130, - 119, 179, 240, 241, 118, 266, 106, 254, 102, 107, - 253, 173, 236, 244, 167, 160, 101, 242, 165, 159, - 150, 126, 138, 197, 157, 198, 139, 170, 169, 171, - 0, 0, 0, 228, 251, 267, 111, 0, 235, 261, - 262, 0, 201, 112, 131, 125, 196, 129, 172, 108, - 141, 225, 149, 156, 204, 265, 186, 210, 115, 250, - 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 94, 103, 153, 264, 202, 128, 252, 0, 0, 121, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 96, 97, 104, 110, 116, 120, 124, 127, - 133, 137, 140, 142, 143, 144, 147, 158, 161, 162, - 163, 164, 174, 175, 176, 178, 181, 182, 183, 184, - 185, 188, 190, 191, 192, 193, 194, 195, 203, 206, - 212, 213, 214, 215, 216, 217, 218, 220, 221, 222, - 223, 229, 232, 238, 239, 249, 256, 259, 135, 246, - 260, 180, 0, 0, 0, 0, 0, 0, 0, 0, - 123, 0, 0, 0, 0, 0, 152, 0, 0, 0, - 154, 0, 0, 227, 168, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 91, 92, 93, 0, 0, 0, 0, - 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, - 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 132, 85, 86, 0, 82, 0, 0, 0, - 87, 199, 0, 231, 136, 151, 109, 148, 95, 105, - 0, 134, 177, 207, 211, 0, 0, 0, 117, 0, - 209, 187, 248, 0, 189, 208, 155, 237, 200, 247, - 257, 258, 234, 255, 263, 224, 98, 233, 245, 114, - 219, 0, 0, 0, 100, 243, 230, 166, 145, 146, - 99, 0, 205, 122, 130, 119, 179, 240, 241, 118, - 266, 106, 254, 102, 107, 253, 173, 236, 244, 167, - 160, 101, 242, 165, 159, 150, 126, 138, 197, 157, - 198, 139, 170, 169, 171, 0, 0, 0, 228, 251, - 267, 111, 0, 235, 261, 262, 0, 201, 112, 131, - 125, 196, 129, 172, 108, 141, 225, 149, 156, 204, - 265, 186, 210, 115, 250, 226, 0, 84, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 94, 103, 153, 264, 202, - 128, 252, 0, 0, 121, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 97, 104, - 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, - 144, 147, 158, 161, 162, 163, 164, 174, 175, 176, - 178, 181, 182, 183, 184, 185, 188, 190, 191, 192, - 193, 194, 195, 203, 206, 212, 213, 214, 215, 216, - 217, 218, 220, 221, 222, 223, 229, 232, 238, 239, - 249, 256, 259, 135, 246, 260, 180, 0, 0, 0, - 1014, 0, 0, 0, 0, 123, 0, 0, 0, 0, - 0, 152, 0, 0, 0, 154, 0, 0, 227, 168, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, - 93, 0, 1016, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, - 0, 285, 0, 0, 0, 0, 199, 0, 231, 136, - 151, 109, 148, 95, 105, 0, 134, 177, 207, 211, - 0, 0, 0, 117, 0, 209, 187, 248, 0, 189, - 208, 155, 237, 200, 247, 257, 258, 234, 255, 263, - 224, 98, 233, 245, 114, 219, 0, 0, 0, 100, - 243, 230, 166, 145, 146, 99, 0, 205, 122, 130, - 119, 179, 240, 241, 118, 266, 106, 254, 102, 107, - 253, 173, 236, 244, 167, 160, 101, 242, 165, 159, - 150, 126, 138, 197, 157, 198, 139, 170, 169, 171, - 0, 0, 0, 228, 251, 267, 111, 0, 235, 261, - 262, 0, 201, 112, 131, 125, 196, 129, 172, 108, - 141, 225, 149, 156, 204, 265, 186, 210, 115, 250, - 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 94, 103, 153, 264, 202, 128, 252, 0, 0, 121, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 96, 97, 104, 110, 116, 120, 124, 127, - 133, 137, 140, 142, 143, 144, 147, 158, 161, 162, - 163, 164, 174, 175, 176, 178, 181, 182, 183, 184, - 185, 188, 190, 191, 192, 193, 194, 195, 203, 206, - 212, 213, 214, 215, 216, 217, 218, 220, 221, 222, - 223, 229, 232, 238, 239, 249, 256, 259, 135, 246, - 260, 29, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, - 0, 0, 123, 0, 0, 0, 0, 0, 152, 0, - 0, 0, 154, 0, 0, 227, 168, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 57, 0, 0, 91, 92, 93, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 132, 0, 0, 0, 285, 0, - 0, 0, 0, 199, 0, 231, 136, 151, 109, 148, - 95, 105, 0, 134, 177, 207, 211, 0, 0, 0, - 117, 0, 209, 187, 248, 0, 189, 208, 155, 237, - 200, 247, 257, 258, 234, 255, 263, 224, 98, 233, - 245, 114, 219, 0, 0, 0, 100, 243, 230, 166, - 145, 146, 99, 0, 205, 122, 130, 119, 179, 240, - 241, 118, 266, 106, 254, 102, 107, 253, 173, 236, - 244, 167, 160, 101, 242, 165, 159, 150, 126, 138, - 197, 157, 198, 139, 170, 169, 171, 0, 0, 0, - 228, 251, 267, 111, 0, 235, 261, 262, 0, 201, - 112, 131, 125, 196, 129, 172, 108, 141, 225, 149, - 156, 204, 265, 186, 210, 115, 250, 226, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 94, 103, 153, - 264, 202, 128, 252, 0, 0, 121, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 97, 104, 110, 116, 120, 124, 127, 133, 137, 140, - 142, 143, 144, 147, 158, 161, 162, 163, 164, 174, - 175, 176, 178, 181, 182, 183, 184, 185, 188, 190, - 191, 192, 193, 194, 195, 203, 206, 212, 213, 214, - 215, 216, 217, 218, 220, 221, 222, 223, 229, 232, - 238, 239, 249, 256, 259, 135, 246, 260, 180, 0, - 0, 0, 1014, 0, 0, 0, 0, 123, 0, 0, - 0, 0, 0, 152, 0, 0, 0, 154, 0, 0, - 227, 168, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 91, 92, 93, 0, 1016, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, - 0, 0, 0, 285, 0, 0, 0, 0, 199, 0, - 231, 136, 151, 109, 148, 95, 105, 0, 134, 177, - 207, 211, 0, 0, 0, 117, 0, 209, 187, 248, - 0, 1012, 208, 155, 237, 200, 247, 257, 258, 234, - 255, 263, 224, 98, 233, 245, 114, 219, 0, 0, - 0, 100, 243, 230, 166, 145, 146, 99, 0, 205, - 122, 130, 119, 179, 240, 241, 118, 266, 106, 254, - 102, 107, 253, 173, 236, 244, 167, 160, 101, 242, - 165, 159, 150, 126, 138, 197, 157, 198, 139, 170, - 169, 171, 0, 0, 0, 228, 251, 267, 111, 0, - 235, 261, 262, 0, 201, 112, 131, 125, 196, 129, - 172, 108, 141, 225, 149, 156, 204, 265, 186, 210, - 115, 250, 226, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 94, 103, 153, 264, 202, 128, 252, 0, - 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 97, 104, 110, 116, 120, - 124, 127, 133, 137, 140, 142, 143, 144, 147, 158, - 161, 162, 163, 164, 174, 175, 176, 178, 181, 182, - 183, 184, 185, 188, 190, 191, 192, 193, 194, 195, - 203, 206, 212, 213, 214, 215, 216, 217, 218, 220, - 221, 222, 223, 229, 232, 238, 239, 249, 256, 259, - 135, 246, 260, 180, 0, 0, 0, 0, 0, 0, - 0, 0, 123, 0, 0, 0, 0, 0, 152, 0, - 0, 0, 154, 0, 0, 227, 168, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 91, 92, 93, 0, 0, - 980, 0, 0, 981, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 132, 0, 0, 0, 285, 0, - 0, 0, 0, 199, 0, 231, 136, 151, 109, 148, - 95, 105, 0, 134, 177, 207, 211, 0, 0, 0, - 117, 0, 209, 187, 248, 0, 189, 208, 155, 237, - 200, 247, 257, 258, 234, 255, 263, 224, 98, 233, - 245, 114, 219, 0, 0, 0, 100, 243, 230, 166, - 145, 146, 99, 0, 205, 122, 130, 119, 179, 240, - 241, 118, 266, 106, 254, 102, 107, 253, 173, 236, - 244, 167, 160, 101, 242, 165, 159, 150, 126, 138, - 197, 157, 198, 139, 170, 169, 171, 0, 0, 0, - 228, 251, 267, 111, 0, 235, 261, 262, 0, 201, - 112, 131, 125, 196, 129, 172, 108, 141, 225, 149, - 156, 204, 265, 186, 210, 115, 250, 226, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 94, 103, 153, - 264, 202, 128, 252, 0, 0, 121, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 97, 104, 110, 116, 120, 124, 127, 133, 137, 140, - 142, 143, 144, 147, 158, 161, 162, 163, 164, 174, - 175, 176, 178, 181, 182, 183, 184, 185, 188, 190, - 191, 192, 193, 194, 195, 203, 206, 212, 213, 214, - 215, 216, 217, 218, 220, 221, 222, 223, 229, 232, - 238, 239, 249, 256, 259, 135, 246, 260, 180, 0, - 0, 0, 0, 0, 0, 0, 0, 123, 0, 776, - 0, 0, 0, 152, 0, 0, 0, 154, 0, 0, - 227, 168, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 91, 92, 93, 0, 775, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, - 0, 0, 0, 285, 0, 0, 0, 0, 199, 0, - 231, 136, 151, 109, 148, 95, 105, 0, 134, 177, - 207, 211, 0, 0, 0, 117, 0, 209, 187, 248, - 0, 189, 208, 155, 237, 200, 247, 257, 258, 234, - 255, 263, 224, 98, 233, 245, 114, 219, 0, 0, - 0, 100, 243, 230, 166, 145, 146, 99, 0, 205, - 122, 130, 119, 179, 240, 241, 118, 266, 106, 254, - 102, 107, 253, 173, 236, 244, 167, 160, 101, 242, - 165, 159, 150, 126, 138, 197, 157, 198, 139, 170, - 169, 171, 0, 0, 0, 228, 251, 267, 111, 0, - 235, 261, 262, 0, 201, 112, 131, 125, 196, 129, - 172, 108, 141, 225, 149, 156, 204, 265, 186, 210, - 115, 250, 226, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 94, 103, 153, 264, 202, 128, 252, 0, - 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 97, 104, 110, 116, 120, - 124, 127, 133, 137, 140, 142, 143, 144, 147, 158, - 161, 162, 163, 164, 174, 175, 176, 178, 181, 182, - 183, 184, 185, 188, 190, 191, 192, 193, 194, 195, - 203, 206, 212, 213, 214, 215, 216, 217, 218, 220, - 221, 222, 223, 229, 232, 238, 239, 249, 256, 259, - 135, 246, 260, 180, 0, 0, 0, 0, 0, 0, - 0, 0, 123, 0, 0, 0, 0, 0, 152, 0, - 0, 0, 154, 0, 0, 227, 168, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 400, 91, 92, 93, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 132, 0, 0, 0, 285, 0, - 0, 0, 0, 199, 0, 231, 136, 151, 109, 148, - 95, 105, 0, 134, 177, 207, 211, 0, 0, 0, - 117, 0, 209, 187, 248, 0, 189, 208, 155, 237, - 200, 247, 257, 258, 234, 255, 263, 224, 98, 233, - 245, 114, 219, 0, 0, 0, 100, 243, 230, 166, - 145, 146, 99, 0, 205, 122, 130, 119, 179, 240, - 241, 118, 266, 106, 254, 102, 107, 253, 173, 236, - 244, 167, 160, 101, 242, 165, 159, 150, 126, 138, - 197, 157, 198, 139, 170, 169, 171, 0, 0, 0, - 228, 251, 267, 111, 0, 235, 261, 262, 0, 201, - 112, 131, 125, 196, 129, 172, 108, 141, 225, 149, - 156, 204, 265, 186, 210, 115, 250, 226, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 94, 103, 153, - 264, 202, 128, 252, 0, 0, 121, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 97, 104, 110, 116, 120, 124, 127, 133, 137, 140, - 142, 143, 144, 147, 158, 161, 162, 163, 164, 174, - 175, 176, 178, 181, 182, 183, 184, 185, 188, 190, - 191, 192, 193, 194, 195, 203, 206, 212, 213, 214, - 215, 216, 217, 218, 220, 221, 222, 223, 229, 232, - 238, 239, 249, 256, 259, 135, 246, 260, 180, 0, - 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, - 0, 0, 0, 152, 0, 0, 0, 154, 0, 0, - 227, 168, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, - 91, 92, 93, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, - 0, 0, 0, 285, 0, 0, 0, 0, 199, 0, - 231, 136, 151, 109, 148, 95, 105, 0, 134, 177, - 207, 211, 0, 0, 0, 117, 0, 209, 187, 248, - 0, 189, 208, 155, 237, 200, 247, 257, 258, 234, - 255, 263, 224, 98, 233, 245, 114, 219, 0, 0, - 0, 100, 243, 230, 166, 145, 146, 99, 0, 205, - 122, 130, 119, 179, 240, 241, 118, 266, 106, 254, - 102, 107, 253, 173, 236, 244, 167, 160, 101, 242, - 165, 159, 150, 126, 138, 197, 157, 198, 139, 170, - 169, 171, 0, 0, 0, 228, 251, 267, 111, 0, - 235, 261, 262, 0, 201, 112, 131, 125, 196, 129, - 172, 108, 141, 225, 149, 156, 204, 265, 186, 210, - 115, 250, 226, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 94, 103, 153, 264, 202, 128, 252, 0, - 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 97, 104, 110, 116, 120, - 124, 127, 133, 137, 140, 142, 143, 144, 147, 158, - 161, 162, 163, 164, 174, 175, 176, 178, 181, 182, - 183, 184, 185, 188, 190, 191, 192, 193, 194, 195, - 203, 206, 212, 213, 214, 215, 216, 217, 218, 220, - 221, 222, 223, 229, 232, 238, 239, 249, 256, 259, - 135, 246, 260, 180, 0, 0, 0, 0, 0, 0, - 0, 0, 123, 0, 0, 0, 0, 0, 152, 0, - 0, 0, 154, 0, 0, 227, 168, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 91, 92, 93, 0, 1016, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 132, 0, 0, 0, 285, 0, - 0, 0, 0, 199, 0, 231, 136, 151, 109, 148, - 95, 105, 0, 134, 177, 207, 211, 0, 0, 0, - 117, 0, 209, 187, 248, 0, 189, 208, 155, 237, - 200, 247, 257, 258, 234, 255, 263, 224, 98, 233, - 245, 114, 219, 0, 0, 0, 100, 243, 230, 166, - 145, 146, 99, 0, 205, 122, 130, 119, 179, 240, - 241, 118, 266, 106, 254, 102, 107, 253, 173, 236, - 244, 167, 160, 101, 242, 165, 159, 150, 126, 138, - 197, 157, 198, 139, 170, 169, 171, 0, 0, 0, - 228, 251, 267, 111, 0, 235, 261, 262, 0, 201, - 112, 131, 125, 196, 129, 172, 108, 141, 225, 149, - 156, 204, 265, 186, 210, 115, 250, 226, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 94, 103, 153, - 264, 202, 128, 252, 0, 0, 121, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 97, 104, 110, 116, 120, 124, 127, 133, 137, 140, - 142, 143, 144, 147, 158, 161, 162, 163, 164, 174, - 175, 176, 178, 181, 182, 183, 184, 185, 188, 190, - 191, 192, 193, 194, 195, 203, 206, 212, 213, 214, - 215, 216, 217, 218, 220, 221, 222, 223, 229, 232, - 238, 239, 249, 256, 259, 135, 246, 260, 180, 0, - 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, - 0, 0, 0, 152, 0, 0, 0, 154, 0, 0, - 227, 168, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 91, 92, 93, 0, 742, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, - 0, 0, 0, 285, 0, 0, 0, 0, 199, 0, - 231, 136, 151, 109, 148, 95, 105, 0, 134, 177, - 207, 211, 0, 0, 0, 117, 0, 209, 187, 248, - 0, 189, 208, 155, 237, 200, 247, 257, 258, 234, - 255, 263, 224, 98, 233, 245, 114, 219, 0, 0, - 0, 100, 243, 230, 166, 145, 146, 99, 0, 205, - 122, 130, 119, 179, 240, 241, 118, 266, 106, 254, - 102, 107, 253, 173, 236, 244, 167, 160, 101, 242, - 165, 159, 150, 126, 138, 197, 157, 198, 139, 170, - 169, 171, 0, 0, 0, 228, 251, 267, 111, 0, - 235, 261, 262, 0, 201, 112, 131, 125, 196, 129, - 172, 108, 141, 225, 149, 156, 204, 265, 186, 210, - 115, 250, 226, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 94, 103, 153, 264, 202, 128, 252, 0, - 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 97, 104, 110, 116, 120, - 124, 127, 133, 137, 140, 142, 143, 144, 147, 158, - 161, 162, 163, 164, 174, 175, 176, 178, 181, 182, - 183, 184, 185, 188, 190, 191, 192, 193, 194, 195, - 203, 206, 212, 213, 214, 215, 216, 217, 218, 220, - 221, 222, 223, 229, 232, 238, 239, 249, 256, 259, - 135, 246, 260, 180, 0, 0, 0, 0, 0, 0, - 0, 745, 123, 0, 0, 0, 0, 0, 152, 0, - 0, 0, 154, 0, 0, 227, 168, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 91, 92, 93, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 132, 0, 0, 0, 285, 0, - 0, 0, 0, 199, 0, 231, 136, 151, 109, 148, - 95, 105, 0, 134, 177, 207, 211, 0, 0, 0, - 117, 0, 209, 187, 248, 0, 189, 208, 155, 237, - 200, 247, 257, 258, 234, 255, 263, 224, 98, 233, - 245, 114, 219, 0, 0, 0, 100, 243, 230, 166, - 145, 146, 99, 0, 205, 122, 130, 119, 179, 240, - 241, 118, 266, 106, 254, 102, 107, 253, 173, 236, - 244, 167, 160, 101, 242, 165, 159, 150, 126, 138, - 197, 157, 198, 139, 170, 169, 171, 0, 0, 0, - 228, 251, 267, 111, 0, 235, 261, 262, 0, 201, - 112, 131, 125, 196, 129, 172, 108, 141, 225, 149, - 156, 204, 265, 186, 210, 115, 250, 226, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 94, 103, 153, - 264, 202, 128, 252, 0, 0, 121, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 97, 104, 110, 116, 120, 124, 127, 133, 137, 140, - 142, 143, 144, 147, 158, 161, 162, 163, 164, 174, - 175, 176, 178, 181, 182, 183, 184, 185, 188, 190, - 191, 192, 193, 194, 195, 203, 206, 212, 213, 214, - 215, 216, 217, 218, 220, 221, 222, 223, 229, 232, - 238, 239, 249, 256, 259, 135, 246, 260, 180, 0, - 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, - 0, 0, 0, 152, 0, 0, 0, 154, 0, 0, - 227, 168, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 91, 92, 93, 0, 623, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, - 0, 0, 0, 285, 0, 0, 0, 0, 199, 0, - 231, 136, 151, 109, 148, 95, 105, 0, 134, 177, - 207, 211, 0, 0, 0, 117, 0, 209, 187, 248, - 0, 189, 208, 155, 237, 200, 247, 257, 258, 234, - 255, 263, 224, 98, 233, 245, 114, 219, 0, 0, - 0, 100, 243, 230, 166, 145, 146, 99, 0, 205, - 122, 130, 119, 179, 240, 241, 118, 266, 106, 254, - 102, 107, 253, 173, 236, 244, 167, 160, 101, 242, - 165, 159, 150, 126, 138, 197, 157, 198, 139, 170, - 169, 171, 0, 0, 0, 228, 251, 267, 111, 0, - 235, 261, 262, 0, 201, 112, 131, 125, 196, 129, - 172, 108, 141, 225, 149, 156, 204, 265, 186, 210, - 115, 250, 226, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 94, 103, 153, 264, 202, 128, 252, 0, - 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 97, 104, 110, 116, 120, - 124, 127, 133, 137, 140, 142, 143, 144, 147, 158, - 161, 162, 163, 164, 174, 175, 176, 178, 181, 182, - 183, 184, 185, 188, 190, 191, 192, 193, 194, 195, - 203, 206, 212, 213, 214, 215, 216, 217, 218, 220, - 221, 222, 223, 229, 232, 238, 239, 249, 256, 259, - 135, 246, 260, 417, 0, 0, 0, 0, 0, 0, - 180, 0, 0, 0, 0, 0, 0, 0, 0, 123, - 0, 0, 0, 0, 0, 152, 0, 0, 0, 154, - 0, 0, 227, 168, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 91, 92, 93, 0, 0, 0, 0, 0, - 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 132, 0, 0, 0, 285, 0, 0, 0, 0, - 199, 0, 231, 136, 151, 109, 148, 95, 105, 0, - 134, 177, 207, 211, 0, 0, 0, 117, 0, 209, - 187, 248, 0, 189, 208, 155, 237, 200, 247, 257, - 258, 234, 255, 263, 224, 98, 233, 245, 114, 219, - 0, 0, 0, 100, 243, 230, 166, 145, 146, 99, - 0, 205, 122, 130, 119, 179, 240, 241, 118, 266, - 106, 254, 102, 107, 253, 173, 236, 244, 167, 160, - 101, 242, 165, 159, 150, 126, 138, 197, 157, 198, - 139, 170, 169, 171, 0, 0, 0, 228, 251, 267, - 111, 0, 235, 261, 262, 0, 201, 112, 131, 125, - 196, 129, 172, 108, 141, 225, 149, 156, 204, 265, - 186, 210, 115, 250, 226, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 94, 103, 153, 264, 202, 128, - 252, 0, 0, 121, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 97, 104, 110, - 116, 120, 124, 127, 133, 137, 140, 142, 143, 144, - 147, 158, 161, 162, 163, 164, 174, 175, 176, 178, - 181, 182, 183, 184, 185, 188, 190, 191, 192, 193, - 194, 195, 203, 206, 212, 213, 214, 215, 216, 217, - 218, 220, 221, 222, 223, 229, 232, 238, 239, 249, - 256, 259, 135, 246, 260, 180, 0, 0, 0, 0, - 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, - 152, 0, 0, 0, 154, 0, 0, 227, 168, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 91, 92, 93, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 317, 0, 132, 0, 0, 0, - 285, 0, 0, 0, 0, 199, 0, 231, 136, 151, - 109, 148, 95, 105, 0, 134, 177, 207, 211, 0, - 0, 0, 117, 0, 209, 187, 248, 0, 189, 208, - 155, 237, 200, 247, 257, 258, 234, 255, 263, 224, - 98, 233, 245, 114, 219, 0, 0, 0, 100, 243, - 230, 166, 145, 146, 99, 0, 205, 122, 130, 119, - 179, 240, 241, 118, 266, 106, 254, 102, 107, 253, - 173, 236, 244, 167, 160, 101, 242, 165, 159, 150, - 126, 138, 197, 157, 198, 139, 170, 169, 171, 0, - 0, 0, 228, 251, 267, 111, 0, 235, 261, 262, - 0, 201, 112, 131, 125, 196, 129, 172, 108, 141, - 225, 149, 156, 204, 265, 186, 210, 115, 250, 226, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, - 103, 153, 264, 202, 128, 252, 0, 0, 121, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 97, 104, 110, 116, 120, 124, 127, 133, - 137, 140, 142, 143, 144, 147, 158, 161, 162, 163, - 164, 174, 175, 176, 178, 181, 182, 183, 184, 185, - 188, 190, 191, 192, 193, 194, 195, 203, 206, 212, - 213, 214, 215, 216, 217, 218, 220, 221, 222, 223, - 229, 232, 238, 239, 249, 256, 259, 316, 246, 260, - 180, 0, 0, 0, 0, 0, 0, 0, 0, 123, - 0, 0, 0, 0, 0, 152, 0, 0, 0, 154, - 0, 0, 227, 168, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 91, 92, 93, 0, 0, 0, 0, 0, - 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 132, 0, 280, 0, 285, 0, 0, 0, 0, - 199, 0, 231, 136, 151, 109, 148, 95, 105, 0, - 134, 177, 207, 211, 0, 0, 0, 117, 0, 209, - 187, 248, 0, 189, 208, 155, 237, 200, 247, 257, - 258, 234, 255, 263, 224, 98, 233, 245, 114, 219, - 0, 0, 0, 100, 243, 230, 166, 145, 146, 99, - 0, 205, 122, 130, 119, 179, 240, 241, 118, 266, - 106, 254, 102, 107, 253, 173, 236, 244, 167, 160, - 101, 242, 165, 159, 150, 126, 138, 197, 157, 198, - 139, 170, 169, 171, 0, 0, 0, 228, 251, 267, - 111, 0, 235, 261, 262, 0, 201, 112, 131, 125, - 196, 129, 172, 108, 141, 225, 149, 156, 204, 265, - 186, 210, 115, 250, 226, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 94, 103, 153, 264, 202, 128, - 252, 0, 0, 121, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 97, 104, 110, - 116, 120, 124, 127, 133, 137, 140, 142, 143, 144, - 147, 158, 161, 162, 163, 164, 174, 175, 176, 178, - 181, 182, 183, 184, 185, 188, 190, 191, 192, 193, - 194, 195, 203, 206, 212, 213, 214, 215, 216, 217, - 218, 220, 221, 222, 223, 229, 232, 238, 239, 249, - 256, 259, 135, 246, 260, 180, 0, 0, 0, 0, - 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, - 152, 0, 0, 0, 154, 0, 0, 227, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 91, 92, 93, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, - 285, 0, 0, 0, 0, 199, 0, 231, 136, 151, - 109, 148, 95, 105, 0, 134, 177, 207, 211, 0, - 0, 0, 117, 0, 209, 187, 248, 0, 189, 208, - 155, 237, 200, 247, 257, 258, 234, 255, 263, 224, - 98, 233, 245, 114, 219, 0, 0, 0, 100, 243, - 230, 166, 145, 146, 99, 0, 205, 122, 130, 119, - 179, 240, 241, 118, 266, 106, 254, 102, 107, 253, - 173, 236, 244, 167, 160, 101, 242, 165, 159, 150, - 126, 138, 197, 157, 198, 139, 170, 169, 171, 0, - 0, 0, 228, 251, 267, 111, 0, 235, 261, 262, - 0, 201, 112, 131, 125, 196, 129, 172, 108, 141, - 225, 149, 156, 204, 265, 186, 210, 115, 250, 226, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, - 103, 153, 264, 202, 128, 252, 0, 0, 121, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1021, 0, 0, 0, 0, + 545, 533, 0, 0, 490, 548, 463, 480, 556, 481, + 484, 521, 448, 503, 183, 478, 285, 467, 443, 474, + 444, 465, 492, 126, 496, 462, 535, 506, 547, 155, + 0, 468, 554, 157, 512, 0, 230, 171, 0, 0, + 0, 494, 537, 501, 530, 489, 522, 453, 511, 549, + 479, 519, 550, 0, 0, 0, 94, 95, 96, 0, + 1046, 1047, 0, 0, 0, 0, 0, 116, 0, 516, + 544, 476, 518, 520, 558, 442, 513, 962, 446, 449, + 555, 540, 471, 472, 1240, 0, 0, 0, 0, 0, + 285, 493, 502, 527, 487, 0, 0, 0, 0, 0, + 0, 0, 0, 469, 0, 510, 0, 0, 0, 450, + 447, 0, 0, 0, 0, 491, 0, 0, 0, 452, + 0, 470, 528, 0, 440, 135, 532, 539, 488, 288, + 543, 486, 485, 546, 202, 0, 234, 139, 154, 112, + 151, 98, 108, 0, 137, 180, 210, 214, 536, 466, + 475, 120, 473, 212, 190, 251, 509, 192, 211, 158, + 240, 203, 250, 260, 261, 237, 258, 266, 227, 101, + 236, 248, 117, 222, 0, 0, 0, 103, 246, 233, + 169, 148, 149, 102, 0, 208, 125, 133, 122, 182, + 243, 244, 121, 269, 109, 257, 105, 110, 256, 176, + 239, 247, 170, 163, 104, 245, 168, 162, 153, 129, + 141, 200, 160, 201, 142, 173, 172, 174, 0, 445, + 0, 231, 254, 270, 114, 461, 238, 264, 265, 0, + 204, 115, 134, 128, 199, 132, 175, 111, 144, 228, + 152, 159, 207, 268, 189, 213, 118, 253, 229, 457, + 460, 455, 456, 504, 505, 551, 552, 553, 529, 451, + 0, 458, 459, 0, 534, 541, 542, 508, 97, 106, + 156, 267, 205, 131, 255, 441, 454, 124, 464, 0, + 0, 477, 482, 483, 495, 497, 498, 499, 500, 507, + 514, 515, 517, 523, 524, 525, 526, 531, 538, 557, + 99, 100, 107, 113, 119, 123, 127, 130, 136, 140, + 143, 145, 146, 147, 150, 161, 164, 165, 166, 167, + 177, 178, 179, 181, 184, 185, 186, 187, 188, 191, + 193, 194, 195, 196, 197, 198, 206, 209, 215, 216, + 217, 218, 219, 220, 221, 223, 224, 225, 226, 232, + 235, 241, 242, 252, 259, 262, 138, 249, 263, 545, + 533, 0, 0, 490, 548, 463, 480, 556, 481, 484, + 521, 448, 503, 183, 478, 0, 467, 443, 474, 444, + 465, 492, 126, 496, 462, 535, 506, 547, 155, 0, + 468, 554, 157, 512, 0, 230, 171, 0, 0, 0, + 494, 537, 501, 530, 489, 522, 453, 511, 549, 479, + 519, 550, 0, 0, 0, 94, 95, 96, 0, 1046, + 1047, 0, 0, 0, 0, 0, 116, 0, 516, 544, + 476, 518, 520, 558, 442, 513, 0, 446, 449, 555, + 540, 471, 472, 0, 0, 0, 0, 0, 0, 0, + 493, 502, 527, 487, 0, 0, 0, 0, 0, 0, + 0, 0, 469, 0, 510, 0, 0, 0, 450, 447, + 0, 0, 0, 0, 491, 0, 0, 0, 452, 0, + 470, 528, 0, 440, 135, 532, 539, 488, 288, 543, + 486, 485, 546, 202, 0, 234, 139, 154, 112, 151, + 98, 108, 0, 137, 180, 210, 214, 536, 466, 475, + 120, 473, 212, 190, 251, 509, 192, 211, 158, 240, + 203, 250, 260, 261, 237, 258, 266, 227, 101, 236, + 248, 117, 222, 0, 0, 0, 103, 246, 233, 169, + 148, 149, 102, 0, 208, 125, 133, 122, 182, 243, + 244, 121, 269, 109, 257, 105, 110, 256, 176, 239, + 247, 170, 163, 104, 245, 168, 162, 153, 129, 141, + 200, 160, 201, 142, 173, 172, 174, 0, 445, 0, + 231, 254, 270, 114, 461, 238, 264, 265, 0, 204, + 115, 134, 128, 199, 132, 175, 111, 144, 228, 152, + 159, 207, 268, 189, 213, 118, 253, 229, 457, 460, + 455, 456, 504, 505, 551, 552, 553, 529, 451, 0, + 458, 459, 0, 534, 541, 542, 508, 97, 106, 156, + 267, 205, 131, 255, 441, 454, 124, 464, 0, 0, + 477, 482, 483, 495, 497, 498, 499, 500, 507, 514, + 515, 517, 523, 524, 525, 526, 531, 538, 557, 99, + 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, + 145, 146, 147, 150, 161, 164, 165, 166, 167, 177, + 178, 179, 181, 184, 185, 186, 187, 188, 191, 193, + 194, 195, 196, 197, 198, 206, 209, 215, 216, 217, + 218, 219, 220, 221, 223, 224, 225, 226, 232, 235, + 241, 242, 252, 259, 262, 138, 249, 263, 545, 533, + 0, 0, 490, 548, 463, 480, 556, 481, 484, 521, + 448, 503, 183, 478, 0, 467, 443, 474, 444, 465, + 492, 126, 496, 462, 535, 506, 547, 155, 0, 468, + 554, 157, 512, 0, 230, 171, 0, 0, 0, 494, + 537, 501, 530, 489, 522, 453, 511, 549, 479, 519, + 550, 59, 0, 0, 94, 95, 96, 0, 0, 0, + 0, 0, 0, 0, 0, 116, 0, 516, 544, 476, + 518, 520, 558, 442, 513, 0, 446, 449, 555, 540, + 471, 472, 0, 0, 0, 0, 0, 0, 0, 493, + 502, 527, 487, 0, 0, 0, 0, 0, 0, 0, + 0, 469, 0, 510, 0, 0, 0, 450, 447, 0, + 0, 0, 0, 491, 0, 0, 0, 452, 0, 470, + 528, 0, 440, 135, 532, 539, 488, 288, 543, 486, + 485, 546, 202, 0, 234, 139, 154, 112, 151, 98, + 108, 0, 137, 180, 210, 214, 536, 466, 475, 120, + 473, 212, 190, 251, 509, 192, 211, 158, 240, 203, + 250, 260, 261, 237, 258, 266, 227, 101, 236, 248, + 117, 222, 0, 0, 0, 103, 246, 233, 169, 148, + 149, 102, 0, 208, 125, 133, 122, 182, 243, 244, + 121, 269, 109, 257, 105, 110, 256, 176, 239, 247, + 170, 163, 104, 245, 168, 162, 153, 129, 141, 200, + 160, 201, 142, 173, 172, 174, 0, 445, 0, 231, + 254, 270, 114, 461, 238, 264, 265, 0, 204, 115, + 134, 128, 199, 132, 175, 111, 144, 228, 152, 159, + 207, 268, 189, 213, 118, 253, 229, 457, 460, 455, + 456, 504, 505, 551, 552, 553, 529, 451, 0, 458, + 459, 0, 534, 541, 542, 508, 97, 106, 156, 267, + 205, 131, 255, 441, 454, 124, 464, 0, 0, 477, + 482, 483, 495, 497, 498, 499, 500, 507, 514, 515, + 517, 523, 524, 525, 526, 531, 538, 557, 99, 100, + 107, 113, 119, 123, 127, 130, 136, 140, 143, 145, + 146, 147, 150, 161, 164, 165, 166, 167, 177, 178, + 179, 181, 184, 185, 186, 187, 188, 191, 193, 194, + 195, 196, 197, 198, 206, 209, 215, 216, 217, 218, + 219, 220, 221, 223, 224, 225, 226, 232, 235, 241, + 242, 252, 259, 262, 138, 249, 263, 545, 533, 0, + 0, 490, 548, 463, 480, 556, 481, 484, 521, 448, + 503, 183, 478, 0, 467, 443, 474, 444, 465, 492, + 126, 496, 462, 535, 506, 547, 155, 0, 468, 554, + 157, 512, 0, 230, 171, 0, 0, 0, 494, 537, + 501, 530, 489, 522, 453, 511, 549, 479, 519, 550, + 0, 0, 0, 94, 95, 96, 0, 0, 0, 0, + 0, 0, 0, 0, 116, 0, 516, 544, 476, 518, + 520, 558, 442, 513, 0, 446, 449, 555, 540, 471, + 472, 0, 0, 0, 0, 0, 0, 0, 493, 502, + 527, 487, 0, 0, 0, 0, 0, 0, 1344, 0, + 469, 0, 510, 0, 0, 0, 450, 447, 0, 0, + 0, 0, 491, 0, 0, 0, 452, 0, 470, 528, + 0, 440, 135, 532, 539, 488, 288, 543, 486, 485, + 546, 202, 0, 234, 139, 154, 112, 151, 98, 108, + 0, 137, 180, 210, 214, 536, 466, 475, 120, 473, + 212, 190, 251, 509, 192, 211, 158, 240, 203, 250, + 260, 261, 237, 258, 266, 227, 101, 236, 248, 117, + 222, 0, 0, 0, 103, 246, 233, 169, 148, 149, + 102, 0, 208, 125, 133, 122, 182, 243, 244, 121, + 269, 109, 257, 105, 110, 256, 176, 239, 247, 170, + 163, 104, 245, 168, 162, 153, 129, 141, 200, 160, + 201, 142, 173, 172, 174, 0, 445, 0, 231, 254, + 270, 114, 461, 238, 264, 265, 0, 204, 115, 134, + 128, 199, 132, 175, 111, 144, 228, 152, 159, 207, + 268, 189, 213, 118, 253, 229, 457, 460, 455, 456, + 504, 505, 551, 552, 553, 529, 451, 0, 458, 459, + 0, 534, 541, 542, 508, 97, 106, 156, 267, 205, + 131, 255, 441, 454, 124, 464, 0, 0, 477, 482, + 483, 495, 497, 498, 499, 500, 507, 514, 515, 517, + 523, 524, 525, 526, 531, 538, 557, 99, 100, 107, + 113, 119, 123, 127, 130, 136, 140, 143, 145, 146, + 147, 150, 161, 164, 165, 166, 167, 177, 178, 179, + 181, 184, 185, 186, 187, 188, 191, 193, 194, 195, + 196, 197, 198, 206, 209, 215, 216, 217, 218, 219, + 220, 221, 223, 224, 225, 226, 232, 235, 241, 242, + 252, 259, 262, 138, 249, 263, 545, 533, 0, 0, + 490, 548, 463, 480, 556, 481, 484, 521, 448, 503, + 183, 478, 0, 467, 443, 474, 444, 465, 492, 126, + 496, 462, 535, 506, 547, 155, 0, 468, 554, 157, + 512, 0, 230, 171, 0, 0, 0, 494, 537, 501, + 530, 489, 522, 453, 511, 549, 479, 519, 550, 0, + 0, 0, 94, 95, 96, 0, 0, 0, 0, 0, + 0, 0, 0, 116, 0, 516, 544, 476, 518, 520, + 558, 442, 513, 0, 446, 449, 555, 540, 471, 472, + 0, 0, 0, 0, 0, 0, 0, 493, 502, 527, + 487, 0, 0, 0, 0, 0, 0, 1030, 0, 469, + 0, 510, 0, 0, 0, 450, 447, 0, 0, 0, + 0, 491, 0, 0, 0, 452, 0, 470, 528, 0, + 440, 135, 532, 539, 488, 288, 543, 486, 485, 546, + 202, 0, 234, 139, 154, 112, 151, 98, 108, 0, + 137, 180, 210, 214, 536, 466, 475, 120, 473, 212, + 190, 251, 509, 192, 211, 158, 240, 203, 250, 260, + 261, 237, 258, 266, 227, 101, 236, 248, 117, 222, + 0, 0, 0, 103, 246, 233, 169, 148, 149, 102, + 0, 208, 125, 133, 122, 182, 243, 244, 121, 269, + 109, 257, 105, 110, 256, 176, 239, 247, 170, 163, + 104, 245, 168, 162, 153, 129, 141, 200, 160, 201, + 142, 173, 172, 174, 0, 445, 0, 231, 254, 270, + 114, 461, 238, 264, 265, 0, 204, 115, 134, 128, + 199, 132, 175, 111, 144, 228, 152, 159, 207, 268, + 189, 213, 118, 253, 229, 457, 460, 455, 456, 504, + 505, 551, 552, 553, 529, 451, 0, 458, 459, 0, + 534, 541, 542, 508, 97, 106, 156, 267, 205, 131, + 255, 441, 454, 124, 464, 0, 0, 477, 482, 483, + 495, 497, 498, 499, 500, 507, 514, 515, 517, 523, + 524, 525, 526, 531, 538, 557, 99, 100, 107, 113, + 119, 123, 127, 130, 136, 140, 143, 145, 146, 147, + 150, 161, 164, 165, 166, 167, 177, 178, 179, 181, + 184, 185, 186, 187, 188, 191, 193, 194, 195, 196, + 197, 198, 206, 209, 215, 216, 217, 218, 219, 220, + 221, 223, 224, 225, 226, 232, 235, 241, 242, 252, + 259, 262, 138, 249, 263, 545, 533, 0, 0, 490, + 548, 463, 480, 556, 481, 484, 521, 448, 503, 183, + 478, 0, 467, 443, 474, 444, 465, 492, 126, 496, + 462, 535, 506, 547, 155, 0, 468, 554, 157, 512, + 0, 230, 171, 0, 0, 0, 494, 537, 501, 530, + 489, 522, 453, 511, 549, 479, 519, 550, 0, 0, + 0, 94, 95, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 116, 0, 516, 544, 476, 518, 520, 558, + 442, 513, 0, 446, 449, 555, 540, 471, 472, 0, + 0, 0, 0, 0, 0, 0, 493, 502, 527, 487, + 0, 0, 0, 0, 0, 0, 993, 0, 469, 0, + 510, 0, 0, 0, 450, 447, 0, 0, 0, 0, + 491, 0, 0, 0, 452, 0, 470, 528, 0, 440, + 135, 532, 539, 488, 288, 543, 486, 485, 546, 202, + 0, 234, 139, 154, 112, 151, 98, 108, 0, 137, + 180, 210, 214, 536, 466, 475, 120, 473, 212, 190, + 251, 509, 192, 211, 158, 240, 203, 250, 260, 261, + 237, 258, 266, 227, 101, 236, 248, 117, 222, 0, + 0, 0, 103, 246, 233, 169, 148, 149, 102, 0, + 208, 125, 133, 122, 182, 243, 244, 121, 269, 109, + 257, 105, 110, 256, 176, 239, 247, 170, 163, 104, + 245, 168, 162, 153, 129, 141, 200, 160, 201, 142, + 173, 172, 174, 0, 445, 0, 231, 254, 270, 114, + 461, 238, 264, 265, 0, 204, 115, 134, 128, 199, + 132, 175, 111, 144, 228, 152, 159, 207, 268, 189, + 213, 118, 253, 229, 457, 460, 455, 456, 504, 505, + 551, 552, 553, 529, 451, 0, 458, 459, 0, 534, + 541, 542, 508, 97, 106, 156, 267, 205, 131, 255, + 441, 454, 124, 464, 0, 0, 477, 482, 483, 495, + 497, 498, 499, 500, 507, 514, 515, 517, 523, 524, + 525, 526, 531, 538, 557, 99, 100, 107, 113, 119, + 123, 127, 130, 136, 140, 143, 145, 146, 147, 150, + 161, 164, 165, 166, 167, 177, 178, 179, 181, 184, + 185, 186, 187, 188, 191, 193, 194, 195, 196, 197, + 198, 206, 209, 215, 216, 217, 218, 219, 220, 221, + 223, 224, 225, 226, 232, 235, 241, 242, 252, 259, + 262, 138, 249, 263, 545, 533, 0, 0, 490, 548, + 463, 480, 556, 481, 484, 521, 448, 503, 183, 478, + 0, 467, 443, 474, 444, 465, 492, 126, 496, 462, + 535, 506, 547, 155, 0, 468, 554, 157, 512, 0, + 230, 171, 0, 0, 0, 494, 537, 501, 530, 489, + 522, 453, 511, 549, 479, 519, 550, 0, 0, 0, + 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 116, 0, 516, 544, 476, 518, 520, 558, 442, + 513, 0, 446, 449, 555, 540, 471, 472, 0, 0, + 0, 0, 0, 0, 0, 493, 502, 527, 487, 0, + 0, 0, 0, 0, 0, 0, 0, 469, 0, 510, + 0, 0, 0, 450, 447, 0, 0, 0, 0, 491, + 0, 0, 0, 452, 0, 470, 528, 0, 440, 135, + 532, 539, 488, 288, 543, 486, 485, 546, 202, 0, + 234, 139, 154, 112, 151, 98, 108, 0, 137, 180, + 210, 214, 536, 466, 475, 120, 473, 212, 190, 251, + 509, 192, 211, 158, 240, 203, 250, 260, 261, 237, + 258, 266, 227, 101, 236, 248, 117, 222, 0, 0, + 0, 103, 246, 233, 169, 148, 149, 102, 0, 208, + 125, 133, 122, 182, 243, 244, 121, 269, 109, 257, + 105, 110, 256, 176, 239, 247, 170, 163, 104, 245, + 168, 162, 153, 129, 141, 200, 160, 201, 142, 173, + 172, 174, 0, 445, 0, 231, 254, 270, 114, 461, + 238, 264, 265, 0, 204, 115, 134, 128, 199, 132, + 175, 111, 144, 228, 152, 159, 207, 268, 189, 213, + 118, 253, 229, 457, 460, 455, 456, 504, 505, 551, + 552, 553, 529, 451, 0, 458, 459, 0, 534, 541, + 542, 508, 97, 106, 156, 267, 205, 131, 255, 441, + 454, 124, 464, 0, 0, 477, 482, 483, 495, 497, + 498, 499, 500, 507, 514, 515, 517, 523, 524, 525, + 526, 531, 538, 557, 99, 100, 107, 113, 119, 123, + 127, 130, 136, 140, 143, 145, 146, 147, 150, 161, + 164, 165, 166, 167, 177, 178, 179, 181, 184, 185, + 186, 187, 188, 191, 193, 194, 195, 196, 197, 198, + 206, 209, 215, 216, 217, 218, 219, 220, 221, 223, + 224, 225, 226, 232, 235, 241, 242, 252, 259, 262, + 138, 249, 263, 545, 533, 0, 0, 490, 548, 463, + 480, 556, 481, 484, 521, 448, 503, 183, 478, 0, + 467, 443, 474, 444, 465, 492, 126, 496, 462, 535, + 506, 547, 155, 0, 468, 554, 157, 512, 0, 230, + 171, 0, 0, 0, 494, 537, 501, 530, 489, 522, + 453, 511, 549, 479, 519, 550, 0, 0, 0, 94, + 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, + 116, 0, 516, 544, 476, 518, 520, 558, 442, 513, + 0, 446, 449, 555, 540, 471, 472, 0, 0, 0, + 0, 0, 0, 0, 493, 502, 527, 487, 0, 0, + 0, 0, 0, 0, 0, 0, 469, 0, 510, 0, + 0, 0, 450, 447, 0, 0, 0, 0, 491, 0, + 0, 0, 452, 0, 470, 528, 0, 440, 135, 532, + 539, 488, 288, 543, 486, 485, 546, 202, 0, 234, + 139, 154, 112, 151, 98, 108, 0, 137, 180, 210, + 214, 536, 466, 475, 120, 473, 212, 190, 251, 509, + 192, 211, 158, 240, 203, 250, 260, 261, 237, 258, + 266, 227, 101, 236, 248, 117, 222, 0, 0, 0, + 103, 246, 233, 169, 148, 149, 102, 0, 208, 125, + 133, 122, 182, 243, 244, 121, 269, 109, 257, 105, + 438, 256, 176, 239, 247, 170, 163, 104, 245, 168, + 162, 153, 129, 141, 200, 160, 201, 142, 173, 172, + 174, 0, 445, 0, 231, 254, 270, 114, 461, 238, + 264, 265, 0, 204, 115, 134, 128, 199, 132, 439, + 437, 432, 431, 152, 159, 207, 268, 189, 213, 118, + 253, 229, 457, 460, 455, 456, 504, 505, 551, 552, + 553, 529, 451, 0, 458, 459, 0, 534, 541, 542, + 508, 97, 106, 156, 267, 205, 131, 255, 441, 454, + 124, 464, 0, 0, 477, 482, 483, 495, 497, 498, + 499, 500, 507, 514, 515, 517, 523, 524, 525, 526, + 531, 538, 557, 99, 100, 107, 113, 119, 123, 127, + 130, 136, 140, 143, 145, 146, 147, 150, 161, 164, + 165, 166, 167, 177, 178, 179, 181, 184, 185, 186, + 187, 188, 191, 193, 194, 195, 196, 197, 198, 206, + 209, 215, 216, 217, 218, 219, 220, 221, 223, 224, + 225, 226, 232, 235, 241, 242, 252, 259, 262, 138, + 249, 263, 545, 533, 0, 0, 490, 548, 463, 480, + 556, 481, 484, 521, 448, 503, 183, 478, 0, 467, + 443, 474, 444, 465, 492, 126, 496, 462, 535, 506, + 547, 155, 0, 468, 554, 157, 512, 0, 230, 171, + 0, 0, 0, 494, 537, 501, 530, 489, 522, 453, + 511, 549, 479, 519, 550, 0, 0, 0, 94, 95, + 96, 0, 0, 0, 0, 0, 0, 0, 0, 116, + 0, 516, 544, 476, 518, 520, 558, 442, 513, 0, + 446, 449, 555, 540, 471, 472, 0, 0, 0, 0, + 0, 0, 0, 493, 502, 527, 487, 0, 0, 0, + 0, 0, 0, 0, 0, 469, 0, 510, 0, 0, + 0, 450, 447, 0, 0, 0, 0, 491, 0, 0, + 0, 452, 0, 470, 528, 0, 440, 135, 532, 539, + 488, 288, 543, 486, 485, 546, 202, 0, 234, 139, + 154, 112, 151, 98, 108, 0, 137, 180, 210, 214, + 536, 466, 475, 120, 473, 212, 190, 251, 509, 192, + 211, 158, 240, 203, 250, 260, 261, 237, 258, 266, + 227, 101, 236, 770, 117, 222, 0, 0, 0, 103, + 246, 233, 169, 148, 149, 102, 0, 208, 125, 133, + 122, 182, 243, 244, 121, 269, 109, 257, 105, 438, + 256, 176, 239, 247, 170, 163, 104, 245, 168, 162, + 153, 129, 141, 200, 160, 201, 142, 173, 172, 174, + 0, 445, 0, 231, 254, 270, 114, 461, 238, 264, + 265, 0, 204, 115, 134, 128, 199, 132, 439, 437, + 432, 431, 152, 159, 207, 268, 189, 213, 118, 253, + 229, 457, 460, 455, 456, 504, 505, 551, 552, 553, + 529, 451, 0, 458, 459, 0, 534, 541, 542, 508, + 97, 106, 156, 267, 205, 131, 255, 441, 454, 124, + 464, 0, 0, 477, 482, 483, 495, 497, 498, 499, + 500, 507, 514, 515, 517, 523, 524, 525, 526, 531, + 538, 557, 99, 100, 107, 113, 119, 123, 127, 130, + 136, 140, 143, 145, 146, 147, 150, 161, 164, 165, + 166, 167, 177, 178, 179, 181, 184, 185, 186, 187, + 188, 191, 193, 194, 195, 196, 197, 198, 206, 209, + 215, 216, 217, 218, 219, 220, 221, 223, 224, 225, + 226, 232, 235, 241, 242, 252, 259, 262, 138, 249, + 263, 545, 533, 0, 0, 490, 548, 463, 480, 556, + 481, 484, 521, 448, 503, 183, 478, 0, 467, 443, + 474, 444, 465, 492, 126, 496, 462, 535, 506, 547, + 155, 0, 468, 554, 157, 512, 0, 230, 171, 0, + 0, 0, 494, 537, 501, 530, 489, 522, 453, 511, + 549, 479, 519, 550, 0, 0, 0, 94, 95, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, + 516, 544, 476, 518, 520, 558, 442, 513, 0, 446, + 449, 555, 540, 471, 472, 0, 0, 0, 0, 0, + 0, 0, 493, 502, 527, 487, 0, 0, 0, 0, + 0, 0, 0, 0, 469, 0, 510, 0, 0, 0, + 450, 447, 0, 0, 0, 0, 491, 0, 0, 0, + 452, 0, 470, 528, 0, 440, 135, 532, 539, 488, + 288, 543, 486, 485, 546, 202, 0, 234, 139, 154, + 112, 151, 98, 108, 0, 137, 180, 210, 214, 536, + 466, 475, 120, 473, 212, 190, 251, 509, 192, 211, + 158, 240, 203, 250, 260, 261, 237, 258, 266, 227, + 101, 236, 429, 117, 222, 0, 0, 0, 103, 246, + 233, 169, 148, 149, 102, 0, 208, 125, 133, 122, + 182, 243, 244, 121, 269, 109, 257, 105, 438, 256, + 176, 239, 247, 170, 163, 104, 245, 168, 162, 153, + 129, 141, 200, 160, 201, 142, 173, 172, 174, 0, + 445, 0, 231, 254, 270, 114, 461, 238, 264, 265, + 0, 204, 115, 134, 128, 199, 132, 439, 437, 432, + 431, 152, 159, 207, 268, 189, 213, 118, 253, 229, + 457, 460, 455, 456, 504, 505, 551, 552, 553, 529, + 451, 0, 458, 459, 0, 534, 541, 542, 508, 97, + 106, 156, 267, 205, 131, 255, 441, 454, 124, 464, + 0, 0, 477, 482, 483, 495, 497, 498, 499, 500, + 507, 514, 515, 517, 523, 524, 525, 526, 531, 538, + 557, 99, 100, 107, 113, 119, 123, 127, 130, 136, + 140, 143, 145, 146, 147, 150, 161, 164, 165, 166, + 167, 177, 178, 179, 181, 184, 185, 186, 187, 188, + 191, 193, 194, 195, 196, 197, 198, 206, 209, 215, + 216, 217, 218, 219, 220, 221, 223, 224, 225, 226, + 232, 235, 241, 242, 252, 259, 262, 138, 249, 263, + 183, 0, 0, 933, 0, 332, 0, 0, 0, 126, + 0, 331, 0, 0, 0, 155, 0, 934, 375, 157, + 0, 0, 230, 171, 0, 0, 0, 0, 0, 366, + 367, 0, 0, 0, 0, 0, 0, 0, 0, 59, + 0, 0, 94, 95, 96, 353, 352, 355, 356, 357, + 358, 0, 0, 116, 354, 359, 360, 361, 0, 0, + 0, 0, 329, 346, 0, 374, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 343, 344, 415, 0, 0, + 0, 389, 0, 345, 0, 0, 338, 339, 341, 340, + 342, 347, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 135, 388, 0, 0, 288, 0, 0, 386, 0, + 202, 0, 234, 139, 154, 112, 151, 98, 108, 0, + 137, 180, 210, 214, 0, 0, 0, 120, 0, 212, + 190, 251, 0, 192, 211, 158, 240, 203, 250, 260, + 261, 237, 258, 266, 227, 101, 236, 248, 117, 222, + 0, 0, 0, 103, 246, 233, 169, 148, 149, 102, + 0, 208, 125, 133, 122, 182, 243, 244, 121, 269, + 109, 257, 105, 110, 256, 176, 239, 247, 170, 163, + 104, 245, 168, 162, 153, 129, 141, 200, 160, 201, + 142, 173, 172, 174, 0, 0, 0, 231, 254, 270, + 114, 0, 238, 264, 265, 0, 204, 115, 134, 128, + 199, 132, 175, 111, 144, 228, 152, 159, 207, 268, + 189, 213, 118, 253, 229, 376, 387, 382, 383, 380, + 381, 379, 378, 377, 390, 368, 369, 370, 371, 373, + 0, 384, 385, 372, 97, 106, 156, 267, 205, 131, + 255, 0, 0, 124, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 99, 100, 107, 113, + 119, 123, 127, 130, 136, 140, 143, 145, 146, 147, + 150, 161, 164, 165, 166, 167, 177, 178, 179, 181, + 184, 185, 186, 187, 188, 191, 193, 194, 195, 196, + 197, 198, 206, 209, 215, 216, 217, 218, 219, 220, + 221, 223, 224, 225, 226, 232, 235, 241, 242, 252, + 259, 262, 138, 249, 263, 183, 0, 0, 0, 0, + 332, 0, 0, 0, 126, 0, 331, 0, 0, 0, + 155, 0, 0, 375, 157, 0, 0, 230, 171, 0, + 0, 0, 0, 0, 366, 367, 0, 0, 0, 0, + 0, 0, 1037, 0, 59, 0, 0, 94, 95, 96, + 353, 352, 355, 356, 357, 358, 0, 0, 116, 354, + 359, 360, 361, 1038, 0, 0, 0, 329, 346, 0, + 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 343, 344, 0, 0, 0, 0, 389, 0, 345, 0, + 0, 338, 339, 341, 340, 342, 347, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 135, 388, 0, 0, + 288, 0, 0, 386, 0, 202, 0, 234, 139, 154, + 112, 151, 98, 108, 0, 137, 180, 210, 214, 0, + 0, 0, 120, 0, 212, 190, 251, 0, 192, 211, + 158, 240, 203, 250, 260, 261, 237, 258, 266, 227, + 101, 236, 248, 117, 222, 0, 0, 0, 103, 246, + 233, 169, 148, 149, 102, 0, 208, 125, 133, 122, + 182, 243, 244, 121, 269, 109, 257, 105, 110, 256, + 176, 239, 247, 170, 163, 104, 245, 168, 162, 153, + 129, 141, 200, 160, 201, 142, 173, 172, 174, 0, + 0, 0, 231, 254, 270, 114, 0, 238, 264, 265, + 0, 204, 115, 134, 128, 199, 132, 175, 111, 144, + 228, 152, 159, 207, 268, 189, 213, 118, 253, 229, + 376, 387, 382, 383, 380, 381, 379, 378, 377, 390, + 368, 369, 370, 371, 373, 0, 384, 385, 372, 97, + 106, 156, 267, 205, 131, 255, 0, 0, 124, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 99, 100, 107, 113, 119, 123, 127, 130, 136, + 140, 143, 145, 146, 147, 150, 161, 164, 165, 166, + 167, 177, 178, 179, 181, 184, 185, 186, 187, 188, + 191, 193, 194, 195, 196, 197, 198, 206, 209, 215, + 216, 217, 218, 219, 220, 221, 223, 224, 225, 226, + 232, 235, 241, 242, 252, 259, 262, 138, 249, 263, + 183, 0, 0, 0, 0, 332, 0, 0, 0, 126, + 0, 331, 0, 0, 0, 155, 0, 0, 375, 157, + 0, 0, 230, 171, 0, 0, 0, 0, 0, 366, + 367, 0, 0, 0, 0, 0, 0, 0, 0, 59, + 0, 403, 94, 95, 96, 353, 352, 355, 356, 357, + 358, 0, 0, 116, 354, 359, 360, 361, 0, 0, + 0, 0, 329, 346, 0, 374, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 343, 344, 0, 0, 0, + 0, 389, 0, 345, 0, 0, 338, 339, 341, 340, + 342, 347, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 135, 388, 0, 0, 288, 0, 0, 386, 0, + 202, 0, 234, 139, 154, 112, 151, 98, 108, 0, + 137, 180, 210, 214, 0, 0, 0, 120, 0, 212, + 190, 251, 0, 192, 211, 158, 240, 203, 250, 260, + 261, 237, 258, 266, 227, 101, 236, 248, 117, 222, + 0, 0, 0, 103, 246, 233, 169, 148, 149, 102, + 0, 208, 125, 133, 122, 182, 243, 244, 121, 269, + 109, 257, 105, 110, 256, 176, 239, 247, 170, 163, + 104, 245, 168, 162, 153, 129, 141, 200, 160, 201, + 142, 173, 172, 174, 0, 0, 0, 231, 254, 270, + 114, 0, 238, 264, 265, 0, 204, 115, 134, 128, + 199, 132, 175, 111, 144, 228, 152, 159, 207, 268, + 189, 213, 118, 253, 229, 376, 387, 382, 383, 380, + 381, 379, 378, 377, 390, 368, 369, 370, 371, 373, + 0, 384, 385, 372, 97, 106, 156, 267, 205, 131, + 255, 0, 0, 124, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 99, 100, 107, 113, + 119, 123, 127, 130, 136, 140, 143, 145, 146, 147, + 150, 161, 164, 165, 166, 167, 177, 178, 179, 181, + 184, 185, 186, 187, 188, 191, 193, 194, 195, 196, + 197, 198, 206, 209, 215, 216, 217, 218, 219, 220, + 221, 223, 224, 225, 226, 232, 235, 241, 242, 252, + 259, 262, 138, 249, 263, 183, 0, 0, 0, 0, + 332, 0, 0, 0, 126, 0, 331, 0, 0, 0, + 155, 0, 0, 375, 157, 0, 0, 230, 171, 0, + 0, 0, 0, 0, 366, 367, 0, 0, 0, 0, + 0, 0, 0, 0, 59, 0, 0, 94, 95, 96, + 353, 352, 355, 356, 357, 358, 0, 0, 116, 354, + 359, 360, 361, 0, 0, 0, 0, 329, 346, 0, + 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 343, 344, 415, 0, 0, 0, 389, 0, 345, 0, + 0, 338, 339, 341, 340, 342, 347, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 135, 388, 0, 0, + 288, 0, 0, 386, 0, 202, 0, 234, 139, 154, + 112, 151, 98, 108, 0, 137, 180, 210, 214, 0, + 0, 0, 120, 0, 212, 190, 251, 0, 192, 211, + 158, 240, 203, 250, 260, 261, 237, 258, 266, 227, + 101, 236, 248, 117, 222, 0, 0, 0, 103, 246, + 233, 169, 148, 149, 102, 0, 208, 125, 133, 122, + 182, 243, 244, 121, 269, 109, 257, 105, 110, 256, + 176, 239, 247, 170, 163, 104, 245, 168, 162, 153, + 129, 141, 200, 160, 201, 142, 173, 172, 174, 0, + 0, 0, 231, 254, 270, 114, 0, 238, 264, 265, + 0, 204, 115, 134, 128, 199, 132, 175, 111, 144, + 228, 152, 159, 207, 268, 189, 213, 118, 253, 229, + 376, 387, 382, 383, 380, 381, 379, 378, 377, 390, + 368, 369, 370, 371, 373, 0, 384, 385, 372, 97, + 106, 156, 267, 205, 131, 255, 0, 0, 124, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 99, 100, 107, 113, 119, 123, 127, 130, 136, + 140, 143, 145, 146, 147, 150, 161, 164, 165, 166, + 167, 177, 178, 179, 181, 184, 185, 186, 187, 188, + 191, 193, 194, 195, 196, 197, 198, 206, 209, 215, + 216, 217, 218, 219, 220, 221, 223, 224, 225, 226, + 232, 235, 241, 242, 252, 259, 262, 138, 249, 263, + 183, 0, 0, 0, 0, 332, 0, 0, 0, 126, + 0, 331, 0, 0, 0, 155, 0, 0, 375, 157, + 0, 0, 230, 171, 0, 0, 0, 0, 0, 366, + 367, 0, 0, 0, 0, 0, 0, 0, 0, 59, + 0, 0, 94, 95, 96, 353, 951, 355, 356, 357, + 358, 0, 0, 116, 354, 359, 360, 361, 0, 0, + 0, 0, 329, 346, 0, 374, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 343, 344, 415, 0, 0, + 0, 389, 0, 345, 0, 0, 338, 339, 341, 340, + 342, 347, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 135, 388, 0, 0, 288, 0, 0, 386, 0, + 202, 0, 234, 139, 154, 112, 151, 98, 108, 0, + 137, 180, 210, 214, 0, 0, 0, 120, 0, 212, + 190, 251, 0, 192, 211, 158, 240, 203, 250, 260, + 261, 237, 258, 266, 227, 101, 236, 248, 117, 222, + 0, 0, 0, 103, 246, 233, 169, 148, 149, 102, + 0, 208, 125, 133, 122, 182, 243, 244, 121, 269, + 109, 257, 105, 110, 256, 176, 239, 247, 170, 163, + 104, 245, 168, 162, 153, 129, 141, 200, 160, 201, + 142, 173, 172, 174, 0, 0, 0, 231, 254, 270, + 114, 0, 238, 264, 265, 0, 204, 115, 134, 128, + 199, 132, 175, 111, 144, 228, 152, 159, 207, 268, + 189, 213, 118, 253, 229, 376, 387, 382, 383, 380, + 381, 379, 378, 377, 390, 368, 369, 370, 371, 373, + 0, 384, 385, 372, 97, 106, 156, 267, 205, 131, + 255, 0, 0, 124, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 99, 100, 107, 113, + 119, 123, 127, 130, 136, 140, 143, 145, 146, 147, + 150, 161, 164, 165, 166, 167, 177, 178, 179, 181, + 184, 185, 186, 187, 188, 191, 193, 194, 195, 196, + 197, 198, 206, 209, 215, 216, 217, 218, 219, 220, + 221, 223, 224, 225, 226, 232, 235, 241, 242, 252, + 259, 262, 138, 249, 263, 183, 0, 0, 0, 0, + 332, 0, 0, 0, 126, 0, 331, 0, 0, 0, + 155, 0, 0, 375, 157, 0, 0, 230, 171, 0, + 0, 0, 0, 0, 366, 367, 0, 0, 0, 0, + 0, 0, 0, 0, 59, 0, 0, 94, 95, 96, + 353, 948, 355, 356, 357, 358, 0, 0, 116, 354, + 359, 360, 361, 0, 0, 0, 0, 329, 346, 0, + 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 343, 344, 415, 0, 0, 0, 389, 0, 345, 0, + 0, 338, 339, 341, 340, 342, 347, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 135, 388, 0, 0, + 288, 0, 0, 386, 0, 202, 0, 234, 139, 154, + 112, 151, 98, 108, 0, 137, 180, 210, 214, 0, + 0, 0, 120, 0, 212, 190, 251, 0, 192, 211, + 158, 240, 203, 250, 260, 261, 237, 258, 266, 227, + 101, 236, 248, 117, 222, 0, 0, 0, 103, 246, + 233, 169, 148, 149, 102, 0, 208, 125, 133, 122, + 182, 243, 244, 121, 269, 109, 257, 105, 110, 256, + 176, 239, 247, 170, 163, 104, 245, 168, 162, 153, + 129, 141, 200, 160, 201, 142, 173, 172, 174, 0, + 0, 0, 231, 254, 270, 114, 0, 238, 264, 265, + 0, 204, 115, 134, 128, 199, 132, 175, 111, 144, + 228, 152, 159, 207, 268, 189, 213, 118, 253, 229, + 376, 387, 382, 383, 380, 381, 379, 378, 377, 390, + 368, 369, 370, 371, 373, 0, 384, 385, 372, 97, + 106, 156, 267, 205, 131, 255, 0, 0, 124, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 99, 100, 107, 113, 119, 123, 127, 130, 136, + 140, 143, 145, 146, 147, 150, 161, 164, 165, 166, + 167, 177, 178, 179, 181, 184, 185, 186, 187, 188, + 191, 193, 194, 195, 196, 197, 198, 206, 209, 215, + 216, 217, 218, 219, 220, 221, 223, 224, 225, 226, + 232, 235, 241, 242, 252, 259, 262, 138, 249, 263, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 183, 0, 0, 0, 0, 332, 0, + 0, 0, 126, 0, 331, 0, 0, 0, 155, 0, + 0, 375, 157, 0, 0, 230, 171, 0, 0, 0, + 0, 0, 366, 367, 0, 0, 0, 0, 0, 0, + 0, 0, 59, 0, 0, 94, 95, 96, 353, 352, + 355, 356, 357, 358, 0, 0, 116, 354, 359, 360, + 361, 0, 0, 0, 0, 329, 346, 0, 374, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 343, 344, + 0, 0, 0, 0, 389, 0, 345, 0, 0, 338, + 339, 341, 340, 342, 347, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 388, 0, 0, 288, 0, + 0, 386, 0, 202, 0, 234, 139, 154, 112, 151, + 98, 108, 0, 137, 180, 210, 214, 0, 0, 0, + 120, 0, 212, 190, 251, 0, 192, 211, 158, 240, + 203, 250, 260, 261, 237, 258, 266, 227, 101, 236, + 248, 117, 222, 0, 0, 0, 103, 246, 233, 169, + 148, 149, 102, 0, 208, 125, 133, 122, 182, 243, + 244, 121, 269, 109, 257, 105, 110, 256, 176, 239, + 247, 170, 163, 104, 245, 168, 162, 153, 129, 141, + 200, 160, 201, 142, 173, 172, 174, 0, 0, 0, + 231, 254, 270, 114, 0, 238, 264, 265, 0, 204, + 115, 134, 128, 199, 132, 175, 111, 144, 228, 152, + 159, 207, 268, 189, 213, 118, 253, 229, 376, 387, + 382, 383, 380, 381, 379, 378, 377, 390, 368, 369, + 370, 371, 373, 0, 384, 385, 372, 97, 106, 156, + 267, 205, 131, 255, 0, 0, 124, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, + 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, + 145, 146, 147, 150, 161, 164, 165, 166, 167, 177, + 178, 179, 181, 184, 185, 186, 187, 188, 191, 193, + 194, 195, 196, 197, 198, 206, 209, 215, 216, 217, + 218, 219, 220, 221, 223, 224, 225, 226, 232, 235, + 241, 242, 252, 259, 262, 138, 249, 263, 183, 0, + 0, 0, 0, 332, 0, 0, 0, 126, 0, 331, + 0, 0, 0, 155, 0, 0, 375, 157, 0, 0, + 230, 171, 0, 0, 0, 0, 0, 366, 367, 0, + 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, + 94, 95, 96, 353, 352, 355, 356, 357, 358, 0, + 0, 116, 354, 359, 360, 361, 0, 0, 0, 0, + 329, 346, 0, 374, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 343, 344, 0, 0, 0, 0, 389, + 0, 345, 0, 0, 338, 339, 341, 340, 342, 347, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 388, 0, 0, 288, 0, 0, 386, 0, 202, 0, + 234, 139, 154, 112, 151, 98, 108, 0, 137, 180, + 210, 214, 0, 0, 0, 120, 0, 212, 190, 251, + 0, 192, 211, 158, 240, 203, 250, 260, 261, 237, + 258, 266, 227, 101, 236, 248, 117, 222, 0, 0, + 0, 103, 246, 233, 169, 148, 149, 102, 0, 208, + 125, 133, 122, 182, 243, 244, 121, 269, 109, 257, + 105, 110, 256, 176, 239, 247, 170, 163, 104, 245, + 168, 162, 153, 129, 141, 200, 160, 201, 142, 173, + 172, 174, 0, 0, 0, 231, 254, 270, 114, 0, + 238, 264, 265, 0, 204, 115, 134, 128, 199, 132, + 175, 111, 144, 228, 152, 159, 207, 268, 189, 213, + 118, 253, 229, 376, 387, 382, 383, 380, 381, 379, + 378, 377, 390, 368, 369, 370, 371, 373, 0, 384, + 385, 372, 97, 106, 156, 267, 205, 131, 255, 0, + 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 100, 107, 113, 119, 123, + 127, 130, 136, 140, 143, 145, 146, 147, 150, 161, + 164, 165, 166, 167, 177, 178, 179, 181, 184, 185, + 186, 187, 188, 191, 193, 194, 195, 196, 197, 198, + 206, 209, 215, 216, 217, 218, 219, 220, 221, 223, + 224, 225, 226, 232, 235, 241, 242, 252, 259, 262, + 138, 249, 263, 183, 0, 0, 0, 0, 0, 0, + 0, 0, 126, 0, 0, 0, 0, 0, 155, 0, + 0, 375, 157, 0, 0, 230, 171, 0, 0, 0, + 0, 0, 366, 367, 0, 0, 0, 0, 0, 0, + 0, 0, 59, 0, 0, 94, 95, 96, 353, 352, + 355, 356, 357, 358, 0, 0, 116, 354, 359, 360, + 361, 0, 0, 0, 0, 0, 346, 0, 374, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 343, 344, + 0, 0, 0, 0, 389, 0, 345, 0, 0, 338, + 339, 341, 340, 342, 347, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 388, 0, 0, 288, 0, + 0, 386, 0, 202, 0, 234, 139, 154, 112, 151, + 98, 108, 0, 137, 180, 210, 214, 0, 0, 0, + 120, 0, 212, 190, 251, 1607, 192, 211, 158, 240, + 203, 250, 260, 261, 237, 258, 266, 227, 101, 236, + 248, 117, 222, 0, 0, 0, 103, 246, 233, 169, + 148, 149, 102, 0, 208, 125, 133, 122, 182, 243, + 244, 121, 269, 109, 257, 105, 110, 256, 176, 239, + 247, 170, 163, 104, 245, 168, 162, 153, 129, 141, + 200, 160, 201, 142, 173, 172, 174, 0, 0, 0, + 231, 254, 270, 114, 0, 238, 264, 265, 0, 204, + 115, 134, 128, 199, 132, 175, 111, 144, 228, 152, + 159, 207, 268, 189, 213, 118, 253, 229, 376, 387, + 382, 383, 380, 381, 379, 378, 377, 390, 368, 369, + 370, 371, 373, 0, 384, 385, 372, 97, 106, 156, + 267, 205, 131, 255, 0, 0, 124, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, + 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, + 145, 146, 147, 150, 161, 164, 165, 166, 167, 177, + 178, 179, 181, 184, 185, 186, 187, 188, 191, 193, + 194, 195, 196, 197, 198, 206, 209, 215, 216, 217, + 218, 219, 220, 221, 223, 224, 225, 226, 232, 235, + 241, 242, 252, 259, 262, 138, 249, 263, 183, 0, + 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, + 0, 0, 0, 155, 0, 0, 375, 157, 0, 0, + 230, 171, 0, 0, 0, 0, 0, 366, 367, 0, + 0, 0, 0, 0, 0, 0, 0, 59, 0, 403, + 94, 95, 96, 353, 352, 355, 356, 357, 358, 0, + 0, 116, 354, 359, 360, 361, 0, 0, 0, 0, + 0, 346, 0, 374, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 343, 344, 0, 0, 0, 0, 389, + 0, 345, 0, 0, 338, 339, 341, 340, 342, 347, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 388, 0, 0, 288, 0, 0, 386, 0, 202, 0, + 234, 139, 154, 112, 151, 98, 108, 0, 137, 180, + 210, 214, 0, 0, 0, 120, 0, 212, 190, 251, + 0, 192, 211, 158, 240, 203, 250, 260, 261, 237, + 258, 266, 227, 101, 236, 248, 117, 222, 0, 0, + 0, 103, 246, 233, 169, 148, 149, 102, 0, 208, + 125, 133, 122, 182, 243, 244, 121, 269, 109, 257, + 105, 110, 256, 176, 239, 247, 170, 163, 104, 245, + 168, 162, 153, 129, 141, 200, 160, 201, 142, 173, + 172, 174, 0, 0, 0, 231, 254, 270, 114, 0, + 238, 264, 265, 0, 204, 115, 134, 128, 199, 132, + 175, 111, 144, 228, 152, 159, 207, 268, 189, 213, + 118, 253, 229, 376, 387, 382, 383, 380, 381, 379, + 378, 377, 390, 368, 369, 370, 371, 373, 0, 384, + 385, 372, 97, 106, 156, 267, 205, 131, 255, 0, + 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 100, 107, 113, 119, 123, + 127, 130, 136, 140, 143, 145, 146, 147, 150, 161, + 164, 165, 166, 167, 177, 178, 179, 181, 184, 185, + 186, 187, 188, 191, 193, 194, 195, 196, 197, 198, + 206, 209, 215, 216, 217, 218, 219, 220, 221, 223, + 224, 225, 226, 232, 235, 241, 242, 252, 259, 262, + 138, 249, 263, 183, 0, 0, 0, 0, 0, 0, + 0, 0, 126, 0, 0, 0, 0, 0, 155, 0, + 0, 375, 157, 0, 0, 230, 171, 0, 0, 0, + 0, 0, 366, 367, 0, 0, 0, 0, 0, 0, + 0, 0, 59, 0, 0, 94, 95, 96, 353, 352, + 355, 356, 357, 358, 0, 0, 116, 354, 359, 360, + 361, 0, 0, 0, 0, 0, 346, 0, 374, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 343, 344, + 0, 0, 0, 0, 389, 0, 345, 0, 0, 338, + 339, 341, 340, 342, 347, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 388, 0, 0, 288, 0, + 0, 386, 0, 202, 0, 234, 139, 154, 112, 151, + 98, 108, 0, 137, 180, 210, 214, 0, 0, 0, + 120, 0, 212, 190, 251, 0, 192, 211, 158, 240, + 203, 250, 260, 261, 237, 258, 266, 227, 101, 236, + 248, 117, 222, 0, 0, 0, 103, 246, 233, 169, + 148, 149, 102, 0, 208, 125, 133, 122, 182, 243, + 244, 121, 269, 109, 257, 105, 110, 256, 176, 239, + 247, 170, 163, 104, 245, 168, 162, 153, 129, 141, + 200, 160, 201, 142, 173, 172, 174, 0, 0, 0, + 231, 254, 270, 114, 0, 238, 264, 265, 0, 204, + 115, 134, 128, 199, 132, 175, 111, 144, 228, 152, + 159, 207, 268, 189, 213, 118, 253, 229, 376, 387, + 382, 383, 380, 381, 379, 378, 377, 390, 368, 369, + 370, 371, 373, 0, 384, 385, 372, 97, 106, 156, + 267, 205, 131, 255, 0, 0, 124, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, + 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, + 145, 146, 147, 150, 161, 164, 165, 166, 167, 177, + 178, 179, 181, 184, 185, 186, 187, 188, 191, 193, + 194, 195, 196, 197, 198, 206, 209, 215, 216, 217, + 218, 219, 220, 221, 223, 224, 225, 226, 232, 235, + 241, 242, 252, 259, 262, 138, 249, 263, 183, 0, + 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, + 0, 0, 0, 155, 0, 0, 0, 157, 0, 0, + 230, 171, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 649, + 648, 658, 659, 651, 652, 653, 654, 655, 656, 657, + 650, 0, 0, 660, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 0, 0, 0, 288, 0, 0, 0, 0, 202, 0, + 234, 139, 154, 112, 151, 98, 108, 0, 137, 180, + 210, 214, 0, 0, 0, 120, 0, 212, 190, 251, + 0, 192, 211, 158, 240, 203, 250, 260, 261, 237, + 258, 266, 227, 101, 236, 248, 117, 222, 0, 0, + 0, 103, 246, 233, 169, 148, 149, 102, 0, 208, + 125, 133, 122, 182, 243, 244, 121, 269, 109, 257, + 105, 110, 256, 176, 239, 247, 170, 163, 104, 245, + 168, 162, 153, 129, 141, 200, 160, 201, 142, 173, + 172, 174, 0, 0, 0, 231, 254, 270, 114, 0, + 238, 264, 265, 0, 204, 115, 134, 128, 199, 132, + 175, 111, 144, 228, 152, 159, 207, 268, 189, 213, + 118, 253, 229, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 106, 156, 267, 205, 131, 255, 0, + 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 100, 107, 113, 119, 123, + 127, 130, 136, 140, 143, 145, 146, 147, 150, 161, + 164, 165, 166, 167, 177, 178, 179, 181, 184, 185, + 186, 187, 188, 191, 193, 194, 195, 196, 197, 198, + 206, 209, 215, 216, 217, 218, 219, 220, 221, 223, + 224, 225, 226, 232, 235, 241, 242, 252, 259, 262, + 138, 249, 263, 183, 0, 0, 0, 744, 0, 0, + 0, 0, 126, 0, 0, 0, 0, 0, 155, 0, + 0, 0, 157, 0, 0, 230, 171, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 94, 95, 96, 0, 746, + 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, + 0, 0, 638, 639, 637, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 0, 0, 0, 288, 0, + 0, 0, 0, 202, 0, 234, 139, 154, 112, 151, + 98, 108, 0, 137, 180, 210, 214, 0, 0, 0, + 120, 0, 212, 190, 251, 0, 192, 211, 158, 240, + 203, 250, 260, 261, 237, 258, 266, 227, 101, 236, + 248, 117, 222, 0, 0, 0, 103, 246, 233, 169, + 148, 149, 102, 0, 208, 125, 133, 122, 182, 243, + 244, 121, 269, 109, 257, 105, 110, 256, 176, 239, + 247, 170, 163, 104, 245, 168, 162, 153, 129, 141, + 200, 160, 201, 142, 173, 172, 174, 0, 0, 0, + 231, 254, 270, 114, 0, 238, 264, 265, 0, 204, + 115, 134, 128, 199, 132, 175, 111, 144, 228, 152, + 159, 207, 268, 189, 213, 118, 253, 229, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 97, 106, 156, + 267, 205, 131, 255, 0, 0, 124, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, + 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, + 145, 146, 147, 150, 161, 164, 165, 166, 167, 177, + 178, 179, 181, 184, 185, 186, 187, 188, 191, 193, + 194, 195, 196, 197, 198, 206, 209, 215, 216, 217, + 218, 219, 220, 221, 223, 224, 225, 226, 232, 235, + 241, 242, 252, 259, 262, 138, 249, 263, 183, 0, + 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, + 0, 0, 0, 155, 0, 0, 0, 157, 0, 0, + 230, 171, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 116, 0, 0, 0, 0, 0, 86, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 88, 89, 0, 85, 0, 0, 0, 90, 202, 0, + 234, 139, 154, 112, 151, 98, 108, 0, 137, 180, + 210, 214, 0, 0, 0, 120, 0, 212, 190, 251, + 0, 192, 211, 158, 240, 203, 250, 260, 261, 237, + 258, 266, 227, 101, 236, 248, 117, 222, 0, 0, + 0, 103, 246, 233, 169, 148, 149, 102, 0, 208, + 125, 133, 122, 182, 243, 244, 121, 269, 109, 257, + 105, 110, 256, 176, 239, 247, 170, 163, 104, 245, + 168, 162, 153, 129, 141, 200, 160, 201, 142, 173, + 172, 174, 0, 0, 0, 231, 254, 270, 114, 0, + 238, 264, 265, 0, 204, 115, 134, 128, 199, 132, + 175, 111, 144, 228, 152, 159, 207, 268, 189, 213, + 118, 253, 229, 0, 87, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 106, 156, 267, 205, 131, 255, 0, + 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 100, 107, 113, 119, 123, + 127, 130, 136, 140, 143, 145, 146, 147, 150, 161, + 164, 165, 166, 167, 177, 178, 179, 181, 184, 185, + 186, 187, 188, 191, 193, 194, 195, 196, 197, 198, + 206, 209, 215, 216, 217, 218, 219, 220, 221, 223, + 224, 225, 226, 232, 235, 241, 242, 252, 259, 262, + 138, 249, 263, 183, 0, 0, 0, 1020, 0, 0, + 0, 0, 126, 0, 0, 0, 0, 0, 155, 0, + 0, 0, 157, 0, 0, 230, 171, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 94, 95, 96, 0, 1022, + 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 0, 0, 0, 288, 0, + 0, 0, 0, 202, 0, 234, 139, 154, 112, 151, + 98, 108, 0, 137, 180, 210, 214, 0, 0, 0, + 120, 0, 212, 190, 251, 0, 192, 211, 158, 240, + 203, 250, 260, 261, 237, 258, 266, 227, 101, 236, + 248, 117, 222, 0, 0, 0, 103, 246, 233, 169, + 148, 149, 102, 0, 208, 125, 133, 122, 182, 243, + 244, 121, 269, 109, 257, 105, 110, 256, 176, 239, + 247, 170, 163, 104, 245, 168, 162, 153, 129, 141, + 200, 160, 201, 142, 173, 172, 174, 0, 0, 0, + 231, 254, 270, 114, 0, 238, 264, 265, 0, 204, + 115, 134, 128, 199, 132, 175, 111, 144, 228, 152, + 159, 207, 268, 189, 213, 118, 253, 229, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 97, 106, 156, + 267, 205, 131, 255, 0, 0, 124, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, + 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, + 145, 146, 147, 150, 161, 164, 165, 166, 167, 177, + 178, 179, 181, 184, 185, 186, 187, 188, 191, 193, + 194, 195, 196, 197, 198, 206, 209, 215, 216, 217, + 218, 219, 220, 221, 223, 224, 225, 226, 232, 235, + 241, 242, 252, 259, 262, 138, 249, 263, 30, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, + 126, 0, 0, 0, 0, 0, 155, 0, 0, 0, + 157, 0, 0, 230, 171, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 59, 0, 0, 94, 95, 96, 0, 0, 0, 0, + 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 135, 0, 0, 0, 288, 0, 0, 0, + 0, 202, 0, 234, 139, 154, 112, 151, 98, 108, + 0, 137, 180, 210, 214, 0, 0, 0, 120, 0, + 212, 190, 251, 0, 192, 211, 158, 240, 203, 250, + 260, 261, 237, 258, 266, 227, 101, 236, 248, 117, + 222, 0, 0, 0, 103, 246, 233, 169, 148, 149, + 102, 0, 208, 125, 133, 122, 182, 243, 244, 121, + 269, 109, 257, 105, 110, 256, 176, 239, 247, 170, + 163, 104, 245, 168, 162, 153, 129, 141, 200, 160, + 201, 142, 173, 172, 174, 0, 0, 0, 231, 254, + 270, 114, 0, 238, 264, 265, 0, 204, 115, 134, + 128, 199, 132, 175, 111, 144, 228, 152, 159, 207, + 268, 189, 213, 118, 253, 229, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97, 106, 156, 267, 205, + 131, 255, 0, 0, 124, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 99, 100, 107, + 113, 119, 123, 127, 130, 136, 140, 143, 145, 146, + 147, 150, 161, 164, 165, 166, 167, 177, 178, 179, + 181, 184, 185, 186, 187, 188, 191, 193, 194, 195, + 196, 197, 198, 206, 209, 215, 216, 217, 218, 219, + 220, 221, 223, 224, 225, 226, 232, 235, 241, 242, + 252, 259, 262, 138, 249, 263, 183, 0, 0, 0, + 1020, 0, 0, 0, 0, 126, 0, 0, 0, 0, + 0, 155, 0, 0, 0, 157, 0, 0, 230, 171, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 94, 95, + 96, 0, 1022, 0, 0, 0, 0, 0, 0, 116, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, + 0, 288, 0, 0, 0, 0, 202, 0, 234, 139, + 154, 112, 151, 98, 108, 0, 137, 180, 210, 214, + 0, 0, 0, 120, 0, 212, 190, 251, 0, 1018, + 211, 158, 240, 203, 250, 260, 261, 237, 258, 266, + 227, 101, 236, 248, 117, 222, 0, 0, 0, 103, + 246, 233, 169, 148, 149, 102, 0, 208, 125, 133, + 122, 182, 243, 244, 121, 269, 109, 257, 105, 110, + 256, 176, 239, 247, 170, 163, 104, 245, 168, 162, + 153, 129, 141, 200, 160, 201, 142, 173, 172, 174, + 0, 0, 0, 231, 254, 270, 114, 0, 238, 264, + 265, 0, 204, 115, 134, 128, 199, 132, 175, 111, + 144, 228, 152, 159, 207, 268, 189, 213, 118, 253, + 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 97, 106, 156, 267, 205, 131, 255, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 97, 104, 110, 116, 120, 124, 127, 133, - 137, 140, 142, 143, 144, 147, 158, 161, 162, 163, - 164, 174, 175, 176, 178, 181, 182, 183, 184, 185, - 188, 190, 191, 192, 193, 194, 195, 203, 206, 212, - 213, 214, 215, 216, 217, 218, 220, 221, 222, 223, - 229, 232, 238, 239, 249, 256, 259, 135, 246, 260, + 0, 0, 99, 100, 107, 113, 119, 123, 127, 130, + 136, 140, 143, 145, 146, 147, 150, 161, 164, 165, + 166, 167, 177, 178, 179, 181, 184, 185, 186, 187, + 188, 191, 193, 194, 195, 196, 197, 198, 206, 209, + 215, 216, 217, 218, 219, 220, 221, 223, 224, 225, + 226, 232, 235, 241, 242, 252, 259, 262, 138, 249, + 263, 183, 0, 0, 0, 0, 0, 0, 0, 0, + 126, 0, 0, 0, 0, 0, 155, 0, 0, 0, + 157, 0, 0, 230, 171, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 94, 95, 96, 0, 0, 985, 0, + 0, 986, 0, 0, 116, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 135, 0, 0, 0, 288, 0, 0, 0, + 0, 202, 0, 234, 139, 154, 112, 151, 98, 108, + 0, 137, 180, 210, 214, 0, 0, 0, 120, 0, + 212, 190, 251, 0, 192, 211, 158, 240, 203, 250, + 260, 261, 237, 258, 266, 227, 101, 236, 248, 117, + 222, 0, 0, 0, 103, 246, 233, 169, 148, 149, + 102, 0, 208, 125, 133, 122, 182, 243, 244, 121, + 269, 109, 257, 105, 110, 256, 176, 239, 247, 170, + 163, 104, 245, 168, 162, 153, 129, 141, 200, 160, + 201, 142, 173, 172, 174, 0, 0, 0, 231, 254, + 270, 114, 0, 238, 264, 265, 0, 204, 115, 134, + 128, 199, 132, 175, 111, 144, 228, 152, 159, 207, + 268, 189, 213, 118, 253, 229, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97, 106, 156, 267, 205, + 131, 255, 0, 0, 124, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 99, 100, 107, + 113, 119, 123, 127, 130, 136, 140, 143, 145, 146, + 147, 150, 161, 164, 165, 166, 167, 177, 178, 179, + 181, 184, 185, 186, 187, 188, 191, 193, 194, 195, + 196, 197, 198, 206, 209, 215, 216, 217, 218, 219, + 220, 221, 223, 224, 225, 226, 232, 235, 241, 242, + 252, 259, 262, 138, 249, 263, 183, 0, 0, 0, + 0, 0, 0, 0, 0, 126, 0, 781, 0, 0, + 0, 155, 0, 0, 0, 157, 0, 0, 230, 171, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 94, 95, + 96, 0, 780, 0, 0, 0, 0, 0, 0, 116, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, + 0, 288, 0, 0, 0, 0, 202, 0, 234, 139, + 154, 112, 151, 98, 108, 0, 137, 180, 210, 214, + 0, 0, 0, 120, 0, 212, 190, 251, 0, 192, + 211, 158, 240, 203, 250, 260, 261, 237, 258, 266, + 227, 101, 236, 248, 117, 222, 0, 0, 0, 103, + 246, 233, 169, 148, 149, 102, 0, 208, 125, 133, + 122, 182, 243, 244, 121, 269, 109, 257, 105, 110, + 256, 176, 239, 247, 170, 163, 104, 245, 168, 162, + 153, 129, 141, 200, 160, 201, 142, 173, 172, 174, + 0, 0, 0, 231, 254, 270, 114, 0, 238, 264, + 265, 0, 204, 115, 134, 128, 199, 132, 175, 111, + 144, 228, 152, 159, 207, 268, 189, 213, 118, 253, + 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 97, 106, 156, 267, 205, 131, 255, 0, 0, 124, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 99, 100, 107, 113, 119, 123, 127, 130, + 136, 140, 143, 145, 146, 147, 150, 161, 164, 165, + 166, 167, 177, 178, 179, 181, 184, 185, 186, 187, + 188, 191, 193, 194, 195, 196, 197, 198, 206, 209, + 215, 216, 217, 218, 219, 220, 221, 223, 224, 225, + 226, 232, 235, 241, 242, 252, 259, 262, 138, 249, + 263, 183, 0, 0, 0, 0, 0, 0, 0, 0, + 126, 0, 0, 0, 0, 0, 155, 0, 0, 0, + 157, 0, 0, 230, 171, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 403, 94, 95, 96, 0, 0, 0, 0, + 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 135, 0, 0, 0, 288, 0, 0, 0, + 0, 202, 0, 234, 139, 154, 112, 151, 98, 108, + 0, 137, 180, 210, 214, 0, 0, 0, 120, 0, + 212, 190, 251, 0, 192, 211, 158, 240, 203, 250, + 260, 261, 237, 258, 266, 227, 101, 236, 248, 117, + 222, 0, 0, 0, 103, 246, 233, 169, 148, 149, + 102, 0, 208, 125, 133, 122, 182, 243, 244, 121, + 269, 109, 257, 105, 110, 256, 176, 239, 247, 170, + 163, 104, 245, 168, 162, 153, 129, 141, 200, 160, + 201, 142, 173, 172, 174, 0, 0, 0, 231, 254, + 270, 114, 0, 238, 264, 265, 0, 204, 115, 134, + 128, 199, 132, 175, 111, 144, 228, 152, 159, 207, + 268, 189, 213, 118, 253, 229, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97, 106, 156, 267, 205, + 131, 255, 0, 0, 124, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 99, 100, 107, + 113, 119, 123, 127, 130, 136, 140, 143, 145, 146, + 147, 150, 161, 164, 165, 166, 167, 177, 178, 179, + 181, 184, 185, 186, 187, 188, 191, 193, 194, 195, + 196, 197, 198, 206, 209, 215, 216, 217, 218, 219, + 220, 221, 223, 224, 225, 226, 232, 235, 241, 242, + 252, 259, 262, 138, 249, 263, 183, 0, 0, 0, + 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, + 0, 155, 0, 0, 0, 157, 0, 0, 230, 171, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 59, 0, 0, 94, 95, + 96, 0, 0, 0, 0, 0, 0, 0, 0, 116, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, + 0, 288, 0, 0, 0, 0, 202, 0, 234, 139, + 154, 112, 151, 98, 108, 0, 137, 180, 210, 214, + 0, 0, 0, 120, 0, 212, 190, 251, 0, 192, + 211, 158, 240, 203, 250, 260, 261, 237, 258, 266, + 227, 101, 236, 248, 117, 222, 0, 0, 0, 103, + 246, 233, 169, 148, 149, 102, 0, 208, 125, 133, + 122, 182, 243, 244, 121, 269, 109, 257, 105, 110, + 256, 176, 239, 247, 170, 163, 104, 245, 168, 162, + 153, 129, 141, 200, 160, 201, 142, 173, 172, 174, + 0, 0, 0, 231, 254, 270, 114, 0, 238, 264, + 265, 0, 204, 115, 134, 128, 199, 132, 175, 111, + 144, 228, 152, 159, 207, 268, 189, 213, 118, 253, + 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 97, 106, 156, 267, 205, 131, 255, 0, 0, 124, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 99, 100, 107, 113, 119, 123, 127, 130, + 136, 140, 143, 145, 146, 147, 150, 161, 164, 165, + 166, 167, 177, 178, 179, 181, 184, 185, 186, 187, + 188, 191, 193, 194, 195, 196, 197, 198, 206, 209, + 215, 216, 217, 218, 219, 220, 221, 223, 224, 225, + 226, 232, 235, 241, 242, 252, 259, 262, 138, 249, + 263, 183, 0, 0, 0, 0, 0, 0, 0, 0, + 126, 0, 0, 0, 0, 0, 155, 0, 0, 0, + 157, 0, 0, 230, 171, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 94, 95, 96, 0, 1022, 0, 0, + 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 135, 0, 0, 0, 288, 0, 0, 0, + 0, 202, 0, 234, 139, 154, 112, 151, 98, 108, + 0, 137, 180, 210, 214, 0, 0, 0, 120, 0, + 212, 190, 251, 0, 192, 211, 158, 240, 203, 250, + 260, 261, 237, 258, 266, 227, 101, 236, 248, 117, + 222, 0, 0, 0, 103, 246, 233, 169, 148, 149, + 102, 0, 208, 125, 133, 122, 182, 243, 244, 121, + 269, 109, 257, 105, 110, 256, 176, 239, 247, 170, + 163, 104, 245, 168, 162, 153, 129, 141, 200, 160, + 201, 142, 173, 172, 174, 0, 0, 0, 231, 254, + 270, 114, 0, 238, 264, 265, 0, 204, 115, 134, + 128, 199, 132, 175, 111, 144, 228, 152, 159, 207, + 268, 189, 213, 118, 253, 229, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97, 106, 156, 267, 205, + 131, 255, 0, 0, 124, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 99, 100, 107, + 113, 119, 123, 127, 130, 136, 140, 143, 145, 146, + 147, 150, 161, 164, 165, 166, 167, 177, 178, 179, + 181, 184, 185, 186, 187, 188, 191, 193, 194, 195, + 196, 197, 198, 206, 209, 215, 216, 217, 218, 219, + 220, 221, 223, 224, 225, 226, 232, 235, 241, 242, + 252, 259, 262, 138, 249, 263, 183, 0, 0, 0, + 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, + 0, 155, 0, 0, 0, 157, 0, 0, 230, 171, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 94, 95, + 96, 0, 746, 0, 0, 0, 0, 0, 0, 116, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, + 0, 288, 0, 0, 0, 0, 202, 0, 234, 139, + 154, 112, 151, 98, 108, 0, 137, 180, 210, 214, + 0, 0, 0, 120, 0, 212, 190, 251, 0, 192, + 211, 158, 240, 203, 250, 260, 261, 237, 258, 266, + 227, 101, 236, 248, 117, 222, 0, 0, 0, 103, + 246, 233, 169, 148, 149, 102, 0, 208, 125, 133, + 122, 182, 243, 244, 121, 269, 109, 257, 105, 110, + 256, 176, 239, 247, 170, 163, 104, 245, 168, 162, + 153, 129, 141, 200, 160, 201, 142, 173, 172, 174, + 0, 0, 0, 231, 254, 270, 114, 0, 238, 264, + 265, 0, 204, 115, 134, 128, 199, 132, 175, 111, + 144, 228, 152, 159, 207, 268, 189, 213, 118, 253, + 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 97, 106, 156, 267, 205, 131, 255, 0, 0, 124, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 99, 100, 107, 113, 119, 123, 127, 130, + 136, 140, 143, 145, 146, 147, 150, 161, 164, 165, + 166, 167, 177, 178, 179, 181, 184, 185, 186, 187, + 188, 191, 193, 194, 195, 196, 197, 198, 206, 209, + 215, 216, 217, 218, 219, 220, 221, 223, 224, 225, + 226, 232, 235, 241, 242, 252, 259, 262, 138, 249, + 263, 183, 0, 0, 0, 0, 0, 0, 0, 750, + 126, 0, 0, 0, 0, 0, 155, 0, 0, 0, + 157, 0, 0, 230, 171, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 94, 95, 96, 0, 0, 0, 0, + 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 135, 0, 0, 0, 288, 0, 0, 0, + 0, 202, 0, 234, 139, 154, 112, 151, 98, 108, + 0, 137, 180, 210, 214, 0, 0, 0, 120, 0, + 212, 190, 251, 0, 192, 211, 158, 240, 203, 250, + 260, 261, 237, 258, 266, 227, 101, 236, 248, 117, + 222, 0, 0, 0, 103, 246, 233, 169, 148, 149, + 102, 0, 208, 125, 133, 122, 182, 243, 244, 121, + 269, 109, 257, 105, 110, 256, 176, 239, 247, 170, + 163, 104, 245, 168, 162, 153, 129, 141, 200, 160, + 201, 142, 173, 172, 174, 0, 0, 0, 231, 254, + 270, 114, 0, 238, 264, 265, 0, 204, 115, 134, + 128, 199, 132, 175, 111, 144, 228, 152, 159, 207, + 268, 189, 213, 118, 253, 229, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97, 106, 156, 267, 205, + 131, 255, 0, 0, 124, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 99, 100, 107, + 113, 119, 123, 127, 130, 136, 140, 143, 145, 146, + 147, 150, 161, 164, 165, 166, 167, 177, 178, 179, + 181, 184, 185, 186, 187, 188, 191, 193, 194, 195, + 196, 197, 198, 206, 209, 215, 216, 217, 218, 219, + 220, 221, 223, 224, 225, 226, 232, 235, 241, 242, + 252, 259, 262, 138, 249, 263, 183, 0, 0, 0, + 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, + 0, 155, 0, 0, 0, 157, 0, 0, 230, 171, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 94, 95, + 96, 0, 627, 0, 0, 0, 0, 0, 0, 116, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, + 0, 288, 0, 0, 0, 0, 202, 0, 234, 139, + 154, 112, 151, 98, 108, 0, 137, 180, 210, 214, + 0, 0, 0, 120, 0, 212, 190, 251, 0, 192, + 211, 158, 240, 203, 250, 260, 261, 237, 258, 266, + 227, 101, 236, 248, 117, 222, 0, 0, 0, 103, + 246, 233, 169, 148, 149, 102, 0, 208, 125, 133, + 122, 182, 243, 244, 121, 269, 109, 257, 105, 110, + 256, 176, 239, 247, 170, 163, 104, 245, 168, 162, + 153, 129, 141, 200, 160, 201, 142, 173, 172, 174, + 0, 0, 0, 231, 254, 270, 114, 0, 238, 264, + 265, 0, 204, 115, 134, 128, 199, 132, 175, 111, + 144, 228, 152, 159, 207, 268, 189, 213, 118, 253, + 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 97, 106, 156, 267, 205, 131, 255, 0, 0, 124, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 99, 100, 107, 113, 119, 123, 127, 130, + 136, 140, 143, 145, 146, 147, 150, 161, 164, 165, + 166, 167, 177, 178, 179, 181, 184, 185, 186, 187, + 188, 191, 193, 194, 195, 196, 197, 198, 206, 209, + 215, 216, 217, 218, 219, 220, 221, 223, 224, 225, + 226, 232, 235, 241, 242, 252, 259, 262, 138, 249, + 263, 421, 0, 0, 0, 0, 0, 0, 183, 0, + 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, + 0, 0, 0, 155, 0, 0, 0, 157, 0, 0, + 230, 171, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 0, 0, 0, 288, 0, 0, 0, 0, 202, 0, + 234, 139, 154, 112, 151, 98, 108, 0, 137, 180, + 210, 214, 0, 0, 0, 120, 0, 212, 190, 251, + 0, 192, 211, 158, 240, 203, 250, 260, 261, 237, + 258, 266, 227, 101, 236, 248, 117, 222, 0, 0, + 0, 103, 246, 233, 169, 148, 149, 102, 0, 208, + 125, 133, 122, 182, 243, 244, 121, 269, 109, 257, + 105, 110, 256, 176, 239, 247, 170, 163, 104, 245, + 168, 162, 153, 129, 141, 200, 160, 201, 142, 173, + 172, 174, 0, 0, 0, 231, 254, 270, 114, 0, + 238, 264, 265, 0, 204, 115, 134, 128, 199, 132, + 175, 111, 144, 228, 152, 159, 207, 268, 189, 213, + 118, 253, 229, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 106, 156, 267, 205, 131, 255, 0, + 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 100, 107, 113, 119, 123, + 127, 130, 136, 140, 143, 145, 146, 147, 150, 161, + 164, 165, 166, 167, 177, 178, 179, 181, 184, 185, + 186, 187, 188, 191, 193, 194, 195, 196, 197, 198, + 206, 209, 215, 216, 217, 218, 219, 220, 221, 223, + 224, 225, 226, 232, 235, 241, 242, 252, 259, 262, + 138, 249, 263, 183, 0, 0, 0, 0, 0, 0, + 0, 0, 126, 0, 0, 0, 0, 0, 155, 0, + 0, 0, 157, 0, 0, 230, 171, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 94, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 320, 0, 135, 0, 0, 0, 288, 0, + 0, 0, 0, 202, 0, 234, 139, 154, 112, 151, + 98, 108, 0, 137, 180, 210, 214, 0, 0, 0, + 120, 0, 212, 190, 251, 0, 192, 211, 158, 240, + 203, 250, 260, 261, 237, 258, 266, 227, 101, 236, + 248, 117, 222, 0, 0, 0, 103, 246, 233, 169, + 148, 149, 102, 0, 208, 125, 133, 122, 182, 243, + 244, 121, 269, 109, 257, 105, 110, 256, 176, 239, + 247, 170, 163, 104, 245, 168, 162, 153, 129, 141, + 200, 160, 201, 142, 173, 172, 174, 0, 0, 0, + 231, 254, 270, 114, 0, 238, 264, 265, 0, 204, + 115, 134, 128, 199, 132, 175, 111, 144, 228, 152, + 159, 207, 268, 189, 213, 118, 253, 229, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 97, 106, 156, + 267, 205, 131, 255, 0, 0, 124, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, + 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, + 145, 146, 147, 150, 161, 164, 165, 166, 167, 177, + 178, 179, 181, 184, 185, 186, 187, 188, 191, 193, + 194, 195, 196, 197, 198, 206, 209, 215, 216, 217, + 218, 219, 220, 221, 223, 224, 225, 226, 232, 235, + 241, 242, 252, 259, 262, 319, 249, 263, 183, 0, + 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, + 0, 0, 0, 155, 0, 0, 0, 157, 0, 0, + 230, 171, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 0, 283, 0, 288, 0, 0, 0, 0, 202, 0, + 234, 139, 154, 112, 151, 98, 108, 0, 137, 180, + 210, 214, 0, 0, 0, 120, 0, 212, 190, 251, + 0, 192, 211, 158, 240, 203, 250, 260, 261, 237, + 258, 266, 227, 101, 236, 248, 117, 222, 0, 0, + 0, 103, 246, 233, 169, 148, 149, 102, 0, 208, + 125, 133, 122, 182, 243, 244, 121, 269, 109, 257, + 105, 110, 256, 176, 239, 247, 170, 163, 104, 245, + 168, 162, 153, 129, 141, 200, 160, 201, 142, 173, + 172, 174, 0, 0, 0, 231, 254, 270, 114, 0, + 238, 264, 265, 0, 204, 115, 134, 128, 199, 132, + 175, 111, 144, 228, 152, 159, 207, 268, 189, 213, + 118, 253, 229, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 106, 156, 267, 205, 131, 255, 0, + 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 100, 107, 113, 119, 123, + 127, 130, 136, 140, 143, 145, 146, 147, 150, 161, + 164, 165, 166, 167, 177, 178, 179, 181, 184, 185, + 186, 187, 188, 191, 193, 194, 195, 196, 197, 198, + 206, 209, 215, 216, 217, 218, 219, 220, 221, 223, + 224, 225, 226, 232, 235, 241, 242, 252, 259, 262, + 138, 249, 263, 183, 0, 0, 0, 0, 0, 0, + 0, 0, 126, 0, 0, 0, 0, 0, 155, 0, + 0, 0, 157, 0, 0, 230, 171, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 94, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 0, 0, 0, 288, 0, + 0, 0, 0, 202, 0, 234, 139, 154, 112, 151, + 98, 108, 0, 137, 180, 210, 214, 0, 0, 0, + 120, 0, 212, 190, 251, 0, 192, 211, 158, 240, + 203, 250, 260, 261, 237, 258, 266, 227, 101, 236, + 248, 117, 222, 0, 0, 0, 103, 246, 233, 169, + 148, 149, 102, 0, 208, 125, 133, 122, 182, 243, + 244, 121, 269, 109, 257, 105, 110, 256, 176, 239, + 247, 170, 163, 104, 245, 168, 162, 153, 129, 141, + 200, 160, 201, 142, 173, 172, 174, 0, 0, 0, + 231, 254, 270, 114, 0, 238, 264, 265, 0, 204, + 115, 134, 128, 199, 132, 175, 111, 144, 228, 152, + 159, 207, 268, 189, 213, 118, 253, 229, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 97, 106, 156, + 267, 205, 131, 255, 0, 0, 124, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, + 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, + 145, 146, 147, 150, 161, 164, 165, 166, 167, 177, + 178, 179, 181, 184, 185, 186, 187, 188, 191, 193, + 194, 195, 196, 197, 198, 206, 209, 215, 216, 217, + 218, 219, 220, 221, 223, 224, 225, 226, 232, 235, + 241, 242, 252, 259, 262, 138, 249, 263, } var yyPact = [...]int{ - 195, -1000, -274, 1086, -1000, -1000, -1000, -1000, -1000, -1000, + 1846, -1000, -278, 971, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 912, 788, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 275, 12289, 43, + 130, 12, 17139, 129, 1947, 17484, -1000, 31, -1000, -5, + 17484, 4, 16794, -1000, -1000, -95, -97, -1000, 10219, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 737, 924, 898, + 909, 585, 990, -1000, 8826, 8826, 105, 105, 16449, 7446, + -1000, -1000, 362, 17484, 127, 17484, -153, 102, 102, 102, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1028, 882, -1000, - -1000, -1000, -1000, -1000, -1000, 274, 12123, 2, 134, 43, - 16972, 133, 1708, 17317, -1000, 7, -1000, 4, 17317, 14, - 16627, -1000, -1000, -88, -94, -1000, 10053, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 833, 1013, 1022, 1026, 737, - 1089, -1000, 8661, 105, 105, 16282, 7281, -1000, -1000, 483, - 17317, 127, 17317, -149, 97, 97, 97, -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, @@ -2684,26 +2706,24 @@ 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, 124, 17484, 531, 531, 256, -1000, 17484, 100, 531, + 100, 100, 100, 17484, -1000, 175, -1000, -1000, -1000, 17484, + 531, 866, 337, 56, 4933, -1000, 194, -1000, 4933, 44, + 4933, -44, 939, 37, -22, -1000, 4933, -1000, -1000, -1000, + -1000, -1000, -1000, 111, -1000, -1000, 17484, 16097, 131, 294, + -1000, -1000, -1000, -1000, -1000, -1000, 609, 421, -1000, 10219, + 1612, 728, 728, -1000, -1000, 146, -1000, -1000, 11254, 11254, + 11254, 11254, 11254, 11254, 11254, 11254, 11254, 11254, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 728, 172, -1000, 9874, 728, 728, 728, 728, + 728, 728, 728, 728, 10219, 728, 728, 728, 728, 728, + 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, + 728, -1000, -1000, 912, -1000, 788, -1000, -1000, -1000, 871, + 10219, 10219, 912, -1000, 841, 8826, -1000, -1000, 919, -1000, + -1000, -1000, -1000, 335, 949, -1000, 11944, 171, 948, 15752, + 14717, 17484, 732, 668, -1000, -1000, 168, 724, 7087, -123, + -1000, -1000, -1000, 292, 14027, -1000, -1000, -1000, 863, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 132, 17317, - 600, 600, 261, -1000, 17317, 92, 600, 92, 92, 92, - 17317, -1000, 179, -1000, -1000, -1000, 17317, 600, 954, 316, - 129, 4775, -1000, 197, -1000, 4775, 44, 4775, -49, 1052, - 28, -37, -1000, 4775, -1000, -1000, -1000, -1000, -1000, -1000, - 115, -1000, -1000, 17317, 15930, 142, 272, -1000, -1000, -1000, - -1000, -1000, -1000, 544, 563, -1000, 10053, 585, 738, 738, - -1000, -1000, 146, -1000, -1000, 11088, 11088, 11088, 11088, 11088, - 11088, 11088, 11088, 11088, 11088, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 738, - 173, -1000, 9708, 738, 738, 738, 738, 738, 738, 738, - 738, 10053, 738, 738, 738, 738, 738, 738, 738, 738, - 738, 738, 738, 738, 738, 738, 738, 738, -1000, -1000, - 1028, -1000, 882, -1000, -1000, -1000, 974, 10053, 10053, 1028, - -1000, 934, 8661, -1000, -1000, 946, -1000, -1000, -1000, -1000, - 356, 1063, -1000, 11778, 170, 15585, 14550, 17317, 758, 742, - -1000, -1000, 169, 773, 6923, -75, -1000, -1000, -1000, 268, - 13860, -1000, -1000, -1000, 953, -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, @@ -2714,230 +2734,212 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 654, + 17484, -1000, 328, -1000, 531, 4933, 110, 531, 307, 531, + 17484, 17484, 4933, 4933, 4933, 48, 86, 80, 17484, 723, + 108, 17484, 890, 796, 17484, 531, 531, -1000, 6369, -1000, + 4933, 337, -1000, 440, 10219, 4933, 4933, 4933, 17484, 4933, + 4933, -1000, -1000, -1000, 320, -1000, -1000, -1000, -1000, 4933, + 4933, -1000, 947, 312, -1000, -1000, -1000, -1000, 10219, 219, + -1000, 781, -1000, 1, -1000, -1000, -1000, -1000, -1000, 971, + -1000, -1000, -1000, -128, -1000, -1000, 10219, 10219, 10219, 10219, + 364, 227, 11254, 506, 232, 11254, 11254, 11254, 11254, 11254, + 11254, 11254, 11254, 11254, 11254, 11254, 11254, 11254, 11254, 11254, + 542, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 531, + -1000, 969, 621, 621, 191, 191, 191, 191, 191, 191, + 191, 191, 191, 11599, 7791, 6369, 585, 652, 912, 8826, + 8826, 10219, 10219, 9516, 9171, 8826, 870, 271, 421, 17484, + -1000, -1000, 10909, -1000, -1000, -1000, -1000, -1000, 470, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 17484, 17484, 8826, 8826, + 8826, 8826, 8826, 898, 585, 919, -1000, 964, 211, 587, + 718, -1000, 558, 898, 13682, 712, -1000, 919, -1000, -1000, + -1000, 17484, -1000, -1000, 15407, -1000, -1000, 6010, 17484, 64, + 17484, -1000, 688, 756, -1000, -1000, -1000, 892, 12992, 13337, + 64, 559, 14717, 17484, -1000, -1000, 14717, 17484, 5651, 6728, + -123, -1000, 6728, 693, -1000, -121, -134, 8136, 189, -1000, + -1000, -1000, -1000, 4574, 1155, 509, 327, -79, -1000, -1000, + -1000, 739, -1000, 739, 739, 739, 739, -47, -47, -47, + -47, -1000, -1000, -1000, -1000, -1000, 762, 760, -1000, 739, + 739, 739, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 730, 17317, -1000, 2568, -1000, - 600, 4775, 117, 600, 301, 600, 17317, 17317, 4775, 4775, - 4775, 45, 75, 63, 17317, 752, 112, 17317, 993, 887, - 17317, 600, 600, -1000, 6207, -1000, 4775, 316, -1000, 471, - 10053, 4775, 4775, 4775, 17317, 4775, 4775, -1000, -1000, -1000, - 315, -1000, -1000, -1000, -1000, 4775, 4775, -1000, 1058, 296, - -1000, -1000, -1000, -1000, 10053, 227, -1000, 881, -1000, 10, - -1000, -1000, -1000, -1000, -1000, 1086, -1000, -1000, -1000, -125, - -1000, -1000, 10053, 10053, 10053, 10053, 635, 214, 11088, 354, - 339, 11088, 11088, 11088, 11088, 11088, 11088, 11088, 11088, 11088, - 11088, 11088, 11088, 11088, 11088, 11088, 639, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 600, -1000, 1078, 841, 841, - 189, 189, 189, 189, 189, 189, 189, 189, 189, 11433, - 7626, 6207, 737, 715, 1028, 8661, 8661, 10053, 10053, 9351, - 9006, 8661, 973, 293, 563, 17317, -1000, -1000, 10743, -1000, - -1000, -1000, -1000, -1000, 429, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 17317, 17317, 8661, 8661, 8661, 8661, 8661, 1022, - 737, 946, -1000, 1073, 210, 698, 750, -1000, 477, 1022, - 13515, 746, -1000, 946, -1000, -1000, -1000, 17317, -1000, -1000, - 15240, -1000, -1000, 5849, 58, 17317, -1000, 581, 909, -1000, - -1000, -1000, 995, 12825, 13170, 58, 687, 14550, 17317, -1000, - -1000, 14550, 17317, 5491, 6565, -75, -1000, 6565, 723, -1000, - -122, -107, 7971, 188, -1000, -1000, -1000, -1000, 4417, 490, - 532, 347, -79, -1000, -1000, -1000, 783, -1000, 783, 783, - 783, 783, -29, -29, -29, -29, -1000, -1000, -1000, -1000, - -1000, 836, 832, -1000, 783, 783, 783, -1000, -1000, -1000, + 759, 759, 759, 742, 742, 771, -1000, 17484, 4933, 889, + 4933, -1000, 123, -1000, -1000, -1000, 17484, 17484, 17484, 17484, + 17484, 137, 17484, 17484, 702, -1000, 17484, 4933, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 421, -1000, -1000, -1000, + -1000, -1000, -1000, 17484, -1000, -1000, -1000, -1000, 17484, 337, + 17484, 17484, 421, -1000, 438, 17484, 17484, -1000, -1000, -1000, + -1000, -1000, 421, 227, 283, 272, -1000, -1000, 433, -1000, + -1000, 1843, -1000, -1000, -1000, -1000, 506, 11254, 11254, 11254, + 829, 1843, 2362, 449, 519, 191, 289, 289, 186, 186, + 186, 186, 186, 568, 568, -1000, -1000, -1000, 470, -1000, + -1000, -1000, 470, 8826, 8826, 699, 728, 167, -1000, 737, + -1000, -1000, 898, 647, 647, 334, 408, 267, 946, 647, + 252, 945, 647, 647, 8826, -1000, -1000, 299, -1000, 10219, + 470, -1000, 166, -1000, 1667, 698, 697, 647, 470, 470, + 647, 647, 871, -1000, -1000, 830, 10219, 10219, 10219, -1000, + -1000, -1000, 871, 930, -1000, 848, 847, 938, 8826, 14717, + 919, -1000, -1000, -1000, 162, 938, 692, 728, -1000, 17484, + 14717, 14717, 14717, 14717, 14717, -1000, 822, 818, -1000, 816, + 810, 817, 17484, -1000, 649, 585, 12992, 178, 728, -1000, + 15062, -1000, -1000, 938, 14717, 707, -1000, 707, -1000, 161, + -1000, -1000, 693, -123, -72, -1000, -1000, -1000, -1000, 421, + -1000, 552, 689, 4215, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 753, 531, -1000, 882, 228, 209, 531, 881, -1000, + -1000, -1000, 868, -1000, 331, -90, -1000, -1000, 389, -47, + -47, -1000, -1000, 189, 862, 189, 189, 189, 432, 432, + -1000, -1000, -1000, -1000, 385, -1000, -1000, -1000, 376, -1000, + 779, 17484, 4933, -1000, -1000, -1000, -1000, 308, 308, 222, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 830, 830, 830, 798, 798, - 824, -1000, 17317, 4775, 991, 4775, -1000, 83, -1000, -1000, - -1000, 17317, 17317, 17317, 17317, 17317, 141, 17317, 17317, 749, - -1000, 17317, 4775, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 563, -1000, -1000, -1000, -1000, -1000, -1000, 17317, -1000, - -1000, -1000, -1000, 17317, 316, 17317, 17317, 563, -1000, 453, - 17317, 17317, -1000, -1000, -1000, -1000, -1000, 563, 214, 481, - 308, -1000, -1000, 515, -1000, -1000, 2150, -1000, -1000, -1000, - -1000, 354, 11088, 11088, 11088, 424, 2150, 2102, 546, 1170, - 189, 346, 346, 190, 190, 190, 190, 190, 387, 387, - -1000, -1000, -1000, 429, -1000, -1000, -1000, 429, 8661, 8661, - 748, 738, 166, -1000, 833, -1000, -1000, 1022, 689, 689, - 649, 383, 271, 1056, 689, 269, 1054, 689, 689, 8661, - -1000, -1000, 314, -1000, 10053, 429, -1000, 165, -1000, 406, - 741, 726, 689, 429, 429, 689, 689, 974, -1000, -1000, - 931, 10053, 10053, 10053, -1000, -1000, -1000, 974, 1043, -1000, - 941, 938, 1051, 8661, 14550, 946, -1000, -1000, -1000, 163, - 755, 738, -1000, 17317, 14550, 14550, 14550, 14550, 14550, -1000, - 914, 901, -1000, 900, 899, 918, 17317, -1000, 713, 737, - 12825, 178, 738, -1000, 14895, -1000, -1000, 1051, 14550, 793, - -1000, 793, -1000, 159, -1000, -1000, 723, -75, -69, -1000, - -1000, -1000, -1000, 563, -1000, 657, 720, 4059, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 815, 600, -1000, 982, 223, - 250, 600, 981, -1000, -1000, -1000, 957, -1000, 312, -81, - -1000, -1000, 412, -29, -29, -1000, -1000, 188, 952, 188, - 188, 188, 440, 440, -1000, -1000, -1000, -1000, 399, -1000, - -1000, -1000, 393, -1000, 878, 17317, 4775, -1000, -1000, -1000, - -1000, 302, 302, 225, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 56, 587, -1000, -1000, -1000, - -1000, 1, 33, 109, -1000, 4775, -1000, 296, 296, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 424, - 2150, 2069, -1000, 11088, 11088, -1000, -1000, 689, 689, 8661, - 6207, 1028, 974, -1000, -1000, 203, 639, 203, 11088, 11088, - -1000, 11088, 11088, -1000, -163, 571, 251, -1000, 10053, 463, - -1000, 6207, -1000, 11088, 11088, -1000, -1000, -1000, -1000, -1000, - -1000, 929, 563, 563, -1000, -1000, 17317, -1000, -1000, -1000, - -1000, 1044, 10053, -1000, 667, -1000, 5133, 862, 17317, 738, - 1086, 12825, 17317, 813, -1000, 252, 909, 823, 848, 772, - -1000, -1000, -1000, -1000, 898, -1000, 890, -1000, -1000, -1000, - -1000, -1000, 737, -1000, 126, 125, 123, 17317, -1000, 1028, - 793, -1000, -1000, 200, -1000, -1000, -130, -136, -1000, -1000, - -1000, 4417, -1000, 4417, 17317, 73, -1000, 600, 600, -1000, - -1000, -1000, 811, 847, 11088, -1000, -1000, -1000, 525, 188, - 188, -1000, 305, -1000, -1000, -1000, 681, -1000, 678, 586, - 675, 17317, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 63, 765, -1000, -1000, -1000, -1000, -18, 45, 107, + -1000, 4933, -1000, 312, 312, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 829, 1843, 1810, -1000, 11254, + 11254, -1000, -1000, 647, 647, 8826, 6369, 912, 871, -1000, + -1000, 109, 542, 109, 11254, 11254, -1000, 11254, 11254, -1000, + -165, 722, 257, -1000, 10219, 382, -1000, 6369, -1000, 11254, + 11254, -1000, -1000, -1000, -1000, -1000, -1000, 833, 421, 421, + -1000, -1000, 17484, -1000, -1000, -1000, -1000, 934, 10219, -1000, + 644, -1000, 5292, 898, 777, 17484, 728, 971, 12992, 17484, + 733, -1000, 269, 756, 758, 776, 684, -1000, -1000, -1000, + -1000, 809, -1000, 770, -1000, -1000, -1000, -1000, -1000, 585, + -1000, 126, 125, 114, 17484, -1000, 912, 707, -1000, -1000, + 203, -1000, -1000, -131, -140, -1000, -1000, -1000, 4574, -1000, + 4574, 17484, 78, -1000, 531, 531, -1000, -1000, -1000, 743, + 775, 11254, -1000, -1000, -1000, 507, 189, 189, -1000, 258, + -1000, -1000, -1000, 637, -1000, 632, 634, 604, 17484, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 17317, -1000, -1000, -1000, -1000, -1000, 17317, -172, 600, - 17317, 17317, 17317, 17317, -1000, 316, 316, -1000, 11088, 2150, - 2150, -1000, -1000, 429, -1000, 1022, -1000, 429, 783, 783, - -1000, 783, 798, -1000, 783, -7, 783, -8, 429, 429, - 2034, 1908, 1875, 922, 738, -157, -1000, 563, 10053, -1000, - 1197, 757, -1000, -1000, 1047, 1025, 563, -1000, -1000, 985, - 519, 491, -1000, -1000, 8316, 671, 154, 664, -1000, 1028, - 17317, 10053, -1000, -1000, 10053, 790, -1000, 10053, -1000, -1000, - -1000, 1028, 738, 738, 738, 664, 1022, -1000, -1000, -1000, - -1000, 4059, -1000, 653, -1000, 783, -1000, -1000, -1000, 17317, - -70, 1069, 2150, -1000, -1000, -1000, -1000, -1000, -29, 434, - -29, 379, -1000, 368, 4775, -1000, -1000, -1000, -1000, 987, - -1000, 6207, -1000, -1000, 775, 774, -1000, -1000, -1000, -1000, - 2150, -1000, 974, -1000, -1000, 135, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 11088, 11088, 11088, 11088, 11088, 1022, - 421, 563, 11088, 11088, -1000, 10053, 10053, 978, -1000, 738, - -1000, 880, 17317, 17317, -1000, 17317, 1022, -1000, 563, 563, - 17317, 563, 14205, 17317, 17317, 12468, -1000, 183, 17317, -1000, - 612, -1000, 213, -1000, -131, 188, -1000, 188, 506, 494, - -1000, 738, 576, -1000, 246, 17317, 17317, -1000, -1000, -1000, - 406, 406, 406, 406, 57, 429, -1000, 406, 406, 563, - 544, 1067, -1000, 738, 1086, 153, -1000, -1000, -1000, 610, - 566, -1000, 566, 566, 178, 183, -1000, 600, 245, 418, - -1000, 68, 17317, 337, 976, -1000, 959, -1000, -1000, -1000, - -1000, -1000, 55, 6207, 4417, 541, -1000, -1000, -1000, -1000, - -1000, 429, 54, -175, -1000, -1000, -1000, 17317, 491, 17317, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 359, -1000, -1000, - 17317, -1000, -1000, 384, -1000, -1000, 488, -1000, 17317, -1000, - -1000, 587, -1000, 928, -170, -181, 478, -1000, -1000, 756, - -1000, -1000, 55, 937, -172, -1000, 921, -1000, 17317, -1000, - 52, -1000, -173, 480, 46, -179, 846, 738, -182, 845, - -1000, 1062, 10398, -1000, -1000, 1066, 193, 193, 406, 429, - -1000, -1000, -1000, 77, 403, -1000, -1000, -1000, -1000, -1000, - -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 17484, -1000, + -1000, -1000, -1000, -1000, 17484, -172, 531, 17484, 17484, 17484, + 17484, -1000, 337, 337, -1000, 11254, 1843, 1843, -1000, -1000, + 470, -1000, 898, -1000, 470, 739, 739, -1000, 739, 742, + -1000, 739, -16, 739, -17, 470, 470, 2293, 2224, 2191, + 1993, 728, -160, -1000, 421, 10219, -1000, 1880, 1760, -1000, + -1000, 932, 905, 421, -1000, -1000, -1000, 884, 597, 573, + -1000, -1000, 8481, 600, 160, 591, -1000, 912, 17484, 10219, + -1000, -1000, 10219, 740, -1000, 10219, -1000, -1000, -1000, 912, + 728, 728, 728, 591, 898, -1000, -1000, -1000, -1000, 4215, + -1000, 588, -1000, 739, -1000, -1000, -1000, 17484, -73, 962, + 1843, -1000, -1000, -1000, -1000, -1000, -47, 431, -47, 370, + -1000, 366, 4933, -1000, -1000, -1000, -1000, 872, -1000, 6369, + -1000, -1000, 735, 768, -1000, -1000, -1000, -1000, 1843, -1000, + 871, -1000, -1000, 142, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 11254, 11254, 11254, 11254, 11254, 898, 424, 421, + 11254, 11254, -1000, 10219, 10219, 880, -1000, 728, -1000, 716, + 17484, 17484, -1000, 17484, 898, -1000, 421, 421, 17484, 421, + 14372, 17484, 17484, 12634, -1000, 183, 17484, -1000, 584, -1000, + 202, -1000, -60, 189, -1000, 189, 502, 472, -1000, 728, + 612, -1000, 264, 17484, 17484, -1000, -1000, -1000, 1667, 1667, + 1667, 1667, 58, 470, -1000, 1667, 1667, 421, 609, 961, + -1000, 728, 971, 156, -1000, -1000, -1000, 580, 575, -1000, + 575, 575, 178, 183, -1000, 531, 249, 401, -1000, 69, + 17484, 346, 878, -1000, 873, -1000, -1000, -1000, -1000, -1000, + 59, 6369, 4574, 549, -1000, -1000, -1000, -1000, -1000, 470, + 54, -175, -1000, -1000, -1000, 17484, 573, 17484, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 361, -1000, -1000, 17484, -1000, + -1000, 400, -1000, -1000, 521, -1000, 17484, -1000, -1000, 765, + -1000, 828, -170, -180, 536, -1000, -1000, 729, -1000, -1000, + 59, 846, -172, -1000, 827, -1000, 17484, -1000, 55, -1000, + -173, 518, 52, -177, 774, 728, -181, 773, -1000, 943, + 10564, -1000, -1000, 955, 199, 199, 1667, 470, -1000, -1000, + -1000, 83, 428, -1000, -1000, -1000, -1000, -1000, -1000, } var yyPgo = [...]int{ - 0, 1343, 1341, 29, 67, 68, 1339, 1338, 1334, 94, - 93, 91, 1332, 1330, 1329, 1328, 1327, 1326, 1324, 1323, - 1322, 1321, 1318, 1317, 1316, 1315, 1311, 1309, 1308, 1295, - 1289, 1287, 86, 1286, 84, 1266, 1265, 1261, 1259, 1252, - 1251, 1250, 1249, 45, 261, 33, 61, 1248, 60, 1632, - 1247, 64, 55, 59, 1246, 28, 1243, 1241, 85, 1240, - 1237, 53, 1236, 1233, 522, 1231, 78, 1230, 11, 48, - 1229, 1227, 1226, 1225, 82, 276, 1224, 1223, 14, 1221, - 1220, 108, 1219, 62, 31, 13, 32, 24, 1217, 66, - 1216, 6, 1215, 65, 1214, 1213, 1212, 1210, 47, 1208, - 63, 1207, 40, 23, 1205, 12, 73, 27, 19, 7, - 1202, 1201, 18, 72, 52, 69, 1199, 1198, 446, 1194, - 1188, 46, 1186, 1185, 1182, 16, 1178, 100, 388, 1176, - 1174, 1172, 1171, 38, 1044, 1814, 22, 70, 1170, 1169, - 1168, 2602, 42, 58, 17, 1167, 1162, 1161, 54, 39, - 50, 402, 1160, 35, 1159, 1158, 1157, 1156, 1152, 1151, - 1150, 105, 1149, 1148, 1146, 89, 34, 1144, 1143, 71, - 20, 1142, 1140, 1139, 56, 74, 1138, 1137, 57, 1134, - 1128, 25, 1123, 1122, 1119, 1118, 1115, 26, 10, 1114, - 15, 1113, 9, 1112, 21, 1111, 4, 1109, 8, 1101, - 3, 0, 1099, 5, 36, 1, 1098, 2, 1096, 1094, - 1361, 1136, 79, 1092, 92, + 0, 1197, 1196, 48, 67, 68, 1195, 1192, 1191, 1190, + 91, 90, 88, 1188, 1186, 1182, 1181, 1179, 1178, 1177, + 1176, 1175, 1174, 1173, 1171, 1169, 1168, 1167, 1166, 1165, + 1164, 1163, 1158, 94, 1157, 78, 1156, 1155, 1154, 1152, + 1151, 1150, 1149, 1148, 34, 182, 55, 57, 1146, 58, + 62, 1145, 60, 69, 64, 1144, 28, 1142, 1141, 76, + 1140, 1139, 56, 1136, 1135, 70, 1133, 77, 1131, 11, + 35, 1129, 1126, 1125, 1124, 106, 2207, 1123, 1121, 14, + 1120, 1119, 101, 1118, 66, 33, 13, 18, 24, 1115, + 71, 1114, 10, 1113, 65, 1112, 1111, 1110, 1107, 32, + 1106, 59, 1105, 38, 23, 1098, 12, 75, 29, 21, + 6, 1097, 1096, 17, 72, 47, 73, 1095, 1090, 416, + 1089, 1088, 37, 1086, 1083, 1082, 20, 1080, 95, 364, + 1079, 1078, 1076, 1074, 30, 1048, 1843, 40, 81, 1072, + 1071, 1064, 2751, 42, 54, 16, 1062, 1060, 1056, 41, + 1229, 36, 415, 1055, 31, 1054, 1052, 1047, 1043, 1036, + 1032, 1030, 173, 1029, 1028, 1027, 89, 26, 1024, 1020, + 63, 25, 1019, 1018, 1016, 50, 74, 1015, 1014, 52, + 1011, 1009, 19, 1000, 999, 998, 997, 995, 22, 7, + 994, 15, 993, 8, 992, 27, 991, 4, 989, 9, + 988, 3, 0, 987, 5, 44, 1, 982, 2, 980, + 979, 1367, 1268, 82, 977, 93, } var yyR1 = [...]int{ - 0, 208, 209, 209, 1, 1, 1, 1, 1, 1, + 0, 209, 210, 210, 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, 201, - 201, 201, 20, 3, 3, 3, 3, 2, 2, 8, - 4, 5, 5, 9, 9, 35, 35, 10, 11, 11, - 11, 11, 212, 212, 58, 58, 59, 59, 106, 106, - 12, 13, 13, 115, 115, 114, 114, 114, 116, 116, - 116, 116, 151, 151, 14, 14, 14, 14, 14, 14, - 14, 203, 203, 202, 200, 200, 199, 199, 198, 21, - 183, 185, 185, 184, 184, 184, 184, 175, 154, 154, - 154, 154, 157, 157, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 156, 156, 156, 156, 156, 158, 158, - 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, - 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, - 160, 160, 160, 160, 160, 160, 174, 174, 161, 161, - 169, 169, 170, 170, 170, 167, 167, 168, 168, 171, - 171, 171, 163, 163, 164, 164, 172, 172, 165, 165, - 165, 166, 166, 166, 173, 173, 173, 173, 173, 162, - 162, 176, 176, 193, 193, 192, 192, 192, 182, 182, - 189, 189, 189, 189, 189, 179, 179, 179, 180, 180, - 178, 178, 181, 181, 191, 191, 190, 177, 177, 194, - 194, 194, 194, 206, 207, 205, 205, 205, 205, 205, - 186, 186, 186, 187, 187, 187, 188, 188, 188, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 197, 195, 195, 196, 196, 16, 22, 22, 17, 17, - 17, 17, 17, 18, 18, 23, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 122, 122, 124, 124, 120, 120, 123, - 123, 121, 121, 121, 125, 125, 125, 126, 126, 152, - 152, 152, 25, 25, 27, 27, 28, 29, 29, 146, - 146, 147, 147, 30, 31, 36, 36, 36, 36, 36, - 36, 38, 38, 38, 7, 7, 7, 7, 37, 37, - 37, 6, 6, 26, 26, 26, 26, 19, 213, 32, - 33, 33, 34, 34, 34, 40, 40, 40, 39, 39, - 39, 45, 45, 47, 47, 47, 47, 47, 48, 48, - 48, 48, 48, 48, 44, 44, 46, 46, 46, 46, - 138, 138, 138, 137, 137, 50, 50, 51, 51, 52, - 52, 53, 53, 53, 90, 67, 67, 105, 105, 107, - 107, 54, 54, 54, 54, 55, 55, 56, 56, 57, - 57, 145, 145, 144, 144, 144, 143, 143, 60, 60, - 60, 62, 61, 61, 61, 61, 63, 63, 65, 65, - 64, 64, 66, 68, 68, 68, 68, 68, 69, 69, - 49, 49, 49, 49, 49, 49, 49, 49, 119, 119, - 71, 71, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 82, 82, 82, 82, 82, 82, 72, 72, - 72, 72, 72, 72, 72, 43, 43, 83, 83, 83, - 89, 84, 84, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 79, 79, 79, - 79, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 214, 214, 81, 80, 80, 80, 80, 80, 80, 80, - 41, 41, 41, 41, 41, 150, 150, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 94, 94, 42, 42, 92, 92, 93, 95, 95, 91, - 91, 91, 74, 74, 74, 74, 74, 74, 74, 74, - 76, 76, 76, 96, 96, 97, 97, 98, 98, 99, - 99, 100, 101, 101, 101, 102, 102, 102, 102, 103, - 103, 103, 73, 73, 73, 73, 104, 104, 104, 104, - 108, 108, 85, 85, 87, 87, 86, 88, 109, 109, - 112, 110, 110, 113, 113, 113, 113, 113, 111, 111, - 111, 140, 140, 140, 117, 117, 127, 127, 128, 128, - 118, 118, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 130, 130, 130, 131, 131, 132, 132, 132, - 139, 139, 135, 135, 136, 136, 141, 141, 142, 142, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 202, 202, 202, 21, 3, 3, 3, 3, 2, 2, + 8, 9, 4, 5, 5, 10, 10, 36, 36, 11, + 12, 12, 12, 12, 213, 213, 59, 59, 60, 60, + 107, 107, 13, 14, 14, 116, 116, 115, 115, 115, + 117, 117, 117, 117, 152, 152, 15, 15, 15, 15, + 15, 15, 15, 204, 204, 203, 201, 201, 200, 200, + 199, 22, 184, 186, 186, 185, 185, 185, 185, 176, + 155, 155, 155, 155, 158, 158, 156, 156, 156, 156, + 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, + 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 161, 161, 161, 161, 161, 161, 161, 161, 175, 175, + 162, 162, 170, 170, 171, 171, 171, 168, 168, 169, + 169, 172, 172, 172, 164, 164, 165, 165, 173, 173, + 166, 166, 166, 167, 167, 167, 174, 174, 174, 174, + 174, 163, 163, 177, 177, 194, 194, 193, 193, 193, + 183, 183, 190, 190, 190, 190, 190, 180, 180, 180, + 181, 181, 179, 179, 182, 182, 192, 192, 191, 178, + 178, 195, 195, 195, 195, 207, 208, 206, 206, 206, + 206, 206, 187, 187, 187, 188, 188, 188, 189, 189, + 189, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 205, 205, + 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, + 205, 205, 198, 196, 196, 197, 197, 17, 23, 23, + 18, 18, 18, 18, 18, 19, 19, 24, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 123, 123, 125, 125, 121, + 121, 124, 124, 122, 122, 122, 126, 126, 126, 127, + 127, 153, 153, 153, 26, 26, 28, 28, 29, 30, + 30, 147, 147, 148, 148, 31, 32, 37, 37, 37, + 37, 37, 37, 39, 39, 39, 7, 7, 7, 7, + 38, 38, 38, 6, 6, 27, 27, 27, 27, 20, + 214, 33, 34, 34, 35, 35, 35, 41, 41, 41, + 40, 40, 40, 46, 46, 48, 48, 48, 48, 48, + 49, 49, 49, 49, 49, 49, 45, 45, 47, 47, + 47, 47, 139, 139, 139, 138, 138, 51, 51, 52, + 52, 53, 53, 54, 54, 54, 91, 68, 68, 106, + 106, 108, 108, 55, 55, 55, 55, 56, 56, 57, + 57, 58, 58, 146, 146, 145, 145, 145, 144, 144, + 61, 61, 61, 63, 62, 62, 62, 62, 64, 64, + 66, 66, 65, 65, 67, 69, 69, 69, 69, 69, + 70, 70, 50, 50, 50, 50, 50, 50, 50, 50, + 120, 120, 72, 72, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 83, 83, 83, 83, 83, 83, + 73, 73, 73, 73, 73, 73, 73, 44, 44, 84, + 84, 84, 90, 85, 85, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 80, + 80, 80, 80, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 215, 215, 82, 81, 81, 81, 81, 81, + 81, 81, 42, 42, 42, 42, 42, 151, 151, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 95, 95, 43, 43, 93, 93, 94, 96, + 96, 92, 92, 92, 75, 75, 75, 75, 75, 75, + 75, 75, 77, 77, 77, 97, 97, 98, 98, 99, + 99, 100, 100, 101, 102, 102, 102, 103, 103, 103, + 103, 104, 104, 104, 74, 74, 74, 74, 105, 105, + 105, 105, 109, 109, 86, 86, 88, 88, 87, 89, + 110, 110, 113, 111, 111, 114, 114, 114, 114, 114, + 112, 112, 112, 141, 141, 141, 118, 118, 128, 128, + 129, 129, 119, 119, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 131, 131, 131, 132, 132, 133, + 133, 133, 140, 140, 136, 136, 137, 137, 142, 142, + 143, 143, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, @@ -2949,80 +2951,98 @@ var yyR1 = [...]int{ 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 210, 211, 148, 149, 149, 149, + 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 211, 212, 149, 150, + 150, 150, } 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, 1, 1, 1, 1, 1, 0, 1, - 1, 1, 2, 4, 6, 6, 7, 4, 6, 5, - 8, 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, 3, 8, 3, 1, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 1, 2, - 2, 2, 1, 4, 4, 2, 2, 3, 3, 3, - 3, 1, 1, 1, 1, 1, 6, 6, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 3, 0, 3, - 0, 5, 0, 3, 5, 0, 1, 0, 1, 0, - 1, 2, 0, 2, 0, 3, 0, 1, 0, 3, - 3, 0, 2, 2, 0, 2, 1, 2, 1, 0, - 2, 5, 4, 1, 2, 2, 3, 2, 0, 1, - 2, 3, 3, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 0, 1, 1, 3, 2, 3, 1, 10, - 11, 11, 12, 3, 3, 1, 1, 2, 2, 2, - 0, 1, 3, 1, 2, 3, 1, 1, 1, 6, - 7, 7, 7, 7, 4, 5, 4, 4, 7, 5, - 5, 5, 12, 7, 5, 9, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 2, 4, 6, 6, 7, 4, 6, + 5, 7, 8, 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, 3, 8, + 3, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 1, 2, 2, 2, 1, 4, 4, 2, 2, 3, + 3, 3, 3, 1, 1, 1, 1, 1, 6, 6, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 0, 3, 0, 5, 0, 3, 5, 0, 1, 0, + 1, 0, 1, 2, 0, 2, 0, 3, 0, 1, + 0, 3, 3, 0, 2, 2, 0, 2, 1, 2, + 1, 0, 2, 5, 4, 1, 2, 2, 3, 2, + 0, 1, 2, 3, 3, 2, 2, 1, 1, 1, + 1, 1, 1, 1, 0, 1, 1, 3, 2, 3, + 1, 10, 11, 11, 12, 3, 3, 1, 1, 2, + 2, 2, 0, 1, 3, 1, 2, 3, 1, 1, + 1, 6, 7, 7, 7, 7, 4, 5, 4, 4, + 7, 5, 5, 5, 12, 7, 5, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 7, 1, 3, 8, 8, 3, 3, 5, 4, 6, - 5, 4, 4, 3, 2, 3, 4, 4, 3, 4, - 4, 4, 4, 4, 4, 3, 2, 7, 2, 3, - 4, 3, 7, 5, 4, 2, 4, 4, 3, 3, - 5, 2, 3, 1, 1, 0, 1, 0, 1, 1, - 1, 0, 2, 2, 0, 2, 2, 0, 2, 0, - 1, 1, 2, 1, 1, 2, 1, 1, 5, 0, - 1, 0, 1, 2, 3, 0, 3, 3, 3, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, - 1, 3, 3, 2, 2, 3, 3, 2, 0, 2, - 0, 2, 1, 2, 2, 0, 1, 1, 0, 1, - 1, 0, 1, 0, 1, 2, 3, 4, 1, 1, - 1, 1, 1, 1, 1, 3, 1, 2, 3, 5, - 0, 1, 2, 1, 1, 0, 2, 1, 3, 1, - 1, 1, 3, 3, 3, 3, 7, 1, 3, 1, - 3, 4, 4, 4, 3, 2, 4, 0, 1, 0, - 2, 0, 1, 0, 1, 2, 1, 1, 1, 2, - 2, 1, 2, 3, 2, 3, 2, 2, 2, 1, - 1, 3, 3, 0, 5, 4, 5, 5, 0, 2, - 1, 3, 3, 3, 2, 3, 1, 2, 0, 3, - 1, 1, 3, 3, 4, 4, 5, 3, 4, 5, - 6, 2, 1, 2, 1, 2, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 0, 2, 1, 1, 1, - 3, 1, 3, 1, 1, 1, 1, 1, 3, 3, + 1, 1, 7, 1, 3, 8, 8, 3, 3, 5, + 4, 6, 5, 4, 4, 3, 2, 3, 4, 4, + 3, 4, 4, 4, 4, 4, 4, 3, 2, 7, + 2, 3, 4, 3, 7, 5, 4, 2, 4, 4, + 3, 3, 5, 2, 3, 1, 1, 0, 1, 0, + 1, 1, 1, 0, 2, 2, 0, 2, 2, 0, + 2, 0, 1, 1, 2, 1, 1, 2, 1, 1, + 5, 0, 1, 0, 1, 2, 3, 0, 3, 3, + 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 3, 3, 2, 2, 3, 3, 2, + 0, 2, 0, 2, 1, 2, 2, 0, 1, 1, + 0, 1, 1, 0, 1, 0, 1, 2, 3, 4, + 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, + 3, 5, 0, 1, 2, 1, 1, 0, 2, 1, + 3, 1, 1, 1, 3, 3, 3, 3, 7, 1, + 3, 1, 3, 4, 4, 4, 3, 2, 4, 0, + 1, 0, 2, 0, 1, 0, 1, 2, 1, 1, + 1, 2, 2, 1, 2, 3, 2, 3, 2, 2, + 2, 1, 1, 3, 3, 0, 5, 4, 5, 5, + 0, 2, 1, 3, 3, 3, 2, 3, 1, 2, + 0, 3, 1, 1, 3, 3, 4, 4, 5, 3, + 4, 5, 6, 2, 1, 2, 1, 2, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, + 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 1, 1, 1, 1, 4, 5, 5, - 6, 4, 4, 6, 6, 6, 8, 8, 8, 8, - 9, 8, 5, 4, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, - 0, 2, 3, 4, 4, 4, 4, 4, 4, 4, - 0, 3, 4, 7, 3, 1, 1, 2, 3, 3, - 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, - 0, 1, 0, 2, 1, 2, 4, 0, 2, 1, - 3, 5, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 0, 3, 0, 2, 0, 3, 1, - 3, 2, 0, 1, 1, 0, 2, 4, 4, 0, - 2, 4, 2, 1, 5, 4, 1, 3, 3, 5, - 0, 5, 1, 3, 1, 2, 3, 1, 1, 3, - 3, 1, 3, 3, 3, 3, 3, 2, 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, 3, 3, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 1, 1, 1, 1, 4, + 5, 5, 6, 4, 4, 6, 6, 6, 8, 8, + 8, 8, 9, 8, 5, 4, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 8, 8, 0, 2, 3, 4, 4, 4, 4, 4, + 4, 4, 0, 3, 4, 7, 3, 1, 1, 2, + 3, 3, 1, 2, 2, 1, 2, 1, 2, 2, + 1, 2, 0, 1, 0, 2, 1, 2, 4, 0, + 2, 1, 3, 5, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 0, 3, 0, 2, 0, + 3, 1, 3, 2, 0, 1, 1, 0, 2, 4, + 4, 0, 2, 4, 2, 1, 5, 4, 1, 3, + 3, 5, 0, 5, 1, 3, 1, 2, 3, 1, + 1, 3, 3, 1, 3, 3, 3, 3, 3, 2, + 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, @@ -3052,353 +3072,354 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, } var yyChk = [...]int{ - -1000, -208, -1, -3, -8, -9, -10, -11, -12, -13, - -14, -15, -16, -17, -18, -23, -24, -25, -27, -28, - -29, -30, -31, -6, -26, -19, -20, -4, -210, 6, - 7, -35, 9, 10, 30, -21, 123, 124, 126, 125, - 159, 127, 152, 53, 173, 174, 176, 177, 178, 179, - -38, 157, 158, 31, 32, 129, 34, 57, 8, 262, - 154, 153, 25, -209, 364, -34, 5, -98, 15, -3, - -32, -213, -32, -32, -32, -32, -32, -183, -185, 57, - 96, -132, 133, 77, 254, 130, 131, 137, -135, -201, - -134, 60, 61, 62, 272, 145, 304, 305, 173, 187, - 181, 208, 200, 273, 306, 146, 198, 201, 241, 143, - 307, 228, 235, 71, 176, 250, 308, 155, 196, 192, - 309, 281, 190, 27, 310, 237, 213, 311, 277, 239, - 191, 236, 129, 312, 148, 360, 141, 313, 214, 218, - 314, 242, 315, 316, 317, 185, 186, 318, 144, 244, - 212, 142, 33, 274, 37, 163, 245, 216, 319, 211, - 207, 320, 321, 322, 323, 210, 184, 206, 41, 220, - 219, 221, 240, 203, 324, 325, 326, 149, 327, 193, - 18, 328, 329, 330, 331, 332, 248, 158, 333, 161, - 334, 335, 336, 337, 338, 339, 238, 215, 217, 138, - 165, 234, 276, 340, 246, 189, 341, 150, 162, 157, - 249, 151, 342, 343, 344, 345, 346, 347, 348, 177, - 349, 350, 351, 352, 172, 243, 252, 40, 225, 353, - 183, 140, 354, 174, 169, 230, 204, 164, 355, 356, - 194, 195, 209, 182, 205, 175, 361, 166, 159, 357, - 251, 226, 278, 202, 199, 170, 358, 167, 168, 359, - 362, 231, 232, 171, 275, 247, 197, 227, -118, 133, - 254, 130, 232, 135, 131, 131, 132, 133, 254, 130, - 131, -64, -141, -201, -134, 133, 131, 114, 201, 241, - 123, 229, 237, -124, 238, 165, -152, 131, -120, 228, - 231, 232, 171, -201, 239, 243, 242, 233, -141, 175, - -146, 180, -135, 178, -64, -36, 360, 127, -148, -148, - 230, 230, -148, -84, -49, -70, 80, -75, 29, 23, - -74, -71, -91, -88, -89, 114, 115, 117, 116, 118, - 103, 104, 111, 81, 119, -79, -77, -78, -80, 64, - 63, 72, 65, 66, 67, 68, 73, 74, 75, -135, - -141, -86, -210, 47, 48, 263, 264, 265, 266, 271, - 267, 83, 36, 253, 261, 260, 259, 257, 258, 255, - 256, 269, 270, 136, 254, 130, 109, 262, -201, -134, - -5, -4, -210, 6, 20, 21, -102, 17, 16, -211, - 59, -40, -47, 42, 43, -48, 21, 35, 46, 44, - -33, -46, 105, -49, -141, -118, -118, 11, -58, -59, - -64, -66, -141, -110, -151, 175, -113, 243, 242, -136, - -111, -135, -133, 241, 201, 240, 128, 279, 79, 22, - 24, 223, 82, 114, 16, 83, 113, 263, 123, 51, - 280, 255, 256, 253, 265, 266, 254, 229, 29, 10, - 282, 25, 153, 21, 35, 107, 125, 86, 87, 156, - 23, 154, 75, 285, 19, 54, 11, 13, 286, 287, - 14, 136, 135, 98, 132, 49, 8, 119, 26, 95, - 45, 288, 28, 289, 290, 291, 292, 47, 96, 17, - 257, 258, 31, 293, 271, 160, 109, 52, 38, 80, - 294, 295, 73, 296, 76, 55, 77, 15, 50, 297, - 298, 299, 300, 97, 126, 262, 48, 301, 130, 6, - 268, 30, 152, 46, 302, 131, 85, 269, 270, 134, - 74, 5, 137, 32, 9, 53, 56, 259, 260, 261, - 36, 84, 12, 303, 78, -184, 96, -175, -201, -64, - 132, -64, 262, -128, 136, -128, -128, 131, -64, -201, - -201, 123, 125, 128, 55, -22, -64, -127, 136, -201, - -127, -127, -127, -64, 120, -64, -201, 30, -125, 96, - 12, 254, -201, 165, 131, 166, 133, -149, -210, -136, - -179, 132, 33, 144, -149, 169, 170, -149, -123, -122, - 235, 236, 230, 234, 12, 170, 230, 168, -149, 134, - -135, -37, -135, 64, -7, -3, -10, -9, -11, 88, - -148, -148, 58, 79, 77, 78, 95, -49, -72, 98, - 80, 96, 97, 82, 100, 99, 110, 103, 104, 105, - 106, 107, 108, 109, 101, 102, 113, 88, 89, 90, - 91, 92, 93, 94, -119, -210, -89, -210, 121, 122, - -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, - -210, 120, -2, -84, -4, -210, -210, -210, -210, -210, - -210, -210, -210, -94, -49, -210, -214, -81, -210, -214, - -81, -214, -81, -214, -210, -214, -81, -214, -81, -214, - -214, -81, -210, -210, -210, -210, -210, -210, -210, -98, - -3, -32, -103, 19, 31, -49, -99, -100, -49, -98, - 38, -44, -46, -48, 42, 43, 70, 11, -138, -137, - 22, -135, 64, 120, -65, 26, -64, -51, -52, -53, - -54, -67, -90, -210, -64, -64, -58, -212, 58, 11, - 56, -212, 58, 120, 58, 175, -113, -151, -115, -114, - 244, 246, 88, -140, -135, 64, 29, 30, 59, 58, - -64, -154, -157, -159, -158, -160, -155, -156, 198, 199, - 114, 202, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 30, 155, 194, 195, 196, 197, 214, 215, - 216, 217, 218, 219, 220, 221, 181, 200, 273, 182, - 183, 184, 185, 186, 187, 189, 190, 191, 192, 193, - -201, -149, 133, -201, 80, -201, -64, -64, -149, -149, - -149, 167, 167, 131, 131, 172, -64, 58, 134, -58, - 23, 55, -64, -201, -201, -142, -141, -133, -149, -125, - 64, -49, -149, -149, -149, -64, -149, -149, -180, 11, - 98, -149, -149, 11, -121, 11, 98, -49, -126, 96, - 55, -147, 178, 212, 361, 362, 363, -49, -49, -49, - -49, -82, 73, 80, 74, 75, -75, -83, -86, -89, - 69, 98, 96, 97, 82, -75, -75, -75, -75, -75, - -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, - -150, -201, 64, -201, -74, -74, -135, -45, 21, 35, - -44, -136, -142, -133, -34, -211, -211, -98, -44, -44, - -49, -49, -91, 64, -44, -91, 64, -44, -44, -39, - 21, 35, -92, -93, 84, -91, -135, -141, -211, -75, - -135, -135, -44, -45, -45, -44, -44, -102, -211, 9, - 98, 58, 18, 58, -101, 24, 25, -102, -76, -135, - 65, 68, -50, 58, 11, -48, -64, -137, 105, -142, - -106, 161, -64, 30, 58, -60, -62, -61, -63, 45, - 49, 51, 46, 47, 48, 52, -145, 22, -51, -3, - -210, -144, 161, -143, 22, -141, 64, -106, 56, -51, - -64, -51, -66, -141, 105, -113, -115, 58, 245, 247, - 248, 55, 76, -49, -166, 113, -186, -187, -188, -136, - 64, 65, -175, -176, -177, -189, 147, -194, 138, 140, - 137, -178, 148, 132, 28, 59, -171, 73, 80, -167, - 226, -161, 57, -161, -161, -161, -161, -165, 201, -165, - -165, -165, 57, 57, -161, -161, -161, -169, 57, -169, - -169, -170, 57, -170, -139, 56, -64, -149, 23, -149, - -129, 128, 125, 126, -197, 124, 223, 201, 71, 29, - 15, 263, 161, 278, -201, 162, -64, -64, -64, -64, - -64, 128, 125, -64, -64, -64, -149, -64, -64, -125, - -141, -141, 64, -64, -135, 73, 74, 75, -83, -75, - -75, -75, -43, 156, 79, -211, -211, -44, -44, -210, - 120, -5, -102, -211, -211, 58, 56, 22, 11, 11, - -211, 11, 11, -211, -211, -44, -95, -93, 86, -49, - -211, 120, -211, 58, 58, -211, -211, -211, -211, -211, - -103, 40, -49, -49, -100, -103, -117, 19, 11, 36, - 36, -69, 12, -46, -51, -48, 120, -73, 30, 36, - -3, -210, -210, -109, -112, -91, -52, -53, -53, -52, - -53, 45, 45, 45, 50, 45, 50, 45, -61, -141, - -211, -211, -3, -68, 53, 135, 54, -210, -143, -69, - -51, -69, -69, 120, -114, -116, 249, 246, 252, -201, - 64, 58, -188, 88, 57, -201, 28, -178, -178, -181, - -201, -181, 28, -163, 29, 73, -168, 227, 65, -165, - -165, -166, 30, -166, -166, -166, -174, 64, -174, 65, - 65, 55, -135, -149, -148, -204, 143, 139, 147, 148, - 141, 60, 61, 62, 132, 28, 138, 140, 161, 137, - -204, -130, -131, 134, 22, 132, 28, 161, -203, 56, - 167, 223, 167, 134, -149, -121, -121, -43, 79, -75, - -75, -211, -211, -45, -136, -98, -103, -153, 114, 198, - 155, 196, 192, 212, 203, 225, 194, 226, -150, -153, - -75, -75, -75, -75, 272, -98, 87, -49, 85, -136, - -75, -75, 41, -64, -96, 13, -49, 105, -108, 55, - -109, -85, -87, -86, -210, -104, -135, -107, -135, -69, - 58, 88, -56, -55, 55, 56, -57, 55, -55, 45, - 45, -211, 132, 132, 132, -107, -98, -69, 246, 250, - 251, -187, -188, -191, -190, -135, -194, -181, -181, 57, - -164, 55, -75, 59, -166, -166, -201, 114, 59, 58, - 59, 58, 59, 58, -64, -148, -148, -64, -148, -135, - -200, 275, -202, -201, -135, -135, -135, -64, -125, -125, - -75, -211, -102, -211, -161, -161, -161, -170, -161, 186, - -161, 186, -211, -211, 19, 19, 19, 19, -210, -42, - 268, -49, 58, 58, -97, 14, 16, 27, -108, 58, - -211, -211, 58, 120, -211, 58, -98, -112, -49, -49, - 57, -49, -210, -210, -210, -211, -102, 59, 58, -161, - -105, -135, -172, 223, 9, -165, 64, -165, 65, 65, - -149, 26, -199, -198, -136, 57, 56, -103, -165, -201, - -75, -75, -75, -75, -75, -102, 64, -75, -75, -49, - -84, 28, -87, 36, -3, -135, -135, -135, -102, -105, - -105, -211, -105, -105, -144, -193, -192, 56, 142, 71, - -190, 59, 58, -173, 138, 28, 137, -78, -166, -166, - 59, 59, -210, 58, 88, -105, -64, -211, -211, -211, - -211, -41, 98, 275, -211, -211, -211, 9, -85, 120, - 59, -211, -211, -211, -68, -192, -201, -182, 88, 64, - 150, -135, -162, 71, 28, 28, -195, -196, 161, -198, - -188, 59, -211, 273, 52, 276, -109, -135, 65, -64, - 64, -211, 58, -135, -203, 41, 274, 277, 57, -196, - 36, -200, 41, -105, 163, 275, 59, 164, 276, -206, - -207, 55, -210, 277, -207, 55, 10, 9, -75, 160, - -205, 151, 146, 149, 30, -205, -211, -211, 145, 29, - 73, + -1000, -209, -1, -3, -8, -9, -10, -11, -12, -13, + -14, -15, -16, -17, -18, -19, -24, -25, -26, -28, + -29, -30, -31, -32, -6, -27, -20, -21, -4, -211, + 6, 7, 8, -36, 10, 11, 31, -22, 124, 125, + 127, 126, 160, 128, 153, 54, 174, 175, 177, 178, + 179, 180, -39, 158, 159, 32, 33, 130, 35, 58, + 9, 263, 155, 154, 26, -210, 365, -35, 5, -99, + 16, -3, -33, -214, -33, -33, -33, -33, -33, -33, + -184, -186, 58, 97, -133, 134, 78, 255, 131, 132, + 138, -136, -202, -135, 61, 62, 63, 273, 146, 305, + 306, 174, 188, 182, 209, 201, 274, 307, 147, 199, + 202, 242, 144, 308, 229, 236, 72, 177, 251, 309, + 156, 197, 193, 310, 282, 191, 28, 311, 238, 214, + 312, 278, 240, 192, 237, 130, 313, 149, 361, 142, + 314, 215, 219, 315, 243, 316, 317, 318, 186, 187, + 319, 145, 245, 213, 143, 34, 275, 38, 164, 246, + 217, 320, 212, 208, 321, 322, 323, 324, 211, 185, + 207, 42, 221, 220, 222, 241, 204, 325, 326, 327, + 150, 328, 194, 19, 329, 330, 331, 332, 333, 249, + 159, 334, 162, 335, 336, 337, 338, 339, 340, 239, + 216, 218, 139, 166, 235, 277, 341, 247, 190, 342, + 151, 163, 158, 250, 152, 343, 344, 345, 346, 347, + 348, 349, 178, 350, 351, 352, 353, 173, 244, 253, + 41, 226, 354, 184, 141, 355, 175, 170, 231, 205, + 165, 356, 357, 195, 196, 210, 183, 206, 176, 362, + 167, 160, 358, 252, 227, 279, 203, 200, 171, 359, + 168, 169, 360, 363, 232, 233, 172, 276, 248, 198, + 228, -119, 134, 255, 131, 233, 136, 132, 132, 133, + 134, 255, 131, 132, -65, -142, -202, -135, 134, 132, + 115, 202, 242, 124, 230, 238, -125, 239, 166, -153, + 132, -121, 229, 232, 233, 172, -202, 240, 244, 243, + 234, -142, 176, -147, 181, -136, 179, -65, -37, 361, + 128, -149, -149, 231, 231, -149, -85, -50, -71, 81, + -76, 30, 24, -75, -72, -92, -89, -90, 115, 116, + 118, 117, 119, 104, 105, 112, 82, 120, -80, -78, + -79, -81, 65, 64, 73, 66, 67, 68, 69, 74, + 75, 76, -136, -142, -87, -211, 48, 49, 264, 265, + 266, 267, 272, 268, 84, 37, 254, 262, 261, 260, + 258, 259, 256, 257, 270, 271, 137, 255, 131, 110, + 263, -202, -135, -5, -4, -211, 6, 21, 22, -103, + 18, 17, -212, 60, -41, -48, 43, 44, -49, 22, + 36, 47, 45, -34, -47, 106, -50, -142, -47, -119, + -119, 12, -59, -60, -65, -67, -142, -111, -152, 176, + -114, 244, 243, -137, -112, -136, -134, 242, 202, 241, + 129, 280, 80, 23, 25, 224, 83, 115, 17, 84, + 114, 264, 124, 52, 281, 256, 257, 254, 266, 267, + 255, 230, 30, 11, 283, 26, 154, 22, 36, 108, + 126, 87, 88, 157, 24, 155, 76, 286, 20, 55, + 12, 14, 287, 288, 15, 137, 136, 99, 133, 50, + 9, 120, 27, 96, 46, 289, 29, 290, 291, 292, + 293, 48, 97, 18, 258, 259, 32, 294, 272, 161, + 110, 53, 39, 81, 295, 296, 74, 297, 77, 56, + 78, 16, 51, 298, 299, 300, 301, 98, 127, 263, + 49, 302, 131, 6, 269, 31, 153, 47, 303, 132, + 86, 270, 271, 135, 75, 5, 138, 33, 10, 54, + 57, 260, 261, 262, 37, 85, 13, 304, 79, -185, + 97, -176, -202, -65, 133, -65, 263, -129, 137, -129, + -129, 132, -65, -202, -202, 124, 126, 129, 56, -23, + -65, -128, 137, -202, -128, -128, -128, -65, 121, -65, + -202, 31, -126, 97, 13, 255, -202, 166, 132, 167, + 134, -150, -211, -137, -180, 133, 34, 145, -150, 170, + 171, -150, -124, -123, 236, 237, 231, 235, 13, 171, + 231, 169, -150, 135, -136, -38, -136, 65, -7, -3, + -11, -10, -12, 89, -149, -149, 59, 80, 78, 79, + 96, -50, -73, 99, 81, 97, 98, 83, 101, 100, + 111, 104, 105, 106, 107, 108, 109, 110, 102, 103, + 114, 89, 90, 91, 92, 93, 94, 95, -120, -211, + -90, -211, 122, 123, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -211, 121, -2, -85, -4, -211, + -211, -211, -211, -211, -211, -211, -211, -95, -50, -211, + -215, -82, -211, -215, -82, -215, -82, -215, -211, -215, + -82, -215, -82, -215, -215, -82, -211, -211, -211, -211, + -211, -211, -211, -99, -3, -33, -104, 20, 32, -50, + -100, -101, -50, -99, 39, -45, -47, -49, 43, 44, + 71, 12, -139, -138, 23, -136, 65, 121, 12, -66, + 27, -65, -52, -53, -54, -55, -68, -91, -211, -65, + -65, -59, -213, 59, 12, 57, -213, 59, 121, 59, + 176, -114, -152, -116, -115, 245, 247, 89, -141, -136, + 65, 30, 31, 60, 59, -65, -155, -158, -160, -159, + -161, -156, -157, 199, 200, 115, 203, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 31, 156, 195, + 196, 197, 198, 215, 216, 217, 218, 219, 220, 221, + 222, 182, 201, 274, 183, 184, 185, 186, 187, 188, + 190, 191, 192, 193, 194, -202, -150, 134, -202, 81, + -202, -65, -65, -150, -150, -150, 168, 168, 132, 132, + 173, -65, 59, 135, -59, 24, 56, -65, -202, -202, + -143, -142, -134, -150, -126, 65, -50, -150, -150, -150, + -65, -150, -150, -181, 12, 99, -150, -150, 12, -122, + 12, 99, -50, -127, 97, 56, -148, 179, 213, 362, + 363, 364, -50, -50, -50, -50, -83, 74, 81, 75, + 76, -76, -84, -87, -90, 70, 99, 97, 98, 83, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -151, -202, 65, -202, -75, + -75, -136, -46, 22, 36, -45, -137, -143, -134, -35, + -212, -212, -99, -45, -45, -50, -50, -92, 65, -45, + -92, 65, -45, -45, -40, 22, 36, -93, -94, 85, + -92, -136, -142, -212, -76, -136, -136, -45, -46, -46, + -45, -45, -103, -212, 10, 99, 59, 19, 59, -102, + 25, 26, -103, -77, -136, 66, 69, -51, 59, 12, + -49, -65, -138, 106, -143, -65, -107, 162, -65, 31, + 59, -61, -63, -62, -64, 46, 50, 52, 47, 48, + 49, 53, -146, 23, -52, -3, -211, -145, 162, -144, + 23, -142, 65, -107, 57, -52, -65, -52, -67, -142, + 106, -114, -116, 59, 246, 248, 249, 56, 77, -50, + -167, 114, -187, -188, -189, -137, 65, 66, -176, -177, + -178, -190, 148, -195, 139, 141, 138, -179, 149, 133, + 29, 60, -172, 74, 81, -168, 227, -162, 58, -162, + -162, -162, -162, -166, 202, -166, -166, -166, 58, 58, + -162, -162, -162, -170, 58, -170, -170, -171, 58, -171, + -140, 57, -65, -150, 24, -150, -130, 129, 126, 127, + -198, 125, 224, 202, 72, 30, 16, 264, 162, 279, + -202, 163, -65, -65, -65, -65, -65, 129, 126, -65, + -65, -65, -150, -65, -65, -126, -142, -142, 65, -65, + -136, 74, 75, 76, -84, -76, -76, -76, -44, 157, + 80, -212, -212, -45, -45, -211, 121, -5, -103, -212, + -212, 59, 57, 23, 12, 12, -212, 12, 12, -212, + -212, -45, -96, -94, 87, -50, -212, 121, -212, 59, + 59, -212, -212, -212, -212, -212, -104, 41, -50, -50, + -101, -104, -118, 20, 12, 37, 37, -70, 13, -47, + -52, -49, 121, -70, -74, 31, 37, -3, -211, -211, + -110, -113, -92, -53, -54, -54, -53, -54, 46, 46, + 46, 51, 46, 51, 46, -62, -142, -212, -212, -3, + -69, 54, 136, 55, -211, -144, -70, -52, -70, -70, + 121, -115, -117, 250, 247, 253, -202, 65, 59, -189, + 89, 58, -202, 29, -179, -179, -182, -202, -182, 29, + -164, 30, 74, -169, 228, 66, -166, -166, -167, 31, + -167, -167, -167, -175, 65, -175, 66, 66, 56, -136, + -150, -149, -205, 144, 140, 148, 149, 142, 61, 62, + 63, 133, 29, 139, 141, 162, 138, -205, -131, -132, + 135, 23, 133, 29, 162, -204, 57, 168, 224, 168, + 135, -150, -122, -122, -44, 80, -76, -76, -212, -212, + -46, -137, -99, -104, -154, 115, 199, 156, 197, 193, + 213, 204, 226, 195, 227, -151, -154, -76, -76, -76, + -76, 273, -99, 88, -50, 86, -137, -76, -76, 42, + -65, -97, 14, -50, 106, -103, -109, 56, -110, -86, + -88, -87, -211, -105, -136, -108, -136, -70, 59, 89, + -57, -56, 56, 57, -58, 56, -56, 46, 46, -212, + 133, 133, 133, -108, -99, -70, 247, 251, 252, -188, + -189, -192, -191, -136, -195, -182, -182, 58, -165, 56, + -76, 60, -167, -167, -202, 115, 60, 59, 60, 59, + 60, 59, -65, -149, -149, -65, -149, -136, -201, 276, + -203, -202, -136, -136, -136, -65, -126, -126, -76, -212, + -103, -212, -162, -162, -162, -171, -162, 187, -162, 187, + -212, -212, 20, 20, 20, 20, -211, -43, 269, -50, + 59, 59, -98, 15, 17, 28, -109, 59, -212, -212, + 59, 121, -212, 59, -99, -113, -50, -50, 58, -50, + -211, -211, -211, -212, -103, 60, 59, -162, -106, -136, + -173, 224, 10, -166, 65, -166, 66, 66, -150, 27, + -200, -199, -137, 58, 57, -104, -166, -202, -76, -76, + -76, -76, -76, -103, 65, -76, -76, -50, -85, 29, + -88, 37, -3, -136, -136, -136, -103, -106, -106, -212, + -106, -106, -145, -194, -193, 57, 143, 72, -191, 60, + 59, -174, 139, 29, 138, -79, -167, -167, 60, 60, + -211, 59, 89, -106, -65, -212, -212, -212, -212, -42, + 99, 276, -212, -212, -212, 10, -86, 121, 60, -212, + -212, -212, -69, -193, -202, -183, 89, 65, 151, -136, + -163, 72, 29, 29, -196, -197, 162, -199, -189, 60, + -212, 274, 53, 277, -110, -136, 66, -65, 65, -212, + 59, -136, -204, 42, 275, 278, 58, -197, 37, -201, + 42, -106, 164, 276, 60, 165, 277, -207, -208, 56, + -211, 278, -208, 56, 11, 10, -76, 161, -206, 152, + 147, 150, 31, -206, -212, -212, 146, 30, 74, } var yyDef = [...]int{ - 28, -2, 2, 4, 5, 6, 7, 8, 9, 10, + 29, -2, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 617, 0, 358, - 358, 358, 358, 358, 358, 0, 687, 670, 0, 0, - 0, 0, -2, 323, 324, 0, 326, -2, 0, 0, - 335, 996, 996, 0, 0, 996, 0, 994, 45, 46, - 341, 342, 343, 1, 3, 0, 362, 625, 0, 0, - -2, 360, 0, 670, 670, 0, 0, 74, 75, 0, - 0, 0, 982, 0, 668, 668, 668, 688, 689, 692, - 693, 29, 30, 31, 819, 820, 821, 822, 823, 824, - 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, - 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, - 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, - 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, - 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, - 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, - 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, - 895, 896, 897, 898, 899, 900, 901, 902, 903, 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, 939, 940, 941, 942, 943, 944, - 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, - 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, - 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, - 975, 976, 977, 978, 979, 980, 981, 983, 984, 985, - 986, 987, 988, 989, 990, 991, 992, 993, 0, 0, - 0, 0, 0, 671, 0, 666, 0, 666, 666, 666, - 0, 274, 440, 696, 697, 982, 0, 0, 0, 314, - 0, 997, 286, 0, 288, 997, 0, 997, 0, 295, - 0, 0, 301, 997, 306, 320, 321, 308, 322, 325, - 0, 330, 333, 0, 348, 0, 860, 340, 353, 354, - 996, 996, 357, 32, 491, 450, 0, 456, 458, 0, - 493, 494, 495, 496, 497, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 523, 524, 525, 526, 602, - 603, 604, 605, 606, 607, 608, 609, 460, 461, 599, - 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 590, 0, 560, 560, 560, 560, 560, 560, 560, - 560, 0, 0, 0, 0, 0, 0, 0, -2, -2, - 617, 41, 0, 358, 363, 364, 629, 0, 0, 617, - 995, 0, 0, -2, -2, 374, 380, 381, 382, 383, - 359, 0, 386, 390, 0, 0, 0, 0, 0, 0, - 54, 56, 440, 60, 0, 970, 651, -2, -2, 0, - 0, 694, 695, -2, 832, -2, 700, 701, 702, 703, - 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, - 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, - 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, - 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, - 744, 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, 779, 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, - 814, 815, 816, 817, 818, 0, 0, 93, 0, 91, - 0, 997, 0, 0, 0, 0, 0, 0, 997, 997, - 997, 0, 0, 0, 0, 265, 0, 0, 0, 0, - 0, 0, 0, 273, 0, 275, 997, 314, 278, 0, - 0, 997, 997, 997, 0, 997, 997, 285, 998, 999, - 0, 195, 196, 197, 289, 997, 997, 291, 0, 311, - 309, 310, 303, 304, 0, 317, 298, 299, 302, 331, - 334, 351, 349, 350, 352, 344, 345, 346, 347, 0, - 355, 356, 0, 0, 0, 0, 0, 454, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 478, 479, 480, - 481, 482, 483, 484, 457, 0, 471, 0, 0, 0, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 0, - 371, 0, 0, 0, 617, 0, 0, 0, 0, 0, - 0, 0, 368, 0, 591, 0, 544, 552, 0, 545, - 553, 546, 554, 547, 0, 548, 555, 549, 556, 550, - 551, 557, 0, 0, 0, 371, 371, 0, 0, 625, - 0, 373, 33, 0, 0, 626, 618, 619, 622, 625, - 0, 395, 384, 375, 378, 379, 361, 0, 387, 391, - 0, 393, 394, 0, 58, 0, 439, 0, 397, 399, - 400, 401, 421, 0, 423, -2, 0, 0, 0, 52, - 53, 0, 0, 0, 0, 970, 657, 0, 62, 63, - 0, 0, 0, 171, 661, 662, 663, 659, 220, 0, - 0, 159, 155, 99, 100, 101, 148, 103, 148, 148, - 148, 148, 168, 168, 168, 168, 131, 132, 133, 134, - 135, 0, 0, 118, 148, 148, 148, 122, 138, 139, - 140, 141, 142, 143, 144, 145, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 150, 150, 150, 152, 152, - 690, 77, 0, 997, 0, 997, 89, 0, 234, 236, - 237, 0, 0, 0, 0, 0, 0, 0, 0, 268, - 667, 0, 997, 271, 272, 441, 698, 699, 276, 277, - 315, 316, 279, 280, 281, 282, 283, 284, 0, 198, - 199, 290, 294, 0, 314, 0, 0, 296, 297, 0, - 0, 0, 332, 336, 337, 338, 339, 492, 451, 452, - 453, 455, 472, 0, 474, 476, 462, 463, 487, 488, - 489, 0, 0, 0, 0, 485, 467, 0, 498, 499, - 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, - 512, 575, 576, 0, 510, 511, 522, 0, 0, 0, - 372, 600, 0, -2, 0, 490, 646, 625, 0, 0, - 0, 0, 495, 602, 0, 495, 602, 0, 0, 0, - 369, 370, 597, 594, 0, 0, 599, 0, 561, 0, - 0, 0, 0, 0, 0, 0, 0, 629, 42, 630, - 0, 0, 0, 0, 621, 623, 624, 629, 0, 610, - 0, 0, 448, 0, 0, 376, 39, 392, 388, 0, - 0, 0, 438, 0, 0, 0, 0, 0, 0, 428, - 0, 0, 431, 0, 0, 0, 0, 422, 0, 0, - 0, 443, 914, 424, 0, 426, 427, 448, 0, 448, - 55, 448, 57, 0, 442, 652, 61, 0, 0, 66, - 67, 653, 654, 655, 656, 0, 90, 221, 223, 226, - 227, 228, 94, 95, 96, 0, 0, 208, 0, 0, - 202, 202, 0, 200, 201, 92, 162, 160, 0, 157, - 156, 102, 0, 168, 168, 125, 126, 171, 0, 171, - 171, 171, 0, 0, 119, 120, 121, 113, 0, 114, - 115, 116, 0, 117, 0, 0, 997, 79, 669, 80, - 996, 0, 0, 682, 235, 672, 673, 674, 675, 676, - 677, 678, 679, 680, 681, 0, 81, 239, 241, 240, - 244, 0, 0, 0, 266, 997, 270, 311, 311, 293, - 312, 313, 318, 300, 328, 473, 475, 477, 464, 485, - 468, 0, 465, 0, 0, 459, 527, 0, 0, 371, - 0, 617, 629, 531, 532, 0, 0, 0, 0, 0, - 568, 0, 0, 569, 0, 617, 0, 595, 0, 0, - 543, 0, 562, 0, 0, 563, 564, 565, 566, 567, - 35, 0, 627, 628, 620, 34, 0, 664, 665, 611, - 612, 613, 0, 385, 396, 377, 0, 640, 0, 0, - 633, 0, 0, 448, 648, 0, 398, 417, 419, 0, - 414, 429, 430, 432, 0, 434, 0, 436, 437, 402, - 403, 404, 0, 405, 0, 0, 0, 0, 425, 617, - 448, 50, 51, 0, 64, 65, 0, 0, 71, 172, - 173, 0, 224, 0, 0, 0, 190, 202, 202, 193, - 203, 194, 0, 164, 0, 161, 98, 158, 0, 171, - 171, 127, 0, 128, 129, 130, 0, 146, 0, 0, - 0, 0, 691, 78, 229, 996, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 996, 0, 996, 683, 684, 685, 686, 0, 84, 0, - 0, 0, 0, 0, 269, 314, 314, 466, 0, 486, - 469, 528, 529, 0, 601, 625, 37, 0, 148, 148, - 580, 148, 152, 583, 148, 585, 148, 588, 0, 0, - 0, 0, 0, 0, 0, 592, 542, 598, 0, 600, - 0, 0, 631, 36, 615, 0, 449, 389, 43, 0, - 640, 632, 642, 644, 0, 0, 636, 0, 409, 617, - 0, 0, 411, 418, 0, 0, 412, 0, 413, 433, - 435, -2, 0, 0, 0, 0, 625, 49, 68, 69, - 70, 222, 225, 0, 204, 148, 207, 191, 192, 0, - 166, 0, 163, 149, 123, 124, 169, 170, 168, 0, - 168, 0, 153, 0, 997, 230, 231, 232, 233, 0, - 238, 0, 82, 83, 0, 0, 243, 267, 287, 292, - 470, 530, 629, 533, 577, 168, 581, 582, 584, 586, - 587, 589, 535, 534, 0, 0, 0, 0, 0, 625, - 0, 596, 0, 0, 40, 0, 0, 0, 44, 0, - 645, 0, 0, 0, 59, 0, 625, 649, 650, 415, - 0, 420, 0, 0, 0, 423, 48, 182, 0, 206, - 0, 407, 174, 167, 0, 171, 147, 171, 0, 0, - 76, 0, 85, 86, 0, 0, 0, 38, 578, 579, - 0, 0, 0, 0, 570, 0, 593, 0, 0, 616, - 614, 0, 643, 0, 635, 638, 637, 410, 47, 0, - 0, 445, 0, 0, 443, 181, 183, 0, 188, 0, - 205, 0, 0, 179, 0, 176, 178, 165, 136, 137, - 151, 154, 0, 0, 0, 0, 245, 536, 538, 537, - 539, 0, 0, 0, 541, 558, 559, 0, 634, 0, - 416, 444, 446, 447, 406, 184, 185, 0, 189, 187, - 0, 408, 97, 0, 175, 177, 0, 261, 0, 87, - 88, 81, 540, 0, 0, 0, 641, 639, 186, 0, - 180, 260, 0, 0, 84, 571, 0, 574, 0, 262, - 0, 242, 572, 0, 0, 0, 209, 0, 0, 210, - 211, 0, 0, 573, 212, 0, 0, 0, 0, 0, - 213, 215, 216, 0, 0, 214, 263, 264, 217, 218, - 219, + 21, 22, 23, 24, 25, 26, 27, 28, 619, 0, + 360, 360, 360, 360, 360, 360, 360, 0, 689, 672, + 0, 0, 0, 0, -2, 325, 326, 0, 328, -2, + 0, 0, 337, 998, 998, 0, 0, 998, 0, 996, + 47, 48, 343, 344, 345, 1, 3, 0, 364, 627, + 0, 0, -2, 362, 0, 0, 672, 672, 0, 0, + 76, 77, 0, 0, 0, 984, 0, 670, 670, 670, + 690, 691, 694, 695, 30, 31, 32, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, + 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, + 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, + 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, + 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, + 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, + 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, 939, 940, 941, 942, 943, + 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, + 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, + 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, + 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, + 995, 0, 0, 0, 0, 0, 673, 0, 668, 0, + 668, 668, 668, 0, 276, 442, 698, 699, 984, 0, + 0, 0, 316, 0, 999, 288, 0, 290, 999, 0, + 999, 0, 297, 0, 0, 303, 999, 308, 322, 323, + 310, 324, 327, 0, 332, 335, 0, 350, 0, 862, + 342, 355, 356, 998, 998, 359, 33, 493, 452, 0, + 458, 460, 0, 495, 496, 497, 498, 499, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 525, 526, + 527, 528, 604, 605, 606, 607, 608, 609, 610, 611, + 462, 463, 601, 0, 649, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 592, 0, 562, 562, 562, 562, + 562, 562, 562, 562, 0, 0, 0, 0, 0, 0, + 0, -2, -2, 619, 43, 0, 360, 365, 366, 631, + 0, 0, 619, 997, 0, 0, -2, -2, 376, 382, + 383, 384, 385, 361, 0, 388, 392, 0, 0, 0, + 0, 0, 0, 0, 56, 58, 442, 62, 0, 972, + 653, -2, -2, 0, 0, 696, 697, -2, 834, -2, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, + 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, + 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 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, 779, 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, 814, 815, 816, 817, 818, 819, 820, 0, + 0, 95, 0, 93, 0, 999, 0, 0, 0, 0, + 0, 0, 999, 999, 999, 0, 0, 0, 0, 267, + 0, 0, 0, 0, 0, 0, 0, 275, 0, 277, + 999, 316, 280, 0, 0, 999, 999, 999, 0, 999, + 999, 287, 1000, 1001, 0, 197, 198, 199, 291, 999, + 999, 293, 0, 313, 311, 312, 305, 306, 0, 319, + 300, 301, 304, 333, 336, 353, 351, 352, 354, 346, + 347, 348, 349, 0, 357, 358, 0, 0, 0, 0, + 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 480, 481, 482, 483, 484, 485, 486, 459, 0, + 473, 0, 0, 0, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 0, 373, 0, 0, 0, 619, 0, + 0, 0, 0, 0, 0, 0, 370, 0, 593, 0, + 546, 554, 0, 547, 555, 548, 556, 549, 0, 550, + 557, 551, 558, 552, 553, 559, 0, 0, 0, 373, + 373, 0, 0, 627, 0, 375, 34, 0, 0, 628, + 620, 621, 624, 627, 0, 397, 386, 377, 380, 381, + 363, 0, 389, 393, 0, 395, 396, 0, 0, 60, + 0, 441, 0, 399, 401, 402, 403, 423, 0, 425, + -2, 0, 0, 0, 54, 55, 0, 0, 0, 0, + 972, 659, 0, 64, 65, 0, 0, 0, 173, 663, + 664, 665, 661, 222, 0, 0, 161, 157, 101, 102, + 103, 150, 105, 150, 150, 150, 150, 170, 170, 170, + 170, 133, 134, 135, 136, 137, 0, 0, 120, 150, + 150, 150, 124, 140, 141, 142, 143, 144, 145, 146, + 147, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 152, 152, 152, 154, 154, 692, 79, 0, 999, 0, + 999, 91, 0, 236, 238, 239, 0, 0, 0, 0, + 0, 0, 0, 0, 270, 669, 0, 999, 273, 274, + 443, 700, 701, 278, 279, 317, 318, 281, 282, 283, + 284, 285, 286, 0, 200, 201, 292, 296, 0, 316, + 0, 0, 298, 299, 0, 0, 0, 334, 338, 339, + 340, 341, 494, 453, 454, 455, 457, 474, 0, 476, + 478, 464, 465, 489, 490, 491, 0, 0, 0, 0, + 487, 469, 0, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 514, 577, 578, 0, 512, + 513, 524, 0, 0, 0, 374, 602, 0, -2, 0, + 492, 648, 627, 0, 0, 0, 0, 497, 604, 0, + 497, 604, 0, 0, 0, 371, 372, 599, 596, 0, + 0, 601, 0, 563, 0, 0, 0, 0, 0, 0, + 0, 0, 631, 44, 632, 0, 0, 0, 0, 623, + 625, 626, 631, 0, 612, 0, 0, 450, 0, 0, + 378, 40, 394, 390, 0, 450, 0, 0, 440, 0, + 0, 0, 0, 0, 0, 430, 0, 0, 433, 0, + 0, 0, 0, 424, 0, 0, 0, 445, 916, 426, + 0, 428, 429, 450, 0, 450, 57, 450, 59, 0, + 444, 654, 63, 0, 0, 68, 69, 655, 656, 657, + 658, 0, 92, 223, 225, 228, 229, 230, 96, 97, + 98, 0, 0, 210, 0, 0, 204, 204, 0, 202, + 203, 94, 164, 162, 0, 159, 158, 104, 0, 170, + 170, 127, 128, 173, 0, 173, 173, 173, 0, 0, + 121, 122, 123, 115, 0, 116, 117, 118, 0, 119, + 0, 0, 999, 81, 671, 82, 998, 0, 0, 684, + 237, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 0, 83, 241, 243, 242, 246, 0, 0, 0, + 268, 999, 272, 313, 313, 295, 314, 315, 320, 302, + 330, 475, 477, 479, 466, 487, 470, 0, 467, 0, + 0, 461, 529, 0, 0, 373, 0, 619, 631, 533, + 534, 0, 0, 0, 0, 0, 570, 0, 0, 571, + 0, 619, 0, 597, 0, 0, 545, 0, 564, 0, + 0, 565, 566, 567, 568, 569, 36, 0, 629, 630, + 622, 35, 0, 666, 667, 613, 614, 615, 0, 387, + 398, 379, 0, 627, 642, 0, 0, 635, 0, 0, + 450, 650, 0, 400, 419, 421, 0, 416, 431, 432, + 434, 0, 436, 0, 438, 439, 404, 405, 406, 0, + 407, 0, 0, 0, 0, 427, 619, 450, 52, 53, + 0, 66, 67, 0, 0, 73, 174, 175, 0, 226, + 0, 0, 0, 192, 204, 204, 195, 205, 196, 0, + 166, 0, 163, 100, 160, 0, 173, 173, 129, 0, + 130, 131, 132, 0, 148, 0, 0, 0, 0, 693, + 80, 231, 998, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 998, 0, 998, + 685, 686, 687, 688, 0, 86, 0, 0, 0, 0, + 0, 271, 316, 316, 468, 0, 488, 471, 530, 531, + 0, 603, 627, 38, 0, 150, 150, 582, 150, 154, + 585, 150, 587, 150, 590, 0, 0, 0, 0, 0, + 0, 0, 594, 544, 600, 0, 602, 0, 0, 633, + 37, 617, 0, 451, 391, 41, 45, 0, 642, 634, + 644, 646, 0, 0, 638, 0, 411, 619, 0, 0, + 413, 420, 0, 0, 414, 0, 415, 435, 437, -2, + 0, 0, 0, 0, 627, 51, 70, 71, 72, 224, + 227, 0, 206, 150, 209, 193, 194, 0, 168, 0, + 165, 151, 125, 126, 171, 172, 170, 0, 170, 0, + 155, 0, 999, 232, 233, 234, 235, 0, 240, 0, + 84, 85, 0, 0, 245, 269, 289, 294, 472, 532, + 631, 535, 579, 170, 583, 584, 586, 588, 589, 591, + 537, 536, 0, 0, 0, 0, 0, 627, 0, 598, + 0, 0, 42, 0, 0, 0, 46, 0, 647, 0, + 0, 0, 61, 0, 627, 651, 652, 417, 0, 422, + 0, 0, 0, 425, 50, 184, 0, 208, 0, 409, + 176, 169, 0, 173, 149, 173, 0, 0, 78, 0, + 87, 88, 0, 0, 0, 39, 580, 581, 0, 0, + 0, 0, 572, 0, 595, 0, 0, 618, 616, 0, + 645, 0, 637, 640, 639, 412, 49, 0, 0, 447, + 0, 0, 445, 183, 185, 0, 190, 0, 207, 0, + 0, 181, 0, 178, 180, 167, 138, 139, 153, 156, + 0, 0, 0, 0, 247, 538, 540, 539, 541, 0, + 0, 0, 543, 560, 561, 0, 636, 0, 418, 446, + 448, 449, 408, 186, 187, 0, 191, 189, 0, 410, + 99, 0, 177, 179, 0, 263, 0, 89, 90, 83, + 542, 0, 0, 0, 643, 641, 188, 0, 182, 262, + 0, 0, 86, 573, 0, 576, 0, 264, 0, 244, + 574, 0, 0, 0, 211, 0, 0, 212, 213, 0, + 0, 575, 214, 0, 0, 0, 0, 0, 215, 217, + 218, 0, 0, 216, 265, 266, 219, 220, 221, } var yyTok1 = [...]int{ 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 81, 3, 3, 3, 108, 100, 3, - 57, 59, 105, 103, 58, 104, 120, 106, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 364, - 89, 88, 90, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 82, 3, 3, 3, 109, 101, 3, + 58, 60, 106, 104, 59, 105, 121, 107, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 365, + 90, 89, 91, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 110, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 111, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 99, 3, 111, + 3, 3, 3, 3, 100, 3, 112, } var yyTok2 = [...]int{ @@ -3407,12 +3428,12 @@ var yyTok2 = [...]int{ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 60, 61, 62, 63, 64, + 52, 53, 54, 55, 56, 57, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 82, 83, 84, 85, - 86, 87, 91, 92, 93, 94, 95, 96, 97, 98, - 101, 102, 107, 109, 112, 113, 114, 115, 116, 117, - 118, 119, 121, 122, 123, 124, 125, 126, 127, 128, + 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, + 86, 87, 88, 92, 93, 94, 95, 96, 97, 98, + 99, 102, 103, 108, 110, 113, 114, 115, 116, 117, + 118, 119, 120, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, @@ -3447,7 +3468,8 @@ var yyTok3 = [...]int{ 57670, 345, 57671, 346, 57672, 347, 57673, 348, 57674, 349, 57675, 350, 57676, 351, 57677, 352, 57678, 353, 57679, 354, 57680, 355, 57681, 356, 57682, 357, 57683, 358, 57684, 359, - 57685, 360, 57686, 361, 57687, 362, 57688, 363, 0, + 57685, 360, 57686, 361, 57687, 362, 57688, 363, 57689, 364, + 0, } var yyErrorMessages = [...]struct { @@ -3809,39 +3831,39 @@ yydefault: { yyVAL.statement = yyDollar[1].selStmt } - case 28: + case 29: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:374 +//line sql.y:375 { setParseTree(yylex, nil) } - case 29: + case 30: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:380 +//line sql.y:381 { yyVAL.colIdent = NewColIdentWithAt(string(yyDollar[1].bytes), NoAt) } - case 30: + case 31: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:384 +//line sql.y:385 { yyVAL.colIdent = NewColIdentWithAt(string(yyDollar[1].bytes), SingleAt) } - case 31: + case 32: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:388 +//line sql.y:389 { yyVAL.colIdent = NewColIdentWithAt(string(yyDollar[1].bytes), DoubleAt) } - case 32: + case 33: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:394 +//line sql.y:395 { yyVAL.statement = &OtherAdmin{} } - case 33: + case 34: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:400 +//line sql.y:401 { sel := yyDollar[1].selStmt.(*Select) sel.OrderBy = yyDollar[2].orderBy @@ -3849,27 +3871,27 @@ yydefault: sel.Lock = yyDollar[4].str yyVAL.selStmt = sel } - case 34: + case 35: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:408 +//line sql.y:409 { yyVAL.selStmt = &Union{FirstStatement: &ParenSelect{Select: yyDollar[2].selStmt}, OrderBy: yyDollar[4].orderBy, Limit: yyDollar[5].limit, Lock: yyDollar[6].str} } - case 35: + case 36: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:412 +//line sql.y:413 { yyVAL.selStmt = Unionize(yyDollar[1].selStmt, yyDollar[3].selStmt, yyDollar[2].str, yyDollar[4].orderBy, yyDollar[5].limit, yyDollar[6].str) } - case 36: + case 37: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:416 +//line sql.y:417 { yyVAL.selStmt = NewSelect(Comments(yyDollar[2].bytes2), SelectExprs{Nextval{Expr: yyDollar[5].expr}}, []string{yyDollar[3].str} /*options*/, TableExprs{&AliasedTableExpr{Expr: yyDollar[7].tableName}}, nil /*where*/, nil /*groupBy*/, nil /*having*/) } - case 37: + case 38: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:439 +//line sql.y:440 { sel := yyDollar[1].selStmt.(*Select) sel.OrderBy = yyDollar[2].orderBy @@ -3877,39 +3899,45 @@ yydefault: sel.Lock = yyDollar[4].str yyVAL.selStmt = sel } - case 38: + case 39: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:447 +//line sql.y:448 { yyVAL.selStmt = Unionize(yyDollar[1].selStmt, yyDollar[3].selStmt, yyDollar[2].str, yyDollar[4].orderBy, yyDollar[5].limit, yyDollar[6].str) } - case 39: + case 40: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:453 +//line sql.y:454 { yyVAL.statement = &Stream{Comments: Comments(yyDollar[2].bytes2), SelectExpr: yyDollar[3].selectExpr, Table: yyDollar[5].tableName} } - case 40: + case 41: + yyDollar = yyS[yypt-7 : yypt+1] +//line sql.y:460 + { + yyVAL.statement = &VStream{Comments: Comments(yyDollar[2].bytes2), SelectExpr: yyDollar[3].selectExpr, Table: yyDollar[5].tableName, Where: NewWhere(WhereStr, yyDollar[6].expr), Limit: yyDollar[7].limit} + } + case 42: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:461 +//line sql.y:468 { yyVAL.selStmt = NewSelect(Comments(yyDollar[2].bytes2), yyDollar[4].selectExprs /*SelectExprs*/, yyDollar[3].strs /*options*/, yyDollar[5].tableExprs /*from*/, NewWhere(WhereStr, yyDollar[6].expr), GroupBy(yyDollar[7].exprs), NewWhere(HavingStr, yyDollar[8].expr)) } - case 41: + case 43: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:467 +//line sql.y:474 { yyVAL.selStmt = yyDollar[1].selStmt } - case 42: + case 44: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:471 +//line sql.y:478 { yyVAL.selStmt = &ParenSelect{Select: yyDollar[2].selStmt} } - case 43: + case 45: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:478 +//line sql.y:485 { // insert_data returns a *Insert pre-filled with Columns & Values ins := yyDollar[6].ins @@ -3921,9 +3949,9 @@ yydefault: ins.OnDup = OnDup(yyDollar[7].updateExprs) yyVAL.statement = ins } - case 44: + case 46: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:490 +//line sql.y:497 { cols := make(Columns, 0, len(yyDollar[7].updateExprs)) vals := make(ValTuple, 0, len(yyDollar[8].updateExprs)) @@ -3933,328 +3961,328 @@ 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 45: + case 47: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:502 +//line sql.y:509 { yyVAL.str = InsertStr } - case 46: + case 48: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:506 +//line sql.y:513 { yyVAL.str = ReplaceStr } - case 47: + case 49: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:512 +//line sql.y:519 { 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 48: + case 50: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:518 +//line sql.y:525 { 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 49: + case 51: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:522 +//line sql.y:529 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[4].tableNames, TableExprs: yyDollar[6].tableExprs, Where: NewWhere(WhereStr, yyDollar[7].expr)} } - case 50: + case 52: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:526 +//line sql.y:533 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[3].tableNames, TableExprs: yyDollar[5].tableExprs, Where: NewWhere(WhereStr, yyDollar[6].expr)} } - case 51: + case 53: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:530 +//line sql.y:537 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[3].tableNames, TableExprs: yyDollar[5].tableExprs, Where: NewWhere(WhereStr, yyDollar[6].expr)} } - case 52: + case 54: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:535 +//line sql.y:542 { } - case 53: + case 55: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:536 +//line sql.y:543 { } - case 54: + case 56: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:540 +//line sql.y:547 { yyVAL.tableNames = TableNames{yyDollar[1].tableName} } - case 55: + case 57: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:544 +//line sql.y:551 { yyVAL.tableNames = append(yyVAL.tableNames, yyDollar[3].tableName) } - case 56: + case 58: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:550 +//line sql.y:557 { yyVAL.tableNames = TableNames{yyDollar[1].tableName} } - case 57: + case 59: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:554 +//line sql.y:561 { yyVAL.tableNames = append(yyVAL.tableNames, yyDollar[3].tableName) } - case 58: + case 60: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:559 +//line sql.y:566 { yyVAL.partitions = nil } - case 59: + case 61: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:563 +//line sql.y:570 { yyVAL.partitions = yyDollar[3].partitions } - case 60: + case 62: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:569 +//line sql.y:576 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Exprs: yyDollar[3].setExprs} } - case 61: + case 63: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:575 +//line sql.y:582 { yyVAL.statement = &SetTransaction{Comments: Comments(yyDollar[2].bytes2), Scope: yyDollar[3].str, Characteristics: yyDollar[5].characteristics} } - case 62: + case 64: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:579 +//line sql.y:586 { yyVAL.statement = &SetTransaction{Comments: Comments(yyDollar[2].bytes2), Characteristics: yyDollar[4].characteristics} } - case 63: + case 65: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:585 +//line sql.y:592 { yyVAL.characteristics = []Characteristic{yyDollar[1].characteristic} } - case 64: + case 66: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:589 +//line sql.y:596 { yyVAL.characteristics = append(yyVAL.characteristics, yyDollar[3].characteristic) } - case 65: + case 67: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:595 +//line sql.y:602 { yyVAL.characteristic = &IsolationLevel{Level: string(yyDollar[3].str)} } - case 66: + case 68: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:599 +//line sql.y:606 { yyVAL.characteristic = &AccessMode{Mode: TxReadWrite} } - case 67: + case 69: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:603 +//line sql.y:610 { yyVAL.characteristic = &AccessMode{Mode: TxReadOnly} } - case 68: + case 70: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:609 +//line sql.y:616 { yyVAL.str = RepeatableRead } - case 69: + case 71: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:613 +//line sql.y:620 { yyVAL.str = ReadCommitted } - case 70: + case 72: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:617 +//line sql.y:624 { yyVAL.str = ReadUncommitted } - case 71: + case 73: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:621 +//line sql.y:628 { yyVAL.str = Serializable } - case 72: + case 74: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:627 +//line sql.y:634 { yyVAL.str = SessionStr } - case 73: + case 75: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:631 +//line sql.y:638 { yyVAL.str = GlobalStr } - case 74: + case 76: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:637 +//line sql.y:644 { yyDollar[1].ddl.TableSpec = yyDollar[2].TableSpec yyVAL.statement = yyDollar[1].ddl } - case 75: + case 77: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:642 +//line sql.y:649 { // Create table [name] like [name] yyDollar[1].ddl.OptLike = yyDollar[2].optLike yyVAL.statement = yyDollar[1].ddl } - case 76: + case 78: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:648 +//line sql.y:655 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[7].tableName} } - case 77: + case 79: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:653 +//line sql.y:660 { yyVAL.statement = &DDL{Action: CreateStr, Table: yyDollar[3].tableName.ToViewName()} } - case 78: + case 80: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:657 +//line sql.y:664 { yyVAL.statement = &DDL{Action: CreateStr, Table: yyDollar[5].tableName.ToViewName()} } - case 79: + case 81: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:661 +//line sql.y:668 { yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].colIdent.String())} } - case 80: + case 82: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:665 +//line sql.y:672 { yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].colIdent.String())} } - case 81: + case 83: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:670 +//line sql.y:677 { yyVAL.colIdent = NewColIdent("") } - case 82: + case 84: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:674 +//line sql.y:681 { yyVAL.colIdent = yyDollar[2].colIdent } - case 83: + case 85: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:680 +//line sql.y:687 { yyVAL.colIdent = yyDollar[1].colIdent } - case 84: + case 86: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:685 +//line sql.y:692 { var v []VindexParam yyVAL.vindexParams = v } - case 85: + case 87: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:690 +//line sql.y:697 { yyVAL.vindexParams = yyDollar[2].vindexParams } - case 86: + case 88: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:696 +//line sql.y:703 { yyVAL.vindexParams = make([]VindexParam, 0, 4) yyVAL.vindexParams = append(yyVAL.vindexParams, yyDollar[1].vindexParam) } - case 87: + case 89: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:701 +//line sql.y:708 { yyVAL.vindexParams = append(yyVAL.vindexParams, yyDollar[3].vindexParam) } - case 88: + case 90: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:707 +//line sql.y:714 { yyVAL.vindexParam = VindexParam{Key: yyDollar[1].colIdent, Val: yyDollar[3].str} } - case 89: + case 91: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:713 +//line sql.y:720 { yyVAL.ddl = &DDL{Action: CreateStr, Table: yyDollar[4].tableName} setDDL(yylex, yyVAL.ddl) } - case 90: + case 92: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:720 +//line sql.y:727 { yyVAL.TableSpec = yyDollar[2].TableSpec yyVAL.TableSpec.Options = yyDollar[4].str } - case 91: + case 93: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:727 +//line sql.y:734 { yyVAL.optLike = &OptLike{LikeTable: yyDollar[2].tableName} } - case 92: + case 94: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:731 +//line sql.y:738 { yyVAL.optLike = &OptLike{LikeTable: yyDollar[3].tableName} } - case 93: + case 95: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:737 +//line sql.y:744 { yyVAL.TableSpec = &TableSpec{} yyVAL.TableSpec.AddColumn(yyDollar[1].columnDefinition) } - case 94: + case 96: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:742 +//line sql.y:749 { yyVAL.TableSpec.AddColumn(yyDollar[3].columnDefinition) } - case 95: + case 97: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:746 +//line sql.y:753 { yyVAL.TableSpec.AddIndex(yyDollar[3].indexDefinition) } - case 96: + case 98: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:750 +//line sql.y:757 { yyVAL.TableSpec.AddConstraint(yyDollar[3].constraintDefinition) } - case 97: + case 99: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:756 +//line sql.y:763 { yyDollar[2].columnType.NotNull = yyDollar[3].boolVal yyDollar[2].columnType.Default = yyDollar[4].optVal @@ -4264,856 +4292,856 @@ yydefault: yyDollar[2].columnType.Comment = yyDollar[8].literal yyVAL.columnDefinition = &ColumnDefinition{Name: yyDollar[1].colIdent, Type: yyDollar[2].columnType} } - case 98: + case 100: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:767 +//line sql.y:774 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].boolVal yyVAL.columnType.Zerofill = yyDollar[3].boolVal } - case 102: + case 104: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:778 +//line sql.y:785 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].literal } - case 103: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:783 - { - yyVAL.columnType = yyDollar[1].columnType - } - case 104: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:789 - { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} - } case 105: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:793 +//line sql.y:790 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + yyVAL.columnType = yyDollar[1].columnType } case 106: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:797 +//line sql.y:796 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 107: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:801 +//line sql.y:800 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 108: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:805 +//line sql.y:804 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 109: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:809 +//line sql.y:808 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 110: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:813 +//line sql.y:812 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 111: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:817 +//line sql.y:816 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 112: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:821 +//line sql.y:820 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 113: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:824 + { + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + } + case 114: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:828 + { + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + } + case 115: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:827 +//line sql.y:834 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 114: + case 116: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:833 +//line sql.y:840 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 115: + case 117: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:839 +//line sql.y:846 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 116: + case 118: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:845 +//line sql.y:852 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 117: + case 119: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:851 +//line sql.y:858 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 118: + case 120: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:859 +//line sql.y:866 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 119: + case 121: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:863 +//line sql.y:870 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } - case 120: + case 122: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:867 +//line sql.y:874 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } - case 121: + case 123: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:871 +//line sql.y:878 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } - case 122: + case 124: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:875 +//line sql.y:882 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 123: + case 125: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:881 +//line sql.y:888 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } - case 124: + case 126: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:885 +//line sql.y:892 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } - case 125: + case 127: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:889 +//line sql.y:896 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } - case 126: + case 128: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:893 +//line sql.y:900 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } - case 127: + case 129: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:897 +//line sql.y:904 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 128: + case 130: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:901 +//line sql.y:908 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 129: + case 131: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:905 +//line sql.y:912 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 130: + case 132: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:909 +//line sql.y:916 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 131: + case 133: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:913 +//line sql.y:920 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 132: + case 134: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:917 +//line sql.y:924 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 133: + case 135: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:921 +//line sql.y:928 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 134: + case 136: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:925 +//line sql.y:932 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 135: + case 137: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:929 +//line sql.y:936 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 136: + case 138: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:933 +//line sql.y:940 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} } - case 137: + case 139: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:938 +//line sql.y:945 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} } - case 138: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:944 - { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} - } - case 139: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:948 - { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} - } case 140: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:952 +//line sql.y:951 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 141: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:956 +//line sql.y:955 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 142: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:960 +//line sql.y:959 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 143: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:964 +//line sql.y:963 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 144: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:968 +//line sql.y:967 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 145: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:972 +//line sql.y:971 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 146: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:978 +//line sql.y:975 { - yyVAL.strs = make([]string, 0, 4) - yyVAL.strs = append(yyVAL.strs, "'"+string(yyDollar[1].bytes)+"'") + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 147: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:983 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:979 { - yyVAL.strs = append(yyDollar[1].strs, "'"+string(yyDollar[3].bytes)+"'") + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 148: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:985 + { + yyVAL.strs = make([]string, 0, 4) + yyVAL.strs = append(yyVAL.strs, "'"+string(yyDollar[1].bytes)+"'") + } + case 149: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:990 + { + yyVAL.strs = append(yyDollar[1].strs, "'"+string(yyDollar[3].bytes)+"'") + } + case 150: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:988 +//line sql.y:995 { yyVAL.literal = nil } - case 149: + case 151: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:992 +//line sql.y:999 { yyVAL.literal = NewIntLiteral(yyDollar[2].bytes) } - case 150: + case 152: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:997 +//line sql.y:1004 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 151: + case 153: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1001 +//line sql.y:1008 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].bytes), Scale: NewIntLiteral(yyDollar[4].bytes), } } - case 152: + case 154: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1009 +//line sql.y:1016 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 153: + case 155: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1013 +//line sql.y:1020 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].bytes), } } - case 154: + case 156: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1019 +//line sql.y:1026 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].bytes), Scale: NewIntLiteral(yyDollar[4].bytes), } } - case 155: + case 157: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1027 +//line sql.y:1034 { yyVAL.boolVal = BoolVal(false) } - case 156: + case 158: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1031 +//line sql.y:1038 { yyVAL.boolVal = BoolVal(true) } - case 157: + case 159: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1036 +//line sql.y:1043 { yyVAL.boolVal = BoolVal(false) } - case 158: + case 160: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1040 +//line sql.y:1047 { yyVAL.boolVal = BoolVal(true) } - case 159: + case 161: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1046 +//line sql.y:1053 { yyVAL.boolVal = BoolVal(false) } - case 160: + case 162: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1050 +//line sql.y:1057 { yyVAL.boolVal = BoolVal(false) } - case 161: + case 163: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1054 +//line sql.y:1061 { yyVAL.boolVal = BoolVal(true) } - case 162: + case 164: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1059 +//line sql.y:1066 { yyVAL.optVal = nil } - case 163: + case 165: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1063 +//line sql.y:1070 { yyVAL.optVal = yyDollar[2].expr } - case 164: + case 166: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1068 +//line sql.y:1075 { yyVAL.optVal = nil } - case 165: + case 167: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1072 +//line sql.y:1079 { yyVAL.optVal = yyDollar[3].expr } - case 166: + case 168: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1077 +//line sql.y:1084 { yyVAL.boolVal = BoolVal(false) } - case 167: + case 169: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1081 +//line sql.y:1088 { yyVAL.boolVal = BoolVal(true) } - case 168: + case 170: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1086 +//line sql.y:1093 { yyVAL.str = "" } - case 169: + case 171: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1090 +//line sql.y:1097 { yyVAL.str = string(yyDollar[3].colIdent.String()) } - case 170: + case 172: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1094 +//line sql.y:1101 { yyVAL.str = string(yyDollar[3].bytes) } - case 171: + case 173: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1099 +//line sql.y:1106 { yyVAL.str = "" } - case 172: + case 174: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1103 +//line sql.y:1110 { yyVAL.str = string(yyDollar[2].colIdent.String()) } - case 173: + case 175: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1107 +//line sql.y:1114 { yyVAL.str = string(yyDollar[2].bytes) } - case 174: + case 176: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1112 +//line sql.y:1119 { yyVAL.colKeyOpt = colKeyNone } - case 175: + case 177: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1116 +//line sql.y:1123 { yyVAL.colKeyOpt = colKeyPrimary } - case 176: + case 178: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1120 +//line sql.y:1127 { yyVAL.colKeyOpt = colKey } - case 177: + case 179: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1124 +//line sql.y:1131 { yyVAL.colKeyOpt = colKeyUniqueKey } - case 178: + case 180: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1128 +//line sql.y:1135 { yyVAL.colKeyOpt = colKeyUnique } - case 179: + case 181: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1133 +//line sql.y:1140 { yyVAL.literal = nil } - case 180: + case 182: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1137 +//line sql.y:1144 { yyVAL.literal = NewStrLiteral(yyDollar[2].bytes) } - case 181: + case 183: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1143 +//line sql.y:1150 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns, Options: yyDollar[5].indexOptions} } - case 182: + case 184: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1147 +//line sql.y:1154 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns} } - case 183: + case 185: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1153 +//line sql.y:1160 { yyVAL.indexOptions = []*IndexOption{yyDollar[1].indexOption} } - case 184: + case 186: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1157 +//line sql.y:1164 { yyVAL.indexOptions = append(yyVAL.indexOptions, yyDollar[2].indexOption) } - case 185: + case 187: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1163 +//line sql.y:1170 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Using: string(yyDollar[2].colIdent.String())} } - case 186: + case 188: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1167 +//line sql.y:1174 { // should not be string yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Value: NewIntLiteral(yyDollar[3].bytes)} } - case 187: + case 189: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1172 +//line sql.y:1179 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Value: NewStrLiteral(yyDollar[2].bytes)} } - case 188: + case 190: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1178 +//line sql.y:1185 { yyVAL.str = "" } - case 189: + case 191: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1182 +//line sql.y:1189 { yyVAL.str = string(yyDollar[1].bytes) } - case 190: + case 192: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1188 +//line sql.y:1195 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].bytes), Name: NewColIdent("PRIMARY"), Primary: true, Unique: true} } - case 191: + case 193: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1192 +//line sql.y:1199 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(yyDollar[3].str), Spatial: true, Unique: false} } - case 192: + case 194: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1196 +//line sql.y:1203 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(yyDollar[3].str), Unique: true} } - case 193: + case 195: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1200 +//line sql.y:1207 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes), Name: NewColIdent(yyDollar[2].str), Unique: true} } - case 194: + case 196: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1204 +//line sql.y:1211 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].str), Name: NewColIdent(yyDollar[2].str), Unique: false} } - case 195: + case 197: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1210 +//line sql.y:1217 { yyVAL.str = string(yyDollar[1].bytes) } - case 196: + case 198: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1214 +//line sql.y:1221 { yyVAL.str = string(yyDollar[1].bytes) } - case 197: + case 199: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1218 +//line sql.y:1225 { yyVAL.str = string(yyDollar[1].bytes) } - case 198: + case 200: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1225 +//line sql.y:1232 { yyVAL.str = string(yyDollar[1].bytes) } - case 199: + case 201: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1229 +//line sql.y:1236 { yyVAL.str = string(yyDollar[1].bytes) } - case 200: + case 202: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1235 +//line sql.y:1242 { yyVAL.str = string(yyDollar[1].bytes) } - case 201: + case 203: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1239 +//line sql.y:1246 { yyVAL.str = string(yyDollar[1].bytes) } - case 202: + case 204: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1244 +//line sql.y:1251 { yyVAL.str = "" } - case 203: + case 205: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1248 +//line sql.y:1255 { yyVAL.str = string(yyDollar[1].colIdent.String()) } - case 204: + case 206: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1254 +//line sql.y:1261 { yyVAL.indexColumns = []*IndexColumn{yyDollar[1].indexColumn} } - case 205: + case 207: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1258 +//line sql.y:1265 { yyVAL.indexColumns = append(yyVAL.indexColumns, yyDollar[3].indexColumn) } - case 206: + case 208: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1264 +//line sql.y:1271 { yyVAL.indexColumn = &IndexColumn{Column: yyDollar[1].colIdent, Length: yyDollar[2].literal} } - case 207: + case 209: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1270 +//line sql.y:1277 { yyVAL.constraintDefinition = &ConstraintDefinition{Name: string(yyDollar[2].colIdent.String()), Details: yyDollar[3].constraintInfo} } - case 208: + case 210: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1274 +//line sql.y:1281 { yyVAL.constraintDefinition = &ConstraintDefinition{Details: yyDollar[1].constraintInfo} } - case 209: + case 211: yyDollar = yyS[yypt-10 : yypt+1] -//line sql.y:1281 +//line sql.y:1288 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns} } - case 210: + case 212: yyDollar = yyS[yypt-11 : yypt+1] -//line sql.y:1285 +//line sql.y:1292 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnDelete: yyDollar[11].ReferenceAction} } - case 211: + case 213: yyDollar = yyS[yypt-11 : yypt+1] -//line sql.y:1289 +//line sql.y:1296 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnUpdate: yyDollar[11].ReferenceAction} } - case 212: + case 214: yyDollar = yyS[yypt-12 : yypt+1] -//line sql.y:1293 +//line sql.y:1300 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnDelete: yyDollar[11].ReferenceAction, OnUpdate: yyDollar[12].ReferenceAction} } - case 213: + case 215: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1299 +//line sql.y:1306 { yyVAL.ReferenceAction = yyDollar[3].ReferenceAction } - case 214: + case 216: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1305 +//line sql.y:1312 { yyVAL.ReferenceAction = yyDollar[3].ReferenceAction } - case 215: + case 217: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1311 +//line sql.y:1318 { yyVAL.ReferenceAction = Restrict } - case 216: + case 218: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1315 +//line sql.y:1322 { yyVAL.ReferenceAction = Cascade } - case 217: + case 219: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1319 +//line sql.y:1326 { yyVAL.ReferenceAction = NoAction } - case 218: + case 220: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1323 +//line sql.y:1330 { yyVAL.ReferenceAction = SetDefault } - case 219: + case 221: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1327 +//line sql.y:1334 { yyVAL.ReferenceAction = SetNull } - case 220: + case 222: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1332 +//line sql.y:1339 { yyVAL.str = "" } - case 221: + case 223: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1336 +//line sql.y:1343 { yyVAL.str = " " + string(yyDollar[1].str) } - case 222: + case 224: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1340 +//line sql.y:1347 { yyVAL.str = string(yyDollar[1].str) + ", " + string(yyDollar[3].str) } - case 223: + case 225: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1348 +//line sql.y:1355 { yyVAL.str = yyDollar[1].str } - case 224: + case 226: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1352 +//line sql.y:1359 { yyVAL.str = yyDollar[1].str + " " + yyDollar[2].str } - case 225: + case 227: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1356 +//line sql.y:1363 { yyVAL.str = yyDollar[1].str + "=" + yyDollar[3].str } - case 226: + case 228: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1362 +//line sql.y:1369 { yyVAL.str = yyDollar[1].colIdent.String() } - case 227: + case 229: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1366 +//line sql.y:1373 { yyVAL.str = "'" + string(yyDollar[1].bytes) + "'" } - case 228: + case 230: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1370 +//line sql.y:1377 { yyVAL.str = string(yyDollar[1].bytes) } - case 229: + case 231: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1376 +//line sql.y:1383 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } - case 230: + case 232: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1380 +//line sql.y:1387 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } - case 231: + case 233: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1384 +//line sql.y:1391 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } - case 232: + case 234: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1388 +//line sql.y:1395 { // Change this to a rename statement yyVAL.statement = &DDL{Action: RenameStr, FromTables: TableNames{yyDollar[4].tableName}, ToTables: TableNames{yyDollar[7].tableName}} } - case 233: + case 235: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1393 +//line sql.y:1400 { // Rename an index can just be an alter yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } - case 234: + case 236: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1398 +//line sql.y:1405 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName.ToViewName()} } - case 235: + case 237: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1402 +//line sql.y:1409 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, PartitionSpec: yyDollar[5].partSpec} } - case 236: + case 238: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1406 +//line sql.y:1413 { yyVAL.statement = &DBDDL{Action: AlterStr, DBName: string(yyDollar[3].colIdent.String())} } - case 237: + case 239: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1410 +//line sql.y:1417 { yyVAL.statement = &DBDDL{Action: AlterStr, DBName: string(yyDollar[3].colIdent.String())} } - case 238: + case 240: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1414 +//line sql.y:1421 { yyVAL.statement = &DDL{ Action: CreateVindexStr, @@ -5125,9 +5153,9 @@ yydefault: }, } } - case 239: + case 241: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1426 +//line sql.y:1433 { yyVAL.statement = &DDL{ Action: DropVindexStr, @@ -5137,21 +5165,21 @@ yydefault: }, } } - case 240: + case 242: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1436 +//line sql.y:1443 { yyVAL.statement = &DDL{Action: AddVschemaTableStr, Table: yyDollar[5].tableName} } - case 241: + case 243: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1440 +//line sql.y:1447 { yyVAL.statement = &DDL{Action: DropVschemaTableStr, Table: yyDollar[5].tableName} } - case 242: + case 244: yyDollar = yyS[yypt-12 : yypt+1] -//line sql.y:1444 +//line sql.y:1451 { yyVAL.statement = &DDL{ Action: AddColVindexStr, @@ -5164,9 +5192,9 @@ yydefault: VindexCols: yyDollar[9].columns, } } - case 243: + case 245: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1457 +//line sql.y:1464 { yyVAL.statement = &DDL{ Action: DropColVindexStr, @@ -5176,15 +5204,15 @@ yydefault: }, } } - case 244: + case 246: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1467 +//line sql.y:1474 { yyVAL.statement = &DDL{Action: AddSequenceStr, Table: yyDollar[5].tableName} } - case 245: + case 247: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:1471 +//line sql.y:1478 { yyVAL.statement = &DDL{ Action: AddAutoIncStr, @@ -5195,59 +5223,59 @@ yydefault: }, } } - case 260: + case 262: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1500 +//line sql.y:1507 { yyVAL.partSpec = &PartitionSpec{Action: ReorganizeStr, Name: yyDollar[3].colIdent, Definitions: yyDollar[6].partDefs} } - case 261: + case 263: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1506 +//line sql.y:1513 { yyVAL.partDefs = []*PartitionDefinition{yyDollar[1].partDef} } - case 262: + case 264: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1510 +//line sql.y:1517 { yyVAL.partDefs = append(yyDollar[1].partDefs, yyDollar[3].partDef) } - case 263: + case 265: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1516 +//line sql.y:1523 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Limit: yyDollar[7].expr} } - case 264: + case 266: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1520 +//line sql.y:1527 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Maxvalue: true} } - case 265: + case 267: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1526 +//line sql.y:1533 { yyVAL.statement = yyDollar[3].ddl } - case 266: + case 268: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1532 +//line sql.y:1539 { yyVAL.ddl = &DDL{Action: RenameStr, FromTables: TableNames{yyDollar[1].tableName}, ToTables: TableNames{yyDollar[3].tableName}} } - case 267: + case 269: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1536 +//line sql.y:1543 { yyVAL.ddl = yyDollar[1].ddl yyVAL.ddl.FromTables = append(yyVAL.ddl.FromTables, yyDollar[3].tableName) yyVAL.ddl.ToTables = append(yyVAL.ddl.ToTables, yyDollar[5].tableName) } - case 268: + case 270: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1544 +//line sql.y:1551 { var exists bool if yyDollar[3].byt != 0 { @@ -5255,16 +5283,16 @@ yydefault: } yyVAL.statement = &DDL{Action: DropStr, FromTables: yyDollar[4].tableNames, IfExists: exists} } - case 269: + case 271: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1552 +//line sql.y:1559 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[5].tableName} } - case 270: + case 272: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1557 +//line sql.y:1564 { var exists bool if yyDollar[3].byt != 0 { @@ -5272,145 +5300,145 @@ yydefault: } yyVAL.statement = &DDL{Action: DropStr, FromTables: TableNames{yyDollar[4].tableName.ToViewName()}, IfExists: exists} } - case 271: + case 273: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1565 +//line sql.y:1572 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].colIdent.String())} } - case 272: + case 274: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1569 +//line sql.y:1576 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].colIdent.String())} } - case 273: + case 275: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1575 +//line sql.y:1582 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[3].tableName} } - case 274: + case 276: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1579 +//line sql.y:1586 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[2].tableName} } - case 275: + case 277: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1584 +//line sql.y:1591 { yyVAL.statement = &OtherRead{} } - case 276: + case 278: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1590 +//line sql.y:1597 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].colIdent.String())} } - case 277: + case 279: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1595 +//line sql.y:1602 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[4].showFilter} yyVAL.statement = &Show{Type: CharsetStr, ShowTablesOpt: showTablesOpt} } - case 278: + case 280: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1600 +//line sql.y:1607 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt} } - case 279: + case 281: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1605 +//line sql.y:1612 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 280: + case 282: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1610 +//line sql.y:1617 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].colIdent.String())} } - case 281: + case 283: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1614 +//line sql.y:1621 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 282: + case 284: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1618 +//line sql.y:1625 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Table: yyDollar[4].tableName} } - case 283: + case 285: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1622 +//line sql.y:1629 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 284: + case 286: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1626 +//line sql.y:1633 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 285: + case 287: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1630 +//line sql.y:1637 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 286: + case 288: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1634 +//line sql.y:1641 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 287: + case 289: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1638 +//line sql.y:1645 { 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 288: + case 290: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1643 +//line sql.y:1650 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 289: + case 291: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1647 +//line sql.y:1654 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 290: + case 292: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1651 +//line sql.y:1658 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } - case 291: + case 293: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1655 +//line sql.y:1662 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 292: + case 294: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1659 +//line sql.y:1666 { 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 293: + case 295: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1664 +//line sql.y:1671 { // this is ugly, but I couldn't find a better way for now if yyDollar[3].str == "processlist" { @@ -5420,845 +5448,845 @@ yydefault: yyVAL.statement = &Show{Type: yyDollar[3].str, ShowTablesOpt: showTablesOpt} } } - case 294: + case 296: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1674 +//line sql.y:1681 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } - case 295: + case 297: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1678 +//line sql.y:1685 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 296: + case 298: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1682 +//line sql.y:1689 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowCollationFilterOpt: yyDollar[4].expr} } - case 297: + case 299: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1686 +//line sql.y:1693 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[4].showFilter} yyVAL.statement = &Show{Scope: string(yyDollar[2].bytes), Type: string(yyDollar[3].bytes), ShowTablesOpt: showTablesOpt} } - case 298: + case 300: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1691 +//line sql.y:1698 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 299: + case 301: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1695 +//line sql.y:1702 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 300: + case 302: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1699 +//line sql.y:1706 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), OnTable: yyDollar[5].tableName} } - case 301: + case 303: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1703 +//line sql.y:1710 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 302: + case 304: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1717 +//line sql.y:1724 { yyVAL.statement = &Show{Type: string(yyDollar[2].colIdent.String())} } - case 303: + case 305: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1723 +//line sql.y:1730 { yyVAL.str = string(yyDollar[1].bytes) } - case 304: + case 306: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1727 +//line sql.y:1734 { yyVAL.str = string(yyDollar[1].bytes) } - case 305: + case 307: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1733 +//line sql.y:1740 { yyVAL.str = "" } - case 306: + case 308: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1737 +//line sql.y:1744 { yyVAL.str = "extended " } - case 307: + case 309: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1743 +//line sql.y:1750 { yyVAL.str = "" } - case 308: + case 310: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1747 +//line sql.y:1754 { yyVAL.str = "full " } - case 309: + case 311: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1753 +//line sql.y:1760 { yyVAL.str = string(yyDollar[1].bytes) } - case 310: + case 312: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1757 +//line sql.y:1764 { yyVAL.str = string(yyDollar[1].bytes) } - case 311: + case 313: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1763 +//line sql.y:1770 { yyVAL.str = "" } - case 312: + case 314: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1767 +//line sql.y:1774 { yyVAL.str = yyDollar[2].tableIdent.v } - case 313: + case 315: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1771 +//line sql.y:1778 { yyVAL.str = yyDollar[2].tableIdent.v } - case 314: + case 316: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1777 +//line sql.y:1784 { yyVAL.showFilter = nil } - case 315: + case 317: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1781 +//line sql.y:1788 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } - case 316: + case 318: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1785 +//line sql.y:1792 { yyVAL.showFilter = &ShowFilter{Filter: yyDollar[2].expr} } - case 317: + case 319: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1791 +//line sql.y:1798 { yyVAL.showFilter = nil } - case 318: + case 320: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1795 +//line sql.y:1802 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } - case 319: + case 321: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1801 +//line sql.y:1808 { yyVAL.str = "" } - case 320: + case 322: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1805 +//line sql.y:1812 { yyVAL.str = SessionStr } - case 321: + case 323: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1809 +//line sql.y:1816 { yyVAL.str = GlobalStr } - case 322: + case 324: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1815 +//line sql.y:1822 { yyVAL.statement = &Use{DBName: yyDollar[2].tableIdent} } - case 323: + case 325: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1819 +//line sql.y:1826 { yyVAL.statement = &Use{DBName: TableIdent{v: ""}} } - case 324: + case 326: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1825 +//line sql.y:1832 { yyVAL.statement = &Begin{} } - case 325: + case 327: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1829 +//line sql.y:1836 { yyVAL.statement = &Begin{} } - case 326: + case 328: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1835 +//line sql.y:1842 { yyVAL.statement = &Commit{} } - case 327: + case 329: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1841 +//line sql.y:1848 { yyVAL.statement = &Rollback{} } - case 328: + case 330: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1845 +//line sql.y:1852 { yyVAL.statement = &SRollback{Name: yyDollar[5].colIdent} } - case 329: + case 331: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1850 +//line sql.y:1857 { yyVAL.empty = struct{}{} } - case 330: + case 332: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1852 +//line sql.y:1859 { yyVAL.empty = struct{}{} } - case 331: + case 333: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1855 +//line sql.y:1862 { yyVAL.empty = struct{}{} } - case 332: + case 334: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1857 +//line sql.y:1864 { yyVAL.empty = struct{}{} } - case 333: + case 335: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1862 +//line sql.y:1869 { yyVAL.statement = &Savepoint{Name: yyDollar[2].colIdent} } - case 334: + case 336: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1868 +//line sql.y:1875 { yyVAL.statement = &Release{Name: yyDollar[3].colIdent} } - case 335: + case 337: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1873 +//line sql.y:1880 { yyVAL.str = "" } - case 336: + case 338: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1877 +//line sql.y:1884 { yyVAL.str = JSONStr } - case 337: + case 339: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1881 +//line sql.y:1888 { yyVAL.str = TreeStr } - case 338: + case 340: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1885 +//line sql.y:1892 { yyVAL.str = VitessStr } - case 339: + case 341: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1889 +//line sql.y:1896 { yyVAL.str = TraditionalStr } - case 340: + case 342: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1893 +//line sql.y:1900 { yyVAL.str = AnalyzeStr } - case 341: + case 343: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1899 +//line sql.y:1906 { yyVAL.bytes = yyDollar[1].bytes } - case 342: + case 344: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1903 +//line sql.y:1910 { yyVAL.bytes = yyDollar[1].bytes } - case 343: + case 345: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1907 +//line sql.y:1914 { yyVAL.bytes = yyDollar[1].bytes } - case 344: + case 346: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1913 +//line sql.y:1920 { yyVAL.statement = yyDollar[1].selStmt } - case 345: + case 347: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1917 +//line sql.y:1924 { yyVAL.statement = yyDollar[1].statement } - case 346: + case 348: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1921 +//line sql.y:1928 { yyVAL.statement = yyDollar[1].statement } - case 347: + case 349: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1925 +//line sql.y:1932 { yyVAL.statement = yyDollar[1].statement } - case 348: + case 350: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1930 +//line sql.y:1937 { yyVAL.str = "" } - case 349: + case 351: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1934 +//line sql.y:1941 { yyVAL.str = "" } - case 350: + case 352: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1938 +//line sql.y:1945 { yyVAL.str = "" } - case 351: + case 353: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1944 +//line sql.y:1951 { yyVAL.statement = &OtherRead{} } - case 352: + case 354: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1948 +//line sql.y:1955 { yyVAL.statement = &Explain{Type: yyDollar[2].str, Statement: yyDollar[3].statement} } - case 353: + case 355: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1954 +//line sql.y:1961 { yyVAL.statement = &OtherAdmin{} } - case 354: + case 356: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1958 +//line sql.y:1965 { yyVAL.statement = &OtherAdmin{} } - case 355: + case 357: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1962 +//line sql.y:1969 { yyVAL.statement = &OtherAdmin{} } - case 356: + case 358: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1966 +//line sql.y:1973 { yyVAL.statement = &OtherAdmin{} } - case 357: + case 359: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1972 +//line sql.y:1979 { yyVAL.statement = &DDL{Action: FlushStr} } - case 358: + case 360: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1976 +//line sql.y:1983 { setAllowComments(yylex, true) } - case 359: + case 361: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1980 +//line sql.y:1987 { yyVAL.bytes2 = yyDollar[2].bytes2 setAllowComments(yylex, false) } - case 360: + case 362: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1986 +//line sql.y:1993 { yyVAL.bytes2 = nil } - case 361: + case 363: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1990 +//line sql.y:1997 { yyVAL.bytes2 = append(yyDollar[1].bytes2, yyDollar[2].bytes) } - case 362: + case 364: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1996 +//line sql.y:2003 { yyVAL.str = UnionStr } - case 363: + case 365: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2000 +//line sql.y:2007 { yyVAL.str = UnionAllStr } - case 364: + case 366: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2004 +//line sql.y:2011 { yyVAL.str = UnionDistinctStr } - case 365: + case 367: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2009 +//line sql.y:2016 { yyVAL.str = "" } - case 366: + case 368: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2013 +//line sql.y:2020 { yyVAL.str = SQLNoCacheStr } - case 367: + case 369: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2017 +//line sql.y:2024 { yyVAL.str = SQLCacheStr } - case 368: + case 370: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2022 +//line sql.y:2029 { yyVAL.str = "" } - case 369: + case 371: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2026 +//line sql.y:2033 { yyVAL.str = DistinctStr } - case 370: + case 372: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2030 +//line sql.y:2037 { yyVAL.str = DistinctStr } - case 371: + case 373: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2035 +//line sql.y:2042 { yyVAL.selectExprs = nil } - case 372: + case 374: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2039 +//line sql.y:2046 { yyVAL.selectExprs = yyDollar[1].selectExprs } - case 373: + case 375: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2044 +//line sql.y:2051 { yyVAL.strs = nil } - case 374: + case 376: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2048 +//line sql.y:2055 { yyVAL.strs = []string{yyDollar[1].str} } - case 375: + case 377: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2052 +//line sql.y:2059 { // TODO: This is a hack since I couldn't get it to work in a nicer way. I got 'conflicts: 8 shift/reduce' yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str} } - case 376: + case 378: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2056 +//line sql.y:2063 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str} } - case 377: + case 379: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2060 +//line sql.y:2067 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str, yyDollar[4].str} } - case 378: + case 380: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2066 +//line sql.y:2073 { yyVAL.str = SQLNoCacheStr } - case 379: + case 381: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2070 +//line sql.y:2077 { yyVAL.str = SQLCacheStr } - case 380: + case 382: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2074 +//line sql.y:2081 { yyVAL.str = DistinctStr } - case 381: + case 383: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2078 +//line sql.y:2085 { yyVAL.str = DistinctStr } - case 382: + case 384: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2082 +//line sql.y:2089 { yyVAL.str = StraightJoinHint } - case 383: + case 385: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2086 +//line sql.y:2093 { yyVAL.str = SQLCalcFoundRowsStr } - case 384: + case 386: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2092 +//line sql.y:2099 { yyVAL.selectExprs = SelectExprs{yyDollar[1].selectExpr} } - case 385: + case 387: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2096 +//line sql.y:2103 { yyVAL.selectExprs = append(yyVAL.selectExprs, yyDollar[3].selectExpr) } - case 386: + case 388: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2102 +//line sql.y:2109 { yyVAL.selectExpr = &StarExpr{} } - case 387: + case 389: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2106 +//line sql.y:2113 { yyVAL.selectExpr = &AliasedExpr{Expr: yyDollar[1].expr, As: yyDollar[2].colIdent} } - case 388: + case 390: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2110 +//line sql.y:2117 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Name: yyDollar[1].tableIdent}} } - case 389: + case 391: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2114 +//line sql.y:2121 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}} } - case 390: + case 392: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2119 +//line sql.y:2126 { yyVAL.colIdent = ColIdent{} } - case 391: + case 393: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2123 +//line sql.y:2130 { yyVAL.colIdent = yyDollar[1].colIdent } - case 392: + case 394: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2127 +//line sql.y:2134 { yyVAL.colIdent = yyDollar[2].colIdent } - case 394: + case 396: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2134 +//line sql.y:2141 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 395: + case 397: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2139 +//line sql.y:2146 { yyVAL.tableExprs = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewTableIdent("dual")}}} } - case 396: + case 398: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2143 +//line sql.y:2150 { yyVAL.tableExprs = yyDollar[2].tableExprs } - case 397: + case 399: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2149 +//line sql.y:2156 { yyVAL.tableExprs = TableExprs{yyDollar[1].tableExpr} } - case 398: + case 400: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2153 +//line sql.y:2160 { yyVAL.tableExprs = append(yyVAL.tableExprs, yyDollar[3].tableExpr) } - case 401: + case 403: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2163 +//line sql.y:2170 { yyVAL.tableExpr = yyDollar[1].aliasedTableName } - case 402: + case 404: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2167 +//line sql.y:2174 { yyVAL.tableExpr = &AliasedTableExpr{Expr: yyDollar[1].subquery, As: yyDollar[3].tableIdent} } - case 403: + case 405: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2171 +//line sql.y:2178 { yyVAL.tableExpr = &ParenTableExpr{Exprs: yyDollar[2].tableExprs} } - case 404: + case 406: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2177 +//line sql.y:2184 { yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } - case 405: + case 407: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2183 +//line sql.y:2190 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].tableIdent, Hints: yyDollar[3].indexHints} } - case 406: + case 408: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2187 +//line sql.y:2194 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitions, As: yyDollar[6].tableIdent, Hints: yyDollar[7].indexHints} } - case 407: + case 409: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2193 +//line sql.y:2200 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 408: + case 410: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2197 +//line sql.y:2204 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 409: + case 411: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2203 +//line sql.y:2210 { yyVAL.partitions = Partitions{yyDollar[1].colIdent} } - case 410: + case 412: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2207 +//line sql.y:2214 { yyVAL.partitions = append(yyVAL.partitions, yyDollar[3].colIdent) } - case 411: + case 413: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2220 +//line sql.y:2227 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 412: + case 414: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2224 +//line sql.y:2231 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 413: + case 415: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2228 +//line sql.y:2235 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 414: + case 416: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2232 +//line sql.y:2239 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr} } - case 415: + case 417: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2238 +//line sql.y:2245 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } - case 416: + case 418: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2240 +//line sql.y:2247 { yyVAL.joinCondition = JoinCondition{Using: yyDollar[3].columns} } - case 417: + case 419: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2244 +//line sql.y:2251 { yyVAL.joinCondition = JoinCondition{} } - case 418: + case 420: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2246 +//line sql.y:2253 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 419: + case 421: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2250 +//line sql.y:2257 { yyVAL.joinCondition = JoinCondition{} } - case 420: + case 422: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2252 +//line sql.y:2259 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } - case 421: + case 423: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2255 +//line sql.y:2262 { yyVAL.empty = struct{}{} } - case 422: + case 424: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2257 +//line sql.y:2264 { yyVAL.empty = struct{}{} } - case 423: + case 425: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2260 +//line sql.y:2267 { yyVAL.tableIdent = NewTableIdent("") } - case 424: + case 426: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2264 +//line sql.y:2271 { yyVAL.tableIdent = yyDollar[1].tableIdent } - case 425: + case 427: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2268 +//line sql.y:2275 { yyVAL.tableIdent = yyDollar[2].tableIdent } - case 427: + case 429: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2275 +//line sql.y:2282 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 428: + case 430: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2281 +//line sql.y:2288 { yyVAL.str = JoinStr } - case 429: + case 431: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2285 +//line sql.y:2292 { yyVAL.str = JoinStr } - case 430: + case 432: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2289 +//line sql.y:2296 { yyVAL.str = JoinStr } - case 431: + case 433: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2295 +//line sql.y:2302 { yyVAL.str = StraightJoinStr } - case 432: + case 434: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2301 +//line sql.y:2308 { yyVAL.str = LeftJoinStr } - case 433: + case 435: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2305 +//line sql.y:2312 { yyVAL.str = LeftJoinStr } - case 434: + case 436: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2309 +//line sql.y:2316 { yyVAL.str = RightJoinStr } - case 435: + case 437: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2313 +//line sql.y:2320 { yyVAL.str = RightJoinStr } - case 436: + case 438: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2319 +//line sql.y:2326 { yyVAL.str = NaturalJoinStr } - case 437: + case 439: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2323 +//line sql.y:2330 { if yyDollar[2].str == LeftJoinStr { yyVAL.str = NaturalLeftJoinStr @@ -6266,489 +6294,489 @@ yydefault: yyVAL.str = NaturalRightJoinStr } } - case 438: + case 440: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2333 +//line sql.y:2340 { yyVAL.tableName = yyDollar[2].tableName } - case 439: + case 441: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2337 +//line sql.y:2344 { yyVAL.tableName = yyDollar[1].tableName } - case 440: + case 442: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2343 +//line sql.y:2350 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } - case 441: + case 443: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2347 +//line sql.y:2354 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent} } - case 442: + case 444: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2353 +//line sql.y:2360 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } - case 443: + case 445: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2358 +//line sql.y:2365 { yyVAL.indexHints = nil } - case 444: + case 446: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2362 +//line sql.y:2369 { yyVAL.indexHints = &IndexHints{Type: UseStr, Indexes: yyDollar[4].columns} } - case 445: + case 447: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2366 +//line sql.y:2373 { yyVAL.indexHints = &IndexHints{Type: UseStr} } - case 446: + case 448: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2370 +//line sql.y:2377 { yyVAL.indexHints = &IndexHints{Type: IgnoreStr, Indexes: yyDollar[4].columns} } - case 447: + case 449: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2374 +//line sql.y:2381 { yyVAL.indexHints = &IndexHints{Type: ForceStr, Indexes: yyDollar[4].columns} } - case 448: + case 450: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2379 +//line sql.y:2386 { yyVAL.expr = nil } - case 449: + case 451: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2383 +//line sql.y:2390 { yyVAL.expr = yyDollar[2].expr } - case 450: + case 452: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2389 +//line sql.y:2396 { yyVAL.expr = yyDollar[1].expr } - case 451: + case 453: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2393 +//line sql.y:2400 { yyVAL.expr = &AndExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 452: + case 454: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2397 +//line sql.y:2404 { yyVAL.expr = &OrExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 453: + case 455: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2401 +//line sql.y:2408 { yyVAL.expr = &XorExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 454: + case 456: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2405 +//line sql.y:2412 { yyVAL.expr = &NotExpr{Expr: yyDollar[2].expr} } - case 455: + case 457: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2409 +//line sql.y:2416 { yyVAL.expr = &IsExpr{Operator: yyDollar[3].str, Expr: yyDollar[1].expr} } - case 456: + case 458: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2413 +//line sql.y:2420 { yyVAL.expr = yyDollar[1].expr } - case 457: + case 459: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2417 +//line sql.y:2424 { yyVAL.expr = &Default{ColName: yyDollar[2].str} } - case 458: + case 460: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2423 +//line sql.y:2430 { yyVAL.str = "" } - case 459: + case 461: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2427 +//line sql.y:2434 { yyVAL.str = string(yyDollar[2].colIdent.String()) } - case 460: + case 462: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2433 +//line sql.y:2440 { yyVAL.boolVal = BoolVal(true) } - case 461: + case 463: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2437 +//line sql.y:2444 { yyVAL.boolVal = BoolVal(false) } - case 462: + case 464: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2443 +//line sql.y:2450 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: yyDollar[2].str, Right: yyDollar[3].expr} } - case 463: + case 465: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2447 +//line sql.y:2454 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: InStr, Right: yyDollar[3].colTuple} } - case 464: + case 466: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2451 +//line sql.y:2458 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotInStr, Right: yyDollar[4].colTuple} } - case 465: + case 467: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2455 +//line sql.y:2462 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: LikeStr, Right: yyDollar[3].expr, Escape: yyDollar[4].expr} } - case 466: + case 468: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2459 +//line sql.y:2466 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotLikeStr, Right: yyDollar[4].expr, Escape: yyDollar[5].expr} } - case 467: + case 469: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2463 +//line sql.y:2470 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: RegexpStr, Right: yyDollar[3].expr} } - case 468: + case 470: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2467 +//line sql.y:2474 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotRegexpStr, Right: yyDollar[4].expr} } - case 469: + case 471: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2471 +//line sql.y:2478 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: BetweenStr, From: yyDollar[3].expr, To: yyDollar[5].expr} } - case 470: + case 472: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2475 +//line sql.y:2482 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: NotBetweenStr, From: yyDollar[4].expr, To: yyDollar[6].expr} } - case 471: + case 473: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2479 +//line sql.y:2486 { yyVAL.expr = &ExistsExpr{Subquery: yyDollar[2].subquery} } - case 472: + case 474: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2485 +//line sql.y:2492 { yyVAL.str = IsNullStr } - case 473: + case 475: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2489 +//line sql.y:2496 { yyVAL.str = IsNotNullStr } - case 474: + case 476: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2493 +//line sql.y:2500 { yyVAL.str = IsTrueStr } - case 475: + case 477: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2497 +//line sql.y:2504 { yyVAL.str = IsNotTrueStr } - case 476: + case 478: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2501 +//line sql.y:2508 { yyVAL.str = IsFalseStr } - case 477: + case 479: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2505 +//line sql.y:2512 { yyVAL.str = IsNotFalseStr } - case 478: + case 480: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2511 +//line sql.y:2518 { yyVAL.str = EqualStr } - case 479: + case 481: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2515 +//line sql.y:2522 { yyVAL.str = LessThanStr } - case 480: + case 482: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2519 +//line sql.y:2526 { yyVAL.str = GreaterThanStr } - case 481: + case 483: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2523 +//line sql.y:2530 { yyVAL.str = LessEqualStr } - case 482: + case 484: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2527 +//line sql.y:2534 { yyVAL.str = GreaterEqualStr } - case 483: + case 485: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2531 +//line sql.y:2538 { yyVAL.str = NotEqualStr } - case 484: + case 486: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2535 +//line sql.y:2542 { yyVAL.str = NullSafeEqualStr } - case 485: + case 487: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2540 +//line sql.y:2547 { yyVAL.expr = nil } - case 486: + case 488: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2544 +//line sql.y:2551 { yyVAL.expr = yyDollar[2].expr } - case 487: + case 489: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2550 +//line sql.y:2557 { yyVAL.colTuple = yyDollar[1].valTuple } - case 488: + case 490: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2554 +//line sql.y:2561 { yyVAL.colTuple = yyDollar[1].subquery } - case 489: + case 491: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2558 +//line sql.y:2565 { yyVAL.colTuple = ListArg(yyDollar[1].bytes) } - case 490: + case 492: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2564 +//line sql.y:2571 { yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } - case 491: + case 493: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2570 +//line sql.y:2577 { yyVAL.exprs = Exprs{yyDollar[1].expr} } - case 492: + case 494: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2574 +//line sql.y:2581 { yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) } - case 493: + case 495: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2580 +//line sql.y:2587 { yyVAL.expr = yyDollar[1].expr } - case 494: + case 496: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2584 +//line sql.y:2591 { yyVAL.expr = yyDollar[1].boolVal } - case 495: + case 497: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2588 +//line sql.y:2595 { yyVAL.expr = yyDollar[1].colName } - case 496: + case 498: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2592 +//line sql.y:2599 { yyVAL.expr = yyDollar[1].expr } - case 497: + case 499: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2596 +//line sql.y:2603 { yyVAL.expr = yyDollar[1].subquery } - case 498: + case 500: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2600 +//line sql.y:2607 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitAndStr, Right: yyDollar[3].expr} } - case 499: + case 501: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2604 +//line sql.y:2611 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitOrStr, Right: yyDollar[3].expr} } - case 500: + case 502: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2608 +//line sql.y:2615 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitXorStr, Right: yyDollar[3].expr} } - case 501: + case 503: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2612 +//line sql.y:2619 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: PlusStr, Right: yyDollar[3].expr} } - case 502: + case 504: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2616 +//line sql.y:2623 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MinusStr, Right: yyDollar[3].expr} } - case 503: + case 505: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2620 +//line sql.y:2627 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MultStr, Right: yyDollar[3].expr} } - case 504: + case 506: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2624 +//line sql.y:2631 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: DivStr, Right: yyDollar[3].expr} } - case 505: + case 507: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2628 +//line sql.y:2635 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: IntDivStr, Right: yyDollar[3].expr} } - case 506: + case 508: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2632 +//line sql.y:2639 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 507: + case 509: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2636 +//line sql.y:2643 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 508: + case 510: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2640 +//line sql.y:2647 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftLeftStr, Right: yyDollar[3].expr} } - case 509: + case 511: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2644 +//line sql.y:2651 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftRightStr, Right: yyDollar[3].expr} } - case 510: + case 512: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2648 +//line sql.y:2655 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONExtractOp, Right: yyDollar[3].expr} } - case 511: + case 513: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2652 +//line sql.y:2659 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONUnquoteExtractOp, Right: yyDollar[3].expr} } - case 512: + case 514: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2656 +//line sql.y:2663 { yyVAL.expr = &CollateExpr{Expr: yyDollar[1].expr, Charset: yyDollar[3].str} } - case 513: + case 515: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2660 +//line sql.y:2667 { yyVAL.expr = &UnaryExpr{Operator: BinaryStr, Expr: yyDollar[2].expr} } - case 514: + case 516: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2664 +//line sql.y:2671 { yyVAL.expr = &UnaryExpr{Operator: UBinaryStr, Expr: yyDollar[2].expr} } - case 515: + case 517: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2668 +//line sql.y:2675 { yyVAL.expr = &UnaryExpr{Operator: Utf8Str, Expr: yyDollar[2].expr} } - case 516: + case 518: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2672 +//line sql.y:2679 { yyVAL.expr = &UnaryExpr{Operator: Utf8mb4Str, Expr: yyDollar[2].expr} } - case 517: + case 519: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2676 +//line sql.y:2683 { yyVAL.expr = &UnaryExpr{Operator: Latin1Str, Expr: yyDollar[2].expr} } - case 518: + case 520: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2680 +//line sql.y:2687 { if num, ok := yyDollar[2].expr.(*Literal); ok && num.Type == IntVal { yyVAL.expr = num @@ -6756,9 +6784,9 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UPlusStr, Expr: yyDollar[2].expr} } } - case 519: + case 521: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2688 +//line sql.y:2695 { if num, ok := yyDollar[2].expr.(*Literal); ok && num.Type == IntVal { // Handle double negative @@ -6772,21 +6800,21 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UMinusStr, Expr: yyDollar[2].expr} } } - case 520: + case 522: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2702 +//line sql.y:2709 { yyVAL.expr = &UnaryExpr{Operator: TildaStr, Expr: yyDollar[2].expr} } - case 521: + case 523: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2706 +//line sql.y:2713 { yyVAL.expr = &UnaryExpr{Operator: BangStr, Expr: yyDollar[2].expr} } - case 522: + case 524: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2710 +//line sql.y:2717 { // This rule prevents the usage of INTERVAL // as a function. If support is needed for that, @@ -6794,497 +6822,497 @@ yydefault: // will be non-trivial because of grammar conflicts. yyVAL.expr = &IntervalExpr{Expr: yyDollar[2].expr, Unit: yyDollar[3].colIdent.String()} } - case 527: + case 529: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2728 +//line sql.y:2735 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Exprs: yyDollar[3].selectExprs} } - case 528: + case 530: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2732 +//line sql.y:2739 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } - case 529: + case 531: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2736 +//line sql.y:2743 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } - case 530: + case 532: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2740 +//line sql.y:2747 { yyVAL.expr = &FuncExpr{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].colIdent, Exprs: yyDollar[5].selectExprs} } - case 531: + case 533: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2750 +//line sql.y:2757 { yyVAL.expr = &FuncExpr{Name: NewColIdent("left"), Exprs: yyDollar[3].selectExprs} } - case 532: + case 534: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2754 +//line sql.y:2761 { yyVAL.expr = &FuncExpr{Name: NewColIdent("right"), Exprs: yyDollar[3].selectExprs} } - case 533: + case 535: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2758 +//line sql.y:2765 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 534: + case 536: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2762 +//line sql.y:2769 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 535: + case 537: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2766 +//line sql.y:2773 { yyVAL.expr = &ConvertUsingExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].str} } - case 536: + case 538: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2770 +//line sql.y:2777 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 537: + case 539: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2774 +//line sql.y:2781 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 538: + case 540: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2778 +//line sql.y:2785 { yyVAL.expr = &SubstrExpr{StrVal: NewStrLiteral(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 539: + case 541: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2782 +//line sql.y:2789 { yyVAL.expr = &SubstrExpr{StrVal: NewStrLiteral(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 540: + case 542: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:2786 +//line sql.y:2793 { yyVAL.expr = &MatchExpr{Columns: yyDollar[3].selectExprs, Expr: yyDollar[7].expr, Option: yyDollar[8].str} } - case 541: + case 543: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2790 +//line sql.y:2797 { yyVAL.expr = &GroupConcatExpr{Distinct: yyDollar[3].str, Exprs: yyDollar[4].selectExprs, OrderBy: yyDollar[5].orderBy, Separator: yyDollar[6].str, Limit: yyDollar[7].limit} } - case 542: + case 544: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2794 +//line sql.y:2801 { yyVAL.expr = &CaseExpr{Expr: yyDollar[2].expr, Whens: yyDollar[3].whens, Else: yyDollar[4].expr} } - case 543: + case 545: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2798 +//line sql.y:2805 { yyVAL.expr = &ValuesFuncExpr{Name: yyDollar[3].colName} } - case 544: + case 546: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2808 +//line sql.y:2815 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_timestamp")} } - case 545: + case 547: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2812 +//line sql.y:2819 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_timestamp")} } - case 546: + case 548: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2816 +//line sql.y:2823 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_time")} } - case 547: + case 549: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2821 +//line sql.y:2828 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_date")} } - case 548: + case 550: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2826 +//line sql.y:2833 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtime")} } - case 549: + case 551: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2831 +//line sql.y:2838 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtimestamp")} } - case 550: + case 552: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2837 +//line sql.y:2844 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_date")} } - case 551: + case 553: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2842 +//line sql.y:2849 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_time")} } - case 552: + case 554: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2847 +//line sql.y:2854 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_timestamp"), Fsp: yyDollar[2].expr} } - case 553: + case 555: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2851 +//line sql.y:2858 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_timestamp"), Fsp: yyDollar[2].expr} } - case 554: + case 556: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2855 +//line sql.y:2862 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_time"), Fsp: yyDollar[2].expr} } - case 555: + case 557: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2860 +//line sql.y:2867 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtime"), Fsp: yyDollar[2].expr} } - case 556: + case 558: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2865 +//line sql.y:2872 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtimestamp"), Fsp: yyDollar[2].expr} } - case 557: + case 559: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2870 +//line sql.y:2877 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_time"), Fsp: yyDollar[2].expr} } - case 558: + case 560: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2874 +//line sql.y:2881 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } - case 559: + case 561: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2878 +//line sql.y:2885 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } - case 562: + case 564: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2888 +//line sql.y:2895 { yyVAL.expr = yyDollar[2].expr } - case 563: + case 565: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2898 +//line sql.y:2905 { yyVAL.expr = &FuncExpr{Name: NewColIdent("if"), Exprs: yyDollar[3].selectExprs} } - case 564: + case 566: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2902 +//line sql.y:2909 { yyVAL.expr = &FuncExpr{Name: NewColIdent("database"), Exprs: yyDollar[3].selectExprs} } - case 565: + case 567: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2906 +//line sql.y:2913 { yyVAL.expr = &FuncExpr{Name: NewColIdent("schema"), Exprs: yyDollar[3].selectExprs} } - case 566: + case 568: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2910 +//line sql.y:2917 { yyVAL.expr = &FuncExpr{Name: NewColIdent("mod"), Exprs: yyDollar[3].selectExprs} } - case 567: + case 569: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2914 +//line sql.y:2921 { yyVAL.expr = &FuncExpr{Name: NewColIdent("replace"), Exprs: yyDollar[3].selectExprs} } - case 568: + case 570: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2918 +//line sql.y:2925 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } - case 569: + case 571: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2922 +//line sql.y:2929 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } - case 570: + case 572: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2928 +//line sql.y:2935 { yyVAL.str = "" } - case 571: + case 573: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2932 +//line sql.y:2939 { yyVAL.str = BooleanModeStr } - case 572: + case 574: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2936 +//line sql.y:2943 { yyVAL.str = NaturalLanguageModeStr } - case 573: + case 575: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2940 +//line sql.y:2947 { yyVAL.str = NaturalLanguageModeWithQueryExpansionStr } - case 574: + case 576: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2944 +//line sql.y:2951 { yyVAL.str = QueryExpansionStr } - case 575: + case 577: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2950 +//line sql.y:2957 { yyVAL.str = string(yyDollar[1].colIdent.String()) } - case 576: + case 578: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2954 +//line sql.y:2961 { yyVAL.str = string(yyDollar[1].bytes) } - case 577: + case 579: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2960 +//line sql.y:2967 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } - case 578: + case 580: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2964 +//line sql.y:2971 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal, Charset: yyDollar[3].str, Operator: CharacterSetStr} } - case 579: + case 581: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2968 +//line sql.y:2975 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal, Charset: string(yyDollar[3].colIdent.String())} } - case 580: + case 582: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2972 +//line sql.y:2979 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 581: + case 583: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2976 +//line sql.y:2983 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } - case 582: + case 584: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2980 +//line sql.y:2987 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} yyVAL.convertType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.convertType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 583: + case 585: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2986 +//line sql.y:2993 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 584: + case 586: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2990 +//line sql.y:2997 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } - case 585: + case 587: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2994 +//line sql.y:3001 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 586: + case 588: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2998 +//line sql.y:3005 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 587: + case 589: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3002 +//line sql.y:3009 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } - case 588: + case 590: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3006 +//line sql.y:3013 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 589: + case 591: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3010 +//line sql.y:3017 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 590: + case 592: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3015 +//line sql.y:3022 { yyVAL.expr = nil } - case 591: + case 593: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3019 +//line sql.y:3026 { yyVAL.expr = yyDollar[1].expr } - case 592: + case 594: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3024 +//line sql.y:3031 { yyVAL.str = string("") } - case 593: + case 595: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3028 +//line sql.y:3035 { yyVAL.str = " separator '" + string(yyDollar[2].bytes) + "'" } - case 594: + case 596: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3034 +//line sql.y:3041 { yyVAL.whens = []*When{yyDollar[1].when} } - case 595: + case 597: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3038 +//line sql.y:3045 { yyVAL.whens = append(yyDollar[1].whens, yyDollar[2].when) } - case 596: + case 598: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3044 +//line sql.y:3051 { yyVAL.when = &When{Cond: yyDollar[2].expr, Val: yyDollar[4].expr} } - case 597: + case 599: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3049 +//line sql.y:3056 { yyVAL.expr = nil } - case 598: + case 600: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3053 +//line sql.y:3060 { yyVAL.expr = yyDollar[2].expr } - case 599: + case 601: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3059 +//line sql.y:3066 { yyVAL.colName = &ColName{Name: yyDollar[1].colIdent} } - case 600: + case 602: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3063 +//line sql.y:3070 { yyVAL.colName = &ColName{Qualifier: TableName{Name: yyDollar[1].tableIdent}, Name: yyDollar[3].colIdent} } - case 601: + case 603: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3067 +//line sql.y:3074 { yyVAL.colName = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}, Name: yyDollar[5].colIdent} } - case 602: + case 604: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3073 +//line sql.y:3080 { yyVAL.expr = NewStrLiteral(yyDollar[1].bytes) } - case 603: + case 605: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3077 +//line sql.y:3084 { yyVAL.expr = NewHexLiteral(yyDollar[1].bytes) } - case 604: + case 606: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3081 +//line sql.y:3088 { yyVAL.expr = NewBitLiteral(yyDollar[1].bytes) } - case 605: + case 607: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3085 +//line sql.y:3092 { yyVAL.expr = NewIntLiteral(yyDollar[1].bytes) } - case 606: + case 608: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3089 +//line sql.y:3096 { yyVAL.expr = NewFloatLiteral(yyDollar[1].bytes) } - case 607: + case 609: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3093 +//line sql.y:3100 { yyVAL.expr = NewHexNumLiteral(yyDollar[1].bytes) } - case 608: + case 610: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3097 +//line sql.y:3104 { yyVAL.expr = NewArgument(yyDollar[1].bytes) } - case 609: + case 611: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3101 +//line sql.y:3108 { yyVAL.expr = &NullVal{} } - case 610: + case 612: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3107 +//line sql.y:3114 { // TODO(sougou): Deprecate this construct. if yyDollar[1].colIdent.Lowered() != "value" { @@ -7293,225 +7321,225 @@ yydefault: } yyVAL.expr = NewIntLiteral([]byte("1")) } - case 611: + case 613: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3116 +//line sql.y:3123 { yyVAL.expr = NewIntLiteral(yyDollar[1].bytes) } - case 612: + case 614: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3120 +//line sql.y:3127 { yyVAL.expr = NewArgument(yyDollar[1].bytes) } - case 613: + case 615: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3125 +//line sql.y:3132 { yyVAL.exprs = nil } - case 614: + case 616: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3129 +//line sql.y:3136 { yyVAL.exprs = yyDollar[3].exprs } - case 615: + case 617: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3134 +//line sql.y:3141 { yyVAL.expr = nil } - case 616: + case 618: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3138 +//line sql.y:3145 { yyVAL.expr = yyDollar[2].expr } - case 617: + case 619: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3143 +//line sql.y:3150 { yyVAL.orderBy = nil } - case 618: + case 620: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3147 +//line sql.y:3154 { yyVAL.orderBy = yyDollar[3].orderBy } - case 619: + case 621: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3153 +//line sql.y:3160 { yyVAL.orderBy = OrderBy{yyDollar[1].order} } - case 620: + case 622: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3157 +//line sql.y:3164 { yyVAL.orderBy = append(yyDollar[1].orderBy, yyDollar[3].order) } - case 621: + case 623: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3163 +//line sql.y:3170 { yyVAL.order = &Order{Expr: yyDollar[1].expr, Direction: yyDollar[2].str} } - case 622: + case 624: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3168 +//line sql.y:3175 { yyVAL.str = AscScr } - case 623: + case 625: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3172 +//line sql.y:3179 { yyVAL.str = AscScr } - case 624: + case 626: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3176 +//line sql.y:3183 { yyVAL.str = DescScr } - case 625: + case 627: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3181 +//line sql.y:3188 { yyVAL.limit = nil } - case 626: + case 628: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3185 +//line sql.y:3192 { yyVAL.limit = &Limit{Rowcount: yyDollar[2].expr} } - case 627: + case 629: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3189 +//line sql.y:3196 { yyVAL.limit = &Limit{Offset: yyDollar[2].expr, Rowcount: yyDollar[4].expr} } - case 628: + case 630: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3193 +//line sql.y:3200 { yyVAL.limit = &Limit{Offset: yyDollar[4].expr, Rowcount: yyDollar[2].expr} } - case 629: + case 631: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3198 +//line sql.y:3205 { yyVAL.str = "" } - case 630: + case 632: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3202 +//line sql.y:3209 { yyVAL.str = ForUpdateStr } - case 631: + case 633: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3206 +//line sql.y:3213 { yyVAL.str = ShareModeStr } - case 632: + case 634: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3219 +//line sql.y:3226 { yyVAL.ins = &Insert{Rows: yyDollar[2].values} } - case 633: + case 635: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3223 +//line sql.y:3230 { yyVAL.ins = &Insert{Rows: yyDollar[1].selStmt} } - case 634: + case 636: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3227 +//line sql.y:3234 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].values} } - case 635: + case 637: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3231 +//line sql.y:3238 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[4].selStmt} } - case 636: + case 638: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3237 +//line sql.y:3244 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 637: + case 639: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3241 +//line sql.y:3248 { yyVAL.columns = Columns{yyDollar[3].colIdent} } - case 638: + case 640: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3245 +//line sql.y:3252 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 639: + case 641: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3249 +//line sql.y:3256 { yyVAL.columns = append(yyVAL.columns, yyDollar[5].colIdent) } - case 640: + case 642: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3254 +//line sql.y:3261 { yyVAL.updateExprs = nil } - case 641: + case 643: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3258 +//line sql.y:3265 { yyVAL.updateExprs = yyDollar[5].updateExprs } - case 642: + case 644: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3264 +//line sql.y:3271 { yyVAL.values = Values{yyDollar[1].valTuple} } - case 643: + case 645: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3268 +//line sql.y:3275 { yyVAL.values = append(yyDollar[1].values, yyDollar[3].valTuple) } - case 644: + case 646: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3274 +//line sql.y:3281 { yyVAL.valTuple = yyDollar[1].valTuple } - case 645: + case 647: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3278 +//line sql.y:3285 { yyVAL.valTuple = ValTuple{} } - case 646: + case 648: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3284 +//line sql.y:3291 { yyVAL.valTuple = ValTuple(yyDollar[2].exprs) } - case 647: + case 649: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3290 +//line sql.y:3297 { if len(yyDollar[1].valTuple) == 1 { yyVAL.expr = yyDollar[1].valTuple[0] @@ -7519,319 +7547,319 @@ yydefault: yyVAL.expr = yyDollar[1].valTuple } } - case 648: + case 650: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3300 +//line sql.y:3307 { yyVAL.updateExprs = UpdateExprs{yyDollar[1].updateExpr} } - case 649: + case 651: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3304 +//line sql.y:3311 { yyVAL.updateExprs = append(yyDollar[1].updateExprs, yyDollar[3].updateExpr) } - case 650: + case 652: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3310 +//line sql.y:3317 { yyVAL.updateExpr = &UpdateExpr{Name: yyDollar[1].colName, Expr: yyDollar[3].expr} } - case 651: + case 653: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3316 +//line sql.y:3323 { yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} } - case 652: + case 654: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3320 +//line sql.y:3327 { yyVAL.setExprs = append(yyDollar[1].setExprs, yyDollar[3].setExpr) } - case 653: + case 655: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3326 +//line sql.y:3333 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrLiteral([]byte("on"))} } - case 654: + case 656: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3330 +//line sql.y:3337 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrLiteral([]byte("off"))} } - case 655: + case 657: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3334 +//line sql.y:3341 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: yyDollar[3].expr} } - case 656: + case 658: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3338 +//line sql.y:3345 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(string(yyDollar[1].bytes)), Expr: yyDollar[2].expr} } - case 657: + case 659: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3342 +//line sql.y:3349 { yyDollar[2].setExpr.Scope = yyDollar[1].str yyVAL.setExpr = yyDollar[2].setExpr } - case 659: + case 661: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3350 +//line sql.y:3357 { yyVAL.bytes = []byte("charset") } - case 661: + case 663: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3357 +//line sql.y:3364 { yyVAL.expr = NewStrLiteral([]byte(yyDollar[1].colIdent.String())) } - case 662: + case 664: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3361 +//line sql.y:3368 { yyVAL.expr = NewStrLiteral(yyDollar[1].bytes) } - case 663: + case 665: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3365 +//line sql.y:3372 { yyVAL.expr = &Default{} } - case 666: + case 668: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3374 +//line sql.y:3381 { yyVAL.byt = 0 } - case 667: + case 669: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3376 +//line sql.y:3383 { yyVAL.byt = 1 } - case 668: + case 670: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3379 +//line sql.y:3386 { yyVAL.empty = struct{}{} } - case 669: + case 671: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3381 +//line sql.y:3388 { yyVAL.empty = struct{}{} } - case 670: + case 672: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3384 +//line sql.y:3391 { yyVAL.str = "" } - case 671: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3386 - { - yyVAL.str = IgnoreStr - } - case 672: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3390 - { - yyVAL.empty = struct{}{} - } case 673: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3392 +//line sql.y:3393 { - yyVAL.empty = struct{}{} + yyVAL.str = IgnoreStr } case 674: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3394 +//line sql.y:3397 { yyVAL.empty = struct{}{} } case 675: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3396 +//line sql.y:3399 { yyVAL.empty = struct{}{} } case 676: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3398 +//line sql.y:3401 { yyVAL.empty = struct{}{} } case 677: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3400 +//line sql.y:3403 { yyVAL.empty = struct{}{} } case 678: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3402 +//line sql.y:3405 { yyVAL.empty = struct{}{} } case 679: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3404 +//line sql.y:3407 { yyVAL.empty = struct{}{} } case 680: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3406 +//line sql.y:3409 { yyVAL.empty = struct{}{} } case 681: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3408 +//line sql.y:3411 { yyVAL.empty = struct{}{} } case 682: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3411 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3413 { yyVAL.empty = struct{}{} } case 683: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3413 +//line sql.y:3415 { yyVAL.empty = struct{}{} } case 684: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3415 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:3418 { yyVAL.empty = struct{}{} } case 685: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3419 +//line sql.y:3420 { yyVAL.empty = struct{}{} } case 686: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3421 +//line sql.y:3422 { yyVAL.empty = struct{}{} } case 687: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3424 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3426 { yyVAL.empty = struct{}{} } case 688: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3426 +//line sql.y:3428 { yyVAL.empty = struct{}{} } case 689: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3428 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:3431 { yyVAL.empty = struct{}{} } case 690: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3433 + { + yyVAL.empty = struct{}{} + } + case 691: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3435 + { + yyVAL.empty = struct{}{} + } + case 692: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3431 +//line sql.y:3438 { yyVAL.colIdent = ColIdent{} } - case 691: + case 693: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3433 +//line sql.y:3440 { yyVAL.colIdent = yyDollar[2].colIdent } - case 692: + case 694: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3437 +//line sql.y:3444 { yyVAL.colIdent = yyDollar[1].colIdent } - case 693: + case 695: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3441 +//line sql.y:3448 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 695: + case 697: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3448 +//line sql.y:3455 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 696: + case 698: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3454 +//line sql.y:3461 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].colIdent.String())) } - case 697: + case 699: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3458 +//line sql.y:3465 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 699: + case 701: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3465 +//line sql.y:3472 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 994: + case 996: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3785 +//line sql.y:3792 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 995: + case 997: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3794 +//line sql.y:3801 { decNesting(yylex) } - case 996: + case 998: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3799 +//line sql.y:3806 { skipToEnd(yylex) } - case 997: + case 999: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3804 +//line sql.y:3811 { skipToEnd(yylex) } - case 998: + case 1000: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3808 +//line sql.y:3815 { skipToEnd(yylex) } - case 999: + case 1001: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3812 +//line sql.y:3819 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 49b74e5fc1e..ba30a3de151 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -121,7 +121,7 @@ func skipToEnd(yylex interface{}) { %token LEX_ERROR %left UNION -%token SELECT STREAM INSERT UPDATE DELETE FROM WHERE GROUP HAVING ORDER BY LIMIT OFFSET FOR +%token SELECT STREAM VSTREAM INSERT UPDATE DELETE FROM WHERE GROUP HAVING ORDER BY LIMIT OFFSET FOR %token ALL DISTINCT AS EXISTS ASC DESC INTO DUPLICATE KEY DEFAULT SET LOCK UNLOCK KEYS DO %token DISTINCTROW %token VALUES LAST_INSERT_ID @@ -220,7 +220,7 @@ func skipToEnd(yylex interface{}) { %type command %type simple_select select_statement base_select union_rhs %type explain_statement explainable_statement -%type stream_statement insert_statement update_statement delete_statement set_statement set_transaction_statement +%type stream_statement vstream_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 do_statement %type create_table_prefix rename_list %type analyze_statement show_statement use_statement other_statement @@ -348,6 +348,7 @@ command: $$ = $1 } | stream_statement +| vstream_statement | insert_statement | update_statement | delete_statement @@ -454,6 +455,12 @@ stream_statement: $$ = &Stream{Comments: Comments($2), SelectExpr: $3, Table: $5} } +vstream_statement: + VSTREAM comment_opt select_expression FROM table_name where_expression_opt limit_opt + { + $$ = &VStream{Comments: Comments($2), SelectExpr: $3, Table: $5, Where: NewWhere(WhereStr, $6), Limit: $7} + } + // base_select is an unparenthesized SELECT with no order by clause or beyond. base_select: // 1 2 3 4 5 6 7 8 diff --git a/go/vt/sqlparser/token.go b/go/vt/sqlparser/token.go index f891fb151db..833f0325241 100644 --- a/go/vt/sqlparser/token.go +++ b/go/vt/sqlparser/token.go @@ -356,6 +356,7 @@ var keywords = map[string]int{ "stored": UNUSED, "straight_join": STRAIGHT_JOIN, "stream": STREAM, + "vstream": VSTREAM, "table": TABLE, "tables": TABLES, "terminated": UNUSED, diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 9356945ef03..7a61721d49e 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -31,6 +31,8 @@ import ( "golang.org/x/net/context" "vitess.io/vitess/go/trace" + "vitess.io/vitess/go/vt/discovery" + "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/acl" "vitess.io/vitess/go/cache" @@ -53,6 +55,9 @@ import ( vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" ) +// this is the healthcheck used by vtgate, used by the "vstream * from" functionality +var vtgateHealthCheck discovery.HealthCheck + var ( errNoKeyspace = vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "no keyspace in database name specified. Supported database name format (items in <> are optional): keyspace<:shard><@type> or keyspace<[range]><@type>") defaultTabletType topodatapb.TabletType @@ -943,7 +948,6 @@ func (e *Executor) StreamExecute(ctx context.Context, method string, safeSession query, comments := sqlparser.SplitMarginComments(sql) vcursor, _ := newVCursorImpl(ctx, safeSession, comments, e, logStats, e.vm, e.VSchema(), e.resolver.resolver) vcursor.SetIgnoreMaxMemoryRows(true) - switch stmtType { case sqlparser.StmtStream: // this is a stream statement for messaging @@ -958,6 +962,9 @@ func (e *Executor) StreamExecute(ctx context.Context, method string, safeSession // These statements don't populate plan.Instructions. We want to make sure we don't try to // dereference nil Instructions which would panic. fallthrough + case sqlparser.StmtVStream: + log.Infof("handleVStream called with target %v", target) + return e.handleVStream(ctx, sql, target, callback, vcursor, logStats) default: return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unsupported statement type for OLAP: %s", stmtType) } diff --git a/go/vt/vtgate/executor_framework_test.go b/go/vt/vtgate/executor_framework_test.go index c986c148055..bdf69e12f4b 100644 --- a/go/vt/vtgate/executor_framework_test.go +++ b/go/vt/vtgate/executor_framework_test.go @@ -263,7 +263,8 @@ var unshardedVSchema = ` "sequence": "user_seq" } }, - "simple": {} + "simple": {}, + "t1": {} } } ` @@ -375,6 +376,7 @@ func createExecutorEnv() (executor *Executor, sbc1, sbc2, sbclookup *sandboxconn *GatewayImplementation = GatewayImplementationDiscovery cell := "aa" hc := discovery.NewFakeHealthCheck() + vtgateHealthCheck = hc s := createSandbox("TestExecutor") s.VSchema = executorVSchema serv := newSandboxForCells([]string{cell}) diff --git a/go/vt/vtgate/executor_vstream.go b/go/vt/vtgate/executor_vstream.go new file mode 100644 index 00000000000..821c63715eb --- /dev/null +++ b/go/vt/vtgate/executor_vstream.go @@ -0,0 +1,189 @@ +/* +Copyright 2020 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 vtgate + +import ( + "context" + "fmt" + "io" + "reflect" + "strconv" + "strings" + "time" + + "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/proto/binlogdata" + querypb "vitess.io/vitess/go/vt/proto/query" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" + vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/srvtopo" + "vitess.io/vitess/go/vt/vterrors" +) + +func (e *Executor) handleVStream(ctx context.Context, sql string, target querypb.Target, callback func(*sqltypes.Result) error, vcursor *vcursorImpl, logStats *LogStats) error { + stmt, err := sqlparser.Parse(sql) + if err != nil { + logStats.Error = err + return err + } + vstreamStmt, ok := stmt.(*sqlparser.VStream) + if !ok { + logStats.Error = err + return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "unrecognized VSTREAM statement: %v", sql) + } + + table, _, _, _, err := vcursor.FindTable(vstreamStmt.Table) + if err != nil { + logStats.Error = err + return err + } + + execStart := time.Now() + logStats.PlanTime = execStart.Sub(logStats.StartTime) + + err = e.startVStream(ctx, table.Keyspace.Name, target.Shard, nil, vstreamStmt, callback) + logStats.Error = err + logStats.ExecuteTime = time.Since(execStart) + return err +} + +func getVStreamStartPos(stmt *sqlparser.VStream) (string, error) { + var colName, pos string + log.Infof("in getVStreamStartPos with where %v", stmt.Where) + if stmt.Where != nil { + switch v := stmt.Where.Expr.(type) { + case *sqlparser.ComparisonExpr: + if v.Operator == sqlparser.GreaterThanStr { + log.Infof("Found EqualStr") + switch c := v.Left.(type) { + case *sqlparser.ColName: + log.Infof("Found ColName %v: %v", c, reflect.TypeOf(v.Right)) + switch val := v.Right.(type) { + case *sqlparser.SQLVal: + pos = string(val.Val) + } + colName = strings.ToLower(c.Name.String()) + if colName != "pos" { + return "", fmt.Errorf("can only use pos in vstream where clause ") + } + } + } else { + return "", fmt.Errorf("where can only be of type 'pos > '") + } + default: + return "", fmt.Errorf("where can only be of type 'pos > '") + } + } + return pos, nil +} + +func (e *Executor) startVStream(ctx context.Context, keyspace string, shard string, keyRange *topodatapb.KeyRange, stmt *sqlparser.VStream, callback func(*sqltypes.Result) error) error { + tableName := stmt.Table.Name.CompliantName() + var pos string + var err error + limit := 10000 + if stmt.Where != nil { + pos, err = getVStreamStartPos(stmt) + if err != nil { + return err + } + } + if stmt.Limit != nil { + count, ok := stmt.Limit.Rowcount.(*sqlparser.SQLVal) + if ok { + limit, _ = strconv.Atoi(string(count.Val)) + } + } + log.Infof("startVStream for %s.%s.%s, position %s, limit %d", keyspace, shard, tableName, pos, limit) + vgtid := &binlogdata.VGtid{ + ShardGtids: []*binlogdata.ShardGtid{{ + Keyspace: keyspace, + Shard: shard, + Gtid: pos, + }}, + } + log.Infof("VGTID is %v", vgtid) + filter := &binlogdata.Filter{ + Rules: []*binlogdata.Rule{{ + Match: tableName, + Filter: fmt.Sprintf("select * from %s", tableName), + }}, + } + var lastFields []*querypb.Field + numRows := 0 + if limit == 0 { + return io.EOF + } + send := func(evs []*binlogdata.VEvent) error { + result := &sqltypes.Result{ + Fields: nil, + RowsAffected: 0, + Rows: [][]sqltypes.Value{}, + } + log.Infof("Events got: %v", evs) + + for _, ev := range evs { + if numRows >= limit { + break + } + switch ev.Type { + case binlogdata.VEventType_FIELD: + result.Fields = ev.FieldEvent.Fields + lastFields = result.Fields + case binlogdata.VEventType_ROW: + if result.Fields == nil { + result.Fields = lastFields + } + for _, change := range ev.RowEvent.RowChanges { + vals := sqltypes.MakeRowTrusted(result.Fields, change.After) + result.Rows = append(result.Rows, vals) + numRows++ + if numRows >= limit { + break + } + } + result.RowsAffected = uint64(numRows) + default: + } + } + if numRows > 0 { + log.Infof("VStream Sending result to callback:%v", result) + err := callback(result) + numRows = 0 + if err != nil { + return err + } + return io.EOF + } + return nil + } + gw := NewTabletGateway(ctx, vtgateHealthCheck /*discovery.Healthcheck*/, e.serv, e.cell) + + srvResolver := srvtopo.NewResolver(e.serv, gw, e.cell) + + vs := &vstream{ + vgtid: vgtid, + tabletType: topodatapb.TabletType_MASTER, + filter: filter, + send: send, + resolver: srvResolver, + } + vs.stream(ctx) + return nil +} diff --git a/go/vt/vtgate/executor_vstream_test.go b/go/vt/vtgate/executor_vstream_test.go new file mode 100644 index 00000000000..b8fb414dc88 --- /dev/null +++ b/go/vt/vtgate/executor_vstream_test.go @@ -0,0 +1,132 @@ +/* +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 vtgate + +import ( + "testing" + "time" + + "github.com/stretchr/testify/require" + "golang.org/x/net/context" + "vitess.io/vitess/go/sqltypes" + binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" + querypb "vitess.io/vitess/go/vt/proto/query" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" + _ "vitess.io/vitess/go/vt/vtgate/vindexes" +) + +func TestVStreamZZZ(t *testing.T) { + send1 := []*binlogdatapb.VEvent{ + {Type: binlogdatapb.VEventType_GTID, Gtid: "gtid01"}, + {Type: binlogdatapb.VEventType_FIELD, FieldEvent: &binlogdatapb.FieldEvent{ + TableName: "t1", + Fields: []*querypb.Field{ + { + Name: "id", + Type: querypb.Type_INT64, + }, + { + Name: "val", + Type: querypb.Type_VARCHAR, + }, + }, + }, + }, + {Type: binlogdatapb.VEventType_ROW, RowEvent: &binlogdatapb.RowEvent{ + TableName: "t1", + RowChanges: []*binlogdatapb.RowChange{ + { + After: &querypb.Row{ + Lengths: []int64{1, 3}, + Values: []byte("1abc"), + }, + }, + { + After: &querypb.Row{ + Lengths: []int64{1, 5}, + Values: []byte("2defgh"), + }, + }, + }, + }, + }, + {Type: binlogdatapb.VEventType_COMMIT}, + } + + executor, _, _, sbclookup := createExecutorEnv() + sbclookup.AddVStreamEvents(send1, nil) + logChan := QueryLogger.Subscribe("Test") + defer QueryLogger.Unsubscribe(logChan) + + sql := "vstream * from t1 where pos > 'current' limit 2" //TODO pos > ""/"c, LIMIT + result, err := vstreamEvents(executor, sql) + require.NoError(t, err) + want := &sqltypes.Result{ + Fields: []*querypb.Field{ + {Name: "id", Type: sqltypes.Int64}, + {Name: "val", Type: sqltypes.VarChar}, + }, + RowsAffected: 2, + InsertID: 0, + Rows: [][]sqltypes.Value{{ + sqltypes.NewInt64(1), + sqltypes.NewVarChar("abc"), + }, { + sqltypes.NewInt64(2), + sqltypes.NewVarChar("defgh"), + }}, + } + if !result.Equal(want) { + t.Errorf("result: %+v, want %+v", result, want) + } +} + +func vstreamEvents(executor *Executor, sql string) (qr *sqltypes.Result, err error) { + results := make(chan *sqltypes.Result, 100) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond) + defer cancel() + err = executor.StreamExecute( + ctx, + "TestVStream", + NewSafeSession(masterSession), + sql, + nil, + querypb.Target{ + Keyspace: "TestUnsharded", + Shard: "0", + TabletType: topodatapb.TabletType_MASTER, + Cell: "aa", + }, + func(qr *sqltypes.Result) error { + results <- qr + return nil + }, + ) + close(results) + if err != nil { + return nil, err + } + first := true + for r := range results { + if first { + qr = &sqltypes.Result{Fields: r.Fields, RowsAffected: r.RowsAffected} + first = false + } + qr.Rows = append(qr.Rows, r.Rows...) + } + return qr, nil +} diff --git a/go/vt/vtgate/tabletgateway.go b/go/vt/vtgate/tabletgateway.go index 4180ff27dc6..b7ddf31db6b 100644 --- a/go/vt/vtgate/tabletgateway.go +++ b/go/vt/vtgate/tabletgateway.go @@ -97,7 +97,9 @@ func NewTabletGateway(ctx context.Context, hc discovery.HealthCheck, serv srvtop } } hc = createHealthCheck(ctx, *HealthCheckRetryDelay, *HealthCheckTimeout, topoServer, localCell, *CellsToWatch) + } + vtgateHealthCheck = hc gw := &TabletGateway{ hc: hc, srvTopoServer: serv, From 0d14090b879c97c543f73bc561a9f1fae7de4542 Mon Sep 17 00:00:00 2001 From: Rohit Nayak Date: Wed, 2 Sep 2020 20:43:36 +0200 Subject: [PATCH 2/6] VStream From: support sharded keyspaces Signed-off-by: Rohit Nayak --- go/vt/vtgate/executor_vstream.go | 39 +++++++++++++++++---------- go/vt/vtgate/executor_vstream_test.go | 4 +-- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/go/vt/vtgate/executor_vstream.go b/go/vt/vtgate/executor_vstream.go index 821c63715eb..f98ba7d47bf 100644 --- a/go/vt/vtgate/executor_vstream.go +++ b/go/vt/vtgate/executor_vstream.go @@ -20,7 +20,6 @@ import ( "context" "fmt" "io" - "reflect" "strconv" "strings" "time" @@ -65,15 +64,12 @@ func (e *Executor) handleVStream(ctx context.Context, sql string, target querypb func getVStreamStartPos(stmt *sqlparser.VStream) (string, error) { var colName, pos string - log.Infof("in getVStreamStartPos with where %v", stmt.Where) if stmt.Where != nil { switch v := stmt.Where.Expr.(type) { case *sqlparser.ComparisonExpr: if v.Operator == sqlparser.GreaterThanStr { - log.Infof("Found EqualStr") switch c := v.Left.(type) { case *sqlparser.ColName: - log.Infof("Found ColName %v: %v", c, reflect.TypeOf(v.Right)) switch val := v.Right.(type) { case *sqlparser.SQLVal: pos = string(val.Val) @@ -97,6 +93,10 @@ func (e *Executor) startVStream(ctx context.Context, keyspace string, shard stri tableName := stmt.Table.Name.CompliantName() var pos string var err error + gw := NewTabletGateway(ctx, vtgateHealthCheck /*discovery.Healthcheck*/, e.serv, e.cell) + + srvResolver := srvtopo.NewResolver(e.serv, gw, e.cell) + limit := 10000 if stmt.Where != nil { pos, err = getVStreamStartPos(stmt) @@ -111,14 +111,31 @@ func (e *Executor) startVStream(ctx context.Context, keyspace string, shard stri } } log.Infof("startVStream for %s.%s.%s, position %s, limit %d", keyspace, shard, tableName, pos, limit) - vgtid := &binlogdata.VGtid{ - ShardGtids: []*binlogdata.ShardGtid{{ + var shardGtids []*binlogdata.ShardGtid + if shard != "" { + shardGtid := &binlogdata.ShardGtid{ Keyspace: keyspace, Shard: shard, Gtid: pos, - }}, + } + shardGtids = append(shardGtids, shardGtid) + } else { + _, _, shards, err := srvResolver.GetKeyspaceShards(ctx, keyspace, topodatapb.TabletType_MASTER) + if err != nil { + return err + } + for _, shard := range shards { + shardGtid := &binlogdata.ShardGtid{ + Keyspace: keyspace, + Shard: shard.Name, + Gtid: pos, + } + shardGtids = append(shardGtids, shardGtid) + } + } + vgtid := &binlogdata.VGtid{ + ShardGtids: shardGtids, } - log.Infof("VGTID is %v", vgtid) filter := &binlogdata.Filter{ Rules: []*binlogdata.Rule{{ Match: tableName, @@ -136,8 +153,6 @@ func (e *Executor) startVStream(ctx context.Context, keyspace string, shard stri RowsAffected: 0, Rows: [][]sqltypes.Value{}, } - log.Infof("Events got: %v", evs) - for _, ev := range evs { if numRows >= limit { break @@ -163,7 +178,6 @@ func (e *Executor) startVStream(ctx context.Context, keyspace string, shard stri } } if numRows > 0 { - log.Infof("VStream Sending result to callback:%v", result) err := callback(result) numRows = 0 if err != nil { @@ -173,9 +187,6 @@ func (e *Executor) startVStream(ctx context.Context, keyspace string, shard stri } return nil } - gw := NewTabletGateway(ctx, vtgateHealthCheck /*discovery.Healthcheck*/, e.serv, e.cell) - - srvResolver := srvtopo.NewResolver(e.serv, gw, e.cell) vs := &vstream{ vgtid: vgtid, diff --git a/go/vt/vtgate/executor_vstream_test.go b/go/vt/vtgate/executor_vstream_test.go index b8fb414dc88..bcdb9abdbd3 100644 --- a/go/vt/vtgate/executor_vstream_test.go +++ b/go/vt/vtgate/executor_vstream_test.go @@ -29,7 +29,7 @@ import ( _ "vitess.io/vitess/go/vt/vtgate/vindexes" ) -func TestVStreamZZZ(t *testing.T) { +func TestVStreamFrom(t *testing.T) { send1 := []*binlogdatapb.VEvent{ {Type: binlogdatapb.VEventType_GTID, Gtid: "gtid01"}, {Type: binlogdatapb.VEventType_FIELD, FieldEvent: &binlogdatapb.FieldEvent{ @@ -72,7 +72,7 @@ func TestVStreamZZZ(t *testing.T) { logChan := QueryLogger.Subscribe("Test") defer QueryLogger.Unsubscribe(logChan) - sql := "vstream * from t1 where pos > 'current' limit 2" //TODO pos > ""/"c, LIMIT + sql := "vstream * from t1" result, err := vstreamEvents(executor, sql) require.NoError(t, err) want := &sqltypes.Result{ From 11292a07778849b0604a173889bc97fbc75ed8f5 Mon Sep 17 00:00:00 2001 From: Rohit Nayak Date: Wed, 2 Sep 2020 21:00:14 +0200 Subject: [PATCH 3/6] VStream From: use pre-existing table for test to avoid breaking other tests Signed-off-by: Rohit Nayak --- go/vt/vtgate/executor_framework_test.go | 3 +-- go/vt/vtgate/executor_vstream_test.go | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/go/vt/vtgate/executor_framework_test.go b/go/vt/vtgate/executor_framework_test.go index bdf69e12f4b..78116fdcee0 100644 --- a/go/vt/vtgate/executor_framework_test.go +++ b/go/vt/vtgate/executor_framework_test.go @@ -263,8 +263,7 @@ var unshardedVSchema = ` "sequence": "user_seq" } }, - "simple": {}, - "t1": {} + "simple": {} } } ` diff --git a/go/vt/vtgate/executor_vstream_test.go b/go/vt/vtgate/executor_vstream_test.go index bcdb9abdbd3..63d72103ba0 100644 --- a/go/vt/vtgate/executor_vstream_test.go +++ b/go/vt/vtgate/executor_vstream_test.go @@ -33,7 +33,7 @@ func TestVStreamFrom(t *testing.T) { send1 := []*binlogdatapb.VEvent{ {Type: binlogdatapb.VEventType_GTID, Gtid: "gtid01"}, {Type: binlogdatapb.VEventType_FIELD, FieldEvent: &binlogdatapb.FieldEvent{ - TableName: "t1", + TableName: "simple", Fields: []*querypb.Field{ { Name: "id", @@ -72,7 +72,7 @@ func TestVStreamFrom(t *testing.T) { logChan := QueryLogger.Subscribe("Test") defer QueryLogger.Unsubscribe(logChan) - sql := "vstream * from t1" + sql := "vstream * from simple" result, err := vstreamEvents(executor, sql) require.NoError(t, err) want := &sqltypes.Result{ From b07649c18c59f6fda86f2006ba3f0632899ad54c Mon Sep 17 00:00:00 2001 From: Rohit Nayak Date: Sat, 5 Sep 2020 17:53:06 +0200 Subject: [PATCH 4/6] VStream From: fix streaming and limit bugs Signed-off-by: Rohit Nayak --- go/vt/vtgate/executor_vstream.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/go/vt/vtgate/executor_vstream.go b/go/vt/vtgate/executor_vstream.go index f98ba7d47bf..a3cd692b8a3 100644 --- a/go/vt/vtgate/executor_vstream.go +++ b/go/vt/vtgate/executor_vstream.go @@ -97,7 +97,7 @@ func (e *Executor) startVStream(ctx context.Context, keyspace string, shard stri srvResolver := srvtopo.NewResolver(e.serv, gw, e.cell) - limit := 10000 + limit := 100 if stmt.Where != nil { pos, err = getVStreamStartPos(stmt) if err != nil { @@ -144,6 +144,7 @@ func (e *Executor) startVStream(ctx context.Context, keyspace string, shard stri } var lastFields []*querypb.Field numRows := 0 + totalRows := 0 if limit == 0 { return io.EOF } @@ -154,7 +155,7 @@ func (e *Executor) startVStream(ctx context.Context, keyspace string, shard stri Rows: [][]sqltypes.Value{}, } for _, ev := range evs { - if numRows >= limit { + if totalRows+numRows >= limit { break } switch ev.Type { @@ -169,7 +170,7 @@ func (e *Executor) startVStream(ctx context.Context, keyspace string, shard stri vals := sqltypes.MakeRowTrusted(result.Fields, change.After) result.Rows = append(result.Rows, vals) numRows++ - if numRows >= limit { + if totalRows+numRows >= limit { break } } @@ -179,11 +180,14 @@ func (e *Executor) startVStream(ctx context.Context, keyspace string, shard stri } if numRows > 0 { err := callback(result) + totalRows += numRows numRows = 0 if err != nil { return err } - return io.EOF + if totalRows >= limit { + return io.EOF + } } return nil } From 13bbe15f2bd8d1c2d797afcb76620c35c14af138 Mon Sep 17 00:00:00 2001 From: Rohit Nayak Date: Sat, 5 Sep 2020 18:08:59 +0200 Subject: [PATCH 5/6] VStream From: updated for recent merged sqlparser mods Signed-off-by: Rohit Nayak --- go/vt/vtgate/executor_vstream.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/vt/vtgate/executor_vstream.go b/go/vt/vtgate/executor_vstream.go index a3cd692b8a3..e76368a9747 100644 --- a/go/vt/vtgate/executor_vstream.go +++ b/go/vt/vtgate/executor_vstream.go @@ -71,7 +71,7 @@ func getVStreamStartPos(stmt *sqlparser.VStream) (string, error) { switch c := v.Left.(type) { case *sqlparser.ColName: switch val := v.Right.(type) { - case *sqlparser.SQLVal: + case *sqlparser.Literal: pos = string(val.Val) } colName = strings.ToLower(c.Name.String()) @@ -105,7 +105,7 @@ func (e *Executor) startVStream(ctx context.Context, keyspace string, shard stri } } if stmt.Limit != nil { - count, ok := stmt.Limit.Rowcount.(*sqlparser.SQLVal) + count, ok := stmt.Limit.Rowcount.(*sqlparser.Literal) if ok { limit, _ = strconv.Atoi(string(count.Val)) } From e281645b6d09416dcaa98571318a8f0e51feb585 Mon Sep 17 00:00:00 2001 From: Rohit Nayak Date: Sat, 5 Sep 2020 23:42:16 +0200 Subject: [PATCH 6/6] VStream From: add support for update/delete events. Add op column to show type of event Signed-off-by: Rohit Nayak --- go/vt/vtgate/executor_vstream.go | 28 ++++++++++++++++++++------- go/vt/vtgate/executor_vstream_test.go | 19 +++++++++++++++++- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/go/vt/vtgate/executor_vstream.go b/go/vt/vtgate/executor_vstream.go index e76368a9747..461783c1e94 100644 --- a/go/vt/vtgate/executor_vstream.go +++ b/go/vt/vtgate/executor_vstream.go @@ -160,15 +160,29 @@ func (e *Executor) startVStream(ctx context.Context, keyspace string, shard stri } switch ev.Type { case binlogdata.VEventType_FIELD: - result.Fields = ev.FieldEvent.Fields - lastFields = result.Fields + lastFields = []*querypb.Field{{ + Name: "op", + Type: querypb.Type_VARCHAR, + }} + lastFields = append(lastFields, ev.FieldEvent.Fields...) case binlogdata.VEventType_ROW: - if result.Fields == nil { - result.Fields = lastFields - } + result.Fields = lastFields + eventFields := lastFields[1:] for _, change := range ev.RowEvent.RowChanges { - vals := sqltypes.MakeRowTrusted(result.Fields, change.After) - result.Rows = append(result.Rows, vals) + op := "" + var vals []sqltypes.Value + if change.After != nil && change.Before == nil { + op = "+" + vals = sqltypes.MakeRowTrusted(eventFields, change.After) + } else if change.After != nil && change.Before != nil { + op = "*" + vals = sqltypes.MakeRowTrusted(eventFields, change.After) + } else { + op = "-" + vals = sqltypes.MakeRowTrusted(eventFields, change.Before) + } + newVals := append([]sqltypes.Value{sqltypes.NewVarChar(op)}, vals...) + result.Rows = append(result.Rows, newVals) numRows++ if totalRows+numRows >= limit { break diff --git a/go/vt/vtgate/executor_vstream_test.go b/go/vt/vtgate/executor_vstream_test.go index 63d72103ba0..ad3c006e006 100644 --- a/go/vt/vtgate/executor_vstream_test.go +++ b/go/vt/vtgate/executor_vstream_test.go @@ -60,6 +60,16 @@ func TestVStreamFrom(t *testing.T) { Lengths: []int64{1, 5}, Values: []byte("2defgh"), }, + Before: &querypb.Row{ + Lengths: []int64{1, 5}, + Values: []byte("1xefgh"), + }, + }, + { + Before: &querypb.Row{ + Lengths: []int64{1, 3}, + Values: []byte("0xyz"), + }, }, }, }, @@ -77,17 +87,24 @@ func TestVStreamFrom(t *testing.T) { require.NoError(t, err) want := &sqltypes.Result{ Fields: []*querypb.Field{ + {Name: "op", Type: sqltypes.VarChar}, {Name: "id", Type: sqltypes.Int64}, {Name: "val", Type: sqltypes.VarChar}, }, - RowsAffected: 2, + RowsAffected: 3, InsertID: 0, Rows: [][]sqltypes.Value{{ + sqltypes.NewVarChar("+"), sqltypes.NewInt64(1), sqltypes.NewVarChar("abc"), }, { + sqltypes.NewVarChar("*"), sqltypes.NewInt64(2), sqltypes.NewVarChar("defgh"), + }, { + sqltypes.NewVarChar("-"), + sqltypes.NewInt64(0), + sqltypes.NewVarChar("xyz"), }}, } if !result.Equal(want) {