diff --git a/cmd/geth/retesteth.go b/cmd/geth/retesteth.go index 0ae2bc70e2..c8e535f6f5 100644 --- a/cmd/geth/retesteth.go +++ b/cmd/geth/retesteth.go @@ -135,6 +135,7 @@ type CParamsParams struct { ConstantinopleFixForkBlock *math.HexOrDecimal64 `json:"constantinopleFixForkBlock"` IstanbulBlock *math.HexOrDecimal64 `json:"istanbulForkBlock"` RamanujanForkBlock *math.HexOrDecimal64 `json:"ramanujanForkBlock"` + MirrorSyncForkBlock *math.HexOrDecimal64 `json:"mirrorSyncForkBlock"` ChainID *math.HexOrDecimal256 `json:"chainID"` MaximumExtraDataSize math.HexOrDecimal64 `json:"maximumExtraDataSize"` TieBreakingGas bool `json:"tieBreakingGas"` @@ -325,6 +326,7 @@ func (api *RetestethAPI) SetChainParams(ctx context.Context, chainParams ChainPa petersburgBlock *big.Int istanbulBlock *big.Int ramanujanBlock *big.Int + mirrorSyncBlock *big.Int ) if chainParams.Params.HomesteadForkBlock != nil { homesteadBlock = big.NewInt(int64(*chainParams.Params.HomesteadForkBlock)) @@ -357,6 +359,9 @@ func (api *RetestethAPI) SetChainParams(ctx context.Context, chainParams ChainPa if chainParams.Params.RamanujanForkBlock != nil { ramanujanBlock = big.NewInt(int64(*chainParams.Params.RamanujanForkBlock)) } + if chainParams.Params.MirrorSyncForkBlock != nil { + mirrorSyncBlock = big.NewInt(int64(*chainParams.Params.MirrorSyncForkBlock)) + } genesis := &core.Genesis{ Config: ¶ms.ChainConfig{ @@ -372,6 +377,7 @@ func (api *RetestethAPI) SetChainParams(ctx context.Context, chainParams ChainPa PetersburgBlock: petersburgBlock, IstanbulBlock: istanbulBlock, RamanujanBlock: ramanujanBlock, + MirrorSyncBlock: mirrorSyncBlock, }, Nonce: uint64(chainParams.Genesis.Nonce), Timestamp: uint64(chainParams.Genesis.Timestamp), diff --git a/core/genesis.go b/core/genesis.go index d5ab55d055..e2983dddbc 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -256,6 +256,8 @@ func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig { return params.RinkebyChainConfig case ghash == params.GoerliGenesisHash: return params.GoerliChainConfig + case ghash == params.BSCGenesisHash: + return params.BSCChainConfig case ghash == params.ChapelGenesisHash: return params.ChapelChainConfig case ghash == params.RialtoGenesisHash: diff --git a/core/systemcontracts/upgrade.go b/core/systemcontracts/upgrade.go index 01cf9da65b..8f4fff9183 100644 --- a/core/systemcontracts/upgrade.go +++ b/core/systemcontracts/upgrade.go @@ -39,6 +39,8 @@ var ( ramanujanUpgrade = make(map[string]*Upgrade) nielsUpgrade = make(map[string]*Upgrade) + + mirrorUpgrade = make(map[string]*Upgrade) ) func init() { @@ -209,6 +211,39 @@ func init() { }, }, } + + mirrorUpgrade[mainNet] = &Upgrade{ + UpgradeName: "mirror", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(TokenManagerContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/586e1ee3ac0eb1f4f4ee0143e65a209d9e3f849f", + Code: "6080604052600436106103975760003560e01c80637942fd05116101dc578063b795031711610102578063dc927faf116100a0578063fa9e91591161006f578063fa9e915914610d4e578063fc3e5908146105dd578063fd6a687914610d63578063fe3a2af51461056257610397565b8063dc927faf14610d0f578063e605bca014610d24578063e80561fa14610562578063f9a2bbc714610d3957610397565b8063c8509d81116100dc578063c8509d8114610c0a578063c8e704a4146105dd578063d117a11014610c8f578063d9e6dae91461072757610397565b8063b795031714610766578063bd32d3f9146104ef578063c81b166214610bf557610397565b806396713da91161017a578063a78abc1611610149578063a78abc1614610b00578063ab51bb9614610b15578063ab67a48514610766578063ac43175114610b2a57610397565b806396713da914610aac5780639a854bbd14610ac15780639dc0926214610ad6578063a1a11bf514610aeb57610397565b8063831d65d1116101b6578063831d65d1146109db578063859180fb1461071257806394553a4e14610a6257806395b9ad2614610a9757610397565b80637942fd05146109b15780637d078e13146105045780637ec816dd146109c657610397565b8063493279b1116102c1578063613684751161025f57806370fd5bad1161022e57806370fd5bad1461076657806372c4e0861461084457806375d47a0a146108e857806377d9dae8146108fd57610397565b8063613684751461072757806366dea52a146105dd5780636b3f13071461077b5780636e47b4821461082f57610397565b80634bf6c8821161029b5780634bf6c8821461072757806351e806721461073c5780635d499b1b146107515780635f558f861461076657610397565b8063493279b1146106e65780634a688818146105625780634bc81c001461071257610397565b80632d89ac3211610339578063401809f911610308578063401809f9146105dd57806343756e5c146105f2578063445fcefe14610623578063487c88ac1461050457610397565b80632d89ac32146105045780632e02d7761461057757806337e6ecda146105aa5780633dffc3871461050457610397565b80631f91600b116103755780631f91600b146104ef57806323996b531461050457806325c751b71461051957806328ae48621461056257610397565b80630bee7a671461039c5780630f212b1b146103ca5780631182b875146103f5575b600080fd5b3480156103a857600080fd5b506103b1610d78565b6040805163ffffffff9092168252519081900360200190f35b3480156103d657600080fd5b506103df610d7d565b6040805160ff9092168252519081900360200190f35b34801561040157600080fd5b5061047a6004803603604081101561041857600080fd5b60ff8235169190810190604081016020820135600160201b81111561043c57600080fd5b82018360208201111561044e57600080fd5b803590602001918460018302840111600160201b8311171561046f57600080fd5b509092509050610d82565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104b457818101518382015260200161049c565b50505050905090810190601f1680156104e15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104fb57600080fd5b506103df610e9c565b34801561051057600080fd5b506103df610ea1565b61054e6004803603604081101561052f57600080fd5b5080356001600160a01b031690602001356001600160401b0316610ea6565b604080519115158252519081900360200190f35b34801561056e57600080fd5b506103df6113e9565b34801561058357600080fd5b5061054e6004803603602081101561059a57600080fd5b50356001600160a01b03166113ee565b3480156105b657600080fd5b5061054e600480360360208110156105cd57600080fd5b50356001600160a01b0316611403565b3480156105e957600080fd5b506103df611418565b3480156105fe57600080fd5b5061060761141d565b604080516001600160a01b039092168252519081900360200190f35b34801561062f57600080fd5b506106d46004803603602081101561064657600080fd5b810190602081018135600160201b81111561066057600080fd5b82018360208201111561067257600080fd5b803590602001918460018302840111600160201b8311171561069357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611423945050505050565b60408051918252519081900360200190f35b3480156106f257600080fd5b506106fb611581565b6040805161ffff9092168252519081900360200190f35b34801561071e57600080fd5b506103df611586565b34801561073357600080fd5b506103df61158b565b34801561074857600080fd5b50610607611590565b34801561075d57600080fd5b506106d4611596565b34801561077257600080fd5b506103df61159f565b61054e6004803603604081101561079157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156107bb57600080fd5b8201836020820111156107cd57600080fd5b803590602001918460018302840111600160201b831117156107ee57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506115a4945050505050565b34801561083b57600080fd5b50610607611e7a565b61054e6004803603602081101561085a57600080fd5b810190602081018135600160201b81111561087457600080fd5b82018360208201111561088657600080fd5b803590602001918460018302840111600160201b831117156108a757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e80945050505050565b3480156108f457600080fd5b506106076122cc565b61054e6004803603604081101561091357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561093d57600080fd5b82018360208201111561094f57600080fd5b803590602001918460018302840111600160201b8311171561097057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506122d2945050505050565b3480156109bd57600080fd5b506103df6127d8565b3480156109d257600080fd5b506106d46127dd565b3480156109e757600080fd5b50610a60600480360360408110156109fe57600080fd5b60ff8235169190810190604081016020820135600160201b811115610a2257600080fd5b820183602082011115610a3457600080fd5b803590602001918460018302840111600160201b83111715610a5557600080fd5b5090925090506127e3565b005b61054e60048036036040811015610a7857600080fd5b5080356001600160a01b031690602001356001600160401b0316612932565b348015610aa357600080fd5b506103df6132c8565b348015610ab857600080fd5b506103df6132cd565b348015610acd57600080fd5b506106d46132d2565b348015610ae257600080fd5b506106076132de565b348015610af757600080fd5b506106076132e4565b348015610b0c57600080fd5b5061054e6132ea565b348015610b2157600080fd5b506103b16113e9565b348015610b3657600080fd5b50610a6060048036036040811015610b4d57600080fd5b810190602081018135600160201b811115610b6757600080fd5b820183602082011115610b7957600080fd5b803590602001918460018302840111600160201b83111715610b9a57600080fd5b919390929091602081019035600160201b811115610bb757600080fd5b820183602082011115610bc957600080fd5b803590602001918460018302840111600160201b83111715610bea57600080fd5b5090925090506132f3565b348015610c0157600080fd5b506106076135c8565b348015610c1657600080fd5b50610a6060048036036040811015610c2d57600080fd5b60ff8235169190810190604081016020820135600160201b811115610c5157600080fd5b820183602082011115610c6357600080fd5b803590602001918460018302840111600160201b83111715610c8457600080fd5b5090925090506135ce565b348015610c9b57600080fd5b50610cb960048036036020811015610cb257600080fd5b50356136a4565b6040805160ff988916815260208101979097526001600160a01b03909516868601526060860193909352608085019190915290931660a08301526001600160401b0390921660c082015290519081900360e00190f35b348015610d1b57600080fd5b506106076136fb565b348015610d3057600080fd5b506106d4613701565b348015610d4557600080fd5b50610607613707565b348015610d5a57600080fd5b506106d461370d565b348015610d6f57600080fd5b50610607613713565b606481565b600681565b60603361200014610dc45760405162461bcd60e51b815260040180806020018281038252602f815260200180615a82602f913960400191505060405180910390fd5b60ff841660011415610e1657610e0f83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061371992505050565b9050610e95565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605848484604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1506040805160008152602081019091525b9392505050565b600481565b600181565b6040805163bd46646160e01b81526001600160a01b0384166004820152905160009182916110049163bd466461916024808301926020929190829003018186803b158015610ef357600080fd5b505afa158015610f07573d6000803e3d6000fd5b505050506040513d6020811015610f1d57600080fd5b5051905080610f5f576040805162461bcd60e51b81526020600482015260096024820152681b9bdd08189bdd5b9960ba1b604482015290519081900360640190fd5b6001600160a01b03841660009081526003602052604090205460ff16610fc2576040805162461bcd60e51b81526020600482015260136024820152723737ba103137bab73210313c9036b4b93937b960691b604482015290519081900360640190fd5b60006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015610fff57600080fd5b505afa158015611013573d6000803e3d6000fd5b505050506040513d602081101561102957600080fd5b505190506402540be40034061580156110545750600554611050908263ffffffff6139a916565b3410155b61108f5760405162461bcd60e51b8152600401808060200182810382526046815260200180615a0e6046913960600191505060405180910390fd5b42607801846001600160401b0316101580156110b95750426201518001846001600160401b031611155b6110f45760405162461bcd60e51b81526004018080602001828103825260388152602001806159396038913960400191505060405180910390fd5b6000856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112f57600080fd5b505afa158015611143573d6000803e3d6000fd5b505050506040513d602081101561115957600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0389169163313ce567916004808301926020929190829003018186803b1580156111a157600080fd5b505afa1580156111b5573d6000803e3d6000fd5b505050506040513d60208110156111cb57600080fd5b50519050677ce66c50e28400006111e58360ff8416613a03565b1115611231576040805162461bcd60e51b8152602060048201526016602482015275746f6f206c6172676520746f74616c20737570706c7960501b604482015290519081900360640190fd5b600554611004906108fc9061124d90349063ffffffff613a4316565b6040518115909202916000818181858888f19350505050158015611275573d6000803e3d6000fd5b5061127e615790565b6040518060c00160405280336001600160a01b03168152602001896001600160a01b031681526020018681526020018481526020016402540be400600554816112c357fe5b0481526001600160401b038916602090910152905061200063f7a251d760056112eb84613a85565b6113156402540be40061130960055434613a4390919063ffffffff16565b9063ffffffff613bba16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561137357818101518382015260200161135b565b50505050905090810190601f1680156113a05780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156113c157600080fd5b505af11580156113d5573d6000803e3d6000fd5b505050506001955050505050505b92915050565b600081565b60036020526000908152604090205460ff1681565b60026020526000908152604090205460ff1681565b600381565b61100181565b60208101516000906114336157c5565b50600081815260016020818152604092839020835160e081018552815460ff9081168252938201549281019290925260028101546001600160a01b031693820184905260038101546060830152600481015460808301526005015491821660a08201526101009091046001600160401b031660c0820152906114ba5760009250505061157c565b600081604001516001600160a01b03166370a082316110046040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561151857600080fd5b505afa15801561152c573d6000803e3d6000fd5b505050506040513d602081101561154257600080fd5b5051608083015160608401519192506000916115639163ffffffff613a4316565b9050611575818363ffffffff613a4316565b9450505050505b919050565b606081565b600581565b600881565b61200081565b6402540be40081565b600281565b6001600160a01b03821660009081526002602052604081205460ff16156115fc5760405162461bcd60e51b815260040180806020018281038252602b815260200180615ab1602b913960400191505060405180910390fd5b600061160783613bfc565b90506116116157c5565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c08301526116d6576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b60006116f382608001518360600151613a4390919063ffffffff16565b905081604001516001600160a01b0316866001600160a01b0316146117495760405162461bcd60e51b81526004018080602001828103825260458152602001806159a86045913960600191505060405180910390fd5b336001600160a01b0316866001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561178c57600080fd5b505afa1580156117a0573d6000803e3d6000fd5b505050506040513d60208110156117b657600080fd5b50516001600160a01b0316146117fd5760405162461bcd60e51b815260040180806020018281038252602e81526020018061590b602e913960400191505060405180910390fd5b604080516370a0823160e01b8152611004600482015290516000916001600160a01b038916916370a0823191602480820192602092909190829003018186803b15801561184957600080fd5b505afa15801561185d573d6000803e3d6000fd5b505050506040513d602081101561187357600080fd5b505160408051636eb1769f60e11b8152336004820152306024820152905191925083916119049184916001600160a01b038c169163dd62ed3e916044808301926020929190829003018186803b1580156118cc57600080fd5b505afa1580156118e0573d6000803e3d6000fd5b505050506040513d60208110156118f657600080fd5b50519063ffffffff6139a916565b1015611957576040805162461bcd60e51b815260206004820152601760248201527f616c6c6f77616e6365206973206e6f7420656e6f756768000000000000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561199957600080fd5b505afa1580156119ad573d6000803e3d6000fd5b505050506040513d60208110156119c357600080fd5b505190508082108015906119dc57506402540be4008206155b611a175760405162461bcd60e51b81526004018080602001828103825260378152602001806159716037913960400191505060405180910390fd5b6000611a23868b613c03565b905063ffffffff8116611c22576001600160a01b038a166323b872dd33611004611a53898963ffffffff613a4316565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015611abb57600080fd5b505af1158015611acf573d6000803e3d6000fd5b505050506040513d6020811015611ae557600080fd5b5050602086015160408088015160a089015182516323bfccdb60e21b815260048101949094526001600160a01b03909116602484015260ff1660448301525161100491638eff336c91606480830192600092919082900301818387803b158015611b4e57600080fd5b505af1158015611b62573d6000803e3d6000fd5b50505050896001600160a01b03167f78e7dd9aefcdbf795c4936a66f7dc6d41bb56637b54f561a6bf7829dca3348a88a8860600151886040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b83811015611be1578181015183820152602001611bc9565b50505050905090810190601f168015611c0e5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2611cda565b896001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a1078a8360405180806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611c9e578181015183820152602001611c86565b50505050905090810190601f168015611ccb5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25b60008781526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055611d34615801565b5060408051808201825263ffffffff831681526020810189905290516110049085156108fc029086906000818181858888f19350505050158015611d7c573d6000803e3d6000fd5b5061200063f7a251d76001611d908461405d565b611da5886402540be40063ffffffff613bba16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611e03578181015183820152602001611deb565b50505050905090810190601f168015611e305780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611e5157600080fd5b505af1158015611e65573d6000803e3d6000fd5b5060019e9d5050505050505050505050505050565b61100581565b600080611e8c83613bfc565b9050611e966157c5565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c0830152611f5b576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b428160c001516001600160401b031610611fbc576040805162461bcd60e51b815260206004820152601b60248201527f62696e642072657175657374206973206e6f7420657870697265640000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015611ffe57600080fd5b505afa158015612012573d6000803e3d6000fd5b505050506040513d602081101561202857600080fd5b5051905080821080159061204157506402540be4008206155b61207c5760405162461bcd60e51b81526004018080602001828103825260378152602001806159716037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556120d6615801565b50604080518082018252600181526020810186905290516110049084156108fc029085906000818181858888f19350505050158015612119573d6000803e3d6000fd5b5061200063f7a251d7600161212d8461405d565b612142876402540be40063ffffffff613bba16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156121a0578181015183820152602001612188565b50505050905090810190601f1680156121cd5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156121ee57600080fd5b505af1158015612202573d6000803e3d6000fd5b5050505083604001516001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600160405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561228457818101518382015260200161226c565b50505050905090810190601f1680156122b15780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25060019695505050505050565b61100881565b6000806122de83613bfc565b90506122e86157c5565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c08301526123ad576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b80604001516001600160a01b0316856001600160a01b0316146124015760405162461bcd60e51b81526004018080602001828103825260458152602001806159a86045913960600191505060405180910390fd5b336001600160a01b0316856001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561244457600080fd5b505afa158015612458573d6000803e3d6000fd5b505050506040513d602081101561246e57600080fd5b50516001600160a01b0316146124cb576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206265703230206f776e65722063616e2072656a6563740000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561250d57600080fd5b505afa158015612521573d6000803e3d6000fd5b505050506040513d602081101561253757600080fd5b5051905080821080159061255057506402540be4008206155b61258b5760405162461bcd60e51b81526004018080602001828103825260378152602001806159716037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556125e5615801565b50604080518082018252600781526020810186905290516110049084156108fc029085906000818181858888f19350505050158015612628573d6000803e3d6000fd5b5061200063f7a251d7600161263c8461405d565b612651876402540be40063ffffffff613bba16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156126af578181015183820152602001612697565b50505050905090810190601f1680156126dc5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156126fd57600080fd5b505af1158015612711573d6000803e3d6000fd5b50505050876001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600760405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561278f578181015183820152602001612777565b50505050905090810190601f1680156127bc5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2506001979650505050505050565b600b81565b60045481565b33612000146128235760405162461bcd60e51b815260040180806020018281038252602f815260200180615a82602f913960400191505060405180910390fd5b60ff8316600414156128735761286e82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506140d392505050565b61292d565b60ff8316600514156128be5761286e82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061438092505050565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b6040805163bd46646160e01b81526001600160a01b0384166004820152905160009182916110049163bd466461916024808301926020929190829003018186803b15801561297f57600080fd5b505afa158015612993573d6000803e3d6000fd5b505050506040513d60208110156129a957600080fd5b5051146129ed576040805162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48189bdd5b99609a1b604482015290519081900360640190fd5b6001600160a01b03831660009081526002602052604090205460ff1615612a4c576040805162461bcd60e51b815260206004820152600e60248201526d6d6972726f722070656e64696e6760901b604482015290519081900360640190fd5b60006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015612a8957600080fd5b505afa158015612a9d573d6000803e3d6000fd5b505050506040513d6020811015612ab357600080fd5b505190506402540be4003406158015612ade5750600454612ada908263ffffffff6139a916565b3410155b612b195760405162461bcd60e51b815260040180806020018281038252604d8152602001806158be604d913960600191505060405180910390fd5b42607801836001600160401b031610158015612b435750426201518001836001600160401b031611155b612b7e5760405162461bcd60e51b81526004018080602001828103825260388152602001806159396038913960400191505060405180910390fd5b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612bb957600080fd5b505afa158015612bcd573d6000803e3d6000fd5b505050506040513d6020811015612be357600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038816916318160ddd916004808301926020929190829003018186803b158015612c2b57600080fd5b505afa158015612c3f573d6000803e3d6000fd5b505050506040513d6020811015612c5557600080fd5b50519050677ce66c50e2840000612c6f8260ff8516613a03565b1115612cbb576040805162461bcd60e51b8152602060048201526016602482015275746f6f206c6172676520746f74616c20737570706c7960501b604482015290519081900360640190fd5b6060866001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015612cf657600080fd5b505afa158015612d0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612d3357600080fd5b8101908080516040519392919084600160201b821115612d5257600080fd5b908301906020820185811115612d6757600080fd5b8251600160201b811182820188101715612d8057600080fd5b82525081516020918201929091019080838360005b83811015612dad578181015183820152602001612d95565b50505050905090810190601f168015612dda5780820380516001836020036101000a031916815260200191505b50604052505050905060608190506001815110158015612dfc57506020815111155b612e4d576040805162461bcd60e51b815260206004820152601d60248201527f6e616d65206c656e677468206d75737420626520696e205b312c33325d000000604482015290519081900360640190fd5b6060886001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015612e8857600080fd5b505afa158015612e9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612ec557600080fd5b8101908080516040519392919084600160201b821115612ee457600080fd5b908301906020820185811115612ef957600080fd5b8251600160201b811182820188101715612f1257600080fd5b82525081516020918201929091019080838360005b83811015612f3f578181015183820152602001612f27565b50505050905090810190601f168015612f6c5780820380516001836020036101000a031916815260200191505b5060405250508151919250829160031180159150612f8c57508051600810155b612fdd576040805162461bcd60e51b815260206004820152601e60248201527f73796d626f6c206c656e677468206d75737420626520696e205b332c385d0000604482015290519081900360640190fd5b60005b81518160ff1610156130d957606160f81b828260ff168151811061300057fe5b01602001516001600160f81b0319161080159061303e5750606160f81b828260ff168151811061302c57fe5b01602001516001600160f81b03191611155b806130965750604160f81b828260ff168151811061305857fe5b01602001516001600160f81b031916108015906130965750602d60f91b828260ff168151811061308457fe5b01602001516001600160f81b03191611155b6130d15760405162461bcd60e51b8152600401808060200182810382526024815260200180615adc6024913960400191505060405180910390fd5b600101612fe0565b50600454611004906108fc906130f690349063ffffffff613a4316565b6040518115909202916000818181858888f1935050505015801561311e573d6000803e3d6000fd5b506001600160a01b038a166000908152600260209081526040909120805460ff191660011790558481015190830151613155615818565b604051806101000160405280336001600160a01b031681526020018e6001600160a01b031681526020018481526020018381526020018981526020018a60ff1681526020016402540be400600454816131aa57fe5b0481526001600160401b038e16602090910152905061200063f7a251d760046131d284614543565b6131f06402540be40061130960045434613a4390919063ffffffff16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561324e578181015183820152602001613236565b50505050905090810190601f16801561327b5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561329c57600080fd5b505af11580156132b0573d6000803e3d6000fd5b5050505060019a505050505050505050505092915050565b600781565b600981565b677ce66c50e284000081565b61100781565b61100681565b60005460ff1681565b33611007146133335760405162461bcd60e51b815260040180806020018281038252602e815260200180615a54602e913960400191505060405180910390fd5b60208114613388576040805162461bcd60e51b815260206004820152601860248201527f65787065637465642076616c7565206c656e6774682033320000000000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f880181900481028201810190925286815293945060609392508691508590819084018382808284376000920191909152505050506020830151909150686d6972726f7246656560b81b81141561347d5760208201516402540be400810615613475576040805162461bcd60e51b815260206004820152601a60248201527f6d6972726f72466565206d757374206265204e202a2031653130000000000000604482015290519081900360640190fd5b600455613533565b6673796e6346656560c81b8114156134f65760208201516402540be4008106156134ee576040805162461bcd60e51b815260206004820152601860248201527f73796e63466565206d757374206265204e202a20316531300000000000000000604482015290519081900360640190fd5b600555613533565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b61100281565b336120001461360e5760405162461bcd60e51b815260040180806020018281038252602f815260200180615a82602f913960400191505060405180910390fd5b60ff8316600414156136595761286e82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506146b592505050565b60ff8316600514156128be5761286e82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506147d592505050565b600160208190526000918252604090912080549181015460028201546003830154600484015460059094015460ff9586169593946001600160a01b039093169391929181169061010090046001600160401b031687565b61100381565b60055481565b61100081565b61271081565b61100481565b60606137236157c5565b600061372e846148da565b9150915080613784576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b815160ff16613837576020828101805160009081526001928390526040908190208551815460ff1990811660ff928316178355935194820194909455908501516002820180546001600160a01b0319166001600160a01b03909216919091179055606085015160038201556080850151600482015560a08501516005909101805460c08701519316919093161768ffffffffffffffff0019166101006001600160401b039092169190910217905561398e565b815160ff16600114156139415760006110046001600160a01b03166359b9278984602001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561389057600080fd5b505afa1580156138a4573d6000803e3d6000fd5b505050506040513d60208110156138ba57600080fd5b505190506001600160a01b0381161561393b5760208301516040805163b99328c560e01b815260048101929092526001600160a01b0383166024830152516110049163b99328c591604480830192600092919082900301818387803b15801561392257600080fd5b505af1158015613936573d6000803e3d6000fd5b505050505b5061398e565b6040805162461bcd60e51b815260206004820152601960248201527f756e7265636f676e697a65642062696e64207061636b61676500000000000000604482015290519081900360640190fd5b60408051600080825260208201909252905b50949350505050565b600082820183811015610e95576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006008821115613a2c57613a25836007198401600a0a63ffffffff613bba16565b90506113e3565b610e95836008849003600a0a63ffffffff614a2b16565b6000610e9583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614a84565b60408051600680825260e08201909252606091829190816020015b6060815260200190600190039081613aa05750508351909150613acb906001600160a01b0316614b1b565b81600081518110613ad857fe5b6020026020010181905250613af983602001516001600160a01b0316614b1b565b81600181518110613b0657fe5b6020026020010181905250613b21836040015160001c614b3e565b81600281518110613b2e57fe5b6020026020010181905250613b468360600151614b3e565b81600381518110613b5357fe5b6020026020010181905250613b6b8360800151614b3e565b81600481518110613b7857fe5b6020026020010181905250613b998360a001516001600160401b0316614b3e565b81600581518110613ba657fe5b6020026020010181905250610e9581614b51565b6000610e9583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614bdb565b6020015190565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3f57600080fd5b505afa158015613c53573d6000803e3d6000fd5b505050506040513d6020811015613c6957600080fd5b5051604080516395d89b4160e01b8152905160ff90921692506060916001600160a01b038616916395d89b41916004808301926000929190829003018186803b158015613cb557600080fd5b505afa158015613cc9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613cf257600080fd5b8101908080516040519392919084600160201b821115613d1157600080fd5b908301906020820185811115613d2657600080fd5b8251600160201b811182820188101715613d3f57600080fd5b82525081516020918201929091019080838360005b83811015613d6c578181015183820152602001613d54565b50505050905090810190601f168015613d995780820380516001836020036101000a031916815260200191505b5060408181526370a0823160e01b82526110046004830152519495506000946001600160a01b038a1694506370a08231935060248083019350602092829003018186803b158015613de957600080fd5b505afa158015613dfd573d6000803e3d6000fd5b505050506040513d6020811015613e1357600080fd5b505160808701516060880151919250600091613e349163ffffffff613a4316565b9050428760c001516001600160401b03161015613e595750600193506113e392505050565b613e67838860200151614c40565b613e795750600293506113e392505050565b80821115613e8f5750600393506113e392505050565b866060015187604001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613ed157600080fd5b505afa158015613ee5573d6000803e3d6000fd5b505050506040513d6020811015613efb57600080fd5b505114613f105750600493506113e392505050565b8660a0015160ff168414613f2c5750600593506113e392505050565b602080880151604080516359b9278960e01b8152600481019290925251600092611004926359b927899260248083019392829003018186803b158015613f7157600080fd5b505afa158015613f85573d6000803e3d6000fd5b505050506040513d6020811015613f9b57600080fd5b50516001600160a01b031614158061403d57506000801b6110046001600160a01b031663bd46646189604001516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561400e57600080fd5b505afa158015614022573d6000803e3d6000fd5b505050506040513d602081101561403857600080fd5b505114155b156140505750600693506113e392505050565b5060009695505050505050565b6040805160028082526060828101909352829190816020015b6060815260200190600190039081614076575050835190915061409e9063ffffffff16614b3e565b816000815181106140ab57fe5b60200260200101819052506140c6836020015160001c614b3e565b81600181518110613ba657fe5b6140db615790565b60006140e683614d28565b9150915080614133576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b6020808301516001600160a01b03166000908152600290915260409020805460ff1916905560a082015160ff166142945760808201516040516110049180156108fc02916000818181858888f19350505050158015614196573d6000803e3d6000fd5b506110046001600160a01b0316638eff336c8360600151846020015185604001516040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b031681526020018260ff1681526020019350505050600060405180830381600087803b15801561421057600080fd5b505af1158015614224573d6000803e3d6000fd5b50505050602082810180516001600160a01b03908116600090815260038452604090819020805460ff1916600117905591516060860151835190815292519116927f41787d7db08fc5907641ee8343379f28215727eb123d4b462099afab4300b036928290030190a2505061437d565b81602001516001600160a01b03167fefe400ad0042ebf81a245de9ae669616105e0ca9fc946352c085da0c2bc524e58360a00151604051808260ff1660ff16815260200191505060405180910390a2815160808301516040516000926001600160a01b0316916127109184818181858888f193505050503d8060008114614337576040519150601f19603f3d011682016040523d82523d6000602084013e61433c565b606091505b50509050806143795760808301516040516110029180156108fc02916000818181858888f19350505050158015614377573d6000803e3d6000fd5b505b5050505b50565b61438861585c565b600061439383614e35565b91509150806143e0576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b606082015160ff166144605760408083015190516110049180156108fc02916000818181858888f1935050505015801561441e573d6000803e3d6000fd5b5081602001516001600160a01b03167fbb7d3a9a559080d8281b0e4fb39dacbe2fdcafd5ef765e9a6ed871c9167dc60f60405160405180910390a2505061437d565b81602001516001600160a01b03167ff1e25fa536da84053644fd788b1d6a27ea6edd1f3af80c7d36ca253c4c82c9c38360600151604051808260ff1660ff16815260200191505060405180910390a2815160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d8060008114614503576040519150601f19603f3d011682016040523d82523d6000602084013e614508565b606091505b50509050806143795760408084015190516110029180156108fc02916000818181858888f19350505050158015614377573d6000803e3d6000fd5b6040805160088082526101208201909252606091829190816020015b606081526020019060019003908161455f575050835190915061458a906001600160a01b0316614b1b565b8160008151811061459757fe5b60200260200101819052506145b883602001516001600160a01b0316614b1b565b816001815181106145c557fe5b60200260200101819052506145e0836040015160001c614b3e565b816002815181106145ed57fe5b6020026020010181905250614608836060015160001c614b3e565b8160038151811061461557fe5b602002602001018190525061462d8360800151614b3e565b8160048151811061463a57fe5b60200260200101819052506146558360a0015160ff16614b3e565b8160058151811061466257fe5b602002602001018190525061467a8360c00151614b3e565b8160068151811061468757fe5b60200260200101819052506146a88360e001516001600160401b0316614b3e565b81600781518110613ba657fe5b6146bd615818565b60006146c883614f01565b9150915080614715576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b6020808301516001600160a01b03908116600090815260029092526040808320805460ff19169055845160c08601519151921691612710916402540be400029084818181858888f193505050503d806000811461478e576040519150601f19603f3d011682016040523d82523d6000602084013e614793565b606091505b50509050806143795760c0830151604051611002916402540be4000280156108fc02916000818181858888f19350505050158015614377573d6000803e3d6000fd5b6147dd615790565b60006147e883615052565b9150915080614835576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b815160808301516040516000926001600160a01b031691612710916402540be4009091029084818181858888f193505050503d8060008114614893576040519150601f19603f3d011682016040523d82523d6000602084013e614898565b606091505b5050905080614379576080830151604051611002916402540be4000280156108fc02916000818181858888f19350505050158015614377573d6000803e3d6000fd5b6148e26157c5565b60006148ec6157c5565b6148f4615883565b61490561490086615162565b615187565b90506000805b614914836151d1565b15614a1e57806149395761492f61492a846151f2565b615240565b60ff168452614a16565b80600114156149585761494e61492a846151f2565b6020850152614a16565b80600214156149855761497261496d846151f2565b6152f5565b6001600160a01b03166040850152614a16565b80600314156149a45761499a61492a846151f2565b6060850152614a16565b80600414156149c3576149b961492a846151f2565b6080850152614a16565b80600514156149e5576149d861492a846151f2565b60ff1660a0850152614a16565b8060061415614a11576149fa61492a846151f2565b6001600160401b031660c085015260019150614a16565b614a1e565b60010161490b565b5091935090915050915091565b600082614a3a575060006113e3565b82820282848281614a4757fe5b0414610e955760405162461bcd60e51b81526004018080602001828103825260218152602001806159ed6021913960400191505060405180910390fd5b60008184841115614b135760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614ad8578181015183820152602001614ac0565b50505050905090810190601f168015614b055780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60408051600560a21b8318601482015260348101909152606090610e958161530f565b60606113e3614b4c83615365565b61530f565b6060815160001415614b72575060408051600081526020810190915261157c565b606082600081518110614b8157fe5b602002602001015190506000600190505b8351811015614bc257614bb882858381518110614bab57fe5b602002602001015161544b565b9150600101614b92565b50610e95614bd5825160c060ff166154c8565b8261544b565b60008183614c2a5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614ad8578181015183820152602001614ac0565b506000838581614c3657fe5b0495945050505050565b8151600090839060081080614c56575080516003115b15614c655760009150506113e3565b60408051602080825281830190925260609160208201818036833701905050905083602082015280825181518110614c9957fe5b6020910101516001600160f81b031916602d60f81b14614cbe576000925050506113e3565b600160005b8351811015614d1e57828181518110614cd857fe5b602001015160f81c60f81b6001600160f81b031916848281518110614cf957fe5b01602001516001600160f81b03191614614d165760009150614d1e565b600101614cc3565b5095945050505050565b614d30615790565b6000614d3a615790565b614d42615883565b614d4e61490086615162565b90506000805b614d5d836151d1565b15614a1e5780614d8357614d7361496d846151f2565b6001600160a01b03168452614e2d565b8060011415614dab57614d9861496d846151f2565b6001600160a01b03166020850152614e2d565b8060021415614dcd57614dc061492a846151f2565b60ff166040850152614e2d565b8060031415614dec57614de261492a846151f2565b6060850152614e2d565b8060041415614e0b57614e0161492a846151f2565b6080850152614e2d565b8060051415614a1157614e2061492a846151f2565b60ff1660a0850152600191505b600101614d54565b614e3d61585c565b6000614e4761585c565b614e4f615883565b614e5b61490086615162565b90506000805b614e6a836151d1565b15614a1e5780614e9057614e8061496d846151f2565b6001600160a01b03168452614ef9565b8060011415614eb857614ea561496d846151f2565b6001600160a01b03166020850152614ef9565b8060021415614ed757614ecd61492a846151f2565b6040850152614ef9565b8060031415614a1157614eec61492a846151f2565b60ff166060850152600191505b600101614e61565b614f09615818565b6000614f13615818565b614f1b615883565b614f2761490086615162565b90506000805b614f36836151d1565b15614a1e5780614f5c57614f4c61496d846151f2565b6001600160a01b0316845261504a565b8060011415614f8457614f7161496d846151f2565b6001600160a01b0316602085015261504a565b8060021415614fa357614f9961492a846151f2565b604085015261504a565b8060031415614fc257614fb861492a846151f2565b606085015261504a565b8060041415614fe157614fd761492a846151f2565b608085015261504a565b806005141561500357614ff661492a846151f2565b60ff1660a085015261504a565b80600614156150225761501861492a846151f2565b60c085015261504a565b8060071415614a115761503761492a846151f2565b6001600160401b031660e0850152600191505b600101614f2d565b61505a615790565b6000615064615790565b61506c615883565b61507861490086615162565b90506000805b615087836151d1565b15614a1e57806150ad5761509d61496d846151f2565b6001600160a01b0316845261515a565b80600114156150d5576150c261496d846151f2565b6001600160a01b0316602085015261515a565b80600214156150f4576150ea61492a846151f2565b604085015261515a565b80600314156151135761510961492a846151f2565b606085015261515a565b80600414156151325761512861492a846151f2565b608085015261515a565b8060051415614a115761514761492a846151f2565b6001600160401b031660a0850152600191505b60010161507e565b61516a6158a3565b506040805180820190915281518152602082810190820152919050565b61518f615883565b615198826155c0565b6151a157600080fd5b60006151b083602001516155fa565b60208085015160408051808201909152868152920190820152915050919050565b60006151db6158a3565b505080518051602091820151919092015191011190565b6151fa6158a3565b615203826151d1565b61520c57600080fd5b6020820151600061521c8261565d565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061525557508151602110155b61525e57600080fd5b600061526d83602001516155fa565b905080836000015110156152c8576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b8251602080850151830180519284900392918310156139a057506020919091036101000a90049392505050565b805160009060151461530657600080fd5b6113e382615240565b6060815160011480156153415750607f60f81b8260008151811061532f57fe5b01602001516001600160f81b03191611155b1561534d57508061157c565b6113e361535f8351608060ff166154c8565b8361544b565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166153a9575060186153cd565b6fffffffffffffffffffffffffffffffff1984166153c9575060106153cd565b5060005b6020811015615403578181815181106153e257fe5b01602001516001600160f81b031916156153fb57615403565b6001016153cd565b60008160200390506060816040519080825280601f01601f191660200182016040528015615438576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561547c578051835260209283019201615464565b50855184518101855292509050808201602086015b818310156154a9578051835260209283019201615491565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310615518576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b604080516001808252818301909252606091602082018180368337019050509050603784116155725782840160f81b8160008151811061555457fe5b60200101906001600160f81b031916908160001a90535090506113e3565b606061557d85615365565b90508381510160370160f81b8260008151811061559657fe5b60200101906001600160f81b031916908160001a9053506155b7828261544b565b95945050505050565b80516000906155d15750600061157c565b6020820151805160001a9060c08210156155f05760009250505061157c565b5060019392505050565b8051600090811a608081101561561457600091505061157c565b60b881108061562f575060c0811080159061562f575060f881105b1561563e57600191505061157c565b60c08110156156525760b51901905061157c565b60f51901905061157c565b80516000908190811a60808110156156785760019150615789565b60b881101561568d57607e1981019150615789565b60c081101561570757600060b78203600186019550806020036101000a865104915060018101820193505080831015615701576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50615789565b60f881101561571c5760be1981019150615789565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615787576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b60405180604001604052806158966158a3565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6d73672e76616c7565206d757374206265204e202a203165313020616e642067726561746572207468616e2073756d206f66206d696e6952656c617946656520616e64206d6972726f724665656f6e6c79206265703230206f776e65722063616e20617070726f766520746869732062696e64207265717565737465787069726554696d65206d7573742062652074776f206d696e75746573206c6174657220616e64206f6e6520646179206561726c69657272656c6179466565206d757374206265204e202a203165313020616e642067726561746572207468616e206d696e6952656c6179466565636f6e74616374206164647265737320646f65736e277420657175616c20746f2074686520636f6e7472616374206164647265737320696e2062696e642072657175657374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776d73672e76616c7565206d757374206265204e202a203165313020616e64206e6f206c6573732073756d206f66206d696e6952656c617946656520616e642073796e63466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e747261637474686520626570323020746f6b656e20697320696e206d6972726f722070656e64696e672073746174757373796d626f6c206d757374206e6f7420636f6e7461696e206e6f6e2d616c706861626574a26469706673582212201165eef2c3a9b93126944a081b2726c7c09babc88a4afff1c0ba3b8ec0bcb9ec64736f6c63430006040033", + }, + }, + } + + mirrorUpgrade[chapelNet] = &Upgrade{ + UpgradeName: "mirror", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(TokenManagerContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/586e1ee3ac0eb1f4f4ee0143e65a209d9e3f849f", + Code: "6080604052600436106103975760003560e01c80637942fd05116101dc578063b795031711610102578063dc927faf116100a0578063fa9e91591161006f578063fa9e915914610d4e578063fc3e5908146105dd578063fd6a687914610d63578063fe3a2af51461056257610397565b8063dc927faf14610d0f578063e605bca014610d24578063e80561fa14610562578063f9a2bbc714610d3957610397565b8063c8509d81116100dc578063c8509d8114610c0a578063c8e704a4146105dd578063d117a11014610c8f578063d9e6dae91461072757610397565b8063b795031714610766578063bd32d3f9146104ef578063c81b166214610bf557610397565b806396713da91161017a578063a78abc1611610149578063a78abc1614610b00578063ab51bb9614610b15578063ab67a48514610766578063ac43175114610b2a57610397565b806396713da914610aac5780639a854bbd14610ac15780639dc0926214610ad6578063a1a11bf514610aeb57610397565b8063831d65d1116101b6578063831d65d1146109db578063859180fb1461071257806394553a4e14610a6257806395b9ad2614610a9757610397565b80637942fd05146109b15780637d078e13146105045780637ec816dd146109c657610397565b8063493279b1116102c1578063613684751161025f57806370fd5bad1161022e57806370fd5bad1461076657806372c4e0861461084457806375d47a0a146108e857806377d9dae8146108fd57610397565b8063613684751461072757806366dea52a146105dd5780636b3f13071461077b5780636e47b4821461082f57610397565b80634bf6c8821161029b5780634bf6c8821461072757806351e806721461073c5780635d499b1b146107515780635f558f861461076657610397565b8063493279b1146106e65780634a688818146105625780634bc81c001461071257610397565b80632d89ac3211610339578063401809f911610308578063401809f9146105dd57806343756e5c146105f2578063445fcefe14610623578063487c88ac1461050457610397565b80632d89ac32146105045780632e02d7761461057757806337e6ecda146105aa5780633dffc3871461050457610397565b80631f91600b116103755780631f91600b146104ef57806323996b531461050457806325c751b71461051957806328ae48621461056257610397565b80630bee7a671461039c5780630f212b1b146103ca5780631182b875146103f5575b600080fd5b3480156103a857600080fd5b506103b1610d78565b6040805163ffffffff9092168252519081900360200190f35b3480156103d657600080fd5b506103df610d7d565b6040805160ff9092168252519081900360200190f35b34801561040157600080fd5b5061047a6004803603604081101561041857600080fd5b60ff8235169190810190604081016020820135600160201b81111561043c57600080fd5b82018360208201111561044e57600080fd5b803590602001918460018302840111600160201b8311171561046f57600080fd5b509092509050610d82565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104b457818101518382015260200161049c565b50505050905090810190601f1680156104e15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104fb57600080fd5b506103df610e9c565b34801561051057600080fd5b506103df610ea1565b61054e6004803603604081101561052f57600080fd5b5080356001600160a01b031690602001356001600160401b0316610ea6565b604080519115158252519081900360200190f35b34801561056e57600080fd5b506103df6113e9565b34801561058357600080fd5b5061054e6004803603602081101561059a57600080fd5b50356001600160a01b03166113ee565b3480156105b657600080fd5b5061054e600480360360208110156105cd57600080fd5b50356001600160a01b0316611403565b3480156105e957600080fd5b506103df611418565b3480156105fe57600080fd5b5061060761141d565b604080516001600160a01b039092168252519081900360200190f35b34801561062f57600080fd5b506106d46004803603602081101561064657600080fd5b810190602081018135600160201b81111561066057600080fd5b82018360208201111561067257600080fd5b803590602001918460018302840111600160201b8311171561069357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611423945050505050565b60408051918252519081900360200190f35b3480156106f257600080fd5b506106fb611581565b6040805161ffff9092168252519081900360200190f35b34801561071e57600080fd5b506103df611586565b34801561073357600080fd5b506103df61158b565b34801561074857600080fd5b50610607611590565b34801561075d57600080fd5b506106d4611596565b34801561077257600080fd5b506103df61159f565b61054e6004803603604081101561079157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156107bb57600080fd5b8201836020820111156107cd57600080fd5b803590602001918460018302840111600160201b831117156107ee57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506115a4945050505050565b34801561083b57600080fd5b50610607611e7a565b61054e6004803603602081101561085a57600080fd5b810190602081018135600160201b81111561087457600080fd5b82018360208201111561088657600080fd5b803590602001918460018302840111600160201b831117156108a757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e80945050505050565b3480156108f457600080fd5b506106076122cc565b61054e6004803603604081101561091357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561093d57600080fd5b82018360208201111561094f57600080fd5b803590602001918460018302840111600160201b8311171561097057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506122d2945050505050565b3480156109bd57600080fd5b506103df6127d8565b3480156109d257600080fd5b506106d46127dd565b3480156109e757600080fd5b50610a60600480360360408110156109fe57600080fd5b60ff8235169190810190604081016020820135600160201b811115610a2257600080fd5b820183602082011115610a3457600080fd5b803590602001918460018302840111600160201b83111715610a5557600080fd5b5090925090506127e3565b005b61054e60048036036040811015610a7857600080fd5b5080356001600160a01b031690602001356001600160401b0316612932565b348015610aa357600080fd5b506103df6132c8565b348015610ab857600080fd5b506103df6132cd565b348015610acd57600080fd5b506106d46132d2565b348015610ae257600080fd5b506106076132de565b348015610af757600080fd5b506106076132e4565b348015610b0c57600080fd5b5061054e6132ea565b348015610b2157600080fd5b506103b16113e9565b348015610b3657600080fd5b50610a6060048036036040811015610b4d57600080fd5b810190602081018135600160201b811115610b6757600080fd5b820183602082011115610b7957600080fd5b803590602001918460018302840111600160201b83111715610b9a57600080fd5b919390929091602081019035600160201b811115610bb757600080fd5b820183602082011115610bc957600080fd5b803590602001918460018302840111600160201b83111715610bea57600080fd5b5090925090506132f3565b348015610c0157600080fd5b506106076135c8565b348015610c1657600080fd5b50610a6060048036036040811015610c2d57600080fd5b60ff8235169190810190604081016020820135600160201b811115610c5157600080fd5b820183602082011115610c6357600080fd5b803590602001918460018302840111600160201b83111715610c8457600080fd5b5090925090506135ce565b348015610c9b57600080fd5b50610cb960048036036020811015610cb257600080fd5b50356136a4565b6040805160ff988916815260208101979097526001600160a01b03909516868601526060860193909352608085019190915290931660a08301526001600160401b0390921660c082015290519081900360e00190f35b348015610d1b57600080fd5b506106076136fb565b348015610d3057600080fd5b506106d4613701565b348015610d4557600080fd5b50610607613707565b348015610d5a57600080fd5b506106d461370d565b348015610d6f57600080fd5b50610607613713565b606481565b600681565b60603361200014610dc45760405162461bcd60e51b815260040180806020018281038252602f815260200180615a82602f913960400191505060405180910390fd5b60ff841660011415610e1657610e0f83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061371992505050565b9050610e95565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605848484604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1506040805160008152602081019091525b9392505050565b600481565b600181565b6040805163bd46646160e01b81526001600160a01b0384166004820152905160009182916110049163bd466461916024808301926020929190829003018186803b158015610ef357600080fd5b505afa158015610f07573d6000803e3d6000fd5b505050506040513d6020811015610f1d57600080fd5b5051905080610f5f576040805162461bcd60e51b81526020600482015260096024820152681b9bdd08189bdd5b9960ba1b604482015290519081900360640190fd5b6001600160a01b03841660009081526003602052604090205460ff16610fc2576040805162461bcd60e51b81526020600482015260136024820152723737ba103137bab73210313c9036b4b93937b960691b604482015290519081900360640190fd5b60006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015610fff57600080fd5b505afa158015611013573d6000803e3d6000fd5b505050506040513d602081101561102957600080fd5b505190506402540be40034061580156110545750600554611050908263ffffffff6139a916565b3410155b61108f5760405162461bcd60e51b8152600401808060200182810382526046815260200180615a0e6046913960600191505060405180910390fd5b42607801846001600160401b0316101580156110b95750426201518001846001600160401b031611155b6110f45760405162461bcd60e51b81526004018080602001828103825260388152602001806159396038913960400191505060405180910390fd5b6000856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112f57600080fd5b505afa158015611143573d6000803e3d6000fd5b505050506040513d602081101561115957600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0389169163313ce567916004808301926020929190829003018186803b1580156111a157600080fd5b505afa1580156111b5573d6000803e3d6000fd5b505050506040513d60208110156111cb57600080fd5b50519050677ce66c50e28400006111e58360ff8416613a03565b1115611231576040805162461bcd60e51b8152602060048201526016602482015275746f6f206c6172676520746f74616c20737570706c7960501b604482015290519081900360640190fd5b600554611004906108fc9061124d90349063ffffffff613a4316565b6040518115909202916000818181858888f19350505050158015611275573d6000803e3d6000fd5b5061127e615790565b6040518060c00160405280336001600160a01b03168152602001896001600160a01b031681526020018681526020018481526020016402540be400600554816112c357fe5b0481526001600160401b038916602090910152905061200063f7a251d760056112eb84613a85565b6113156402540be40061130960055434613a4390919063ffffffff16565b9063ffffffff613bba16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561137357818101518382015260200161135b565b50505050905090810190601f1680156113a05780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156113c157600080fd5b505af11580156113d5573d6000803e3d6000fd5b505050506001955050505050505b92915050565b600081565b60036020526000908152604090205460ff1681565b60026020526000908152604090205460ff1681565b600381565b61100181565b60208101516000906114336157c5565b50600081815260016020818152604092839020835160e081018552815460ff9081168252938201549281019290925260028101546001600160a01b031693820184905260038101546060830152600481015460808301526005015491821660a08201526101009091046001600160401b031660c0820152906114ba5760009250505061157c565b600081604001516001600160a01b03166370a082316110046040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561151857600080fd5b505afa15801561152c573d6000803e3d6000fd5b505050506040513d602081101561154257600080fd5b5051608083015160608401519192506000916115639163ffffffff613a4316565b9050611575818363ffffffff613a4316565b9450505050505b919050565b606081565b600581565b600881565b61200081565b6402540be40081565b600281565b6001600160a01b03821660009081526002602052604081205460ff16156115fc5760405162461bcd60e51b815260040180806020018281038252602b815260200180615ab1602b913960400191505060405180910390fd5b600061160783613bfc565b90506116116157c5565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c08301526116d6576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b60006116f382608001518360600151613a4390919063ffffffff16565b905081604001516001600160a01b0316866001600160a01b0316146117495760405162461bcd60e51b81526004018080602001828103825260458152602001806159a86045913960600191505060405180910390fd5b336001600160a01b0316866001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561178c57600080fd5b505afa1580156117a0573d6000803e3d6000fd5b505050506040513d60208110156117b657600080fd5b50516001600160a01b0316146117fd5760405162461bcd60e51b815260040180806020018281038252602e81526020018061590b602e913960400191505060405180910390fd5b604080516370a0823160e01b8152611004600482015290516000916001600160a01b038916916370a0823191602480820192602092909190829003018186803b15801561184957600080fd5b505afa15801561185d573d6000803e3d6000fd5b505050506040513d602081101561187357600080fd5b505160408051636eb1769f60e11b8152336004820152306024820152905191925083916119049184916001600160a01b038c169163dd62ed3e916044808301926020929190829003018186803b1580156118cc57600080fd5b505afa1580156118e0573d6000803e3d6000fd5b505050506040513d60208110156118f657600080fd5b50519063ffffffff6139a916565b1015611957576040805162461bcd60e51b815260206004820152601760248201527f616c6c6f77616e6365206973206e6f7420656e6f756768000000000000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561199957600080fd5b505afa1580156119ad573d6000803e3d6000fd5b505050506040513d60208110156119c357600080fd5b505190508082108015906119dc57506402540be4008206155b611a175760405162461bcd60e51b81526004018080602001828103825260378152602001806159716037913960400191505060405180910390fd5b6000611a23868b613c03565b905063ffffffff8116611c22576001600160a01b038a166323b872dd33611004611a53898963ffffffff613a4316565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015611abb57600080fd5b505af1158015611acf573d6000803e3d6000fd5b505050506040513d6020811015611ae557600080fd5b5050602086015160408088015160a089015182516323bfccdb60e21b815260048101949094526001600160a01b03909116602484015260ff1660448301525161100491638eff336c91606480830192600092919082900301818387803b158015611b4e57600080fd5b505af1158015611b62573d6000803e3d6000fd5b50505050896001600160a01b03167f78e7dd9aefcdbf795c4936a66f7dc6d41bb56637b54f561a6bf7829dca3348a88a8860600151886040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b83811015611be1578181015183820152602001611bc9565b50505050905090810190601f168015611c0e5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2611cda565b896001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a1078a8360405180806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611c9e578181015183820152602001611c86565b50505050905090810190601f168015611ccb5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25b60008781526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055611d34615801565b5060408051808201825263ffffffff831681526020810189905290516110049085156108fc029086906000818181858888f19350505050158015611d7c573d6000803e3d6000fd5b5061200063f7a251d76001611d908461405d565b611da5886402540be40063ffffffff613bba16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611e03578181015183820152602001611deb565b50505050905090810190601f168015611e305780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611e5157600080fd5b505af1158015611e65573d6000803e3d6000fd5b5060019e9d5050505050505050505050505050565b61100581565b600080611e8c83613bfc565b9050611e966157c5565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c0830152611f5b576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b428160c001516001600160401b031610611fbc576040805162461bcd60e51b815260206004820152601b60248201527f62696e642072657175657374206973206e6f7420657870697265640000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015611ffe57600080fd5b505afa158015612012573d6000803e3d6000fd5b505050506040513d602081101561202857600080fd5b5051905080821080159061204157506402540be4008206155b61207c5760405162461bcd60e51b81526004018080602001828103825260378152602001806159716037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556120d6615801565b50604080518082018252600181526020810186905290516110049084156108fc029085906000818181858888f19350505050158015612119573d6000803e3d6000fd5b5061200063f7a251d7600161212d8461405d565b612142876402540be40063ffffffff613bba16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156121a0578181015183820152602001612188565b50505050905090810190601f1680156121cd5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156121ee57600080fd5b505af1158015612202573d6000803e3d6000fd5b5050505083604001516001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600160405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561228457818101518382015260200161226c565b50505050905090810190601f1680156122b15780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25060019695505050505050565b61100881565b6000806122de83613bfc565b90506122e86157c5565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c08301526123ad576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b80604001516001600160a01b0316856001600160a01b0316146124015760405162461bcd60e51b81526004018080602001828103825260458152602001806159a86045913960600191505060405180910390fd5b336001600160a01b0316856001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561244457600080fd5b505afa158015612458573d6000803e3d6000fd5b505050506040513d602081101561246e57600080fd5b50516001600160a01b0316146124cb576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206265703230206f776e65722063616e2072656a6563740000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561250d57600080fd5b505afa158015612521573d6000803e3d6000fd5b505050506040513d602081101561253757600080fd5b5051905080821080159061255057506402540be4008206155b61258b5760405162461bcd60e51b81526004018080602001828103825260378152602001806159716037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556125e5615801565b50604080518082018252600781526020810186905290516110049084156108fc029085906000818181858888f19350505050158015612628573d6000803e3d6000fd5b5061200063f7a251d7600161263c8461405d565b612651876402540be40063ffffffff613bba16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156126af578181015183820152602001612697565b50505050905090810190601f1680156126dc5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156126fd57600080fd5b505af1158015612711573d6000803e3d6000fd5b50505050876001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600760405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561278f578181015183820152602001612777565b50505050905090810190601f1680156127bc5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2506001979650505050505050565b600b81565b60045481565b33612000146128235760405162461bcd60e51b815260040180806020018281038252602f815260200180615a82602f913960400191505060405180910390fd5b60ff8316600414156128735761286e82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506140d392505050565b61292d565b60ff8316600514156128be5761286e82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061438092505050565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b6040805163bd46646160e01b81526001600160a01b0384166004820152905160009182916110049163bd466461916024808301926020929190829003018186803b15801561297f57600080fd5b505afa158015612993573d6000803e3d6000fd5b505050506040513d60208110156129a957600080fd5b5051146129ed576040805162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48189bdd5b99609a1b604482015290519081900360640190fd5b6001600160a01b03831660009081526002602052604090205460ff1615612a4c576040805162461bcd60e51b815260206004820152600e60248201526d6d6972726f722070656e64696e6760901b604482015290519081900360640190fd5b60006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015612a8957600080fd5b505afa158015612a9d573d6000803e3d6000fd5b505050506040513d6020811015612ab357600080fd5b505190506402540be4003406158015612ade5750600454612ada908263ffffffff6139a916565b3410155b612b195760405162461bcd60e51b815260040180806020018281038252604d8152602001806158be604d913960600191505060405180910390fd5b42607801836001600160401b031610158015612b435750426201518001836001600160401b031611155b612b7e5760405162461bcd60e51b81526004018080602001828103825260388152602001806159396038913960400191505060405180910390fd5b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612bb957600080fd5b505afa158015612bcd573d6000803e3d6000fd5b505050506040513d6020811015612be357600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038816916318160ddd916004808301926020929190829003018186803b158015612c2b57600080fd5b505afa158015612c3f573d6000803e3d6000fd5b505050506040513d6020811015612c5557600080fd5b50519050677ce66c50e2840000612c6f8260ff8516613a03565b1115612cbb576040805162461bcd60e51b8152602060048201526016602482015275746f6f206c6172676520746f74616c20737570706c7960501b604482015290519081900360640190fd5b6060866001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015612cf657600080fd5b505afa158015612d0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612d3357600080fd5b8101908080516040519392919084600160201b821115612d5257600080fd5b908301906020820185811115612d6757600080fd5b8251600160201b811182820188101715612d8057600080fd5b82525081516020918201929091019080838360005b83811015612dad578181015183820152602001612d95565b50505050905090810190601f168015612dda5780820380516001836020036101000a031916815260200191505b50604052505050905060608190506001815110158015612dfc57506020815111155b612e4d576040805162461bcd60e51b815260206004820152601d60248201527f6e616d65206c656e677468206d75737420626520696e205b312c33325d000000604482015290519081900360640190fd5b6060886001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015612e8857600080fd5b505afa158015612e9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612ec557600080fd5b8101908080516040519392919084600160201b821115612ee457600080fd5b908301906020820185811115612ef957600080fd5b8251600160201b811182820188101715612f1257600080fd5b82525081516020918201929091019080838360005b83811015612f3f578181015183820152602001612f27565b50505050905090810190601f168015612f6c5780820380516001836020036101000a031916815260200191505b5060405250508151919250829160031180159150612f8c57508051600810155b612fdd576040805162461bcd60e51b815260206004820152601e60248201527f73796d626f6c206c656e677468206d75737420626520696e205b332c385d0000604482015290519081900360640190fd5b60005b81518160ff1610156130d957606160f81b828260ff168151811061300057fe5b01602001516001600160f81b0319161080159061303e5750606160f81b828260ff168151811061302c57fe5b01602001516001600160f81b03191611155b806130965750604160f81b828260ff168151811061305857fe5b01602001516001600160f81b031916108015906130965750602d60f91b828260ff168151811061308457fe5b01602001516001600160f81b03191611155b6130d15760405162461bcd60e51b8152600401808060200182810382526024815260200180615adc6024913960400191505060405180910390fd5b600101612fe0565b50600454611004906108fc906130f690349063ffffffff613a4316565b6040518115909202916000818181858888f1935050505015801561311e573d6000803e3d6000fd5b506001600160a01b038a166000908152600260209081526040909120805460ff191660011790558481015190830151613155615818565b604051806101000160405280336001600160a01b031681526020018e6001600160a01b031681526020018481526020018381526020018981526020018a60ff1681526020016402540be400600454816131aa57fe5b0481526001600160401b038e16602090910152905061200063f7a251d760046131d284614543565b6131f06402540be40061130960045434613a4390919063ffffffff16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561324e578181015183820152602001613236565b50505050905090810190601f16801561327b5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561329c57600080fd5b505af11580156132b0573d6000803e3d6000fd5b5050505060019a505050505050505050505092915050565b600781565b600981565b677ce66c50e284000081565b61100781565b61100681565b60005460ff1681565b33611007146133335760405162461bcd60e51b815260040180806020018281038252602e815260200180615a54602e913960400191505060405180910390fd5b60208114613388576040805162461bcd60e51b815260206004820152601860248201527f65787065637465642076616c7565206c656e6774682033320000000000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f880181900481028201810190925286815293945060609392508691508590819084018382808284376000920191909152505050506020830151909150686d6972726f7246656560b81b81141561347d5760208201516402540be400810615613475576040805162461bcd60e51b815260206004820152601a60248201527f6d6972726f72466565206d757374206265204e202a2031653130000000000000604482015290519081900360640190fd5b600455613533565b6673796e6346656560c81b8114156134f65760208201516402540be4008106156134ee576040805162461bcd60e51b815260206004820152601860248201527f73796e63466565206d757374206265204e202a20316531300000000000000000604482015290519081900360640190fd5b600555613533565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b61100281565b336120001461360e5760405162461bcd60e51b815260040180806020018281038252602f815260200180615a82602f913960400191505060405180910390fd5b60ff8316600414156136595761286e82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506146b592505050565b60ff8316600514156128be5761286e82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506147d592505050565b600160208190526000918252604090912080549181015460028201546003830154600484015460059094015460ff9586169593946001600160a01b039093169391929181169061010090046001600160401b031687565b61100381565b60055481565b61100081565b61271081565b61100481565b60606137236157c5565b600061372e846148da565b9150915080613784576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b815160ff16613837576020828101805160009081526001928390526040908190208551815460ff1990811660ff928316178355935194820194909455908501516002820180546001600160a01b0319166001600160a01b03909216919091179055606085015160038201556080850151600482015560a08501516005909101805460c08701519316919093161768ffffffffffffffff0019166101006001600160401b039092169190910217905561398e565b815160ff16600114156139415760006110046001600160a01b03166359b9278984602001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561389057600080fd5b505afa1580156138a4573d6000803e3d6000fd5b505050506040513d60208110156138ba57600080fd5b505190506001600160a01b0381161561393b5760208301516040805163b99328c560e01b815260048101929092526001600160a01b0383166024830152516110049163b99328c591604480830192600092919082900301818387803b15801561392257600080fd5b505af1158015613936573d6000803e3d6000fd5b505050505b5061398e565b6040805162461bcd60e51b815260206004820152601960248201527f756e7265636f676e697a65642062696e64207061636b61676500000000000000604482015290519081900360640190fd5b60408051600080825260208201909252905b50949350505050565b600082820183811015610e95576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006008821115613a2c57613a25836007198401600a0a63ffffffff613bba16565b90506113e3565b610e95836008849003600a0a63ffffffff614a2b16565b6000610e9583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614a84565b60408051600680825260e08201909252606091829190816020015b6060815260200190600190039081613aa05750508351909150613acb906001600160a01b0316614b1b565b81600081518110613ad857fe5b6020026020010181905250613af983602001516001600160a01b0316614b1b565b81600181518110613b0657fe5b6020026020010181905250613b21836040015160001c614b3e565b81600281518110613b2e57fe5b6020026020010181905250613b468360600151614b3e565b81600381518110613b5357fe5b6020026020010181905250613b6b8360800151614b3e565b81600481518110613b7857fe5b6020026020010181905250613b998360a001516001600160401b0316614b3e565b81600581518110613ba657fe5b6020026020010181905250610e9581614b51565b6000610e9583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614bdb565b6020015190565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3f57600080fd5b505afa158015613c53573d6000803e3d6000fd5b505050506040513d6020811015613c6957600080fd5b5051604080516395d89b4160e01b8152905160ff90921692506060916001600160a01b038616916395d89b41916004808301926000929190829003018186803b158015613cb557600080fd5b505afa158015613cc9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613cf257600080fd5b8101908080516040519392919084600160201b821115613d1157600080fd5b908301906020820185811115613d2657600080fd5b8251600160201b811182820188101715613d3f57600080fd5b82525081516020918201929091019080838360005b83811015613d6c578181015183820152602001613d54565b50505050905090810190601f168015613d995780820380516001836020036101000a031916815260200191505b5060408181526370a0823160e01b82526110046004830152519495506000946001600160a01b038a1694506370a08231935060248083019350602092829003018186803b158015613de957600080fd5b505afa158015613dfd573d6000803e3d6000fd5b505050506040513d6020811015613e1357600080fd5b505160808701516060880151919250600091613e349163ffffffff613a4316565b9050428760c001516001600160401b03161015613e595750600193506113e392505050565b613e67838860200151614c40565b613e795750600293506113e392505050565b80821115613e8f5750600393506113e392505050565b866060015187604001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613ed157600080fd5b505afa158015613ee5573d6000803e3d6000fd5b505050506040513d6020811015613efb57600080fd5b505114613f105750600493506113e392505050565b8660a0015160ff168414613f2c5750600593506113e392505050565b602080880151604080516359b9278960e01b8152600481019290925251600092611004926359b927899260248083019392829003018186803b158015613f7157600080fd5b505afa158015613f85573d6000803e3d6000fd5b505050506040513d6020811015613f9b57600080fd5b50516001600160a01b031614158061403d57506000801b6110046001600160a01b031663bd46646189604001516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561400e57600080fd5b505afa158015614022573d6000803e3d6000fd5b505050506040513d602081101561403857600080fd5b505114155b156140505750600693506113e392505050565b5060009695505050505050565b6040805160028082526060828101909352829190816020015b6060815260200190600190039081614076575050835190915061409e9063ffffffff16614b3e565b816000815181106140ab57fe5b60200260200101819052506140c6836020015160001c614b3e565b81600181518110613ba657fe5b6140db615790565b60006140e683614d28565b9150915080614133576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b6020808301516001600160a01b03166000908152600290915260409020805460ff1916905560a082015160ff166142945760808201516040516110049180156108fc02916000818181858888f19350505050158015614196573d6000803e3d6000fd5b506110046001600160a01b0316638eff336c8360600151846020015185604001516040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b031681526020018260ff1681526020019350505050600060405180830381600087803b15801561421057600080fd5b505af1158015614224573d6000803e3d6000fd5b50505050602082810180516001600160a01b03908116600090815260038452604090819020805460ff1916600117905591516060860151835190815292519116927f41787d7db08fc5907641ee8343379f28215727eb123d4b462099afab4300b036928290030190a2505061437d565b81602001516001600160a01b03167fefe400ad0042ebf81a245de9ae669616105e0ca9fc946352c085da0c2bc524e58360a00151604051808260ff1660ff16815260200191505060405180910390a2815160808301516040516000926001600160a01b0316916127109184818181858888f193505050503d8060008114614337576040519150601f19603f3d011682016040523d82523d6000602084013e61433c565b606091505b50509050806143795760808301516040516110029180156108fc02916000818181858888f19350505050158015614377573d6000803e3d6000fd5b505b5050505b50565b61438861585c565b600061439383614e35565b91509150806143e0576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b606082015160ff166144605760408083015190516110049180156108fc02916000818181858888f1935050505015801561441e573d6000803e3d6000fd5b5081602001516001600160a01b03167fbb7d3a9a559080d8281b0e4fb39dacbe2fdcafd5ef765e9a6ed871c9167dc60f60405160405180910390a2505061437d565b81602001516001600160a01b03167ff1e25fa536da84053644fd788b1d6a27ea6edd1f3af80c7d36ca253c4c82c9c38360600151604051808260ff1660ff16815260200191505060405180910390a2815160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d8060008114614503576040519150601f19603f3d011682016040523d82523d6000602084013e614508565b606091505b50509050806143795760408084015190516110029180156108fc02916000818181858888f19350505050158015614377573d6000803e3d6000fd5b6040805160088082526101208201909252606091829190816020015b606081526020019060019003908161455f575050835190915061458a906001600160a01b0316614b1b565b8160008151811061459757fe5b60200260200101819052506145b883602001516001600160a01b0316614b1b565b816001815181106145c557fe5b60200260200101819052506145e0836040015160001c614b3e565b816002815181106145ed57fe5b6020026020010181905250614608836060015160001c614b3e565b8160038151811061461557fe5b602002602001018190525061462d8360800151614b3e565b8160048151811061463a57fe5b60200260200101819052506146558360a0015160ff16614b3e565b8160058151811061466257fe5b602002602001018190525061467a8360c00151614b3e565b8160068151811061468757fe5b60200260200101819052506146a88360e001516001600160401b0316614b3e565b81600781518110613ba657fe5b6146bd615818565b60006146c883614f01565b9150915080614715576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b6020808301516001600160a01b03908116600090815260029092526040808320805460ff19169055845160c08601519151921691612710916402540be400029084818181858888f193505050503d806000811461478e576040519150601f19603f3d011682016040523d82523d6000602084013e614793565b606091505b50509050806143795760c0830151604051611002916402540be4000280156108fc02916000818181858888f19350505050158015614377573d6000803e3d6000fd5b6147dd615790565b60006147e883615052565b9150915080614835576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b815160808301516040516000926001600160a01b031691612710916402540be4009091029084818181858888f193505050503d8060008114614893576040519150601f19603f3d011682016040523d82523d6000602084013e614898565b606091505b5050905080614379576080830151604051611002916402540be4000280156108fc02916000818181858888f19350505050158015614377573d6000803e3d6000fd5b6148e26157c5565b60006148ec6157c5565b6148f4615883565b61490561490086615162565b615187565b90506000805b614914836151d1565b15614a1e57806149395761492f61492a846151f2565b615240565b60ff168452614a16565b80600114156149585761494e61492a846151f2565b6020850152614a16565b80600214156149855761497261496d846151f2565b6152f5565b6001600160a01b03166040850152614a16565b80600314156149a45761499a61492a846151f2565b6060850152614a16565b80600414156149c3576149b961492a846151f2565b6080850152614a16565b80600514156149e5576149d861492a846151f2565b60ff1660a0850152614a16565b8060061415614a11576149fa61492a846151f2565b6001600160401b031660c085015260019150614a16565b614a1e565b60010161490b565b5091935090915050915091565b600082614a3a575060006113e3565b82820282848281614a4757fe5b0414610e955760405162461bcd60e51b81526004018080602001828103825260218152602001806159ed6021913960400191505060405180910390fd5b60008184841115614b135760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614ad8578181015183820152602001614ac0565b50505050905090810190601f168015614b055780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60408051600560a21b8318601482015260348101909152606090610e958161530f565b60606113e3614b4c83615365565b61530f565b6060815160001415614b72575060408051600081526020810190915261157c565b606082600081518110614b8157fe5b602002602001015190506000600190505b8351811015614bc257614bb882858381518110614bab57fe5b602002602001015161544b565b9150600101614b92565b50610e95614bd5825160c060ff166154c8565b8261544b565b60008183614c2a5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614ad8578181015183820152602001614ac0565b506000838581614c3657fe5b0495945050505050565b8151600090839060081080614c56575080516003115b15614c655760009150506113e3565b60408051602080825281830190925260609160208201818036833701905050905083602082015280825181518110614c9957fe5b6020910101516001600160f81b031916602d60f81b14614cbe576000925050506113e3565b600160005b8351811015614d1e57828181518110614cd857fe5b602001015160f81c60f81b6001600160f81b031916848281518110614cf957fe5b01602001516001600160f81b03191614614d165760009150614d1e565b600101614cc3565b5095945050505050565b614d30615790565b6000614d3a615790565b614d42615883565b614d4e61490086615162565b90506000805b614d5d836151d1565b15614a1e5780614d8357614d7361496d846151f2565b6001600160a01b03168452614e2d565b8060011415614dab57614d9861496d846151f2565b6001600160a01b03166020850152614e2d565b8060021415614dcd57614dc061492a846151f2565b60ff166040850152614e2d565b8060031415614dec57614de261492a846151f2565b6060850152614e2d565b8060041415614e0b57614e0161492a846151f2565b6080850152614e2d565b8060051415614a1157614e2061492a846151f2565b60ff1660a0850152600191505b600101614d54565b614e3d61585c565b6000614e4761585c565b614e4f615883565b614e5b61490086615162565b90506000805b614e6a836151d1565b15614a1e5780614e9057614e8061496d846151f2565b6001600160a01b03168452614ef9565b8060011415614eb857614ea561496d846151f2565b6001600160a01b03166020850152614ef9565b8060021415614ed757614ecd61492a846151f2565b6040850152614ef9565b8060031415614a1157614eec61492a846151f2565b60ff166060850152600191505b600101614e61565b614f09615818565b6000614f13615818565b614f1b615883565b614f2761490086615162565b90506000805b614f36836151d1565b15614a1e5780614f5c57614f4c61496d846151f2565b6001600160a01b0316845261504a565b8060011415614f8457614f7161496d846151f2565b6001600160a01b0316602085015261504a565b8060021415614fa357614f9961492a846151f2565b604085015261504a565b8060031415614fc257614fb861492a846151f2565b606085015261504a565b8060041415614fe157614fd761492a846151f2565b608085015261504a565b806005141561500357614ff661492a846151f2565b60ff1660a085015261504a565b80600614156150225761501861492a846151f2565b60c085015261504a565b8060071415614a115761503761492a846151f2565b6001600160401b031660e0850152600191505b600101614f2d565b61505a615790565b6000615064615790565b61506c615883565b61507861490086615162565b90506000805b615087836151d1565b15614a1e57806150ad5761509d61496d846151f2565b6001600160a01b0316845261515a565b80600114156150d5576150c261496d846151f2565b6001600160a01b0316602085015261515a565b80600214156150f4576150ea61492a846151f2565b604085015261515a565b80600314156151135761510961492a846151f2565b606085015261515a565b80600414156151325761512861492a846151f2565b608085015261515a565b8060051415614a115761514761492a846151f2565b6001600160401b031660a0850152600191505b60010161507e565b61516a6158a3565b506040805180820190915281518152602082810190820152919050565b61518f615883565b615198826155c0565b6151a157600080fd5b60006151b083602001516155fa565b60208085015160408051808201909152868152920190820152915050919050565b60006151db6158a3565b505080518051602091820151919092015191011190565b6151fa6158a3565b615203826151d1565b61520c57600080fd5b6020820151600061521c8261565d565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061525557508151602110155b61525e57600080fd5b600061526d83602001516155fa565b905080836000015110156152c8576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b8251602080850151830180519284900392918310156139a057506020919091036101000a90049392505050565b805160009060151461530657600080fd5b6113e382615240565b6060815160011480156153415750607f60f81b8260008151811061532f57fe5b01602001516001600160f81b03191611155b1561534d57508061157c565b6113e361535f8351608060ff166154c8565b8361544b565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166153a9575060186153cd565b6fffffffffffffffffffffffffffffffff1984166153c9575060106153cd565b5060005b6020811015615403578181815181106153e257fe5b01602001516001600160f81b031916156153fb57615403565b6001016153cd565b60008160200390506060816040519080825280601f01601f191660200182016040528015615438576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561547c578051835260209283019201615464565b50855184518101855292509050808201602086015b818310156154a9578051835260209283019201615491565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310615518576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b604080516001808252818301909252606091602082018180368337019050509050603784116155725782840160f81b8160008151811061555457fe5b60200101906001600160f81b031916908160001a90535090506113e3565b606061557d85615365565b90508381510160370160f81b8260008151811061559657fe5b60200101906001600160f81b031916908160001a9053506155b7828261544b565b95945050505050565b80516000906155d15750600061157c565b6020820151805160001a9060c08210156155f05760009250505061157c565b5060019392505050565b8051600090811a608081101561561457600091505061157c565b60b881108061562f575060c0811080159061562f575060f881105b1561563e57600191505061157c565b60c08110156156525760b51901905061157c565b60f51901905061157c565b80516000908190811a60808110156156785760019150615789565b60b881101561568d57607e1981019150615789565b60c081101561570757600060b78203600186019550806020036101000a865104915060018101820193505080831015615701576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50615789565b60f881101561571c5760be1981019150615789565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615787576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b60405180604001604052806158966158a3565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6d73672e76616c7565206d757374206265204e202a203165313020616e642067726561746572207468616e2073756d206f66206d696e6952656c617946656520616e64206d6972726f724665656f6e6c79206265703230206f776e65722063616e20617070726f766520746869732062696e64207265717565737465787069726554696d65206d7573742062652074776f206d696e75746573206c6174657220616e64206f6e6520646179206561726c69657272656c6179466565206d757374206265204e202a203165313020616e642067726561746572207468616e206d696e6952656c6179466565636f6e74616374206164647265737320646f65736e277420657175616c20746f2074686520636f6e7472616374206164647265737320696e2062696e642072657175657374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776d73672e76616c7565206d757374206265204e202a203165313020616e64206e6f206c6573732073756d206f66206d696e6952656c617946656520616e642073796e63466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e747261637474686520626570323020746f6b656e20697320696e206d6972726f722070656e64696e672073746174757373796d626f6c206d757374206e6f7420636f6e7461696e206e6f6e2d616c706861626574a26469706673582212201165eef2c3a9b93126944a081b2726c7c09babc88a4afff1c0ba3b8ec0bcb9ec64736f6c63430006040033", + }, + }, + } + + mirrorUpgrade[rialtoNet] = &Upgrade{ + UpgradeName: "mirror", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(TokenManagerContract), + CommitUrl: "https://github.com/binance-chain/bsc-genesis-contract/commit/586e1ee3ac0eb1f4f4ee0143e65a209d9e3f849f", + Code: "6080604052600436106103975760003560e01c80637942fd05116101dc578063b795031711610102578063dc927faf116100a0578063fa9e91591161006f578063fa9e915914610d4e578063fc3e5908146105dd578063fd6a687914610d63578063fe3a2af51461056257610397565b8063dc927faf14610d0f578063e605bca014610d24578063e80561fa14610562578063f9a2bbc714610d3957610397565b8063c8509d81116100dc578063c8509d8114610c0a578063c8e704a4146105dd578063d117a11014610c8f578063d9e6dae91461072757610397565b8063b795031714610766578063bd32d3f9146104ef578063c81b166214610bf557610397565b806396713da91161017a578063a78abc1611610149578063a78abc1614610b00578063ab51bb9614610b15578063ab67a48514610766578063ac43175114610b2a57610397565b806396713da914610aac5780639a854bbd14610ac15780639dc0926214610ad6578063a1a11bf514610aeb57610397565b8063831d65d1116101b6578063831d65d1146109db578063859180fb1461071257806394553a4e14610a6257806395b9ad2614610a9757610397565b80637942fd05146109b15780637d078e13146105045780637ec816dd146109c657610397565b8063493279b1116102c1578063613684751161025f57806370fd5bad1161022e57806370fd5bad1461076657806372c4e0861461084457806375d47a0a146108e857806377d9dae8146108fd57610397565b8063613684751461072757806366dea52a146105dd5780636b3f13071461077b5780636e47b4821461082f57610397565b80634bf6c8821161029b5780634bf6c8821461072757806351e806721461073c5780635d499b1b146107515780635f558f861461076657610397565b8063493279b1146106e65780634a688818146105625780634bc81c001461071257610397565b80632d89ac3211610339578063401809f911610308578063401809f9146105dd57806343756e5c146105f2578063445fcefe14610623578063487c88ac1461050457610397565b80632d89ac32146105045780632e02d7761461057757806337e6ecda146105aa5780633dffc3871461050457610397565b80631f91600b116103755780631f91600b146104ef57806323996b531461050457806325c751b71461051957806328ae48621461056257610397565b80630bee7a671461039c5780630f212b1b146103ca5780631182b875146103f5575b600080fd5b3480156103a857600080fd5b506103b1610d78565b6040805163ffffffff9092168252519081900360200190f35b3480156103d657600080fd5b506103df610d7d565b6040805160ff9092168252519081900360200190f35b34801561040157600080fd5b5061047a6004803603604081101561041857600080fd5b60ff8235169190810190604081016020820135600160201b81111561043c57600080fd5b82018360208201111561044e57600080fd5b803590602001918460018302840111600160201b8311171561046f57600080fd5b509092509050610d82565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104b457818101518382015260200161049c565b50505050905090810190601f1680156104e15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104fb57600080fd5b506103df610e9c565b34801561051057600080fd5b506103df610ea1565b61054e6004803603604081101561052f57600080fd5b5080356001600160a01b031690602001356001600160401b0316610ea6565b604080519115158252519081900360200190f35b34801561056e57600080fd5b506103df6113e9565b34801561058357600080fd5b5061054e6004803603602081101561059a57600080fd5b50356001600160a01b03166113ee565b3480156105b657600080fd5b5061054e600480360360208110156105cd57600080fd5b50356001600160a01b0316611403565b3480156105e957600080fd5b506103df611418565b3480156105fe57600080fd5b5061060761141d565b604080516001600160a01b039092168252519081900360200190f35b34801561062f57600080fd5b506106d46004803603602081101561064657600080fd5b810190602081018135600160201b81111561066057600080fd5b82018360208201111561067257600080fd5b803590602001918460018302840111600160201b8311171561069357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611423945050505050565b60408051918252519081900360200190f35b3480156106f257600080fd5b506106fb611581565b6040805161ffff9092168252519081900360200190f35b34801561071e57600080fd5b506103df611586565b34801561073357600080fd5b506103df61158b565b34801561074857600080fd5b50610607611590565b34801561075d57600080fd5b506106d4611596565b34801561077257600080fd5b506103df61159f565b61054e6004803603604081101561079157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156107bb57600080fd5b8201836020820111156107cd57600080fd5b803590602001918460018302840111600160201b831117156107ee57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506115a4945050505050565b34801561083b57600080fd5b50610607611e7a565b61054e6004803603602081101561085a57600080fd5b810190602081018135600160201b81111561087457600080fd5b82018360208201111561088657600080fd5b803590602001918460018302840111600160201b831117156108a757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e80945050505050565b3480156108f457600080fd5b506106076122cc565b61054e6004803603604081101561091357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561093d57600080fd5b82018360208201111561094f57600080fd5b803590602001918460018302840111600160201b8311171561097057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506122d2945050505050565b3480156109bd57600080fd5b506103df6127d8565b3480156109d257600080fd5b506106d46127dd565b3480156109e757600080fd5b50610a60600480360360408110156109fe57600080fd5b60ff8235169190810190604081016020820135600160201b811115610a2257600080fd5b820183602082011115610a3457600080fd5b803590602001918460018302840111600160201b83111715610a5557600080fd5b5090925090506127e3565b005b61054e60048036036040811015610a7857600080fd5b5080356001600160a01b031690602001356001600160401b0316612932565b348015610aa357600080fd5b506103df6132c8565b348015610ab857600080fd5b506103df6132cd565b348015610acd57600080fd5b506106d46132d2565b348015610ae257600080fd5b506106076132de565b348015610af757600080fd5b506106076132e4565b348015610b0c57600080fd5b5061054e6132ea565b348015610b2157600080fd5b506103b16113e9565b348015610b3657600080fd5b50610a6060048036036040811015610b4d57600080fd5b810190602081018135600160201b811115610b6757600080fd5b820183602082011115610b7957600080fd5b803590602001918460018302840111600160201b83111715610b9a57600080fd5b919390929091602081019035600160201b811115610bb757600080fd5b820183602082011115610bc957600080fd5b803590602001918460018302840111600160201b83111715610bea57600080fd5b5090925090506132f3565b348015610c0157600080fd5b506106076135c8565b348015610c1657600080fd5b50610a6060048036036040811015610c2d57600080fd5b60ff8235169190810190604081016020820135600160201b811115610c5157600080fd5b820183602082011115610c6357600080fd5b803590602001918460018302840111600160201b83111715610c8457600080fd5b5090925090506135ce565b348015610c9b57600080fd5b50610cb960048036036020811015610cb257600080fd5b50356136a4565b6040805160ff988916815260208101979097526001600160a01b03909516868601526060860193909352608085019190915290931660a08301526001600160401b0390921660c082015290519081900360e00190f35b348015610d1b57600080fd5b506106076136fb565b348015610d3057600080fd5b506106d4613701565b348015610d4557600080fd5b50610607613707565b348015610d5a57600080fd5b506106d461370d565b348015610d6f57600080fd5b50610607613713565b606481565b600681565b60603361200014610dc45760405162461bcd60e51b815260040180806020018281038252602f815260200180615a82602f913960400191505060405180910390fd5b60ff841660011415610e1657610e0f83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061371992505050565b9050610e95565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605848484604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1506040805160008152602081019091525b9392505050565b600481565b600181565b6040805163bd46646160e01b81526001600160a01b0384166004820152905160009182916110049163bd466461916024808301926020929190829003018186803b158015610ef357600080fd5b505afa158015610f07573d6000803e3d6000fd5b505050506040513d6020811015610f1d57600080fd5b5051905080610f5f576040805162461bcd60e51b81526020600482015260096024820152681b9bdd08189bdd5b9960ba1b604482015290519081900360640190fd5b6001600160a01b03841660009081526003602052604090205460ff16610fc2576040805162461bcd60e51b81526020600482015260136024820152723737ba103137bab73210313c9036b4b93937b960691b604482015290519081900360640190fd5b60006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015610fff57600080fd5b505afa158015611013573d6000803e3d6000fd5b505050506040513d602081101561102957600080fd5b505190506402540be40034061580156110545750600554611050908263ffffffff6139a916565b3410155b61108f5760405162461bcd60e51b8152600401808060200182810382526046815260200180615a0e6046913960600191505060405180910390fd5b42607801846001600160401b0316101580156110b95750426201518001846001600160401b031611155b6110f45760405162461bcd60e51b81526004018080602001828103825260388152602001806159396038913960400191505060405180910390fd5b6000856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112f57600080fd5b505afa158015611143573d6000803e3d6000fd5b505050506040513d602081101561115957600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0389169163313ce567916004808301926020929190829003018186803b1580156111a157600080fd5b505afa1580156111b5573d6000803e3d6000fd5b505050506040513d60208110156111cb57600080fd5b50519050677ce66c50e28400006111e58360ff8416613a03565b1115611231576040805162461bcd60e51b8152602060048201526016602482015275746f6f206c6172676520746f74616c20737570706c7960501b604482015290519081900360640190fd5b600554611004906108fc9061124d90349063ffffffff613a4316565b6040518115909202916000818181858888f19350505050158015611275573d6000803e3d6000fd5b5061127e615790565b6040518060c00160405280336001600160a01b03168152602001896001600160a01b031681526020018681526020018481526020016402540be400600554816112c357fe5b0481526001600160401b038916602090910152905061200063f7a251d760056112eb84613a85565b6113156402540be40061130960055434613a4390919063ffffffff16565b9063ffffffff613bba16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561137357818101518382015260200161135b565b50505050905090810190601f1680156113a05780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156113c157600080fd5b505af11580156113d5573d6000803e3d6000fd5b505050506001955050505050505b92915050565b600081565b60036020526000908152604090205460ff1681565b60026020526000908152604090205460ff1681565b600381565b61100181565b60208101516000906114336157c5565b50600081815260016020818152604092839020835160e081018552815460ff9081168252938201549281019290925260028101546001600160a01b031693820184905260038101546060830152600481015460808301526005015491821660a08201526101009091046001600160401b031660c0820152906114ba5760009250505061157c565b600081604001516001600160a01b03166370a082316110046040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561151857600080fd5b505afa15801561152c573d6000803e3d6000fd5b505050506040513d602081101561154257600080fd5b5051608083015160608401519192506000916115639163ffffffff613a4316565b9050611575818363ffffffff613a4316565b9450505050505b919050565b606081565b600581565b600881565b61200081565b6402540be40081565b600281565b6001600160a01b03821660009081526002602052604081205460ff16156115fc5760405162461bcd60e51b815260040180806020018281038252602b815260200180615ab1602b913960400191505060405180910390fd5b600061160783613bfc565b90506116116157c5565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c08301526116d6576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b60006116f382608001518360600151613a4390919063ffffffff16565b905081604001516001600160a01b0316866001600160a01b0316146117495760405162461bcd60e51b81526004018080602001828103825260458152602001806159a86045913960600191505060405180910390fd5b336001600160a01b0316866001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561178c57600080fd5b505afa1580156117a0573d6000803e3d6000fd5b505050506040513d60208110156117b657600080fd5b50516001600160a01b0316146117fd5760405162461bcd60e51b815260040180806020018281038252602e81526020018061590b602e913960400191505060405180910390fd5b604080516370a0823160e01b8152611004600482015290516000916001600160a01b038916916370a0823191602480820192602092909190829003018186803b15801561184957600080fd5b505afa15801561185d573d6000803e3d6000fd5b505050506040513d602081101561187357600080fd5b505160408051636eb1769f60e11b8152336004820152306024820152905191925083916119049184916001600160a01b038c169163dd62ed3e916044808301926020929190829003018186803b1580156118cc57600080fd5b505afa1580156118e0573d6000803e3d6000fd5b505050506040513d60208110156118f657600080fd5b50519063ffffffff6139a916565b1015611957576040805162461bcd60e51b815260206004820152601760248201527f616c6c6f77616e6365206973206e6f7420656e6f756768000000000000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561199957600080fd5b505afa1580156119ad573d6000803e3d6000fd5b505050506040513d60208110156119c357600080fd5b505190508082108015906119dc57506402540be4008206155b611a175760405162461bcd60e51b81526004018080602001828103825260378152602001806159716037913960400191505060405180910390fd5b6000611a23868b613c03565b905063ffffffff8116611c22576001600160a01b038a166323b872dd33611004611a53898963ffffffff613a4316565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015611abb57600080fd5b505af1158015611acf573d6000803e3d6000fd5b505050506040513d6020811015611ae557600080fd5b5050602086015160408088015160a089015182516323bfccdb60e21b815260048101949094526001600160a01b03909116602484015260ff1660448301525161100491638eff336c91606480830192600092919082900301818387803b158015611b4e57600080fd5b505af1158015611b62573d6000803e3d6000fd5b50505050896001600160a01b03167f78e7dd9aefcdbf795c4936a66f7dc6d41bb56637b54f561a6bf7829dca3348a88a8860600151886040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b83811015611be1578181015183820152602001611bc9565b50505050905090810190601f168015611c0e5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2611cda565b896001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a1078a8360405180806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611c9e578181015183820152602001611c86565b50505050905090810190601f168015611ccb5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25b60008781526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055611d34615801565b5060408051808201825263ffffffff831681526020810189905290516110049085156108fc029086906000818181858888f19350505050158015611d7c573d6000803e3d6000fd5b5061200063f7a251d76001611d908461405d565b611da5886402540be40063ffffffff613bba16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611e03578181015183820152602001611deb565b50505050905090810190601f168015611e305780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611e5157600080fd5b505af1158015611e65573d6000803e3d6000fd5b5060019e9d5050505050505050505050505050565b61100581565b600080611e8c83613bfc565b9050611e966157c5565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c0830152611f5b576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b428160c001516001600160401b031610611fbc576040805162461bcd60e51b815260206004820152601b60248201527f62696e642072657175657374206973206e6f7420657870697265640000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015611ffe57600080fd5b505afa158015612012573d6000803e3d6000fd5b505050506040513d602081101561202857600080fd5b5051905080821080159061204157506402540be4008206155b61207c5760405162461bcd60e51b81526004018080602001828103825260378152602001806159716037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556120d6615801565b50604080518082018252600181526020810186905290516110049084156108fc029085906000818181858888f19350505050158015612119573d6000803e3d6000fd5b5061200063f7a251d7600161212d8461405d565b612142876402540be40063ffffffff613bba16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156121a0578181015183820152602001612188565b50505050905090810190601f1680156121cd5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156121ee57600080fd5b505af1158015612202573d6000803e3d6000fd5b5050505083604001516001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600160405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561228457818101518382015260200161226c565b50505050905090810190601f1680156122b15780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25060019695505050505050565b61100881565b6000806122de83613bfc565b90506122e86157c5565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c08301526123ad576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b80604001516001600160a01b0316856001600160a01b0316146124015760405162461bcd60e51b81526004018080602001828103825260458152602001806159a86045913960600191505060405180910390fd5b336001600160a01b0316856001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561244457600080fd5b505afa158015612458573d6000803e3d6000fd5b505050506040513d602081101561246e57600080fd5b50516001600160a01b0316146124cb576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206265703230206f776e65722063616e2072656a6563740000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561250d57600080fd5b505afa158015612521573d6000803e3d6000fd5b505050506040513d602081101561253757600080fd5b5051905080821080159061255057506402540be4008206155b61258b5760405162461bcd60e51b81526004018080602001828103825260378152602001806159716037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff191690556125e5615801565b50604080518082018252600781526020810186905290516110049084156108fc029085906000818181858888f19350505050158015612628573d6000803e3d6000fd5b5061200063f7a251d7600161263c8461405d565b612651876402540be40063ffffffff613bba16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156126af578181015183820152602001612697565b50505050905090810190601f1680156126dc5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156126fd57600080fd5b505af1158015612711573d6000803e3d6000fd5b50505050876001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600760405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561278f578181015183820152602001612777565b50505050905090810190601f1680156127bc5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2506001979650505050505050565b600b81565b60045481565b33612000146128235760405162461bcd60e51b815260040180806020018281038252602f815260200180615a82602f913960400191505060405180910390fd5b60ff8316600414156128735761286e82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506140d392505050565b61292d565b60ff8316600514156128be5761286e82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061438092505050565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b6040805163bd46646160e01b81526001600160a01b0384166004820152905160009182916110049163bd466461916024808301926020929190829003018186803b15801561297f57600080fd5b505afa158015612993573d6000803e3d6000fd5b505050506040513d60208110156129a957600080fd5b5051146129ed576040805162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48189bdd5b99609a1b604482015290519081900360640190fd5b6001600160a01b03831660009081526002602052604090205460ff1615612a4c576040805162461bcd60e51b815260206004820152600e60248201526d6d6972726f722070656e64696e6760901b604482015290519081900360640190fd5b60006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015612a8957600080fd5b505afa158015612a9d573d6000803e3d6000fd5b505050506040513d6020811015612ab357600080fd5b505190506402540be4003406158015612ade5750600454612ada908263ffffffff6139a916565b3410155b612b195760405162461bcd60e51b815260040180806020018281038252604d8152602001806158be604d913960600191505060405180910390fd5b42607801836001600160401b031610158015612b435750426201518001836001600160401b031611155b612b7e5760405162461bcd60e51b81526004018080602001828103825260388152602001806159396038913960400191505060405180910390fd5b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612bb957600080fd5b505afa158015612bcd573d6000803e3d6000fd5b505050506040513d6020811015612be357600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038816916318160ddd916004808301926020929190829003018186803b158015612c2b57600080fd5b505afa158015612c3f573d6000803e3d6000fd5b505050506040513d6020811015612c5557600080fd5b50519050677ce66c50e2840000612c6f8260ff8516613a03565b1115612cbb576040805162461bcd60e51b8152602060048201526016602482015275746f6f206c6172676520746f74616c20737570706c7960501b604482015290519081900360640190fd5b6060866001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015612cf657600080fd5b505afa158015612d0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612d3357600080fd5b8101908080516040519392919084600160201b821115612d5257600080fd5b908301906020820185811115612d6757600080fd5b8251600160201b811182820188101715612d8057600080fd5b82525081516020918201929091019080838360005b83811015612dad578181015183820152602001612d95565b50505050905090810190601f168015612dda5780820380516001836020036101000a031916815260200191505b50604052505050905060608190506001815110158015612dfc57506020815111155b612e4d576040805162461bcd60e51b815260206004820152601d60248201527f6e616d65206c656e677468206d75737420626520696e205b312c33325d000000604482015290519081900360640190fd5b6060886001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015612e8857600080fd5b505afa158015612e9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612ec557600080fd5b8101908080516040519392919084600160201b821115612ee457600080fd5b908301906020820185811115612ef957600080fd5b8251600160201b811182820188101715612f1257600080fd5b82525081516020918201929091019080838360005b83811015612f3f578181015183820152602001612f27565b50505050905090810190601f168015612f6c5780820380516001836020036101000a031916815260200191505b5060405250508151919250829160031180159150612f8c57508051600810155b612fdd576040805162461bcd60e51b815260206004820152601e60248201527f73796d626f6c206c656e677468206d75737420626520696e205b332c385d0000604482015290519081900360640190fd5b60005b81518160ff1610156130d957606160f81b828260ff168151811061300057fe5b01602001516001600160f81b0319161080159061303e5750606160f81b828260ff168151811061302c57fe5b01602001516001600160f81b03191611155b806130965750604160f81b828260ff168151811061305857fe5b01602001516001600160f81b031916108015906130965750602d60f91b828260ff168151811061308457fe5b01602001516001600160f81b03191611155b6130d15760405162461bcd60e51b8152600401808060200182810382526024815260200180615adc6024913960400191505060405180910390fd5b600101612fe0565b50600454611004906108fc906130f690349063ffffffff613a4316565b6040518115909202916000818181858888f1935050505015801561311e573d6000803e3d6000fd5b506001600160a01b038a166000908152600260209081526040909120805460ff191660011790558481015190830151613155615818565b604051806101000160405280336001600160a01b031681526020018e6001600160a01b031681526020018481526020018381526020018981526020018a60ff1681526020016402540be400600454816131aa57fe5b0481526001600160401b038e16602090910152905061200063f7a251d760046131d284614543565b6131f06402540be40061130960045434613a4390919063ffffffff16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561324e578181015183820152602001613236565b50505050905090810190601f16801561327b5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561329c57600080fd5b505af11580156132b0573d6000803e3d6000fd5b5050505060019a505050505050505050505092915050565b600781565b600981565b677ce66c50e284000081565b61100781565b61100681565b60005460ff1681565b33611007146133335760405162461bcd60e51b815260040180806020018281038252602e815260200180615a54602e913960400191505060405180910390fd5b60208114613388576040805162461bcd60e51b815260206004820152601860248201527f65787065637465642076616c7565206c656e6774682033320000000000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f880181900481028201810190925286815293945060609392508691508590819084018382808284376000920191909152505050506020830151909150686d6972726f7246656560b81b81141561347d5760208201516402540be400810615613475576040805162461bcd60e51b815260206004820152601a60248201527f6d6972726f72466565206d757374206265204e202a2031653130000000000000604482015290519081900360640190fd5b600455613533565b6673796e6346656560c81b8114156134f65760208201516402540be4008106156134ee576040805162461bcd60e51b815260206004820152601860248201527f73796e63466565206d757374206265204e202a20316531300000000000000000604482015290519081900360640190fd5b600555613533565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b61100281565b336120001461360e5760405162461bcd60e51b815260040180806020018281038252602f815260200180615a82602f913960400191505060405180910390fd5b60ff8316600414156136595761286e82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506146b592505050565b60ff8316600514156128be5761286e82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506147d592505050565b600160208190526000918252604090912080549181015460028201546003830154600484015460059094015460ff9586169593946001600160a01b039093169391929181169061010090046001600160401b031687565b61100381565b60055481565b61100081565b61271081565b61100481565b60606137236157c5565b600061372e846148da565b9150915080613784576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b815160ff16613837576020828101805160009081526001928390526040908190208551815460ff1990811660ff928316178355935194820194909455908501516002820180546001600160a01b0319166001600160a01b03909216919091179055606085015160038201556080850151600482015560a08501516005909101805460c08701519316919093161768ffffffffffffffff0019166101006001600160401b039092169190910217905561398e565b815160ff16600114156139415760006110046001600160a01b03166359b9278984602001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561389057600080fd5b505afa1580156138a4573d6000803e3d6000fd5b505050506040513d60208110156138ba57600080fd5b505190506001600160a01b0381161561393b5760208301516040805163b99328c560e01b815260048101929092526001600160a01b0383166024830152516110049163b99328c591604480830192600092919082900301818387803b15801561392257600080fd5b505af1158015613936573d6000803e3d6000fd5b505050505b5061398e565b6040805162461bcd60e51b815260206004820152601960248201527f756e7265636f676e697a65642062696e64207061636b61676500000000000000604482015290519081900360640190fd5b60408051600080825260208201909252905b50949350505050565b600082820183811015610e95576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006008821115613a2c57613a25836007198401600a0a63ffffffff613bba16565b90506113e3565b610e95836008849003600a0a63ffffffff614a2b16565b6000610e9583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614a84565b60408051600680825260e08201909252606091829190816020015b6060815260200190600190039081613aa05750508351909150613acb906001600160a01b0316614b1b565b81600081518110613ad857fe5b6020026020010181905250613af983602001516001600160a01b0316614b1b565b81600181518110613b0657fe5b6020026020010181905250613b21836040015160001c614b3e565b81600281518110613b2e57fe5b6020026020010181905250613b468360600151614b3e565b81600381518110613b5357fe5b6020026020010181905250613b6b8360800151614b3e565b81600481518110613b7857fe5b6020026020010181905250613b998360a001516001600160401b0316614b3e565b81600581518110613ba657fe5b6020026020010181905250610e9581614b51565b6000610e9583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614bdb565b6020015190565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3f57600080fd5b505afa158015613c53573d6000803e3d6000fd5b505050506040513d6020811015613c6957600080fd5b5051604080516395d89b4160e01b8152905160ff90921692506060916001600160a01b038616916395d89b41916004808301926000929190829003018186803b158015613cb557600080fd5b505afa158015613cc9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613cf257600080fd5b8101908080516040519392919084600160201b821115613d1157600080fd5b908301906020820185811115613d2657600080fd5b8251600160201b811182820188101715613d3f57600080fd5b82525081516020918201929091019080838360005b83811015613d6c578181015183820152602001613d54565b50505050905090810190601f168015613d995780820380516001836020036101000a031916815260200191505b5060408181526370a0823160e01b82526110046004830152519495506000946001600160a01b038a1694506370a08231935060248083019350602092829003018186803b158015613de957600080fd5b505afa158015613dfd573d6000803e3d6000fd5b505050506040513d6020811015613e1357600080fd5b505160808701516060880151919250600091613e349163ffffffff613a4316565b9050428760c001516001600160401b03161015613e595750600193506113e392505050565b613e67838860200151614c40565b613e795750600293506113e392505050565b80821115613e8f5750600393506113e392505050565b866060015187604001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613ed157600080fd5b505afa158015613ee5573d6000803e3d6000fd5b505050506040513d6020811015613efb57600080fd5b505114613f105750600493506113e392505050565b8660a0015160ff168414613f2c5750600593506113e392505050565b602080880151604080516359b9278960e01b8152600481019290925251600092611004926359b927899260248083019392829003018186803b158015613f7157600080fd5b505afa158015613f85573d6000803e3d6000fd5b505050506040513d6020811015613f9b57600080fd5b50516001600160a01b031614158061403d57506000801b6110046001600160a01b031663bd46646189604001516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561400e57600080fd5b505afa158015614022573d6000803e3d6000fd5b505050506040513d602081101561403857600080fd5b505114155b156140505750600693506113e392505050565b5060009695505050505050565b6040805160028082526060828101909352829190816020015b6060815260200190600190039081614076575050835190915061409e9063ffffffff16614b3e565b816000815181106140ab57fe5b60200260200101819052506140c6836020015160001c614b3e565b81600181518110613ba657fe5b6140db615790565b60006140e683614d28565b9150915080614133576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b6020808301516001600160a01b03166000908152600290915260409020805460ff1916905560a082015160ff166142945760808201516040516110049180156108fc02916000818181858888f19350505050158015614196573d6000803e3d6000fd5b506110046001600160a01b0316638eff336c8360600151846020015185604001516040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b031681526020018260ff1681526020019350505050600060405180830381600087803b15801561421057600080fd5b505af1158015614224573d6000803e3d6000fd5b50505050602082810180516001600160a01b03908116600090815260038452604090819020805460ff1916600117905591516060860151835190815292519116927f41787d7db08fc5907641ee8343379f28215727eb123d4b462099afab4300b036928290030190a2505061437d565b81602001516001600160a01b03167fefe400ad0042ebf81a245de9ae669616105e0ca9fc946352c085da0c2bc524e58360a00151604051808260ff1660ff16815260200191505060405180910390a2815160808301516040516000926001600160a01b0316916127109184818181858888f193505050503d8060008114614337576040519150601f19603f3d011682016040523d82523d6000602084013e61433c565b606091505b50509050806143795760808301516040516110029180156108fc02916000818181858888f19350505050158015614377573d6000803e3d6000fd5b505b5050505b50565b61438861585c565b600061439383614e35565b91509150806143e0576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b606082015160ff166144605760408083015190516110049180156108fc02916000818181858888f1935050505015801561441e573d6000803e3d6000fd5b5081602001516001600160a01b03167fbb7d3a9a559080d8281b0e4fb39dacbe2fdcafd5ef765e9a6ed871c9167dc60f60405160405180910390a2505061437d565b81602001516001600160a01b03167ff1e25fa536da84053644fd788b1d6a27ea6edd1f3af80c7d36ca253c4c82c9c38360600151604051808260ff1660ff16815260200191505060405180910390a2815160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d8060008114614503576040519150601f19603f3d011682016040523d82523d6000602084013e614508565b606091505b50509050806143795760408084015190516110029180156108fc02916000818181858888f19350505050158015614377573d6000803e3d6000fd5b6040805160088082526101208201909252606091829190816020015b606081526020019060019003908161455f575050835190915061458a906001600160a01b0316614b1b565b8160008151811061459757fe5b60200260200101819052506145b883602001516001600160a01b0316614b1b565b816001815181106145c557fe5b60200260200101819052506145e0836040015160001c614b3e565b816002815181106145ed57fe5b6020026020010181905250614608836060015160001c614b3e565b8160038151811061461557fe5b602002602001018190525061462d8360800151614b3e565b8160048151811061463a57fe5b60200260200101819052506146558360a0015160ff16614b3e565b8160058151811061466257fe5b602002602001018190525061467a8360c00151614b3e565b8160068151811061468757fe5b60200260200101819052506146a88360e001516001600160401b0316614b3e565b81600781518110613ba657fe5b6146bd615818565b60006146c883614f01565b9150915080614715576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b6020808301516001600160a01b03908116600090815260029092526040808320805460ff19169055845160c08601519151921691612710916402540be400029084818181858888f193505050503d806000811461478e576040519150601f19603f3d011682016040523d82523d6000602084013e614793565b606091505b50509050806143795760c0830151604051611002916402540be4000280156108fc02916000818181858888f19350505050158015614377573d6000803e3d6000fd5b6147dd615790565b60006147e883615052565b9150915080614835576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b815160808301516040516000926001600160a01b031691612710916402540be4009091029084818181858888f193505050503d8060008114614893576040519150601f19603f3d011682016040523d82523d6000602084013e614898565b606091505b5050905080614379576080830151604051611002916402540be4000280156108fc02916000818181858888f19350505050158015614377573d6000803e3d6000fd5b6148e26157c5565b60006148ec6157c5565b6148f4615883565b61490561490086615162565b615187565b90506000805b614914836151d1565b15614a1e57806149395761492f61492a846151f2565b615240565b60ff168452614a16565b80600114156149585761494e61492a846151f2565b6020850152614a16565b80600214156149855761497261496d846151f2565b6152f5565b6001600160a01b03166040850152614a16565b80600314156149a45761499a61492a846151f2565b6060850152614a16565b80600414156149c3576149b961492a846151f2565b6080850152614a16565b80600514156149e5576149d861492a846151f2565b60ff1660a0850152614a16565b8060061415614a11576149fa61492a846151f2565b6001600160401b031660c085015260019150614a16565b614a1e565b60010161490b565b5091935090915050915091565b600082614a3a575060006113e3565b82820282848281614a4757fe5b0414610e955760405162461bcd60e51b81526004018080602001828103825260218152602001806159ed6021913960400191505060405180910390fd5b60008184841115614b135760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614ad8578181015183820152602001614ac0565b50505050905090810190601f168015614b055780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60408051600560a21b8318601482015260348101909152606090610e958161530f565b60606113e3614b4c83615365565b61530f565b6060815160001415614b72575060408051600081526020810190915261157c565b606082600081518110614b8157fe5b602002602001015190506000600190505b8351811015614bc257614bb882858381518110614bab57fe5b602002602001015161544b565b9150600101614b92565b50610e95614bd5825160c060ff166154c8565b8261544b565b60008183614c2a5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614ad8578181015183820152602001614ac0565b506000838581614c3657fe5b0495945050505050565b8151600090839060081080614c56575080516003115b15614c655760009150506113e3565b60408051602080825281830190925260609160208201818036833701905050905083602082015280825181518110614c9957fe5b6020910101516001600160f81b031916602d60f81b14614cbe576000925050506113e3565b600160005b8351811015614d1e57828181518110614cd857fe5b602001015160f81c60f81b6001600160f81b031916848281518110614cf957fe5b01602001516001600160f81b03191614614d165760009150614d1e565b600101614cc3565b5095945050505050565b614d30615790565b6000614d3a615790565b614d42615883565b614d4e61490086615162565b90506000805b614d5d836151d1565b15614a1e5780614d8357614d7361496d846151f2565b6001600160a01b03168452614e2d565b8060011415614dab57614d9861496d846151f2565b6001600160a01b03166020850152614e2d565b8060021415614dcd57614dc061492a846151f2565b60ff166040850152614e2d565b8060031415614dec57614de261492a846151f2565b6060850152614e2d565b8060041415614e0b57614e0161492a846151f2565b6080850152614e2d565b8060051415614a1157614e2061492a846151f2565b60ff1660a0850152600191505b600101614d54565b614e3d61585c565b6000614e4761585c565b614e4f615883565b614e5b61490086615162565b90506000805b614e6a836151d1565b15614a1e5780614e9057614e8061496d846151f2565b6001600160a01b03168452614ef9565b8060011415614eb857614ea561496d846151f2565b6001600160a01b03166020850152614ef9565b8060021415614ed757614ecd61492a846151f2565b6040850152614ef9565b8060031415614a1157614eec61492a846151f2565b60ff166060850152600191505b600101614e61565b614f09615818565b6000614f13615818565b614f1b615883565b614f2761490086615162565b90506000805b614f36836151d1565b15614a1e5780614f5c57614f4c61496d846151f2565b6001600160a01b0316845261504a565b8060011415614f8457614f7161496d846151f2565b6001600160a01b0316602085015261504a565b8060021415614fa357614f9961492a846151f2565b604085015261504a565b8060031415614fc257614fb861492a846151f2565b606085015261504a565b8060041415614fe157614fd761492a846151f2565b608085015261504a565b806005141561500357614ff661492a846151f2565b60ff1660a085015261504a565b80600614156150225761501861492a846151f2565b60c085015261504a565b8060071415614a115761503761492a846151f2565b6001600160401b031660e0850152600191505b600101614f2d565b61505a615790565b6000615064615790565b61506c615883565b61507861490086615162565b90506000805b615087836151d1565b15614a1e57806150ad5761509d61496d846151f2565b6001600160a01b0316845261515a565b80600114156150d5576150c261496d846151f2565b6001600160a01b0316602085015261515a565b80600214156150f4576150ea61492a846151f2565b604085015261515a565b80600314156151135761510961492a846151f2565b606085015261515a565b80600414156151325761512861492a846151f2565b608085015261515a565b8060051415614a115761514761492a846151f2565b6001600160401b031660a0850152600191505b60010161507e565b61516a6158a3565b506040805180820190915281518152602082810190820152919050565b61518f615883565b615198826155c0565b6151a157600080fd5b60006151b083602001516155fa565b60208085015160408051808201909152868152920190820152915050919050565b60006151db6158a3565b505080518051602091820151919092015191011190565b6151fa6158a3565b615203826151d1565b61520c57600080fd5b6020820151600061521c8261565d565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061525557508151602110155b61525e57600080fd5b600061526d83602001516155fa565b905080836000015110156152c8576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b8251602080850151830180519284900392918310156139a057506020919091036101000a90049392505050565b805160009060151461530657600080fd5b6113e382615240565b6060815160011480156153415750607f60f81b8260008151811061532f57fe5b01602001516001600160f81b03191611155b1561534d57508061157c565b6113e361535f8351608060ff166154c8565b8361544b565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166153a9575060186153cd565b6fffffffffffffffffffffffffffffffff1984166153c9575060106153cd565b5060005b6020811015615403578181815181106153e257fe5b01602001516001600160f81b031916156153fb57615403565b6001016153cd565b60008160200390506060816040519080825280601f01601f191660200182016040528015615438576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561547c578051835260209283019201615464565b50855184518101855292509050808201602086015b818310156154a9578051835260209283019201615491565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310615518576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b604080516001808252818301909252606091602082018180368337019050509050603784116155725782840160f81b8160008151811061555457fe5b60200101906001600160f81b031916908160001a90535090506113e3565b606061557d85615365565b90508381510160370160f81b8260008151811061559657fe5b60200101906001600160f81b031916908160001a9053506155b7828261544b565b95945050505050565b80516000906155d15750600061157c565b6020820151805160001a9060c08210156155f05760009250505061157c565b5060019392505050565b8051600090811a608081101561561457600091505061157c565b60b881108061562f575060c0811080159061562f575060f881105b1561563e57600191505061157c565b60c08110156156525760b51901905061157c565b60f51901905061157c565b80516000908190811a60808110156156785760019150615789565b60b881101561568d57607e1981019150615789565b60c081101561570757600060b78203600186019550806020036101000a865104915060018101820193505080831015615701576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50615789565b60f881101561571c5760be1981019150615789565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615787576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b60405180604001604052806158966158a3565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6d73672e76616c7565206d757374206265204e202a203165313020616e642067726561746572207468616e2073756d206f66206d696e6952656c617946656520616e64206d6972726f724665656f6e6c79206265703230206f776e65722063616e20617070726f766520746869732062696e64207265717565737465787069726554696d65206d7573742062652074776f206d696e75746573206c6174657220616e64206f6e6520646179206561726c69657272656c6179466565206d757374206265204e202a203165313020616e642067726561746572207468616e206d696e6952656c6179466565636f6e74616374206164647265737320646f65736e277420657175616c20746f2074686520636f6e7472616374206164647265737320696e2062696e642072657175657374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776d73672e76616c7565206d757374206265204e202a203165313020616e64206e6f206c6573732073756d206f66206d696e6952656c617946656520616e642073796e63466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e747261637474686520626570323020746f6b656e20697320696e206d6972726f722070656e64696e672073746174757373796d626f6c206d757374206e6f7420636f6e7461696e206e6f6e2d616c706861626574a26469706673582212201165eef2c3a9b93126944a081b2726c7c09babc88a4afff1c0ba3b8ec0bcb9ec64736f6c63430006040033", + }, + }, + } } func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.Int, statedb *state.StateDB) { @@ -218,6 +253,8 @@ func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.I var network string switch GenesisHash { /* Add mainnet genesis hash */ + case params.BSCGenesisHash: + network = mainNet case params.ChapelGenesisHash: network = chapelNet case params.RialtoGenesisHash: @@ -226,7 +263,7 @@ func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.I network = defaultNet } - logger := log.New("system-contract-upgrade") + logger := log.New("system-contract-upgrade", network) if config.IsOnRamanujan(blockNumber) { applySystemContractUpgrade(ramanujanUpgrade[network], blockNumber, statedb, logger) } @@ -235,6 +272,10 @@ func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.I applySystemContractUpgrade(nielsUpgrade[network], blockNumber, statedb, logger) } + if config.IsOnMirrorSync(blockNumber) { + applySystemContractUpgrade(mirrorUpgrade[network], blockNumber, statedb, logger) + } + /* apply other upgrades */ diff --git a/params/config.go b/params/config.go index c99e597fc6..92b0ebcc65 100644 --- a/params/config.go +++ b/params/config.go @@ -32,8 +32,9 @@ var ( RinkebyGenesisHash = common.HexToHash("0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177") GoerliGenesisHash = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a") + BSCGenesisHash = common.HexToHash("0x0d21840abff46b96c84b2ac9e10e4f5cdaeb5693cb665db62a2f3b02d2d57b5b") ChapelGenesisHash = common.HexToHash("0x6d3c66c5357ec91d5c43af47e234a939b22557cbb552dc45bebbceeed90fbe34") - RialtoGenesisHash = common.HexToHash("0xaa1c1e0af675e846942719466ab72822eff51ebf8462ead0897ae1240e3c0da1") + RialtoGenesisHash = common.HexToHash("0x005dc005bddd1967de6187c1c23be801eb7abdd80cebcc24f341b727b70311d6") ) // TrustedCheckpoints associates each known checkpoint with the genesis hash of @@ -213,6 +214,26 @@ var ( Threshold: 2, } + BSCChainConfig = &ChainConfig{ + ChainID: big.NewInt(97), + HomesteadBlock: big.NewInt(0), + EIP150Block: big.NewInt(0), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(0), + MuirGlacierBlock: big.NewInt(0), + RamanujanBlock: big.NewInt(0), + NielsBlock: big.NewInt(0), + MirrorSyncBlock: big.NewInt(4000000), + Parlia: &ParliaConfig{ + Period: 3, + Epoch: 200, + }, + } + ChapelChainConfig = &ChainConfig{ ChainID: big.NewInt(97), HomesteadBlock: big.NewInt(0), @@ -226,6 +247,7 @@ var ( MuirGlacierBlock: big.NewInt(0), RamanujanBlock: big.NewInt(1010000), NielsBlock: big.NewInt(1014369), + MirrorSyncBlock: big.NewInt(5000000), Parlia: &ParliaConfig{ Period: 3, Epoch: 200, @@ -243,8 +265,9 @@ var ( PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), - RamanujanBlock: big.NewInt(400), + RamanujanBlock: big.NewInt(50), NielsBlock: big.NewInt(0), + MirrorSyncBlock: big.NewInt(100), Parlia: &ParliaConfig{ Period: 3, Epoch: 200, @@ -256,16 +279,16 @@ var ( // // This configuration is intentionally not using keyed fields to force anyone // adding flags to the config to also have to set these fields. - AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, nil, new(EthashConfig), nil, nil} + AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, nil, nil, new(EthashConfig), nil, nil} // AllCliqueProtocolChanges contains every protocol change (EIPs) introduced // and accepted by the Ethereum core developers into the Clique consensus. // // This configuration is intentionally not using keyed fields to force anyone // adding flags to the config to also have to set these fields. - AllCliqueProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, nil, nil, &CliqueConfig{Period: 0, Epoch: 30000}, nil} + AllCliqueProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, nil, nil, nil, &CliqueConfig{Period: 0, Epoch: 30000}, nil} - TestChainConfig = &ChainConfig{big.NewInt(1), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, nil, new(EthashConfig), nil, nil} + TestChainConfig = &ChainConfig{big.NewInt(1), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, nil, nil, new(EthashConfig), nil, nil} TestRules = TestChainConfig.Rules(new(big.Int)) ) @@ -339,6 +362,7 @@ type ChainConfig struct { EWASMBlock *big.Int `json:"ewasmBlock,omitempty" toml:",omitempty"` // EWASM switch block (nil = no fork, 0 = already activated) RamanujanBlock *big.Int `json:"ramanujanBlock,omitempty" toml:",omitempty"` // ramanujanBlock switch block (nil = no fork, 0 = already activated) NielsBlock *big.Int `json:"nielsBlock,omitempty" toml:",omitempty"` // nielsBlock switch block (nil = no fork, 0 = already activated) + MirrorSyncBlock *big.Int `json:"mirrorSyncBlock,omitempty" toml:",omitempty"` // mirrorSyncBlock switch block (nil = no fork, 0 = already activated) // Various consensus engines Ethash *EthashConfig `json:"ethash,omitempty" toml:",omitempty"` @@ -389,7 +413,7 @@ func (c *ChainConfig) String() string { default: engine = "unknown" } - return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Ramanujan: %v, Niels: %v, Engine: %v}", + return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Ramanujan: %v, Niels: %v, MirrorSync: %v, Engine: %v}", c.ChainID, c.HomesteadBlock, c.DAOForkBlock, @@ -404,6 +428,7 @@ func (c *ChainConfig) String() string { c.MuirGlacierBlock, c.RamanujanBlock, c.NielsBlock, + c.MirrorSyncBlock, engine, ) } @@ -463,6 +488,17 @@ func (c *ChainConfig) IsOnNiels(num *big.Int) bool { return configNumEqual(c.NielsBlock, num) } +// IsMirrorSync returns whether num is either equal to the MirrorSync fork block or greater. +func (c *ChainConfig) IsMirrorSync(num *big.Int) bool { + return isForked(c.MirrorSyncBlock, num) +} + +// IsOnMirrorSync returns whether num is equal to the MirrorSync fork block +func (c *ChainConfig) IsOnMirrorSync(num *big.Int) bool { + return configNumEqual(c.MirrorSyncBlock, num) +} + + // IsMuirGlacier returns whether num is either equal to the Muir Glacier (EIP-2384) fork block or greater. func (c *ChainConfig) IsMuirGlacier(num *big.Int) bool { return isForked(c.MuirGlacierBlock, num) @@ -522,6 +558,7 @@ func (c *ChainConfig) CheckConfigForkOrder() error { {"istanbulBlock", c.IstanbulBlock}, {"muirGlacierBlock", c.MuirGlacierBlock}, {"ramanujanBlock", c.RamanujanBlock}, + {"mirrorSyncBlock", c.MirrorSyncBlock}, } { if lastFork.name != "" { // Next one must be higher number @@ -584,6 +621,9 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *Confi if isForkIncompatible(c.RamanujanBlock, newcfg.RamanujanBlock, head) { return newCompatError("ramanujan fork block", c.RamanujanBlock, newcfg.RamanujanBlock) } + if isForkIncompatible(c.MirrorSyncBlock, newcfg.MirrorSyncBlock, head) { + return newCompatError("mirrorSync fork block", c.MirrorSyncBlock, newcfg.MirrorSyncBlock) + } return nil }