diff --git a/consensus/parlia/parlia.go b/consensus/parlia/parlia.go index 9de8c28a9..f6be4a319 100644 --- a/consensus/parlia/parlia.go +++ b/consensus/parlia/parlia.go @@ -1570,7 +1570,8 @@ func (p *Parlia) distributeIncoming(val common.Address, state *state.StateDB, he state.SetBalance(consensus.SystemAddress, big.NewInt(0)) state.AddBalance(coinbase, balance) - doDistributeSysReward := state.GetBalance(common.HexToAddress(systemcontracts.SystemRewardContract)).Cmp(maxSystemBalance) < 0 + doDistributeSysReward := !p.chainConfig.IsKepler(header.Number, header.Time) && + state.GetBalance(common.HexToAddress(systemcontracts.SystemRewardContract)).Cmp(maxSystemBalance) < 0 if doDistributeSysReward { var rewards = new(big.Int) rewards = rewards.Rsh(balance, systemRewardPercent) diff --git a/core/chain_makers.go b/core/chain_makers.go index f0026089a..cc17cd74c 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -308,7 +308,7 @@ func GenerateChain(config *params.ChainConfig, parent *types.Block, engine conse if config.DAOForkSupport && config.DAOForkBlock != nil && config.DAOForkBlock.Cmp(b.header.Number) == 0 { misc.ApplyDAOHardFork(statedb) } - systemcontracts.UpgradeBuildInSystemContract(config, b.header.Number, statedb) + systemcontracts.UpgradeBuildInSystemContract(config, b.header.Number, parent.Time(), b.header.Time, statedb) // Execute any user modifications to the block if gen != nil { gen(i, b) diff --git a/core/state_processor.go b/core/state_processor.go index 5b6411d80..25cb7df40 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -74,7 +74,11 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg misc.ApplyDAOHardFork(statedb) } // Handle upgrade build-in system contract code - systemcontracts.UpgradeBuildInSystemContract(p.config, block.Number(), statedb) + lastBlock := p.bc.GetBlockByHash(block.ParentHash()) + if lastBlock == nil { + return statedb, nil, nil, 0, fmt.Errorf("could not get parent block") + } + systemcontracts.UpgradeBuildInSystemContract(p.config, blockNumber, lastBlock.Time(), block.Time(), statedb) var ( context = NewEVMBlockContext(header, p.bc, nil) diff --git a/core/systemcontracts/upgrade.go b/core/systemcontracts/upgrade.go index d644533a3..562020686 100644 --- a/core/systemcontracts/upgrade.go +++ b/core/systemcontracts/upgrade.go @@ -56,7 +56,9 @@ var ( platoUpgrade = make(map[string]*Upgrade) - latestUpgrade = platoUpgrade + keplerUpgrade = make(map[string]*Upgrade) + + latestUpgrade = keplerUpgrade ) func init() { @@ -697,10 +699,73 @@ func init() { }, } + keplerUpgrade[mainNet] = &Upgrade{ + UpgradeName: "kepler", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + Code: "6080604052600436106104a35760003560e01c806388b32f1111610260578063c6d3394511610144578063e40716a1116100c1578063f92eb86b11610085578063f92eb86b14610c02578063f9a2bbc714610c17578063fc3e590814610c2c578063fccc281314610c41578063fd4ad81f14610c56578063fd6a687914610c85576104aa565b8063e40716a114610b85578063ea321e4914610b9a578063eb57e20214610bba578063eda5868c14610bda578063f340fa0114610bef576104aa565b8063d86222d511610108578063d86222d514610b1c578063daacdb6614610b31578063dc927faf14610b46578063e086c7b114610b5b578063e1c7392a14610b70576104aa565b8063c6d3394514610abd578063c81b166214610ad2578063c8509d81146108b6578063ce910b0c14610ae7578063d68fb56a14610b07576104aa565b8063a5422d5c116101dd578063ad3c9da6116101a1578063ad3c9da614610a3c578063aef198a914610a5c578063b7ab4db514610a71578063b8cf4ef114610a93578063bf9f499514610666578063c466689d14610aa8576104aa565b8063a5422d5c146109c8578063a78abc16146109dd578063aaf5eb68146109f2578063ab51bb9614610a07578063ac43175114610a1c576104aa565b806396713da91161022457806396713da91461095f5780639dc09262146109745780639fe0f81614610989578063a0dc27581461099e578063a1a11bf5146109b3576104aa565b806388b32f11146108eb5780638a7beb01146109005780638b5ad0c9146109155780638d19a4101461092a5780639369d7de1461094a576104aa565b806351e80672116103875780636e47b482116103045780637942fd05116102c85780637942fd05146108775780637a84ca2a1461088c57806381650b62146108a1578063831d65d1146108b6578063853230aa1461086257806386249882146108d6576104aa565b80636e47b4821461080e57806370fd5bad14610823578063718a8aa81461083857806375d47a0a1461084d57806378dfed4a14610862576104aa565b80635de1e22c1161034b5780635de1e22c14610792578063603d86d31461065157806360eba4fe146107a757806362b72cf5146107c75780636969a25c146107dc576104aa565b806351e806721461071357806355614fcc14610728578063565c56b3146107485780635667515a146107685780635d77156c1461077d576104aa565b80633365af3a1161042057806343756e5c116103e457806343756e5c1461068857806345cf9daf1461069d578063493279b1146106b25780634bf6c882146106d45780634df6e0c3146106e95780635192c82c146106fe576104aa565b80633365af3a146105ee57806335409f7f1461060e5780633b071dcc1461062e5780633de0f0d8146106515780633dffc38714610666576104aa565b8063152ad3b811610467578063152ad3b8146105625780631ff1806914610584578063219f22d514610599578063300c3567146105ae578063321d398a146105ce576104aa565b806304c4fec6146104af57806307a56847146104c65780630bee7a67146104f15780630e2374a5146105135780631182b87514610535576104aa565b366104aa57005b600080fd5b3480156104bb57600080fd5b506104c4610c9a565b005b3480156104d257600080fd5b506104db610d0c565b6040516104e89190617691565b60405180910390f35b3480156104fd57600080fd5b50610506610d12565b6040516104e891906176bb565b34801561051f57600080fd5b50610528610d17565b6040516104e89190616a60565b34801561054157600080fd5b50610555610550366004616946565b610d1d565b6040516104e89190616bd7565b34801561056e57600080fd5b50610577610f55565b6040516104e89190616bcc565b34801561059057600080fd5b506104db610f5e565b3480156105a557600080fd5b50610506610f64565b3480156105ba57600080fd5b506104c46105c93660046167d0565b610f69565b3480156105da57600080fd5b506105776105e93660046168f3565b6112b0565b3480156105fa57600080fd5b506105776106093660046168f3565b61137f565b34801561061a57600080fd5b506104c46106293660046167a9565b611430565b34801561063a57600080fd5b50610643611589565b6040516104e8929190616ae2565b34801561065d57600080fd5b506104db611865565b34801561067257600080fd5b5061067b61186b565b6040516104e891906176cc565b34801561069457600080fd5b50610528611870565b3480156106a957600080fd5b506104db611876565b3480156106be57600080fd5b506106c761187c565b6040516104e89190617682565b3480156106e057600080fd5b5061067b611881565b3480156106f557600080fd5b50610643611886565b34801561070a57600080fd5b506104db611a04565b34801561071f57600080fd5b50610528611a0a565b34801561073457600080fd5b506105776107433660046167a9565b611a10565b34801561075457600080fd5b506104db6107633660046167a9565b611a45565b34801561077457600080fd5b5061067b611a96565b34801561078957600080fd5b50610506611a9b565b34801561079e57600080fd5b506104db611aa0565b3480156107b357600080fd5b506105556107c23660046168f3565b611aa6565b3480156107d357600080fd5b506104db611b4c565b3480156107e857600080fd5b506107fc6107f73660046168f3565b611b52565b6040516104e896959493929190616a8d565b34801561081a57600080fd5b50610528611bb6565b34801561082f57600080fd5b5061067b611bbc565b34801561084457600080fd5b5061067b611bc1565b34801561085957600080fd5b50610528611bc6565b34801561086e57600080fd5b506104db611bcc565b34801561088357600080fd5b5061067b611bd2565b34801561089857600080fd5b506104db611bd7565b3480156108ad57600080fd5b50610506611bdd565b3480156108c257600080fd5b506104c46108d1366004616946565b611be2565b3480156108e257600080fd5b506104db611c43565b3480156108f757600080fd5b506104db611c49565b34801561090c57600080fd5b50610577611c4f565b34801561092157600080fd5b506104db611c58565b34801561093657600080fd5b506104db6109453660046167a9565b611c5e565b34801561095657600080fd5b506104c4611c9e565b34801561096b57600080fd5b5061067b611db2565b34801561098057600080fd5b50610528611db7565b34801561099557600080fd5b506104db611dbd565b3480156109aa57600080fd5b506104db611dc2565b3480156109bf57600080fd5b50610528611dc7565b3480156109d457600080fd5b50610555611dcd565b3480156109e957600080fd5b50610577611dec565b3480156109fe57600080fd5b506104db611df5565b348015610a1357600080fd5b50610506611a96565b348015610a2857600080fd5b506104c4610a37366004616897565b611dfe565b348015610a4857600080fd5b506104db610a573660046167a9565b61269c565b348015610a6857600080fd5b506104db6126ae565b348015610a7d57600080fd5b50610a866126bb565b6040516104e89190616acf565b348015610a9f57600080fd5b506104db6127a7565b348015610ab457600080fd5b506104db6127ac565b348015610ac957600080fd5b506104db611bbc565b348015610ade57600080fd5b506105286127b2565b348015610af357600080fd5b50610555610b023660046168f3565b6127b8565b348015610b1357600080fd5b506104db6127c5565b348015610b2857600080fd5b506104db612804565b348015610b3d57600080fd5b506104db612810565b348015610b5257600080fd5b50610528612816565b348015610b6757600080fd5b506104db610d12565b348015610b7c57600080fd5b506104c461281c565b348015610b9157600080fd5b506104db6129cb565b348015610ba657600080fd5b50610577610bb5366004616858565b6129d1565b348015610bc657600080fd5b506104c4610bd53660046167a9565b612b57565b348015610be657600080fd5b50610506612c5f565b6104c4610bfd3660046167a9565b612c64565b348015610c0e57600080fd5b506104db612fcc565b348015610c2357600080fd5b50610528612fd2565b348015610c3857600080fd5b5061067b611dbd565b348015610c4d57600080fd5b50610528612fd8565b348015610c6257600080fd5b50610c76610c713660046168f3565b612fde565b6040516104e89392919061769a565b348015610c9157600080fd5b506105286130a0565b6000610ca533611c5e565b9050600b8181548110610cb457fe5b600091825260209091206001601690920201015460ff16610cf05760405162461bcd60e51b8152600401610ce79061733c565b60405180910390fd5b6000610cfa6127c5565b9050610d073383836130a6565b505050565b60095481565b606481565b61200181565b60005460609060ff16610d425760405162461bcd60e51b8152600401610ce790616d96565b3361200014610d635760405162461bcd60e51b8152600401610ce7906174d5565b600b54610e2157610d72616495565b60015460005b81811015610e1d57600b805460018101825560009190915283516000805160206177448339815191526016909202918201908155602080860151600080516020617d738339815191528401805460ff1916911515919091179055604086015180518794610df9936000805160206177648339815191529091019201906164c4565b506060820151610e0f906003830190601361653e565b505050806001019050610d78565b5050505b610e2961656b565b6000610e6a85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329292505050565b9150915080610e8657610e7d606461344e565b92505050610f4e565b815160009060ff16610eab57610ea4836020015184604001516134af565b9050610f1a565b825160ff1660011415610f1657826020015151600114610ef057600080516020617724833981519152604051610ee0906171f5565b60405180910390a1506067610f11565b610ea48360200151600081518110610f0457fe5b6020026020010151614103565b610f1a565b5060655b63ffffffff8116610f3f5750506040805160008152602081019091529150610f4e9050565b610f488161344e565b93505050505b9392505050565b60075460ff1681565b60035481565b606881565b334114610f885760405162461bcd60e51b8152600401610ce790617524565b6010544311610fa95760405162461bcd60e51b8152600401610ce790616ef2565b3a15610fc75760405162461bcd60e51b8152600401610ce79061727b565b60005460ff16610fe95760405162461bcd60e51b8152600401610ce790616d96565b60006110023168056bc75e2d63100000811115611020576110198168056bc75e2d6310000063ffffffff61427a16565b9150611027565b50506112a6565b6040516213929d60e11b8152611002906227253a9061104c9030908690600401616a74565b602060405180830381600087803b15801561106657600080fd5b505af115801561107a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109e919061690b565b9150816110ac5750506112a6565b6000805b848110156110da578585828181106110c457fe5b90506020020135820191508060010190506110b0565b50806110e8575050506112a6565b6000806000805b8981101561129e578489898381811061110457fe5b9050602002013588028161111457fe5b0493508a8a8281811061112357fe5b905060200201602081019061113891906167a9565b6001600160a01b0381166000908152600460205260409020549093509150811561125457600060018084038154811061116d57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff16156111da57836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d85866040516111cd9190617691565b60405180910390a261124e565b6003546111ed908663ffffffff6142bc16565b6003908155810154611205908663ffffffff6142bc16565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611245908890617691565b60405180910390a25b50611296565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d858560405161128d9190617691565b60405180910390a25b6001016110ef565b505050505050505b5050436010555050565b60015460009082106112c45750600061137a565b60006001600160a01b0316600183815481106112dc57fe5b60009182526020909120600490910201546001600160a01b0316148061130c5750600854158061130c5750600a54155b8061131b575060085460095410155b8061132c575061132a8261137f565b155b8061135557506000600b838154811061134157fe5b906000526020600020906016020160000154115b80611369575060016113656126bb565b5111155b156113765750600061137a565b5060015b919050565b60015460009082106113935750600061137a565b600b5482106113d057600182815481106113a957fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615905061137a565b600182815481106113dd57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615801561142a5750600b828154811061141157fe5b600091825260209091206001601690920201015460ff16155b92915050565b33611001146114515760405162461bcd60e51b8152600401610ce790617639565b600b5461150f57611460616495565b60015460005b8181101561150b57600b805460018101825560009190915283516000805160206177448339815191526016909202918201908155602080860151600080516020617d738339815191528401805460ff19169115159190911790556040860151805187946114e7936000805160206177648339815191529091019201906164c4565b5060608201516114fd906003830190601361653e565b505050806001019050611466565b5050505b6001600160a01b038116600090815260046020526040902054806115335750611586565b6001810390506000600b828154811061154857fe5b600091825260209091206001601690920201015460ff16905061156b83836142e1565b80156115745750805b15610d07576009805460001901905550505b50565b60015460609081906000805b828110156115dc57600181815481106115aa57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166115d4576001909101905b600101611595565b50606081604051908082528060200260200182016040528015611609578160200160208202803683370190505b50905060608260405190808252806020026020018201604052801561164257816020015b606081526020019060019003908161162d5790505b50600b54600094509091508414156117bd5760005b848110156117b7576001818154811061166c57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166117af576001818154811061169c57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106116c757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b81815481106116f457fe5b600091825260209182902060026016909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561178c5780601f106117615761010080835404028352916020019161178c565b820191906000526020600020905b81548152906001019060200180831161176f57829003601f168201915b505050505082858151811061179d57fe5b60209081029190910101526001909301925b600101611657565b50611859565b60005b8481101561185757600181815481106117d557fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661184f576001818154811061180557fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061183057fe5b6001600160a01b03909216602092830291909101909101526001909301925b6001016117c0565b505b909450925050505b9091565b61271081565b600181565b61100181565b60085481565b603881565b600881565b600e54600c5460609182918061189a575060155b60606118a46126bb565b905060606118b182614694565b9050828251116118c8579094509250611861915050565b838383510310156118da578282510393505b83156119105760c843046118f683838388880360008a8a614802565b61190e8383838888038989038a8b8b8b510301614802565b505b60608360405190808252806020026020018201604052801561193c578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561197557816020015b60608152602001906001900390816119605790505b50905060005b858110156119f65784818151811061198f57fe5b60200260200101518382815181106119a357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106119cf57fe5b60200260200101518282815181106119e357fe5b602090810291909101015260010161197b565b509096509450505050509091565b60065481565b61200081565b6001600160a01b03811660009081526004602052604081205480611a3857600091505061137a565b60001901610f4e8161137f565b6001600160a01b03811660009081526004602052604081205480611a6d57600091505061137a565b600180820381548110611a7c57fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b600f5481565b60128181548110611ab357fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815293509091830182828015611b445780601f10611b1957610100808354040283529160200191611b44565b820191906000526020600020905b815481529060010190602001808311611b2757829003601f168201915b505050505081565b60105481565b60018181548110611b5f57fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b606681565b3361200014611c035760405162461bcd60e51b8152600401610ce7906174d5565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051611c36939291906176da565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6001600160a01b03811660009081526004602052604081205480611c945760405162461bcd60e51b8152600401610ce79061745d565b6000190192915050565b600b54611d5c57611cad616495565b60015460005b81811015611d5857600b805460018101825560009190915283516000805160206177448339815191526016909202918201908155602080860151600080516020617d738339815191528401805460ff1916911515919091179055604086015180518794611d34936000805160206177648339815191529091019201906164c4565b506060820151611d4a906003830190601361653e565b505050806001019050611cb3565b5050505b600854611d695760036008555b600a54611d76576002600a555b6000611d8133611c5e565b9050611d8c816112b0565b611da85760405162461bcd60e51b8152600401610ce7906171b2565b6115863382614959565b600981565b61100781565b600381565b60c881565b61100681565b6040518061062001604052806105ef81526020016177846105ef913981565b60005460ff1681565b6402540be40081565b60005460ff16611e205760405162461bcd60e51b8152600401610ce790616d96565b3361100714611e415760405162461bcd60e51b8152600401610ce7906172a9565b611eab84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b602082015291506149f19050565b15611f485760208114611ed05760405162461bcd60e51b8152600401610ce790617417565b604080516020601f8401819004810282018101909252828152600091611f0e91858580838501838280828437600092019190915250614a4a92505050565b905060648110158015611f245750620186a08111155b611f405760405162461bcd60e51b8152600401610ce7906170a2565b600255612659565b611fa884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b602082015291506149f19050565b156120375760208114611fcd5760405162461bcd60e51b8152600401610ce790616c1c565b604080516020601f840181900481028201810190925282815260009161200b91858580838501838280828437600092019190915250614a4a92505050565b905061271081111561202f5760405162461bcd60e51b8152600401610ce790616f34565b600655612659565b6120a184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b602082015291506149f19050565b1561213b57602081146120c65760405162461bcd60e51b8152600401610ce790616c53565b604080516020601f840181900481028201810190925282815260009161210491858580838501838280828437600092019190915250614a4a92505050565b600c5490915080612113575060155b8082106121325760405162461bcd60e51b8152600401610ce790616fa7565b50600855612659565b6121a484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b602082015291506149f19050565b1561223d57602081146121c95760405162461bcd60e51b8152600401610ce790616d1c565b604080516020601f840181900481028201810190925282815260009161220791858580838501838280828437600092019190915250614a4a92505050565b90506000811180156122195750600a81105b6122355760405162461bcd60e51b8152600401610ce7906175b5565b600a55612659565b6122b184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e6469646174657300000000000000602082015291506149f19050565b1561234057602081146122d65760405162461bcd60e51b8152600401610ce790616cd0565b604080516020601f840181900481028201810190925282815260009161231491858580838501838280828437600092019190915250614a4a92505050565b9050600d548111156123385760405162461bcd60e51b8152600401610ce790617118565b600e55612659565b6123a984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b602082015291506149f19050565b1561242b57602081146123ce5760405162461bcd60e51b8152600401610ce7906172f7565b604080516020601f840181900481028201810190925282815260009161240c91858580838501838280828437600092019190915250614a4a92505050565b600d819055600e5490915081101561242557600d54600e555b50612659565b61248f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b602082015291506149f19050565b1561253d57602081146124b45760405162461bcd60e51b8152600401610ce790616d61565b604080516020601f84018190048102820181019092528281526000916124f291858580838501838280828437600092019190915250614a4a92505050565b9050600081116125145760405162461bcd60e51b8152600401610ce790616e04565b60648111156125355760405162461bcd60e51b8152600401610ce790616e4c565b600c55612659565b6125a584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601181527073797374656d526577617264526174696f60781b602082015291506149f19050565b1561264157602081146125ca5760405162461bcd60e51b8152600401610ce790617571565b604080516020601f840181900481028201810190925282815260009161260891858580838501838280828437600092019190915250614a4a92505050565b90506001811015801561261d57506127108111155b6126395760405162461bcd60e51b8152600401610ce79061704f565b600f55612659565b60405162461bcd60e51b8152600401610ce790617612565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a8484848460405161268e9493929190616bea565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b828110156126ea576126d68161137f565b156126e2578160010191505b6001016126c5565b50606081604051908082528060200260200182016040528015612717578160200160208202803683370190505b5090506000915060005b8381101561279e576127328161137f565b15612796576001818154811061274457fe5b600091825260209091206004909102015482516001600160a01b039091169083908590811061276f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b600101612721565b50925050505b90565b601581565b61027181565b61100281565b60138181548110611ab357fe5b60006127cf6126bb565b519050600080600c54116127e45760156127e8565b600c545b9050808211156127f6578091505b8161280057600191505b5090565b67016345785d8a000081565b60055481565b61100381565b60005460ff161561283f5760405162461bcd60e51b8152600401610ce7906173a9565b61284761656b565b600061286d6040518061062001604052806105ef81526020016177846105ef9139613292565b915091508061288e5760405162461bcd60e51b8152600401610ce790617494565b60005b8260200151518110156129b3576001836020015182815181106128b057fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a09093015160039093019290925591860151805191850193918590811061298657fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101612891565b50506103e8600255506000805460ff19166001179055565b600d5481565b601354600090815b81811015612ada57612ac285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601380549092508591508110612a2a57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015612ab85780601f10612a8d57610100808354040283529160200191612ab8565b820191906000526020600020905b815481529060010190602001808311612a9b57829003601f168201915b5050505050614a4f565b15612ad25760019250505061142a565b6001016129d9565b5060125460005b81811015612b4b57612b3286868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601280549092508591508110612a2a57fe5b15612b43576001935050505061142a565b600101612ae1565b50600095945050505050565b3361100114612b785760405162461bcd60e51b8152600401610ce790617639565b600b54612c3657612b87616495565b60015460005b81811015612c3257600b805460018101825560009190915283516000805160206177448339815191526016909202918201908155602080860151600080516020617d738339815191528401805460ff1916911515919091179055604086015180518794612c0e936000805160206177648339815191529091019201906164c4565b506060820151612c24906003830190601361653e565b505050806001019050612b8d565b5050505b6000612c4182614ab3565b9050612c4c816112b0565b15612c5b57612c5b8282614959565b5050565b606581565b334114612c835760405162461bcd60e51b8152600401610ce790617524565b60005460ff16612ca55760405162461bcd60e51b8152600401610ce790616d96565b60003411612cc55760405162461bcd60e51b8152600401610ce7906170e9565b3a15612ce35760405162461bcd60e51b8152600401610ce79061727b565b6001600160a01b03811660009081526004602052604090205460145434919060ff16612d2357610271600f556103e86006556014805460ff191660011790555b6000612d4c612710612d40600f5486614c5690919063ffffffff16565b9063ffffffff614c9016565b90508015612dbc576040516110029082156108fc029083906000818181858888f19350505050158015612d83573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d81604051612db39190617691565b60405180910390a15b600083118015612dce57506000600654115b15612e74576000612df0612710612d4060065487614c5690919063ffffffff16565b90508015612e725760405161dead9082156108fc029083906000818181858888f19350505050158015612e27573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee581604051612e579190617691565b60405180910390a1612e6f848263ffffffff61427a16565b93505b505b612e84838263ffffffff61427a16565b92508115612f84576000600180840381548110612e9d57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615612f0a57846001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b485604051612efd9190617691565b60405180910390a2612f7e565b600354612f1d908563ffffffff6142bc16565b6003908155810154612f35908563ffffffff6142bc16565b60038201556040516001600160a01b038616907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc05590612f75908790617691565b60405180910390a25b50612fc6565b836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b484604051612fbd9190617691565b60405180910390a25b50505050565b600e5481565b61100081565b61dead81565b600b8181548110612feb57fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff909116949192918301828280156130965780601f1061306b57610100808354040283529160200191613096565b820191906000526020600020905b81548152906001019060200180831161307957829003601f168201915b5050505050905083565b61100481565b6000600a54600014806130b7575081155b806130c25750600954155b156130cf57506000610f4e565b6009600081546001900391905081905550600061311a600a54612d4085612d40600b89815481106130fc57fe5b6000918252602090912060169091020154439063ffffffff61427a16565b90506000600b858154811061312b57fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b15801561319057600080fd5b505afa1580156131a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c89190616923565b9150915060009350808310613242576131e187876142e1565b506040516305bfb49960e41b815261100190635bfb499090613207908a90600401616a60565b600060405180830381600087803b15801561322157600080fd5b505af1158015613235573d6000803e3d6000fd5b5050505060019350613254565b8183106132545761325287614ab3565b505b6040516001600160a01b038816907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050509392505050565b61329a61656b565b60006132a461656b565b6132ac61658f565b6132bd6132b886614cd2565b614cf7565b90506000805b6132cc83614d41565b1561344057806132f1576132e76132e284614d62565b614db0565b60ff168452613438565b806001141561343357606061330d61330885614d62565b614e30565b9050805160405190808252806020026020018201604052801561334a57816020015b6133376165af565b81526020019060019003908161332f5790505b508560200181905250805160405190808252806020026020018201604052801561338857816020015b60608152602001906001900390816133735790505b50604086015260005b8151811015613428576133a26165af565b606060006133c28585815181106133b557fe5b6020026020010151614f01565b925092509250806133e2578860009a509a50505050505050505050613449565b82896020015185815181106133f357fe5b6020026020010181905250818960400151858151811061340f57fe5b6020026020010181905250505050806001019050613391565b506001925050613438565b613440565b6001016132c3565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b606081526020019060019003908161346857905050905061348e8363ffffffff1661501b565b8160008151811061349b57fe5b6020026020010181905250610f4e8161502e565b60006064835111156134e6576000805160206177248339815191526040516134d690616ea9565b60405180910390a150606661142a565b60005b83518110156135845760005b8181101561357b5784818151811061350957fe5b6020026020010151600001516001600160a01b031685838151811061352a57fe5b6020026020010151600001516001600160a01b031614156135735760008051602061772483398151915260405161356090617004565b60405180910390a160669250505061142a565b6001016134f5565b506001016134e9565b5060608061359285856150b8565b60015491935091506000908190815b818110156136175767016345785d8a0000600182815481106135bf57fe5b906000526020600020906004020160030154106135e15783600101935061360f565b6000600182815481106135f057fe5b906000526020600020906004020160030154111561360f578260010192505b6001016135a1565b50606083604051908082528060200260200182016040528015613644578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015613673578160200160208202803683370190505b5090506060856040519080825280602002602001820160405280156136a2578160200160208202803683370190505b5090506060866040519080825280602002602001820160405280156136d1578160200160208202803683370190505b5090506000606087604051908082528060200260200182016040528015613702578160200160208202803683370190505b509050606088604051908082528060200260200182016040528015613731578160200160208202803683370190505b509050600099506000985060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561377957600080fd5b505afa15801561378d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b1919061690b565b905067016345785d8a00008111156137fc576000805160206177248339815191526040516137de90617368565b60405180910390a160689d505050505050505050505050505061142a565b60005b89811015613a6d5767016345785d8a00006001828154811061381d57fe5b906000526020600020906004020160030154106139a2576001818154811061384157fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898d8151811061387257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be400600183815481106138a757fe5b906000526020600020906004020160030154816138c057fe5b06600183815481106138ce57fe5b9060005260206000209060040201600301540390506138f6838261427a90919063ffffffff16565b898e8151811061390257fe5b6020026020010181815250506001828154811061391b57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878e8151811061394c57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888e8151811061397957fe5b6020908102919091010152613994868263ffffffff6142bc16565b95508c6001019c5050613a65565b6000600182815481106139b157fe5b9060005260206000209060040201600301541115613a6557600181815481106139d657fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848c81518110613a0757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060018181548110613a3457fe5b906000526020600020906004020160030154838c81518110613a5257fe5b6020026020010181815250508a6001019a505b6001016137ff565b5060008415613ce3576002546040516303702b2960e51b815261100491636e056520918891613aa7918e918e918d91420190600401616b52565b6020604051808303818588803b158015613ac057600080fd5b505af193505050508015613af1575060408051601f3d908101601f19168201909252613aee91810190616838565b60015b613c68576040516000815260443d1015613b0d57506000613ba8565b60046000803e60005160e01c6308c379a08114613b2e576000915050613ba8565b60043d036004833e81513d60248201116001600160401b0382111715613b5957600092505050613ba8565b80830180516001600160401b03811115613b7a576000945050505050613ba8565b8060208301013d8601811115613b9857600095505050505050613ba8565b601f01601f191660405250925050505b80613bb35750613bf5565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051613be79190616bd7565b60405180910390a250613c63565b3d808015613c1f576040519150601f19603f3d011682016040523d82523d6000602084013e613c24565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051613c599190616bd7565b60405180910390a2505b613ce3565b8015613caa577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051613c9d9190617691565b60405180910390a1613ce1565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051613cd890616c99565b60405180910390a25b505b8015613e995760005b8751811015613e97576000888281518110613d0357fe5b60200260200101519050600060018281548110613d1c57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc9185908110613d4d57fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f1935050505090508015613e095760018281548110613d8e57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d9185908110613ddd57fe5b906000526020600020906004020160030154604051613dfc9190617691565b60405180910390a2613e8d565b60018281548110613e1657fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d9185908110613e6557fe5b906000526020600020906004020160030154604051613e849190617691565b60405180910390a25b5050600101613cec565b505b835115613fe35760005b8451811015613fe1576000858281518110613eba57fe5b60200260200101516001600160a01b03166108fc868481518110613eda57fe5b60200260200101519081150290604051600060405180830381858888f1935050505090508015613f7057858281518110613f1057fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d868481518110613f4e57fe5b6020026020010151604051613f639190617691565b60405180910390a2613fd8565b858281518110613f7c57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d868481518110613fba57fe5b6020026020010151604051613fcf9190617691565b60405180910390a25b50600101613ea3565b505b505050505050505050505050600047111561405f577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d476040516140279190617691565b60405180910390a1604051611002904780156108fc02916000818181858888f1935050505015801561405d573d6000803e3d6000fd5b505b6000600381905560055581511561407a5761407a82826152f1565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156140b757600080fd5b505af11580156140cb573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b80516001600160a01b0316600090815260046020526040812054801580614154575060018082038154811061413457fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b1561419a5782516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a2600091505061137a565b6001546005546000198201118015906141f05784516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000935050505061137a565b60058054600190810190915580548190600019860190811061420e57fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915585516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a2506000949350505050565b6000610f4e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615aab565b600082820183811015610f4e5760405162461bcd60e51b8152600401610ce790616dcd565b600080600183815481106142f157fe5b9060005260206000209060040201600301549050600060018080549050039050600161431b6126bb565b51116143505760006001858154811061433057fe5b90600052602060002090600402016003018190555060009250505061142a565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a70836040516143899190617691565b60405180910390a26001600160a01b038516600090815260046020526040812055835b6001546000190181101561457657600181600101815481106143ca57fe5b9060005260206000209060040201600182815481106143e557fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b8054909183019081106144a657fe5b9060005260206000209060160201600b82815481106144c157fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff19909216919091179055600280840180546145189383860193908216156101000260001901909116046165e4565b5061452b60038281019084016013616659565b5090505080600101600460006001848154811061454457fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020556001016143ac565b50600180548061458257fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b8054806145d557fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906146076002830182616683565b6146156003830160006166c7565b50509055600081838161462457fe5b04905080156146885760015460005b8181101561468557826001828154811061464957fe5b906000526020600020906004020160030154016001828154811061466957fe5b6000918252602090912060036004909202010155600101614633565b50505b50600195945050505050565b6001548151604080518281526020808402820101909152606092919083908280156146d357816020015b60608152602001906001900390816146be5790505b50600b5490915083146146ea57925061137a915050565b60005b828110156147f957600b60016004600089858151811061470957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054038154811061473d57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156147d55780601f106147aa576101008083540402835291602001916147d5565b820191906000526020600020905b8154815290600101906020018083116147b857829003601f168201915b50505050508282815181106147e657fe5b60209081029190910101526001016146ed565b50949350505050565b60005b8281101561494f5760008287838801604051602001614825929190616a52565b6040516020818303038152906040528051906020012060001c8161484557fe5b06905080850182870114614946576000898388018151811061486357fe5b602002602001015190506060898489018151811061487d57fe5b602002602001015190508a8388018151811061489557fe5b60200260200101518b858a01815181106148ab57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b848901815181106148da57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050898388018151811061490857fe5b60200260200101518a858a018151811061491e57fe5b6020026020010181905250808a8489018151811061493857fe5b602002602001018190525050505b50600101614805565b5050505050505050565b600980546001908101909155600b80548390811061497357fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b82815481106149a957fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b600081604051602001614a049190616a36565b6040516020818303038152906040528051906020012083604051602001614a2b9190616a36565b6040516020818303038152906040528051906020012014905092915050565b015190565b815181516000916001918114808314614a6b5760009250614aa9565b600160208701838101602088015b600284838510011415614aa4578051835114614a985760009650600093505b60209283019201614a79565b505050505b5090949350505050565b6001600160a01b03811660009081526004602052604081205480614adc5750600019905061137a565b600181039050600060018281548110614af157fe5b9060005260206000209060040201600301549050600060018381548110614b1457fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d90614b6d908590617691565b60405180910390a280614b855782935050505061137a565b6000818381614b9057fe5b0490508015614c4c5760005b84811015614bee578160018281548110614bb257fe5b9060005260206000209060040201600301540160018281548110614bd257fe5b6000918252602090912060036004909202010155600101614b9c565b50600180549085015b81811015614c49578260018281548110614c0d57fe5b9060005260206000209060040201600301540160018281548110614c2d57fe5b6000918252602090912060036004909202010155600101614bf7565b50505b5091949350505050565b600082614c655750600061142a565b82820282848281614c7257fe5b0414610f4e5760405162461bcd60e51b8152600401610ce79061723a565b6000610f4e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615ad7565b614cda6166d6565b506040805180820190915281518152602082810190820152919050565b614cff61658f565b614d0882615b0e565b614d1157600080fd5b6000614d208360200151615b48565b60208085015160408051808201909152868152920190820152915050919050565b6000614d4b6166d6565b505080518051602091820151919092015191011190565b614d6a6166d6565b614d7382614d41565b614d7c57600080fd5b60208201516000614d8c82615bab565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590614dc557508151602110155b614dce57600080fd5b6000614ddd8360200151615b48565b90508083600001511015614e035760405162461bcd60e51b8152600401610ce7906173e0565b8251602080850151830180519284900392918310156147f957506020919091036101000a90049392505050565b6060614e3b82615b0e565b614e4457600080fd5b6000614e4f83615c8c565b9050606081604051908082528060200260200182016040528015614e8d57816020015b614e7a6166d6565b815260200190600190039081614e725790505b5090506000614e9f8560200151615b48565b60208601510190506000805b84811015614ef657614ebc83615bab565b9150604051806040016040528083815260200184815250848281518110614edf57fe5b602090810291909101015291810191600101614eab565b509195945050505050565b614f096165af565b60606000614f156165af565b6060614f1f61658f565b614f2887614cf7565b90506000805b614f3783614d41565b1561500c5780614f6257614f52614f4d84614d62565b615ce8565b6001600160a01b03168552615004565b8060011415614f8a57614f77614f4d84614d62565b6001600160a01b03166020860152615004565b8060021415614fb257614f9f614f4d84614d62565b6001600160a01b03166040860152615004565b8060031415614fde57614fc76132e284614d62565b6001600160401b0316606086015260019150615004565b8060041415614fff57614ff8614ff384614d62565b615d02565b9350615004565b61500c565b600101614f2e565b50929791965091945092505050565b606061142a61502983615d72565b615e58565b606081516000141561504f575060408051600081526020810190915261137a565b60608260008151811061505e57fe5b602002602001015190506000600190505b835181101561509f576150958285838151811061508857fe5b6020026020010151615eaa565b915060010161506f565b50610f4e6150b2825160c060ff16615f27565b82615eaa565b6060806000808080806150c96127c5565b6001549091505b80156151d757600181039250600b83815481106150e957fe5b600091825260209091206001601690920201015460ff16615109576151ce565b6001838154811061511657fe5b60009182526020909120600490910201546001600160a01b0316945061513d8584846130a6565b9350831580615150575060018a51038610155b1561515a576151ce565b60005b8a518110156151cc57856001600160a01b03168b828151811061517c57fe5b6020026020010151600001516001600160a01b031614156151c45760018b82815181106151a557fe5b60209081029190910101519015156080909101526001909601956151cc565b60010161515d565b505b600019016150d0565b508489510360405190808252806020026020018201604052801561521557816020015b6152026165af565b8152602001906001900390816151fa5790505b5096508489510360405190808252806020026020018201604052801561524f57816020015b606081526020019060019003908161523a5790505b5095506000915060005b89518110156152e35789818151811061526e57fe5b6020026020010151608001516152db5789818151811061528a57fe5b602002602001015188848151811061529e57fe5b60200260200101819052508881815181106152b557fe5b60200260200101518784815181106152c957fe5b60200260200101819052508260010192505b600101615259565b5050505050505b9250929050565b600154825160005b8281101561540e57600161530b6165af565b6001838154811061531857fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156153e2578781815181106153a857fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b031614156153da57600092506153e2565b600101615394565b5081156154045780516001600160a01b03166000908152600460205260408120555b50506001016152f9565b50808211156154cd57805b828110156154cb57600180548061542c57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061547f57fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906154b16002830182616683565b6154bf6003830160006166c7565b50509055600101615419565b505b60008183106154dc57816154de565b825b905060005b8181101561584d576155908682815181106154fa57fe5b60200260200101516001838154811061550f57fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152615ff9565b6157445780600101600460008884815181106155a857fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055508581815181106155e457fe5b6020026020010151600182815481106155f957fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015584518590829081106156b457fe5b6020026020010151600b82815481106156c957fe5b906000526020600020906016020160020190805190602001906156ed9291906164c4565b506000600b82815481106156fd57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b80548390811061572e57fe5b6000918252602090912060169091020155615845565b6157d585828151811061575357fe5b6020026020010151600b838154811061576857fe5b600091825260209182902060026016909202018101805460408051601f600019610100600186161502019093169490940491820185900485028401850190528083529192909190830182828015612ab85780601f10612a8d57610100808354040283529160200191612ab8565b615820578481815181106157e557fe5b6020026020010151600b82815481106157fa57fe5b9060005260206000209060160201600201908051906020019061581e9291906164c4565b505b60006001828154811061582f57fe5b9060005260206000209060040201600301819055505b6001016154e3565b5082821115615a255761585e616495565b835b83811015615a225785818151811061587457fe5b60200260200101518260400181905250600187828151811061589257fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b8054928301815590935284516016909102600080516020617744833981519152810191825585830151600080516020617d738339815191528201805491151560ff19909216919091179055928501518051869492936159c893600080516020617764833981519152019201906164c4565b5060608201516159de906003830190601361653e565b50505080600101600460008984815181106159f557fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101615860565b50505b615a2d61607a565b615a3561625c565b6000600981905560015493505b83811015615aa3576000600b8281548110615a5957fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b805483908110615a8a57fe5b6000918252602090912060169091020155600101615a42565b505050505050565b60008184841115615acf5760405162461bcd60e51b8152600401610ce79190616bd7565b505050900390565b60008183615af85760405162461bcd60e51b8152600401610ce79190616bd7565b506000838581615b0457fe5b0495945050505050565b8051600090615b1f5750600061137a565b6020820151805160001a9060c0821015615b3e5760009250505061137a565b5060019392505050565b8051600090811a6080811015615b6257600091505061137a565b60b8811080615b7d575060c08110801590615b7d575060f881105b15615b8c57600191505061137a565b60c0811015615ba05760b51901905061137a565b60f51901905061137a565b80516000908190811a6080811015615bc65760019150615c85565b60b8811015615bdb57607e1981019150615c85565b60c0811015615c2c57600060b78203600186019550806020036101000a865104915060018101820193505080831015615c265760405162461bcd60e51b8152600401610ce790617187565b50615c85565b60f8811015615c415760be1981019150615c85565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615c835760405162461bcd60e51b8152600401610ce790617187565b505b5092915050565b8051600090615c9d5750600061137a565b60008090506000615cb18460200151615b48565b602085015185519181019250015b80821015615cdf57615cd082615bab565b82019150826001019250615cbf565b50909392505050565b8051600090601514615cf957600080fd5b61142a82614db0565b8051606090615d1057600080fd5b6000615d1f8360200151615b48565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015615d56576020820181803683370190505b50905060008160200190506147f984876020015101828561644a565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416615db657506018615dda565b6fffffffffffffffffffffffffffffffff198416615dd657506010615dda565b5060005b6020811015615e1057818181518110615def57fe5b01602001516001600160f81b03191615615e0857615e10565b600101615dda565b60008160200390506060816040519080825280601f01601f191660200182016040528015615e45576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015615e8a5750607f60f81b82600081518110615e7857fe5b01602001516001600160f81b03191611155b15615e9657508061137a565b61142a615ea88351608060ff16615f27565b835b6060806040519050835180825260208201818101602087015b81831015615edb578051835260209283019201615ec3565b50855184518101855292509050808201602086015b81831015615f08578051835260209283019201615ef0565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310615f515760405162461bcd60e51b8152600401610ce790616f7f565b60408051600180825281830190925260609160208201818036833701905050905060378411615fab5782840160f81b81600081518110615f8d57fe5b60200101906001600160f81b031916908160001a905350905061142a565b6060615fb685615d72565b90508381510160370160f81b82600081518110615fcf57fe5b60200101906001600160f81b031916908160001a905350615ff08282615eaa565b95945050505050565b805182516000916001600160a01b039182169116148015616033575081602001516001600160a01b031683602001516001600160a01b0316145b8015616058575081604001516001600160a01b031683604001516001600160a01b0316145b8015610f4e5750506060908101519101516001600160401b0390811691161490565b601254601354808211156160c557805b828110156160c357601280548061609d57fe5b6001900381819060005260206000200160006160b99190616683565b905560010161608a565b505b60008183106160d457816160d6565b825b905060005b818110156161ee57616193601282815481106160f357fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156161815780601f1061615657610100808354040283529160200191616181565b820191906000526020600020905b81548152906001019060200180831161616457829003601f168201915b505050505060138381548110612a2a57fe5b6161e657601381815481106161a457fe5b90600052602060002001601282815481106161bb57fe5b9060005260206000200190805460018160011615610100020316600290046161e49291906165e4565b505b6001016160db565b5082821115610d0757825b82811015612fc65760126013828154811061621057fe5b60009182526020808320845460018181018755958552919093209290910180546162539493909201929091600261010092821615929092026000190116046165e4565b506001016161f9565b601354600b54808211156162a757805b828110156162a557601380548061627f57fe5b60019003818190600052602060002001600061629b9190616683565b905560010161626c565b505b60008183106162b657816162b8565b825b905060005b818110156163d757616375601382815481106162d557fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156163635780601f1061633857610100808354040283529160200191616363565b820191906000526020600020905b81548152906001019060200180831161634657829003601f168201915b5050505050600b838154811061576857fe5b6163cf57600b818154811061638657fe5b9060005260206000209060160201600201601382815481106163a457fe5b9060005260206000200190805460018160011615610100020316600290046163cd9291906165e4565b505b6001016162bd565b5082821115610d0757825b82811015612fc6576013600b82815481106163f957fe5b600091825260208083208454600180820187559585529190932060169290920290920160029081018054616441959390940193909260001990821615610100020116046165e4565b506001016163e2565b8061645457610d07565b5b60208110616474578251825260209283019290910190601f1901616455565b915181516020939093036101000a6000190180199091169216919091179052565b604051806080016040528060008152602001600015158152602001606081526020016164bf6166f0565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061650557805160ff1916838001178555616532565b82800160010185558215616532579182015b82811115616532578251825591602001919060010190616517565b5061280092915061670f565b82601381019282156165325791602002820182811115616532578251825591602001919060010190616517565b6040518060600160405280600060ff16815260200160608152602001606081525090565b60405180604001604052806165a26166d6565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061661d5780548555616532565b8280016001018555821561653257600052602060002091601f016020900482015b8281111561653257825482559160010191906001019061663e565b8260138101928215616532579182018281111561653257825482559160010191906001019061663e565b50805460018160011615610100020316600290046000825580601f106166a95750611586565b601f016020900490600052602060002090810190611586919061670f565b5061158690601381019061670f565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b6127a491905b808211156128005760008155600101616715565b60008083601f84011261673a578182fd5b5081356001600160401b03811115616750578182fd5b60208301915083602080830285010111156152ea57600080fd5b60008083601f84011261677b578182fd5b5081356001600160401b03811115616791578182fd5b6020830191508360208285010111156152ea57600080fd5b6000602082840312156167ba578081fd5b81356001600160a01b0381168114610f4e578182fd5b600080600080604085870312156167e5578283fd5b84356001600160401b03808211156167fb578485fd5b61680788838901616729565b9096509450602087013591508082111561681f578384fd5b5061682c87828801616729565b95989497509550505050565b600060208284031215616849578081fd5b81518015158114610f4e578182fd5b6000806020838503121561686a578182fd5b82356001600160401b0381111561687f578283fd5b61688b8582860161676a565b90969095509350505050565b600080600080604085870312156168ac578384fd5b84356001600160401b03808211156168c2578586fd5b6168ce8883890161676a565b909650945060208701359150808211156168e6578384fd5b5061682c8782880161676a565b600060208284031215616904578081fd5b5035919050565b60006020828403121561691c578081fd5b5051919050565b60008060408385031215616935578182fd5b505080516020909101519092909150565b60008060006040848603121561695a578283fd5b833560ff8116811461696a578384fd5b925060208401356001600160401b03811115616984578283fd5b6169908682870161676a565b9497909650939450505050565b6000815180845260208085019450808401835b838110156169d55781516001600160a01b0316875295820195908201906001016169b0565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452616a228160208601602086016176f7565b601f01601f19169290920160200192915050565b60008251616a488184602087016176f7565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b600060208252610f4e602083018461699d565b600060408252616af5604083018561699d565b602083820381850152818551808452828401915082838202850101838801865b83811015616b4357601f19878403018552616b31838351616a0a565b94860194925090850190600101616b15565b50909998505050505050505050565b600060808252616b65608083018761699d565b828103602084810191909152865180835287820192820190845b81811015616b9b57845183529383019391830191600101616b7f565b50508481036040860152616baf818861699d565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b600060208252610f4e6020830184616a0a565b600060408252616bfe6040830186886169e0565b8281036020840152616c118185876169e0565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252602b908201527f746865206275726e526174696f206d757374206265206e6f206772656174657260408201526a0207468616e2031303030360ac1b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526033908201527f7468652073797374656d526577617264526174696f206d757374206265206e6f60408201527202067726561746572207468616e20313030303606c1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526024908201527f6c656e677468206f662073797374656d526577617264526174696f206d69736d6040820152630c2e8c6d60e31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b61ffff91909116815260200190565b90815260200190565b6000848252831515602083015260606040830152615ff06060830184616a0a565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff8516825260406020830152615ff06040830184866169e0565b60005b838110156177125781810151838201526020016176fa565b83811115612fc6575050600091015256fe70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb20175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbbf905ec80f905e8f846942a7cdd959bfe8d9487b2a43b33565295a698f7e294b6a7edd747c0554875d3fc531d19ba1497992c5e941ff80f3f7f110ffd8920a3ac38fdef318fe94a3f86048c27395000f846946488aa4d1955ee33403f8ccb1d4de5fb97c7ade294220f003d8bdfaadf52aa1e55ae4cc485e6794875941a87e90e440a39c99aa9cb5cea0ad6a3f0b2407b86048c27395000f846949ef9f4360c606c7ab4db26b016007d3ad0ab86a0946103af86a874b705854033438383c82575f25bc29418e2db06cbff3e3c5f856410a1838649e760175786048c27395000f84694ee01c3b1283aa067c58eab4709f85e99d46de5fe94ee4b9bfb1871c64e2bcabb1dc382dc8b7c4218a29415904ab26ab0e99d70b51c220ccdcccabee6e29786048c27395000f84694685b1ded8013785d6623cc18d214320b6bb6475994a20ef4e5e4e7e36258dbf51f4d905114cb1b34bc9413e39085dc88704f4394d35209a02b1a9520320c86048c27395000f8469478f3adfc719c99674c072166708589033e2d9afe9448a30d5eaa7b64492a160f139e2da2800ec3834e94055838358c29edf4dcc1ba1985ad58aedbb6be2b86048c27395000f84694c2be4ec20253b8642161bc3f444f53679c1f3d479466f50c616d737e60d7ca6311ff0d9c434197898a94d1d678a2506eeaa365056fe565df8bc8659f28b086048c27395000f846942f7be8361c80a4c1e7e9aaf001d0877f1cfde218945f93992ac37f3e61db2ef8a587a436a161fd210b94ecbc4fb1a97861344dad0867ca3cba2b860411f086048c27395000f84694ce2fd7544e0b2cc94692d4a704debef7bcb613289444abc67b4b2fba283c582387f54c9cba7c34bafa948acc2ab395ded08bb75ce85bf0f95ad2abc51ad586048c27395000f84694b8f7166496996a7da21cf1f1b04d9b3e26a3d077946770572763289aac606e4f327c2f6cc1aa3b3e3b94882d745ed97d4422ca8da1c22ec49d880c4c097286048c27395000f846942d4c407bbe49438ed859fe965b140dcf1aab71a9943ad0939e120f33518fbba04631afe7a3ed6327b194b2bbb170ca4e499a2b0f3cc85ebfa6e8c4dfcbea86048c27395000f846946bbad7cf34b5fa511d8e963dbba288b1960e75d694853b0f6c324d1f4e76c8266942337ac1b0af1a229442498946a51ca5924552ead6fc2af08b94fcba648601d1a94a2000f846944430b3230294d12c6ab2aac5c2cd68e80b16b581947b107f4976a252a6939b771202c28e64e03f52d694795811a7f214084116949fc4f53cedbf189eeab28601d1a94a2000f84694ea0a6e3c511bbd10f4519ece37dc24887e11b55d946811ca77acfb221a49393c193f3a22db829fcc8e9464feb7c04830dd9ace164fc5c52b3f5a29e5018a8601d1a94a2000f846947ae2f5b9e386cd1b50a4550696d957cb4900f03a94e83bcc5077e6b873995c24bac871b5ad856047e19464e48d4057a90b233e026c1041e6012ada897fe88601d1a94a2000f8469482012708dafc9e1b880fd083b32182b869be8e09948e5adc73a2d233a1b496ed3115464dd6c7b887509428b383d324bc9a37f4e276190796ba5a8947f5ed8601d1a94a2000f8469422b81f8e175ffde54d797fe11eb03f9e3bf75f1d94a1c3ef7ca38d8ba80cce3bfc53ebd2903ed21658942767f7447f7b9b70313d4147b795414aecea54718601d1a94a2000f8469468bf0b8b6fb4e317a0f9d6f03eaf8ce6675bc60d94675cfe570b7902623f47e7f59c9664b5f5065dcf94d84f0d2e50bcf00f2fc476e1c57f5ca2d57f625b8601d1a94a2000f846948c4d90829ce8f72d0163c1d5cf348a862d5506309485c42a7b34309bee2ed6a235f86d16f059deec5894cc2cedc53f0fa6d376336efb67e43d167169f3b78601d1a94a2000f8469435e7a025f4da968de7e4d7e4004197917f4070f194b1182abaeeb3b4d8eba7e6a4162eac7ace23d57394c4fd0d870da52e73de2dd8ded19fe3d26f43a1138601d1a94a2000f84694d6caa02bbebaebb5d7e581e4b66559e635f805ff94c07335cf083c1c46a487f0325769d88e163b653694efaff03b42e41f953a925fc43720e45fb61a19938601d1a94a20000175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaa164736f6c6343000604000a", + }, + { + ContractAddr: common.HexToAddress(SlashContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + Code: "608060405234801561001057600080fd5b50600436106102955760003560e01c80638256ace611610167578063c81b1662116100ce578063e1c7392a11610087578063e1c7392a146104d3578063eb57bff7146104db578063f9a2bbc7146104e3578063fc3e5908146104eb578063fc4333cd146104f3578063fd6a6879146104fb57610295565b8063c81b166214610482578063c8509d811461048a578063c96be4cb1461049d578063cc844b73146104b0578063d2a42e4b146104c3578063dc927faf146104cb57610295565b8063a78abc1611610120578063a78abc1614610447578063ab51bb961461044f578063ac0af62914610457578063ac4317511461045f578063ae61dc3b14610472578063c80d4b8f1461047a57610295565b80638256ace61461040c578063831d65d11461041457806396713da9146104275780639bc8e4f21461042f5780639dc0926214610437578063a1a11bf51461043f57610295565b8063493279b11161020b5780636e47b482116101c45780636e47b482146103dc57806370fd5bad146103e4578063718a8aa8146103ec57806375d47a0a146103f45780637912a65d146103fc5780637942fd051461040457610295565b8063493279b1146103925780634bf6c882146103a757806351e80672146103af578063567a372d146103b75780635bfb4990146103bf57806362b72cf5146103d457610295565b806335aa2e441161025d57806335aa2e441461032457806337c8dab914610337578063389f4f71146103585780633a63f4b11461036d5780633dffc3871461037557806343756e5c1461038a57610295565b80630bee7a671461029a5780630e2374a5146102b85780631182b875146102cd57806322d1e80b146102ed57806323bac5a214610302575b600080fd5b6102a2610503565b6040516102af919061354e565b60405180910390f35b6102c0610508565b6040516102af9190612d6a565b6102e06102db366004612ca0565b61050e565b6040516102af9190612da2565b6102f5610574565b6040516102af9190612d97565b610315610310366004612a4e565b61057d565b6040516102af93929190613536565b6102c0610332366004612c70565b6105a0565b61034a610345366004612a4e565b6105c7565b6040516102af929190613528565b61036061061e565b6040516102af91906134fe565b610360610624565b61037d61062a565b6040516102af919061355f565b6102c061062f565b61039a610635565b6040516102af91906134ef565b61037d61063a565b6102c061063f565b610360610645565b6103d26103cd366004612a4e565b61064b565b005b6103606106f6565b6102c06106fc565b61037d610702565b61037d610707565b6102c061070c565b610360610712565b61037d610717565b61034a61071c565b6103d2610422366004612ca0565b610726565b61037d610838565b61036061083d565b6102c0610848565b6102c061084e565b6102f5610854565b6102a261085d565b610360610862565b6103d261046d366004612b54565b610867565b610360610e17565b610360610e1e565b6102c0610e23565b6103d2610498366004612ca0565b610e29565b6103d26104ab366004612a4e565b610e9a565b6103d26104be366004612bbd565b61128b565b61036061187c565b6102c0611881565b6103d2611887565b6103606118c3565b6102c06118c9565b61037d6118cf565b6103d26118d4565b6102c0611d1d565b606481565b61200181565b6060336120001461053a5760405162461bcd60e51b815260040161053190613347565b60405180910390fd5b60005460ff1661055c5760405162461bcd60e51b815260040161053190612e9d565b60405162461bcd60e51b815260040161053190613438565b60075460ff1681565b600260208190526000918252604090912080546001820154919092015460ff1683565b600181815481106105ad57fe5b6000918252602090912001546001600160a01b0316905081565b6000806105d2612835565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b60065481565b600181565b61100181565b603881565b600881565b61200081565b60045481565b336110001461066c5760405162461bcd60e51b81526004016105319061312c565b60005460ff1661068e5760405162461bcd60e51b815260040161053190612e9d565b61200063f7a251d7600b6106a184611d23565b60006040518463ffffffff1660e01b81526004016106c19392919061356d565b600060405180830381600087803b1580156106db57600080fd5b505af11580156106ef573d6000803e3d6000fd5b5050505050565b60035481565b61100581565b600281565b601081565b61100881565b603281565b600b81565b6004546005549091565b33612000146107475760405162461bcd60e51b815260040161053190613347565b60005460ff166107695760405162461bcd60e51b815260040161053190612e9d565b610771612858565b60006107b284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611df592505050565b9150915080156107f95781516040517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e629967916107ec9161354e565b60405180910390a16106ef565b81516040517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e7916108299161354e565b60405180910390a15050505050565b600981565b662386f26fc1000081565b61100781565b61100681565b60005460ff1681565b600081565b600481565b60005460ff166108895760405162461bcd60e51b815260040161053190612e9d565b33611007146108aa5760405162461bcd60e51b815260040161053190613204565b61091584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b60208201529150611e759050565b156109b0576020811461093a5760405162461bcd60e51b8152600401610531906130b8565b604080516020601f840181900481028201810190925282815260009161097891858580838501838280828437600092019190915250611ecf92505050565b90506001811015801561098c575060055481105b6109a85760405162461bcd60e51b815260040161053190613302565b600455610dd4565b610a1684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b60208201529150611e759050565b15610ab25760208114610a3b5760405162461bcd60e51b815260040161053190613252565b604080516020601f8401819004810282018101909252828152600091610a7991858580838501838280828437600092019190915250611ecf92505050565b90506103e88111158015610a8e575060045481115b610aaa5760405162461bcd60e51b815260040161053190612f56565b600555610dd4565b610b2684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f66696e616c697479536c617368526577617264526174696f000000000000000060208201529150611e759050565b15610bc05760208114610b4b5760405162461bcd60e51b81526004016105319061346f565b604080516020601f8401819004810282018101909252828152600091610b8991858580838501838280828437600092019190915250611ecf92505050565b9050600a8110158015610b9c5750606481105b610bb85760405162461bcd60e51b81526004016105319061306c565b600655610dd4565b610c3484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f656e61626c654d616c6963696f7573566f7465536c617368000000000000000060208201529150611e759050565b15610cab5760208114610c595760405162461bcd60e51b815260040161053190612f8b565b604080516020601f8401819004810282018101909252828152610c959190848480838501838280828437600092019190915250611ed492505050565b6007805460ff1916911515919091179055610dd4565b610d1f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601781527f6d616c6963696f7573566f7465536c61736853636f706500000000000000000060208201529150611e759050565b15610dbc5760208114610d445760405162461bcd60e51b815260040161053190612de7565b604080516020601f8401819004810282018101909252828152600091610d8291858580838501838280828437600092019190915250611ecf92505050565b90506170808110158015610d985750620d2f0081105b610db45760405162461bcd60e51b815260040161053190612ed4565b600855610dd4565b60405162461bcd60e51b8152600401610531906133e3565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a84848484604051610e099493929190612db5565b60405180910390a150505050565b6201518081565b609681565b61100281565b3361200014610e4a5760405162461bcd60e51b815260040161053190613347565b60005460ff16610e6c5760405162461bcd60e51b815260040161053190612e9d565b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b334114610eb95760405162461bcd60e51b815260040161053190613396565b60005460ff16610edb5760405162461bcd60e51b815260040161053190612e9d565b6003544311610efc5760405162461bcd60e51b8152600401610531906134ba565b3a15610f1a5760405162461bcd60e51b8152600401610531906131a7565b60405163155853f360e21b8152611000906355614fcc90610f3f908490600401612d6a565b60206040518083038186803b158015610f5757600080fd5b505afa158015610f6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8f9190612b34565b610f9857611284565b610fa0612835565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff161580159282019290925290610ffb576020810180516001019052611054565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b43815260055460208201518161106657fe5b066111b257600060208201526040516335409f7f60e01b8152611000906335409f7f90611097908590600401612d6a565b600060405180830381600087803b1580156110b157600080fd5b505af11580156110c5573d6000803e3d6000fd5b505050506120006001600160a01b031663f7a251d7600b6110e585611d23565b60006040518463ffffffff1660e01b81526004016111059392919061356d565b600060405180830381600087803b15801561111f57600080fd5b505af1925050508015611130575060015b6111ad573d80801561115e576040519150601f19603f3d011682016040523d82523d6000602084013e611163565b606091505b50826001600160a01b03167fd7bc86ff5d08c8ab043edec743302aba2520e6635172a428bc956721db9e2d1c8360200151836040516111a3929190613507565b60405180910390a2505b61121e565b6004548160200151816111c157fe5b0661121e576040516375abf10160e11b81526110009063eb57e202906111eb908590600401612d6a565b600060405180830381600087803b15801561120557600080fd5b505af1158015611219573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505b5043600355565b60005460ff166112ad5760405162461bcd60e51b815260040161053190612e9d565b604051630a83aaa960e31b81526110069063541d5548906112d2903390600401612d6a565b60206040518083038186803b1580156112ea57600080fd5b505afa1580156112fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113229190612b34565b61133e5760405162461bcd60e51b815260040161053190612e31565b60075460ff166113605760405162461bcd60e51b815260040161053190612e68565b60065461136d5760146006555b60085461137c57620151806008555b6008548151604001514391011180156113a057504360085482602001516040015101115b6113bc5760405162461bcd60e51b81526004016105319061340a565b8060200151602001518160000151602001511480156113ea5750806020015160600151816000015160600151145b156114075760405162461bcd60e51b8152600401610531906130ff565b8051604081015190511080156114265750602081015160408101519051105b6114425760405162461bcd60e51b815260040161053190613035565b6020810151518151511080156114675750806000015160400151816020015160400151105b8061149257508051516020820151511080156114925750806020015160400151816000015160400151105b806114ac5750806020015160400151816000015160400151145b6114c85760405162461bcd60e51b815260040161053190612f1f565b604080820151905163ea321e4960e01b81526110009163ea321e49916114f19190600401612da2565b60206040518083038186803b15801561150957600080fd5b505afa15801561151d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115419190612b34565b61155d5760405162461bcd60e51b8152600401610531906131d5565b61156f81600001518260400151611efc565b8015611588575061158881602001518260400151611efc565b6115a45760405162461bcd60e51b815260040161053190612fd6565b6060806110006001600160a01b0316633b071dcc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156115e257600080fd5b505afa1580156115f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261161e9190810190612a71565b9150915060005b81518110156117595761164f82828151811061163d57fe5b602002602001015185604001516120d4565b15611751576006546040516213929d60e11b8152606461100280319093020491906227253a906116859033908590600401612d7e565b602060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d79190612c88565b506110006001600160a01b03166335409f7f8584815181106116f557fe5b60200260200101516040518263ffffffff1660e01b81526004016117199190612d6a565b600060405180830381600087803b15801561173357600080fd5b505af1158015611747573d6000803e3d6000fd5b5050505050611759565b600101611625565b50600061176b84604001516000612138565b90506120006001600160a01b031663f7a251d7600b61178d8760400151612154565b60006040518463ffffffff1660e01b81526004016117ad9392919061356d565b600060405180830381600087803b1580156117c757600080fd5b505af19250505080156117d8575060015b61184a573d808015611806576040519150601f19603f3d011682016040523d82523d6000602084013e61180b565b606091505b50817fd58d1183100bd0932c0588f31c4205d6bc6168909765a96c41adbed3115f36288260405161183c9190612da2565b60405180910390a250611876565b60405181907f7b78aadacff901d8b63d0dba4f86283d4db8aef27f9ed70413dd860f1c9532b690600090a25b50505050565b601481565b61100381565b60005460ff16156118aa5760405162461bcd60e51b815260040161053190613294565b603260045560966005556000805460ff19166001179055565b60085481565b61100081565b600381565b33611000146118f55760405162461bcd60e51b81526004016105319061312c565b60005460ff166119175760405162461bcd60e51b815260040161053190612e9d565b60015461192357611d1b565b600154600090600019015b808211611cef576000805b82841015611a5257611949612835565b600260006001878154811061195a57fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611a3c576004600554816119c757fe5b048160200151038160200181815250508060026000600188815481106119e957fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611a46565b6001925050611a52565b50836001019350611939565b828411611be957611a61612835565b6002600060018681548110611a7257fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611b5a57600460055481611adf57fe5b04816020015103816020018181525050806002600060018781548110611b0157fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff19169115159190911790559150611be99050565b6002600060018681548110611b6b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805480611baf57fe5b600082815260209020810160001990810180546001600160a01b031916905501905583611bdc5750611be9565b5060001990920191611a52565b818015611bf35750805b15611cd2576002600060018681548110611c0957fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805484908110611c5057fe5b600091825260209091200154600180546001600160a01b039092169186908110611c7657fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001805480611caf57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b82611cde575050611cef565b50506001909101906000190161192e565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081611d3e579050509050611d67836001600160a01b031661218f565b81600081518110611d7457fe5b6020026020010181905250611d88436121b2565b81600181518110611d9557fe5b6020908102919091010152611daa60386121b2565b81600281518110611db757fe5b6020026020010181905250611dcb426121b2565b81600381518110611dd857fe5b6020026020010181905250611dec816121c5565b9150505b919050565b611dfd612858565b6000611e07612858565b611e0f61286a565b611e20611e1b8661224f565b612274565b90506000805b611e2f836122be565b15611e685780611e5b57611e4a611e45846122df565b61232d565b63ffffffff16845260019150611e60565b611e68565b600101611e26565b5091935090915050915091565b600081604051602001611e889190612d4e565b6040516020818303038152906040528051906020012083604051602001611eaf9190612d4e565b604051602081830303815290604052805190602001201490505b92915050565b015190565b8082015160009060ff811615611eee576001915081611ef4565b60009150815b505092915050565b60408051600480825260a0820190925260009160609190816020015b6060815260200190600190039081611f18575050604080516020808252818301909252919250606091908082018180368337019050509050611f5d85600001516121b2565b82600081518110611f6a57fe5b6020026020010181905250611f8560208660200151836123af565b611f8e816123bf565b82600181518110611f9b57fe5b6020026020010181905250611fb385604001516121b2565b82600281518110611fc057fe5b6020026020010181905250611fdb60208660600151836123af565b611fe4816123bf565b82600381518110611ff157fe5b6020026020010181905250612017602061200a846121c5565b80519060200120836123af565b6040805160b080825260e08201909252606091602082018180368337019050509050612047818360006020612415565b61205981876080015160206060612415565b612067818660806030612415565b604080516001808252818301909252606091602082018180368337019050509050815160016020830182602086016066600019fa6120a457600080fd5b5060016120b2826000612468565b60ff16146120c7576000945050505050611ec9565b5060019695505050505050565b8151815160009160019181148083146120f0576000925061212e565b600160208701838101602088015b60028483851001141561212957805183511461211d5760009650600093505b602092830192016120fe565b505050505b5090949350505050565b6000816020018351101561214b57600080fd5b50016020015190565b60408051600480825260a08201909252606091829190816020015b606081526020019060019003908161216f579050509050611d67836123bf565b60408051600560a21b8318601482015260348101909152606090611dec816123bf565b6060611ec96121c083612484565b6123bf565b60608151600014156121e65750604080516000815260208101909152611df0565b6060826000815181106121f557fe5b602002602001015190506000600190505b83518110156122365761222c8285838151811061221f57fe5b602002602001015161256a565b9150600101612206565b50611dec612249825160c060ff166125e7565b8261256a565b61225761288a565b506040805180820190915281518152602082810190820152919050565b61227c61286a565b612285826126b9565b61228e57600080fd5b600061229d83602001516126f3565b60208085015160408051808201909152868152920190820152915050919050565b60006122c861288a565b505080518051602091820151919092015191011190565b6122e761288a565b6122f0826122be565b6122f957600080fd5b6020820151600061230982612756565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061234257508151602110155b61234b57600080fd5b600061235a83602001516126f3565b905080836000015110156123805760405162461bcd60e51b8152600401610531906132cb565b8251602080850151830180519284900392918310156123a657826020036101000a820491505b50949350505050565b9091018181526020918201910152565b6060815160011480156123f15750607f60f81b826000815181106123df57fe5b01602001516001600160f81b03191611155b156123fd575080611df0565b611ec961240f8351608060ff166125e7565b8361256a565b60005b818110156106ef5783818151811061242c57fe5b602001015160f81c60f81b85848060010195508151811061244957fe5b60200101906001600160f81b031916908160001a905350600101612418565b6000816001018351101561247b57600080fd5b50016001015190565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166124c8575060186124ec565b6fffffffffffffffffffffffffffffffff1984166124e8575060106124ec565b5060005b60208110156125225781818151811061250157fe5b01602001516001600160f81b0319161561251a57612522565b6001016124ec565b60008160200390506060816040519080825280601f01601f191660200182016040528015612557576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561259b578051835260209283019201612583565b50855184518101855292509050808201602086015b818310156125c85780518352602092830192016125b0565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106126115760405162461bcd60e51b81526004016105319061300d565b6040805160018082528183019092526060916020820181803683370190505090506037841161266b5782840160f81b8160008151811061264d57fe5b60200101906001600160f81b031916908160001a9053509050611ec9565b606061267685612484565b90508381510160370160f81b8260008151811061268f57fe5b60200101906001600160f81b031916908160001a9053506126b0828261256a565b95945050505050565b80516000906126ca57506000611df0565b6020820151805160001a9060c08210156126e957600092505050611df0565b5060019392505050565b8051600090811a608081101561270d576000915050611df0565b60b8811080612728575060c08110801590612728575060f881105b15612737576001915050611df0565b60c081101561274b5760b519019050611df0565b60f519019050611df0565b80516000908190811a6080811015612771576001915061282e565b60b881101561278657607e198101915061282e565b60c08110156127d757600060b78203600186019550806020036101000a8651049150600181018201935050808310156127d15760405162461bcd60e51b81526004016105319061317c565b5061282e565b60f88110156127ec5760be198101915061282e565b600060f78203600186019550806020036101000a865104915060018101820193505080831015611ef45760405162461bcd60e51b81526004016105319061317c565b5092915050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b604051806040016040528061287d61288a565b8152602001600081525090565b604051806040016040528060008152602001600081525090565b600082601f8301126128b4578081fd5b81516128c76128c2826135c0565b613599565b818152915060208083019084810160005b8481101561293d578151870188603f8201126128f357600080fd5b838101516129036128c2826135e0565b81815260408b8184860101111561291957600080fd5b61292883888401838701613604565b508652505092820192908201906001016128d8565b505050505092915050565b60008083601f840112612959578182fd5b50813567ffffffffffffffff811115612970578182fd5b60208301915083602082850101111561298857600080fd5b9250929050565b600082601f83011261299f578081fd5b81356129ad6128c2826135e0565b91508082528360208285010111156129c457600080fd5b8060208401602084013760009082016020015292915050565b600060a082840312156129ee578081fd5b6129f860a0613599565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff811115612a3657600080fd5b612a428482850161298f565b60808301525092915050565b600060208284031215612a5f578081fd5b8135612a6a81613630565b9392505050565b60008060408385031215612a83578081fd5b825167ffffffffffffffff80821115612a9a578283fd5b81850186601f820112612aab578384fd5b80519250612abb6128c2846135c0565b80848252602080830192508084018a828389028701011115612adb578788fd5b8794505b86851015612b06578051612af281613630565b845260019490940193928101928101612adf565b508801519096509350505080821115612b1d578283fd5b50612b2a858286016128a4565b9150509250929050565b600060208284031215612b45578081fd5b81518015158114612a6a578182fd5b60008060008060408587031215612b69578182fd5b843567ffffffffffffffff80821115612b80578384fd5b612b8c88838901612948565b90965094506020870135915080821115612ba4578384fd5b50612bb187828801612948565b95989497509550505050565b600060208284031215612bce578081fd5b813567ffffffffffffffff80821115612be5578283fd5b81840160608187031215612bf7578384fd5b612c016060613599565b9250803582811115612c11578485fd5b612c1d878284016129dd565b845250602081013582811115612c31578485fd5b612c3d878284016129dd565b602085015250604081013582811115612c54578485fd5b612c608782840161298f565b6040850152509195945050505050565b600060208284031215612c81578081fd5b5035919050565b600060208284031215612c99578081fd5b5051919050565b600080600060408486031215612cb4578283fd5b833560ff81168114612cc4578384fd5b9250602084013567ffffffffffffffff811115612cdf578283fd5b612ceb86828701612948565b9497909650939450505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612d3a816020860160208601613604565b601f01601f19169290920160200192915050565b60008251612d60818460208701613604565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060208252612a6a6020830184612d22565b600060408252612dc9604083018688612cf8565b8281036020840152612ddc818587612cf8565b979650505050505050565b6020808252602a908201527f6c656e677468206f66206d616c6963696f7573566f7465536c61736853636f706040820152690ca40dad2e6dac2e8c6d60b31b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604082015260600190565b6020808252818101527f6d616c6963696f757320766f746520736c617368206e6f7420656e61626c6564604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252602b908201527f746865206d616c6963696f757320766f746520736c6173682073636f7065206f60408201526a7574206f662072616e676560a81b606082015260800190565b6020808252601a908201527f6e6f2076696f6c6174696f6e206f6620766f74652072756c6573000000000000604082015260600190565b6020808252818101527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604082015260600190565b6020808252602b908201527f6c656e677468206f6620656e61626c654d616c6963696f7573566f7465536c6160408201526a0e6d040dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526017908201527f766572696679207369676e6174757265206661696c6564000000000000000000604082015260600190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526019908201527f7372634e756d20626967676572207468616e207461724e756d00000000000000604082015260600190565b6020808252602c908201527f7468652066696e616c69747920736c6173682072657761726420726174696f2060408201526b6f7574206f662072616e676560a01b606082015260800190565b60208082526027908201527f6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d6040820152660d2e6dac2e8c6d60cb1b606082015260800190565b60208082526013908201527274776f206964656e746963616c20766f74657360681b604082015260600190565b60208082526030908201527f746865206d6573736167652073656e646572206d7573742062652076616c696460408201526f185d1bdc94d95d0818dbdb9d1c9858dd60821b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252601590820152741d9bdd195059191c881a5cc81b9bdd08199bdd5b99605a1b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526022908201527f6c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746040820152610c6d60f31b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526025908201527f746865206d697364656d65616e6f725468726573686f6c64206f7574206f662060408201526472616e676560d81b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b6020808252601490820152731d185c99d95d08189b1bd8dac81d1bdbc81bdb1960621b604082015260600190565b6020808252601e908201527f7265636569766520756e65787065637465642073796e207061636b6167650000604082015260600190565b6020808252602b908201527f6c656e677468206f662066696e616c697479536c61736852657761726452617460408201526a0d2de40dad2e6dac2e8c6d60ab1b606082015260800190565b6020808252818101527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604082015260600190565b61ffff91909116815260200190565b90815260200190565b6000838252604060208301526135206040830184612d22565b949350505050565b918252602082015260400190565b92835260208301919091521515604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff85168252606060208301526135896060830185612d22565b9050826040830152949350505050565b60405181810167ffffffffffffffff811182821017156135b857600080fd5b604052919050565b600067ffffffffffffffff8211156135d6578081fd5b5060209081020190565b600067ffffffffffffffff8211156135f6578081fd5b50601f01601f191660200190565b60005b8381101561361f578181015183820152602001613607565b838111156118765750506000910152565b6001600160a01b038116811461364557600080fd5b5056fea164736f6c6343000604000a", + }, + { + ContractAddr: common.HexToAddress(SystemRewardContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + Code: "6080604052600436106101c55760003560e01c806375d47a0a116100f7578063ab51bb9611610095578063f9a2bbc711610064578063f9a2bbc7146105c3578063fb5478b3146105d8578063fc3e5908146105ed578063fd6a68791461060257610209565b8063ab51bb96146104b5578063ac431751146104ca578063c81b166214610599578063dc927faf146105ae57610209565b80639a99b4f0116100d15780639a99b4f01461043d5780639dc0926214610476578063a1a11bf51461048b578063a78abc16146104a057610209565b806375d47a0a146103fe5780637942fd051461041357806396713da91461042857610209565b8063493279b1116101645780636d70f7ae1161013e5780636d70f7ae146103785780636e47b482146103bf57806370fd5bad146103d4578063718a8aa8146103e957610209565b8063493279b1146103225780634bf6c8821461034e57806351e806721461036357610209565b806331b6d4a5116101a057806331b6d4a5146102b85780633a0b0eff146102cd5780633dffc387146102e257806343756e5c1461030d57610209565b806227253a1461020e5780630bee7a67146102595780630e2374a51461028757610209565b366102095734156102075760408051348152905133917f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db919081900360200190a25b005b600080fd5b34801561021a57600080fd5b506102476004803603604081101561023157600080fd5b506001600160a01b038135169060200135610617565b60408051918252519081900360200190f35b34801561026557600080fd5b5061026e6107c2565b6040805163ffffffff9092168252519081900360200190f35b34801561029357600080fd5b5061029c6107c7565b604080516001600160a01b039092168252519081900360200190f35b3480156102c457600080fd5b506102476107cd565b3480156102d957600080fd5b506102476107d9565b3480156102ee57600080fd5b506102f76107df565b6040805160ff9092168252519081900360200190f35b34801561031957600080fd5b5061029c6107e4565b34801561032e57600080fd5b506103376107ea565b6040805161ffff9092168252519081900360200190f35b34801561035a57600080fd5b506102f76107ef565b34801561036f57600080fd5b5061029c6107f4565b34801561038457600080fd5b506103ab6004803603602081101561039b57600080fd5b50356001600160a01b03166107fa565b604080519115158252519081900360200190f35b3480156103cb57600080fd5b5061029c610818565b3480156103e057600080fd5b506102f761081e565b3480156103f557600080fd5b506102f7610823565b34801561040a57600080fd5b5061029c610828565b34801561041f57600080fd5b506102f761082e565b34801561043457600080fd5b506102f7610833565b34801561044957600080fd5b506102476004803603604081101561046057600080fd5b506001600160a01b038135169060200135610838565b34801561048257600080fd5b5061029c610962565b34801561049757600080fd5b5061029c610968565b3480156104ac57600080fd5b506103ab61096e565b3480156104c157600080fd5b5061026e610977565b3480156104d657600080fd5b50610207600480360360408110156104ed57600080fd5b81019060208101813564010000000081111561050857600080fd5b82018360208201111561051a57600080fd5b8035906020019184600183028401116401000000008311171561053c57600080fd5b91939092909160208101903564010000000081111561055a57600080fd5b82018360208201111561056c57600080fd5b8035906020019184600183028401116401000000008311171561058e57600080fd5b50909250905061097c565b3480156105a557600080fd5b5061029c610cff565b3480156105ba57600080fd5b5061029c610d05565b3480156105cf57600080fd5b5061029c610d0b565b3480156105e457600080fd5b50610247610d11565b3480156105f957600080fd5b506102f7610d1d565b34801561060e57600080fd5b5061029c610d22565b6000805460ff1661069457600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166106e25760405162461bcd60e51b815260040180806020018281038252602b815260200180610e10602b913960400191505060405180910390fd5b60004783106106f157476106f3565b825b9050674563918244f400008111156107105750674563918244f400005b8015610791576040516001600160a01b0385169082156108fc029083906000818181858888f1935050505015801561074c573d6000803e3d6000fd5b506040805182815290516001600160a01b038616917ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0919081900360200190a26107bb565b6040517fe589651933c2457488cc0d8e0941518abf748e799435e4e396d9c4d0b2db2d4d90600090a15b9392505050565b606481565b61200181565b674563918244f4000081565b60015481565b600181565b61100181565b603881565b600881565b61200081565b6001600160a01b031660009081526002602052604090205460ff1690565b61100581565b600281565b601081565b61100881565b600b81565b600981565b6000805460ff166108b557600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166109035760405162461bcd60e51b815260040180806020018281038252602b815260200180610e10602b913960400191505060405180910390fd5b60004783106109125747610914565b825b9050670de0b6b3a76400008111156107105750604051670de0b6b3a7640000906001600160a01b03851690600090839082818181858883f1935050505015801561074c573d6000803e3d6000fd5b61100781565b61100681565b60005460ff1681565b600081565b33611007146109bc5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e6a602e913960400191505060405180910390fd5b610a1e84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600b81526a30b23227b832b930ba37b960a91b60208201529150610d289050565b15610af657606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091149050610aa15760405162461bcd60e51b815260040180806020018281038252602c815260200180610e98602c913960400191505060405180910390fd5b60148101516001600160a01b038116600081815260026020526040808220805460ff19166001179055517f9870d7fe5d112134c55844951dedf365363006d9c588db07c4c85af6322a06199190a25050610c6d565b610b5b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81526d3232b632ba32a7b832b930ba37b960911b60208201529150610d289050565b15610c3057606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091149050610bde5760405162461bcd60e51b815260040180806020018281038252602f815260200180610e3b602f913960400191505060405180910390fd5b60148101516001600160a01b038116600081815260026020526040808220805460ff19169055517fb40992a19dba61ea600e87fce607102bf5908dc89076217b6ca6ae195224f7029190a25050610c6d565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b61100281565b61100381565b61100081565b670de0b6b3a764000081565b600381565b61100481565b6000816040516020018082805190602001908083835b60208310610d5d5780518252601f199092019160209182019101610d3e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310610dcb5780518252601f199092019160209182019101610dac565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490509291505056fe6f6e6c79206f70657261746f7220697320616c6c6f77656420746f2063616c6c20746865206d6574686f646c656e677468206f662076616c756520666f722064656c6574654f70657261746f722073686f756c64206265203230746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662076616c756520666f72206164644f70657261746f722073686f756c64206265203230a164736f6c6343000604000a", + }, + }, + } + + keplerUpgrade[chapelNet] = &Upgrade{ + UpgradeName: "kepler", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + Code: "6080604052600436106104a35760003560e01c806388b32f1111610260578063c6d3394511610144578063e40716a1116100c1578063f92eb86b11610085578063f92eb86b14610c02578063f9a2bbc714610c17578063fc3e590814610c2c578063fccc281314610c41578063fd4ad81f14610c56578063fd6a687914610c85576104aa565b8063e40716a114610b85578063ea321e4914610b9a578063eb57e20214610bba578063eda5868c14610bda578063f340fa0114610bef576104aa565b8063d86222d511610108578063d86222d514610b1c578063daacdb6614610b31578063dc927faf14610b46578063e086c7b114610b5b578063e1c7392a14610b70576104aa565b8063c6d3394514610abd578063c81b166214610ad2578063c8509d81146108b6578063ce910b0c14610ae7578063d68fb56a14610b07576104aa565b8063a5422d5c116101dd578063ad3c9da6116101a1578063ad3c9da614610a3c578063aef198a914610a5c578063b7ab4db514610a71578063b8cf4ef114610a93578063bf9f499514610666578063c466689d14610aa8576104aa565b8063a5422d5c146109c8578063a78abc16146109dd578063aaf5eb68146109f2578063ab51bb9614610a07578063ac43175114610a1c576104aa565b806396713da91161022457806396713da91461095f5780639dc09262146109745780639fe0f81614610989578063a0dc27581461099e578063a1a11bf5146109b3576104aa565b806388b32f11146108eb5780638a7beb01146109005780638b5ad0c9146109155780638d19a4101461092a5780639369d7de1461094a576104aa565b806351e80672116103875780636e47b482116103045780637942fd05116102c85780637942fd05146108775780637a84ca2a1461088c57806381650b62146108a1578063831d65d1146108b6578063853230aa1461086257806386249882146108d6576104aa565b80636e47b4821461080e57806370fd5bad14610823578063718a8aa81461083857806375d47a0a1461084d57806378dfed4a14610862576104aa565b80635de1e22c1161034b5780635de1e22c14610792578063603d86d31461065157806360eba4fe146107a757806362b72cf5146107c75780636969a25c146107dc576104aa565b806351e806721461071357806355614fcc14610728578063565c56b3146107485780635667515a146107685780635d77156c1461077d576104aa565b80633365af3a1161042057806343756e5c116103e457806343756e5c1461068857806345cf9daf1461069d578063493279b1146106b25780634bf6c882146106d45780634df6e0c3146106e95780635192c82c146106fe576104aa565b80633365af3a146105ee57806335409f7f1461060e5780633b071dcc1461062e5780633de0f0d8146106515780633dffc38714610666576104aa565b8063152ad3b811610467578063152ad3b8146105625780631ff1806914610584578063219f22d514610599578063300c3567146105ae578063321d398a146105ce576104aa565b806304c4fec6146104af57806307a56847146104c65780630bee7a67146104f15780630e2374a5146105135780631182b87514610535576104aa565b366104aa57005b600080fd5b3480156104bb57600080fd5b506104c4610c9a565b005b3480156104d257600080fd5b506104db610d0c565b6040516104e89190617691565b60405180910390f35b3480156104fd57600080fd5b50610506610d12565b6040516104e891906176bb565b34801561051f57600080fd5b50610528610d17565b6040516104e89190616a60565b34801561054157600080fd5b50610555610550366004616946565b610d1d565b6040516104e89190616bd7565b34801561056e57600080fd5b50610577610f55565b6040516104e89190616bcc565b34801561059057600080fd5b506104db610f5e565b3480156105a557600080fd5b50610506610f64565b3480156105ba57600080fd5b506104c46105c93660046167d0565b610f69565b3480156105da57600080fd5b506105776105e93660046168f3565b6112b0565b3480156105fa57600080fd5b506105776106093660046168f3565b61137f565b34801561061a57600080fd5b506104c46106293660046167a9565b611430565b34801561063a57600080fd5b50610643611589565b6040516104e8929190616ae2565b34801561065d57600080fd5b506104db611865565b34801561067257600080fd5b5061067b61186b565b6040516104e891906176cc565b34801561069457600080fd5b50610528611870565b3480156106a957600080fd5b506104db611876565b3480156106be57600080fd5b506106c761187c565b6040516104e89190617682565b3480156106e057600080fd5b5061067b611881565b3480156106f557600080fd5b50610643611886565b34801561070a57600080fd5b506104db611a04565b34801561071f57600080fd5b50610528611a0a565b34801561073457600080fd5b506105776107433660046167a9565b611a10565b34801561075457600080fd5b506104db6107633660046167a9565b611a45565b34801561077457600080fd5b5061067b611a96565b34801561078957600080fd5b50610506611a9b565b34801561079e57600080fd5b506104db611aa0565b3480156107b357600080fd5b506105556107c23660046168f3565b611aa6565b3480156107d357600080fd5b506104db611b4c565b3480156107e857600080fd5b506107fc6107f73660046168f3565b611b52565b6040516104e896959493929190616a8d565b34801561081a57600080fd5b50610528611bb6565b34801561082f57600080fd5b5061067b611bbc565b34801561084457600080fd5b5061067b611bc1565b34801561085957600080fd5b50610528611bc6565b34801561086e57600080fd5b506104db611bcc565b34801561088357600080fd5b5061067b611bd2565b34801561089857600080fd5b506104db611bd7565b3480156108ad57600080fd5b50610506611bdd565b3480156108c257600080fd5b506104c46108d1366004616946565b611be2565b3480156108e257600080fd5b506104db611c43565b3480156108f757600080fd5b506104db611c49565b34801561090c57600080fd5b50610577611c4f565b34801561092157600080fd5b506104db611c58565b34801561093657600080fd5b506104db6109453660046167a9565b611c5e565b34801561095657600080fd5b506104c4611c9e565b34801561096b57600080fd5b5061067b611db2565b34801561098057600080fd5b50610528611db7565b34801561099557600080fd5b506104db611dbd565b3480156109aa57600080fd5b506104db611dc2565b3480156109bf57600080fd5b50610528611dc7565b3480156109d457600080fd5b50610555611dcd565b3480156109e957600080fd5b50610577611dec565b3480156109fe57600080fd5b506104db611df5565b348015610a1357600080fd5b50610506611a96565b348015610a2857600080fd5b506104c4610a37366004616897565b611dfe565b348015610a4857600080fd5b506104db610a573660046167a9565b61269c565b348015610a6857600080fd5b506104db6126ae565b348015610a7d57600080fd5b50610a866126bb565b6040516104e89190616acf565b348015610a9f57600080fd5b506104db6127a7565b348015610ab457600080fd5b506104db6127ac565b348015610ac957600080fd5b506104db611bbc565b348015610ade57600080fd5b506105286127b2565b348015610af357600080fd5b50610555610b023660046168f3565b6127b8565b348015610b1357600080fd5b506104db6127c5565b348015610b2857600080fd5b506104db612804565b348015610b3d57600080fd5b506104db612810565b348015610b5257600080fd5b50610528612816565b348015610b6757600080fd5b506104db610d12565b348015610b7c57600080fd5b506104c461281c565b348015610b9157600080fd5b506104db6129cb565b348015610ba657600080fd5b50610577610bb5366004616858565b6129d1565b348015610bc657600080fd5b506104c4610bd53660046167a9565b612b57565b348015610be657600080fd5b50610506612c5f565b6104c4610bfd3660046167a9565b612c64565b348015610c0e57600080fd5b506104db612fcc565b348015610c2357600080fd5b50610528612fd2565b348015610c3857600080fd5b5061067b611dbd565b348015610c4d57600080fd5b50610528612fd8565b348015610c6257600080fd5b50610c76610c713660046168f3565b612fde565b6040516104e89392919061769a565b348015610c9157600080fd5b506105286130a0565b6000610ca533611c5e565b9050600b8181548110610cb457fe5b600091825260209091206001601690920201015460ff16610cf05760405162461bcd60e51b8152600401610ce79061733c565b60405180910390fd5b6000610cfa6127c5565b9050610d073383836130a6565b505050565b60095481565b606481565b61200181565b60005460609060ff16610d425760405162461bcd60e51b8152600401610ce790616d96565b3361200014610d635760405162461bcd60e51b8152600401610ce7906174d5565b600b54610e2157610d72616495565b60015460005b81811015610e1d57600b805460018101825560009190915283516000805160206178ef833981519152601690920291820190815560208086015160008051602061792f8339815191528401805460ff1916911515919091179055604086015180518794610df99360008051602061790f8339815191529091019201906164c4565b506060820151610e0f906003830190601361653e565b505050806001019050610d78565b5050505b610e2961656b565b6000610e6a85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329292505050565b9150915080610e8657610e7d606461344e565b92505050610f4e565b815160009060ff16610eab57610ea4836020015184604001516134af565b9050610f1a565b825160ff1660011415610f1657826020015151600114610ef0576000805160206178cf833981519152604051610ee0906171f5565b60405180910390a1506067610f11565b610ea48360200151600081518110610f0457fe5b6020026020010151614103565b610f1a565b5060655b63ffffffff8116610f3f5750506040805160008152602081019091529150610f4e9050565b610f488161344e565b93505050505b9392505050565b60075460ff1681565b60035481565b606881565b334114610f885760405162461bcd60e51b8152600401610ce790617524565b6010544311610fa95760405162461bcd60e51b8152600401610ce790616ef2565b3a15610fc75760405162461bcd60e51b8152600401610ce79061727b565b60005460ff16610fe95760405162461bcd60e51b8152600401610ce790616d96565b60006110023168056bc75e2d63100000811115611020576110198168056bc75e2d6310000063ffffffff61427a16565b9150611027565b50506112a6565b6040516213929d60e11b8152611002906227253a9061104c9030908690600401616a74565b602060405180830381600087803b15801561106657600080fd5b505af115801561107a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109e919061690b565b9150816110ac5750506112a6565b6000805b848110156110da578585828181106110c457fe5b90506020020135820191508060010190506110b0565b50806110e8575050506112a6565b6000806000805b8981101561129e578489898381811061110457fe5b9050602002013588028161111457fe5b0493508a8a8281811061112357fe5b905060200201602081019061113891906167a9565b6001600160a01b0381166000908152600460205260409020549093509150811561125457600060018084038154811061116d57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff16156111da57836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d85866040516111cd9190617691565b60405180910390a261124e565b6003546111ed908663ffffffff6142bc16565b6003908155810154611205908663ffffffff6142bc16565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611245908890617691565b60405180910390a25b50611296565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d858560405161128d9190617691565b60405180910390a25b6001016110ef565b505050505050505b5050436010555050565b60015460009082106112c45750600061137a565b60006001600160a01b0316600183815481106112dc57fe5b60009182526020909120600490910201546001600160a01b0316148061130c5750600854158061130c5750600a54155b8061131b575060085460095410155b8061132c575061132a8261137f565b155b8061135557506000600b838154811061134157fe5b906000526020600020906016020160000154115b80611369575060016113656126bb565b5111155b156113765750600061137a565b5060015b919050565b60015460009082106113935750600061137a565b600b5482106113d057600182815481106113a957fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615905061137a565b600182815481106113dd57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615801561142a5750600b828154811061141157fe5b600091825260209091206001601690920201015460ff16155b92915050565b33611001146114515760405162461bcd60e51b8152600401610ce790617639565b600b5461150f57611460616495565b60015460005b8181101561150b57600b805460018101825560009190915283516000805160206178ef833981519152601690920291820190815560208086015160008051602061792f8339815191528401805460ff19169115159190911790556040860151805187946114e79360008051602061790f8339815191529091019201906164c4565b5060608201516114fd906003830190601361653e565b505050806001019050611466565b5050505b6001600160a01b038116600090815260046020526040902054806115335750611586565b6001810390506000600b828154811061154857fe5b600091825260209091206001601690920201015460ff16905061156b83836142e1565b80156115745750805b15610d07576009805460001901905550505b50565b60015460609081906000805b828110156115dc57600181815481106115aa57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166115d4576001909101905b600101611595565b50606081604051908082528060200260200182016040528015611609578160200160208202803683370190505b50905060608260405190808252806020026020018201604052801561164257816020015b606081526020019060019003908161162d5790505b50600b54600094509091508414156117bd5760005b848110156117b7576001818154811061166c57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166117af576001818154811061169c57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106116c757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b81815481106116f457fe5b600091825260209182902060026016909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561178c5780601f106117615761010080835404028352916020019161178c565b820191906000526020600020905b81548152906001019060200180831161176f57829003601f168201915b505050505082858151811061179d57fe5b60209081029190910101526001909301925b600101611657565b50611859565b60005b8481101561185757600181815481106117d557fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661184f576001818154811061180557fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061183057fe5b6001600160a01b03909216602092830291909101909101526001909301925b6001016117c0565b505b909450925050505b9091565b61271081565b600181565b61100181565b60085481565b606181565b600881565b600e54600c5460609182918061189a575060155b60606118a46126bb565b905060606118b182614694565b9050828251116118c8579094509250611861915050565b838383510310156118da578282510393505b83156119105760c843046118f683838388880360008a8a614802565b61190e8383838888038989038a8b8b8b510301614802565b505b60608360405190808252806020026020018201604052801561193c578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561197557816020015b60608152602001906001900390816119605790505b50905060005b858110156119f65784818151811061198f57fe5b60200260200101518382815181106119a357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106119cf57fe5b60200260200101518282815181106119e357fe5b602090810291909101015260010161197b565b509096509450505050509091565b60065481565b61200081565b6001600160a01b03811660009081526004602052604081205480611a3857600091505061137a565b60001901610f4e8161137f565b6001600160a01b03811660009081526004602052604081205480611a6d57600091505061137a565b600180820381548110611a7c57fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b600f5481565b60128181548110611ab357fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815293509091830182828015611b445780601f10611b1957610100808354040283529160200191611b44565b820191906000526020600020905b815481529060010190602001808311611b2757829003601f168201915b505050505081565b60105481565b60018181548110611b5f57fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b606681565b3361200014611c035760405162461bcd60e51b8152600401610ce7906174d5565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051611c36939291906176da565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6001600160a01b03811660009081526004602052604081205480611c945760405162461bcd60e51b8152600401610ce79061745d565b6000190192915050565b600b54611d5c57611cad616495565b60015460005b81811015611d5857600b805460018101825560009190915283516000805160206178ef833981519152601690920291820190815560208086015160008051602061792f8339815191528401805460ff1916911515919091179055604086015180518794611d349360008051602061790f8339815191529091019201906164c4565b506060820151611d4a906003830190601361653e565b505050806001019050611cb3565b5050505b600854611d695760036008555b600a54611d76576002600a555b6000611d8133611c5e565b9050611d8c816112b0565b611da85760405162461bcd60e51b8152600401610ce7906171b2565b6115863382614959565b600981565b61100781565b600381565b60c881565b61100681565b604051806101e001604052806101ab81526020016177246101ab913981565b60005460ff1681565b6402540be40081565b60005460ff16611e205760405162461bcd60e51b8152600401610ce790616d96565b3361100714611e415760405162461bcd60e51b8152600401610ce7906172a9565b611eab84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b602082015291506149f19050565b15611f485760208114611ed05760405162461bcd60e51b8152600401610ce790617417565b604080516020601f8401819004810282018101909252828152600091611f0e91858580838501838280828437600092019190915250614a4a92505050565b905060648110158015611f245750620186a08111155b611f405760405162461bcd60e51b8152600401610ce7906170a2565b600255612659565b611fa884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b602082015291506149f19050565b156120375760208114611fcd5760405162461bcd60e51b8152600401610ce790616c1c565b604080516020601f840181900481028201810190925282815260009161200b91858580838501838280828437600092019190915250614a4a92505050565b905061271081111561202f5760405162461bcd60e51b8152600401610ce790616f34565b600655612659565b6120a184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b602082015291506149f19050565b1561213b57602081146120c65760405162461bcd60e51b8152600401610ce790616c53565b604080516020601f840181900481028201810190925282815260009161210491858580838501838280828437600092019190915250614a4a92505050565b600c5490915080612113575060155b8082106121325760405162461bcd60e51b8152600401610ce790616fa7565b50600855612659565b6121a484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b602082015291506149f19050565b1561223d57602081146121c95760405162461bcd60e51b8152600401610ce790616d1c565b604080516020601f840181900481028201810190925282815260009161220791858580838501838280828437600092019190915250614a4a92505050565b90506000811180156122195750600a81105b6122355760405162461bcd60e51b8152600401610ce7906175b5565b600a55612659565b6122b184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e6469646174657300000000000000602082015291506149f19050565b1561234057602081146122d65760405162461bcd60e51b8152600401610ce790616cd0565b604080516020601f840181900481028201810190925282815260009161231491858580838501838280828437600092019190915250614a4a92505050565b9050600d548111156123385760405162461bcd60e51b8152600401610ce790617118565b600e55612659565b6123a984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b602082015291506149f19050565b1561242b57602081146123ce5760405162461bcd60e51b8152600401610ce7906172f7565b604080516020601f840181900481028201810190925282815260009161240c91858580838501838280828437600092019190915250614a4a92505050565b600d819055600e5490915081101561242557600d54600e555b50612659565b61248f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b602082015291506149f19050565b1561253d57602081146124b45760405162461bcd60e51b8152600401610ce790616d61565b604080516020601f84018190048102820181019092528281526000916124f291858580838501838280828437600092019190915250614a4a92505050565b9050600081116125145760405162461bcd60e51b8152600401610ce790616e04565b60648111156125355760405162461bcd60e51b8152600401610ce790616e4c565b600c55612659565b6125a584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601181527073797374656d526577617264526174696f60781b602082015291506149f19050565b1561264157602081146125ca5760405162461bcd60e51b8152600401610ce790617571565b604080516020601f840181900481028201810190925282815260009161260891858580838501838280828437600092019190915250614a4a92505050565b90506001811015801561261d57506127108111155b6126395760405162461bcd60e51b8152600401610ce79061704f565b600f55612659565b60405162461bcd60e51b8152600401610ce790617612565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a8484848460405161268e9493929190616bea565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b828110156126ea576126d68161137f565b156126e2578160010191505b6001016126c5565b50606081604051908082528060200260200182016040528015612717578160200160208202803683370190505b5090506000915060005b8381101561279e576127328161137f565b15612796576001818154811061274457fe5b600091825260209091206004909102015482516001600160a01b039091169083908590811061276f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b600101612721565b50925050505b90565b601581565b61027181565b61100281565b60138181548110611ab357fe5b60006127cf6126bb565b519050600080600c54116127e45760156127e8565b600c545b9050808211156127f6578091505b8161280057600191505b5090565b67016345785d8a000081565b60055481565b61100381565b60005460ff161561283f5760405162461bcd60e51b8152600401610ce7906173a9565b61284761656b565b600061286d604051806101e001604052806101ab81526020016177246101ab9139613292565b915091508061288e5760405162461bcd60e51b8152600401610ce790617494565b60005b8260200151518110156129b3576001836020015182815181106128b057fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a09093015160039093019290925591860151805191850193918590811061298657fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101612891565b50506103e8600255506000805460ff19166001179055565b600d5481565b601354600090815b81811015612ada57612ac285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601380549092508591508110612a2a57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015612ab85780601f10612a8d57610100808354040283529160200191612ab8565b820191906000526020600020905b815481529060010190602001808311612a9b57829003601f168201915b5050505050614a4f565b15612ad25760019250505061142a565b6001016129d9565b5060125460005b81811015612b4b57612b3286868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601280549092508591508110612a2a57fe5b15612b43576001935050505061142a565b600101612ae1565b50600095945050505050565b3361100114612b785760405162461bcd60e51b8152600401610ce790617639565b600b54612c3657612b87616495565b60015460005b81811015612c3257600b805460018101825560009190915283516000805160206178ef833981519152601690920291820190815560208086015160008051602061792f8339815191528401805460ff1916911515919091179055604086015180518794612c0e9360008051602061790f8339815191529091019201906164c4565b506060820151612c24906003830190601361653e565b505050806001019050612b8d565b5050505b6000612c4182614ab3565b9050612c4c816112b0565b15612c5b57612c5b8282614959565b5050565b606581565b334114612c835760405162461bcd60e51b8152600401610ce790617524565b60005460ff16612ca55760405162461bcd60e51b8152600401610ce790616d96565b60003411612cc55760405162461bcd60e51b8152600401610ce7906170e9565b3a15612ce35760405162461bcd60e51b8152600401610ce79061727b565b6001600160a01b03811660009081526004602052604090205460145434919060ff16612d2357610271600f556103e86006556014805460ff191660011790555b6000612d4c612710612d40600f5486614c5690919063ffffffff16565b9063ffffffff614c9016565b90508015612dbc576040516110029082156108fc029083906000818181858888f19350505050158015612d83573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d81604051612db39190617691565b60405180910390a15b600083118015612dce57506000600654115b15612e74576000612df0612710612d4060065487614c5690919063ffffffff16565b90508015612e725760405161dead9082156108fc029083906000818181858888f19350505050158015612e27573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee581604051612e579190617691565b60405180910390a1612e6f848263ffffffff61427a16565b93505b505b612e84838263ffffffff61427a16565b92508115612f84576000600180840381548110612e9d57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615612f0a57846001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b485604051612efd9190617691565b60405180910390a2612f7e565b600354612f1d908563ffffffff6142bc16565b6003908155810154612f35908563ffffffff6142bc16565b60038201556040516001600160a01b038616907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc05590612f75908790617691565b60405180910390a25b50612fc6565b836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b484604051612fbd9190617691565b60405180910390a25b50505050565b600e5481565b61100081565b61dead81565b600b8181548110612feb57fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff909116949192918301828280156130965780601f1061306b57610100808354040283529160200191613096565b820191906000526020600020905b81548152906001019060200180831161307957829003601f168201915b5050505050905083565b61100481565b6000600a54600014806130b7575081155b806130c25750600954155b156130cf57506000610f4e565b6009600081546001900391905081905550600061311a600a54612d4085612d40600b89815481106130fc57fe5b6000918252602090912060169091020154439063ffffffff61427a16565b90506000600b858154811061312b57fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b15801561319057600080fd5b505afa1580156131a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c89190616923565b9150915060009350808310613242576131e187876142e1565b506040516305bfb49960e41b815261100190635bfb499090613207908a90600401616a60565b600060405180830381600087803b15801561322157600080fd5b505af1158015613235573d6000803e3d6000fd5b5050505060019350613254565b8183106132545761325287614ab3565b505b6040516001600160a01b038816907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050509392505050565b61329a61656b565b60006132a461656b565b6132ac61658f565b6132bd6132b886614cd2565b614cf7565b90506000805b6132cc83614d41565b1561344057806132f1576132e76132e284614d62565b614db0565b60ff168452613438565b806001141561343357606061330d61330885614d62565b614e30565b9050805160405190808252806020026020018201604052801561334a57816020015b6133376165af565b81526020019060019003908161332f5790505b508560200181905250805160405190808252806020026020018201604052801561338857816020015b60608152602001906001900390816133735790505b50604086015260005b8151811015613428576133a26165af565b606060006133c28585815181106133b557fe5b6020026020010151614f01565b925092509250806133e2578860009a509a50505050505050505050613449565b82896020015185815181106133f357fe5b6020026020010181905250818960400151858151811061340f57fe5b6020026020010181905250505050806001019050613391565b506001925050613438565b613440565b6001016132c3565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b606081526020019060019003908161346857905050905061348e8363ffffffff1661501b565b8160008151811061349b57fe5b6020026020010181905250610f4e8161502e565b60006064835111156134e6576000805160206178cf8339815191526040516134d690616ea9565b60405180910390a150606661142a565b60005b83518110156135845760005b8181101561357b5784818151811061350957fe5b6020026020010151600001516001600160a01b031685838151811061352a57fe5b6020026020010151600001516001600160a01b03161415613573576000805160206178cf83398151915260405161356090617004565b60405180910390a160669250505061142a565b6001016134f5565b506001016134e9565b5060608061359285856150b8565b60015491935091506000908190815b818110156136175767016345785d8a0000600182815481106135bf57fe5b906000526020600020906004020160030154106135e15783600101935061360f565b6000600182815481106135f057fe5b906000526020600020906004020160030154111561360f578260010192505b6001016135a1565b50606083604051908082528060200260200182016040528015613644578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015613673578160200160208202803683370190505b5090506060856040519080825280602002602001820160405280156136a2578160200160208202803683370190505b5090506060866040519080825280602002602001820160405280156136d1578160200160208202803683370190505b5090506000606087604051908082528060200260200182016040528015613702578160200160208202803683370190505b509050606088604051908082528060200260200182016040528015613731578160200160208202803683370190505b509050600099506000985060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561377957600080fd5b505afa15801561378d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b1919061690b565b905067016345785d8a00008111156137fc576000805160206178cf8339815191526040516137de90617368565b60405180910390a160689d505050505050505050505050505061142a565b60005b89811015613a6d5767016345785d8a00006001828154811061381d57fe5b906000526020600020906004020160030154106139a2576001818154811061384157fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898d8151811061387257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be400600183815481106138a757fe5b906000526020600020906004020160030154816138c057fe5b06600183815481106138ce57fe5b9060005260206000209060040201600301540390506138f6838261427a90919063ffffffff16565b898e8151811061390257fe5b6020026020010181815250506001828154811061391b57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878e8151811061394c57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888e8151811061397957fe5b6020908102919091010152613994868263ffffffff6142bc16565b95508c6001019c5050613a65565b6000600182815481106139b157fe5b9060005260206000209060040201600301541115613a6557600181815481106139d657fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848c81518110613a0757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060018181548110613a3457fe5b906000526020600020906004020160030154838c81518110613a5257fe5b6020026020010181815250508a6001019a505b6001016137ff565b5060008415613ce3576002546040516303702b2960e51b815261100491636e056520918891613aa7918e918e918d91420190600401616b52565b6020604051808303818588803b158015613ac057600080fd5b505af193505050508015613af1575060408051601f3d908101601f19168201909252613aee91810190616838565b60015b613c68576040516000815260443d1015613b0d57506000613ba8565b60046000803e60005160e01c6308c379a08114613b2e576000915050613ba8565b60043d036004833e81513d60248201116001600160401b0382111715613b5957600092505050613ba8565b80830180516001600160401b03811115613b7a576000945050505050613ba8565b8060208301013d8601811115613b9857600095505050505050613ba8565b601f01601f191660405250925050505b80613bb35750613bf5565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051613be79190616bd7565b60405180910390a250613c63565b3d808015613c1f576040519150601f19603f3d011682016040523d82523d6000602084013e613c24565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051613c599190616bd7565b60405180910390a2505b613ce3565b8015613caa577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051613c9d9190617691565b60405180910390a1613ce1565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051613cd890616c99565b60405180910390a25b505b8015613e995760005b8751811015613e97576000888281518110613d0357fe5b60200260200101519050600060018281548110613d1c57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc9185908110613d4d57fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f1935050505090508015613e095760018281548110613d8e57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d9185908110613ddd57fe5b906000526020600020906004020160030154604051613dfc9190617691565b60405180910390a2613e8d565b60018281548110613e1657fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d9185908110613e6557fe5b906000526020600020906004020160030154604051613e849190617691565b60405180910390a25b5050600101613cec565b505b835115613fe35760005b8451811015613fe1576000858281518110613eba57fe5b60200260200101516001600160a01b03166108fc868481518110613eda57fe5b60200260200101519081150290604051600060405180830381858888f1935050505090508015613f7057858281518110613f1057fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d868481518110613f4e57fe5b6020026020010151604051613f639190617691565b60405180910390a2613fd8565b858281518110613f7c57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d868481518110613fba57fe5b6020026020010151604051613fcf9190617691565b60405180910390a25b50600101613ea3565b505b505050505050505050505050600047111561405f577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d476040516140279190617691565b60405180910390a1604051611002904780156108fc02916000818181858888f1935050505015801561405d573d6000803e3d6000fd5b505b6000600381905560055581511561407a5761407a82826152f1565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156140b757600080fd5b505af11580156140cb573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b80516001600160a01b0316600090815260046020526040812054801580614154575060018082038154811061413457fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b1561419a5782516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a2600091505061137a565b6001546005546000198201118015906141f05784516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000935050505061137a565b60058054600190810190915580548190600019860190811061420e57fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915585516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a2506000949350505050565b6000610f4e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615aab565b600082820183811015610f4e5760405162461bcd60e51b8152600401610ce790616dcd565b600080600183815481106142f157fe5b9060005260206000209060040201600301549050600060018080549050039050600161431b6126bb565b51116143505760006001858154811061433057fe5b90600052602060002090600402016003018190555060009250505061142a565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a70836040516143899190617691565b60405180910390a26001600160a01b038516600090815260046020526040812055835b6001546000190181101561457657600181600101815481106143ca57fe5b9060005260206000209060040201600182815481106143e557fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b8054909183019081106144a657fe5b9060005260206000209060160201600b82815481106144c157fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff19909216919091179055600280840180546145189383860193908216156101000260001901909116046165e4565b5061452b60038281019084016013616659565b5090505080600101600460006001848154811061454457fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020556001016143ac565b50600180548061458257fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b8054806145d557fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906146076002830182616683565b6146156003830160006166c7565b50509055600081838161462457fe5b04905080156146885760015460005b8181101561468557826001828154811061464957fe5b906000526020600020906004020160030154016001828154811061466957fe5b6000918252602090912060036004909202010155600101614633565b50505b50600195945050505050565b6001548151604080518281526020808402820101909152606092919083908280156146d357816020015b60608152602001906001900390816146be5790505b50600b5490915083146146ea57925061137a915050565b60005b828110156147f957600b60016004600089858151811061470957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054038154811061473d57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156147d55780601f106147aa576101008083540402835291602001916147d5565b820191906000526020600020905b8154815290600101906020018083116147b857829003601f168201915b50505050508282815181106147e657fe5b60209081029190910101526001016146ed565b50949350505050565b60005b8281101561494f5760008287838801604051602001614825929190616a52565b6040516020818303038152906040528051906020012060001c8161484557fe5b06905080850182870114614946576000898388018151811061486357fe5b602002602001015190506060898489018151811061487d57fe5b602002602001015190508a8388018151811061489557fe5b60200260200101518b858a01815181106148ab57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b848901815181106148da57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050898388018151811061490857fe5b60200260200101518a858a018151811061491e57fe5b6020026020010181905250808a8489018151811061493857fe5b602002602001018190525050505b50600101614805565b5050505050505050565b600980546001908101909155600b80548390811061497357fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b82815481106149a957fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b600081604051602001614a049190616a36565b6040516020818303038152906040528051906020012083604051602001614a2b9190616a36565b6040516020818303038152906040528051906020012014905092915050565b015190565b815181516000916001918114808314614a6b5760009250614aa9565b600160208701838101602088015b600284838510011415614aa4578051835114614a985760009650600093505b60209283019201614a79565b505050505b5090949350505050565b6001600160a01b03811660009081526004602052604081205480614adc5750600019905061137a565b600181039050600060018281548110614af157fe5b9060005260206000209060040201600301549050600060018381548110614b1457fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d90614b6d908590617691565b60405180910390a280614b855782935050505061137a565b6000818381614b9057fe5b0490508015614c4c5760005b84811015614bee578160018281548110614bb257fe5b9060005260206000209060040201600301540160018281548110614bd257fe5b6000918252602090912060036004909202010155600101614b9c565b50600180549085015b81811015614c49578260018281548110614c0d57fe5b9060005260206000209060040201600301540160018281548110614c2d57fe5b6000918252602090912060036004909202010155600101614bf7565b50505b5091949350505050565b600082614c655750600061142a565b82820282848281614c7257fe5b0414610f4e5760405162461bcd60e51b8152600401610ce79061723a565b6000610f4e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615ad7565b614cda6166d6565b506040805180820190915281518152602082810190820152919050565b614cff61658f565b614d0882615b0e565b614d1157600080fd5b6000614d208360200151615b48565b60208085015160408051808201909152868152920190820152915050919050565b6000614d4b6166d6565b505080518051602091820151919092015191011190565b614d6a6166d6565b614d7382614d41565b614d7c57600080fd5b60208201516000614d8c82615bab565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590614dc557508151602110155b614dce57600080fd5b6000614ddd8360200151615b48565b90508083600001511015614e035760405162461bcd60e51b8152600401610ce7906173e0565b8251602080850151830180519284900392918310156147f957506020919091036101000a90049392505050565b6060614e3b82615b0e565b614e4457600080fd5b6000614e4f83615c8c565b9050606081604051908082528060200260200182016040528015614e8d57816020015b614e7a6166d6565b815260200190600190039081614e725790505b5090506000614e9f8560200151615b48565b60208601510190506000805b84811015614ef657614ebc83615bab565b9150604051806040016040528083815260200184815250848281518110614edf57fe5b602090810291909101015291810191600101614eab565b509195945050505050565b614f096165af565b60606000614f156165af565b6060614f1f61658f565b614f2887614cf7565b90506000805b614f3783614d41565b1561500c5780614f6257614f52614f4d84614d62565b615ce8565b6001600160a01b03168552615004565b8060011415614f8a57614f77614f4d84614d62565b6001600160a01b03166020860152615004565b8060021415614fb257614f9f614f4d84614d62565b6001600160a01b03166040860152615004565b8060031415614fde57614fc76132e284614d62565b6001600160401b0316606086015260019150615004565b8060041415614fff57614ff8614ff384614d62565b615d02565b9350615004565b61500c565b600101614f2e565b50929791965091945092505050565b606061142a61502983615d72565b615e58565b606081516000141561504f575060408051600081526020810190915261137a565b60608260008151811061505e57fe5b602002602001015190506000600190505b835181101561509f576150958285838151811061508857fe5b6020026020010151615eaa565b915060010161506f565b50610f4e6150b2825160c060ff16615f27565b82615eaa565b6060806000808080806150c96127c5565b6001549091505b80156151d757600181039250600b83815481106150e957fe5b600091825260209091206001601690920201015460ff16615109576151ce565b6001838154811061511657fe5b60009182526020909120600490910201546001600160a01b0316945061513d8584846130a6565b9350831580615150575060018a51038610155b1561515a576151ce565b60005b8a518110156151cc57856001600160a01b03168b828151811061517c57fe5b6020026020010151600001516001600160a01b031614156151c45760018b82815181106151a557fe5b60209081029190910101519015156080909101526001909601956151cc565b60010161515d565b505b600019016150d0565b508489510360405190808252806020026020018201604052801561521557816020015b6152026165af565b8152602001906001900390816151fa5790505b5096508489510360405190808252806020026020018201604052801561524f57816020015b606081526020019060019003908161523a5790505b5095506000915060005b89518110156152e35789818151811061526e57fe5b6020026020010151608001516152db5789818151811061528a57fe5b602002602001015188848151811061529e57fe5b60200260200101819052508881815181106152b557fe5b60200260200101518784815181106152c957fe5b60200260200101819052508260010192505b600101615259565b5050505050505b9250929050565b600154825160005b8281101561540e57600161530b6165af565b6001838154811061531857fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156153e2578781815181106153a857fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b031614156153da57600092506153e2565b600101615394565b5081156154045780516001600160a01b03166000908152600460205260408120555b50506001016152f9565b50808211156154cd57805b828110156154cb57600180548061542c57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061547f57fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906154b16002830182616683565b6154bf6003830160006166c7565b50509055600101615419565b505b60008183106154dc57816154de565b825b905060005b8181101561584d576155908682815181106154fa57fe5b60200260200101516001838154811061550f57fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152615ff9565b6157445780600101600460008884815181106155a857fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055508581815181106155e457fe5b6020026020010151600182815481106155f957fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015584518590829081106156b457fe5b6020026020010151600b82815481106156c957fe5b906000526020600020906016020160020190805190602001906156ed9291906164c4565b506000600b82815481106156fd57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b80548390811061572e57fe5b6000918252602090912060169091020155615845565b6157d585828151811061575357fe5b6020026020010151600b838154811061576857fe5b600091825260209182902060026016909202018101805460408051601f600019610100600186161502019093169490940491820185900485028401850190528083529192909190830182828015612ab85780601f10612a8d57610100808354040283529160200191612ab8565b615820578481815181106157e557fe5b6020026020010151600b82815481106157fa57fe5b9060005260206000209060160201600201908051906020019061581e9291906164c4565b505b60006001828154811061582f57fe5b9060005260206000209060040201600301819055505b6001016154e3565b5082821115615a255761585e616495565b835b83811015615a225785818151811061587457fe5b60200260200101518260400181905250600187828151811061589257fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b80549283018155909352845160169091026000805160206178ef83398151915281019182558583015160008051602061792f8339815191528201805491151560ff19909216919091179055928501518051869492936159c89360008051602061790f833981519152019201906164c4565b5060608201516159de906003830190601361653e565b50505080600101600460008984815181106159f557fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101615860565b50505b615a2d61607a565b615a3561625c565b6000600981905560015493505b83811015615aa3576000600b8281548110615a5957fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b805483908110615a8a57fe5b6000918252602090912060169091020155600101615a42565b505050505050565b60008184841115615acf5760405162461bcd60e51b8152600401610ce79190616bd7565b505050900390565b60008183615af85760405162461bcd60e51b8152600401610ce79190616bd7565b506000838581615b0457fe5b0495945050505050565b8051600090615b1f5750600061137a565b6020820151805160001a9060c0821015615b3e5760009250505061137a565b5060019392505050565b8051600090811a6080811015615b6257600091505061137a565b60b8811080615b7d575060c08110801590615b7d575060f881105b15615b8c57600191505061137a565b60c0811015615ba05760b51901905061137a565b60f51901905061137a565b80516000908190811a6080811015615bc65760019150615c85565b60b8811015615bdb57607e1981019150615c85565b60c0811015615c2c57600060b78203600186019550806020036101000a865104915060018101820193505080831015615c265760405162461bcd60e51b8152600401610ce790617187565b50615c85565b60f8811015615c415760be1981019150615c85565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615c835760405162461bcd60e51b8152600401610ce790617187565b505b5092915050565b8051600090615c9d5750600061137a565b60008090506000615cb18460200151615b48565b602085015185519181019250015b80821015615cdf57615cd082615bab565b82019150826001019250615cbf565b50909392505050565b8051600090601514615cf957600080fd5b61142a82614db0565b8051606090615d1057600080fd5b6000615d1f8360200151615b48565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015615d56576020820181803683370190505b50905060008160200190506147f984876020015101828561644a565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416615db657506018615dda565b6fffffffffffffffffffffffffffffffff198416615dd657506010615dda565b5060005b6020811015615e1057818181518110615def57fe5b01602001516001600160f81b03191615615e0857615e10565b600101615dda565b60008160200390506060816040519080825280601f01601f191660200182016040528015615e45576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015615e8a5750607f60f81b82600081518110615e7857fe5b01602001516001600160f81b03191611155b15615e9657508061137a565b61142a615ea88351608060ff16615f27565b835b6060806040519050835180825260208201818101602087015b81831015615edb578051835260209283019201615ec3565b50855184518101855292509050808201602086015b81831015615f08578051835260209283019201615ef0565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310615f515760405162461bcd60e51b8152600401610ce790616f7f565b60408051600180825281830190925260609160208201818036833701905050905060378411615fab5782840160f81b81600081518110615f8d57fe5b60200101906001600160f81b031916908160001a905350905061142a565b6060615fb685615d72565b90508381510160370160f81b82600081518110615fcf57fe5b60200101906001600160f81b031916908160001a905350615ff08282615eaa565b95945050505050565b805182516000916001600160a01b039182169116148015616033575081602001516001600160a01b031683602001516001600160a01b0316145b8015616058575081604001516001600160a01b031683604001516001600160a01b0316145b8015610f4e5750506060908101519101516001600160401b0390811691161490565b601254601354808211156160c557805b828110156160c357601280548061609d57fe5b6001900381819060005260206000200160006160b99190616683565b905560010161608a565b505b60008183106160d457816160d6565b825b905060005b818110156161ee57616193601282815481106160f357fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156161815780601f1061615657610100808354040283529160200191616181565b820191906000526020600020905b81548152906001019060200180831161616457829003601f168201915b505050505060138381548110612a2a57fe5b6161e657601381815481106161a457fe5b90600052602060002001601282815481106161bb57fe5b9060005260206000200190805460018160011615610100020316600290046161e49291906165e4565b505b6001016160db565b5082821115610d0757825b82811015612fc65760126013828154811061621057fe5b60009182526020808320845460018181018755958552919093209290910180546162539493909201929091600261010092821615929092026000190116046165e4565b506001016161f9565b601354600b54808211156162a757805b828110156162a557601380548061627f57fe5b60019003818190600052602060002001600061629b9190616683565b905560010161626c565b505b60008183106162b657816162b8565b825b905060005b818110156163d757616375601382815481106162d557fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156163635780601f1061633857610100808354040283529160200191616363565b820191906000526020600020905b81548152906001019060200180831161634657829003601f168201915b5050505050600b838154811061576857fe5b6163cf57600b818154811061638657fe5b9060005260206000209060160201600201601382815481106163a457fe5b9060005260206000200190805460018160011615610100020316600290046163cd9291906165e4565b505b6001016162bd565b5082821115610d0757825b82811015612fc6576013600b82815481106163f957fe5b600091825260208083208454600180820187559585529190932060169290920290920160029081018054616441959390940193909260001990821615610100020116046165e4565b506001016163e2565b8061645457610d07565b5b60208110616474578251825260209283019290910190601f1901616455565b915181516020939093036101000a6000190180199091169216919091179052565b604051806080016040528060008152602001600015158152602001606081526020016164bf6166f0565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061650557805160ff1916838001178555616532565b82800160010185558215616532579182015b82811115616532578251825591602001919060010190616517565b5061280092915061670f565b82601381019282156165325791602002820182811115616532578251825591602001919060010190616517565b6040518060600160405280600060ff16815260200160608152602001606081525090565b60405180604001604052806165a26166d6565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061661d5780548555616532565b8280016001018555821561653257600052602060002091601f016020900482015b8281111561653257825482559160010191906001019061663e565b8260138101928215616532579182018281111561653257825482559160010191906001019061663e565b50805460018160011615610100020316600290046000825580601f106166a95750611586565b601f016020900490600052602060002090810190611586919061670f565b5061158690601381019061670f565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b6127a491905b808211156128005760008155600101616715565b60008083601f84011261673a578182fd5b5081356001600160401b03811115616750578182fd5b60208301915083602080830285010111156152ea57600080fd5b60008083601f84011261677b578182fd5b5081356001600160401b03811115616791578182fd5b6020830191508360208285010111156152ea57600080fd5b6000602082840312156167ba578081fd5b81356001600160a01b0381168114610f4e578182fd5b600080600080604085870312156167e5578283fd5b84356001600160401b03808211156167fb578485fd5b61680788838901616729565b9096509450602087013591508082111561681f578384fd5b5061682c87828801616729565b95989497509550505050565b600060208284031215616849578081fd5b81518015158114610f4e578182fd5b6000806020838503121561686a578182fd5b82356001600160401b0381111561687f578283fd5b61688b8582860161676a565b90969095509350505050565b600080600080604085870312156168ac578384fd5b84356001600160401b03808211156168c2578586fd5b6168ce8883890161676a565b909650945060208701359150808211156168e6578384fd5b5061682c8782880161676a565b600060208284031215616904578081fd5b5035919050565b60006020828403121561691c578081fd5b5051919050565b60008060408385031215616935578182fd5b505080516020909101519092909150565b60008060006040848603121561695a578283fd5b833560ff8116811461696a578384fd5b925060208401356001600160401b03811115616984578283fd5b6169908682870161676a565b9497909650939450505050565b6000815180845260208085019450808401835b838110156169d55781516001600160a01b0316875295820195908201906001016169b0565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452616a228160208601602086016176f7565b601f01601f19169290920160200192915050565b60008251616a488184602087016176f7565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b600060208252610f4e602083018461699d565b600060408252616af5604083018561699d565b602083820381850152818551808452828401915082838202850101838801865b83811015616b4357601f19878403018552616b31838351616a0a565b94860194925090850190600101616b15565b50909998505050505050505050565b600060808252616b65608083018761699d565b828103602084810191909152865180835287820192820190845b81811015616b9b57845183529383019391830191600101616b7f565b50508481036040860152616baf818861699d565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b600060208252610f4e6020830184616a0a565b600060408252616bfe6040830186886169e0565b8281036020840152616c118185876169e0565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252602b908201527f746865206275726e526174696f206d757374206265206e6f206772656174657260408201526a0207468616e2031303030360ac1b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526033908201527f7468652073797374656d526577617264526174696f206d757374206265206e6f60408201527202067726561746572207468616e20313030303606c1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526024908201527f6c656e677468206f662073797374656d526577617264526174696f206d69736d6040820152630c2e8c6d60e31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b61ffff91909116815260200190565b90815260200190565b6000848252831515602083015260606040830152615ff06060830184616a0a565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff8516825260406020830152615ff06040830184866169e0565b60005b838110156177125781810151838201526020016176fa565b83811115612fc6575050600091015256fef901a880f901a4f844941284214b9b9c85549ab3d2b972df0deef66ac2c9946ddf42a51534fc98d0c0a3b42c963cace8441ddf946ddf42a51534fc98d0c0a3b42c963cace8441ddf8410000000f84494a2959d3f95eae5dc7d70144ce1b73b403b7eb6e0948081ef03f1d9e0bb4a5bf38f16285c879299f07f948081ef03f1d9e0bb4a5bf38f16285c879299f07f8410000000f8449435552c16704d214347f29fa77f77da6d75d7c75294dc4973e838e3949c77aced16ac2315dc2d7ab11194dc4973e838e3949c77aced16ac2315dc2d7ab1118410000000f84494980a75ecd1309ea12fa2ed87a8744fbfc9b863d594cc6ac05c95a99c1f7b5f88de0e3486c82293b27094cc6ac05c95a99c1f7b5f88de0e3486c82293b2708410000000f84494f474cf03cceff28abc65c9cbae594f725c80e12d94e61a183325a18a173319dd8e19c8d069459e217594e61a183325a18a173319dd8e19c8d069459e21758410000000f84494b71b214cb885500844365e95cd9942c7276e7fd894d22ca3ba2141d23adab65ce4940eb7665ea2b6a794d22ca3ba2141d23adab65ce4940eb7665ea2b6a7841000000070e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb20175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbb0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaa164736f6c6343000604000a", + }, + { + ContractAddr: common.HexToAddress(SlashContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + Code: "608060405234801561001057600080fd5b50600436106102955760003560e01c80638256ace611610167578063c81b1662116100ce578063e1c7392a11610087578063e1c7392a146104d3578063eb57bff7146104db578063f9a2bbc7146104e3578063fc3e5908146104eb578063fc4333cd146104f3578063fd6a6879146104fb57610295565b8063c81b166214610482578063c8509d811461048a578063c96be4cb1461049d578063cc844b73146104b0578063d2a42e4b146104c3578063dc927faf146104cb57610295565b8063a78abc1611610120578063a78abc1614610447578063ab51bb961461044f578063ac0af62914610457578063ac4317511461045f578063ae61dc3b14610472578063c80d4b8f1461047a57610295565b80638256ace61461040c578063831d65d11461041457806396713da9146104275780639bc8e4f21461042f5780639dc0926214610437578063a1a11bf51461043f57610295565b8063493279b11161020b5780636e47b482116101c45780636e47b482146103dc57806370fd5bad146103e4578063718a8aa8146103ec57806375d47a0a146103f45780637912a65d146103fc5780637942fd051461040457610295565b8063493279b1146103925780634bf6c882146103a757806351e80672146103af578063567a372d146103b75780635bfb4990146103bf57806362b72cf5146103d457610295565b806335aa2e441161025d57806335aa2e441461032457806337c8dab914610337578063389f4f71146103585780633a63f4b11461036d5780633dffc3871461037557806343756e5c1461038a57610295565b80630bee7a671461029a5780630e2374a5146102b85780631182b875146102cd57806322d1e80b146102ed57806323bac5a214610302575b600080fd5b6102a2610503565b6040516102af919061354e565b60405180910390f35b6102c0610508565b6040516102af9190612d6a565b6102e06102db366004612ca0565b61050e565b6040516102af9190612da2565b6102f5610574565b6040516102af9190612d97565b610315610310366004612a4e565b61057d565b6040516102af93929190613536565b6102c0610332366004612c70565b6105a0565b61034a610345366004612a4e565b6105c7565b6040516102af929190613528565b61036061061e565b6040516102af91906134fe565b610360610624565b61037d61062a565b6040516102af919061355f565b6102c061062f565b61039a610635565b6040516102af91906134ef565b61037d61063a565b6102c061063f565b610360610645565b6103d26103cd366004612a4e565b61064b565b005b6103606106f6565b6102c06106fc565b61037d610702565b61037d610707565b6102c061070c565b610360610712565b61037d610717565b61034a61071c565b6103d2610422366004612ca0565b610726565b61037d610838565b61036061083d565b6102c0610848565b6102c061084e565b6102f5610854565b6102a261085d565b610360610862565b6103d261046d366004612b54565b610867565b610360610e17565b610360610e1e565b6102c0610e23565b6103d2610498366004612ca0565b610e29565b6103d26104ab366004612a4e565b610e9a565b6103d26104be366004612bbd565b61128b565b61036061187c565b6102c0611881565b6103d2611887565b6103606118c3565b6102c06118c9565b61037d6118cf565b6103d26118d4565b6102c0611d1d565b606481565b61200181565b6060336120001461053a5760405162461bcd60e51b815260040161053190613347565b60405180910390fd5b60005460ff1661055c5760405162461bcd60e51b815260040161053190612e9d565b60405162461bcd60e51b815260040161053190613438565b60075460ff1681565b600260208190526000918252604090912080546001820154919092015460ff1683565b600181815481106105ad57fe5b6000918252602090912001546001600160a01b0316905081565b6000806105d2612835565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b60065481565b600181565b61100181565b606181565b600881565b61200081565b60045481565b336110001461066c5760405162461bcd60e51b81526004016105319061312c565b60005460ff1661068e5760405162461bcd60e51b815260040161053190612e9d565b61200063f7a251d7600b6106a184611d23565b60006040518463ffffffff1660e01b81526004016106c19392919061356d565b600060405180830381600087803b1580156106db57600080fd5b505af11580156106ef573d6000803e3d6000fd5b5050505050565b60035481565b61100581565b600281565b601081565b61100881565b603281565b600b81565b6004546005549091565b33612000146107475760405162461bcd60e51b815260040161053190613347565b60005460ff166107695760405162461bcd60e51b815260040161053190612e9d565b610771612858565b60006107b284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611df592505050565b9150915080156107f95781516040517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e629967916107ec9161354e565b60405180910390a16106ef565b81516040517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e7916108299161354e565b60405180910390a15050505050565b600981565b662386f26fc1000081565b61100781565b61100681565b60005460ff1681565b600081565b600481565b60005460ff166108895760405162461bcd60e51b815260040161053190612e9d565b33611007146108aa5760405162461bcd60e51b815260040161053190613204565b61091584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b60208201529150611e759050565b156109b0576020811461093a5760405162461bcd60e51b8152600401610531906130b8565b604080516020601f840181900481028201810190925282815260009161097891858580838501838280828437600092019190915250611ecf92505050565b90506001811015801561098c575060055481105b6109a85760405162461bcd60e51b815260040161053190613302565b600455610dd4565b610a1684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b60208201529150611e759050565b15610ab25760208114610a3b5760405162461bcd60e51b815260040161053190613252565b604080516020601f8401819004810282018101909252828152600091610a7991858580838501838280828437600092019190915250611ecf92505050565b90506103e88111158015610a8e575060045481115b610aaa5760405162461bcd60e51b815260040161053190612f56565b600555610dd4565b610b2684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f66696e616c697479536c617368526577617264526174696f000000000000000060208201529150611e759050565b15610bc05760208114610b4b5760405162461bcd60e51b81526004016105319061346f565b604080516020601f8401819004810282018101909252828152600091610b8991858580838501838280828437600092019190915250611ecf92505050565b9050600a8110158015610b9c5750606481105b610bb85760405162461bcd60e51b81526004016105319061306c565b600655610dd4565b610c3484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f656e61626c654d616c6963696f7573566f7465536c617368000000000000000060208201529150611e759050565b15610cab5760208114610c595760405162461bcd60e51b815260040161053190612f8b565b604080516020601f8401819004810282018101909252828152610c959190848480838501838280828437600092019190915250611ed492505050565b6007805460ff1916911515919091179055610dd4565b610d1f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601781527f6d616c6963696f7573566f7465536c61736853636f706500000000000000000060208201529150611e759050565b15610dbc5760208114610d445760405162461bcd60e51b815260040161053190612de7565b604080516020601f8401819004810282018101909252828152600091610d8291858580838501838280828437600092019190915250611ecf92505050565b90506170808110158015610d985750620d2f0081105b610db45760405162461bcd60e51b815260040161053190612ed4565b600855610dd4565b60405162461bcd60e51b8152600401610531906133e3565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a84848484604051610e099493929190612db5565b60405180910390a150505050565b6201518081565b609681565b61100281565b3361200014610e4a5760405162461bcd60e51b815260040161053190613347565b60005460ff16610e6c5760405162461bcd60e51b815260040161053190612e9d565b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b334114610eb95760405162461bcd60e51b815260040161053190613396565b60005460ff16610edb5760405162461bcd60e51b815260040161053190612e9d565b6003544311610efc5760405162461bcd60e51b8152600401610531906134ba565b3a15610f1a5760405162461bcd60e51b8152600401610531906131a7565b60405163155853f360e21b8152611000906355614fcc90610f3f908490600401612d6a565b60206040518083038186803b158015610f5757600080fd5b505afa158015610f6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8f9190612b34565b610f9857611284565b610fa0612835565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff161580159282019290925290610ffb576020810180516001019052611054565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b43815260055460208201518161106657fe5b066111b257600060208201526040516335409f7f60e01b8152611000906335409f7f90611097908590600401612d6a565b600060405180830381600087803b1580156110b157600080fd5b505af11580156110c5573d6000803e3d6000fd5b505050506120006001600160a01b031663f7a251d7600b6110e585611d23565b60006040518463ffffffff1660e01b81526004016111059392919061356d565b600060405180830381600087803b15801561111f57600080fd5b505af1925050508015611130575060015b6111ad573d80801561115e576040519150601f19603f3d011682016040523d82523d6000602084013e611163565b606091505b50826001600160a01b03167fd7bc86ff5d08c8ab043edec743302aba2520e6635172a428bc956721db9e2d1c8360200151836040516111a3929190613507565b60405180910390a2505b61121e565b6004548160200151816111c157fe5b0661121e576040516375abf10160e11b81526110009063eb57e202906111eb908590600401612d6a565b600060405180830381600087803b15801561120557600080fd5b505af1158015611219573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505b5043600355565b60005460ff166112ad5760405162461bcd60e51b815260040161053190612e9d565b604051630a83aaa960e31b81526110069063541d5548906112d2903390600401612d6a565b60206040518083038186803b1580156112ea57600080fd5b505afa1580156112fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113229190612b34565b61133e5760405162461bcd60e51b815260040161053190612e31565b60075460ff166113605760405162461bcd60e51b815260040161053190612e68565b60065461136d5760146006555b60085461137c57620151806008555b6008548151604001514391011180156113a057504360085482602001516040015101115b6113bc5760405162461bcd60e51b81526004016105319061340a565b8060200151602001518160000151602001511480156113ea5750806020015160600151816000015160600151145b156114075760405162461bcd60e51b8152600401610531906130ff565b8051604081015190511080156114265750602081015160408101519051105b6114425760405162461bcd60e51b815260040161053190613035565b6020810151518151511080156114675750806000015160400151816020015160400151105b8061149257508051516020820151511080156114925750806020015160400151816000015160400151105b806114ac5750806020015160400151816000015160400151145b6114c85760405162461bcd60e51b815260040161053190612f1f565b604080820151905163ea321e4960e01b81526110009163ea321e49916114f19190600401612da2565b60206040518083038186803b15801561150957600080fd5b505afa15801561151d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115419190612b34565b61155d5760405162461bcd60e51b8152600401610531906131d5565b61156f81600001518260400151611efc565b8015611588575061158881602001518260400151611efc565b6115a45760405162461bcd60e51b815260040161053190612fd6565b6060806110006001600160a01b0316633b071dcc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156115e257600080fd5b505afa1580156115f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261161e9190810190612a71565b9150915060005b81518110156117595761164f82828151811061163d57fe5b602002602001015185604001516120d4565b15611751576006546040516213929d60e11b8152606461100280319093020491906227253a906116859033908590600401612d7e565b602060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d79190612c88565b506110006001600160a01b03166335409f7f8584815181106116f557fe5b60200260200101516040518263ffffffff1660e01b81526004016117199190612d6a565b600060405180830381600087803b15801561173357600080fd5b505af1158015611747573d6000803e3d6000fd5b5050505050611759565b600101611625565b50600061176b84604001516000612138565b90506120006001600160a01b031663f7a251d7600b61178d8760400151612154565b60006040518463ffffffff1660e01b81526004016117ad9392919061356d565b600060405180830381600087803b1580156117c757600080fd5b505af19250505080156117d8575060015b61184a573d808015611806576040519150601f19603f3d011682016040523d82523d6000602084013e61180b565b606091505b50817fd58d1183100bd0932c0588f31c4205d6bc6168909765a96c41adbed3115f36288260405161183c9190612da2565b60405180910390a250611876565b60405181907f7b78aadacff901d8b63d0dba4f86283d4db8aef27f9ed70413dd860f1c9532b690600090a25b50505050565b601481565b61100381565b60005460ff16156118aa5760405162461bcd60e51b815260040161053190613294565b603260045560966005556000805460ff19166001179055565b60085481565b61100081565b600381565b33611000146118f55760405162461bcd60e51b81526004016105319061312c565b60005460ff166119175760405162461bcd60e51b815260040161053190612e9d565b60015461192357611d1b565b600154600090600019015b808211611cef576000805b82841015611a5257611949612835565b600260006001878154811061195a57fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611a3c576004600554816119c757fe5b048160200151038160200181815250508060026000600188815481106119e957fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611a46565b6001925050611a52565b50836001019350611939565b828411611be957611a61612835565b6002600060018681548110611a7257fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611b5a57600460055481611adf57fe5b04816020015103816020018181525050806002600060018781548110611b0157fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff19169115159190911790559150611be99050565b6002600060018681548110611b6b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805480611baf57fe5b600082815260209020810160001990810180546001600160a01b031916905501905583611bdc5750611be9565b5060001990920191611a52565b818015611bf35750805b15611cd2576002600060018681548110611c0957fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805484908110611c5057fe5b600091825260209091200154600180546001600160a01b039092169186908110611c7657fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001805480611caf57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b82611cde575050611cef565b50506001909101906000190161192e565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081611d3e579050509050611d67836001600160a01b031661218f565b81600081518110611d7457fe5b6020026020010181905250611d88436121b2565b81600181518110611d9557fe5b6020908102919091010152611daa60616121b2565b81600281518110611db757fe5b6020026020010181905250611dcb426121b2565b81600381518110611dd857fe5b6020026020010181905250611dec816121c5565b9150505b919050565b611dfd612858565b6000611e07612858565b611e0f61286a565b611e20611e1b8661224f565b612274565b90506000805b611e2f836122be565b15611e685780611e5b57611e4a611e45846122df565b61232d565b63ffffffff16845260019150611e60565b611e68565b600101611e26565b5091935090915050915091565b600081604051602001611e889190612d4e565b6040516020818303038152906040528051906020012083604051602001611eaf9190612d4e565b604051602081830303815290604052805190602001201490505b92915050565b015190565b8082015160009060ff811615611eee576001915081611ef4565b60009150815b505092915050565b60408051600480825260a0820190925260009160609190816020015b6060815260200190600190039081611f18575050604080516020808252818301909252919250606091908082018180368337019050509050611f5d85600001516121b2565b82600081518110611f6a57fe5b6020026020010181905250611f8560208660200151836123af565b611f8e816123bf565b82600181518110611f9b57fe5b6020026020010181905250611fb385604001516121b2565b82600281518110611fc057fe5b6020026020010181905250611fdb60208660600151836123af565b611fe4816123bf565b82600381518110611ff157fe5b6020026020010181905250612017602061200a846121c5565b80519060200120836123af565b6040805160b080825260e08201909252606091602082018180368337019050509050612047818360006020612415565b61205981876080015160206060612415565b612067818660806030612415565b604080516001808252818301909252606091602082018180368337019050509050815160016020830182602086016066600019fa6120a457600080fd5b5060016120b2826000612468565b60ff16146120c7576000945050505050611ec9565b5060019695505050505050565b8151815160009160019181148083146120f0576000925061212e565b600160208701838101602088015b60028483851001141561212957805183511461211d5760009650600093505b602092830192016120fe565b505050505b5090949350505050565b6000816020018351101561214b57600080fd5b50016020015190565b60408051600480825260a08201909252606091829190816020015b606081526020019060019003908161216f579050509050611d67836123bf565b60408051600560a21b8318601482015260348101909152606090611dec816123bf565b6060611ec96121c083612484565b6123bf565b60608151600014156121e65750604080516000815260208101909152611df0565b6060826000815181106121f557fe5b602002602001015190506000600190505b83518110156122365761222c8285838151811061221f57fe5b602002602001015161256a565b9150600101612206565b50611dec612249825160c060ff166125e7565b8261256a565b61225761288a565b506040805180820190915281518152602082810190820152919050565b61227c61286a565b612285826126b9565b61228e57600080fd5b600061229d83602001516126f3565b60208085015160408051808201909152868152920190820152915050919050565b60006122c861288a565b505080518051602091820151919092015191011190565b6122e761288a565b6122f0826122be565b6122f957600080fd5b6020820151600061230982612756565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061234257508151602110155b61234b57600080fd5b600061235a83602001516126f3565b905080836000015110156123805760405162461bcd60e51b8152600401610531906132cb565b8251602080850151830180519284900392918310156123a657826020036101000a820491505b50949350505050565b9091018181526020918201910152565b6060815160011480156123f15750607f60f81b826000815181106123df57fe5b01602001516001600160f81b03191611155b156123fd575080611df0565b611ec961240f8351608060ff166125e7565b8361256a565b60005b818110156106ef5783818151811061242c57fe5b602001015160f81c60f81b85848060010195508151811061244957fe5b60200101906001600160f81b031916908160001a905350600101612418565b6000816001018351101561247b57600080fd5b50016001015190565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166124c8575060186124ec565b6fffffffffffffffffffffffffffffffff1984166124e8575060106124ec565b5060005b60208110156125225781818151811061250157fe5b01602001516001600160f81b0319161561251a57612522565b6001016124ec565b60008160200390506060816040519080825280601f01601f191660200182016040528015612557576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561259b578051835260209283019201612583565b50855184518101855292509050808201602086015b818310156125c85780518352602092830192016125b0565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106126115760405162461bcd60e51b81526004016105319061300d565b6040805160018082528183019092526060916020820181803683370190505090506037841161266b5782840160f81b8160008151811061264d57fe5b60200101906001600160f81b031916908160001a9053509050611ec9565b606061267685612484565b90508381510160370160f81b8260008151811061268f57fe5b60200101906001600160f81b031916908160001a9053506126b0828261256a565b95945050505050565b80516000906126ca57506000611df0565b6020820151805160001a9060c08210156126e957600092505050611df0565b5060019392505050565b8051600090811a608081101561270d576000915050611df0565b60b8811080612728575060c08110801590612728575060f881105b15612737576001915050611df0565b60c081101561274b5760b519019050611df0565b60f519019050611df0565b80516000908190811a6080811015612771576001915061282e565b60b881101561278657607e198101915061282e565b60c08110156127d757600060b78203600186019550806020036101000a8651049150600181018201935050808310156127d15760405162461bcd60e51b81526004016105319061317c565b5061282e565b60f88110156127ec5760be198101915061282e565b600060f78203600186019550806020036101000a865104915060018101820193505080831015611ef45760405162461bcd60e51b81526004016105319061317c565b5092915050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b604051806040016040528061287d61288a565b8152602001600081525090565b604051806040016040528060008152602001600081525090565b600082601f8301126128b4578081fd5b81516128c76128c2826135c0565b613599565b818152915060208083019084810160005b8481101561293d578151870188603f8201126128f357600080fd5b838101516129036128c2826135e0565b81815260408b8184860101111561291957600080fd5b61292883888401838701613604565b508652505092820192908201906001016128d8565b505050505092915050565b60008083601f840112612959578182fd5b50813567ffffffffffffffff811115612970578182fd5b60208301915083602082850101111561298857600080fd5b9250929050565b600082601f83011261299f578081fd5b81356129ad6128c2826135e0565b91508082528360208285010111156129c457600080fd5b8060208401602084013760009082016020015292915050565b600060a082840312156129ee578081fd5b6129f860a0613599565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff811115612a3657600080fd5b612a428482850161298f565b60808301525092915050565b600060208284031215612a5f578081fd5b8135612a6a81613630565b9392505050565b60008060408385031215612a83578081fd5b825167ffffffffffffffff80821115612a9a578283fd5b81850186601f820112612aab578384fd5b80519250612abb6128c2846135c0565b80848252602080830192508084018a828389028701011115612adb578788fd5b8794505b86851015612b06578051612af281613630565b845260019490940193928101928101612adf565b508801519096509350505080821115612b1d578283fd5b50612b2a858286016128a4565b9150509250929050565b600060208284031215612b45578081fd5b81518015158114612a6a578182fd5b60008060008060408587031215612b69578182fd5b843567ffffffffffffffff80821115612b80578384fd5b612b8c88838901612948565b90965094506020870135915080821115612ba4578384fd5b50612bb187828801612948565b95989497509550505050565b600060208284031215612bce578081fd5b813567ffffffffffffffff80821115612be5578283fd5b81840160608187031215612bf7578384fd5b612c016060613599565b9250803582811115612c11578485fd5b612c1d878284016129dd565b845250602081013582811115612c31578485fd5b612c3d878284016129dd565b602085015250604081013582811115612c54578485fd5b612c608782840161298f565b6040850152509195945050505050565b600060208284031215612c81578081fd5b5035919050565b600060208284031215612c99578081fd5b5051919050565b600080600060408486031215612cb4578283fd5b833560ff81168114612cc4578384fd5b9250602084013567ffffffffffffffff811115612cdf578283fd5b612ceb86828701612948565b9497909650939450505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612d3a816020860160208601613604565b601f01601f19169290920160200192915050565b60008251612d60818460208701613604565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060208252612a6a6020830184612d22565b600060408252612dc9604083018688612cf8565b8281036020840152612ddc818587612cf8565b979650505050505050565b6020808252602a908201527f6c656e677468206f66206d616c6963696f7573566f7465536c61736853636f706040820152690ca40dad2e6dac2e8c6d60b31b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604082015260600190565b6020808252818101527f6d616c6963696f757320766f746520736c617368206e6f7420656e61626c6564604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252602b908201527f746865206d616c6963696f757320766f746520736c6173682073636f7065206f60408201526a7574206f662072616e676560a81b606082015260800190565b6020808252601a908201527f6e6f2076696f6c6174696f6e206f6620766f74652072756c6573000000000000604082015260600190565b6020808252818101527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604082015260600190565b6020808252602b908201527f6c656e677468206f6620656e61626c654d616c6963696f7573566f7465536c6160408201526a0e6d040dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526017908201527f766572696679207369676e6174757265206661696c6564000000000000000000604082015260600190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526019908201527f7372634e756d20626967676572207468616e207461724e756d00000000000000604082015260600190565b6020808252602c908201527f7468652066696e616c69747920736c6173682072657761726420726174696f2060408201526b6f7574206f662072616e676560a01b606082015260800190565b60208082526027908201527f6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d6040820152660d2e6dac2e8c6d60cb1b606082015260800190565b60208082526013908201527274776f206964656e746963616c20766f74657360681b604082015260600190565b60208082526030908201527f746865206d6573736167652073656e646572206d7573742062652076616c696460408201526f185d1bdc94d95d0818dbdb9d1c9858dd60821b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252601590820152741d9bdd195059191c881a5cc81b9bdd08199bdd5b99605a1b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526022908201527f6c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746040820152610c6d60f31b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526025908201527f746865206d697364656d65616e6f725468726573686f6c64206f7574206f662060408201526472616e676560d81b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b6020808252601490820152731d185c99d95d08189b1bd8dac81d1bdbc81bdb1960621b604082015260600190565b6020808252601e908201527f7265636569766520756e65787065637465642073796e207061636b6167650000604082015260600190565b6020808252602b908201527f6c656e677468206f662066696e616c697479536c61736852657761726452617460408201526a0d2de40dad2e6dac2e8c6d60ab1b606082015260800190565b6020808252818101527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604082015260600190565b61ffff91909116815260200190565b90815260200190565b6000838252604060208301526135206040830184612d22565b949350505050565b918252602082015260400190565b92835260208301919091521515604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff85168252606060208301526135896060830185612d22565b9050826040830152949350505050565b60405181810167ffffffffffffffff811182821017156135b857600080fd5b604052919050565b600067ffffffffffffffff8211156135d6578081fd5b5060209081020190565b600067ffffffffffffffff8211156135f6578081fd5b50601f01601f191660200190565b60005b8381101561361f578181015183820152602001613607565b838111156118765750506000910152565b6001600160a01b038116811461364557600080fd5b5056fea164736f6c6343000604000a", + }, + { + ContractAddr: common.HexToAddress(SystemRewardContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + Code: "6080604052600436106101c55760003560e01c806375d47a0a116100f7578063ab51bb9611610095578063f9a2bbc711610064578063f9a2bbc7146105c3578063fb5478b3146105d8578063fc3e5908146105ed578063fd6a68791461060257610209565b8063ab51bb96146104b5578063ac431751146104ca578063c81b166214610599578063dc927faf146105ae57610209565b80639a99b4f0116100d15780639a99b4f01461043d5780639dc0926214610476578063a1a11bf51461048b578063a78abc16146104a057610209565b806375d47a0a146103fe5780637942fd051461041357806396713da91461042857610209565b8063493279b1116101645780636d70f7ae1161013e5780636d70f7ae146103785780636e47b482146103bf57806370fd5bad146103d4578063718a8aa8146103e957610209565b8063493279b1146103225780634bf6c8821461034e57806351e806721461036357610209565b806331b6d4a5116101a057806331b6d4a5146102b85780633a0b0eff146102cd5780633dffc387146102e257806343756e5c1461030d57610209565b806227253a1461020e5780630bee7a67146102595780630e2374a51461028757610209565b366102095734156102075760408051348152905133917f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db919081900360200190a25b005b600080fd5b34801561021a57600080fd5b506102476004803603604081101561023157600080fd5b506001600160a01b038135169060200135610617565b60408051918252519081900360200190f35b34801561026557600080fd5b5061026e6107c2565b6040805163ffffffff9092168252519081900360200190f35b34801561029357600080fd5b5061029c6107c7565b604080516001600160a01b039092168252519081900360200190f35b3480156102c457600080fd5b506102476107cd565b3480156102d957600080fd5b506102476107d9565b3480156102ee57600080fd5b506102f76107df565b6040805160ff9092168252519081900360200190f35b34801561031957600080fd5b5061029c6107e4565b34801561032e57600080fd5b506103376107ea565b6040805161ffff9092168252519081900360200190f35b34801561035a57600080fd5b506102f76107ef565b34801561036f57600080fd5b5061029c6107f4565b34801561038457600080fd5b506103ab6004803603602081101561039b57600080fd5b50356001600160a01b03166107fa565b604080519115158252519081900360200190f35b3480156103cb57600080fd5b5061029c610818565b3480156103e057600080fd5b506102f761081e565b3480156103f557600080fd5b506102f7610823565b34801561040a57600080fd5b5061029c610828565b34801561041f57600080fd5b506102f761082e565b34801561043457600080fd5b506102f7610833565b34801561044957600080fd5b506102476004803603604081101561046057600080fd5b506001600160a01b038135169060200135610838565b34801561048257600080fd5b5061029c610962565b34801561049757600080fd5b5061029c610968565b3480156104ac57600080fd5b506103ab61096e565b3480156104c157600080fd5b5061026e610977565b3480156104d657600080fd5b50610207600480360360408110156104ed57600080fd5b81019060208101813564010000000081111561050857600080fd5b82018360208201111561051a57600080fd5b8035906020019184600183028401116401000000008311171561053c57600080fd5b91939092909160208101903564010000000081111561055a57600080fd5b82018360208201111561056c57600080fd5b8035906020019184600183028401116401000000008311171561058e57600080fd5b50909250905061097c565b3480156105a557600080fd5b5061029c610cff565b3480156105ba57600080fd5b5061029c610d05565b3480156105cf57600080fd5b5061029c610d0b565b3480156105e457600080fd5b50610247610d11565b3480156105f957600080fd5b506102f7610d1d565b34801561060e57600080fd5b5061029c610d22565b6000805460ff1661069457600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166106e25760405162461bcd60e51b815260040180806020018281038252602b815260200180610e10602b913960400191505060405180910390fd5b60004783106106f157476106f3565b825b9050674563918244f400008111156107105750674563918244f400005b8015610791576040516001600160a01b0385169082156108fc029083906000818181858888f1935050505015801561074c573d6000803e3d6000fd5b506040805182815290516001600160a01b038616917ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0919081900360200190a26107bb565b6040517fe589651933c2457488cc0d8e0941518abf748e799435e4e396d9c4d0b2db2d4d90600090a15b9392505050565b606481565b61200181565b674563918244f4000081565b60015481565b600181565b61100181565b606181565b600881565b61200081565b6001600160a01b031660009081526002602052604090205460ff1690565b61100581565b600281565b601081565b61100881565b600b81565b600981565b6000805460ff166108b557600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166109035760405162461bcd60e51b815260040180806020018281038252602b815260200180610e10602b913960400191505060405180910390fd5b60004783106109125747610914565b825b9050670de0b6b3a76400008111156107105750604051670de0b6b3a7640000906001600160a01b03851690600090839082818181858883f1935050505015801561074c573d6000803e3d6000fd5b61100781565b61100681565b60005460ff1681565b600081565b33611007146109bc5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e6a602e913960400191505060405180910390fd5b610a1e84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600b81526a30b23227b832b930ba37b960a91b60208201529150610d289050565b15610af657606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091149050610aa15760405162461bcd60e51b815260040180806020018281038252602c815260200180610e98602c913960400191505060405180910390fd5b60148101516001600160a01b038116600081815260026020526040808220805460ff19166001179055517f9870d7fe5d112134c55844951dedf365363006d9c588db07c4c85af6322a06199190a25050610c6d565b610b5b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81526d3232b632ba32a7b832b930ba37b960911b60208201529150610d289050565b15610c3057606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091149050610bde5760405162461bcd60e51b815260040180806020018281038252602f815260200180610e3b602f913960400191505060405180910390fd5b60148101516001600160a01b038116600081815260026020526040808220805460ff19169055517fb40992a19dba61ea600e87fce607102bf5908dc89076217b6ca6ae195224f7029190a25050610c6d565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b61100281565b61100381565b61100081565b670de0b6b3a764000081565b600381565b61100481565b6000816040516020018082805190602001908083835b60208310610d5d5780518252601f199092019160209182019101610d3e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310610dcb5780518252601f199092019160209182019101610dac565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490509291505056fe6f6e6c79206f70657261746f7220697320616c6c6f77656420746f2063616c6c20746865206d6574686f646c656e677468206f662076616c756520666f722064656c6574654f70657261746f722073686f756c64206265203230746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662076616c756520666f72206164644f70657261746f722073686f756c64206265203230a164736f6c6343000604000a", + }, + }, + } + + keplerUpgrade[rialtoNet] = &Upgrade{ + UpgradeName: "kepler", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + Code: "6080604052600436106104a35760003560e01c806388b32f1111610260578063c6d3394511610144578063e40716a1116100c1578063f92eb86b11610085578063f92eb86b14610c02578063f9a2bbc714610c17578063fc3e590814610c2c578063fccc281314610c41578063fd4ad81f14610c56578063fd6a687914610c85576104aa565b8063e40716a114610b85578063ea321e4914610b9a578063eb57e20214610bba578063eda5868c14610bda578063f340fa0114610bef576104aa565b8063d86222d511610108578063d86222d514610b1c578063daacdb6614610b31578063dc927faf14610b46578063e086c7b114610b5b578063e1c7392a14610b70576104aa565b8063c6d3394514610abd578063c81b166214610ad2578063c8509d81146108b6578063ce910b0c14610ae7578063d68fb56a14610b07576104aa565b8063a5422d5c116101dd578063ad3c9da6116101a1578063ad3c9da614610a3c578063aef198a914610a5c578063b7ab4db514610a71578063b8cf4ef114610a93578063bf9f499514610666578063c466689d14610aa8576104aa565b8063a5422d5c146109c8578063a78abc16146109dd578063aaf5eb68146109f2578063ab51bb9614610a07578063ac43175114610a1c576104aa565b806396713da91161022457806396713da91461095f5780639dc09262146109745780639fe0f81614610989578063a0dc27581461099e578063a1a11bf5146109b3576104aa565b806388b32f11146108eb5780638a7beb01146109005780638b5ad0c9146109155780638d19a4101461092a5780639369d7de1461094a576104aa565b806351e80672116103875780636e47b482116103045780637942fd05116102c85780637942fd05146108775780637a84ca2a1461088c57806381650b62146108a1578063831d65d1146108b6578063853230aa1461086257806386249882146108d6576104aa565b80636e47b4821461080e57806370fd5bad14610823578063718a8aa81461083857806375d47a0a1461084d57806378dfed4a14610862576104aa565b80635de1e22c1161034b5780635de1e22c14610792578063603d86d31461065157806360eba4fe146107a757806362b72cf5146107c75780636969a25c146107dc576104aa565b806351e806721461071357806355614fcc14610728578063565c56b3146107485780635667515a146107685780635d77156c1461077d576104aa565b80633365af3a1161042057806343756e5c116103e457806343756e5c1461068857806345cf9daf1461069d578063493279b1146106b25780634bf6c882146106d45780634df6e0c3146106e95780635192c82c146106fe576104aa565b80633365af3a146105ee57806335409f7f1461060e5780633b071dcc1461062e5780633de0f0d8146106515780633dffc38714610666576104aa565b8063152ad3b811610467578063152ad3b8146105625780631ff1806914610584578063219f22d514610599578063300c3567146105ae578063321d398a146105ce576104aa565b806304c4fec6146104af57806307a56847146104c65780630bee7a67146104f15780630e2374a5146105135780631182b87514610535576104aa565b366104aa57005b600080fd5b3480156104bb57600080fd5b506104c4610c9a565b005b3480156104d257600080fd5b506104db610d0c565b6040516104e89190617692565b60405180910390f35b3480156104fd57600080fd5b50610506610d12565b6040516104e891906176bc565b34801561051f57600080fd5b50610528610d17565b6040516104e89190616a61565b34801561054157600080fd5b50610555610550366004616947565b610d1d565b6040516104e89190616bd8565b34801561056e57600080fd5b50610577610f55565b6040516104e89190616bcd565b34801561059057600080fd5b506104db610f5e565b3480156105a557600080fd5b50610506610f64565b3480156105ba57600080fd5b506104c46105c93660046167d1565b610f69565b3480156105da57600080fd5b506105776105e93660046168f4565b6112b0565b3480156105fa57600080fd5b506105776106093660046168f4565b61137f565b34801561061a57600080fd5b506104c46106293660046167aa565b611430565b34801561063a57600080fd5b50610643611589565b6040516104e8929190616ae3565b34801561065d57600080fd5b506104db611865565b34801561067257600080fd5b5061067b61186b565b6040516104e891906176cd565b34801561069457600080fd5b50610528611870565b3480156106a957600080fd5b506104db611876565b3480156106be57600080fd5b506106c761187c565b6040516104e89190617683565b3480156106e057600080fd5b5061067b611882565b3480156106f557600080fd5b50610643611887565b34801561070a57600080fd5b506104db611a05565b34801561071f57600080fd5b50610528611a0b565b34801561073457600080fd5b506105776107433660046167aa565b611a11565b34801561075457600080fd5b506104db6107633660046167aa565b611a46565b34801561077457600080fd5b5061067b611a97565b34801561078957600080fd5b50610506611a9c565b34801561079e57600080fd5b506104db611aa1565b3480156107b357600080fd5b506105556107c23660046168f4565b611aa7565b3480156107d357600080fd5b506104db611b4d565b3480156107e857600080fd5b506107fc6107f73660046168f4565b611b53565b6040516104e896959493929190616a8e565b34801561081a57600080fd5b50610528611bb7565b34801561082f57600080fd5b5061067b611bbd565b34801561084457600080fd5b5061067b611bc2565b34801561085957600080fd5b50610528611bc7565b34801561086e57600080fd5b506104db611bcd565b34801561088357600080fd5b5061067b611bd3565b34801561089857600080fd5b506104db611bd8565b3480156108ad57600080fd5b50610506611bde565b3480156108c257600080fd5b506104c46108d1366004616947565b611be3565b3480156108e257600080fd5b506104db611c44565b3480156108f757600080fd5b506104db611c4a565b34801561090c57600080fd5b50610577611c50565b34801561092157600080fd5b506104db611c59565b34801561093657600080fd5b506104db6109453660046167aa565b611c5f565b34801561095657600080fd5b506104c4611c9f565b34801561096b57600080fd5b5061067b611db3565b34801561098057600080fd5b50610528611db8565b34801561099557600080fd5b506104db611dbe565b3480156109aa57600080fd5b506104db611dc3565b3480156109bf57600080fd5b50610528611dc8565b3480156109d457600080fd5b50610555611dce565b3480156109e957600080fd5b50610577611ded565b3480156109fe57600080fd5b506104db611df6565b348015610a1357600080fd5b50610506611a97565b348015610a2857600080fd5b506104c4610a37366004616898565b611dff565b348015610a4857600080fd5b506104db610a573660046167aa565b61269d565b348015610a6857600080fd5b506104db6126af565b348015610a7d57600080fd5b50610a866126bc565b6040516104e89190616ad0565b348015610a9f57600080fd5b506104db6127a8565b348015610ab457600080fd5b506104db6127ad565b348015610ac957600080fd5b506104db611bbd565b348015610ade57600080fd5b506105286127b3565b348015610af357600080fd5b50610555610b023660046168f4565b6127b9565b348015610b1357600080fd5b506104db6127c6565b348015610b2857600080fd5b506104db612805565b348015610b3d57600080fd5b506104db612811565b348015610b5257600080fd5b50610528612817565b348015610b6757600080fd5b506104db610d12565b348015610b7c57600080fd5b506104c461281d565b348015610b9157600080fd5b506104db6129cc565b348015610ba657600080fd5b50610577610bb5366004616859565b6129d2565b348015610bc657600080fd5b506104c4610bd53660046167aa565b612b58565b348015610be657600080fd5b50610506612c60565b6104c4610bfd3660046167aa565b612c65565b348015610c0e57600080fd5b506104db612fcd565b348015610c2357600080fd5b50610528612fd3565b348015610c3857600080fd5b5061067b611dbe565b348015610c4d57600080fd5b50610528612fd9565b348015610c6257600080fd5b50610c76610c713660046168f4565b612fdf565b6040516104e89392919061769b565b348015610c9157600080fd5b506105286130a1565b6000610ca533611c5f565b9050600b8181548110610cb457fe5b600091825260209091206001601690920201015460ff16610cf05760405162461bcd60e51b8152600401610ce79061733d565b60405180910390fd5b6000610cfa6127c6565b9050610d073383836130a7565b505050565b60095481565b606481565b61200181565b60005460609060ff16610d425760405162461bcd60e51b8152600401610ce790616d97565b3361200014610d635760405162461bcd60e51b8152600401610ce7906174d6565b600b54610e2157610d72616496565b60015460005b81811015610e1d57600b805460018101825560009190915283516000805160206178f083398151915260169092029182019081556020808601516000805160206179308339815191528401805460ff1916911515919091179055604086015180518794610df9936000805160206179108339815191529091019201906164c5565b506060820151610e0f906003830190601361653f565b505050806001019050610d78565b5050505b610e2961656c565b6000610e6a85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329392505050565b9150915080610e8657610e7d606461344f565b92505050610f4e565b815160009060ff16610eab57610ea4836020015184604001516134b0565b9050610f1a565b825160ff1660011415610f1657826020015151600114610ef0576000805160206178d0833981519152604051610ee0906171f6565b60405180910390a1506067610f11565b610ea48360200151600081518110610f0457fe5b6020026020010151614104565b610f1a565b5060655b63ffffffff8116610f3f5750506040805160008152602081019091529150610f4e9050565b610f488161344f565b93505050505b9392505050565b60075460ff1681565b60035481565b606881565b334114610f885760405162461bcd60e51b8152600401610ce790617525565b6010544311610fa95760405162461bcd60e51b8152600401610ce790616ef3565b3a15610fc75760405162461bcd60e51b8152600401610ce79061727c565b60005460ff16610fe95760405162461bcd60e51b8152600401610ce790616d97565b60006110023168056bc75e2d63100000811115611020576110198168056bc75e2d6310000063ffffffff61427b16565b9150611027565b50506112a6565b6040516213929d60e11b8152611002906227253a9061104c9030908690600401616a75565b602060405180830381600087803b15801561106657600080fd5b505af115801561107a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109e919061690c565b9150816110ac5750506112a6565b6000805b848110156110da578585828181106110c457fe5b90506020020135820191508060010190506110b0565b50806110e8575050506112a6565b6000806000805b8981101561129e578489898381811061110457fe5b9050602002013588028161111457fe5b0493508a8a8281811061112357fe5b905060200201602081019061113891906167aa565b6001600160a01b0381166000908152600460205260409020549093509150811561125457600060018084038154811061116d57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff16156111da57836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d85866040516111cd9190617692565b60405180910390a261124e565b6003546111ed908663ffffffff6142bd16565b6003908155810154611205908663ffffffff6142bd16565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611245908890617692565b60405180910390a25b50611296565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d858560405161128d9190617692565b60405180910390a25b6001016110ef565b505050505050505b5050436010555050565b60015460009082106112c45750600061137a565b60006001600160a01b0316600183815481106112dc57fe5b60009182526020909120600490910201546001600160a01b0316148061130c5750600854158061130c5750600a54155b8061131b575060085460095410155b8061132c575061132a8261137f565b155b8061135557506000600b838154811061134157fe5b906000526020600020906016020160000154115b80611369575060016113656126bc565b5111155b156113765750600061137a565b5060015b919050565b60015460009082106113935750600061137a565b600b5482106113d057600182815481106113a957fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615905061137a565b600182815481106113dd57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615801561142a5750600b828154811061141157fe5b600091825260209091206001601690920201015460ff16155b92915050565b33611001146114515760405162461bcd60e51b8152600401610ce79061763a565b600b5461150f57611460616496565b60015460005b8181101561150b57600b805460018101825560009190915283516000805160206178f083398151915260169092029182019081556020808601516000805160206179308339815191528401805460ff19169115159190911790556040860151805187946114e7936000805160206179108339815191529091019201906164c5565b5060608201516114fd906003830190601361653f565b505050806001019050611466565b5050505b6001600160a01b038116600090815260046020526040902054806115335750611586565b6001810390506000600b828154811061154857fe5b600091825260209091206001601690920201015460ff16905061156b83836142e2565b80156115745750805b15610d07576009805460001901905550505b50565b60015460609081906000805b828110156115dc57600181815481106115aa57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166115d4576001909101905b600101611595565b50606081604051908082528060200260200182016040528015611609578160200160208202803683370190505b50905060608260405190808252806020026020018201604052801561164257816020015b606081526020019060019003908161162d5790505b50600b54600094509091508414156117bd5760005b848110156117b7576001818154811061166c57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166117af576001818154811061169c57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106116c757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b81815481106116f457fe5b600091825260209182902060026016909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561178c5780601f106117615761010080835404028352916020019161178c565b820191906000526020600020905b81548152906001019060200180831161176f57829003601f168201915b505050505082858151811061179d57fe5b60209081029190910101526001909301925b600101611657565b50611859565b60005b8481101561185757600181815481106117d557fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661184f576001818154811061180557fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061183057fe5b6001600160a01b03909216602092830291909101909101526001909301925b6001016117c0565b505b909450925050505b9091565b61271081565b600181565b61100181565b60085481565b6102ca81565b600881565b600e54600c5460609182918061189b575060155b60606118a56126bc565b905060606118b282614695565b9050828251116118c9579094509250611861915050565b838383510310156118db578282510393505b83156119115760c843046118f783838388880360008a8a614803565b61190f8383838888038989038a8b8b8b510301614803565b505b60608360405190808252806020026020018201604052801561193d578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561197657816020015b60608152602001906001900390816119615790505b50905060005b858110156119f75784818151811061199057fe5b60200260200101518382815181106119a457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106119d057fe5b60200260200101518282815181106119e457fe5b602090810291909101015260010161197c565b509096509450505050509091565b60065481565b61200081565b6001600160a01b03811660009081526004602052604081205480611a3957600091505061137a565b60001901610f4e8161137f565b6001600160a01b03811660009081526004602052604081205480611a6e57600091505061137a565b600180820381548110611a7d57fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b600f5481565b60128181548110611ab457fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815293509091830182828015611b455780601f10611b1a57610100808354040283529160200191611b45565b820191906000526020600020905b815481529060010190602001808311611b2857829003601f168201915b505050505081565b60105481565b60018181548110611b6057fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b606681565b3361200014611c045760405162461bcd60e51b8152600401610ce7906174d6565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051611c37939291906176db565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6001600160a01b03811660009081526004602052604081205480611c955760405162461bcd60e51b8152600401610ce79061745e565b6000190192915050565b600b54611d5d57611cae616496565b60015460005b81811015611d5957600b805460018101825560009190915283516000805160206178f083398151915260169092029182019081556020808601516000805160206179308339815191528401805460ff1916911515919091179055604086015180518794611d35936000805160206179108339815191529091019201906164c5565b506060820151611d4b906003830190601361653f565b505050806001019050611cb4565b5050505b600854611d6a5760036008555b600a54611d77576002600a555b6000611d8233611c5f565b9050611d8d816112b0565b611da95760405162461bcd60e51b8152600401610ce7906171b3565b611586338261495a565b600981565b61100781565b600381565b60c881565b61100681565b604051806101e001604052806101ab81526020016177256101ab913981565b60005460ff1681565b6402540be40081565b60005460ff16611e215760405162461bcd60e51b8152600401610ce790616d97565b3361100714611e425760405162461bcd60e51b8152600401610ce7906172aa565b611eac84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b602082015291506149f29050565b15611f495760208114611ed15760405162461bcd60e51b8152600401610ce790617418565b604080516020601f8401819004810282018101909252828152600091611f0f91858580838501838280828437600092019190915250614a4b92505050565b905060648110158015611f255750620186a08111155b611f415760405162461bcd60e51b8152600401610ce7906170a3565b60025561265a565b611fa984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b602082015291506149f29050565b156120385760208114611fce5760405162461bcd60e51b8152600401610ce790616c1d565b604080516020601f840181900481028201810190925282815260009161200c91858580838501838280828437600092019190915250614a4b92505050565b90506127108111156120305760405162461bcd60e51b8152600401610ce790616f35565b60065561265a565b6120a284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b602082015291506149f29050565b1561213c57602081146120c75760405162461bcd60e51b8152600401610ce790616c54565b604080516020601f840181900481028201810190925282815260009161210591858580838501838280828437600092019190915250614a4b92505050565b600c5490915080612114575060155b8082106121335760405162461bcd60e51b8152600401610ce790616fa8565b5060085561265a565b6121a584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b602082015291506149f29050565b1561223e57602081146121ca5760405162461bcd60e51b8152600401610ce790616d1d565b604080516020601f840181900481028201810190925282815260009161220891858580838501838280828437600092019190915250614a4b92505050565b905060008111801561221a5750600a81105b6122365760405162461bcd60e51b8152600401610ce7906175b6565b600a5561265a565b6122b284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e6469646174657300000000000000602082015291506149f29050565b1561234157602081146122d75760405162461bcd60e51b8152600401610ce790616cd1565b604080516020601f840181900481028201810190925282815260009161231591858580838501838280828437600092019190915250614a4b92505050565b9050600d548111156123395760405162461bcd60e51b8152600401610ce790617119565b600e5561265a565b6123aa84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b602082015291506149f29050565b1561242c57602081146123cf5760405162461bcd60e51b8152600401610ce7906172f8565b604080516020601f840181900481028201810190925282815260009161240d91858580838501838280828437600092019190915250614a4b92505050565b600d819055600e5490915081101561242657600d54600e555b5061265a565b61249084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b602082015291506149f29050565b1561253e57602081146124b55760405162461bcd60e51b8152600401610ce790616d62565b604080516020601f84018190048102820181019092528281526000916124f391858580838501838280828437600092019190915250614a4b92505050565b9050600081116125155760405162461bcd60e51b8152600401610ce790616e05565b60648111156125365760405162461bcd60e51b8152600401610ce790616e4d565b600c5561265a565b6125a684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601181527073797374656d526577617264526174696f60781b602082015291506149f29050565b1561264257602081146125cb5760405162461bcd60e51b8152600401610ce790617572565b604080516020601f840181900481028201810190925282815260009161260991858580838501838280828437600092019190915250614a4b92505050565b90506001811015801561261e57506127108111155b61263a5760405162461bcd60e51b8152600401610ce790617050565b600f5561265a565b60405162461bcd60e51b8152600401610ce790617613565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a8484848460405161268f9493929190616beb565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b828110156126eb576126d78161137f565b156126e3578160010191505b6001016126c6565b50606081604051908082528060200260200182016040528015612718578160200160208202803683370190505b5090506000915060005b8381101561279f576127338161137f565b15612797576001818154811061274557fe5b600091825260209091206004909102015482516001600160a01b039091169083908590811061277057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b600101612722565b50925050505b90565b601581565b61027181565b61100281565b60138181548110611ab457fe5b60006127d06126bc565b519050600080600c54116127e55760156127e9565b600c545b9050808211156127f7578091505b8161280157600191505b5090565b67016345785d8a000081565b60055481565b61100381565b60005460ff16156128405760405162461bcd60e51b8152600401610ce7906173aa565b61284861656c565b600061286e604051806101e001604052806101ab81526020016177256101ab9139613293565b915091508061288f5760405162461bcd60e51b8152600401610ce790617495565b60005b8260200151518110156129b4576001836020015182815181106128b157fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a09093015160039093019290925591860151805191850193918590811061298757fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101612892565b50506103e8600255506000805460ff19166001179055565b600d5481565b601354600090815b81811015612adb57612ac385858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601380549092508591508110612a2b57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015612ab95780601f10612a8e57610100808354040283529160200191612ab9565b820191906000526020600020905b815481529060010190602001808311612a9c57829003601f168201915b5050505050614a50565b15612ad35760019250505061142a565b6001016129da565b5060125460005b81811015612b4c57612b3386868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601280549092508591508110612a2b57fe5b15612b44576001935050505061142a565b600101612ae2565b50600095945050505050565b3361100114612b795760405162461bcd60e51b8152600401610ce79061763a565b600b54612c3757612b88616496565b60015460005b81811015612c3357600b805460018101825560009190915283516000805160206178f083398151915260169092029182019081556020808601516000805160206179308339815191528401805460ff1916911515919091179055604086015180518794612c0f936000805160206179108339815191529091019201906164c5565b506060820151612c25906003830190601361653f565b505050806001019050612b8e565b5050505b6000612c4282614ab4565b9050612c4d816112b0565b15612c5c57612c5c828261495a565b5050565b606581565b334114612c845760405162461bcd60e51b8152600401610ce790617525565b60005460ff16612ca65760405162461bcd60e51b8152600401610ce790616d97565b60003411612cc65760405162461bcd60e51b8152600401610ce7906170ea565b3a15612ce45760405162461bcd60e51b8152600401610ce79061727c565b6001600160a01b03811660009081526004602052604090205460145434919060ff16612d2457610271600f556103e86006556014805460ff191660011790555b6000612d4d612710612d41600f5486614c5790919063ffffffff16565b9063ffffffff614c9116565b90508015612dbd576040516110029082156108fc029083906000818181858888f19350505050158015612d84573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d81604051612db49190617692565b60405180910390a15b600083118015612dcf57506000600654115b15612e75576000612df1612710612d4160065487614c5790919063ffffffff16565b90508015612e735760405161dead9082156108fc029083906000818181858888f19350505050158015612e28573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee581604051612e589190617692565b60405180910390a1612e70848263ffffffff61427b16565b93505b505b612e85838263ffffffff61427b16565b92508115612f85576000600180840381548110612e9e57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615612f0b57846001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b485604051612efe9190617692565b60405180910390a2612f7f565b600354612f1e908563ffffffff6142bd16565b6003908155810154612f36908563ffffffff6142bd16565b60038201556040516001600160a01b038616907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc05590612f76908790617692565b60405180910390a25b50612fc7565b836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b484604051612fbe9190617692565b60405180910390a25b50505050565b600e5481565b61100081565b61dead81565b600b8181548110612fec57fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff909116949192918301828280156130975780601f1061306c57610100808354040283529160200191613097565b820191906000526020600020905b81548152906001019060200180831161307a57829003601f168201915b5050505050905083565b61100481565b6000600a54600014806130b8575081155b806130c35750600954155b156130d057506000610f4e565b6009600081546001900391905081905550600061311b600a54612d4185612d41600b89815481106130fd57fe5b6000918252602090912060169091020154439063ffffffff61427b16565b90506000600b858154811061312c57fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b15801561319157600080fd5b505afa1580156131a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c99190616924565b9150915060009350808310613243576131e287876142e2565b506040516305bfb49960e41b815261100190635bfb499090613208908a90600401616a61565b600060405180830381600087803b15801561322257600080fd5b505af1158015613236573d6000803e3d6000fd5b5050505060019350613255565b8183106132555761325387614ab4565b505b6040516001600160a01b038816907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050509392505050565b61329b61656c565b60006132a561656c565b6132ad616590565b6132be6132b986614cd3565b614cf8565b90506000805b6132cd83614d42565b1561344157806132f2576132e86132e384614d63565b614db1565b60ff168452613439565b806001141561343457606061330e61330985614d63565b614e31565b9050805160405190808252806020026020018201604052801561334b57816020015b6133386165b0565b8152602001906001900390816133305790505b508560200181905250805160405190808252806020026020018201604052801561338957816020015b60608152602001906001900390816133745790505b50604086015260005b8151811015613429576133a36165b0565b606060006133c38585815181106133b657fe5b6020026020010151614f02565b925092509250806133e3578860009a509a5050505050505050505061344a565b82896020015185815181106133f457fe5b6020026020010181905250818960400151858151811061341057fe5b6020026020010181905250505050806001019050613392565b506001925050613439565b613441565b6001016132c4565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b606081526020019060019003908161346957905050905061348f8363ffffffff1661501c565b8160008151811061349c57fe5b6020026020010181905250610f4e8161502f565b60006064835111156134e7576000805160206178d08339815191526040516134d790616eaa565b60405180910390a150606661142a565b60005b83518110156135855760005b8181101561357c5784818151811061350a57fe5b6020026020010151600001516001600160a01b031685838151811061352b57fe5b6020026020010151600001516001600160a01b03161415613574576000805160206178d083398151915260405161356190617005565b60405180910390a160669250505061142a565b6001016134f6565b506001016134ea565b5060608061359385856150b9565b60015491935091506000908190815b818110156136185767016345785d8a0000600182815481106135c057fe5b906000526020600020906004020160030154106135e257836001019350613610565b6000600182815481106135f157fe5b9060005260206000209060040201600301541115613610578260010192505b6001016135a2565b50606083604051908082528060200260200182016040528015613645578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015613674578160200160208202803683370190505b5090506060856040519080825280602002602001820160405280156136a3578160200160208202803683370190505b5090506060866040519080825280602002602001820160405280156136d2578160200160208202803683370190505b5090506000606087604051908082528060200260200182016040528015613703578160200160208202803683370190505b509050606088604051908082528060200260200182016040528015613732578160200160208202803683370190505b509050600099506000985060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561377a57600080fd5b505afa15801561378e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b2919061690c565b905067016345785d8a00008111156137fd576000805160206178d08339815191526040516137df90617369565b60405180910390a160689d505050505050505050505050505061142a565b60005b89811015613a6e5767016345785d8a00006001828154811061381e57fe5b906000526020600020906004020160030154106139a3576001818154811061384257fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898d8151811061387357fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be400600183815481106138a857fe5b906000526020600020906004020160030154816138c157fe5b06600183815481106138cf57fe5b9060005260206000209060040201600301540390506138f7838261427b90919063ffffffff16565b898e8151811061390357fe5b6020026020010181815250506001828154811061391c57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878e8151811061394d57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888e8151811061397a57fe5b6020908102919091010152613995868263ffffffff6142bd16565b95508c6001019c5050613a66565b6000600182815481106139b257fe5b9060005260206000209060040201600301541115613a6657600181815481106139d757fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848c81518110613a0857fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060018181548110613a3557fe5b906000526020600020906004020160030154838c81518110613a5357fe5b6020026020010181815250508a6001019a505b600101613800565b5060008415613ce4576002546040516303702b2960e51b815261100491636e056520918891613aa8918e918e918d91420190600401616b53565b6020604051808303818588803b158015613ac157600080fd5b505af193505050508015613af2575060408051601f3d908101601f19168201909252613aef91810190616839565b60015b613c69576040516000815260443d1015613b0e57506000613ba9565b60046000803e60005160e01c6308c379a08114613b2f576000915050613ba9565b60043d036004833e81513d60248201116001600160401b0382111715613b5a57600092505050613ba9565b80830180516001600160401b03811115613b7b576000945050505050613ba9565b8060208301013d8601811115613b9957600095505050505050613ba9565b601f01601f191660405250925050505b80613bb45750613bf6565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051613be89190616bd8565b60405180910390a250613c64565b3d808015613c20576040519150601f19603f3d011682016040523d82523d6000602084013e613c25565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051613c5a9190616bd8565b60405180910390a2505b613ce4565b8015613cab577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051613c9e9190617692565b60405180910390a1613ce2565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051613cd990616c9a565b60405180910390a25b505b8015613e9a5760005b8751811015613e98576000888281518110613d0457fe5b60200260200101519050600060018281548110613d1d57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc9185908110613d4e57fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f1935050505090508015613e0a5760018281548110613d8f57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d9185908110613dde57fe5b906000526020600020906004020160030154604051613dfd9190617692565b60405180910390a2613e8e565b60018281548110613e1757fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d9185908110613e6657fe5b906000526020600020906004020160030154604051613e859190617692565b60405180910390a25b5050600101613ced565b505b835115613fe45760005b8451811015613fe2576000858281518110613ebb57fe5b60200260200101516001600160a01b03166108fc868481518110613edb57fe5b60200260200101519081150290604051600060405180830381858888f1935050505090508015613f7157858281518110613f1157fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d868481518110613f4f57fe5b6020026020010151604051613f649190617692565b60405180910390a2613fd9565b858281518110613f7d57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d868481518110613fbb57fe5b6020026020010151604051613fd09190617692565b60405180910390a25b50600101613ea4565b505b5050505050505050505050506000471115614060577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d476040516140289190617692565b60405180910390a1604051611002904780156108fc02916000818181858888f1935050505015801561405e573d6000803e3d6000fd5b505b6000600381905560055581511561407b5761407b82826152f2565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156140b857600080fd5b505af11580156140cc573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b80516001600160a01b0316600090815260046020526040812054801580614155575060018082038154811061413557fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b1561419b5782516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a2600091505061137a565b6001546005546000198201118015906141f15784516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000935050505061137a565b60058054600190810190915580548190600019860190811061420f57fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915585516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a2506000949350505050565b6000610f4e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615aac565b600082820183811015610f4e5760405162461bcd60e51b8152600401610ce790616dce565b600080600183815481106142f257fe5b9060005260206000209060040201600301549050600060018080549050039050600161431c6126bc565b51116143515760006001858154811061433157fe5b90600052602060002090600402016003018190555060009250505061142a565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a708360405161438a9190617692565b60405180910390a26001600160a01b038516600090815260046020526040812055835b6001546000190181101561457757600181600101815481106143cb57fe5b9060005260206000209060040201600182815481106143e657fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b8054909183019081106144a757fe5b9060005260206000209060160201600b82815481106144c257fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff19909216919091179055600280840180546145199383860193908216156101000260001901909116046165e5565b5061452c6003828101908401601361665a565b5090505080600101600460006001848154811061454557fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020556001016143ad565b50600180548061458357fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b8054806145d657fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906146086002830182616684565b6146166003830160006166c8565b50509055600081838161462557fe5b04905080156146895760015460005b8181101561468657826001828154811061464a57fe5b906000526020600020906004020160030154016001828154811061466a57fe5b6000918252602090912060036004909202010155600101614634565b50505b50600195945050505050565b6001548151604080518281526020808402820101909152606092919083908280156146d457816020015b60608152602001906001900390816146bf5790505b50600b5490915083146146eb57925061137a915050565b60005b828110156147fa57600b60016004600089858151811061470a57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054038154811061473e57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156147d65780601f106147ab576101008083540402835291602001916147d6565b820191906000526020600020905b8154815290600101906020018083116147b957829003601f168201915b50505050508282815181106147e757fe5b60209081029190910101526001016146ee565b50949350505050565b60005b828110156149505760008287838801604051602001614826929190616a53565b6040516020818303038152906040528051906020012060001c8161484657fe5b06905080850182870114614947576000898388018151811061486457fe5b602002602001015190506060898489018151811061487e57fe5b602002602001015190508a8388018151811061489657fe5b60200260200101518b858a01815181106148ac57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b848901815181106148db57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050898388018151811061490957fe5b60200260200101518a858a018151811061491f57fe5b6020026020010181905250808a8489018151811061493957fe5b602002602001018190525050505b50600101614806565b5050505050505050565b600980546001908101909155600b80548390811061497457fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b82815481106149aa57fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b600081604051602001614a059190616a37565b6040516020818303038152906040528051906020012083604051602001614a2c9190616a37565b6040516020818303038152906040528051906020012014905092915050565b015190565b815181516000916001918114808314614a6c5760009250614aaa565b600160208701838101602088015b600284838510011415614aa5578051835114614a995760009650600093505b60209283019201614a7a565b505050505b5090949350505050565b6001600160a01b03811660009081526004602052604081205480614add5750600019905061137a565b600181039050600060018281548110614af257fe5b9060005260206000209060040201600301549050600060018381548110614b1557fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d90614b6e908590617692565b60405180910390a280614b865782935050505061137a565b6000818381614b9157fe5b0490508015614c4d5760005b84811015614bef578160018281548110614bb357fe5b9060005260206000209060040201600301540160018281548110614bd357fe5b6000918252602090912060036004909202010155600101614b9d565b50600180549085015b81811015614c4a578260018281548110614c0e57fe5b9060005260206000209060040201600301540160018281548110614c2e57fe5b6000918252602090912060036004909202010155600101614bf8565b50505b5091949350505050565b600082614c665750600061142a565b82820282848281614c7357fe5b0414610f4e5760405162461bcd60e51b8152600401610ce79061723b565b6000610f4e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615ad8565b614cdb6166d7565b506040805180820190915281518152602082810190820152919050565b614d00616590565b614d0982615b0f565b614d1257600080fd5b6000614d218360200151615b49565b60208085015160408051808201909152868152920190820152915050919050565b6000614d4c6166d7565b505080518051602091820151919092015191011190565b614d6b6166d7565b614d7482614d42565b614d7d57600080fd5b60208201516000614d8d82615bac565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590614dc657508151602110155b614dcf57600080fd5b6000614dde8360200151615b49565b90508083600001511015614e045760405162461bcd60e51b8152600401610ce7906173e1565b8251602080850151830180519284900392918310156147fa57506020919091036101000a90049392505050565b6060614e3c82615b0f565b614e4557600080fd5b6000614e5083615c8d565b9050606081604051908082528060200260200182016040528015614e8e57816020015b614e7b6166d7565b815260200190600190039081614e735790505b5090506000614ea08560200151615b49565b60208601510190506000805b84811015614ef757614ebd83615bac565b9150604051806040016040528083815260200184815250848281518110614ee057fe5b602090810291909101015291810191600101614eac565b509195945050505050565b614f0a6165b0565b60606000614f166165b0565b6060614f20616590565b614f2987614cf8565b90506000805b614f3883614d42565b1561500d5780614f6357614f53614f4e84614d63565b615ce9565b6001600160a01b03168552615005565b8060011415614f8b57614f78614f4e84614d63565b6001600160a01b03166020860152615005565b8060021415614fb357614fa0614f4e84614d63565b6001600160a01b03166040860152615005565b8060031415614fdf57614fc86132e384614d63565b6001600160401b0316606086015260019150615005565b806004141561500057614ff9614ff484614d63565b615d03565b9350615005565b61500d565b600101614f2f565b50929791965091945092505050565b606061142a61502a83615d73565b615e59565b6060815160001415615050575060408051600081526020810190915261137a565b60608260008151811061505f57fe5b602002602001015190506000600190505b83518110156150a0576150968285838151811061508957fe5b6020026020010151615eab565b9150600101615070565b50610f4e6150b3825160c060ff16615f28565b82615eab565b6060806000808080806150ca6127c6565b6001549091505b80156151d857600181039250600b83815481106150ea57fe5b600091825260209091206001601690920201015460ff1661510a576151cf565b6001838154811061511757fe5b60009182526020909120600490910201546001600160a01b0316945061513e8584846130a7565b9350831580615151575060018a51038610155b1561515b576151cf565b60005b8a518110156151cd57856001600160a01b03168b828151811061517d57fe5b6020026020010151600001516001600160a01b031614156151c55760018b82815181106151a657fe5b60209081029190910101519015156080909101526001909601956151cd565b60010161515e565b505b600019016150d1565b508489510360405190808252806020026020018201604052801561521657816020015b6152036165b0565b8152602001906001900390816151fb5790505b5096508489510360405190808252806020026020018201604052801561525057816020015b606081526020019060019003908161523b5790505b5095506000915060005b89518110156152e45789818151811061526f57fe5b6020026020010151608001516152dc5789818151811061528b57fe5b602002602001015188848151811061529f57fe5b60200260200101819052508881815181106152b657fe5b60200260200101518784815181106152ca57fe5b60200260200101819052508260010192505b60010161525a565b5050505050505b9250929050565b600154825160005b8281101561540f57600161530c6165b0565b6001838154811061531957fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156153e3578781815181106153a957fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b031614156153db57600092506153e3565b600101615395565b5081156154055780516001600160a01b03166000908152600460205260408120555b50506001016152fa565b50808211156154ce57805b828110156154cc57600180548061542d57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061548057fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906154b26002830182616684565b6154c06003830160006166c8565b5050905560010161541a565b505b60008183106154dd57816154df565b825b905060005b8181101561584e576155918682815181106154fb57fe5b60200260200101516001838154811061551057fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152615ffa565b6157455780600101600460008884815181106155a957fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055508581815181106155e557fe5b6020026020010151600182815481106155fa57fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015584518590829081106156b557fe5b6020026020010151600b82815481106156ca57fe5b906000526020600020906016020160020190805190602001906156ee9291906164c5565b506000600b82815481106156fe57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b80548390811061572f57fe5b6000918252602090912060169091020155615846565b6157d685828151811061575457fe5b6020026020010151600b838154811061576957fe5b600091825260209182902060026016909202018101805460408051601f600019610100600186161502019093169490940491820185900485028401850190528083529192909190830182828015612ab95780601f10612a8e57610100808354040283529160200191612ab9565b615821578481815181106157e657fe5b6020026020010151600b82815481106157fb57fe5b9060005260206000209060160201600201908051906020019061581f9291906164c5565b505b60006001828154811061583057fe5b9060005260206000209060040201600301819055505b6001016154e4565b5082821115615a265761585f616496565b835b83811015615a235785818151811061587557fe5b60200260200101518260400181905250600187828151811061589357fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b80549283018155909352845160169091026000805160206178f08339815191528101918255858301516000805160206179308339815191528201805491151560ff19909216919091179055928501518051869492936159c993600080516020617910833981519152019201906164c5565b5060608201516159df906003830190601361653f565b50505080600101600460008984815181106159f657fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101615861565b50505b615a2e61607b565b615a3661625d565b6000600981905560015493505b83811015615aa4576000600b8281548110615a5a57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b805483908110615a8b57fe5b6000918252602090912060169091020155600101615a43565b505050505050565b60008184841115615ad05760405162461bcd60e51b8152600401610ce79190616bd8565b505050900390565b60008183615af95760405162461bcd60e51b8152600401610ce79190616bd8565b506000838581615b0557fe5b0495945050505050565b8051600090615b205750600061137a565b6020820151805160001a9060c0821015615b3f5760009250505061137a565b5060019392505050565b8051600090811a6080811015615b6357600091505061137a565b60b8811080615b7e575060c08110801590615b7e575060f881105b15615b8d57600191505061137a565b60c0811015615ba15760b51901905061137a565b60f51901905061137a565b80516000908190811a6080811015615bc75760019150615c86565b60b8811015615bdc57607e1981019150615c86565b60c0811015615c2d57600060b78203600186019550806020036101000a865104915060018101820193505080831015615c275760405162461bcd60e51b8152600401610ce790617188565b50615c86565b60f8811015615c425760be1981019150615c86565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615c845760405162461bcd60e51b8152600401610ce790617188565b505b5092915050565b8051600090615c9e5750600061137a565b60008090506000615cb28460200151615b49565b602085015185519181019250015b80821015615ce057615cd182615bac565b82019150826001019250615cc0565b50909392505050565b8051600090601514615cfa57600080fd5b61142a82614db1565b8051606090615d1157600080fd5b6000615d208360200151615b49565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015615d57576020820181803683370190505b50905060008160200190506147fa84876020015101828561644b565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416615db757506018615ddb565b6fffffffffffffffffffffffffffffffff198416615dd757506010615ddb565b5060005b6020811015615e1157818181518110615df057fe5b01602001516001600160f81b03191615615e0957615e11565b600101615ddb565b60008160200390506060816040519080825280601f01601f191660200182016040528015615e46576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015615e8b5750607f60f81b82600081518110615e7957fe5b01602001516001600160f81b03191611155b15615e9757508061137a565b61142a615ea98351608060ff16615f28565b835b6060806040519050835180825260208201818101602087015b81831015615edc578051835260209283019201615ec4565b50855184518101855292509050808201602086015b81831015615f09578051835260209283019201615ef1565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310615f525760405162461bcd60e51b8152600401610ce790616f80565b60408051600180825281830190925260609160208201818036833701905050905060378411615fac5782840160f81b81600081518110615f8e57fe5b60200101906001600160f81b031916908160001a905350905061142a565b6060615fb785615d73565b90508381510160370160f81b82600081518110615fd057fe5b60200101906001600160f81b031916908160001a905350615ff18282615eab565b95945050505050565b805182516000916001600160a01b039182169116148015616034575081602001516001600160a01b031683602001516001600160a01b0316145b8015616059575081604001516001600160a01b031683604001516001600160a01b0316145b8015610f4e5750506060908101519101516001600160401b0390811691161490565b601254601354808211156160c657805b828110156160c457601280548061609e57fe5b6001900381819060005260206000200160006160ba9190616684565b905560010161608b565b505b60008183106160d557816160d7565b825b905060005b818110156161ef57616194601282815481106160f457fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156161825780601f1061615757610100808354040283529160200191616182565b820191906000526020600020905b81548152906001019060200180831161616557829003601f168201915b505050505060138381548110612a2b57fe5b6161e757601381815481106161a557fe5b90600052602060002001601282815481106161bc57fe5b9060005260206000200190805460018160011615610100020316600290046161e59291906165e5565b505b6001016160dc565b5082821115610d0757825b82811015612fc75760126013828154811061621157fe5b60009182526020808320845460018181018755958552919093209290910180546162549493909201929091600261010092821615929092026000190116046165e5565b506001016161fa565b601354600b54808211156162a857805b828110156162a657601380548061628057fe5b60019003818190600052602060002001600061629c9190616684565b905560010161626d565b505b60008183106162b757816162b9565b825b905060005b818110156163d857616376601382815481106162d657fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156163645780601f1061633957610100808354040283529160200191616364565b820191906000526020600020905b81548152906001019060200180831161634757829003601f168201915b5050505050600b838154811061576957fe5b6163d057600b818154811061638757fe5b9060005260206000209060160201600201601382815481106163a557fe5b9060005260206000200190805460018160011615610100020316600290046163ce9291906165e5565b505b6001016162be565b5082821115610d0757825b82811015612fc7576013600b82815481106163fa57fe5b600091825260208083208454600180820187559585529190932060169290920290920160029081018054616442959390940193909260001990821615610100020116046165e5565b506001016163e3565b8061645557610d07565b5b60208110616475578251825260209283019290910190601f1901616456565b915181516020939093036101000a6000190180199091169216919091179052565b604051806080016040528060008152602001600015158152602001606081526020016164c06166f1565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061650657805160ff1916838001178555616533565b82800160010185558215616533579182015b82811115616533578251825591602001919060010190616518565b50612801929150616710565b82601381019282156165335791602002820182811115616533578251825591602001919060010190616518565b6040518060600160405280600060ff16815260200160608152602001606081525090565b60405180604001604052806165a36166d7565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061661e5780548555616533565b8280016001018555821561653357600052602060002091601f016020900482015b8281111561653357825482559160010191906001019061663f565b8260138101928215616533579182018281111561653357825482559160010191906001019061663f565b50805460018160011615610100020316600290046000825580601f106166aa5750611586565b601f0160209004906000526020600020908101906115869190616710565b50611586906013810190616710565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b6127a591905b808211156128015760008155600101616716565b60008083601f84011261673b578182fd5b5081356001600160401b03811115616751578182fd5b60208301915083602080830285010111156152eb57600080fd5b60008083601f84011261677c578182fd5b5081356001600160401b03811115616792578182fd5b6020830191508360208285010111156152eb57600080fd5b6000602082840312156167bb578081fd5b81356001600160a01b0381168114610f4e578182fd5b600080600080604085870312156167e6578283fd5b84356001600160401b03808211156167fc578485fd5b6168088883890161672a565b90965094506020870135915080821115616820578384fd5b5061682d8782880161672a565b95989497509550505050565b60006020828403121561684a578081fd5b81518015158114610f4e578182fd5b6000806020838503121561686b578182fd5b82356001600160401b03811115616880578283fd5b61688c8582860161676b565b90969095509350505050565b600080600080604085870312156168ad578384fd5b84356001600160401b03808211156168c3578586fd5b6168cf8883890161676b565b909650945060208701359150808211156168e7578384fd5b5061682d8782880161676b565b600060208284031215616905578081fd5b5035919050565b60006020828403121561691d578081fd5b5051919050565b60008060408385031215616936578182fd5b505080516020909101519092909150565b60008060006040848603121561695b578283fd5b833560ff8116811461696b578384fd5b925060208401356001600160401b03811115616985578283fd5b6169918682870161676b565b9497909650939450505050565b6000815180845260208085019450808401835b838110156169d65781516001600160a01b0316875295820195908201906001016169b1565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452616a238160208601602086016176f8565b601f01601f19169290920160200192915050565b60008251616a498184602087016176f8565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b600060208252610f4e602083018461699e565b600060408252616af6604083018561699e565b602083820381850152818551808452828401915082838202850101838801865b83811015616b4457601f19878403018552616b32838351616a0b565b94860194925090850190600101616b16565b50909998505050505050505050565b600060808252616b66608083018761699e565b828103602084810191909152865180835287820192820190845b81811015616b9c57845183529383019391830191600101616b80565b50508481036040860152616bb0818861699e565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b600060208252610f4e6020830184616a0b565b600060408252616bff6040830186886169e1565b8281036020840152616c128185876169e1565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252602b908201527f746865206275726e526174696f206d757374206265206e6f206772656174657260408201526a0207468616e2031303030360ac1b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526033908201527f7468652073797374656d526577617264526174696f206d757374206265206e6f60408201527202067726561746572207468616e20313030303606c1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526024908201527f6c656e677468206f662073797374656d526577617264526174696f206d69736d6040820152630c2e8c6d60e31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b61ffff91909116815260200190565b90815260200190565b6000848252831515602083015260606040830152615ff16060830184616a0b565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff8516825260406020830152615ff16040830184866169e1565b60005b838110156177135781810151838201526020016176fb565b83811115612fc7575050600091015256fef901a880f901a4f844941284214b9b9c85549ab3d2b972df0deef66ac2c9946ddf42a51534fc98d0c0a3b42c963cace8441ddf946ddf42a51534fc98d0c0a3b42c963cace8441ddf8410000000f84494a2959d3f95eae5dc7d70144ce1b73b403b7eb6e0948081ef03f1d9e0bb4a5bf38f16285c879299f07f948081ef03f1d9e0bb4a5bf38f16285c879299f07f8410000000f8449435552c16704d214347f29fa77f77da6d75d7c75294dc4973e838e3949c77aced16ac2315dc2d7ab11194dc4973e838e3949c77aced16ac2315dc2d7ab1118410000000f84494980a75ecd1309ea12fa2ed87a8744fbfc9b863d594cc6ac05c95a99c1f7b5f88de0e3486c82293b27094cc6ac05c95a99c1f7b5f88de0e3486c82293b2708410000000f84494f474cf03cceff28abc65c9cbae594f725c80e12d94e61a183325a18a173319dd8e19c8d069459e217594e61a183325a18a173319dd8e19c8d069459e21758410000000f84494b71b214cb885500844365e95cd9942c7276e7fd894d22ca3ba2141d23adab65ce4940eb7665ea2b6a794d22ca3ba2141d23adab65ce4940eb7665ea2b6a7841000000070e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb20175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbb0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaa164736f6c6343000604000a", + }, + { + ContractAddr: common.HexToAddress(SlashContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + Code: "608060405234801561001057600080fd5b50600436106102955760003560e01c80638256ace611610167578063c81b1662116100ce578063e1c7392a11610087578063e1c7392a146104d3578063eb57bff7146104db578063f9a2bbc7146104e3578063fc3e5908146104eb578063fc4333cd146104f3578063fd6a6879146104fb57610295565b8063c81b166214610482578063c8509d811461048a578063c96be4cb1461049d578063cc844b73146104b0578063d2a42e4b146104c3578063dc927faf146104cb57610295565b8063a78abc1611610120578063a78abc1614610447578063ab51bb961461044f578063ac0af62914610457578063ac4317511461045f578063ae61dc3b14610472578063c80d4b8f1461047a57610295565b80638256ace61461040c578063831d65d11461041457806396713da9146104275780639bc8e4f21461042f5780639dc0926214610437578063a1a11bf51461043f57610295565b8063493279b11161020b5780636e47b482116101c45780636e47b482146103dc57806370fd5bad146103e4578063718a8aa8146103ec57806375d47a0a146103f45780637912a65d146103fc5780637942fd051461040457610295565b8063493279b1146103925780634bf6c882146103a757806351e80672146103af578063567a372d146103b75780635bfb4990146103bf57806362b72cf5146103d457610295565b806335aa2e441161025d57806335aa2e441461032457806337c8dab914610337578063389f4f71146103585780633a63f4b11461036d5780633dffc3871461037557806343756e5c1461038a57610295565b80630bee7a671461029a5780630e2374a5146102b85780631182b875146102cd57806322d1e80b146102ed57806323bac5a214610302575b600080fd5b6102a2610503565b6040516102af9190613550565b60405180910390f35b6102c0610508565b6040516102af9190612d6c565b6102e06102db366004612ca2565b61050e565b6040516102af9190612da4565b6102f5610574565b6040516102af9190612d99565b610315610310366004612a50565b61057d565b6040516102af93929190613538565b6102c0610332366004612c72565b6105a0565b61034a610345366004612a50565b6105c7565b6040516102af92919061352a565b61036061061e565b6040516102af9190613500565b610360610624565b61037d61062a565b6040516102af9190613561565b6102c061062f565b61039a610635565b6040516102af91906134f1565b61037d61063b565b6102c0610640565b610360610646565b6103d26103cd366004612a50565b61064c565b005b6103606106f7565b6102c06106fd565b61037d610703565b61037d610708565b6102c061070d565b610360610713565b61037d610718565b61034a61071d565b6103d2610422366004612ca2565b610727565b61037d610839565b61036061083e565b6102c0610849565b6102c061084f565b6102f5610855565b6102a261085e565b610360610863565b6103d261046d366004612b56565b610868565b610360610e18565b610360610e1f565b6102c0610e24565b6103d2610498366004612ca2565b610e2a565b6103d26104ab366004612a50565b610e9b565b6103d26104be366004612bbf565b61128c565b61036061187d565b6102c0611882565b6103d2611888565b6103606118c4565b6102c06118ca565b61037d6118d0565b6103d26118d5565b6102c0611d1e565b606481565b61200181565b6060336120001461053a5760405162461bcd60e51b815260040161053190613349565b60405180910390fd5b60005460ff1661055c5760405162461bcd60e51b815260040161053190612e9f565b60405162461bcd60e51b81526004016105319061343a565b60075460ff1681565b600260208190526000918252604090912080546001820154919092015460ff1683565b600181815481106105ad57fe5b6000918252602090912001546001600160a01b0316905081565b6000806105d2612837565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b60065481565b600181565b61100181565b6102ca81565b600881565b61200081565b60045481565b336110001461066d5760405162461bcd60e51b81526004016105319061312e565b60005460ff1661068f5760405162461bcd60e51b815260040161053190612e9f565b61200063f7a251d7600b6106a284611d24565b60006040518463ffffffff1660e01b81526004016106c29392919061356f565b600060405180830381600087803b1580156106dc57600080fd5b505af11580156106f0573d6000803e3d6000fd5b5050505050565b60035481565b61100581565b600281565b601081565b61100881565b603281565b600b81565b6004546005549091565b33612000146107485760405162461bcd60e51b815260040161053190613349565b60005460ff1661076a5760405162461bcd60e51b815260040161053190612e9f565b61077261285a565b60006107b384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611df792505050565b9150915080156107fa5781516040517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e629967916107ed91613550565b60405180910390a16106f0565b81516040517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e79161082a91613550565b60405180910390a15050505050565b600981565b662386f26fc1000081565b61100781565b61100681565b60005460ff1681565b600081565b600481565b60005460ff1661088a5760405162461bcd60e51b815260040161053190612e9f565b33611007146108ab5760405162461bcd60e51b815260040161053190613206565b61091684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b60208201529150611e779050565b156109b1576020811461093b5760405162461bcd60e51b8152600401610531906130ba565b604080516020601f840181900481028201810190925282815260009161097991858580838501838280828437600092019190915250611ed192505050565b90506001811015801561098d575060055481105b6109a95760405162461bcd60e51b815260040161053190613304565b600455610dd5565b610a1784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b60208201529150611e779050565b15610ab35760208114610a3c5760405162461bcd60e51b815260040161053190613254565b604080516020601f8401819004810282018101909252828152600091610a7a91858580838501838280828437600092019190915250611ed192505050565b90506103e88111158015610a8f575060045481115b610aab5760405162461bcd60e51b815260040161053190612f58565b600555610dd5565b610b2784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f66696e616c697479536c617368526577617264526174696f000000000000000060208201529150611e779050565b15610bc15760208114610b4c5760405162461bcd60e51b815260040161053190613471565b604080516020601f8401819004810282018101909252828152600091610b8a91858580838501838280828437600092019190915250611ed192505050565b9050600a8110158015610b9d5750606481105b610bb95760405162461bcd60e51b81526004016105319061306e565b600655610dd5565b610c3584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f656e61626c654d616c6963696f7573566f7465536c617368000000000000000060208201529150611e779050565b15610cac5760208114610c5a5760405162461bcd60e51b815260040161053190612f8d565b604080516020601f8401819004810282018101909252828152610c969190848480838501838280828437600092019190915250611ed692505050565b6007805460ff1916911515919091179055610dd5565b610d2084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601781527f6d616c6963696f7573566f7465536c61736853636f706500000000000000000060208201529150611e779050565b15610dbd5760208114610d455760405162461bcd60e51b815260040161053190612de9565b604080516020601f8401819004810282018101909252828152600091610d8391858580838501838280828437600092019190915250611ed192505050565b90506170808110158015610d995750620d2f0081105b610db55760405162461bcd60e51b815260040161053190612ed6565b600855610dd5565b60405162461bcd60e51b8152600401610531906133e5565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a84848484604051610e0a9493929190612db7565b60405180910390a150505050565b6201518081565b609681565b61100281565b3361200014610e4b5760405162461bcd60e51b815260040161053190613349565b60005460ff16610e6d5760405162461bcd60e51b815260040161053190612e9f565b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b334114610eba5760405162461bcd60e51b815260040161053190613398565b60005460ff16610edc5760405162461bcd60e51b815260040161053190612e9f565b6003544311610efd5760405162461bcd60e51b8152600401610531906134bc565b3a15610f1b5760405162461bcd60e51b8152600401610531906131a9565b60405163155853f360e21b8152611000906355614fcc90610f40908490600401612d6c565b60206040518083038186803b158015610f5857600080fd5b505afa158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f909190612b36565b610f9957611285565b610fa1612837565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff161580159282019290925290610ffc576020810180516001019052611055565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b43815260055460208201518161106757fe5b066111b357600060208201526040516335409f7f60e01b8152611000906335409f7f90611098908590600401612d6c565b600060405180830381600087803b1580156110b257600080fd5b505af11580156110c6573d6000803e3d6000fd5b505050506120006001600160a01b031663f7a251d7600b6110e685611d24565b60006040518463ffffffff1660e01b81526004016111069392919061356f565b600060405180830381600087803b15801561112057600080fd5b505af1925050508015611131575060015b6111ae573d80801561115f576040519150601f19603f3d011682016040523d82523d6000602084013e611164565b606091505b50826001600160a01b03167fd7bc86ff5d08c8ab043edec743302aba2520e6635172a428bc956721db9e2d1c8360200151836040516111a4929190613509565b60405180910390a2505b61121f565b6004548160200151816111c257fe5b0661121f576040516375abf10160e11b81526110009063eb57e202906111ec908590600401612d6c565b600060405180830381600087803b15801561120657600080fd5b505af115801561121a573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505b5043600355565b60005460ff166112ae5760405162461bcd60e51b815260040161053190612e9f565b604051630a83aaa960e31b81526110069063541d5548906112d3903390600401612d6c565b60206040518083038186803b1580156112eb57600080fd5b505afa1580156112ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113239190612b36565b61133f5760405162461bcd60e51b815260040161053190612e33565b60075460ff166113615760405162461bcd60e51b815260040161053190612e6a565b60065461136e5760146006555b60085461137d57620151806008555b6008548151604001514391011180156113a157504360085482602001516040015101115b6113bd5760405162461bcd60e51b81526004016105319061340c565b8060200151602001518160000151602001511480156113eb5750806020015160600151816000015160600151145b156114085760405162461bcd60e51b815260040161053190613101565b8051604081015190511080156114275750602081015160408101519051105b6114435760405162461bcd60e51b815260040161053190613037565b6020810151518151511080156114685750806000015160400151816020015160400151105b8061149357508051516020820151511080156114935750806020015160400151816000015160400151105b806114ad5750806020015160400151816000015160400151145b6114c95760405162461bcd60e51b815260040161053190612f21565b604080820151905163ea321e4960e01b81526110009163ea321e49916114f29190600401612da4565b60206040518083038186803b15801561150a57600080fd5b505afa15801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190612b36565b61155e5760405162461bcd60e51b8152600401610531906131d7565b61157081600001518260400151611efe565b8015611589575061158981602001518260400151611efe565b6115a55760405162461bcd60e51b815260040161053190612fd8565b6060806110006001600160a01b0316633b071dcc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156115e357600080fd5b505afa1580156115f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261161f9190810190612a73565b9150915060005b815181101561175a5761165082828151811061163e57fe5b602002602001015185604001516120d6565b15611752576006546040516213929d60e11b8152606461100280319093020491906227253a906116869033908590600401612d80565b602060405180830381600087803b1580156116a057600080fd5b505af11580156116b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d89190612c8a565b506110006001600160a01b03166335409f7f8584815181106116f657fe5b60200260200101516040518263ffffffff1660e01b815260040161171a9190612d6c565b600060405180830381600087803b15801561173457600080fd5b505af1158015611748573d6000803e3d6000fd5b505050505061175a565b600101611626565b50600061176c8460400151600061213a565b90506120006001600160a01b031663f7a251d7600b61178e8760400151612156565b60006040518463ffffffff1660e01b81526004016117ae9392919061356f565b600060405180830381600087803b1580156117c857600080fd5b505af19250505080156117d9575060015b61184b573d808015611807576040519150601f19603f3d011682016040523d82523d6000602084013e61180c565b606091505b50817fd58d1183100bd0932c0588f31c4205d6bc6168909765a96c41adbed3115f36288260405161183d9190612da4565b60405180910390a250611877565b60405181907f7b78aadacff901d8b63d0dba4f86283d4db8aef27f9ed70413dd860f1c9532b690600090a25b50505050565b601481565b61100381565b60005460ff16156118ab5760405162461bcd60e51b815260040161053190613296565b603260045560966005556000805460ff19166001179055565b60085481565b61100081565b600381565b33611000146118f65760405162461bcd60e51b81526004016105319061312e565b60005460ff166119185760405162461bcd60e51b815260040161053190612e9f565b60015461192457611d1c565b600154600090600019015b808211611cf0576000805b82841015611a535761194a612837565b600260006001878154811061195b57fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611a3d576004600554816119c857fe5b048160200151038160200181815250508060026000600188815481106119ea57fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611a47565b6001925050611a53565b5083600101935061193a565b828411611bea57611a62612837565b6002600060018681548110611a7357fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611b5b57600460055481611ae057fe5b04816020015103816020018181525050806002600060018781548110611b0257fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff19169115159190911790559150611bea9050565b6002600060018681548110611b6c57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805480611bb057fe5b600082815260209020810160001990810180546001600160a01b031916905501905583611bdd5750611bea565b5060001990920191611a53565b818015611bf45750805b15611cd3576002600060018681548110611c0a57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805484908110611c5157fe5b600091825260209091200154600180546001600160a01b039092169186908110611c7757fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001805480611cb057fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b82611cdf575050611cf0565b50506001909101906000190161192f565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081611d3f579050509050611d68836001600160a01b0316612191565b81600081518110611d7557fe5b6020026020010181905250611d89436121b4565b81600181518110611d9657fe5b6020908102919091010152611dac6102ca6121b4565b81600281518110611db957fe5b6020026020010181905250611dcd426121b4565b81600381518110611dda57fe5b6020026020010181905250611dee816121c7565b9150505b919050565b611dff61285a565b6000611e0961285a565b611e1161286c565b611e22611e1d86612251565b612276565b90506000805b611e31836122c0565b15611e6a5780611e5d57611e4c611e47846122e1565b61232f565b63ffffffff16845260019150611e62565b611e6a565b600101611e28565b5091935090915050915091565b600081604051602001611e8a9190612d50565b6040516020818303038152906040528051906020012083604051602001611eb19190612d50565b604051602081830303815290604052805190602001201490505b92915050565b015190565b8082015160009060ff811615611ef0576001915081611ef6565b60009150815b505092915050565b60408051600480825260a0820190925260009160609190816020015b6060815260200190600190039081611f1a575050604080516020808252818301909252919250606091908082018180368337019050509050611f5f85600001516121b4565b82600081518110611f6c57fe5b6020026020010181905250611f8760208660200151836123b1565b611f90816123c1565b82600181518110611f9d57fe5b6020026020010181905250611fb585604001516121b4565b82600281518110611fc257fe5b6020026020010181905250611fdd60208660600151836123b1565b611fe6816123c1565b82600381518110611ff357fe5b6020026020010181905250612019602061200c846121c7565b80519060200120836123b1565b6040805160b080825260e08201909252606091602082018180368337019050509050612049818360006020612417565b61205b81876080015160206060612417565b612069818660806030612417565b604080516001808252818301909252606091602082018180368337019050509050815160016020830182602086016066600019fa6120a657600080fd5b5060016120b482600061246a565b60ff16146120c9576000945050505050611ecb565b5060019695505050505050565b8151815160009160019181148083146120f25760009250612130565b600160208701838101602088015b60028483851001141561212b57805183511461211f5760009650600093505b60209283019201612100565b505050505b5090949350505050565b6000816020018351101561214d57600080fd5b50016020015190565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081612171579050509050611d68836123c1565b60408051600560a21b8318601482015260348101909152606090611dee816123c1565b6060611ecb6121c283612486565b6123c1565b60608151600014156121e85750604080516000815260208101909152611df2565b6060826000815181106121f757fe5b602002602001015190506000600190505b83518110156122385761222e8285838151811061222157fe5b602002602001015161256c565b9150600101612208565b50611dee61224b825160c060ff166125e9565b8261256c565b61225961288c565b506040805180820190915281518152602082810190820152919050565b61227e61286c565b612287826126bb565b61229057600080fd5b600061229f83602001516126f5565b60208085015160408051808201909152868152920190820152915050919050565b60006122ca61288c565b505080518051602091820151919092015191011190565b6122e961288c565b6122f2826122c0565b6122fb57600080fd5b6020820151600061230b82612758565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061234457508151602110155b61234d57600080fd5b600061235c83602001516126f5565b905080836000015110156123825760405162461bcd60e51b8152600401610531906132cd565b8251602080850151830180519284900392918310156123a857826020036101000a820491505b50949350505050565b9091018181526020918201910152565b6060815160011480156123f35750607f60f81b826000815181106123e157fe5b01602001516001600160f81b03191611155b156123ff575080611df2565b611ecb6124118351608060ff166125e9565b8361256c565b60005b818110156106f05783818151811061242e57fe5b602001015160f81c60f81b85848060010195508151811061244b57fe5b60200101906001600160f81b031916908160001a90535060010161241a565b6000816001018351101561247d57600080fd5b50016001015190565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166124ca575060186124ee565b6fffffffffffffffffffffffffffffffff1984166124ea575060106124ee565b5060005b60208110156125245781818151811061250357fe5b01602001516001600160f81b0319161561251c57612524565b6001016124ee565b60008160200390506060816040519080825280601f01601f191660200182016040528015612559576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561259d578051835260209283019201612585565b50855184518101855292509050808201602086015b818310156125ca5780518352602092830192016125b2565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106126135760405162461bcd60e51b81526004016105319061300f565b6040805160018082528183019092526060916020820181803683370190505090506037841161266d5782840160f81b8160008151811061264f57fe5b60200101906001600160f81b031916908160001a9053509050611ecb565b606061267885612486565b90508381510160370160f81b8260008151811061269157fe5b60200101906001600160f81b031916908160001a9053506126b2828261256c565b95945050505050565b80516000906126cc57506000611df2565b6020820151805160001a9060c08210156126eb57600092505050611df2565b5060019392505050565b8051600090811a608081101561270f576000915050611df2565b60b881108061272a575060c0811080159061272a575060f881105b15612739576001915050611df2565b60c081101561274d5760b519019050611df2565b60f519019050611df2565b80516000908190811a60808110156127735760019150612830565b60b881101561278857607e1981019150612830565b60c08110156127d957600060b78203600186019550806020036101000a8651049150600181018201935050808310156127d35760405162461bcd60e51b81526004016105319061317e565b50612830565b60f88110156127ee5760be1981019150612830565b600060f78203600186019550806020036101000a865104915060018101820193505080831015611ef65760405162461bcd60e51b81526004016105319061317e565b5092915050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b604051806040016040528061287f61288c565b8152602001600081525090565b604051806040016040528060008152602001600081525090565b600082601f8301126128b6578081fd5b81516128c96128c4826135c2565b61359b565b818152915060208083019084810160005b8481101561293f578151870188603f8201126128f557600080fd5b838101516129056128c4826135e2565b81815260408b8184860101111561291b57600080fd5b61292a83888401838701613606565b508652505092820192908201906001016128da565b505050505092915050565b60008083601f84011261295b578182fd5b50813567ffffffffffffffff811115612972578182fd5b60208301915083602082850101111561298a57600080fd5b9250929050565b600082601f8301126129a1578081fd5b81356129af6128c4826135e2565b91508082528360208285010111156129c657600080fd5b8060208401602084013760009082016020015292915050565b600060a082840312156129f0578081fd5b6129fa60a061359b565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff811115612a3857600080fd5b612a4484828501612991565b60808301525092915050565b600060208284031215612a61578081fd5b8135612a6c81613632565b9392505050565b60008060408385031215612a85578081fd5b825167ffffffffffffffff80821115612a9c578283fd5b81850186601f820112612aad578384fd5b80519250612abd6128c4846135c2565b80848252602080830192508084018a828389028701011115612add578788fd5b8794505b86851015612b08578051612af481613632565b845260019490940193928101928101612ae1565b508801519096509350505080821115612b1f578283fd5b50612b2c858286016128a6565b9150509250929050565b600060208284031215612b47578081fd5b81518015158114612a6c578182fd5b60008060008060408587031215612b6b578182fd5b843567ffffffffffffffff80821115612b82578384fd5b612b8e8883890161294a565b90965094506020870135915080821115612ba6578384fd5b50612bb38782880161294a565b95989497509550505050565b600060208284031215612bd0578081fd5b813567ffffffffffffffff80821115612be7578283fd5b81840160608187031215612bf9578384fd5b612c03606061359b565b9250803582811115612c13578485fd5b612c1f878284016129df565b845250602081013582811115612c33578485fd5b612c3f878284016129df565b602085015250604081013582811115612c56578485fd5b612c6287828401612991565b6040850152509195945050505050565b600060208284031215612c83578081fd5b5035919050565b600060208284031215612c9b578081fd5b5051919050565b600080600060408486031215612cb6578283fd5b833560ff81168114612cc6578384fd5b9250602084013567ffffffffffffffff811115612ce1578283fd5b612ced8682870161294a565b9497909650939450505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612d3c816020860160208601613606565b601f01601f19169290920160200192915050565b60008251612d62818460208701613606565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060208252612a6c6020830184612d24565b600060408252612dcb604083018688612cfa565b8281036020840152612dde818587612cfa565b979650505050505050565b6020808252602a908201527f6c656e677468206f66206d616c6963696f7573566f7465536c61736853636f706040820152690ca40dad2e6dac2e8c6d60b31b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604082015260600190565b6020808252818101527f6d616c6963696f757320766f746520736c617368206e6f7420656e61626c6564604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252602b908201527f746865206d616c6963696f757320766f746520736c6173682073636f7065206f60408201526a7574206f662072616e676560a81b606082015260800190565b6020808252601a908201527f6e6f2076696f6c6174696f6e206f6620766f74652072756c6573000000000000604082015260600190565b6020808252818101527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604082015260600190565b6020808252602b908201527f6c656e677468206f6620656e61626c654d616c6963696f7573566f7465536c6160408201526a0e6d040dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526017908201527f766572696679207369676e6174757265206661696c6564000000000000000000604082015260600190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526019908201527f7372634e756d20626967676572207468616e207461724e756d00000000000000604082015260600190565b6020808252602c908201527f7468652066696e616c69747920736c6173682072657761726420726174696f2060408201526b6f7574206f662072616e676560a01b606082015260800190565b60208082526027908201527f6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d6040820152660d2e6dac2e8c6d60cb1b606082015260800190565b60208082526013908201527274776f206964656e746963616c20766f74657360681b604082015260600190565b60208082526030908201527f746865206d6573736167652073656e646572206d7573742062652076616c696460408201526f185d1bdc94d95d0818dbdb9d1c9858dd60821b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252601590820152741d9bdd195059191c881a5cc81b9bdd08199bdd5b99605a1b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526022908201527f6c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746040820152610c6d60f31b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526025908201527f746865206d697364656d65616e6f725468726573686f6c64206f7574206f662060408201526472616e676560d81b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b6020808252601490820152731d185c99d95d08189b1bd8dac81d1bdbc81bdb1960621b604082015260600190565b6020808252601e908201527f7265636569766520756e65787065637465642073796e207061636b6167650000604082015260600190565b6020808252602b908201527f6c656e677468206f662066696e616c697479536c61736852657761726452617460408201526a0d2de40dad2e6dac2e8c6d60ab1b606082015260800190565b6020808252818101527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604082015260600190565b61ffff91909116815260200190565b90815260200190565b6000838252604060208301526135226040830184612d24565b949350505050565b918252602082015260400190565b92835260208301919091521515604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff851682526060602083015261358b6060830185612d24565b9050826040830152949350505050565b60405181810167ffffffffffffffff811182821017156135ba57600080fd5b604052919050565b600067ffffffffffffffff8211156135d8578081fd5b5060209081020190565b600067ffffffffffffffff8211156135f8578081fd5b50601f01601f191660200190565b60005b83811015613621578181015183820152602001613609565b838111156118775750506000910152565b6001600160a01b038116811461364757600080fd5b5056fea164736f6c6343000604000a", + }, + { + ContractAddr: common.HexToAddress(SystemRewardContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + Code: "6080604052600436106101c55760003560e01c806375d47a0a116100f7578063ab51bb9611610095578063f9a2bbc711610064578063f9a2bbc7146105c3578063fb5478b3146105d8578063fc3e5908146105ed578063fd6a68791461060257610209565b8063ab51bb96146104b5578063ac431751146104ca578063c81b166214610599578063dc927faf146105ae57610209565b80639a99b4f0116100d15780639a99b4f01461043d5780639dc0926214610476578063a1a11bf51461048b578063a78abc16146104a057610209565b806375d47a0a146103fe5780637942fd051461041357806396713da91461042857610209565b8063493279b1116101645780636d70f7ae1161013e5780636d70f7ae146103785780636e47b482146103bf57806370fd5bad146103d4578063718a8aa8146103e957610209565b8063493279b1146103225780634bf6c8821461034e57806351e806721461036357610209565b806331b6d4a5116101a057806331b6d4a5146102b85780633a0b0eff146102cd5780633dffc387146102e257806343756e5c1461030d57610209565b806227253a1461020e5780630bee7a67146102595780630e2374a51461028757610209565b366102095734156102075760408051348152905133917f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db919081900360200190a25b005b600080fd5b34801561021a57600080fd5b506102476004803603604081101561023157600080fd5b506001600160a01b038135169060200135610617565b60408051918252519081900360200190f35b34801561026557600080fd5b5061026e6107c2565b6040805163ffffffff9092168252519081900360200190f35b34801561029357600080fd5b5061029c6107c7565b604080516001600160a01b039092168252519081900360200190f35b3480156102c457600080fd5b506102476107cd565b3480156102d957600080fd5b506102476107d9565b3480156102ee57600080fd5b506102f76107df565b6040805160ff9092168252519081900360200190f35b34801561031957600080fd5b5061029c6107e4565b34801561032e57600080fd5b506103376107ea565b6040805161ffff9092168252519081900360200190f35b34801561035a57600080fd5b506102f76107f0565b34801561036f57600080fd5b5061029c6107f5565b34801561038457600080fd5b506103ab6004803603602081101561039b57600080fd5b50356001600160a01b03166107fb565b604080519115158252519081900360200190f35b3480156103cb57600080fd5b5061029c610819565b3480156103e057600080fd5b506102f761081f565b3480156103f557600080fd5b506102f7610824565b34801561040a57600080fd5b5061029c610829565b34801561041f57600080fd5b506102f761082f565b34801561043457600080fd5b506102f7610834565b34801561044957600080fd5b506102476004803603604081101561046057600080fd5b506001600160a01b038135169060200135610839565b34801561048257600080fd5b5061029c610963565b34801561049757600080fd5b5061029c610969565b3480156104ac57600080fd5b506103ab61096f565b3480156104c157600080fd5b5061026e610978565b3480156104d657600080fd5b50610207600480360360408110156104ed57600080fd5b81019060208101813564010000000081111561050857600080fd5b82018360208201111561051a57600080fd5b8035906020019184600183028401116401000000008311171561053c57600080fd5b91939092909160208101903564010000000081111561055a57600080fd5b82018360208201111561056c57600080fd5b8035906020019184600183028401116401000000008311171561058e57600080fd5b50909250905061097d565b3480156105a557600080fd5b5061029c610d00565b3480156105ba57600080fd5b5061029c610d06565b3480156105cf57600080fd5b5061029c610d0c565b3480156105e457600080fd5b50610247610d12565b3480156105f957600080fd5b506102f7610d1e565b34801561060e57600080fd5b5061029c610d23565b6000805460ff1661069457600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166106e25760405162461bcd60e51b815260040180806020018281038252602b815260200180610e11602b913960400191505060405180910390fd5b60004783106106f157476106f3565b825b9050674563918244f400008111156107105750674563918244f400005b8015610791576040516001600160a01b0385169082156108fc029083906000818181858888f1935050505015801561074c573d6000803e3d6000fd5b506040805182815290516001600160a01b038616917ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0919081900360200190a26107bb565b6040517fe589651933c2457488cc0d8e0941518abf748e799435e4e396d9c4d0b2db2d4d90600090a15b9392505050565b606481565b61200181565b674563918244f4000081565b60015481565b600181565b61100181565b6102ca81565b600881565b61200081565b6001600160a01b031660009081526002602052604090205460ff1690565b61100581565b600281565b601081565b61100881565b600b81565b600981565b6000805460ff166108b657600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166109045760405162461bcd60e51b815260040180806020018281038252602b815260200180610e11602b913960400191505060405180910390fd5b60004783106109135747610915565b825b9050670de0b6b3a76400008111156107105750604051670de0b6b3a7640000906001600160a01b03851690600090839082818181858883f1935050505015801561074c573d6000803e3d6000fd5b61100781565b61100681565b60005460ff1681565b600081565b33611007146109bd5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e6b602e913960400191505060405180910390fd5b610a1f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600b81526a30b23227b832b930ba37b960a91b60208201529150610d299050565b15610af757606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091149050610aa25760405162461bcd60e51b815260040180806020018281038252602c815260200180610e99602c913960400191505060405180910390fd5b60148101516001600160a01b038116600081815260026020526040808220805460ff19166001179055517f9870d7fe5d112134c55844951dedf365363006d9c588db07c4c85af6322a06199190a25050610c6e565b610b5c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81526d3232b632ba32a7b832b930ba37b960911b60208201529150610d299050565b15610c3157606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091149050610bdf5760405162461bcd60e51b815260040180806020018281038252602f815260200180610e3c602f913960400191505060405180910390fd5b60148101516001600160a01b038116600081815260026020526040808220805460ff19169055517fb40992a19dba61ea600e87fce607102bf5908dc89076217b6ca6ae195224f7029190a25050610c6e565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b61100281565b61100381565b61100081565b670de0b6b3a764000081565b600381565b61100481565b6000816040516020018082805190602001908083835b60208310610d5e5780518252601f199092019160209182019101610d3f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310610dcc5780518252601f199092019160209182019101610dad565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490509291505056fe6f6e6c79206f70657261746f7220697320616c6c6f77656420746f2063616c6c20746865206d6574686f646c656e677468206f662076616c756520666f722064656c6574654f70657261746f722073686f756c64206265203230746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662076616c756520666f72206164644f70657261746f722073686f756c64206265203230a164736f6c6343000604000a", + }, + }, + } + latestUpgrade[defaultNet] = latestUpgrade[rialtoNet] } -func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.Int, statedb *state.StateDB) { +func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.Int, lastBlockTime uint64, blockTime uint64, statedb *state.StateDB) { if config == nil || blockNumber == nil || statedb == nil { return } @@ -758,6 +823,9 @@ func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.I applySystemContractUpgrade(platoUpgrade[network], blockNumber, statedb, logger) } + if config.IsOnKepler(blockNumber, lastBlockTime, blockTime) { + applySystemContractUpgrade(keplerUpgrade[network], blockNumber, statedb, logger) + } /* apply other upgrades */ diff --git a/miner/worker.go b/miner/worker.go index ffade84a3..d1ea4f803 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -914,7 +914,7 @@ func (w *worker) prepareWork(genParams *generateParams) (*environment, error) { } // Handle upgrade build-in system contract code - systemcontracts.UpgradeBuildInSystemContract(w.chainConfig, header.Number, env.state) + systemcontracts.UpgradeBuildInSystemContract(w.chainConfig, header.Number, parent.Time, header.Time, env.state) return env, nil } diff --git a/params/config.go b/params/config.go index 79887de10..eb91a37ec 100644 --- a/params/config.go +++ b/params/config.go @@ -448,6 +448,7 @@ type ChainConfig struct { // Fork scheduling was switched from blocks to timestamps here ShanghaiTime *uint64 `json:"shanghaiTime,omitempty" toml:",omitempty"` // Shanghai switch time (nil = no fork, 0 = already on shanghai) + KeplerTime *uint64 `json:"keplerTime,omitempty" toml:",omitempty"` // Kepler switch time (nil = no fork, 0 = already activated) CancunTime *uint64 `json:"cancunTime,omitempty" toml:",omitempty"` // Cancun switch time (nil = no fork, 0 = already on cancun) PragueTime *uint64 `json:"pragueTime,omitempty" toml:",omitempty"` // Prague switch time (nil = no fork, 0 = already on prague) VerkleTime *uint64 `json:"verkleTime,omitempty" toml:",omitempty"` // Verkle switch time (nil = no fork, 0 = already on verkle) @@ -535,7 +536,12 @@ func (c *ChainConfig) String() string { ShanghaiTime = big.NewInt(0).SetUint64(*c.ShanghaiTime) } - 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, Nano: %v, Moran: %v, Planck: %v,Luban: %v, Plato: %v, Hertz: %v, ShanghaiTime: %d, Engine: %v}", + var KeplerTime *big.Int + if c.KeplerTime != nil { + KeplerTime = big.NewInt(0).SetUint64(*c.KeplerTime) + } + + 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, Nano: %v, Moran: %v, Planck: %v,Luban: %v, Plato: %v, Hertz: %v, ShanghaiTime: %v, KeplerTime: %v, Engine: %v}", c.ChainID, c.HomesteadBlock, c.DAOForkBlock, @@ -567,6 +573,7 @@ func (c *ChainConfig) String() string { c.PlatoBlock, c.HertzBlock, ShanghaiTime, + KeplerTime, engine, ) } @@ -770,6 +777,20 @@ func (c *ChainConfig) IsShanghai(num *big.Int, time uint64) bool { return c.IsLondon(num) && isTimestampForked(c.ShanghaiTime, time) } +// IsKepler returns whether time is either equal to the kepler fork time or greater. +func (c *ChainConfig) IsKepler(num *big.Int, time uint64) bool { + return c.IsLondon(num) && isTimestampForked(c.KeplerTime, time) +} + +// IsOnKepler returns whether currentBlockTime is either equal to the kepler fork time or greater firstly. +func (c *ChainConfig) IsOnKepler(currentBlockNumber *big.Int, lastBlockTime uint64, currentBlockTime uint64) bool { + lastBlockNumber := new(big.Int) + if currentBlockNumber.Cmp(big.NewInt(1)) >= 0 { + lastBlockNumber.Sub(currentBlockNumber, big.NewInt(1)) + } + return !c.IsKepler(lastBlockNumber, lastBlockTime) && c.IsKepler(currentBlockNumber, currentBlockTime) +} + // IsCancun returns whether num is either equal to the Cancun fork time or greater. func (c *ChainConfig) IsCancun(num *big.Int, time uint64) bool { return c.IsLondon(num) && isTimestampForked(c.CancunTime, time) @@ -967,6 +988,9 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, headNumber *big.Int, if isForkTimestampIncompatible(c.ShanghaiTime, newcfg.ShanghaiTime, headTimestamp) { return newTimestampCompatError("Shanghai fork timestamp", c.ShanghaiTime, newcfg.ShanghaiTime) } + if isForkTimestampIncompatible(c.KeplerTime, newcfg.KeplerTime, headTimestamp) { + return newTimestampCompatError("Kepler fork timestamp", c.KeplerTime, newcfg.KeplerTime) + } if isForkTimestampIncompatible(c.CancunTime, newcfg.CancunTime, headTimestamp) { return newTimestampCompatError("Cancun fork timestamp", c.CancunTime, newcfg.CancunTime) } @@ -1127,7 +1151,7 @@ type Rules struct { IsLuban bool IsPlato bool IsHertz bool - IsShanghai, IsCancun, IsPrague bool + IsShanghai, IsKepler, IsCancun, IsPrague bool IsVerkle bool } @@ -1157,6 +1181,7 @@ func (c *ChainConfig) Rules(num *big.Int, isMerge bool, timestamp uint64) Rules IsPlato: c.IsPlato(num), IsHertz: c.IsHertz(num), IsShanghai: c.IsShanghai(num, timestamp), + IsKepler: c.IsKepler(num, timestamp), IsCancun: c.IsCancun(num, timestamp), IsPrague: c.IsPrague(num, timestamp), IsVerkle: c.IsVerkle(num, timestamp),