// Code generated by goyacc DO NOT EDIT.

// Copyright 2020 PingCAP, Inc.
//
// 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,
// See the License for the specific language governing permissions and
// limitations under the License.

package parser

import __yyfmt__ "fmt"

import (
	"math"
	"strconv"

	"github.com/pingcap/parser/ast"
	"github.com/pingcap/parser/model"
)

type yyhintSymType struct {
	yys         int
	ident       string
	number      uint64
	hint        *ast.TableOptimizerHint
	hints       []*ast.TableOptimizerHint
	table       ast.HintTable
	modelIdents []model.CIStr
}

type yyhintXError struct {
	state, xsym int
}

const (
	yyhintDefault             = 57413
	yyhintEOFCode             = 57344
	yyhintErrCode             = 57345
	hintAggToCop              = 57376
	hintBCJoin                = 57389
	hintBCJoinPreferLocal     = 57390
	hintBKA                   = 57354
	hintBNL                   = 57356
	hintDupsWeedOut           = 57409
	hintFalse                 = 57405
	hintFirstMatch            = 57410
	hintGB                    = 57408
	hintHashAgg               = 57378
	hintHashJoin              = 57358
	hintIdentifier            = 57347
	hintIgnoreIndex           = 57379
	hintIgnorePlanCache       = 57377
	hintIndexMerge            = 57362
	hintInlHashJoin           = 57380
	hintInlJoin               = 57381
	hintInlMergeJoin          = 57382
	hintIntLit                = 57346
	hintJoinFixedOrder        = 57350
	hintJoinOrder             = 57351
	hintJoinPrefix            = 57352
	hintJoinSuffix            = 57353
	hintLimitToCop            = 57399
	hintLooseScan             = 57411
	hintMB                    = 57407
	hintMRR                   = 57364
	hintMaterialization       = 57412
	hintMaxExecutionTime      = 57372
	hintMemoryQuota           = 57383
	hintMerge                 = 57360
	hintNoBKA                 = 57355
	hintNoBNL                 = 57357
	hintNoHashJoin            = 57359
	hintNoICP                 = 57366
	hintNoIndexMerge          = 57363
	hintNoMRR                 = 57365
	hintNoMerge               = 57361
	hintNoRangeOptimization   = 57367
	hintNoSemijoin            = 57371
	hintNoSkipScan            = 57369
	hintNoSwapJoinInputs      = 57384
	hintOLAP                  = 57400
	hintOLTP                  = 57401
	hintPartition             = 57402
	hintQBName                = 57375
	hintQueryType             = 57385
	hintReadConsistentReplica = 57386
	hintReadFromStorage       = 57387
	hintResourceGroup         = 57374
	hintSMJoin                = 57388
	hintSemijoin              = 57370
	hintSetVar                = 57373
	hintSingleAtIdentifier    = 57348
	hintSkipScan              = 57368
	hintStreamAgg             = 57391
	hintStringLit             = 57349
	hintSwapJoinInputs        = 57392
	hintTiFlash               = 57404
	hintTiKV                  = 57403
	hintTimeRange             = 57397
	hintTrue                  = 57406
	hintUseCascades           = 57398
	hintUseIndex              = 57394
	hintUseIndexMerge         = 57393
	hintUsePlanCache          = 57395
	hintUseToja               = 57396

	yyhintMaxDepth = 200
	yyhintTabOfs   = -168
)

var (
	yyhintXLAT = map[int]int{
		41:    0,   // ')' (127x)
		57376: 1,   // hintAggToCop (119x)
		57389: 2,   // hintBCJoin (119x)
		57390: 3,   // hintBCJoinPreferLocal (119x)
		57354: 4,   // hintBKA (119x)
		57356: 5,   // hintBNL (119x)
		57378: 6,   // hintHashAgg (119x)
		57358: 7,   // hintHashJoin (119x)
		57379: 8,   // hintIgnoreIndex (119x)
		57377: 9,   // hintIgnorePlanCache (119x)
		57362: 10,  // hintIndexMerge (119x)
		57380: 11,  // hintInlHashJoin (119x)
		57381: 12,  // hintInlJoin (119x)
		57382: 13,  // hintInlMergeJoin (119x)
		57350: 14,  // hintJoinFixedOrder (119x)
		57351: 15,  // hintJoinOrder (119x)
		57352: 16,  // hintJoinPrefix (119x)
		57353: 17,  // hintJoinSuffix (119x)
		57399: 18,  // hintLimitToCop (119x)
		57372: 19,  // hintMaxExecutionTime (119x)
		57383: 20,  // hintMemoryQuota (119x)
		57360: 21,  // hintMerge (119x)
		57364: 22,  // hintMRR (119x)
		57355: 23,  // hintNoBKA (119x)
		57357: 24,  // hintNoBNL (119x)
		57359: 25,  // hintNoHashJoin (119x)
		57366: 26,  // hintNoICP (119x)
		57363: 27,  // hintNoIndexMerge (119x)
		57361: 28,  // hintNoMerge (119x)
		57365: 29,  // hintNoMRR (119x)
		57367: 30,  // hintNoRangeOptimization (119x)
		57371: 31,  // hintNoSemijoin (119x)
		57369: 32,  // hintNoSkipScan (119x)
		57384: 33,  // hintNoSwapJoinInputs (119x)
		57375: 34,  // hintQBName (119x)
		57385: 35,  // hintQueryType (119x)
		57386: 36,  // hintReadConsistentReplica (119x)
		57387: 37,  // hintReadFromStorage (119x)
		57374: 38,  // hintResourceGroup (119x)
		57370: 39,  // hintSemijoin (119x)
		57373: 40,  // hintSetVar (119x)
		57368: 41,  // hintSkipScan (119x)
		57388: 42,  // hintSMJoin (119x)
		57391: 43,  // hintStreamAgg (119x)
		57392: 44,  // hintSwapJoinInputs (119x)
		57397: 45,  // hintTimeRange (119x)
		57398: 46,  // hintUseCascades (119x)
		57394: 47,  // hintUseIndex (119x)
		57393: 48,  // hintUseIndexMerge (119x)
		57395: 49,  // hintUsePlanCache (119x)
		57396: 50,  // hintUseToja (119x)
		44:    51,  // ',' (117x)
		57409: 52,  // hintDupsWeedOut (98x)
		57410: 53,  // hintFirstMatch (98x)
		57411: 54,  // hintLooseScan (98x)
		57412: 55,  // hintMaterialization (98x)
		57404: 56,  // hintTiFlash (98x)
		57403: 57,  // hintTiKV (98x)
		57405: 58,  // hintFalse (97x)
		57400: 59,  // hintOLAP (97x)
		57401: 60,  // hintOLTP (97x)
		57406: 61,  // hintTrue (97x)
		57408: 62,  // hintGB (96x)
		57407: 63,  // hintMB (96x)
		57347: 64,  // hintIdentifier (95x)
		57348: 65,  // hintSingleAtIdentifier (79x)
		93:    66,  // ']' (74x)
		57402: 67,  // hintPartition (68x)
		46:    68,  // '.' (64x)
		61:    69,  // '=' (64x)
		40:    70,  // '(' (59x)
		57344: 71,  // $end (23x)
		57433: 72,  // QueryBlockOpt (16x)
		57425: 73,  // Identifier (13x)
		57346: 74,  // hintIntLit (6x)
		57349: 75,  // hintStringLit (5x)
		57415: 76,  // CommaOpt (4x)
		57421: 77,  // HintTable (4x)
		57422: 78,  // HintTableList (4x)
		91:    79,  // '[' (3x)
		57414: 80,  // BooleanHintName (2x)
		57416: 81,  // HintIndexList (2x)
		57418: 82,  // HintStorageType (2x)
		57419: 83,  // HintStorageTypeAndTable (2x)
		57423: 84,  // HintTableListOpt (2x)
		57428: 85,  // JoinOrderOptimizerHintName (2x)
		57429: 86,  // NullaryHintName (2x)
		57432: 87,  // PartitionListOpt (2x)
		57435: 88,  // StorageOptimizerHintOpt (2x)
		57436: 89,  // SubqueryOptimizerHintName (2x)
		57439: 90,  // SubqueryStrategy (2x)
		57440: 91,  // SupportedIndexLevelOptimizerHintName (2x)
		57441: 92,  // SupportedTableLevelOptimizerHintName (2x)
		57442: 93,  // TableOptimizerHintOpt (2x)
		57444: 94,  // UnsupportedIndexLevelOptimizerHintName (2x)
		57445: 95,  // UnsupportedTableLevelOptimizerHintName (2x)
		57417: 96,  // HintQueryType (1x)
		57420: 97,  // HintStorageTypeAndTableList (1x)
		57424: 98,  // HintTrueOrFalse (1x)
		57426: 99,  // IndexNameList (1x)
		57427: 100, // IndexNameListOpt (1x)
		57430: 101, // OptimizerHintList (1x)
		57431: 102, // PartitionList (1x)
		57434: 103, // Start (1x)
		57437: 104, // SubqueryStrategies (1x)
		57438: 105, // SubqueryStrategiesOpt (1x)
		57443: 106, // UnitOfBytes (1x)
		57446: 107, // Value (1x)
		57413: 108, // $default (0x)
		57345: 109, // error (0x)
	}

	yyhintSymNames = []string{
		"')'",
		"hintAggToCop",
		"hintBCJoin",
		"hintBCJoinPreferLocal",
		"hintBKA",
		"hintBNL",
		"hintHashAgg",
		"hintHashJoin",
		"hintIgnoreIndex",
		"hintIgnorePlanCache",
		"hintIndexMerge",
		"hintInlHashJoin",
		"hintInlJoin",
		"hintInlMergeJoin",
		"hintJoinFixedOrder",
		"hintJoinOrder",
		"hintJoinPrefix",
		"hintJoinSuffix",
		"hintLimitToCop",
		"hintMaxExecutionTime",
		"hintMemoryQuota",
		"hintMerge",
		"hintMRR",
		"hintNoBKA",
		"hintNoBNL",
		"hintNoHashJoin",
		"hintNoICP",
		"hintNoIndexMerge",
		"hintNoMerge",
		"hintNoMRR",
		"hintNoRangeOptimization",
		"hintNoSemijoin",
		"hintNoSkipScan",
		"hintNoSwapJoinInputs",
		"hintQBName",
		"hintQueryType",
		"hintReadConsistentReplica",
		"hintReadFromStorage",
		"hintResourceGroup",
		"hintSemijoin",
		"hintSetVar",
		"hintSkipScan",
		"hintSMJoin",
		"hintStreamAgg",
		"hintSwapJoinInputs",
		"hintTimeRange",
		"hintUseCascades",
		"hintUseIndex",
		"hintUseIndexMerge",
		"hintUsePlanCache",
		"hintUseToja",
		"','",
		"hintDupsWeedOut",
		"hintFirstMatch",
		"hintLooseScan",
		"hintMaterialization",
		"hintTiFlash",
		"hintTiKV",
		"hintFalse",
		"hintOLAP",
		"hintOLTP",
		"hintTrue",
		"hintGB",
		"hintMB",
		"hintIdentifier",
		"hintSingleAtIdentifier",
		"']'",
		"hintPartition",
		"'.'",
		"'='",
		"'('",
		"$end",
		"QueryBlockOpt",
		"Identifier",
		"hintIntLit",
		"hintStringLit",
		"CommaOpt",
		"HintTable",
		"HintTableList",
		"'['",
		"BooleanHintName",
		"HintIndexList",
		"HintStorageType",
		"HintStorageTypeAndTable",
		"HintTableListOpt",
		"JoinOrderOptimizerHintName",
		"NullaryHintName",
		"PartitionListOpt",
		"StorageOptimizerHintOpt",
		"SubqueryOptimizerHintName",
		"SubqueryStrategy",
		"SupportedIndexLevelOptimizerHintName",
		"SupportedTableLevelOptimizerHintName",
		"TableOptimizerHintOpt",
		"UnsupportedIndexLevelOptimizerHintName",
		"UnsupportedTableLevelOptimizerHintName",
		"HintQueryType",
		"HintStorageTypeAndTableList",
		"HintTrueOrFalse",
		"IndexNameList",
		"IndexNameListOpt",
		"OptimizerHintList",
		"PartitionList",
		"Start",
		"SubqueryStrategies",
		"SubqueryStrategiesOpt",
		"UnitOfBytes",
		"Value",
		"$default",
		"error",
	}

	yyhintReductions = []struct{ xsym, components int }{
		{0, 1},
		{103, 1},
		{101, 1},
		{101, 3},
		{101, 1},
		{101, 3},
		{93, 4},
		{93, 4},
		{93, 4},
		{93, 4},
		{93, 4},
		{93, 4},
		{93, 5},
		{93, 5},
		{93, 6},
		{93, 4},
		{93, 4},
		{93, 6},
		{93, 6},
		{93, 5},
		{93, 4},
		{93, 5},
		{88, 5},
		{97, 1},
		{97, 3},
		{83, 4},
		{72, 0},
		{72, 1},
		{76, 0},
		{76, 1},
		{87, 0},
		{87, 4},
		{102, 1},
		{102, 3},
		{84, 1},
		{84, 1},
		{78, 2},
		{78, 3},
		{77, 3},
		{77, 5},
		{81, 4},
		{100, 0},
		{100, 1},
		{99, 1},
		{99, 3},
		{105, 0},
		{105, 1},
		{104, 1},
		{104, 3},
		{107, 1},
		{107, 1},
		{107, 1},
		{106, 1},
		{106, 1},
		{98, 1},
		{98, 1},
		{85, 1},
		{85, 1},
		{85, 1},
		{95, 1},
		{95, 1},
		{95, 1},
		{95, 1},
		{95, 1},
		{95, 1},
		{95, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{94, 1},
		{94, 1},
		{94, 1},
		{94, 1},
		{94, 1},
		{94, 1},
		{94, 1},
		{91, 1},
		{91, 1},
		{91, 1},
		{89, 1},
		{89, 1},
		{90, 1},
		{90, 1},
		{90, 1},
		{90, 1},
		{80, 1},
		{80, 1},
		{86, 1},
		{86, 1},
		{86, 1},
		{86, 1},
		{86, 1},
		{86, 1},
		{86, 1},
		{86, 1},
		{96, 1},
		{96, 1},
		{82, 1},
		{82, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
		{73, 1},
	}

	yyhintXErrors = map[yyhintXError]string{}

	yyhintParseTab = [247][]uint16{
		// 0
		{1: 226, 201, 202, 193, 195, 224, 208, 217, 230, 209, 204, 203, 207, 173, 190, 191, 192, 227, 180, 184, 198, 210, 194, 196, 197, 212, 228, 199, 211, 213, 220, 215, 206, 183, 188, 229, 189, 182, 219, 181, 214, 200, 225, 205, 185, 222, 216, 218, 223, 221, 80: 186, 85: 174, 187, 88: 172, 179, 91: 178, 176, 171, 177, 175, 101: 170, 103: 169},
		{71: 168},
		{1: 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 316, 71: 167, 76: 412},
		{1: 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 71: 166},
		{1: 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 71: 164},
		// 5
		{70: 409},
		{70: 406},
		{70: 403},
		{70: 398},
		{70: 395},
		// 10
		{70: 384},
		{70: 372},
		{70: 368},
		{70: 360},
		{70: 357},
		// 15
		{70: 354},
		{70: 347},
		{70: 342},
		{70: 336},
		{70: 333},
		// 20
		{70: 327},
		{70: 231},
		{70: 112},
		{70: 111},
		{70: 110},
		// 25
		{70: 109},
		{70: 108},
		{70: 107},
		{70: 106},
		{70: 105},
		// 30
		{70: 104},
		{70: 103},
		{70: 102},
		{70: 101},
		{70: 100},
		// 35
		{70: 99},
		{70: 98},
		{70: 97},
		{70: 96},
		{70: 95},
		// 40
		{70: 94},
		{70: 93},
		{70: 92},
		{70: 91},
		{70: 90},
		// 45
		{70: 89},
		{70: 88},
		{70: 87},
		{70: 86},
		{70: 85},
		// 50
		{70: 84},
		{70: 83},
		{70: 82},
		{70: 77},
		{70: 76},
		// 55
		{70: 75},
		{70: 74},
		{70: 73},
		{70: 72},
		{70: 71},
		// 60
		{70: 70},
		{70: 69},
		{70: 68},
		{56: 142, 142, 65: 233, 72: 232},
		{56: 238, 237, 82: 236, 235, 97: 234},
		// 65
		{141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 66: 141, 141, 74: 141},
		{324, 51: 325},
		{145, 51: 145},
		{79: 239},
		{79: 65},
		// 70
		{79: 64},
		{1: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 52: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 233, 72: 241, 78: 240},
		{51: 322, 66: 321},
		{1: 271, 285, 286, 249, 251, 274, 253, 275, 273, 257, 276, 277, 278, 245, 246, 247, 248, 272, 267, 279, 255, 259, 250, 252, 254, 261, 258, 256, 260, 262, 266, 264, 280, 270, 281, 282, 283, 269, 265, 268, 263, 284, 287, 288, 293, 294, 290, 289, 291, 292, 52: 303, 304, 305, 306, 298, 297, 299, 295, 296, 300, 302, 301, 244, 73: 243, 77: 242},
		{132, 51: 132, 66: 132},
		// 75
		{142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 233, 142, 142, 308, 72: 307},
		{63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63},
		{62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62},
		{61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61},
		{60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60},
		// 80
		{59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59},
		{58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58},
		{57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57},
		{56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56},
		{55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55},
		// 85
		{54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54},
		{53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53},
		{52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52},
		{51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51},
		{50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50},
		// 90
		{49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49},
		{48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48},
		{47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47},
		{46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46},
		{45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45},
		// 95
		{44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44},
		{43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43},
		{42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42},
		{41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41},
		{40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40},
		// 100
		{39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39},
		{38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38},
		{37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37},
		{36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36},
		{35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35},
		// 105
		{34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34},
		{33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33},
		{32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
		{31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31},
		{30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30},
		// 110
		{29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29},
		{28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28},
		{27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27},
		{26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26},
		{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, 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, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25},
		// 115
		{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, 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, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24},
		{23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23},
		{22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22},
		{21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21},
		{20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20},
		// 120
		{19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19},
		{18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18},
		{17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17},
		{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
		{15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
		// 125
		{14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14},
		{13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13},
		{12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12},
		{11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11},
		{10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10},
		// 130
		{9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9},
		{8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
		{7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7},
		{6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6},
		{5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5},
		// 135
		{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4},
		{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, 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, 3, 3, 3, 3, 3, 3},
		{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
		{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
		{138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 66: 138, 311, 87: 320},
		// 140
		{1: 271, 285, 286, 249, 251, 274, 253, 275, 273, 257, 276, 277, 278, 245, 246, 247, 248, 272, 267, 279, 255, 259, 250, 252, 254, 261, 258, 256, 260, 262, 266, 264, 280, 270, 281, 282, 283, 269, 265, 268, 263, 284, 287, 288, 293, 294, 290, 289, 291, 292, 52: 303, 304, 305, 306, 298, 297, 299, 295, 296, 300, 302, 301, 244, 73: 309},
		{142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 233, 142, 142, 72: 310},
		{138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 66: 138, 311, 87: 312},
		{70: 313},
		{129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 66: 129},
		// 145
		{1: 271, 285, 286, 249, 251, 274, 253, 275, 273, 257, 276, 277, 278, 245, 246, 247, 248, 272, 267, 279, 255, 259, 250, 252, 254, 261, 258, 256, 260, 262, 266, 264, 280, 270, 281, 282, 283, 269, 265, 268, 263, 284, 287, 288, 293, 294, 290, 289, 291, 292, 52: 303, 304, 305, 306, 298, 297, 299, 295, 296, 300, 302, 301, 244, 73: 315, 102: 314},
		{317, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 316, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 76: 318},
		{136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136},
		{139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 52: 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 75: 139},
		{137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 66: 137},
		// 150
		{1: 271, 285, 286, 249, 251, 274, 253, 275, 273, 257, 276, 277, 278, 245, 246, 247, 248, 272, 267, 279, 255, 259, 250, 252, 254, 261, 258, 256, 260, 262, 266, 264, 280, 270, 281, 282, 283, 269, 265, 268, 263, 284, 287, 288, 293, 294, 290, 289, 291, 292, 52: 303, 304, 305, 306, 298, 297, 299, 295, 296, 300, 302, 301, 244, 73: 319},
		{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},
		{130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 66: 130},
		{143, 51: 143},
		{1: 271, 285, 286, 249, 251, 274, 253, 275, 273, 257, 276, 277, 278, 245, 246, 247, 248, 272, 267, 279, 255, 259, 250, 252, 254, 261, 258, 256, 260, 262, 266, 264, 280, 270, 281, 282, 283, 269, 265, 268, 263, 284, 287, 288, 293, 294, 290, 289, 291, 292, 52: 303, 304, 305, 306, 298, 297, 299, 295, 296, 300, 302, 301, 244, 73: 243, 77: 323},
		// 155
		{131, 51: 131, 66: 131},
		{1: 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 71: 146},
		{56: 238, 237, 82: 236, 326},
		{144, 51: 144},
		{59: 142, 142, 65: 233, 72: 328},
		// 160
		{59: 330, 331, 96: 329},
		{332},
		{67},
		{66},
		{1: 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 71: 147},
		// 165
		{142, 65: 233, 72: 334},
		{335},
		{1: 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 71: 148},
		{58: 142, 61: 142, 65: 233, 72: 337},
		{58: 340, 61: 339, 98: 338},
		// 170
		{341},
		{114},
		{113},
		{1: 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 71: 149},
		{75: 343},
		// 175
		{51: 316, 75: 140, 344},
		{75: 345},
		{346},
		{1: 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 71: 150},
		{65: 233, 72: 348, 74: 142},
		// 180
		{74: 349},
		{62: 352, 351, 106: 350},
		{353},
		{116},
		{115},
		// 185
		{1: 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 71: 151},
		{1: 271, 285, 286, 249, 251, 274, 253, 275, 273, 257, 276, 277, 278, 245, 246, 247, 248, 272, 267, 279, 255, 259, 250, 252, 254, 261, 258, 256, 260, 262, 266, 264, 280, 270, 281, 282, 283, 269, 265, 268, 263, 284, 287, 288, 293, 294, 290, 289, 291, 292, 52: 303, 304, 305, 306, 298, 297, 299, 295, 296, 300, 302, 301, 244, 73: 355},
		{356},
		{1: 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 71: 152},
		{1: 271, 285, 286, 249, 251, 274, 253, 275, 273, 257, 276, 277, 278, 245, 246, 247, 248, 272, 267, 279, 255, 259, 250, 252, 254, 261, 258, 256, 260, 262, 266, 264, 280, 270, 281, 282, 283, 269, 265, 268, 263, 284, 287, 288, 293, 294, 290, 289, 291, 292, 52: 303, 304, 305, 306, 298, 297, 299, 295, 296, 300, 302, 301, 244, 73: 358},
		// 190
		{359},
		{1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 71: 153},
		{1: 271, 285, 286, 249, 251, 274, 253, 275, 273, 257, 276, 277, 278, 245, 246, 247, 248, 272, 267, 279, 255, 259, 250, 252, 254, 261, 258, 256, 260, 262, 266, 264, 280, 270, 281, 282, 283, 269, 265, 268, 263, 284, 287, 288, 293, 294, 290, 289, 291, 292, 52: 303, 304, 305, 306, 298, 297, 299, 295, 296, 300, 302, 301, 244, 73: 361},
		{69: 362},
		{1: 271, 285, 286, 249, 251, 274, 253, 275, 273, 257, 276, 277, 278, 245, 246, 247, 248, 272, 267, 279, 255, 259, 250, 252, 254, 261, 258, 256, 260, 262, 266, 264, 280, 270, 281, 282, 283, 269, 265, 268, 263, 284, 287, 288, 293, 294, 290, 289, 291, 292, 52: 303, 304, 305, 306, 298, 297, 299, 295, 296, 300, 302, 301, 244, 73: 365, 366, 364, 107: 363},
		// 195
		{367},
		{119},
		{118},
		{117},
		{1: 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 71: 154},
		// 200
		{65: 233, 72: 369, 74: 142},
		{74: 370},
		{371},
		{1: 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 71: 155},
		{142, 52: 142, 142, 142, 142, 65: 233, 72: 373},
		// 205
		{123, 52: 377, 378, 379, 380, 90: 376, 104: 375, 374},
		{383},
		{122, 51: 381},
		{121, 51: 121},
		{81, 51: 81},
		// 210
		{80, 51: 80},
		{79, 51: 79},
		{78, 51: 78},
		{52: 377, 378, 379, 380, 90: 382},
		{120, 51: 120},
		// 215
		{1: 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 71: 156},
		{1: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 52: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 233, 72: 386, 81: 385},
		{394},
		{1: 271, 285, 286, 249, 251, 274, 253, 275, 273, 257, 276, 277, 278, 245, 246, 247, 248, 272, 267, 279, 255, 259, 250, 252, 254, 261, 258, 256, 260, 262, 266, 264, 280, 270, 281, 282, 283, 269, 265, 268, 263, 284, 287, 288, 293, 294, 290, 289, 291, 292, 52: 303, 304, 305, 306, 298, 297, 299, 295, 296, 300, 302, 301, 244, 73: 243, 77: 387},
		{140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 316, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 76: 388},
		// 220
		{127, 271, 285, 286, 249, 251, 274, 253, 275, 273, 257, 276, 277, 278, 245, 246, 247, 248, 272, 267, 279, 255, 259, 250, 252, 254, 261, 258, 256, 260, 262, 266, 264, 280, 270, 281, 282, 283, 269, 265, 268, 263, 284, 287, 288, 293, 294, 290, 289, 291, 292, 52: 303, 304, 305, 306, 298, 297, 299, 295, 296, 300, 302, 301, 244, 73: 391, 99: 390, 389},
		{128},
		{126, 51: 392},
		{125, 51: 125},
		{1: 271, 285, 286, 249, 251, 274, 253, 275, 273, 257, 276, 277, 278, 245, 246, 247, 248, 272, 267, 279, 255, 259, 250, 252, 254, 261, 258, 256, 260, 262, 266, 264, 280, 270, 281, 282, 283, 269, 265, 268, 263, 284, 287, 288, 293, 294, 290, 289, 291, 292, 52: 303, 304, 305, 306, 298, 297, 299, 295, 296, 300, 302, 301, 244, 73: 393},
		// 225
		{124, 51: 124},
		{1: 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 71: 157},
		{1: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 52: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 233, 72: 386, 81: 396},
		{397},
		{1: 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 71: 158},
		// 230
		{142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 52: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 233, 72: 401, 78: 400, 84: 399},
		{402},
		{134, 51: 322},
		{133, 271, 285, 286, 249, 251, 274, 253, 275, 273, 257, 276, 277, 278, 245, 246, 247, 248, 272, 267, 279, 255, 259, 250, 252, 254, 261, 258, 256, 260, 262, 266, 264, 280, 270, 281, 282, 283, 269, 265, 268, 263, 284, 287, 288, 293, 294, 290, 289, 291, 292, 52: 303, 304, 305, 306, 298, 297, 299, 295, 296, 300, 302, 301, 244, 73: 243, 77: 242},
		{1: 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 71: 159},
		// 235
		{142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 52: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 233, 72: 401, 78: 400, 84: 404},
		{405},
		{1: 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 71: 160},
		{1: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 52: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 233, 72: 241, 78: 407},
		{408, 51: 322},
		// 240
		{1: 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 71: 161},
		{142, 65: 233, 72: 410},
		{411},
		{1: 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 71: 162},
		{1: 226, 201, 202, 193, 195, 224, 208, 217, 230, 209, 204, 203, 207, 173, 190, 191, 192, 227, 180, 184, 198, 210, 194, 196, 197, 212, 228, 199, 211, 213, 220, 215, 206, 183, 188, 229, 189, 182, 219, 181, 214, 200, 225, 205, 185, 222, 216, 218, 223, 221, 80: 186, 85: 174, 187, 88: 414, 179, 91: 178, 176, 413, 177, 175},
		// 245
		{1: 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 71: 165},
		{1: 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 71: 163},
	}
)

var yyhintDebug = 0

type yyhintLexer interface {
	Lex(lval *yyhintSymType) int
	Errorf(format string, a ...interface{}) error
	AppendError(err error)
	Errors() (warns []error, errs []error)
}

type yyhintLexerEx interface {
	yyhintLexer
	Reduced(rule, state int, lval *yyhintSymType) bool
}

func yyhintSymName(c int) (s string) {
	x, ok := yyhintXLAT[c]
	if ok {
		return yyhintSymNames[x]
	}

	return __yyfmt__.Sprintf("%d", c)
}

func yyhintlex1(yylex yyhintLexer, lval *yyhintSymType) (n int) {
	n = yylex.Lex(lval)
	if n <= 0 {
		n = yyhintEOFCode
	}
	if yyhintDebug >= 3 {
		__yyfmt__.Printf("\nlex %s(%#x %d), lval: %+v\n", yyhintSymName(n), n, n, lval)
	}
	return n
}

func yyhintParse(yylex yyhintLexer, parser *hintParser) int {
	const yyError = 109

	yyEx, _ := yylex.(yyhintLexerEx)
	var yyn int
	parser.yylval = yyhintSymType{}
	yyS := parser.cache

	Nerrs := 0   /* number of errors */
	Errflag := 0 /* error recovery flag */
	yyerrok := func() {
		if yyhintDebug >= 2 {
			__yyfmt__.Printf("yyerrok()\n")
		}
		Errflag = 0
	}
	_ = yyerrok
	yystate := 0
	yychar := -1
	var yyxchar int
	var yyshift int
	yyp := -1
	goto yystack

ret0:
	return 0

ret1:
	return 1

yystack:
	/* put a state and value onto the stack */
	yyp++
	if yyp+1 >= len(yyS) {
		nyys := make([]yyhintSymType, len(yyS)*2)
		copy(nyys, yyS)
		yyS = nyys
		parser.cache = yyS
	}
	parser.yyVAL = &yyS[yyp+1]
	yyS[yyp].yys = yystate

yynewstate:
	if yychar < 0 {
		yychar = yyhintlex1(yylex, &parser.yylval)
		var ok bool
		if yyxchar, ok = yyhintXLAT[yychar]; !ok {
			yyxchar = len(yyhintSymNames) // > tab width
		}
	}
	if yyhintDebug >= 4 {
		var a []int
		for _, v := range yyS[:yyp+1] {
			a = append(a, v.yys)
		}
		__yyfmt__.Printf("state stack %v\n", a)
	}
	row := yyhintParseTab[yystate]
	yyn = 0
	if yyxchar < len(row) {
		if yyn = int(row[yyxchar]); yyn != 0 {
			yyn += yyhintTabOfs
		}
	}
	switch {
	case yyn > 0: // shift
		yychar = -1
		*parser.yyVAL = parser.yylval
		yystate = yyn
		yyshift = yyn
		if yyhintDebug >= 2 {
			__yyfmt__.Printf("shift, and goto state %d\n", yystate)
		}
		if Errflag > 0 {
			Errflag--
		}
		goto yystack
	case yyn < 0: // reduce
	case yystate == 1: // accept
		if yyhintDebug >= 2 {
			__yyfmt__.Println("accept")
		}
		goto ret0
	}

	if yyn == 0 {
		/* error ... attempt to resume parsing */
		switch Errflag {
		case 0: /* brand new error */
			if yyhintDebug >= 1 {
				__yyfmt__.Printf("no action for %s in state %d\n", yyhintSymName(yychar), yystate)
			}
			msg, ok := yyhintXErrors[yyhintXError{yystate, yyxchar}]
			if !ok {
				msg, ok = yyhintXErrors[yyhintXError{yystate, -1}]
			}
			if !ok && yyshift != 0 {
				msg, ok = yyhintXErrors[yyhintXError{yyshift, yyxchar}]
			}
			if !ok {
				msg, ok = yyhintXErrors[yyhintXError{yyshift, -1}]
			}
			if !ok || msg == "" {
				msg = "syntax error"
			}
			// ignore goyacc error message
			yylex.AppendError(yylex.Errorf(""))
			Nerrs++
			fallthrough

		case 1, 2: /* incompletely recovered error ... try again */
			Errflag = 3

			/* find a state where "error" is a legal shift action */
			for yyp >= 0 {
				row := yyhintParseTab[yyS[yyp].yys]
				if yyError < len(row) {
					yyn = int(row[yyError]) + yyhintTabOfs
					if yyn > 0 { // hit
						if yyhintDebug >= 2 {
							__yyfmt__.Printf("error recovery found error shift in state %d\n", yyS[yyp].yys)
						}
						yystate = yyn /* simulate a shift of "error" */
						goto yystack
					}
				}

				/* the current p has no shift on "error", pop stack */
				if yyhintDebug >= 2 {
					__yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
				}
				yyp--
			}
			/* there is no state on the stack with an error shift ... abort */
			if yyhintDebug >= 2 {
				__yyfmt__.Printf("error recovery failed\n")
			}
			goto ret1

		case 3: /* no shift yet; clobber input char */
			if yyhintDebug >= 2 {
				__yyfmt__.Printf("error recovery discards %s\n", yyhintSymName(yychar))
			}
			if yychar == yyhintEOFCode {
				goto ret1
			}

			yychar = -1
			goto yynewstate /* try again in the same state */
		}
	}

	r := -yyn
	x0 := yyhintReductions[r]
	x, n := x0.xsym, x0.components
	yypt := yyp
	_ = yypt // guard against "declared and not used"

	yyp -= n
	if yyp+1 >= len(yyS) {
		nyys := make([]yyhintSymType, len(yyS)*2)
		copy(nyys, yyS)
		yyS = nyys
		parser.cache = yyS
	}
	parser.yyVAL = &yyS[yyp+1]

	/* consult goto table to find next state */
	exState := yystate
	yystate = int(yyhintParseTab[yyS[yyp].yys][x]) + yyhintTabOfs
	/* reduction by production r */
	if yyhintDebug >= 2 {
		__yyfmt__.Printf("reduce using rule %v (%s), and goto state %d\n", r, yyhintSymNames[x], yystate)
	}

	switch r {
	case 1:
		{
			parser.result = yyS[yypt-0].hints
		}
	case 2:
		{
			if yyS[yypt-0].hint != nil {
				parser.yyVAL.hints = []*ast.TableOptimizerHint{yyS[yypt-0].hint}
			}
		}
	case 3:
		{
			if yyS[yypt-0].hint != nil {
				parser.yyVAL.hints = append(yyS[yypt-2].hints, yyS[yypt-0].hint)
			} else {
				parser.yyVAL.hints = yyS[yypt-2].hints
			}
		}
	case 4:
		{
			parser.yyVAL.hints = yyS[yypt-0].hints
		}
	case 5:
		{
			parser.yyVAL.hints = append(yyS[yypt-2].hints, yyS[yypt-0].hints...)
		}
	case 6:
		{
			parser.warnUnsupportedHint(yyS[yypt-3].ident)
			parser.yyVAL.hint = nil
		}
	case 7:
		{
			parser.warnUnsupportedHint(yyS[yypt-3].ident)
			parser.yyVAL.hint = nil
		}
	case 8:
		{
			parser.warnUnsupportedHint(yyS[yypt-3].ident)
			parser.yyVAL.hint = nil
		}
	case 9:
		{
			h := yyS[yypt-1].hint
			h.HintName = model.NewCIStr(yyS[yypt-3].ident)
			parser.yyVAL.hint = h
		}
	case 10:
		{
			parser.warnUnsupportedHint(yyS[yypt-3].ident)
			parser.yyVAL.hint = nil
		}
	case 11:
		{
			h := yyS[yypt-1].hint
			h.HintName = model.NewCIStr(yyS[yypt-3].ident)
			parser.yyVAL.hint = h
		}
	case 12:
		{
			parser.warnUnsupportedHint(yyS[yypt-4].ident)
			parser.yyVAL.hint = nil
		}
	case 13:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				HintName: model.NewCIStr(yyS[yypt-4].ident),
				QBName:   model.NewCIStr(yyS[yypt-2].ident),
				HintData: yyS[yypt-1].number,
			}
		}
	case 14:
		{
			parser.warnUnsupportedHint(yyS[yypt-5].ident)
			parser.yyVAL.hint = nil
		}
	case 15:
		{
			parser.warnUnsupportedHint(yyS[yypt-3].ident)
			parser.yyVAL.hint = nil
		}
	case 16:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				HintName: model.NewCIStr(yyS[yypt-3].ident),
				QBName:   model.NewCIStr(yyS[yypt-1].ident),
			}
		}
	case 17:
		{
			maxValue := uint64(math.MaxInt64) / yyS[yypt-1].number
			if yyS[yypt-2].number <= maxValue {
				parser.yyVAL.hint = &ast.TableOptimizerHint{
					HintName: model.NewCIStr(yyS[yypt-5].ident),
					HintData: int64(yyS[yypt-2].number * yyS[yypt-1].number),
					QBName:   model.NewCIStr(yyS[yypt-3].ident),
				}
			} else {
				yylex.AppendError(ErrWarnMemoryQuotaOverflow.GenWithStackByArgs(math.MaxInt64))
				parser.lastErrorAsWarn()
				parser.yyVAL.hint = nil
			}
		}
	case 18:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				HintName: model.NewCIStr(yyS[yypt-5].ident),
				HintData: ast.HintTimeRange{
					From: yyS[yypt-3].ident,
					To:   yyS[yypt-1].ident,
				},
			}
		}
	case 19:
		{
			h := yyS[yypt-1].hint
			h.HintName = model.NewCIStr(yyS[yypt-4].ident)
			h.QBName = model.NewCIStr(yyS[yypt-2].ident)
			parser.yyVAL.hint = h
		}
	case 20:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				HintName: model.NewCIStr(yyS[yypt-3].ident),
				QBName:   model.NewCIStr(yyS[yypt-1].ident),
			}
		}
	case 21:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				HintName: model.NewCIStr(yyS[yypt-4].ident),
				QBName:   model.NewCIStr(yyS[yypt-2].ident),
				HintData: model.NewCIStr(yyS[yypt-1].ident),
			}
		}
	case 22:
		{
			hs := yyS[yypt-1].hints
			name := model.NewCIStr(yyS[yypt-4].ident)
			qb := model.NewCIStr(yyS[yypt-2].ident)
			for _, h := range hs {
				h.HintName = name
				h.QBName = qb
			}
			parser.yyVAL.hints = hs
		}
	case 23:
		{
			parser.yyVAL.hints = []*ast.TableOptimizerHint{yyS[yypt-0].hint}
		}
	case 24:
		{
			parser.yyVAL.hints = append(yyS[yypt-2].hints, yyS[yypt-0].hint)
		}
	case 25:
		{
			h := yyS[yypt-1].hint
			h.HintData = model.NewCIStr(yyS[yypt-3].ident)
			parser.yyVAL.hint = h
		}
	case 26:
		{
			parser.yyVAL.ident = ""
		}
	case 30:
		{
			parser.yyVAL.modelIdents = nil
		}
	case 31:
		{
			parser.yyVAL.modelIdents = yyS[yypt-1].modelIdents
		}
	case 32:
		{
			parser.yyVAL.modelIdents = []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)}
		}
	case 33:
		{
			parser.yyVAL.modelIdents = append(yyS[yypt-2].modelIdents, model.NewCIStr(yyS[yypt-0].ident))
		}
	case 35:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				QBName: model.NewCIStr(yyS[yypt-0].ident),
			}
		}
	case 36:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				Tables: []ast.HintTable{yyS[yypt-0].table},
				QBName: model.NewCIStr(yyS[yypt-1].ident),
			}
		}
	case 37:
		{
			h := yyS[yypt-2].hint
			h.Tables = append(h.Tables, yyS[yypt-0].table)
			parser.yyVAL.hint = h
		}
	case 38:
		{
			parser.yyVAL.table = ast.HintTable{
				TableName:     model.NewCIStr(yyS[yypt-2].ident),
				QBName:        model.NewCIStr(yyS[yypt-1].ident),
				PartitionList: yyS[yypt-0].modelIdents,
			}
		}
	case 39:
		{
			parser.yyVAL.table = ast.HintTable{
				DBName:        model.NewCIStr(yyS[yypt-4].ident),
				TableName:     model.NewCIStr(yyS[yypt-2].ident),
				QBName:        model.NewCIStr(yyS[yypt-1].ident),
				PartitionList: yyS[yypt-0].modelIdents,
			}
		}
	case 40:
		{
			h := yyS[yypt-0].hint
			h.Tables = []ast.HintTable{yyS[yypt-2].table}
			h.QBName = model.NewCIStr(yyS[yypt-3].ident)
			parser.yyVAL.hint = h
		}
	case 41:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{}
		}
	case 43:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				Indexes: []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)},
			}
		}
	case 44:
		{
			h := yyS[yypt-2].hint
			h.Indexes = append(h.Indexes, model.NewCIStr(yyS[yypt-0].ident))
			parser.yyVAL.hint = h
		}
	case 51:
		{
			parser.yyVAL.ident = strconv.FormatUint(yyS[yypt-0].number, 10)
		}
	case 52:
		{
			parser.yyVAL.number = 1024 * 1024
		}
	case 53:
		{
			parser.yyVAL.number = 1024 * 1024 * 1024
		}
	case 54:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{HintData: true}
		}
	case 55:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{HintData: false}
		}

	}

	if yyEx != nil && yyEx.Reduced(r, exState, parser.yyVAL) {
		return -1
	}
	goto yystack /* stack new state and value */
}
