From 11d2bae1576519e36848b33b2c3a105bcfa6ec83 Mon Sep 17 00:00:00 2001 From: Roshan <48975233+Loverush@users.noreply.github.com> Date: Thu, 18 Aug 2022 14:36:45 +0800 Subject: [PATCH] bep153: Native Staking on BSC (#1051) --- core/state_processor_test.go | 1 + core/systemcontracts/const.go | 1 + core/systemcontracts/upgrade.go | 37 +++++++++++++++++++++++++++++++++ eth/gasprice/gasprice_test.go | 1 + params/config.go | 35 ++++++++++++++++++++++++++----- 5 files changed, 70 insertions(+), 5 deletions(-) diff --git a/core/state_processor_test.go b/core/state_processor_test.go index 7ef8747806..964c08947c 100644 --- a/core/state_processor_test.go +++ b/core/state_processor_test.go @@ -58,6 +58,7 @@ func TestStateProcessorErrors(t *testing.T) { EulerBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), + GibbsBlock: big.NewInt(0), Ethash: new(params.EthashConfig), } signer = types.LatestSigner(config) diff --git a/core/systemcontracts/const.go b/core/systemcontracts/const.go index 15c1987e96..a5a74905e0 100644 --- a/core/systemcontracts/const.go +++ b/core/systemcontracts/const.go @@ -12,4 +12,5 @@ const ( GovHubContract = "0x0000000000000000000000000000000000001007" TokenManagerContract = "0x0000000000000000000000000000000000001008" CrossChainContract = "0x0000000000000000000000000000000000002000" + StakingContract = "0x0000000000000000000000000000000000002001" ) diff --git a/core/systemcontracts/upgrade.go b/core/systemcontracts/upgrade.go index b5e6c7e781..a1616263f7 100644 --- a/core/systemcontracts/upgrade.go +++ b/core/systemcontracts/upgrade.go @@ -45,6 +45,8 @@ var ( brunoUpgrade = make(map[string]*Upgrade) eulerUpgrade = make(map[string]*Upgrade) + + gibbsUpgrade = make(map[string]*Upgrade) ) func init() { @@ -360,6 +362,37 @@ func init() { }, } + gibbsUpgrade[chapelNet] = &Upgrade{ + UpgradeName: "gibbs", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(TokenHubContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/1cd2b9b7e5ad66f3c3d38570bfda3d8179997b02", + Code: "60806040526004361061036f5760003560e01c80639a854bbd116101c6578063bd466461116100f7578063f014847211610095578063fc1a598f1161006f578063fc1a598f14610d58578063fc3e590814610a3b578063fd6a687914610d8b578063ff9c0027146106ec576103b7565b8063f014847214610d19578063f9a2bbc714610d2e578063fa9e915914610d43576103b7565b8063d9e6dae9116100d1578063d9e6dae91461066e578063dc927faf14610cda578063e1c7392a14610cef578063ebf71d5314610d04576103b7565b8063bd46646114610c0d578063c81b166214610c40578063c8509d8114610c55576103b7565b8063aa7415f511610164578063b99328c51161013e578063b99328c514610b77578063b9fd21e314610bb0578063ba35ead614610bc5578063bbface1f14610bda576103b7565b8063aa7415f514610a50578063ab51bb9614610a97578063ac43175114610aac576103b7565b8063a1a11bf5116101a0578063a1a11bf5146109fc578063a496fba214610a11578063a78abc1614610a26578063a7c9f02d14610a3b576103b7565b80639a854bbd146109995780639a99b4f0146109ae5780639dc09262146109e7576103b7565b806361368475116102a0578063727be1f81161023e578063831d65d111610218578063831d65d1146108c05780638b87b21f146105ed5780638eff336c1461094557806396713da914610984576103b7565b8063727be1f81461086c57806375d47a0a146108965780637942fd05146108ab576103b7565b80636e47b4821161027a5780636e47b4821461082d57806370fd5bad146106ec578063718a8aa81461084257806371d3086314610857576103b7565b8063613684751461066e57806366dea52a146106ec5780636e05652014610701576103b7565b806343a368b91161030d57806350432d32116102e757806350432d321461068357806351e806721461069857806359b92789146106ad5780635d499b1b146106d7576103b7565b806343a368b91461062d578063493279b1146106425780634bf6c8821461066e576103b7565b8063149d14d911610349578063149d14d9146105155780633d7132231461053c5780633dffc387146105ed57806343756e5c14610618576103b7565b80630bee7a67146103bc5780630e2374a5146103ea5780631182b8751461041b576103b7565b366103b75734156103b5576040805133815234602082015281517f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db929181900390910190a15b005b600080fd5b3480156103c857600080fd5b506103d1610da0565b6040805163ffffffff9092168252519081900360200190f35b3480156103f657600080fd5b506103ff610da5565b604080516001600160a01b039092168252519081900360200190f35b34801561042757600080fd5b506104a06004803603604081101561043e57600080fd5b60ff8235169190810190604081016020820135600160201b81111561046257600080fd5b82018360208201111561047457600080fd5b803590602001918460018302840111600160201b8311171561049557600080fd5b509092509050610dab565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104da5781810151838201526020016104c2565b50505050905090810190601f1680156105075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561052157600080fd5b5061052a610ed9565b60408051918252519081900360200190f35b34801561054857600080fd5b506103ff6004803603602081101561055f57600080fd5b810190602081018135600160201b81111561057957600080fd5b82018360208201111561058b57600080fd5b803590602001918460018302840111600160201b831117156105ac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610edf945050505050565b3480156105f957600080fd5b50610602610f03565b6040805160ff9092168252519081900360200190f35b34801561062457600080fd5b506103ff610f08565b34801561063957600080fd5b5061052a610f0e565b34801561064e57600080fd5b50610657610f1a565b6040805161ffff9092168252519081900360200190f35b34801561067a57600080fd5b50610602610f1f565b34801561068f57600080fd5b5061052a610f24565b3480156106a457600080fd5b506103ff610f2f565b3480156106b957600080fd5b506103ff600480360360208110156106d057600080fd5b5035610f35565b3480156106e357600080fd5b5061052a610f50565b3480156106f857600080fd5b50610602610f59565b6108196004803603608081101561071757600080fd5b810190602081018135600160201b81111561073157600080fd5b82018360208201111561074357600080fd5b803590602001918460208302840111600160201b8311171561076457600080fd5b919390929091602081019035600160201b81111561078157600080fd5b82018360208201111561079357600080fd5b803590602001918460208302840111600160201b831117156107b457600080fd5b919390929091602081019035600160201b8111156107d157600080fd5b8201836020820111156107e357600080fd5b803590602001918460208302840111600160201b8311171561080457600080fd5b91935091503567ffffffffffffffff16610f5e565b604080519115158252519081900360200190f35b34801561083957600080fd5b506103ff611433565b34801561084e57600080fd5b50610602611439565b34801561086357600080fd5b5061052a61143e565b34801561087857600080fd5b506108196004803603602081101561088f57600080fd5b5035611444565b3480156108a257600080fd5b506103ff6114be565b3480156108b757600080fd5b506106026114c4565b3480156108cc57600080fd5b506103b5600480360360408110156108e357600080fd5b60ff8235169190810190604081016020820135600160201b81111561090757600080fd5b82018360208201111561091957600080fd5b803590602001918460018302840111600160201b8311171561093a57600080fd5b5090925090506114c9565b34801561095157600080fd5b506103b56004803603606081101561096857600080fd5b508035906001600160a01b036020820135169060400135611612565b34801561099057600080fd5b50610602611698565b3480156109a557600080fd5b5061052a61169d565b3480156109ba57600080fd5b5061052a600480360360408110156109d157600080fd5b506001600160a01b0381351690602001356116a9565b3480156109f357600080fd5b506103ff6117e7565b348015610a0857600080fd5b506103ff6117ed565b348015610a1d57600080fd5b506106026117f3565b348015610a3257600080fd5b506108196117f8565b348015610a4757600080fd5b50610602611801565b61081960048036036080811015610a6657600080fd5b5080356001600160a01b03908116916020810135909116906040810135906060013567ffffffffffffffff16611806565b348015610aa357600080fd5b506103d16117f3565b348015610ab857600080fd5b506103b560048036036040811015610acf57600080fd5b810190602081018135600160201b811115610ae957600080fd5b820183602082011115610afb57600080fd5b803590602001918460018302840111600160201b83111715610b1c57600080fd5b919390929091602081019035600160201b811115610b3957600080fd5b820183602082011115610b4b57600080fd5b803590602001918460018302840111600160201b83111715610b6c57600080fd5b509092509050611ec7565b348015610b8357600080fd5b506103b560048036036040811015610b9a57600080fd5b50803590602001356001600160a01b0316612136565b348015610bbc57600080fd5b5061052a6121ac565b348015610bd157600080fd5b5061052a6121b6565b348015610be657600080fd5b5061052a60048036036020811015610bfd57600080fd5b50356001600160a01b03166121bc565b348015610c1957600080fd5b5061052a60048036036020811015610c3057600080fd5b50356001600160a01b03166121ce565b348015610c4c57600080fd5b506103ff6121e9565b348015610c6157600080fd5b506103b560048036036040811015610c7857600080fd5b60ff8235169190810190604081016020820135600160201b811115610c9c57600080fd5b820183602082011115610cae57600080fd5b803590602001918460018302840111600160201b83111715610ccf57600080fd5b5090925090506121ef565b348015610ce657600080fd5b506103ff6122bf565b348015610cfb57600080fd5b506103b56122c5565b348015610d1057600080fd5b50610602612365565b348015610d2557600080fd5b5061060261236a565b348015610d3a57600080fd5b506103ff61236f565b348015610d4f57600080fd5b5061052a612375565b348015610d6457600080fd5b506104a060048036036020811015610d7b57600080fd5b50356001600160a01b031661237b565b348015610d9757600080fd5b506103ff6124a2565b606481565b61200181565b60005460609060ff16610df3576040805162461bcd60e51b81526020600482015260196024820152600080516020614905833981519152604482015290519081900360640190fd5b3361200014610e335760405162461bcd60e51b815260040180806020018281038252602f8152602001806148b3602f913960400191505060405180910390fd5b60ff841660021415610e8557610e7e83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506124a892505050565b9050610ed2565b6040805162461bcd60e51b815260206004820152601860248201527f756e7265636f676e697a65642073796e207061636b6167650000000000000000604482015290519081900360640190fd5b9392505050565b60015490565b6020818101516000908152600490915260409020546001600160a01b03165b919050565b600181565b61100181565b670de0b6b3a764000081565b606181565b600881565b66071afd498d000081565b61200081565b6000908152600460205260409020546001600160a01b031690565b6402540be40081565b600281565b6000805460ff16610fa4576040805162461bcd60e51b81526020600482015260196024820152600080516020614905833981519152604482015290519081900360640190fd5b868514610fe25760405162461bcd60e51b815260040180806020018281038252603b815260200180614878603b913960400191505060405180910390fd5b8683146110205760405162461bcd60e51b815260040180806020018281038252603f81526020018061474b603f913960400191505060405180910390fd5b426078018267ffffffffffffffff16101561106c5760405162461bcd60e51b815260040180806020018281038252602481526020018061463b6024913960400191505060405180910390fd5b6402540be4003406156110b05760405162461bcd60e51b815260040180806020018281038252604081526020018061497b6040913960400191505060405180910390fd5b604080518681526020808802820101909152859060009081906060908480156110e3578160200160208202803683370190505b50905060005b848110156111be576402540be4008b8b8381811061110357fe5b905060200201358161111157fe5b061561114e5760405162461bcd60e51b815260040180806020018281038252603c81526020018061478a603c913960400191505060405180910390fd5b6111738b8b8381811061115d57fe5b90506020020135856125cc90919063ffffffff16565b935061119f6402540be4008c8c8481811061118a57fe5b9050602002013561262690919063ffffffff16565b8282815181106111ab57fe5b60209081029190910101526001016110e9565b506001546111e3906111d6908663ffffffff61266816565b849063ffffffff6125cc16565b3410156112215760405162461bcd60e51b81526004018080602001828103825260568152602001806149256056913960600191505060405180910390fd5b611231348463ffffffff6126c116565b915061123b614461565b6040518060c001604052806221272160e91b60001b815260200160006001600160a01b031681526020018381526020018e8e808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d91829185019084908082843760009201919091525050509082525067ffffffffffffffff8916602090910152905061200063f7a251d760036112ff84612703565b611314876402540be40063ffffffff61262616565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561137257818101518382015260200161135a565b50505050905090810190601f16801561139f5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156113c057600080fd5b505af11580156113d4573d6000803e3d6000fd5b505060408051600081523360208201528082018890526060810187905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a15060019c9b505050505050505050505050565b61100581565b601081565b60015481565b600033612001146114865760405162461bcd60e51b815260040180806020018281038252603381526020018061457b6033913960400191505060405180910390fd5b6040516120019083156108fc029084906000818181858888f193505050501580156114b5573d6000803e3d6000fd5b50600192915050565b61100881565b600b81565b60005460ff1661150e576040805162461bcd60e51b81526020600482015260196024820152600080516020614905833981519152604482015290519081900360640190fd5b336120001461154e5760405162461bcd60e51b815260040180806020018281038252602f8152602001806148b3602f913960400191505060405180910390fd5b60ff83166003141561159e5761159982828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129be92505050565b61160d565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b33611008146116525760405162461bcd60e51b81526004018080602001828103825260238152602001806148e26023913960400191505060405180910390fd5b600083815260046020908152604080832080546001600160a01b039096166001600160a01b03199096168617905593825260038152838220949094556002909352912055565b600981565b677ce66c50e284000081565b6000805460ff166116ef576040805162461bcd60e51b81526020600482015260196024820152600080516020614905833981519152604482015290519081900360640190fd5b336110051461172f5760405162461bcd60e51b815260040180806020018281038252602f8152602001806145ae602f913960400191505060405180910390fd5b600047831061173e5747611740565b825b9050670de0b6b3a764000081111561175c5760009150506117e1565b80156117de576040516001600160a01b0385169082156108fc029083906000818181858888f19350505050158015611798573d6000803e3d6000fd5b50604080516001600160a01b03861681526020810183905281517ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0929181900390910190a15b90505b92915050565b61100781565b61100681565b600081565b60005460ff1681565b600381565b6000805460ff1661184c576040805162461bcd60e51b81526020600482015260196024820152600080516020614905833981519152604482015290519081900360640190fd5b426078018267ffffffffffffffff1610156118985760405162461bcd60e51b815260040180806020018281038252602481526020018061463b6024913960400191505060405180910390fd5b6402540be4003406156118dc5760405162461bcd60e51b815260040180806020018281038252604081526020018061497b6040913960400191505060405180910390fd5b600080806001600160a01b0388166119bb5760015461190290879063ffffffff6125cc16565b3410156119405760405162461bcd60e51b81526004018080602001828103825260618152602001806146c56061913960800191505060405180910390fd5b6402540be4008606156119845760405162461bcd60e51b815260040180806020018281038252603c81526020018061478a603c913960400191505060405180910390fd5b611994348763ffffffff6126c116565b90506119ab866402540be40063ffffffff61262616565b6221272160e91b93509150611c5e565b6001600160a01b038816600090815260036020526040902054925082611a125760405162461bcd60e51b81526004018080602001828103825260318152602001806146946031913960400191505060405180910390fd5b600154341015611a535760405162461bcd60e51b815260040180806020018281038252603f8152602001806147e7603f913960400191505060405180910390fd5b506001600160a01b0387166000908152600260205260409020543490600881111580611a9e5750600881118015611a9e5750611a9c876007198301600a0a63ffffffff612a1a16565b155b611ad95760405162461bcd60e51b815260040180806020018281038252603c81526020018061478a603c913960400191505060405180910390fd5b611ae38782612a5c565b9250611aee84612a9c565b15611b36576305f5e100831015611b365760405162461bcd60e51b815260040180806020018281038252603a8152602001806145dd603a913960400191505060405180910390fd5b600881101580611b505750600881108015611b5057508683115b611b8b5760405162461bcd60e51b81526004018080602001828103825260258152602001806147266025913960400191505060405180910390fd5b677ce66c50e2840000831115611bd25760405162461bcd60e51b815260040180806020018281038252603581526020018061465f6035913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810189905290516001600160a01b038b16916323b872dd9160648083019260209291908290030181600087803b158015611c2757600080fd5b505af1158015611c3b573d6000803e3d6000fd5b505050506040513d6020811015611c5157600080fd5b5051611c5c57600080fd5b505b611c66614461565b6040805160c0810182528581526001600160a01b038b166020820152815160018082528184018452919283019181602001602082028036833750505081526040805160018082528183019092526020928301929091908083019080368337505050815260408051600180825281830190925260209283019290919080830190803683370190505081526020018767ffffffffffffffff168152509050828160400151600081518110611d1457fe5b602002602001018181525050878160600151600081518110611d3257fe5b60200260200101906001600160a01b031690816001600160a01b031681525050338160800151600081518110611d6457fe5b6001600160a01b039092166020928302919091019091015261200063f7a251d76003611d8f84612703565b611da4866402540be40063ffffffff61262616565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611e02578181015183820152602001611dea565b50505050905090810190601f168015611e2f5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611e5057600080fd5b505af1158015611e64573d6000803e3d6000fd5b5050604080516001600160a01b038d1681523360208201528082018b90526060810186905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a150600198975050505050505050565b3361100714611f075760405162461bcd60e51b815260040180806020018281038252602e815260200180614826602e913960400191505060405180910390fd5b60208114611f5c576040805162461bcd60e51b815260206004820152601b60248201527f65787065637465642076616c7565206c656e6774682069732033320000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8801819004810282018101909252868152939450606093925086915085908190840183828082843760009201919091525050505060208301519091506772656c617946656560c01b811415612064576020820151670de0b6b3a7640000811180159061200b57506402540be4008106155b61205c576040805162461bcd60e51b815260206004820152601960248201527f7468652072656c6179466565206f7574206f662072616e676500000000000000604482015290519081900360640190fd5b6001556120a1565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b33611008146121765760405162461bcd60e51b81526004018080602001828103825260238152602001806148e26023913960400191505060405180910390fd5b600091825260046020908152604080842080546001600160a01b03191690556001600160a01b0392909216835260039052812055565b6221272160e91b81565b61c35081565b60026020526000908152604090205481565b6001600160a01b031660009081526003602052604090205490565b61100281565b60005460ff16612234576040805162461bcd60e51b81526020600482015260196024820152600080516020614905833981519152604482015290519081900360640190fd5b33612000146122745760405162461bcd60e51b815260040180806020018281038252602f8152602001806148b3602f913960400191505060405180910390fd5b60ff83166003141561159e5761159982828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ba292505050565b61100381565b60005460ff161561231d576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b66071afd498d000060019081556000808052600260205260127fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55805460ff19169091179055565b600481565b600581565b61100081565b61271081565b6001600160a01b03811660009081526003602090815260409182902054825182815280840190935260609290918391906020820181803683375050506020810183905290506000805b60208160ff16101561240b57828160ff16815181106123df57fe5b01602001516001600160f81b031916156123fe57600190910190612403565b61240b565b6001016123c4565b5060608160ff166040519080825280601f01601f19166020018201604052801561243c576020820181803683370190505b50905060005b8260ff168160ff16101561249857838160ff168151811061245f57fe5b602001015160f81c60f81b828260ff168151811061247957fe5b60200101906001600160f81b031916908160001a905350600101612442565b5095945050505050565b61100481565b60606124b26144ad565b60006124bd84612ca0565b9150915080612513576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b600061251e83612ddf565b905063ffffffff8116156125b2576040808401516020808601516001600160a01b031660009081526002909152918220546125599190612a5c565b90506125636144e2565b60405180608001604052808660000151815260200183815260200186608001516001600160a01b031681526020018463ffffffff1681525090506125a68161312c565b95505050505050610efe565b50506040805160008152602081019091529150610efe9050565b6000828201838110156117de576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006117de83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613208565b600082612677575060006117e1565b8282028284828161268457fe5b04146117de5760405162461bcd60e51b81526004018080602001828103825260218152602001806147c66021913960400191505060405180910390fd5b60006117de83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132aa565b60408051600680825260e08201909252606091829190816020015b606081526020019060019003908161271e575050835190915061274090613304565b8160008151811061274d57fe5b602002602001018190525061276e83602001516001600160a01b0316613317565b8160018151811061277b57fe5b6020026020010181905250600083604001515190506060816040519080825280602002602001820160405280156127c657816020015b60608152602001906001900390816127b15790505b50905060005b82811015612813576127f4866040015182815181106127e757fe5b6020026020010151613304565b82828151811061280057fe5b60209081029190910101526001016127cc565b5061281d8161333a565b8360028151811061282a57fe5b602002602001018190525060608260405190808252806020026020018201604052801561286b57816020015b60608152602001906001900390816128565790505b50905060005b838110156128c1576128a28760600151828151811061288c57fe5b60200260200101516001600160a01b0316613317565b8282815181106128ae57fe5b6020908102919091010152600101612871565b506128cb8161333a565b846003815181106128d857fe5b602002602001018190525060608360405190808252806020026020018201604052801561291957816020015b60608152602001906001900390816129045790505b50905060005b848110156129595761293a8860800151828151811061288c57fe5b82828151811061294657fe5b602090810291909101015260010161291f565b506129638161333a565b8560048151811061297057fe5b60200260200101819052506129928760a0015167ffffffffffffffff16613304565b8560058151811061299f57fe5b60200260200101819052506129b38561333a565b979650505050505050565b6129c6614509565b60006129d1836133c4565b9150915080612a115760405162461bcd60e51b81526004018080602001828103825260248152602001806148546024913960400191505060405180910390fd5b61160d8261358f565b60006117de83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250613a13565b60006008821115612a8557612a7e836007198401600a0a63ffffffff61262616565b90506117e1565b6117de836008849003600a0a63ffffffff61266816565b604080516020808252818301909252600091606091906020820181803683375050506020810184905290506000805b60208160ff161015612b1257828160ff1681518110612ae657fe5b01602001516001600160f81b03191615612b0557600190910190612b0a565b612b12565b600101612acb565b50600760ff82161015612b2a57600092505050610efe565b816005820360ff1681518110612b3c57fe5b6020910101516001600160f81b031916602d60f81b14612b6157600092505050610efe565b816001820360ff1681518110612b7357fe5b6020910101516001600160f81b031916604d60f81b14612b9857600092505050610efe565b5060019392505050565b612baa614461565b6000612bb583613a75565b9150915080612bf55760405162461bcd60e51b81526004018080602001828103825260248152602001806146176024913960400191505060405180910390fd5b612bfd614509565b602080840180516001600160a01b0390811684526040808701518585015291511660009081526002909252812054905b846040015151811015612c7e57612c5b85604001518281518110612c4d57fe5b602002602001015183613cd9565b85604001518281518110612c6b57fe5b6020908102919091010152600101612c2d565b506080840151604083015260056060830152612c998261358f565b5050505050565b612ca86144ad565b6000612cb26144ad565b612cba614540565b612ccb612cc686613d12565b613d37565b90506000805b612cda83613d81565b15612dd25780612cfc57612cf5612cf084613da2565b613df0565b8452612dca565b8060011415612d2957612d16612d1184613da2565b613ea7565b6001600160a01b03166020850152612dca565b8060021415612d4857612d3e612cf084613da2565b6040850152612dca565b8060031415612d7057612d5d612d1184613da2565b6001600160a01b03166060850152612dca565b8060041415612d9857612d85612d1184613da2565b6001600160a01b03166080850152612dca565b8060051415612dc557612dad612cf084613da2565b67ffffffffffffffff1660a085015260019150612dca565b612dd2565b600101612cd1565b5091935090915050915091565b60208101516000906001600160a01b0316612f16578160a0015167ffffffffffffffff16421115612e1257506001610efe565b8160400151471015612e2657506003610efe565b606082015160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d8060008114612e7d576040519150601f19603f3d011682016040523d82523d6000602084013e612e82565b606091505b5050905080612e95575060049050610efe565b7f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5983602001518460600151856040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009050610efe565b8160a0015167ffffffffffffffff16421115612f3457506001610efe565b81516020808401516001600160a01b031660009081526003909152604090205414612f6157506002610efe565b602080830151604080516370a0823160e01b815230600482015290516000936001600160a01b03909316926370a082319261c3509260248083019392829003018187803b158015612fb157600080fd5b5086fa158015612fc5573d6000803e3d6000fd5b50505050506040513d6020811015612fdc57600080fd5b50516040840151909150811015612ff7575060039050610efe565b600083602001516001600160a01b031663a9059cbb61c350866060015187604001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b15801561306857600080fd5b5087f115801561307c573d6000803e3d6000fd5b50505050506040513d602081101561309357600080fd5b505190508015613120577f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5984602001518560600151866040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009150610efe9050565b5060059150610efe9050565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081613147575050835190915061316990613304565b8160008151811061317657fe5b602002602001018190525061318e8360200151613304565b8160018151811061319b57fe5b60200260200101819052506131bc83604001516001600160a01b0316613317565b816002815181106131c957fe5b60200260200101819052506131e7836060015163ffffffff16613304565b816003815181106131f457fe5b6020026020010181905250610ed28161333a565b600081836132945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613259578181015183820152602001613241565b50505050905090810190601f1680156132865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816132a057fe5b0495945050505050565b600081848411156132fc5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613259578181015183820152602001613241565b505050900390565b60606117e161331283613ec1565b613fa7565b60408051600560a21b8318601482015260348101909152606090610ed281613fa7565b606081516000141561335b5750604080516000815260208101909152610efe565b60608260008151811061336a57fe5b602002602001015190506000600190505b83518110156133ab576133a18285838151811061339457fe5b6020026020010151613ff9565b915060010161337b565b50610ed26133be825160c060ff16614076565b82613ff9565b6133cc614509565b60006133d6614509565b6133de614540565b6133ea612cc686613d12565b90506000805b6133f983613d81565b15612dd2578061341f5761340f612d1184613da2565b6001600160a01b03168452613587565b80600114156134c057606061343b61343685613da2565b61416e565b90508051604051908082528060200260200182016040528015613468578160200160208202803683370190505b50602086015260005b81518110156134b95761349682828151811061348957fe5b6020026020010151613df0565b866020015182815181106134a657fe5b6020908102919091010152600101613471565b5050613587565b80600214156135625760606134d761343685613da2565b90508051604051908082528060200260200182016040528015613504578160200160208202803683370190505b50604086015260005b81518110156134b95761353282828151811061352557fe5b6020026020010151613ea7565b8660400151828151811061354257fe5b6001600160a01b039092166020928302919091019091015260010161350d565b8060031415612dc557613577612cf084613da2565b63ffffffff166060850152600191505b6001016133f0565b80516001600160a01b03166137b95760005b8160200151518110156137b3576000826040015182815181106135c057fe5b60200260200101516001600160a01b0316612710846020015184815181106135e457fe5b60209081029190910101516040516000818181858888f193505050503d806000811461362c576040519150601f19603f3d011682016040523d82523d6000602084013e613631565b606091505b50509050806136f4577f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061367057fe5b60200260200101518560200151858151811061368857fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a16137aa565b7fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a83600001518460400151848151811061372a57fe5b60200260200101518560200151858151811061374257fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b506001016135a1565b50613a10565b60005b816020015151811015613a0e57600082600001516001600160a01b031663a9059cbb61c350856040015185815181106137f157fe5b60200260200101518660200151868151811061380957fe5b60200260200101516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b15801561386057600080fd5b5087f1158015613874573d6000803e3d6000fd5b50505050506040513d602081101561388b57600080fd5b50519050801561394f577fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a8360000151846040015184815181106138cb57fe5b6020026020010151856020015185815181106138e357fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a1613a05565b7f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061398557fe5b60200260200101518560200151858151811061399d57fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b506001016137bc565b505b50565b60008183613a625760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613259578181015183820152602001613241565b50828481613a6c57fe5b06949350505050565b613a7d614461565b6000613a87614461565b613a8f614540565b613a9b612cc686613d12565b90506000805b613aaa83613d81565b15612dd25780613ac757613ac0612cf084613da2565b8452613cd1565b8060011415613aef57613adc612d1184613da2565b6001600160a01b03166020850152613cd1565b8060021415613b7e576060613b0661343685613da2565b90508051604051908082528060200260200182016040528015613b33578160200160208202803683370190505b50604086015260005b8151811015613b7757613b5482828151811061348957fe5b86604001518281518110613b6457fe5b6020908102919091010152600101613b3c565b5050613cd1565b8060031415613c13576060613b9561343685613da2565b90508051604051908082528060200260200182016040528015613bc2578160200160208202803683370190505b50606086015260005b8151811015613b7757613be382828151811061352557fe5b86606001518281518110613bf357fe5b6001600160a01b0390921660209283029190910190910152600101613bcb565b8060041415613ca8576060613c2a61343685613da2565b90508051604051908082528060200260200182016040528015613c57578160200160208202803683370190505b50608086015260005b8151811015613b7757613c7882828151811061352557fe5b86608001518281518110613c8857fe5b6001600160a01b0390921660209283029190910190910152600101613c60565b8060051415612dc557613cbd612cf084613da2565b67ffffffffffffffff1660a0850152600191505b600101613aa1565b60006008821115613cfb57612a7e836007198401600a0a63ffffffff61266816565b6117de836008849003600a0a63ffffffff61262616565b613d1a614560565b506040805180820190915281518152602082810190820152919050565b613d3f614540565b613d488261423f565b613d5157600080fd5b6000613d60836020015161426f565b60208085015160408051808201909152868152920190820152915050919050565b6000613d8b614560565b505080518051602091820151919092015191011190565b613daa614560565b613db382613d81565b613dbc57600080fd5b60208201516000613dcc826142d2565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590613e0557508151602110155b613e0e57600080fd5b6000613e1d836020015161426f565b90508083600001511015613e78576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015613e9e57826020036101000a820491505b50949350505050565b8051600090601514613eb857600080fd5b6117e182613df0565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416613f0557506018613f29565b6fffffffffffffffffffffffffffffffff198416613f2557506010613f29565b5060005b6020811015613f5f57818181518110613f3e57fe5b01602001516001600160f81b03191615613f5757613f5f565b600101613f29565b60008160200390506060816040519080825280601f01601f191660200182016040528015613f94576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015613fd95750607f60f81b82600081518110613fc757fe5b01602001516001600160f81b03191611155b15613fe5575080610efe565b6117e1613ff78351608060ff16614076565b835b6060806040519050835180825260208201818101602087015b8183101561402a578051835260209283019201614012565b50855184518101855292509050808201602086015b8183101561405757805183526020928301920161403f565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106140c6576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b604080516001808252818301909252606091602082018180368337019050509050603784116141205782840160f81b8160008151811061410257fe5b60200101906001600160f81b031916908160001a90535090506117e1565b606061412b85613ec1565b90508381510160370160f81b8260008151811061414457fe5b60200101906001600160f81b031916908160001a9053506141658282613ff9565b95945050505050565b60606141798261423f565b61418257600080fd5b600061418d83614405565b90506060816040519080825280602002602001820160405280156141cb57816020015b6141b8614560565b8152602001906001900390816141b05790505b50905060006141dd856020015161426f565b60208601510190506000805b84811015614234576141fa836142d2565b915060405180604001604052808381526020018481525084828151811061421d57fe5b6020908102919091010152918101916001016141e9565b509195945050505050565b805160009061425057506000610efe565b6020820151805160001a9060c0821015612b9857600092505050610efe565b8051600090811a6080811015614289576000915050610efe565b60b88110806142a4575060c081108015906142a4575060f881105b156142b3576001915050610efe565b60c08110156142c75760b519019050610efe565b60f519019050610efe565b80516000908190811a60808110156142ed57600191506143fe565b60b881101561430257607e19810191506143fe565b60c081101561437c57600060b78203600186019550806020036101000a865104915060018101820193505080831015614376576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b506143fe565b60f88110156143915760be19810191506143fe565b600060f78203600186019550806020036101000a8651049150600181018201935050808310156143fc576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b805160009061441657506000610efe565b6000809050600061442a846020015161426f565b602085015185519181019250015b8082101561445857614449826142d2565b60019093019290910190614438565b50909392505050565b6040518060c001604052806000801916815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600067ffffffffffffffff1681525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600063ffffffff1681525090565b6040518060400160405280614553614560565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6f6e6c79207374616b696e672073797374656d20636f6e74726163742063616e2063616c6c20746869732066756e6374696f6e746865206d6573736167652073656e646572206d75737420626520696e63656e746976697a6520636f6e7472616374466f72206d696e69546f6b656e2c20746865207472616e7366657220616d6f756e74206d757374206e6f74206265206c657373207468616e2031756e7265636f676e697a6564207472616e736665724f75742073796e207061636b61676565787069726554696d65206d7573742062652074776f206d696e75746573206c61746572616d6f756e7420697320746f6f206c617267652c20657863656564206d6178696d756d206265703220746f6b656e20616d6f756e7474686520636f6e747261637420686173206e6f74206265656e20626f756e6420746f20616e79206265703220746f6b656e726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e736665724f757420424e4220616d6f756e7420616e64206d696e696d756d2072656c6179466565616d6f756e7420697320746f6f206c617267652c2075696e74323536206f766572666c6f774c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620726566756e644164647273696e76616c6964207472616e7366657220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e20746865206d696e696d756d2072656c6179466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374756e7265636f676e697a6564207472616e736665724f75742061636b207061636b6167654c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620616d6f756e7473746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d73672073656e646572206d75737420626520746f6b656e4d616e6167657274686520636f6e7472616374206e6f7420696e69742079657400000000000000726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e7366657220424e4220616d6f756e7420616e642072656c6179466565696e76616c696420726563656976656420424e4220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6ea2646970667358221220caf56ff249aa6ca806ce69d2892ae51c7530b6d135624d7e27646a2095f0b01964736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(StakingContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/1cd2b9b7e5ad66f3c3d38570bfda3d8179997b02", + Code: "6080604052600436106102cd5760003560e01c806375aca59311610175578063b88a802f116100dc578063dc53fd7d11610095578063f45fd80b1161006f578063f45fd80b14610a6f578063f9a2bbc714610ab4578063fc3e590814610524578063fd6a687914610ac9576102d4565b8063dc53fd7d14610a30578063dc927faf14610a45578063edc1a5b014610a5a576102d4565b8063b88a802f1461090b578063bf8546ca14610920578063c81b16621461095b578063c8509d8114610970578063d61b9b93146109f5578063d7ecfcb6146106a2576102d4565b80639dc092621161012e5780639dc09262146107c3578063a1a11bf5146107d8578063a78abc16146107ed578063ab51bb9614610816578063ac4317511461082b578063b14315df146108f6576102d4565b806375aca593146106cc57806375d47a0a146106ff5780637942fd0514610714578063831d65d11461072957806392b888a41461050f57806396713da9146107ae576102d4565b8063493279b111610234578063603b7dfa116101ed5780636e47b482116101c75780636e47b4821461065a5780636fb7f7eb1461066f57806370fd5bad146106a2578063718a8aa8146106b7576102d4565b8063603b7dfa146105fa57806369b635b61461060f5780636bd8f80414610624576102d4565b8063493279b11461054e5780634bf6c8821461057a5780634d99dd161461058f57806351e80672146105bb5780635d499b1b146105d05780635ea8b2aa146105e5576102d4565b8063151817e311610286578063151817e3146104ba57806332ff00b8146104e5578063333ad3e7146104fa5780633dffc3871461050f5780633fdfa7e41461052457806343756e5c14610539576102d4565b8063026e402b146102d957806302985992146103075780630bee7a671461032e5780630e2374a51461035c5780631182b8751461038d57806311fe9ec614610487576102d4565b366102d457005b600080fd5b610305600480360360408110156102ef57600080fd5b506001600160a01b038135169060200135610ade565b005b34801561031357600080fd5b5061031c610f4d565b60408051918252519081900360200190f35b34801561033a57600080fd5b50610343610f53565b6040805163ffffffff9092168252519081900360200190f35b34801561036857600080fd5b50610371610f58565b604080516001600160a01b039092168252519081900360200190f35b34801561039957600080fd5b50610412600480360360408110156103b057600080fd5b60ff8235169190810190604081016020820135600160201b8111156103d457600080fd5b8201836020820111156103e657600080fd5b803590602001918460018302840111600160201b8311171561040757600080fd5b509092509050610f5e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561044c578181015183820152602001610434565b50505050905090810190601f1680156104795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049357600080fd5b5061031c600480360360208110156104aa57600080fd5b50356001600160a01b0316611109565b3480156104c657600080fd5b506104cf611128565b6040805160ff9092168252519081900360200190f35b3480156104f157600080fd5b5061031c61112d565b34801561050657600080fd5b50610343611138565b34801561051b57600080fd5b506104cf61113d565b34801561053057600080fd5b506104cf611142565b34801561054557600080fd5b50610371611147565b34801561055a57600080fd5b5061056361114d565b6040805161ffff9092168252519081900360200190f35b34801561058657600080fd5b506104cf611152565b610305600480360360408110156105a557600080fd5b506001600160a01b038135169060200135611157565b3480156105c757600080fd5b50610371611688565b3480156105dc57600080fd5b5061031c61168e565b3480156105f157600080fd5b5061031c611697565b34801561060657600080fd5b5061031c61169d565b34801561061b57600080fd5b5061031c6116a3565b6103056004803603606081101561063a57600080fd5b506001600160a01b038135811691602081013590911690604001356116a9565b34801561066657600080fd5b50610371611c90565b34801561067b57600080fd5b5061031c6004803603602081101561069257600080fd5b50356001600160a01b0316611c96565b3480156106ae57600080fd5b506104cf611cb1565b3480156106c357600080fd5b506104cf611cb6565b3480156106d857600080fd5b5061031c600480360360208110156106ef57600080fd5b50356001600160a01b0316611cbb565b34801561070b57600080fd5b50610371611cd6565b34801561072057600080fd5b506104cf611cdc565b34801561073557600080fd5b506103056004803603604081101561074c57600080fd5b60ff8235169190810190604081016020820135600160201b81111561077057600080fd5b82018360208201111561078257600080fd5b803590602001918460018302840111600160201b831117156107a357600080fd5b509092509050611ce1565b3480156107ba57600080fd5b506104cf611dfb565b3480156107cf57600080fd5b50610371611e00565b3480156107e457600080fd5b50610371611e06565b3480156107f957600080fd5b50610802611e0c565b604080519115158252519081900360200190f35b34801561082257600080fd5b50610343611e15565b34801561083757600080fd5b506103056004803603604081101561084e57600080fd5b810190602081018135600160201b81111561086857600080fd5b82018360208201111561087a57600080fd5b803590602001918460018302840111600160201b8311171561089b57600080fd5b919390929091602081019035600160201b8111156108b857600080fd5b8201836020820111156108ca57600080fd5b803590602001918460018302840111600160201b831117156108eb57600080fd5b509092509050611e1a565b34801561090257600080fd5b506104cf6121f7565b34801561091757600080fd5b5061031c6121fc565b34801561092c57600080fd5b5061031c6004803603604081101561094357600080fd5b506001600160a01b0381358116916020013516612330565b34801561096757600080fd5b5061037161235d565b34801561097c57600080fd5b506103056004803603604081101561099357600080fd5b60ff8235169190810190604081016020820135600160201b8111156109b757600080fd5b8201836020820111156109c957600080fd5b803590602001918460018302840111600160201b831117156109ea57600080fd5b509092509050612363565b348015610a0157600080fd5b5061031c60048036036040811015610a1857600080fd5b506001600160a01b0381358116916020013516612470565b348015610a3c57600080fd5b5061031c61249b565b348015610a5157600080fd5b506103716125d2565b348015610a6657600080fd5b5061031c6125d8565b348015610a7b57600080fd5b5061031c60048036036060811015610a9257600080fd5b506001600160a01b0381358116916020810135821691604090910135166125e5565b348015610ac057600080fd5b5061037161261a565b348015610ad557600080fd5b50610371612620565b806402540be4003406158015610af957506402540be4008106155b610b4a576040805162461bcd60e51b815260206004820152601c60248201527f707265636973696f6e206c6f737320696e20636f6e76657273696f6e00000000604482015290519081900360640190fd5b60005460ff16610b7c57661550f7dca70000600190815568056bc75e2d631000006002556000805460ff191690911790555b600254821015610bd3576040805162461bcd60e51b815260206004820152601760248201527f696e76616c69642064656c656761746520616d6f756e74000000000000000000604482015290519081900360640190fd5b600154610be790839063ffffffff61262616565b341015610c32576040805162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f756768206d73672076616c756560601b604482015290519081900360640190fd5b60405133906108fc9060009081818181818888f19350505050610c90576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b2103232b632b3b0ba37b960791b604482015290519081900360640190fd5b6000610ca7836402540be40063ffffffff61268716565b90506000610cbb348563ffffffff6126c916565b6040805160038082526080820190925291925060609190816020015b6060815260200190600190039081610cd7579050509050610cf73361270b565b81600081518110610d0457fe5b6020026020010181905250610d21866001600160a01b031661270b565b81600181518110610d2e57fe5b6020026020010181905250610d428361272e565b81600281518110610d4f57fe5b60200260200101819052506060610d6582612741565b905061200063f7a251d76010610d7c6001856127cb565b610d91876402540be40063ffffffff61268716565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015610def578181015183820152602001610dd7565b50505050905090810190601f168015610e1c5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610e3d57600080fd5b505af1158015610e51573d6000803e3d6000fd5b505060405161100492503480156108fc029250906000818181858888f19350505050158015610e84573d6000803e3d6000fd5b5033600090815260036020526040902054610ea5908763ffffffff61262616565b33600090815260036020908152604080832093909355600481528282206001600160a01b038b16835290522054610ee2908763ffffffff61262616565b3360008181526004602090815260408083206001600160a01b038d16808552908352928190209490945583518a8152908101879052835191937f5f32ed2794e2e72d19e3cb2320e8820a499c4204887372beba51f5e61c04086792918290030190a350505050505050565b60025481565b606481565b61200181565b60603361200014610fa05760405162461bcd60e51b815260040180806020018281038252602f8152602001806144a5602f913960400191505060405180910390fd5b60005460ff16610fd257661550f7dca70000600190815568056bc75e2d631000006002556000805460ff191690911790555b610fda6143ad565b61102161101c85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061285192505050565b612876565b90506000611036611031836128c0565b61290e565b90506000606060ff83166004141561105b57611051846129c5565b90925090506110b2565b60ff8316600514156110705761105184612b7d565b6040805162461bcd60e51b8152602060048201526012602482015271756e6b6e6f776e206576656e74207479706560701b604482015290519081900360640190fd5b63ffffffff8216156110fe576040805163ffffffff84168152905160ff8516917f391d6e5ea6ab6c49b9a0abb1782cae5def8d711f973b00c729658c0b2a80b31b919081900360200190a25b979650505050505050565b6001600160a01b0381166000908152600560205260409020545b919050565b600581565b661550f7dca7000081565b606581565b600181565b600381565b61100181565b606181565b600881565b806402540be400340615801561117257506402540be4008106155b6111c3576040805162461bcd60e51b815260206004820152601c60248201527f707265636973696f6e206c6f737320696e20636f6e76657273696f6e00000000604482015290519081900360640190fd5b60005460ff166111f557661550f7dca70000600190815568056bc75e2d631000006002556000805460ff191690911790555b600154341015611243576040805162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f7567682072656c61792066656560601b604482015290519081900360640190fd5b6002548210156112ff57600154821015611297576040805162461bcd60e51b815260206004820152601060248201526f6e6f7420656e6f7567682066756e647360801b604482015290519081900360640190fd5b3360009081526004602090815260408083206001600160a01b038716845290915290205482146112ff576040805162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b604482015290519081900360640190fd5b3360009081526006602090815260408083206001600160a01b0387168452909152902054421015611377576040805162461bcd60e51b815260206004820152601a60248201527f70656e64696e6720756e64656c65676174696f6e206578697374000000000000604482015290519081900360640190fd5b604080518082018252601081526f6e6f7420656e6f7567682066756e647360801b602080830191909152336000908152600482528381206001600160a01b038816825290915291909120546113d391849063ffffffff612d6316565b3360009081526004602090815260408083206001600160a01b038816845290915281209190915561140f836402540be40063ffffffff61268716565b604080516003808252608082019092529192503491606091816020015b606081526020019060019003908161142c57905050905061144c3361270b565b8160008151811061145957fe5b6020026020010181905250611476866001600160a01b031661270b565b8160018151811061148357fe5b60200260200101819052506114978361272e565b816002815181106114a457fe5b602002602001018190525060606114ba82612741565b905061200063f7a251d760106114d16002856127cb565b6114e6876402540be40063ffffffff61268716565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561154457818101518382015260200161152c565b50505050905090810190601f1680156115715780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561159257600080fd5b505af11580156115a6573d6000803e3d6000fd5b5050604051611004925085156108fc02915085906000818181858888f193505050501580156115d9573d6000803e3d6000fd5b50336000908152600360205260409020546115fa908763ffffffff6126c916565b3360009081526003602052604090205561161d42620a8c0063ffffffff61262616565b3360008181526006602090815260408083206001600160a01b038d16808552908352928190209490945583518a8152908101879052835191937fdf0b6ac27f3f3bb31cee3dab0f4fe40cc19c6a3f8daaec52e06b261e58a1251992918290030190a350505050505050565b61200081565b6402540be40081565b60015490565b60015481565b60025490565b806402540be40034061580156116c457506402540be4008106155b611715576040805162461bcd60e51b815260206004820152601c60248201527f707265636973696f6e206c6f737320696e20636f6e76657273696f6e00000000604482015290519081900360640190fd5b60005460ff1661174757661550f7dca70000600190815568056bc75e2d631000006002556000805460ff191690911790555b826001600160a01b0316846001600160a01b031614156117a5576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b2103932b232b632b3b0ba34b7b760611b604482015290519081900360640190fd5b6001543410156117f3576040805162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f7567682072656c61792066656560601b604482015290519081900360640190fd5b60025482101561183b576040805162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b604482015290519081900360640190fd5b3360009081526008602090815260408083206001600160a01b038881168552908352818420908716845290915290205442108015906118a957503360009081526008602090815260408083206001600160a01b03878116855290835281842090881684529091529020544210155b6118fa576040805162461bcd60e51b815260206004820152601a60248201527f70656e64696e6720726564656c65676174696f6e206578697374000000000000604482015290519081900360640190fd5b604080518082018252601081526f6e6f7420656e6f7567682066756e647360801b602080830191909152336000908152600482528381206001600160a01b0389168252909152919091205461195691849063ffffffff612d6316565b3360009081526004602090815260408083206001600160a01b03898116855292528083209390935585168152205461198e9083612626565b3360009081526004602090815260408083206001600160a01b03881684529091528120919091556119ca836402540be40063ffffffff61268716565b60408051600480825260a082019092529192503491606091816020015b60608152602001906001900390816119e7579050509050611a073361270b565b81600081518110611a1457fe5b6020026020010181905250611a31876001600160a01b031661270b565b81600181518110611a3e57fe5b6020026020010181905250611a5b866001600160a01b031661270b565b81600281518110611a6857fe5b6020026020010181905250611a7c8361272e565b81600381518110611a8957fe5b60200260200101819052506060611a9f82612741565b905061200063f7a251d76010611ab66003856127cb565b611acb876402540be40063ffffffff61268716565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611b29578181015183820152602001611b11565b50505050905090810190601f168015611b565780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611b7757600080fd5b505af1158015611b8b573d6000803e3d6000fd5b5050604051611004925085156108fc02915085906000818181858888f19350505050158015611bbe573d6000803e3d6000fd5b50611bd242620a8c0063ffffffff61262616565b3360009081526008602090815260408083206001600160a01b038d81168552908352818420908c168452909152902055611c1542620a8c0063ffffffff61262616565b3360008181526008602090815260408083206001600160a01b038d8116808652918452828520908f16808652908452938290209590955580518b815291820188905280519293927fdb0d03fdfcb145c486c442659e6a341a8828985505097cb5190afcf541e840159281900390910190a45050505050505050565b61100581565b6001600160a01b031660009081526003602052604090205490565b600281565b601081565b6001600160a01b031660009081526007602052604090205490565b61100881565b600b81565b3361200014611d215760405162461bcd60e51b815260040180806020018281038252602f8152602001806144a5602f913960400191505060405180910390fd5b60005460ff16611d5357661550f7dca70000600190815568056bc75e2d631000006002556000805460ff191690911790555b611d5b6143ad565b611d9d61101c84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061285192505050565b90506000611dad611031836128c0565b905060ff811660011415611dc957611dc482612dfa565b611df3565b60ff811660021415611dde57611dc4826130ab565b60ff81166003141561107057611dc482613278565b50505b505050565b600981565b61100781565b61100681565b60005460ff1681565b600081565b60005460ff16611e71576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b3361100714611eb15760405162461bcd60e51b815260040180806020018281038252602e815260200180614477602e913960400191505060405180910390fd5b611f1884848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601081526f6f7261636c6552656c6179657246656560801b602082015291506134839050565b15611fe35760208114611f5c5760405162461bcd60e51b81526004018080602001828103825260238152602001806143e86023913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091611f9a9185858083850183828082843760009201919091525061356a92505050565b905060008111611fdb5760405162461bcd60e51b815260040180806020018281038252602b81526020018061444c602b913960400191505060405180910390fd5b600155612165565b61204784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c36b4b72232b632b3b0ba34b7b760991b602082015291506134839050565b1561212857602081146120a1576040805162461bcd60e51b815260206004820181905260248201527f6c656e677468206f66206d696e44656c65676174696f6e206d69736d61746368604482015290519081900360640190fd5b604080516020601f84018190048102820181019092528281526000916120df9185858083850183828082843760009201919091525061356a92505050565b9050600081116121205760405162461bcd60e51b81526004018080602001828103825260288152602001806144d46028913960400191505060405180910390fd5b600255612165565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b600481565b60095460009060ff1615612248576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b6009805460ff19166001179055336000908152600560205260409020546122aa576040805162461bcd60e51b81526020600482015260116024820152701b9bc81c195b991a5b99c81c995dd85c99607a1b604482015290519081900360640190fd5b5033600081815260056020526040808220805490839055905190929183156108fc02918491818181858888f193505050501580156122ec573d6000803e3d6000fd5b5060408051828152905133917f83b78188b13346b2ffb484da70d42ee27de7fbf9f2bd8045269e10ed643ccd76919081900360200190a26009805460ff1916905590565b6001600160a01b038083166000908152600660209081526040808320938516835292905220545b92915050565b61100281565b33612000146123a35760405162461bcd60e51b815260040180806020018281038252602f8152602001806144a5602f913960400191505060405180910390fd5b60005460ff166123d557661550f7dca70000600190815568056bc75e2d631000006002556000805460ff191690911790555b6123dd6143ad565b61241f61101c84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061285192505050565b9050600061242f611031836128c0565b905060ff81166001141561244657611dc48261356f565b60ff81166002141561245b57611dc482613881565b60ff81166003141561107057611dc482613a5d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b60095460009060ff16156124e7576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b6009805460ff191660011790553360009081526007602052604090205461254c576040805162461bcd60e51b81526020600482015260146024820152736e6f20756e64656c6567617465642066756e647360601b604482015290519081900360640190fd5b5033600081815260076020526040808220805490839055905190929183156108fc02918491818181858888f1935050505015801561258e573d6000803e3d6000fd5b5060408051828152905133917fc712d133b8d448221aaed2198ed1f0db6dfc860fb01bc3a630916fe6cbef946f919081900360200190a26009805460ff1916905590565b61100381565b68056bc75e2d6310000081565b6001600160a01b0392831660009081526008602090815260408083209486168352938152838220929094168152925290205490565b61100081565b61100481565b600082820183811015612680576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600061268083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c7c565b600061268083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d63565b60408051600560a21b831860148201526034810190915260609061268081613ce1565b606061235761273c83613d37565b613ce1565b60608151600014156127625750604080516000815260208101909152611123565b60608260008151811061277157fe5b602002602001015190506000600190505b83518110156127b2576127a88285838151811061279b57fe5b6020026020010151613e1d565b9150600101612782565b506126806127c5825160c060ff16613e9a565b82613e1d565b6040805160028082526060828101909352829190816020015b60608152602001906001900390816127e45790505090506128078460ff1661272e565b8160008151811061281457fe5b602002602001018190525061282883613ce1565b8160018151811061283557fe5b602002602001018190525061284981612741565b949350505050565b6128596143cd565b506040805180820190915281518152602082810190820152919050565b61287e6143ad565b61288782613f92565b61289057600080fd5b600061289f8360200151613fcc565b60208085015160408051808201909152868152920190820152915050919050565b6128c86143cd565b6128d18261402f565b6128da57600080fd5b602082015160006128ea82614050565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061292357508151602110155b61292c57600080fd5b600061293b8360200151613fcc565b90508083600001511015612996576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b8251602080850151830180519284900392918310156129bc57826020036101000a820491505b50949350505050565b60006060818080805b6129d78761402f565b15612a2957826129f4576129ed611031886128c0565b9150612a1e565b8260011415612a1957612a0e612a09886128c0565b614183565b905060019350612a1e565b612a29565b6001909201916129ce565b83612a4957612a3c60048383606461419d565b9550955050505050612b78565b60006110046001600160a01b031663727be1f8846040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015612a9357600080fd5b505af1158015612aa7573d6000803e3d6000fd5b505050506040513d6020811015612abd57600080fd5b5051905080612ae257612ad460048484606561419d565b965096505050505050612b78565b6001600160a01b038216600090815260056020526040902054612b0b908463ffffffff61262616565b6001600160a01b038316600081815260056020908152604091829020939093558051868152905191927f7cc266c7b444f808013fa187f7b904d470a051a6564e78f482aa496581ba4bf892918290030190a260408051600080825260208201909252909750955050505050505b915091565b6000606081808080805b612b908861402f565b15612bf95783612bad57612ba6611031896128c0565b9250612bee565b8360011415612bc957612bc2612a09896128c0565b9150612bee565b8360021415612be957612bde612a09896128c0565b905060019450612bee565b612bf9565b600190930192612b87565b84612c0c57612ad460058484606461419d565b60006110046001600160a01b031663727be1f8856040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015612c5657600080fd5b505af1158015612c6a573d6000803e3d6000fd5b505050506040513d6020811015612c8057600080fd5b5051905080612ca657612c9760058585606561419d565b97509750505050505050612b78565b6001600160a01b038084166000818152600660209081526040808320948716835293815283822082905591815260079091522054612cea908563ffffffff61262616565b6001600160a01b0380851660008181526007602090815260409182902094909455805188815290519286169391927f35a799836f74fac7eccf5c73902823b970543d2274d3b93d8da3d37a255772a2929181900390910190a3604080516000808252602082019092529098509650505050505050915091565b60008184841115612df25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612db7578181015183820152602001612d9f565b50505050905090810190601f168015612de45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080808080805b612e0b8761402f565b15612e905784612e2857612e21612a09886128c0565b9350612e85565b8460011415612e4457612e3d612a09886128c0565b9250612e85565b8460021415612e6057612e59611031886128c0565b9150612e85565b8460031415612e8057612e75611031886128c0565b905060019550612e85565b612e90565b600190940193612e02565b85612ed0576040805162461bcd60e51b8152602060048201526019602482015260008051602061442c833981519152604482015290519081900360640190fd5b6110046001600160a01b031663727be1f8836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015612f1857600080fd5b505af1158015612f2c573d6000803e3d6000fd5b505050506040513d6020811015612f4257600080fd5b5051612f95576040805162461bcd60e51b815260206004820152601d60248201527f77697468647261772066726f6d20746f6b656e687562206661696c6564000000604482015290519081900360640190fd5b6001600160a01b038416600090815260036020526040902054612fbe908363ffffffff6126c916565b6001600160a01b038516600090815260036020908152604080832093909355600790522054612ff3908363ffffffff61262616565b6001600160a01b03808616600090815260076020908152604080832094909455600481528382209287168252919091522054613035908363ffffffff6126c916565b6001600160a01b0380861660008181526004602090815260408083209489168084529482529182902094909455805186815260ff8616948101949094528051929391927fe862e3b87b2ce4de4fd9b42999556eb59cc9b003d4e5d679c8b81c21ebf64bb79281900390910190a350505050505050565b600080808080805b6130bc8761402f565b1561314157846130d9576130d2612a09886128c0565b9350613136565b84600114156130f5576130ee612a09886128c0565b9250613136565b84600214156131115761310a611031886128c0565b9150613136565b846003141561313157613126611031886128c0565b905060019550613136565b613141565b6001909401936130b3565b85613181576040805162461bcd60e51b8152602060048201526019602482015260008051602061442c833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152600360205260409020546131aa908363ffffffff61262616565b6001600160a01b038086166000908152600360209081526040808320949094556004815283822092871682529190915220546131ec908363ffffffff61262616565b6001600160a01b0380861660008181526004602090815260408083209489168084529482528083209590955582825260068152848220848352815284822091909155835186815260ff8616918101919091528351929391927f21de59475d78c650de40e68e136b2d6e1906953cd59108f4a58894c292a94157929181900390910190a350505050505050565b60008080808080805b61328a8861402f565b1561332b57856132a7576132a0612a09896128c0565b9450613320565b85600114156132c3576132bc612a09896128c0565b9350613320565b85600214156132df576132d8612a09896128c0565b9250613320565b85600314156132fb576132f4611031896128c0565b9150613320565b856004141561331b57613310611031896128c0565b905060019650613320565b61332b565b600190950194613281565b8661336b576040805162461bcd60e51b8152602060048201526019602482015260008051602061442c833981519152604482015290519081900360640190fd5b6001600160a01b038086166000908152600460209081526040808320938816835292905220546133a1908363ffffffff61262616565b6001600160a01b038681166000908152600460209081526040808320898516845290915280822093909355908516815220546133dd90836126c9565b6001600160a01b0386811660008181526004602090815260408083208986168085529083528184209690965583835260088252808320948a168084528583528184208785528352818420849055948252808320858452825280832092909255815187815260ff87169181019190915281517f12838d6f098581b681955a1ba8bc8594cb8c8588a83d7a5375fc1b080a3fee20929181900390910190a45050505050505050565b6000816040516020018082805190602001908083835b602083106134b85780518252601f199092019160209182019101613499565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106135265780518252601f199092019160209182019101613507565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b6135776143ad565b6135808261402f565b156135a8576135a161101c61359c613597856128c0565b614299565b612851565b90506135ee565b6040805162461bcd60e51b8152602060048201526016602482015275656d707479206661696c2061636b207061636b61676560501b604482015290519081900360640190fd5b6000808080805b6135fe8661402f565b15613667578361361b57613614612a09876128c0565b925061365c565b836001141561363757613630612a09876128c0565b915061365c565b83600214156136575761364c611031876128c0565b90506001945061365c565b613667565b6001909301926135f5565b846136a7576040805162461bcd60e51b8152602060048201526019602482015260008051602061442c833981519152604482015290519081900360640190fd5b60006136be826402540be40063ffffffff61430916565b90506110046001600160a01b031663727be1f8826040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561370857600080fd5b505af115801561371c573d6000803e3d6000fd5b505050506040513d602081101561373257600080fd5b5051613785576040805162461bcd60e51b815260206004820152601d60248201527f77697468647261772066726f6d20746f6b656e687562206661696c6564000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600360205260409020546137ae908263ffffffff6126c916565b6001600160a01b0385166000908152600360209081526040808320939093556007905220546137e3908263ffffffff61262616565b6001600160a01b03808616600090815260076020908152604080832094909455600481528382209287168252919091522054613825908263ffffffff6126c916565b6001600160a01b038086166000908152600460209081526040808320938816835292905281812092909255516001917ff83de021914a4585482db5ca47d520a5657165b443fa2c7ef8ed4635f054da9b91a25050505050505050565b6138896143ad565b6138928261402f565b156135a8576138a961101c61359c613597856128c0565b90506000808080805b6138bb8661402f565b1561392457836138d8576138d1612a09876128c0565b9250613919565b83600114156138f4576138ed612a09876128c0565b9150613919565b836002141561391457613909611031876128c0565b905060019450613919565b613924565b6001909301926138b2565b84613964576040805162461bcd60e51b8152602060048201526019602482015260008051602061442c833981519152604482015290519081900360640190fd5b600061397b826402540be40063ffffffff61430916565b6001600160a01b0385166000908152600360205260409020549091506139a7908263ffffffff61262616565b6001600160a01b038086166000908152600360209081526040808320949094556004815283822092871682529190915220546139e9908263ffffffff61262616565b6001600160a01b038086166000818152600460209081526040808320948916808452948252808320959095559181526006825283812092815291905281812081905590516002917ff83de021914a4585482db5ca47d520a5657165b443fa2c7ef8ed4635f054da9b91a25050505050505050565b613a656143ad565b613a6e8261402f565b156135a857613a8561101c61359c613597856128c0565b9050600080808080805b613a988761402f565b15613b1d5784613ab557613aae612a09886128c0565b9350613b12565b8460011415613ad157613aca612a09886128c0565b9250613b12565b8460021415613aed57613ae6612a09886128c0565b9150613b12565b8460031415613b0d57613b02611031886128c0565b905060019550613b12565b613b1d565b600190940193613a8f565b85613b5d576040805162461bcd60e51b8152602060048201526019602482015260008051602061442c833981519152604482015290519081900360640190fd5b6000613b74826402540be40063ffffffff61430916565b6001600160a01b03808716600090815260046020908152604080832093891683529290522054909150613bad908263ffffffff61262616565b6001600160a01b03868116600090815260046020908152604080832089851684529091528082209390935590851681522054613be990826126c9565b6001600160a01b038681166000818152600460209081526040808320898616808552908352818420969096559282526008815282822093891680835284825283832095835294815282822082905592835281812093815292909152808220829055516003917ff83de021914a4585482db5ca47d520a5657165b443fa2c7ef8ed4635f054da9b91a2505050505050505050565b60008183613ccb5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612db7578181015183820152602001612d9f565b506000838581613cd757fe5b0495945050505050565b606081516001148015613d135750607f60f81b82600081518110613d0157fe5b01602001516001600160f81b03191611155b15613d1f575080611123565b612357613d318351608060ff16613e9a565b83613e1d565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416613d7b57506018613d9f565b6fffffffffffffffffffffffffffffffff198416613d9b57506010613d9f565b5060005b6020811015613dd557818181518110613db457fe5b01602001516001600160f81b03191615613dcd57613dd5565b600101613d9f565b60008160200390506060816040519080825280601f01601f191660200182016040528015613e0a576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b81831015613e4e578051835260209283019201613e36565b50855184518101855292509050808201602086015b81831015613e7b578051835260209283019201613e63565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613eea576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411613f445782840160f81b81600081518110613f2657fe5b60200101906001600160f81b031916908160001a9053509050612357565b6060613f4f85613d37565b90508381510160370160f81b82600081518110613f6857fe5b60200101906001600160f81b031916908160001a905350613f898282613e1d565b95945050505050565b8051600090613fa357506000611123565b6020820151805160001a9060c0821015613fc257600092505050611123565b5060019392505050565b8051600090811a6080811015613fe6576000915050611123565b60b8811080614001575060c08110801590614001575060f881105b15614010576001915050611123565b60c08110156140245760b519019050611123565b60f519019050611123565b60006140396143cd565b505080518051602091820151919092015191011190565b80516000908190811a608081101561406b576001915061417c565b60b881101561408057607e198101915061417c565b60c08110156140fa57600060b78203600186019550806020036101000a8651049150600181018201935050808310156140f4576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b5061417c565b60f881101561410f5760be198101915061417c565b600060f78203600186019550806020036101000a86510491506001810182019350508083101561417a576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b805160009060151461419457600080fd5b6123578261290e565b600060606141b6856402540be40063ffffffff61268716565b60408051600480825260a0820190925291965060609190816020015b60608152602001906001900390816141d25790505090506141f58760ff1661272e565b8160008151811061420257fe5b60200260200101819052506142168661272e565b8160018151811061422357fe5b6020026020010181905250614240856001600160a01b031661270b565b8160028151811061424d57fe5b60200260200101819052506142678463ffffffff1661272e565b8160038151811061427457fe5b6020026020010181905250606061428a82612741565b94989497509395505050505050565b80516060906142a757600080fd5b60006142b68360200151613fcc565b83516040805191839003808352601f19601f82011683016020019091529192506060908280156142ed576020820181803683370190505b50905060008160200190506129bc848760200151018285614362565b60008261431857506000612357565b8282028284828161432557fe5b04146126805760405162461bcd60e51b815260040180806020018281038252602181526020018061440b6021913960400191505060405180910390fd5b8061436c57611df6565b5b6020811061438c578251825260209283019290910190601f190161436d565b915181516020939093036101000a6000190180199091169216919091179052565b60405180604001604052806143c06143cd565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6c656e677468206f66206f7261636c6552656c61796572466565206d69736d61746368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77726c70206465636f6465207061636b616765206661696c656400000000000000746865206f7261636c6552656c61796572466565206d7573742062652067726561746572207468616e2030746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d696e44656c65676174696f6e206d7573742062652067726561746572207468616e2030a2646970667358221220a244ec56ca7bc88c41574e18a9e67cd028b999f28f65a1392f350ba2b644583a64736f6c63430006040033", + }, + }, + } + + gibbsUpgrade[rialtoNet] = &Upgrade{ + UpgradeName: "gibbs", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(TokenHubContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/1cd2b9b7e5ad66f3c3d38570bfda3d8179997b02", + Code: "60806040526004361061036f5760003560e01c80639a854bbd116101c6578063bd466461116100f7578063f014847211610095578063fc1a598f1161006f578063fc1a598f14610d58578063fc3e590814610a3b578063fd6a687914610d8b578063ff9c0027146106ec576103b7565b8063f014847214610d19578063f9a2bbc714610d2e578063fa9e915914610d43576103b7565b8063d9e6dae9116100d1578063d9e6dae91461066e578063dc927faf14610cda578063e1c7392a14610cef578063ebf71d5314610d04576103b7565b8063bd46646114610c0d578063c81b166214610c40578063c8509d8114610c55576103b7565b8063aa7415f511610164578063b99328c51161013e578063b99328c514610b77578063b9fd21e314610bb0578063ba35ead614610bc5578063bbface1f14610bda576103b7565b8063aa7415f514610a50578063ab51bb9614610a97578063ac43175114610aac576103b7565b8063a1a11bf5116101a0578063a1a11bf5146109fc578063a496fba214610a11578063a78abc1614610a26578063a7c9f02d14610a3b576103b7565b80639a854bbd146109995780639a99b4f0146109ae5780639dc09262146109e7576103b7565b806361368475116102a0578063727be1f81161023e578063831d65d111610218578063831d65d1146108c05780638b87b21f146105ed5780638eff336c1461094557806396713da914610984576103b7565b8063727be1f81461086c57806375d47a0a146108965780637942fd05146108ab576103b7565b80636e47b4821161027a5780636e47b4821461082d57806370fd5bad146106ec578063718a8aa81461084257806371d3086314610857576103b7565b8063613684751461066e57806366dea52a146106ec5780636e05652014610701576103b7565b806343a368b91161030d57806350432d32116102e757806350432d321461068357806351e806721461069857806359b92789146106ad5780635d499b1b146106d7576103b7565b806343a368b91461062d578063493279b1146106425780634bf6c8821461066e576103b7565b8063149d14d911610349578063149d14d9146105155780633d7132231461053c5780633dffc387146105ed57806343756e5c14610618576103b7565b80630bee7a67146103bc5780630e2374a5146103ea5780631182b8751461041b576103b7565b366103b75734156103b5576040805133815234602082015281517f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db929181900390910190a15b005b600080fd5b3480156103c857600080fd5b506103d1610da0565b6040805163ffffffff9092168252519081900360200190f35b3480156103f657600080fd5b506103ff610da5565b604080516001600160a01b039092168252519081900360200190f35b34801561042757600080fd5b506104a06004803603604081101561043e57600080fd5b60ff8235169190810190604081016020820135600160201b81111561046257600080fd5b82018360208201111561047457600080fd5b803590602001918460018302840111600160201b8311171561049557600080fd5b509092509050610dab565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104da5781810151838201526020016104c2565b50505050905090810190601f1680156105075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561052157600080fd5b5061052a610ed9565b60408051918252519081900360200190f35b34801561054857600080fd5b506103ff6004803603602081101561055f57600080fd5b810190602081018135600160201b81111561057957600080fd5b82018360208201111561058b57600080fd5b803590602001918460018302840111600160201b831117156105ac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610edf945050505050565b3480156105f957600080fd5b50610602610f03565b6040805160ff9092168252519081900360200190f35b34801561062457600080fd5b506103ff610f08565b34801561063957600080fd5b5061052a610f0e565b34801561064e57600080fd5b50610657610f1a565b6040805161ffff9092168252519081900360200190f35b34801561067a57600080fd5b50610602610f20565b34801561068f57600080fd5b5061052a610f25565b3480156106a457600080fd5b506103ff610f30565b3480156106b957600080fd5b506103ff600480360360208110156106d057600080fd5b5035610f36565b3480156106e357600080fd5b5061052a610f51565b3480156106f857600080fd5b50610602610f5a565b6108196004803603608081101561071757600080fd5b810190602081018135600160201b81111561073157600080fd5b82018360208201111561074357600080fd5b803590602001918460208302840111600160201b8311171561076457600080fd5b919390929091602081019035600160201b81111561078157600080fd5b82018360208201111561079357600080fd5b803590602001918460208302840111600160201b831117156107b457600080fd5b919390929091602081019035600160201b8111156107d157600080fd5b8201836020820111156107e357600080fd5b803590602001918460208302840111600160201b8311171561080457600080fd5b91935091503567ffffffffffffffff16610f5f565b604080519115158252519081900360200190f35b34801561083957600080fd5b506103ff611434565b34801561084e57600080fd5b5061060261143a565b34801561086357600080fd5b5061052a61143f565b34801561087857600080fd5b506108196004803603602081101561088f57600080fd5b5035611445565b3480156108a257600080fd5b506103ff6114bf565b3480156108b757600080fd5b506106026114c5565b3480156108cc57600080fd5b506103b5600480360360408110156108e357600080fd5b60ff8235169190810190604081016020820135600160201b81111561090757600080fd5b82018360208201111561091957600080fd5b803590602001918460018302840111600160201b8311171561093a57600080fd5b5090925090506114ca565b34801561095157600080fd5b506103b56004803603606081101561096857600080fd5b508035906001600160a01b036020820135169060400135611613565b34801561099057600080fd5b50610602611699565b3480156109a557600080fd5b5061052a61169e565b3480156109ba57600080fd5b5061052a600480360360408110156109d157600080fd5b506001600160a01b0381351690602001356116aa565b3480156109f357600080fd5b506103ff6117e8565b348015610a0857600080fd5b506103ff6117ee565b348015610a1d57600080fd5b506106026117f4565b348015610a3257600080fd5b506108196117f9565b348015610a4757600080fd5b50610602611802565b61081960048036036080811015610a6657600080fd5b5080356001600160a01b03908116916020810135909116906040810135906060013567ffffffffffffffff16611807565b348015610aa357600080fd5b506103d16117f4565b348015610ab857600080fd5b506103b560048036036040811015610acf57600080fd5b810190602081018135600160201b811115610ae957600080fd5b820183602082011115610afb57600080fd5b803590602001918460018302840111600160201b83111715610b1c57600080fd5b919390929091602081019035600160201b811115610b3957600080fd5b820183602082011115610b4b57600080fd5b803590602001918460018302840111600160201b83111715610b6c57600080fd5b509092509050611ec8565b348015610b8357600080fd5b506103b560048036036040811015610b9a57600080fd5b50803590602001356001600160a01b0316612137565b348015610bbc57600080fd5b5061052a6121ad565b348015610bd157600080fd5b5061052a6121b7565b348015610be657600080fd5b5061052a60048036036020811015610bfd57600080fd5b50356001600160a01b03166121bd565b348015610c1957600080fd5b5061052a60048036036020811015610c3057600080fd5b50356001600160a01b03166121cf565b348015610c4c57600080fd5b506103ff6121ea565b348015610c6157600080fd5b506103b560048036036040811015610c7857600080fd5b60ff8235169190810190604081016020820135600160201b811115610c9c57600080fd5b820183602082011115610cae57600080fd5b803590602001918460018302840111600160201b83111715610ccf57600080fd5b5090925090506121f0565b348015610ce657600080fd5b506103ff6122c0565b348015610cfb57600080fd5b506103b56122c6565b348015610d1057600080fd5b50610602612366565b348015610d2557600080fd5b5061060261236b565b348015610d3a57600080fd5b506103ff612370565b348015610d4f57600080fd5b5061052a612376565b348015610d6457600080fd5b506104a060048036036020811015610d7b57600080fd5b50356001600160a01b031661237c565b348015610d9757600080fd5b506103ff6124a3565b606481565b61200181565b60005460609060ff16610df3576040805162461bcd60e51b81526020600482015260196024820152600080516020614906833981519152604482015290519081900360640190fd5b3361200014610e335760405162461bcd60e51b815260040180806020018281038252602f8152602001806148b4602f913960400191505060405180910390fd5b60ff841660021415610e8557610e7e83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506124a992505050565b9050610ed2565b6040805162461bcd60e51b815260206004820152601860248201527f756e7265636f676e697a65642073796e207061636b6167650000000000000000604482015290519081900360640190fd5b9392505050565b60015490565b6020818101516000908152600490915260409020546001600160a01b03165b919050565b600181565b61100181565b670de0b6b3a764000081565b6102ca81565b600881565b66071afd498d000081565b61200081565b6000908152600460205260409020546001600160a01b031690565b6402540be40081565b600281565b6000805460ff16610fa5576040805162461bcd60e51b81526020600482015260196024820152600080516020614906833981519152604482015290519081900360640190fd5b868514610fe35760405162461bcd60e51b815260040180806020018281038252603b815260200180614879603b913960400191505060405180910390fd5b8683146110215760405162461bcd60e51b815260040180806020018281038252603f81526020018061474c603f913960400191505060405180910390fd5b426078018267ffffffffffffffff16101561106d5760405162461bcd60e51b815260040180806020018281038252602481526020018061463c6024913960400191505060405180910390fd5b6402540be4003406156110b15760405162461bcd60e51b815260040180806020018281038252604081526020018061497c6040913960400191505060405180910390fd5b604080518681526020808802820101909152859060009081906060908480156110e4578160200160208202803683370190505b50905060005b848110156111bf576402540be4008b8b8381811061110457fe5b905060200201358161111257fe5b061561114f5760405162461bcd60e51b815260040180806020018281038252603c81526020018061478b603c913960400191505060405180910390fd5b6111748b8b8381811061115e57fe5b90506020020135856125cd90919063ffffffff16565b93506111a06402540be4008c8c8481811061118b57fe5b9050602002013561262790919063ffffffff16565b8282815181106111ac57fe5b60209081029190910101526001016110ea565b506001546111e4906111d7908663ffffffff61266916565b849063ffffffff6125cd16565b3410156112225760405162461bcd60e51b81526004018080602001828103825260568152602001806149266056913960600191505060405180910390fd5b611232348463ffffffff6126c216565b915061123c614462565b6040518060c001604052806221272160e91b60001b815260200160006001600160a01b031681526020018381526020018e8e808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d91829185019084908082843760009201919091525050509082525067ffffffffffffffff8916602090910152905061200063f7a251d7600361130084612704565b611315876402540be40063ffffffff61262716565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561137357818101518382015260200161135b565b50505050905090810190601f1680156113a05780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156113c157600080fd5b505af11580156113d5573d6000803e3d6000fd5b505060408051600081523360208201528082018890526060810187905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a15060019c9b505050505050505050505050565b61100581565b601081565b60015481565b600033612001146114875760405162461bcd60e51b815260040180806020018281038252603381526020018061457c6033913960400191505060405180910390fd5b6040516120019083156108fc029084906000818181858888f193505050501580156114b6573d6000803e3d6000fd5b50600192915050565b61100881565b600b81565b60005460ff1661150f576040805162461bcd60e51b81526020600482015260196024820152600080516020614906833981519152604482015290519081900360640190fd5b336120001461154f5760405162461bcd60e51b815260040180806020018281038252602f8152602001806148b4602f913960400191505060405180910390fd5b60ff83166003141561159f5761159a82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129bf92505050565b61160e565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b33611008146116535760405162461bcd60e51b81526004018080602001828103825260238152602001806148e36023913960400191505060405180910390fd5b600083815260046020908152604080832080546001600160a01b039096166001600160a01b03199096168617905593825260038152838220949094556002909352912055565b600981565b677ce66c50e284000081565b6000805460ff166116f0576040805162461bcd60e51b81526020600482015260196024820152600080516020614906833981519152604482015290519081900360640190fd5b33611005146117305760405162461bcd60e51b815260040180806020018281038252602f8152602001806145af602f913960400191505060405180910390fd5b600047831061173f5747611741565b825b9050670de0b6b3a764000081111561175d5760009150506117e2565b80156117df576040516001600160a01b0385169082156108fc029083906000818181858888f19350505050158015611799573d6000803e3d6000fd5b50604080516001600160a01b03861681526020810183905281517ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0929181900390910190a15b90505b92915050565b61100781565b61100681565b600081565b60005460ff1681565b600381565b6000805460ff1661184d576040805162461bcd60e51b81526020600482015260196024820152600080516020614906833981519152604482015290519081900360640190fd5b426078018267ffffffffffffffff1610156118995760405162461bcd60e51b815260040180806020018281038252602481526020018061463c6024913960400191505060405180910390fd5b6402540be4003406156118dd5760405162461bcd60e51b815260040180806020018281038252604081526020018061497c6040913960400191505060405180910390fd5b600080806001600160a01b0388166119bc5760015461190390879063ffffffff6125cd16565b3410156119415760405162461bcd60e51b81526004018080602001828103825260618152602001806146c66061913960800191505060405180910390fd5b6402540be4008606156119855760405162461bcd60e51b815260040180806020018281038252603c81526020018061478b603c913960400191505060405180910390fd5b611995348763ffffffff6126c216565b90506119ac866402540be40063ffffffff61262716565b6221272160e91b93509150611c5f565b6001600160a01b038816600090815260036020526040902054925082611a135760405162461bcd60e51b81526004018080602001828103825260318152602001806146956031913960400191505060405180910390fd5b600154341015611a545760405162461bcd60e51b815260040180806020018281038252603f8152602001806147e8603f913960400191505060405180910390fd5b506001600160a01b0387166000908152600260205260409020543490600881111580611a9f5750600881118015611a9f5750611a9d876007198301600a0a63ffffffff612a1b16565b155b611ada5760405162461bcd60e51b815260040180806020018281038252603c81526020018061478b603c913960400191505060405180910390fd5b611ae48782612a5d565b9250611aef84612a9d565b15611b37576305f5e100831015611b375760405162461bcd60e51b815260040180806020018281038252603a8152602001806145de603a913960400191505060405180910390fd5b600881101580611b515750600881108015611b5157508683115b611b8c5760405162461bcd60e51b81526004018080602001828103825260258152602001806147276025913960400191505060405180910390fd5b677ce66c50e2840000831115611bd35760405162461bcd60e51b81526004018080602001828103825260358152602001806146606035913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810189905290516001600160a01b038b16916323b872dd9160648083019260209291908290030181600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b505050506040513d6020811015611c5257600080fd5b5051611c5d57600080fd5b505b611c67614462565b6040805160c0810182528581526001600160a01b038b166020820152815160018082528184018452919283019181602001602082028036833750505081526040805160018082528183019092526020928301929091908083019080368337505050815260408051600180825281830190925260209283019290919080830190803683370190505081526020018767ffffffffffffffff168152509050828160400151600081518110611d1557fe5b602002602001018181525050878160600151600081518110611d3357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050338160800151600081518110611d6557fe5b6001600160a01b039092166020928302919091019091015261200063f7a251d76003611d9084612704565b611da5866402540be40063ffffffff61262716565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611e03578181015183820152602001611deb565b50505050905090810190601f168015611e305780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611e5157600080fd5b505af1158015611e65573d6000803e3d6000fd5b5050604080516001600160a01b038d1681523360208201528082018b90526060810186905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a150600198975050505050505050565b3361100714611f085760405162461bcd60e51b815260040180806020018281038252602e815260200180614827602e913960400191505060405180910390fd5b60208114611f5d576040805162461bcd60e51b815260206004820152601b60248201527f65787065637465642076616c7565206c656e6774682069732033320000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8801819004810282018101909252868152939450606093925086915085908190840183828082843760009201919091525050505060208301519091506772656c617946656560c01b811415612065576020820151670de0b6b3a7640000811180159061200c57506402540be4008106155b61205d576040805162461bcd60e51b815260206004820152601960248201527f7468652072656c6179466565206f7574206f662072616e676500000000000000604482015290519081900360640190fd5b6001556120a2565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b33611008146121775760405162461bcd60e51b81526004018080602001828103825260238152602001806148e36023913960400191505060405180910390fd5b600091825260046020908152604080842080546001600160a01b03191690556001600160a01b0392909216835260039052812055565b6221272160e91b81565b61c35081565b60026020526000908152604090205481565b6001600160a01b031660009081526003602052604090205490565b61100281565b60005460ff16612235576040805162461bcd60e51b81526020600482015260196024820152600080516020614906833981519152604482015290519081900360640190fd5b33612000146122755760405162461bcd60e51b815260040180806020018281038252602f8152602001806148b4602f913960400191505060405180910390fd5b60ff83166003141561159f5761159a82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ba392505050565b61100381565b60005460ff161561231e576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b66071afd498d000060019081556000808052600260205260127fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55805460ff19169091179055565b600481565b600581565b61100081565b61271081565b6001600160a01b03811660009081526003602090815260409182902054825182815280840190935260609290918391906020820181803683375050506020810183905290506000805b60208160ff16101561240c57828160ff16815181106123e057fe5b01602001516001600160f81b031916156123ff57600190910190612404565b61240c565b6001016123c5565b5060608160ff166040519080825280601f01601f19166020018201604052801561243d576020820181803683370190505b50905060005b8260ff168160ff16101561249957838160ff168151811061246057fe5b602001015160f81c60f81b828260ff168151811061247a57fe5b60200101906001600160f81b031916908160001a905350600101612443565b5095945050505050565b61100481565b60606124b36144ae565b60006124be84612ca1565b9150915080612514576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b600061251f83612de0565b905063ffffffff8116156125b3576040808401516020808601516001600160a01b0316600090815260029091529182205461255a9190612a5d565b90506125646144e3565b60405180608001604052808660000151815260200183815260200186608001516001600160a01b031681526020018463ffffffff1681525090506125a78161312d565b95505050505050610efe565b50506040805160008152602081019091529150610efe9050565b6000828201838110156117df576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006117df83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613209565b600082612678575060006117e2565b8282028284828161268557fe5b04146117df5760405162461bcd60e51b81526004018080602001828103825260218152602001806147c76021913960400191505060405180910390fd5b60006117df83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132ab565b60408051600680825260e08201909252606091829190816020015b606081526020019060019003908161271f575050835190915061274190613305565b8160008151811061274e57fe5b602002602001018190525061276f83602001516001600160a01b0316613318565b8160018151811061277c57fe5b6020026020010181905250600083604001515190506060816040519080825280602002602001820160405280156127c757816020015b60608152602001906001900390816127b25790505b50905060005b82811015612814576127f5866040015182815181106127e857fe5b6020026020010151613305565b82828151811061280157fe5b60209081029190910101526001016127cd565b5061281e8161333b565b8360028151811061282b57fe5b602002602001018190525060608260405190808252806020026020018201604052801561286c57816020015b60608152602001906001900390816128575790505b50905060005b838110156128c2576128a38760600151828151811061288d57fe5b60200260200101516001600160a01b0316613318565b8282815181106128af57fe5b6020908102919091010152600101612872565b506128cc8161333b565b846003815181106128d957fe5b602002602001018190525060608360405190808252806020026020018201604052801561291a57816020015b60608152602001906001900390816129055790505b50905060005b8481101561295a5761293b8860800151828151811061288d57fe5b82828151811061294757fe5b6020908102919091010152600101612920565b506129648161333b565b8560048151811061297157fe5b60200260200101819052506129938760a0015167ffffffffffffffff16613305565b856005815181106129a057fe5b60200260200101819052506129b48561333b565b979650505050505050565b6129c761450a565b60006129d2836133c5565b9150915080612a125760405162461bcd60e51b81526004018080602001828103825260248152602001806148556024913960400191505060405180910390fd5b61160e82613590565b60006117df83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250613a14565b60006008821115612a8657612a7f836007198401600a0a63ffffffff61262716565b90506117e2565b6117df836008849003600a0a63ffffffff61266916565b604080516020808252818301909252600091606091906020820181803683375050506020810184905290506000805b60208160ff161015612b1357828160ff1681518110612ae757fe5b01602001516001600160f81b03191615612b0657600190910190612b0b565b612b13565b600101612acc565b50600760ff82161015612b2b57600092505050610efe565b816005820360ff1681518110612b3d57fe5b6020910101516001600160f81b031916602d60f81b14612b6257600092505050610efe565b816001820360ff1681518110612b7457fe5b6020910101516001600160f81b031916604d60f81b14612b9957600092505050610efe565b5060019392505050565b612bab614462565b6000612bb683613a76565b9150915080612bf65760405162461bcd60e51b81526004018080602001828103825260248152602001806146186024913960400191505060405180910390fd5b612bfe61450a565b602080840180516001600160a01b0390811684526040808701518585015291511660009081526002909252812054905b846040015151811015612c7f57612c5c85604001518281518110612c4e57fe5b602002602001015183613cda565b85604001518281518110612c6c57fe5b6020908102919091010152600101612c2e565b506080840151604083015260056060830152612c9a82613590565b5050505050565b612ca96144ae565b6000612cb36144ae565b612cbb614541565b612ccc612cc786613d13565b613d38565b90506000805b612cdb83613d82565b15612dd35780612cfd57612cf6612cf184613da3565b613df1565b8452612dcb565b8060011415612d2a57612d17612d1284613da3565b613ea8565b6001600160a01b03166020850152612dcb565b8060021415612d4957612d3f612cf184613da3565b6040850152612dcb565b8060031415612d7157612d5e612d1284613da3565b6001600160a01b03166060850152612dcb565b8060041415612d9957612d86612d1284613da3565b6001600160a01b03166080850152612dcb565b8060051415612dc657612dae612cf184613da3565b67ffffffffffffffff1660a085015260019150612dcb565b612dd3565b600101612cd2565b5091935090915050915091565b60208101516000906001600160a01b0316612f17578160a0015167ffffffffffffffff16421115612e1357506001610efe565b8160400151471015612e2757506003610efe565b606082015160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d8060008114612e7e576040519150601f19603f3d011682016040523d82523d6000602084013e612e83565b606091505b5050905080612e96575060049050610efe565b7f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5983602001518460600151856040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009050610efe565b8160a0015167ffffffffffffffff16421115612f3557506001610efe565b81516020808401516001600160a01b031660009081526003909152604090205414612f6257506002610efe565b602080830151604080516370a0823160e01b815230600482015290516000936001600160a01b03909316926370a082319261c3509260248083019392829003018187803b158015612fb257600080fd5b5086fa158015612fc6573d6000803e3d6000fd5b50505050506040513d6020811015612fdd57600080fd5b50516040840151909150811015612ff8575060039050610efe565b600083602001516001600160a01b031663a9059cbb61c350866060015187604001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b15801561306957600080fd5b5087f115801561307d573d6000803e3d6000fd5b50505050506040513d602081101561309457600080fd5b505190508015613121577f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5984602001518560600151866040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060009150610efe9050565b5060059150610efe9050565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081613148575050835190915061316a90613305565b8160008151811061317757fe5b602002602001018190525061318f8360200151613305565b8160018151811061319c57fe5b60200260200101819052506131bd83604001516001600160a01b0316613318565b816002815181106131ca57fe5b60200260200101819052506131e8836060015163ffffffff16613305565b816003815181106131f557fe5b6020026020010181905250610ed28161333b565b600081836132955760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561325a578181015183820152602001613242565b50505050905090810190601f1680156132875780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816132a157fe5b0495945050505050565b600081848411156132fd5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561325a578181015183820152602001613242565b505050900390565b60606117e261331383613ec2565b613fa8565b60408051600560a21b8318601482015260348101909152606090610ed281613fa8565b606081516000141561335c5750604080516000815260208101909152610efe565b60608260008151811061336b57fe5b602002602001015190506000600190505b83518110156133ac576133a28285838151811061339557fe5b6020026020010151613ffa565b915060010161337c565b50610ed26133bf825160c060ff16614077565b82613ffa565b6133cd61450a565b60006133d761450a565b6133df614541565b6133eb612cc786613d13565b90506000805b6133fa83613d82565b15612dd3578061342057613410612d1284613da3565b6001600160a01b03168452613588565b80600114156134c157606061343c61343785613da3565b61416f565b90508051604051908082528060200260200182016040528015613469578160200160208202803683370190505b50602086015260005b81518110156134ba5761349782828151811061348a57fe5b6020026020010151613df1565b866020015182815181106134a757fe5b6020908102919091010152600101613472565b5050613588565b80600214156135635760606134d861343785613da3565b90508051604051908082528060200260200182016040528015613505578160200160208202803683370190505b50604086015260005b81518110156134ba5761353382828151811061352657fe5b6020026020010151613ea8565b8660400151828151811061354357fe5b6001600160a01b039092166020928302919091019091015260010161350e565b8060031415612dc657613578612cf184613da3565b63ffffffff166060850152600191505b6001016133f1565b80516001600160a01b03166137ba5760005b8160200151518110156137b4576000826040015182815181106135c157fe5b60200260200101516001600160a01b0316612710846020015184815181106135e557fe5b60209081029190910101516040516000818181858888f193505050503d806000811461362d576040519150601f19603f3d011682016040523d82523d6000602084013e613632565b606091505b50509050806136f5577f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061367157fe5b60200260200101518560200151858151811061368957fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a16137ab565b7fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a83600001518460400151848151811061372b57fe5b60200260200101518560200151858151811061374357fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b506001016135a2565b50613a11565b60005b816020015151811015613a0f57600082600001516001600160a01b031663a9059cbb61c350856040015185815181106137f257fe5b60200260200101518660200151868151811061380a57fe5b60200260200101516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b15801561386157600080fd5b5087f1158015613875573d6000803e3d6000fd5b50505050506040513d602081101561388c57600080fd5b505190508015613950577fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a8360000151846040015184815181106138cc57fe5b6020026020010151856020015185815181106138e457fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a1613a06565b7f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061398657fe5b60200260200101518560200151858151811061399e57fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b506001016137bd565b505b50565b60008183613a635760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561325a578181015183820152602001613242565b50828481613a6d57fe5b06949350505050565b613a7e614462565b6000613a88614462565b613a90614541565b613a9c612cc786613d13565b90506000805b613aab83613d82565b15612dd35780613ac857613ac1612cf184613da3565b8452613cd2565b8060011415613af057613add612d1284613da3565b6001600160a01b03166020850152613cd2565b8060021415613b7f576060613b0761343785613da3565b90508051604051908082528060200260200182016040528015613b34578160200160208202803683370190505b50604086015260005b8151811015613b7857613b5582828151811061348a57fe5b86604001518281518110613b6557fe5b6020908102919091010152600101613b3d565b5050613cd2565b8060031415613c14576060613b9661343785613da3565b90508051604051908082528060200260200182016040528015613bc3578160200160208202803683370190505b50606086015260005b8151811015613b7857613be482828151811061352657fe5b86606001518281518110613bf457fe5b6001600160a01b0390921660209283029190910190910152600101613bcc565b8060041415613ca9576060613c2b61343785613da3565b90508051604051908082528060200260200182016040528015613c58578160200160208202803683370190505b50608086015260005b8151811015613b7857613c7982828151811061352657fe5b86608001518281518110613c8957fe5b6001600160a01b0390921660209283029190910190910152600101613c61565b8060051415612dc657613cbe612cf184613da3565b67ffffffffffffffff1660a0850152600191505b600101613aa2565b60006008821115613cfc57612a7f836007198401600a0a63ffffffff61266916565b6117df836008849003600a0a63ffffffff61262716565b613d1b614561565b506040805180820190915281518152602082810190820152919050565b613d40614541565b613d4982614240565b613d5257600080fd5b6000613d618360200151614270565b60208085015160408051808201909152868152920190820152915050919050565b6000613d8c614561565b505080518051602091820151919092015191011190565b613dab614561565b613db482613d82565b613dbd57600080fd5b60208201516000613dcd826142d3565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590613e0657508151602110155b613e0f57600080fd5b6000613e1e8360200151614270565b90508083600001511015613e79576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015613e9f57826020036101000a820491505b50949350505050565b8051600090601514613eb957600080fd5b6117e282613df1565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416613f0657506018613f2a565b6fffffffffffffffffffffffffffffffff198416613f2657506010613f2a565b5060005b6020811015613f6057818181518110613f3f57fe5b01602001516001600160f81b03191615613f5857613f60565b600101613f2a565b60008160200390506060816040519080825280601f01601f191660200182016040528015613f95576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015613fda5750607f60f81b82600081518110613fc857fe5b01602001516001600160f81b03191611155b15613fe6575080610efe565b6117e2613ff88351608060ff16614077565b835b6060806040519050835180825260208201818101602087015b8183101561402b578051835260209283019201614013565b50855184518101855292509050808201602086015b81831015614058578051835260209283019201614040565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106140c7576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b604080516001808252818301909252606091602082018180368337019050509050603784116141215782840160f81b8160008151811061410357fe5b60200101906001600160f81b031916908160001a90535090506117e2565b606061412c85613ec2565b90508381510160370160f81b8260008151811061414557fe5b60200101906001600160f81b031916908160001a9053506141668282613ffa565b95945050505050565b606061417a82614240565b61418357600080fd5b600061418e83614406565b90506060816040519080825280602002602001820160405280156141cc57816020015b6141b9614561565b8152602001906001900390816141b15790505b50905060006141de8560200151614270565b60208601510190506000805b84811015614235576141fb836142d3565b915060405180604001604052808381526020018481525084828151811061421e57fe5b6020908102919091010152918101916001016141ea565b509195945050505050565b805160009061425157506000610efe565b6020820151805160001a9060c0821015612b9957600092505050610efe565b8051600090811a608081101561428a576000915050610efe565b60b88110806142a5575060c081108015906142a5575060f881105b156142b4576001915050610efe565b60c08110156142c85760b519019050610efe565b60f519019050610efe565b80516000908190811a60808110156142ee57600191506143ff565b60b881101561430357607e19810191506143ff565b60c081101561437d57600060b78203600186019550806020036101000a865104915060018101820193505080831015614377576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b506143ff565b60f88110156143925760be19810191506143ff565b600060f78203600186019550806020036101000a8651049150600181018201935050808310156143fd576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b805160009061441757506000610efe565b6000809050600061442b8460200151614270565b602085015185519181019250015b808210156144595761444a826142d3565b60019093019290910190614439565b50909392505050565b6040518060c001604052806000801916815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600067ffffffffffffffff1681525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600063ffffffff1681525090565b6040518060400160405280614554614561565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6f6e6c79207374616b696e672073797374656d20636f6e74726163742063616e2063616c6c20746869732066756e6374696f6e746865206d6573736167652073656e646572206d75737420626520696e63656e746976697a6520636f6e7472616374466f72206d696e69546f6b656e2c20746865207472616e7366657220616d6f756e74206d757374206e6f74206265206c657373207468616e2031756e7265636f676e697a6564207472616e736665724f75742073796e207061636b61676565787069726554696d65206d7573742062652074776f206d696e75746573206c61746572616d6f756e7420697320746f6f206c617267652c20657863656564206d6178696d756d206265703220746f6b656e20616d6f756e7474686520636f6e747261637420686173206e6f74206265656e20626f756e6420746f20616e79206265703220746f6b656e726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e736665724f757420424e4220616d6f756e7420616e64206d696e696d756d2072656c6179466565616d6f756e7420697320746f6f206c617267652c2075696e74323536206f766572666c6f774c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620726566756e644164647273696e76616c6964207472616e7366657220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e20746865206d696e696d756d2072656c6179466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374756e7265636f676e697a6564207472616e736665724f75742061636b207061636b6167654c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620616d6f756e7473746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d73672073656e646572206d75737420626520746f6b656e4d616e6167657274686520636f6e7472616374206e6f7420696e69742079657400000000000000726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e7366657220424e4220616d6f756e7420616e642072656c6179466565696e76616c696420726563656976656420424e4220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6ea26469706673582212208f0455128650f210f452673f65fe656f790624ecf0bc6bbea21225e02413b67564736f6c63430006040033", + }, + { + ContractAddr: common.HexToAddress(StakingContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/1cd2b9b7e5ad66f3c3d38570bfda3d8179997b02", + Code: "6080604052600436106102cd5760003560e01c806375aca59311610175578063b88a802f116100dc578063dc53fd7d11610095578063f45fd80b1161006f578063f45fd80b14610a6f578063f9a2bbc714610ab4578063fc3e590814610524578063fd6a687914610ac9576102d4565b8063dc53fd7d14610a30578063dc927faf14610a45578063edc1a5b014610a5a576102d4565b8063b88a802f1461090b578063bf8546ca14610920578063c81b16621461095b578063c8509d8114610970578063d61b9b93146109f5578063d7ecfcb6146106a2576102d4565b80639dc092621161012e5780639dc09262146107c3578063a1a11bf5146107d8578063a78abc16146107ed578063ab51bb9614610816578063ac4317511461082b578063b14315df146108f6576102d4565b806375aca593146106cc57806375d47a0a146106ff5780637942fd0514610714578063831d65d11461072957806392b888a41461050f57806396713da9146107ae576102d4565b8063493279b111610234578063603b7dfa116101ed5780636e47b482116101c75780636e47b4821461065a5780636fb7f7eb1461066f57806370fd5bad146106a2578063718a8aa8146106b7576102d4565b8063603b7dfa146105fa57806369b635b61461060f5780636bd8f80414610624576102d4565b8063493279b11461054e5780634bf6c8821461057a5780634d99dd161461058f57806351e80672146105bb5780635d499b1b146105d05780635ea8b2aa146105e5576102d4565b8063151817e311610286578063151817e3146104ba57806332ff00b8146104e5578063333ad3e7146104fa5780633dffc3871461050f5780633fdfa7e41461052457806343756e5c14610539576102d4565b8063026e402b146102d957806302985992146103075780630bee7a671461032e5780630e2374a51461035c5780631182b8751461038d57806311fe9ec614610487576102d4565b366102d457005b600080fd5b610305600480360360408110156102ef57600080fd5b506001600160a01b038135169060200135610ade565b005b34801561031357600080fd5b5061031c610f4d565b60408051918252519081900360200190f35b34801561033a57600080fd5b50610343610f53565b6040805163ffffffff9092168252519081900360200190f35b34801561036857600080fd5b50610371610f58565b604080516001600160a01b039092168252519081900360200190f35b34801561039957600080fd5b50610412600480360360408110156103b057600080fd5b60ff8235169190810190604081016020820135600160201b8111156103d457600080fd5b8201836020820111156103e657600080fd5b803590602001918460018302840111600160201b8311171561040757600080fd5b509092509050610f5e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561044c578181015183820152602001610434565b50505050905090810190601f1680156104795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049357600080fd5b5061031c600480360360208110156104aa57600080fd5b50356001600160a01b0316611109565b3480156104c657600080fd5b506104cf611128565b6040805160ff9092168252519081900360200190f35b3480156104f157600080fd5b5061031c61112d565b34801561050657600080fd5b50610343611138565b34801561051b57600080fd5b506104cf61113d565b34801561053057600080fd5b506104cf611142565b34801561054557600080fd5b50610371611147565b34801561055a57600080fd5b5061056361114d565b6040805161ffff9092168252519081900360200190f35b34801561058657600080fd5b506104cf611153565b610305600480360360408110156105a557600080fd5b506001600160a01b038135169060200135611158565b3480156105c757600080fd5b50610371611689565b3480156105dc57600080fd5b5061031c61168f565b3480156105f157600080fd5b5061031c611698565b34801561060657600080fd5b5061031c61169e565b34801561061b57600080fd5b5061031c6116a4565b6103056004803603606081101561063a57600080fd5b506001600160a01b038135811691602081013590911690604001356116aa565b34801561066657600080fd5b50610371611c91565b34801561067b57600080fd5b5061031c6004803603602081101561069257600080fd5b50356001600160a01b0316611c97565b3480156106ae57600080fd5b506104cf611cb2565b3480156106c357600080fd5b506104cf611cb7565b3480156106d857600080fd5b5061031c600480360360208110156106ef57600080fd5b50356001600160a01b0316611cbc565b34801561070b57600080fd5b50610371611cd7565b34801561072057600080fd5b506104cf611cdd565b34801561073557600080fd5b506103056004803603604081101561074c57600080fd5b60ff8235169190810190604081016020820135600160201b81111561077057600080fd5b82018360208201111561078257600080fd5b803590602001918460018302840111600160201b831117156107a357600080fd5b509092509050611ce2565b3480156107ba57600080fd5b506104cf611dfc565b3480156107cf57600080fd5b50610371611e01565b3480156107e457600080fd5b50610371611e07565b3480156107f957600080fd5b50610802611e0d565b604080519115158252519081900360200190f35b34801561082257600080fd5b50610343611e16565b34801561083757600080fd5b506103056004803603604081101561084e57600080fd5b810190602081018135600160201b81111561086857600080fd5b82018360208201111561087a57600080fd5b803590602001918460018302840111600160201b8311171561089b57600080fd5b919390929091602081019035600160201b8111156108b857600080fd5b8201836020820111156108ca57600080fd5b803590602001918460018302840111600160201b831117156108eb57600080fd5b509092509050611e1b565b34801561090257600080fd5b506104cf6121f8565b34801561091757600080fd5b5061031c6121fd565b34801561092c57600080fd5b5061031c6004803603604081101561094357600080fd5b506001600160a01b0381358116916020013516612331565b34801561096757600080fd5b5061037161235e565b34801561097c57600080fd5b506103056004803603604081101561099357600080fd5b60ff8235169190810190604081016020820135600160201b8111156109b757600080fd5b8201836020820111156109c957600080fd5b803590602001918460018302840111600160201b831117156109ea57600080fd5b509092509050612364565b348015610a0157600080fd5b5061031c60048036036040811015610a1857600080fd5b506001600160a01b0381358116916020013516612471565b348015610a3c57600080fd5b5061031c61249c565b348015610a5157600080fd5b506103716125d3565b348015610a6657600080fd5b5061031c6125d9565b348015610a7b57600080fd5b5061031c60048036036060811015610a9257600080fd5b506001600160a01b0381358116916020810135821691604090910135166125e6565b348015610ac057600080fd5b5061037161261b565b348015610ad557600080fd5b50610371612621565b806402540be4003406158015610af957506402540be4008106155b610b4a576040805162461bcd60e51b815260206004820152601c60248201527f707265636973696f6e206c6f737320696e20636f6e76657273696f6e00000000604482015290519081900360640190fd5b60005460ff16610b7c57661550f7dca70000600190815568056bc75e2d631000006002556000805460ff191690911790555b600254821015610bd3576040805162461bcd60e51b815260206004820152601760248201527f696e76616c69642064656c656761746520616d6f756e74000000000000000000604482015290519081900360640190fd5b600154610be790839063ffffffff61262716565b341015610c32576040805162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f756768206d73672076616c756560601b604482015290519081900360640190fd5b60405133906108fc9060009081818181818888f19350505050610c90576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b2103232b632b3b0ba37b960791b604482015290519081900360640190fd5b6000610ca7836402540be40063ffffffff61268816565b90506000610cbb348563ffffffff6126ca16565b6040805160038082526080820190925291925060609190816020015b6060815260200190600190039081610cd7579050509050610cf73361270c565b81600081518110610d0457fe5b6020026020010181905250610d21866001600160a01b031661270c565b81600181518110610d2e57fe5b6020026020010181905250610d428361272f565b81600281518110610d4f57fe5b60200260200101819052506060610d6582612742565b905061200063f7a251d76010610d7c6001856127cc565b610d91876402540be40063ffffffff61268816565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015610def578181015183820152602001610dd7565b50505050905090810190601f168015610e1c5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610e3d57600080fd5b505af1158015610e51573d6000803e3d6000fd5b505060405161100492503480156108fc029250906000818181858888f19350505050158015610e84573d6000803e3d6000fd5b5033600090815260036020526040902054610ea5908763ffffffff61262716565b33600090815260036020908152604080832093909355600481528282206001600160a01b038b16835290522054610ee2908763ffffffff61262716565b3360008181526004602090815260408083206001600160a01b038d16808552908352928190209490945583518a8152908101879052835191937f5f32ed2794e2e72d19e3cb2320e8820a499c4204887372beba51f5e61c04086792918290030190a350505050505050565b60025481565b606481565b61200181565b60603361200014610fa05760405162461bcd60e51b815260040180806020018281038252602f8152602001806144a6602f913960400191505060405180910390fd5b60005460ff16610fd257661550f7dca70000600190815568056bc75e2d631000006002556000805460ff191690911790555b610fda6143ae565b61102161101c85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061285292505050565b612877565b90506000611036611031836128c1565b61290f565b90506000606060ff83166004141561105b57611051846129c6565b90925090506110b2565b60ff8316600514156110705761105184612b7e565b6040805162461bcd60e51b8152602060048201526012602482015271756e6b6e6f776e206576656e74207479706560701b604482015290519081900360640190fd5b63ffffffff8216156110fe576040805163ffffffff84168152905160ff8516917f391d6e5ea6ab6c49b9a0abb1782cae5def8d711f973b00c729658c0b2a80b31b919081900360200190a25b979650505050505050565b6001600160a01b0381166000908152600560205260409020545b919050565b600581565b661550f7dca7000081565b606581565b600181565b600381565b61100181565b6102ca81565b600881565b806402540be400340615801561117357506402540be4008106155b6111c4576040805162461bcd60e51b815260206004820152601c60248201527f707265636973696f6e206c6f737320696e20636f6e76657273696f6e00000000604482015290519081900360640190fd5b60005460ff166111f657661550f7dca70000600190815568056bc75e2d631000006002556000805460ff191690911790555b600154341015611244576040805162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f7567682072656c61792066656560601b604482015290519081900360640190fd5b60025482101561130057600154821015611298576040805162461bcd60e51b815260206004820152601060248201526f6e6f7420656e6f7567682066756e647360801b604482015290519081900360640190fd5b3360009081526004602090815260408083206001600160a01b03871684529091529020548214611300576040805162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b604482015290519081900360640190fd5b3360009081526006602090815260408083206001600160a01b0387168452909152902054421015611378576040805162461bcd60e51b815260206004820152601a60248201527f70656e64696e6720756e64656c65676174696f6e206578697374000000000000604482015290519081900360640190fd5b604080518082018252601081526f6e6f7420656e6f7567682066756e647360801b602080830191909152336000908152600482528381206001600160a01b038816825290915291909120546113d491849063ffffffff612d6416565b3360009081526004602090815260408083206001600160a01b0388168452909152812091909155611410836402540be40063ffffffff61268816565b604080516003808252608082019092529192503491606091816020015b606081526020019060019003908161142d57905050905061144d3361270c565b8160008151811061145a57fe5b6020026020010181905250611477866001600160a01b031661270c565b8160018151811061148457fe5b60200260200101819052506114988361272f565b816002815181106114a557fe5b602002602001018190525060606114bb82612742565b905061200063f7a251d760106114d26002856127cc565b6114e7876402540be40063ffffffff61268816565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561154557818101518382015260200161152d565b50505050905090810190601f1680156115725780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561159357600080fd5b505af11580156115a7573d6000803e3d6000fd5b5050604051611004925085156108fc02915085906000818181858888f193505050501580156115da573d6000803e3d6000fd5b50336000908152600360205260409020546115fb908763ffffffff6126ca16565b3360009081526003602052604090205561161e42620a8c0063ffffffff61262716565b3360008181526006602090815260408083206001600160a01b038d16808552908352928190209490945583518a8152908101879052835191937fdf0b6ac27f3f3bb31cee3dab0f4fe40cc19c6a3f8daaec52e06b261e58a1251992918290030190a350505050505050565b61200081565b6402540be40081565b60015490565b60015481565b60025490565b806402540be40034061580156116c557506402540be4008106155b611716576040805162461bcd60e51b815260206004820152601c60248201527f707265636973696f6e206c6f737320696e20636f6e76657273696f6e00000000604482015290519081900360640190fd5b60005460ff1661174857661550f7dca70000600190815568056bc75e2d631000006002556000805460ff191690911790555b826001600160a01b0316846001600160a01b031614156117a6576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b2103932b232b632b3b0ba34b7b760611b604482015290519081900360640190fd5b6001543410156117f4576040805162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f7567682072656c61792066656560601b604482015290519081900360640190fd5b60025482101561183c576040805162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b604482015290519081900360640190fd5b3360009081526008602090815260408083206001600160a01b038881168552908352818420908716845290915290205442108015906118aa57503360009081526008602090815260408083206001600160a01b03878116855290835281842090881684529091529020544210155b6118fb576040805162461bcd60e51b815260206004820152601a60248201527f70656e64696e6720726564656c65676174696f6e206578697374000000000000604482015290519081900360640190fd5b604080518082018252601081526f6e6f7420656e6f7567682066756e647360801b602080830191909152336000908152600482528381206001600160a01b0389168252909152919091205461195791849063ffffffff612d6416565b3360009081526004602090815260408083206001600160a01b03898116855292528083209390935585168152205461198f9083612627565b3360009081526004602090815260408083206001600160a01b03881684529091528120919091556119cb836402540be40063ffffffff61268816565b60408051600480825260a082019092529192503491606091816020015b60608152602001906001900390816119e8579050509050611a083361270c565b81600081518110611a1557fe5b6020026020010181905250611a32876001600160a01b031661270c565b81600181518110611a3f57fe5b6020026020010181905250611a5c866001600160a01b031661270c565b81600281518110611a6957fe5b6020026020010181905250611a7d8361272f565b81600381518110611a8a57fe5b60200260200101819052506060611aa082612742565b905061200063f7a251d76010611ab76003856127cc565b611acc876402540be40063ffffffff61268816565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611b2a578181015183820152602001611b12565b50505050905090810190601f168015611b575780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611b7857600080fd5b505af1158015611b8c573d6000803e3d6000fd5b5050604051611004925085156108fc02915085906000818181858888f19350505050158015611bbf573d6000803e3d6000fd5b50611bd342620a8c0063ffffffff61262716565b3360009081526008602090815260408083206001600160a01b038d81168552908352818420908c168452909152902055611c1642620a8c0063ffffffff61262716565b3360008181526008602090815260408083206001600160a01b038d8116808652918452828520908f16808652908452938290209590955580518b815291820188905280519293927fdb0d03fdfcb145c486c442659e6a341a8828985505097cb5190afcf541e840159281900390910190a45050505050505050565b61100581565b6001600160a01b031660009081526003602052604090205490565b600281565b601081565b6001600160a01b031660009081526007602052604090205490565b61100881565b600b81565b3361200014611d225760405162461bcd60e51b815260040180806020018281038252602f8152602001806144a6602f913960400191505060405180910390fd5b60005460ff16611d5457661550f7dca70000600190815568056bc75e2d631000006002556000805460ff191690911790555b611d5c6143ae565b611d9e61101c84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061285292505050565b90506000611dae611031836128c1565b905060ff811660011415611dca57611dc582612dfb565b611df4565b60ff811660021415611ddf57611dc5826130ac565b60ff81166003141561107057611dc582613279565b50505b505050565b600981565b61100781565b61100681565b60005460ff1681565b600081565b60005460ff16611e72576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b3361100714611eb25760405162461bcd60e51b815260040180806020018281038252602e815260200180614478602e913960400191505060405180910390fd5b611f1984848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601081526f6f7261636c6552656c6179657246656560801b602082015291506134849050565b15611fe45760208114611f5d5760405162461bcd60e51b81526004018080602001828103825260238152602001806143e96023913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091611f9b9185858083850183828082843760009201919091525061356b92505050565b905060008111611fdc5760405162461bcd60e51b815260040180806020018281038252602b81526020018061444d602b913960400191505060405180910390fd5b600155612166565b61204884848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c36b4b72232b632b3b0ba34b7b760991b602082015291506134849050565b1561212957602081146120a2576040805162461bcd60e51b815260206004820181905260248201527f6c656e677468206f66206d696e44656c65676174696f6e206d69736d61746368604482015290519081900360640190fd5b604080516020601f84018190048102820181019092528281526000916120e09185858083850183828082843760009201919091525061356b92505050565b9050600081116121215760405162461bcd60e51b81526004018080602001828103825260288152602001806144d56028913960400191505060405180910390fd5b600255612166565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b600481565b60095460009060ff1615612249576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b6009805460ff19166001179055336000908152600560205260409020546122ab576040805162461bcd60e51b81526020600482015260116024820152701b9bc81c195b991a5b99c81c995dd85c99607a1b604482015290519081900360640190fd5b5033600081815260056020526040808220805490839055905190929183156108fc02918491818181858888f193505050501580156122ed573d6000803e3d6000fd5b5060408051828152905133917f83b78188b13346b2ffb484da70d42ee27de7fbf9f2bd8045269e10ed643ccd76919081900360200190a26009805460ff1916905590565b6001600160a01b038083166000908152600660209081526040808320938516835292905220545b92915050565b61100281565b33612000146123a45760405162461bcd60e51b815260040180806020018281038252602f8152602001806144a6602f913960400191505060405180910390fd5b60005460ff166123d657661550f7dca70000600190815568056bc75e2d631000006002556000805460ff191690911790555b6123de6143ae565b61242061101c84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061285292505050565b90506000612430611031836128c1565b905060ff81166001141561244757611dc582613570565b60ff81166002141561245c57611dc582613882565b60ff81166003141561107057611dc582613a5e565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b60095460009060ff16156124e8576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b6009805460ff191660011790553360009081526007602052604090205461254d576040805162461bcd60e51b81526020600482015260146024820152736e6f20756e64656c6567617465642066756e647360601b604482015290519081900360640190fd5b5033600081815260076020526040808220805490839055905190929183156108fc02918491818181858888f1935050505015801561258f573d6000803e3d6000fd5b5060408051828152905133917fc712d133b8d448221aaed2198ed1f0db6dfc860fb01bc3a630916fe6cbef946f919081900360200190a26009805460ff1916905590565b61100381565b68056bc75e2d6310000081565b6001600160a01b0392831660009081526008602090815260408083209486168352938152838220929094168152925290205490565b61100081565b61100481565b600082820183811015612681576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600061268183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c7d565b600061268183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d64565b60408051600560a21b831860148201526034810190915260609061268181613ce2565b606061235861273d83613d38565b613ce2565b60608151600014156127635750604080516000815260208101909152611123565b60608260008151811061277257fe5b602002602001015190506000600190505b83518110156127b3576127a98285838151811061279c57fe5b6020026020010151613e1e565b9150600101612783565b506126816127c6825160c060ff16613e9b565b82613e1e565b6040805160028082526060828101909352829190816020015b60608152602001906001900390816127e55790505090506128088460ff1661272f565b8160008151811061281557fe5b602002602001018190525061282983613ce2565b8160018151811061283657fe5b602002602001018190525061284a81612742565b949350505050565b61285a6143ce565b506040805180820190915281518152602082810190820152919050565b61287f6143ae565b61288882613f93565b61289157600080fd5b60006128a08360200151613fcd565b60208085015160408051808201909152868152920190820152915050919050565b6128c96143ce565b6128d282614030565b6128db57600080fd5b602082015160006128eb82614051565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061292457508151602110155b61292d57600080fd5b600061293c8360200151613fcd565b90508083600001511015612997576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b8251602080850151830180519284900392918310156129bd57826020036101000a820491505b50949350505050565b60006060818080805b6129d887614030565b15612a2a57826129f5576129ee611031886128c1565b9150612a1f565b8260011415612a1a57612a0f612a0a886128c1565b614184565b905060019350612a1f565b612a2a565b6001909201916129cf565b83612a4a57612a3d60048383606461419e565b9550955050505050612b79565b60006110046001600160a01b031663727be1f8846040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015612a9457600080fd5b505af1158015612aa8573d6000803e3d6000fd5b505050506040513d6020811015612abe57600080fd5b5051905080612ae357612ad560048484606561419e565b965096505050505050612b79565b6001600160a01b038216600090815260056020526040902054612b0c908463ffffffff61262716565b6001600160a01b038316600081815260056020908152604091829020939093558051868152905191927f7cc266c7b444f808013fa187f7b904d470a051a6564e78f482aa496581ba4bf892918290030190a260408051600080825260208201909252909750955050505050505b915091565b6000606081808080805b612b9188614030565b15612bfa5783612bae57612ba7611031896128c1565b9250612bef565b8360011415612bca57612bc3612a0a896128c1565b9150612bef565b8360021415612bea57612bdf612a0a896128c1565b905060019450612bef565b612bfa565b600190930192612b88565b84612c0d57612ad560058484606461419e565b60006110046001600160a01b031663727be1f8856040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015612c5757600080fd5b505af1158015612c6b573d6000803e3d6000fd5b505050506040513d6020811015612c8157600080fd5b5051905080612ca757612c9860058585606561419e565b97509750505050505050612b79565b6001600160a01b038084166000818152600660209081526040808320948716835293815283822082905591815260079091522054612ceb908563ffffffff61262716565b6001600160a01b0380851660008181526007602090815260409182902094909455805188815290519286169391927f35a799836f74fac7eccf5c73902823b970543d2274d3b93d8da3d37a255772a2929181900390910190a3604080516000808252602082019092529098509650505050505050915091565b60008184841115612df35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612db8578181015183820152602001612da0565b50505050905090810190601f168015612de55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080808080805b612e0c87614030565b15612e915784612e2957612e22612a0a886128c1565b9350612e86565b8460011415612e4557612e3e612a0a886128c1565b9250612e86565b8460021415612e6157612e5a611031886128c1565b9150612e86565b8460031415612e8157612e76611031886128c1565b905060019550612e86565b612e91565b600190940193612e03565b85612ed1576040805162461bcd60e51b8152602060048201526019602482015260008051602061442d833981519152604482015290519081900360640190fd5b6110046001600160a01b031663727be1f8836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015612f1957600080fd5b505af1158015612f2d573d6000803e3d6000fd5b505050506040513d6020811015612f4357600080fd5b5051612f96576040805162461bcd60e51b815260206004820152601d60248201527f77697468647261772066726f6d20746f6b656e687562206661696c6564000000604482015290519081900360640190fd5b6001600160a01b038416600090815260036020526040902054612fbf908363ffffffff6126ca16565b6001600160a01b038516600090815260036020908152604080832093909355600790522054612ff4908363ffffffff61262716565b6001600160a01b03808616600090815260076020908152604080832094909455600481528382209287168252919091522054613036908363ffffffff6126ca16565b6001600160a01b0380861660008181526004602090815260408083209489168084529482529182902094909455805186815260ff8616948101949094528051929391927fe862e3b87b2ce4de4fd9b42999556eb59cc9b003d4e5d679c8b81c21ebf64bb79281900390910190a350505050505050565b600080808080805b6130bd87614030565b1561314257846130da576130d3612a0a886128c1565b9350613137565b84600114156130f6576130ef612a0a886128c1565b9250613137565b84600214156131125761310b611031886128c1565b9150613137565b846003141561313257613127611031886128c1565b905060019550613137565b613142565b6001909401936130b4565b85613182576040805162461bcd60e51b8152602060048201526019602482015260008051602061442d833981519152604482015290519081900360640190fd5b6001600160a01b0384166000908152600360205260409020546131ab908363ffffffff61262716565b6001600160a01b038086166000908152600360209081526040808320949094556004815283822092871682529190915220546131ed908363ffffffff61262716565b6001600160a01b0380861660008181526004602090815260408083209489168084529482528083209590955582825260068152848220848352815284822091909155835186815260ff8616918101919091528351929391927f21de59475d78c650de40e68e136b2d6e1906953cd59108f4a58894c292a94157929181900390910190a350505050505050565b60008080808080805b61328b88614030565b1561332c57856132a8576132a1612a0a896128c1565b9450613321565b85600114156132c4576132bd612a0a896128c1565b9350613321565b85600214156132e0576132d9612a0a896128c1565b9250613321565b85600314156132fc576132f5611031896128c1565b9150613321565b856004141561331c57613311611031896128c1565b905060019650613321565b61332c565b600190950194613282565b8661336c576040805162461bcd60e51b8152602060048201526019602482015260008051602061442d833981519152604482015290519081900360640190fd5b6001600160a01b038086166000908152600460209081526040808320938816835292905220546133a2908363ffffffff61262716565b6001600160a01b038681166000908152600460209081526040808320898516845290915280822093909355908516815220546133de90836126ca565b6001600160a01b0386811660008181526004602090815260408083208986168085529083528184209690965583835260088252808320948a168084528583528184208785528352818420849055948252808320858452825280832092909255815187815260ff87169181019190915281517f12838d6f098581b681955a1ba8bc8594cb8c8588a83d7a5375fc1b080a3fee20929181900390910190a45050505050505050565b6000816040516020018082805190602001908083835b602083106134b95780518252601f19909201916020918201910161349a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106135275780518252601f199092019160209182019101613508565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b6135786143ae565b61358182614030565b156135a9576135a261101c61359d613598856128c1565b61429a565b612852565b90506135ef565b6040805162461bcd60e51b8152602060048201526016602482015275656d707479206661696c2061636b207061636b61676560501b604482015290519081900360640190fd5b6000808080805b6135ff86614030565b15613668578361361c57613615612a0a876128c1565b925061365d565b836001141561363857613631612a0a876128c1565b915061365d565b83600214156136585761364d611031876128c1565b90506001945061365d565b613668565b6001909301926135f6565b846136a8576040805162461bcd60e51b8152602060048201526019602482015260008051602061442d833981519152604482015290519081900360640190fd5b60006136bf826402540be40063ffffffff61430a16565b90506110046001600160a01b031663727be1f8826040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561370957600080fd5b505af115801561371d573d6000803e3d6000fd5b505050506040513d602081101561373357600080fd5b5051613786576040805162461bcd60e51b815260206004820152601d60248201527f77697468647261772066726f6d20746f6b656e687562206661696c6564000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600360205260409020546137af908263ffffffff6126ca16565b6001600160a01b0385166000908152600360209081526040808320939093556007905220546137e4908263ffffffff61262716565b6001600160a01b03808616600090815260076020908152604080832094909455600481528382209287168252919091522054613826908263ffffffff6126ca16565b6001600160a01b038086166000908152600460209081526040808320938816835292905281812092909255516001917ff83de021914a4585482db5ca47d520a5657165b443fa2c7ef8ed4635f054da9b91a25050505050505050565b61388a6143ae565b61389382614030565b156135a9576138aa61101c61359d613598856128c1565b90506000808080805b6138bc86614030565b1561392557836138d9576138d2612a0a876128c1565b925061391a565b83600114156138f5576138ee612a0a876128c1565b915061391a565b83600214156139155761390a611031876128c1565b90506001945061391a565b613925565b6001909301926138b3565b84613965576040805162461bcd60e51b8152602060048201526019602482015260008051602061442d833981519152604482015290519081900360640190fd5b600061397c826402540be40063ffffffff61430a16565b6001600160a01b0385166000908152600360205260409020549091506139a8908263ffffffff61262716565b6001600160a01b038086166000908152600360209081526040808320949094556004815283822092871682529190915220546139ea908263ffffffff61262716565b6001600160a01b038086166000818152600460209081526040808320948916808452948252808320959095559181526006825283812092815291905281812081905590516002917ff83de021914a4585482db5ca47d520a5657165b443fa2c7ef8ed4635f054da9b91a25050505050505050565b613a666143ae565b613a6f82614030565b156135a957613a8661101c61359d613598856128c1565b9050600080808080805b613a9987614030565b15613b1e5784613ab657613aaf612a0a886128c1565b9350613b13565b8460011415613ad257613acb612a0a886128c1565b9250613b13565b8460021415613aee57613ae7612a0a886128c1565b9150613b13565b8460031415613b0e57613b03611031886128c1565b905060019550613b13565b613b1e565b600190940193613a90565b85613b5e576040805162461bcd60e51b8152602060048201526019602482015260008051602061442d833981519152604482015290519081900360640190fd5b6000613b75826402540be40063ffffffff61430a16565b6001600160a01b03808716600090815260046020908152604080832093891683529290522054909150613bae908263ffffffff61262716565b6001600160a01b03868116600090815260046020908152604080832089851684529091528082209390935590851681522054613bea90826126ca565b6001600160a01b038681166000818152600460209081526040808320898616808552908352818420969096559282526008815282822093891680835284825283832095835294815282822082905592835281812093815292909152808220829055516003917ff83de021914a4585482db5ca47d520a5657165b443fa2c7ef8ed4635f054da9b91a2505050505050505050565b60008183613ccc5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612db8578181015183820152602001612da0565b506000838581613cd857fe5b0495945050505050565b606081516001148015613d145750607f60f81b82600081518110613d0257fe5b01602001516001600160f81b03191611155b15613d20575080611123565b612358613d328351608060ff16613e9b565b83613e1e565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416613d7c57506018613da0565b6fffffffffffffffffffffffffffffffff198416613d9c57506010613da0565b5060005b6020811015613dd657818181518110613db557fe5b01602001516001600160f81b03191615613dce57613dd6565b600101613da0565b60008160200390506060816040519080825280601f01601f191660200182016040528015613e0b576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b81831015613e4f578051835260209283019201613e37565b50855184518101855292509050808201602086015b81831015613e7c578051835260209283019201613e64565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310613eeb576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411613f455782840160f81b81600081518110613f2757fe5b60200101906001600160f81b031916908160001a9053509050612358565b6060613f5085613d38565b90508381510160370160f81b82600081518110613f6957fe5b60200101906001600160f81b031916908160001a905350613f8a8282613e1e565b95945050505050565b8051600090613fa457506000611123565b6020820151805160001a9060c0821015613fc357600092505050611123565b5060019392505050565b8051600090811a6080811015613fe7576000915050611123565b60b8811080614002575060c08110801590614002575060f881105b15614011576001915050611123565b60c08110156140255760b519019050611123565b60f519019050611123565b600061403a6143ce565b505080518051602091820151919092015191011190565b80516000908190811a608081101561406c576001915061417d565b60b881101561408157607e198101915061417d565b60c08110156140fb57600060b78203600186019550806020036101000a8651049150600181018201935050808310156140f5576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b5061417d565b60f88110156141105760be198101915061417d565b600060f78203600186019550806020036101000a86510491506001810182019350508083101561417b576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b805160009060151461419557600080fd5b6123588261290f565b600060606141b7856402540be40063ffffffff61268816565b60408051600480825260a0820190925291965060609190816020015b60608152602001906001900390816141d35790505090506141f68760ff1661272f565b8160008151811061420357fe5b60200260200101819052506142178661272f565b8160018151811061422457fe5b6020026020010181905250614241856001600160a01b031661270c565b8160028151811061424e57fe5b60200260200101819052506142688463ffffffff1661272f565b8160038151811061427557fe5b6020026020010181905250606061428b82612742565b94989497509395505050505050565b80516060906142a857600080fd5b60006142b78360200151613fcd565b83516040805191839003808352601f19601f82011683016020019091529192506060908280156142ee576020820181803683370190505b50905060008160200190506129bd848760200151018285614363565b60008261431957506000612358565b8282028284828161432657fe5b04146126815760405162461bcd60e51b815260040180806020018281038252602181526020018061440c6021913960400191505060405180910390fd5b8061436d57611df7565b5b6020811061438d578251825260209283019290910190601f190161436e565b915181516020939093036101000a6000190180199091169216919091179052565b60405180604001604052806143c16143ce565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6c656e677468206f66206f7261636c6552656c61796572466565206d69736d61746368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77726c70206465636f6465207061636b616765206661696c656400000000000000746865206f7261636c6552656c61796572466565206d7573742062652067726561746572207468616e2030746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d696e44656c65676174696f6e206d7573742062652067726561746572207468616e2030a2646970667358221220e1f9ce763d21cb8c908cd438ce95d46b5e8d4ce256ae22325da5fcce27799fb764736f6c63430006040033", + }, + }, + } } func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.Int, statedb *state.StateDB) { @@ -400,6 +433,10 @@ func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.I applySystemContractUpgrade(eulerUpgrade[network], blockNumber, statedb, logger) } + if config.IsOnGibbs(blockNumber) { + applySystemContractUpgrade(gibbsUpgrade[network], blockNumber, statedb, logger) + } + /* apply other upgrades */ diff --git a/eth/gasprice/gasprice_test.go b/eth/gasprice/gasprice_test.go index bcb3e23e4d..01edde38ce 100644 --- a/eth/gasprice/gasprice_test.go +++ b/eth/gasprice/gasprice_test.go @@ -108,6 +108,7 @@ func newTestBackend(t *testing.T, londonBlock *big.Int, pending bool) *testBacke ) config.LondonBlock = londonBlock config.ArrowGlacierBlock = londonBlock + config.GibbsBlock = nil engine := ethash.NewFaker() db := rawdb.NewMemoryDatabase() genesis, err := gspec.Commit(db) diff --git a/params/config.go b/params/config.go index 2681da63df..167a71f24d 100644 --- a/params/config.go +++ b/params/config.go @@ -279,6 +279,7 @@ var ( }, Threshold: 2, } + BSCChainConfig = &ChainConfig{ ChainID: big.NewInt(56), HomesteadBlock: big.NewInt(0), @@ -296,6 +297,9 @@ var ( BrunoBlock: big.NewInt(13082000), EulerBlock: big.NewInt(18907621), + //TODO + GibbsBlock: nil, + Parlia: &ParliaConfig{ Period: 3, Epoch: 200, @@ -319,6 +323,9 @@ var ( BrunoBlock: big.NewInt(13837000), EulerBlock: big.NewInt(19203503), + //TODO + GibbsBlock: nil, + Parlia: &ParliaConfig{ Period: 3, Epoch: 200, @@ -340,7 +347,8 @@ var ( NielsBlock: big.NewInt(0), MirrorSyncBlock: big.NewInt(400), BrunoBlock: big.NewInt(400), - EulerBlock: nil, + EulerBlock: big.NewInt(400), + GibbsBlock: big.NewInt(400), Parlia: &ParliaConfig{ Period: 3, @@ -366,6 +374,7 @@ var ( MirrorSyncBlock: big.NewInt(0), BrunoBlock: big.NewInt(0), EulerBlock: big.NewInt(0), + GibbsBlock: big.NewInt(0), MuirGlacierBlock: nil, BerlinBlock: nil, // Don't enable Berlin directly, we're YOLOing it YoloV3Block: big.NewInt(0), @@ -380,16 +389,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), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), 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), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), 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), big.NewInt(0), big.NewInt(0), nil, nil, big.NewInt(0), nil, nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), 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), big.NewInt(0), big.NewInt(0), nil, nil, big.NewInt(0), nil, nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), 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), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), 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), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), new(EthashConfig), nil, nil} TestRules = TestChainConfig.Rules(new(big.Int), false) ) @@ -482,6 +491,7 @@ type ChainConfig struct { MirrorSyncBlock *big.Int `json:"mirrorSyncBlock,omitempty" toml:",omitempty"` // mirrorSyncBlock switch block (nil = no fork, 0 = already activated) BrunoBlock *big.Int `json:"brunoBlock,omitempty" toml:",omitempty"` // brunoBlock switch block (nil = no fork, 0 = already activated) EulerBlock *big.Int `json:"eulerBlock,omitempty" toml:",omitempty"` // eulerBlock switch block (nil = no fork, 0 = already activated) + GibbsBlock *big.Int `json:"gibbsBlock,omitempty" toml:",omitempty"` // gibbsBlock switch block (nil = no fork, 0 = already activated) // Various consensus engines Ethash *EthashConfig `json:"ethash,omitempty" toml:",omitempty"` @@ -532,7 +542,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, MirrorSync: %v, Bruno: %v, Berlin: %v, YOLO v3: %v, CatalystBlock: %v, London: %v, ArrowGlacier: %v, MergeFork:%v, Euler: %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, Bruno: %v, Berlin: %v, YOLO v3: %v, CatalystBlock: %v, London: %v, ArrowGlacier: %v, MergeFork:%v, Euler: %v, Gibbs: %v, Engine: %v}", c.ChainID, c.HomesteadBlock, c.DAOForkBlock, @@ -556,6 +566,7 @@ func (c *ChainConfig) String() string { c.ArrowGlacierBlock, c.MergeForkBlock, c.EulerBlock, + c.GibbsBlock, engine, ) } @@ -685,6 +696,16 @@ func (c *ChainConfig) IsTerminalPoWBlock(parentTotalDiff *big.Int, totalDiff *bi return parentTotalDiff.Cmp(c.TerminalTotalDifficulty) < 0 && totalDiff.Cmp(c.TerminalTotalDifficulty) >= 0 } +// IsGibbs returns whether num is either equal to the gibbs fork block or greater. +func (c *ChainConfig) IsGibbs(num *big.Int) bool { + return isForked(c.GibbsBlock, num) +} + +// IsOnGibbs returns whether num is equal to the gibbs fork block +func (c *ChainConfig) IsOnGibbs(num *big.Int) bool { + return configNumEqual(c.GibbsBlock, num) +} + // CheckCompatible checks whether scheduled fork transitions have been imported // with a mismatching chain configuration. func (c *ChainConfig) CheckCompatible(newcfg *ChainConfig, height uint64) *ConfigCompatError { @@ -719,6 +740,7 @@ func (c *ChainConfig) CheckConfigForkOrder() error { {name: "berlinBlock", block: c.BerlinBlock}, {name: "londonBlock", block: c.LondonBlock}, {name: "arrowGlacierBlock", block: c.ArrowGlacierBlock, optional: true}, + {name: "gibbsBlock", block: c.GibbsBlock}, {name: "mergeStartBlock", block: c.MergeForkBlock, optional: true}, } { if lastFork.name != "" { @@ -807,6 +829,9 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *Confi if isForkIncompatible(c.EulerBlock, newcfg.EulerBlock, head) { return newCompatError("euler fork block", c.EulerBlock, newcfg.EulerBlock) } + if isForkIncompatible(c.GibbsBlock, newcfg.GibbsBlock, head) { + return newCompatError("gibbs fork block", c.GibbsBlock, newcfg.GibbsBlock) + } return nil }