From 72ffb0cbeda6ebe1ecb635efc77aa3cb0bb8ee9d Mon Sep 17 00:00:00 2001 From: joey Date: Fri, 10 Nov 2023 19:23:14 +0800 Subject: [PATCH 01/31] doc: add instructions for starting fullnode with pbss (#1977) --- README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f198c999ed..67099092db 100644 --- a/README.md +++ b/README.md @@ -150,13 +150,25 @@ unzip testnet.zip Download latest chaindata snapshot from [here](https://github.com/bnb-chain/bsc-snapshots). Follow the guide to structure your files. Note: if you can not download the chaindata snapshot and want to sync from genesis, you have to generate the genesis block first, you have already get the genesis.json in Step 2. -So just run: `geth --datadir init ./genesis.json` +So just run: +``` shell +## It will init genesis with Hash-Base Storage Scheme by default. +geth --datadir init ./genesis.json + +## It will init genesis with Path-Base Storage Scheme. +geth --datadir --state.scheme path init ./genesis.json +``` #### 4. Start a full node ```shell ./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --txlookuplimit 0 ## It is recommand to run fullnode with `--tries-verify-mode none` if you want high performance and care little about state consistency +## It will run with Hash-Base Storage Scheme by default ./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --txlookuplimit 0 --tries-verify-mode none + +## It runs fullnode with Path-Base Storage Scheme. +## It will enable inline state prune, keeping the latest 90000 blocks' history state by default. +./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --txlookuplimit 0 --tries-verify-mode none --state.scheme path ``` #### 5. Monitor node status From 3fc9f750d1bc959a71f560ca80ed52090bb8086f Mon Sep 17 00:00:00 2001 From: buddho Date: Tue, 14 Nov 2023 16:33:57 +0800 Subject: [PATCH 02/31] consensus/parlia: hardfork block can be epoch block (#1964) --- consensus/parlia/parlia.go | 14 ++++++++++++++ params/config.go | 38 ++++++++++++++------------------------ 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/consensus/parlia/parlia.go b/consensus/parlia/parlia.go index 17c77a3123..9de8c28a99 100644 --- a/consensus/parlia/parlia.go +++ b/consensus/parlia/parlia.go @@ -828,6 +828,13 @@ func (p *Parlia) prepareValidators(header *types.Header) error { } } else { header.Extra = append(header.Extra, byte(len(newValidators))) + if p.chainConfig.IsOnLuban(header.Number) { + voteAddressMap = make(map[common.Address]*types.BLSPublicKey, len(newValidators)) + var zeroBlsKey types.BLSPublicKey + for _, validator := range newValidators { + voteAddressMap[validator] = &zeroBlsKey + } + } for _, validator := range newValidators { header.Extra = append(header.Extra, validator.Bytes()...) header.Extra = append(header.Extra, voteAddressMap[validator].Bytes()...) @@ -989,6 +996,13 @@ func (p *Parlia) verifyValidators(header *types.Header) error { return errMismatchingEpochValidators } validatorsBytes = make([]byte, validatorsNumber*validatorBytesLength) + if p.chainConfig.IsOnLuban(header.Number) { + voteAddressMap = make(map[common.Address]*types.BLSPublicKey, len(newValidators)) + var zeroBlsKey types.BLSPublicKey + for _, validator := range newValidators { + voteAddressMap[validator] = &zeroBlsKey + } + } for i, validator := range newValidators { copy(validatorsBytes[i*validatorBytesLength:], validator.Bytes()) copy(validatorsBytes[i*validatorBytesLength+common.AddressLength:], voteAddressMap[validator].Bytes()) diff --git a/params/config.go b/params/config.go index fc1f40e6de..6476d2b760 100644 --- a/params/config.go +++ b/params/config.go @@ -159,15 +159,11 @@ var ( MoranBlock: big.NewInt(22107423), GibbsBlock: big.NewInt(23846001), PlanckBlock: big.NewInt(27281024), - - // TODO modify blockNumber, make sure the blockNumber is not an integer multiple of 200 (epoch number) - // TODO Caution !!! it should be very careful !!! - LubanBlock: big.NewInt(29020050), - PlatoBlock: big.NewInt(30720096), - // TODO modify blockNumber, make sure HertzBlock=BerlinBlock=LondonBlock to enable Berlin and London EIPs - BerlinBlock: big.NewInt(31302048), - LondonBlock: big.NewInt(31302048), - HertzBlock: big.NewInt(31302048), + LubanBlock: big.NewInt(29020050), + PlatoBlock: big.NewInt(30720096), + BerlinBlock: big.NewInt(31302048), + LondonBlock: big.NewInt(31302048), + HertzBlock: big.NewInt(31302048), Parlia: &ParliaConfig{ Period: 3, @@ -195,15 +191,11 @@ var ( NanoBlock: big.NewInt(23482428), MoranBlock: big.NewInt(23603940), PlanckBlock: big.NewInt(28196022), - - // TODO modify blockNumber, make sure the blockNumber is not an integer multiple of 200 (epoch number) - // TODO Caution !!! it should be very careful !!! - LubanBlock: big.NewInt(29295050), - PlatoBlock: big.NewInt(29861024), - // TODO modify blockNumber, make sure HertzBlock=BerlinBlock=LondonBlock to enable Berlin and London EIPs - BerlinBlock: big.NewInt(31103030), - LondonBlock: big.NewInt(31103030), - HertzBlock: big.NewInt(31103030), + LubanBlock: big.NewInt(29295050), + PlatoBlock: big.NewInt(29861024), + BerlinBlock: big.NewInt(31103030), + LondonBlock: big.NewInt(31103030), + HertzBlock: big.NewInt(31103030), Parlia: &ParliaConfig{ Period: 3, @@ -231,12 +223,10 @@ var ( NanoBlock: nil, MoranBlock: nil, PlanckBlock: nil, - - // TODO - LubanBlock: nil, - PlatoBlock: nil, - BerlinBlock: nil, - HertzBlock: nil, + LubanBlock: nil, + PlatoBlock: nil, + BerlinBlock: nil, + HertzBlock: nil, Parlia: &ParliaConfig{ Period: 3, From 4be9481558ae9ed15b5e16e048cf6dbd1d3ae6f8 Mon Sep 17 00:00:00 2001 From: buddho Date: Tue, 14 Nov 2023 16:40:25 +0800 Subject: [PATCH 03/31] internal/ethapi: fix null effectiveGasPrice in GetTransactionReceipt (#1980) --- core/blockchain.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index 454c9768a6..0d6974c1dc 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -552,7 +552,7 @@ func (bc *BlockChain) GetVMConfig() *vm.Config { return &bc.vmConfig } -func (bc *BlockChain) cacheReceipts(hash common.Hash, receipts types.Receipts) { +func (bc *BlockChain) cacheReceipts(hash common.Hash, receipts types.Receipts, block *types.Block) { // TODO, This is a hot fix for the block hash of logs is `0x0000000000000000000000000000000000000000000000000000000000000000` for system tx // Please check details in https://github.com/bnb-chain/bsc/issues/443 // This is a temporary fix, the official fix should be a hard fork. @@ -563,6 +563,16 @@ func (bc *BlockChain) cacheReceipts(hash common.Hash, receipts types.Receipts) { receipts[i].Logs[j].BlockHash = hash } } + + txs := block.Transactions() + if len(txs) != len(receipts) { + log.Warn("transaction and receipt count mismatch") + return + } + for i, receipt := range receipts { + receipt.EffectiveGasPrice = txs[i].EffectiveGasTipValue(block.BaseFee()) // basefee is supposed to be nil or zero + } + bc.receiptsCache.Add(hash, receipts) } @@ -2049,7 +2059,6 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) vtime := time.Since(vstart) proctime := time.Since(start) // processing + validation - bc.cacheReceipts(block.Hash(), receipts) bc.cacheBlock(block.Hash(), block) // Update the metrics touched during block processing and validation @@ -2082,6 +2091,9 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) if err != nil { return it.index, err } + + bc.cacheReceipts(block.Hash(), receipts, block) + // Update the metrics touched during block commit accountCommitTimer.Update(statedb.AccountCommits) // Account commits are complete, we can mark them storageCommitTimer.Update(statedb.StorageCommits) // Storage commits are complete, we can mark them From 8b94dd6b5929f26c24701ed5074b490e7d4e23ab Mon Sep 17 00:00:00 2001 From: Ng Wei Han <47109095+weiihann@users.noreply.github.com> Date: Tue, 14 Nov 2023 20:10:41 +0800 Subject: [PATCH 04/31] fix(cmd): check pruneancient when creating db (#1986) --- cmd/utils/flags.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 36455d86b2..7c6ce0e6cb 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -2355,7 +2355,7 @@ func tryMakeReadOnlyDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database // If datadir doesn't exist we need to open db in write-mode // so database engine can create files. readonly := true - if !common.FileExist(stack.ResolvePath("chaindata")) { + if !common.FileExist(stack.ResolvePath("chaindata")) || ctx.Bool(PruneAncientDataFlag.Name) { readonly = false } return MakeChainDatabase(ctx, stack, readonly, false) From 497fdf83584dffaa19c076301dafe5cdd6eab5c2 Mon Sep 17 00:00:00 2001 From: wayen <2229306838@qq.com> Date: Mon, 20 Nov 2023 15:28:01 +0900 Subject: [PATCH 05/31] fix: upgrade pebble and improve config (#1979) --- ethdb/pebble/pebble.go | 47 +++++++++++++++++++++++++++++------------- go.mod | 5 +++-- go.sum | 8 ++++--- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/ethdb/pebble/pebble.go b/ethdb/pebble/pebble.go index a06f59bcfa..52285f4860 100644 --- a/ethdb/pebble/pebble.go +++ b/ethdb/pebble/pebble.go @@ -27,6 +27,7 @@ import ( "sync/atomic" "time" + "github.com/cockroachdb/errors" "github.com/cockroachdb/pebble" "github.com/cockroachdb/pebble/bloom" "github.com/ethereum/go-ethereum/common" @@ -116,6 +117,16 @@ func (d *Database) onWriteStallEnd() { d.writeDelayTime.Add(int64(time.Since(d.writeDelayStartTime))) } +// panicLogger is just a noop logger to disable Pebble's internal logger. +type panicLogger struct{} + +func (l panicLogger) Infof(format string, args ...interface{}) { +} + +func (l panicLogger) Fatalf(format string, args ...interface{}) { + panic(errors.Errorf("fatal: "+format, args...)) +} + // New returns a wrapped pebble DB object. The namespace is the prefix that the // metrics reporting should use for surfacing internal stats. func New(file string, cache int, handles int, namespace string, readonly bool) (*Database, error) { @@ -127,7 +138,6 @@ func New(file string, cache int, handles int, namespace string, readonly bool) ( handles = minHandles } logger := log.New("database", file) - logger.Info("Allocated cache and file handles", "cache", common.StorageSize(cache*1024*1024), "handles", handles) // The max memtable size is limited by the uint32 offsets stored in // internal/arenaskl.node, DeferredBatchOp, and flushableBatchEntry. @@ -141,6 +151,10 @@ func New(file string, cache int, handles int, namespace string, readonly bool) ( if memTableSize > maxMemTableSize { memTableSize = maxMemTableSize } + + logger.Info("Allocated cache and file handles", "cache", common.StorageSize(cache*1024*1024), + "handles", handles, "memory table", common.StorageSize(memTableSize)) + db := &Database{ fn: file, log: logger, @@ -155,7 +169,7 @@ func New(file string, cache int, handles int, namespace string, readonly bool) ( // The size of memory table(as well as the write buffer). // Note, there may have more than two memory tables in the system. - MemTableSize: memTableSize, + MemTableSize: uint64(memTableSize), // MemTableStopWritesThreshold places a hard limit on the size // of the existent MemTables(including the frozen one). @@ -170,15 +184,6 @@ func New(file string, cache int, handles int, namespace string, readonly bool) ( // Per-level options. Options for at least one level must be specified. The // options for the last level are used for all subsequent levels. - Levels: []pebble.LevelOptions{ - {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, - {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, - {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, - {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, - {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, - {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, - {TargetFileSize: 2 * 1024 * 1024, FilterPolicy: bloom.FilterPolicy(10)}, - }, ReadOnly: readonly, EventListener: &pebble.EventListener{ CompactionBegin: db.onCompactionBegin, @@ -186,7 +191,21 @@ func New(file string, cache int, handles int, namespace string, readonly bool) ( WriteStallBegin: db.onWriteStallBegin, WriteStallEnd: db.onWriteStallEnd, }, + Logger: panicLogger{}, // TODO(karalabe): Delete when this is upstreamed in Pebble + } + + for i := 0; i < len(opt.Levels); i++ { + l := &opt.Levels[i] + l.BlockSize = 32 << 10 // 32 KB + l.IndexBlockSize = 256 << 10 // 256 KB + l.FilterPolicy = bloom.FilterPolicy(10) + l.FilterType = pebble.TableFilter + if i > 0 { + l.TargetFileSize = opt.Levels[i-1].TargetFileSize * 2 + } + l.EnsureDefaults() } + // Disable seek compaction explicitly. Check https://github.com/ethereum/go-ethereum/pull/20130 // for more details. opt.Experimental.ReadSamplingMultiplier = -1 @@ -305,9 +324,9 @@ func (d *Database) NewBatch() ethdb.Batch { // It's not supported by pebble, but pebble has better memory allocation strategy // which turns out a lot faster than leveldb. It's performant enough to construct // batch object without any pre-allocated space. -func (d *Database) NewBatchWithSize(_ int) ethdb.Batch { +func (d *Database) NewBatchWithSize(size int) ethdb.Batch { return &batch{ - b: d.db.NewBatch(), + b: d.db.NewBatchWithSize(size), db: d, } } @@ -576,7 +595,7 @@ type pebbleIterator struct { // of database content with a particular key prefix, starting at a particular // initial key (or after, if it does not exist). func (d *Database) NewIterator(prefix []byte, start []byte) ethdb.Iterator { - iter := d.db.NewIter(&pebble.IterOptions{ + iter, _ := d.db.NewIter(&pebble.IterOptions{ LowerBound: append(prefix, start...), UpperBound: upperBound(prefix), }) diff --git a/go.mod b/go.mod index e70f1f9c44..fbebfee8ba 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,8 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.2 github.com/cespare/cp v1.1.1 github.com/cloudflare/cloudflare-go v0.14.0 - github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 + github.com/cockroachdb/errors v1.9.1 + github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 github.com/cometbft/cometbft v0.37.0 github.com/consensys/gnark-crypto v0.10.0 github.com/crate-crypto/go-kzg-4844 v0.3.0 @@ -109,9 +110,9 @@ require ( github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect - github.com/cockroachdb/errors v1.9.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/redact v1.1.3 // indirect + github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/consensys/bavard v0.1.13 // indirect github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect diff --git a/go.sum b/go.sum index b698c074ed..5c31fc8f55 100644 --- a/go.sum +++ b/go.sum @@ -247,16 +247,18 @@ github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnht github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 h1:1MLK4YpFtIEo3ZtMA5C795Wtv5VuUnrXX7mQG+aHg6o= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 h1:T+Np/xtzIjYM/P5NAw0e2Rf1FGvzDau1h54MKvx8G7w= -github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06/go.mod h1:bynZ3gvVyhlvjLI7PT6dmZ7g76xzJ7HpxfjgkzCGz6s= +github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 h1:aPEJyR4rPBvDmeyi+l/FS/VtA00IWvjeFvjen1m1l1A= +github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593/go.mod h1:6hk1eMY/u5t+Cf18q5lFMUA1Rc+Sm5I6Ra1QuPyxXCo= github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= From 0224d48df4e9808a7f9551f70b5c2468b07255f3 Mon Sep 17 00:00:00 2001 From: buddho Date: Mon, 20 Nov 2023 19:19:26 +0800 Subject: [PATCH 06/31] core: enable Shanghai EIPs (#1970) --- .github/workflows/unit-test.yml | 1 + consensus/misc/eip1559/eip1559.go | 44 +++++++- consensus/misc/eip1559/eip1559_test.go | 5 + core/genesis.go | 2 +- core/vm/jump_table.go | 2 +- eth/filters/filter_test.go | 141 +++++++++++++------------ params/config.go | 8 +- tests/block_test.go | 5 +- tests/init_test.go | 13 ++- tests/state_test.go | 2 + tests/state_test_util.go | 2 +- trie/triedb/pathdb/database.go | 2 +- 12 files changed, 151 insertions(+), 76 deletions(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 50f2a4cd20..b08f596363 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -49,6 +49,7 @@ jobs: CGO_CFLAGS_ALLOW: "-O -D__BLST_PORTABLE__" ANDROID_HOME: "" # Skip android test run: | + git submodule update --init --depth 1 --recursive go mod download make test diff --git a/consensus/misc/eip1559/eip1559.go b/consensus/misc/eip1559/eip1559.go index 77f4e4dbaa..e87c5ab23b 100644 --- a/consensus/misc/eip1559/eip1559.go +++ b/consensus/misc/eip1559/eip1559.go @@ -21,6 +21,8 @@ import ( "fmt" "math/big" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/params" ) @@ -45,5 +47,45 @@ func VerifyEIP1559Header(config *params.ChainConfig, parent, header *types.Heade // CalcBaseFee calculates the basefee of the header. func CalcBaseFee(config *params.ChainConfig, parent *types.Header) *big.Int { - return new(big.Int).SetUint64(params.InitialBaseFee) + if config.Parlia != nil { + return new(big.Int).SetUint64(params.InitialBaseFee) + } + + // If the current block is the first EIP-1559 block, return the InitialBaseFee. + if !config.IsLondon(parent.Number) { + return new(big.Int).SetUint64(params.InitialBaseFee) + } + + parentGasTarget := parent.GasLimit / config.ElasticityMultiplier() + // If the parent gasUsed is the same as the target, the baseFee remains unchanged. + if parent.GasUsed == parentGasTarget { + return new(big.Int).Set(parent.BaseFee) + } + + var ( + num = new(big.Int) + denom = new(big.Int) + ) + + if parent.GasUsed > parentGasTarget { + // If the parent block used more gas than its target, the baseFee should increase. + // max(1, parentBaseFee * gasUsedDelta / parentGasTarget / baseFeeChangeDenominator) + num.SetUint64(parent.GasUsed - parentGasTarget) + num.Mul(num, parent.BaseFee) + num.Div(num, denom.SetUint64(parentGasTarget)) + num.Div(num, denom.SetUint64(config.BaseFeeChangeDenominator())) + baseFeeDelta := math.BigMax(num, common.Big1) + + return num.Add(parent.BaseFee, baseFeeDelta) + } else { + // Otherwise if the parent block used less gas than its target, the baseFee should decrease. + // max(0, parentBaseFee * gasUsedDelta / parentGasTarget / baseFeeChangeDenominator) + num.SetUint64(parentGasTarget - parent.GasUsed) + num.Mul(num, parent.BaseFee) + num.Div(num, denom.SetUint64(parentGasTarget)) + num.Div(num, denom.SetUint64(config.BaseFeeChangeDenominator())) + baseFee := num.Sub(parent.BaseFee, num) + + return math.BigMax(baseFee, common.Big0) + } } diff --git a/consensus/misc/eip1559/eip1559_test.go b/consensus/misc/eip1559/eip1559_test.go index 724114888c..e2dbfd1825 100644 --- a/consensus/misc/eip1559/eip1559_test.go +++ b/consensus/misc/eip1559/eip1559_test.go @@ -51,6 +51,11 @@ func copyConfig(original *params.ChainConfig) *params.ChainConfig { func config() *params.ChainConfig { config := copyConfig(params.TestChainConfig) + config.Ethash = nil + config.Parlia = ¶ms.ParliaConfig{ + Period: 3, + Epoch: 200, + } config.LondonBlock = big.NewInt(5) return config } diff --git a/core/genesis.go b/core/genesis.go index 8fa107ac66..1929805da6 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -534,7 +534,7 @@ func (g *Genesis) ToBlock() *types.Block { var withdrawals []*types.Withdrawal if conf := g.Config; conf != nil { num := big.NewInt(int64(g.Number)) - if conf.IsShanghai(num, g.Timestamp) { + if conf.Parlia == nil && conf.IsShanghai(num, g.Timestamp) { head.WithdrawalsHash = &types.EmptyWithdrawalsHash withdrawals = make([]*types.Withdrawal, 0) } diff --git a/core/vm/jump_table.go b/core/vm/jump_table.go index 702b186615..38a0a76539 100644 --- a/core/vm/jump_table.go +++ b/core/vm/jump_table.go @@ -90,7 +90,7 @@ func newCancunInstructionSet() JumpTable { } func newShanghaiInstructionSet() JumpTable { - instructionSet := newMergeInstructionSet() + instructionSet := newLondonInstructionSet() enable3855(&instructionSet) // PUSH0 instruction enable3860(&instructionSet) // Limit and meter initcode diff --git a/eth/filters/filter_test.go b/eth/filters/filter_test.go index dfd988e04e..aca70d99ed 100644 --- a/eth/filters/filter_test.go +++ b/eth/filters/filter_test.go @@ -118,42 +118,40 @@ func TestFilters(t *testing.T) { contract = common.Address{0xfe} contract2 = common.Address{0xff} abiStr = `[{"inputs":[],"name":"log0","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"t1","type":"uint256"}],"name":"log1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"t1","type":"uint256"},{"internalType":"uint256","name":"t2","type":"uint256"}],"name":"log2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"t1","type":"uint256"},{"internalType":"uint256","name":"t2","type":"uint256"},{"internalType":"uint256","name":"t3","type":"uint256"}],"name":"log3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"t1","type":"uint256"},{"internalType":"uint256","name":"t2","type":"uint256"},{"internalType":"uint256","name":"t3","type":"uint256"},{"internalType":"uint256","name":"t4","type":"uint256"}],"name":"log4","outputs":[],"stateMutability":"nonpayable","type":"function"}]` - // BaseFee in BSC is 0 now, use 1Gwei instead for test here to avoid 0 gasPrice - gasPrice1Gwei = big.NewInt(params.GWei) /* // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; contract Logger { - function log0() external { - assembly { - log0(0, 0) - } - } + function log0() external { + assembly { + log0(0, 0) + } + } - function log1(uint t1) external { - assembly { - log1(0, 0, t1) - } - } + function log1(uint t1) external { + assembly { + log1(0, 0, t1) + } + } - function log2(uint t1, uint t2) external { - assembly { - log2(0, 0, t1, t2) - } - } + function log2(uint t1, uint t2) external { + assembly { + log2(0, 0, t1, t2) + } + } - function log3(uint t1, uint t2, uint t3) external { - assembly { - log3(0, 0, t1, t2, t3) - } - } + function log3(uint t1, uint t2, uint t3) external { + assembly { + log3(0, 0, t1, t2, t3) + } + } - function log4(uint t1, uint t2, uint t3, uint t4) external { - assembly { - log4(0, 0, t1, t2, t3, t4) - } - } + function log4(uint t1, uint t2, uint t3, uint t4) external { + assembly { + log4(0, 0, t1, t2, t3, t4) + } + } } */ bytecode = common.FromHex("608060405234801561001057600080fd5b50600436106100575760003560e01c80630aa731851461005c5780632a4c08961461006657806378b9a1f314610082578063c670f8641461009e578063c683d6a3146100ba575b600080fd5b6100646100d6565b005b610080600480360381019061007b9190610143565b6100dc565b005b61009c60048036038101906100979190610196565b6100e8565b005b6100b860048036038101906100b391906101d6565b6100f2565b005b6100d460048036038101906100cf9190610203565b6100fa565b005b600080a0565b808284600080a3505050565b8082600080a25050565b80600080a150565b80828486600080a450505050565b600080fd5b6000819050919050565b6101208161010d565b811461012b57600080fd5b50565b60008135905061013d81610117565b92915050565b60008060006060848603121561015c5761015b610108565b5b600061016a8682870161012e565b935050602061017b8682870161012e565b925050604061018c8682870161012e565b9150509250925092565b600080604083850312156101ad576101ac610108565b5b60006101bb8582860161012e565b92505060206101cc8582860161012e565b9150509250929050565b6000602082840312156101ec576101eb610108565b5b60006101fa8482850161012e565b91505092915050565b6000806000806080858703121561021d5761021c610108565b5b600061022b8782880161012e565b945050602061023c8782880161012e565b935050604061024d8782880161012e565b925050606061025e8782880161012e565b9150509295919450925056fea264697066735822122073a4b156f487e59970dc1ef449cc0d51467268f676033a17188edafcee861f9864736f6c63430008110033") @@ -171,9 +169,7 @@ func TestFilters(t *testing.T) { contract: {Balance: big.NewInt(0), Code: bytecode}, contract2: {Balance: big.NewInt(0), Code: bytecode}, }, - // Ethereum's InitialBaseFee is 1000000000, while BSC is 0, here is to fix CI - // BaseFee: big.NewInt(params.InitialBaseFee), - BaseFee: gasPrice1Gwei, + BaseFee: big.NewInt(params.InitialBaseFeeForEthMainnet), } ) @@ -197,7 +193,7 @@ func TestFilters(t *testing.T) { } tx, _ := types.SignTx(types.NewTx(&types.LegacyTx{ Nonce: 0, - GasPrice: gasPrice1Gwei, + GasPrice: gen.BaseFee(), Gas: 30000, To: &contract, Data: data, @@ -205,7 +201,7 @@ func TestFilters(t *testing.T) { gen.AddTx(tx) tx2, _ := types.SignTx(types.NewTx(&types.LegacyTx{ Nonce: 1, - GasPrice: gasPrice1Gwei, + GasPrice: gen.BaseFee(), Gas: 30000, To: &contract2, Data: data, @@ -218,7 +214,7 @@ func TestFilters(t *testing.T) { } tx, _ := types.SignTx(types.NewTx(&types.LegacyTx{ Nonce: 2, - GasPrice: gasPrice1Gwei, + GasPrice: gen.BaseFee(), Gas: 30000, To: &contract, Data: data, @@ -231,7 +227,7 @@ func TestFilters(t *testing.T) { } tx, _ := types.SignTx(types.NewTx(&types.LegacyTx{ Nonce: 3, - GasPrice: gasPrice1Gwei, + GasPrice: gen.BaseFee(), Gas: 30000, To: &contract2, Data: data, @@ -244,7 +240,7 @@ func TestFilters(t *testing.T) { } tx, _ := types.SignTx(types.NewTx(&types.LegacyTx{ Nonce: 4, - GasPrice: gasPrice1Gwei, + GasPrice: gen.BaseFee(), Gas: 30000, To: &contract, Data: data, @@ -290,61 +286,74 @@ func TestFilters(t *testing.T) { }{ { f: sys.NewBlockFilter(chain[2].Hash(), []common.Address{contract}, nil), - want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0x0dc0e230687c0b67421b862b6ac7af9d21c157fd5f41d35266bf148f21c754b4","transactionIndex":"0x0","blockHash":"0x552c4d4884746b710049d85c8d6e3c420ff021ff65244672fcdcd82154c9292b","logIndex":"0x0","removed":false}]`, - }, { + want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xdefe471992a07a02acdfbe33edaae22fbb86d7d3cec3f1b8e4e77702fb3acc1d","transactionIndex":"0x0","blockHash":"0x7a7556792ca7d37882882e2b001fe14833eaf81c2c7f865c9c771ec37a024f6b","logIndex":"0x0","removed":false}]`, + }, + { f: sys.NewRangeFilter(0, int64(rpc.LatestBlockNumber), []common.Address{contract}, [][]common.Hash{{hash1, hash2, hash3, hash4}}, false), - want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0x251cd3065f17245a0a6d528d74ae8bd6f008813e19319d14154bfda99b2e742d","transactionIndex":"0x0","blockHash":"0x41f1a563f54d6ce4330db1ad87c51b8ac3b68b9379e35b51e8c5e9b030b1f1b1","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0x0dc0e230687c0b67421b862b6ac7af9d21c157fd5f41d35266bf148f21c754b4","transactionIndex":"0x0","blockHash":"0x552c4d4884746b710049d85c8d6e3c420ff021ff65244672fcdcd82154c9292b","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x71bbc18e2797e26e27fef2e9dd6a65e1eff6421735e9568ea805fc4a57f20482","transactionIndex":"0x0","blockHash":"0x7f0be2e908e7a6b2bcbab9dc574a9050338ed6c6db592bd97be21d4f1a69518a","logIndex":"0x0","removed":false}]`, - }, { + want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0xa8028c655b6423204c8edfbc339f57b042d6bec2b6a61145d76b7c08b4cccd42","transactionIndex":"0x0","blockHash":"0x24417bb49ce44cfad65da68f33b510bf2a129c0d89ccf06acb6958b8585ccf34","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xdefe471992a07a02acdfbe33edaae22fbb86d7d3cec3f1b8e4e77702fb3acc1d","transactionIndex":"0x0","blockHash":"0x7a7556792ca7d37882882e2b001fe14833eaf81c2c7f865c9c771ec37a024f6b","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x9a87842100a638dfa5da8842b4beda691d2fd77b0c84b57f24ecfa9fb208f747","transactionIndex":"0x0","blockHash":"0xb360bad5265261c075ece02d3bf0e39498a6a76310482cdfd90588748e6c5ee0","logIndex":"0x0","removed":false}]`, + }, + { f: sys.NewRangeFilter(900, 999, []common.Address{contract}, [][]common.Hash{{hash3}}, false), - }, { + }, + { f: sys.NewRangeFilter(990, int64(rpc.LatestBlockNumber), []common.Address{contract2}, [][]common.Hash{{hash3}}, false), - want: `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0xcaea5cabe64d59ac0c74ca2eed41b1ef36dc996415ca085396d0f5acb0094935","transactionIndex":"0x0","blockHash":"0xf926a72aac711b12c385bdb7e935c49c3b77b4a857e4c924d9bfcf940694f3c1","logIndex":"0x0","removed":false}]`, - }, { + want: `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0x53e3675800c6908424b61b35a44e51ca4c73ca603e58a65b32c67968b4f42200","transactionIndex":"0x0","blockHash":"0x2e4620a2b426b0612ec6cad9603f466723edaed87f98c9137405dd4f7a2409ff","logIndex":"0x0","removed":false}]`, + }, + { f: sys.NewRangeFilter(1, 10, []common.Address{contract}, [][]common.Hash{{hash2}, {hash1}}, false), - want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0x0dc0e230687c0b67421b862b6ac7af9d21c157fd5f41d35266bf148f21c754b4","transactionIndex":"0x0","blockHash":"0x552c4d4884746b710049d85c8d6e3c420ff021ff65244672fcdcd82154c9292b","logIndex":"0x0","removed":false}]`, - }, { + want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xdefe471992a07a02acdfbe33edaae22fbb86d7d3cec3f1b8e4e77702fb3acc1d","transactionIndex":"0x0","blockHash":"0x7a7556792ca7d37882882e2b001fe14833eaf81c2c7f865c9c771ec37a024f6b","logIndex":"0x0","removed":false}]`, + }, + { f: sys.NewRangeFilter(1, 10, nil, [][]common.Hash{{hash1, hash2}}, false), - want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0x251cd3065f17245a0a6d528d74ae8bd6f008813e19319d14154bfda99b2e742d","transactionIndex":"0x0","blockHash":"0x41f1a563f54d6ce4330db1ad87c51b8ac3b68b9379e35b51e8c5e9b030b1f1b1","logIndex":"0x0","removed":false},{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0x7afd31c9d543a1056ca2d35ce106408f1cb925546fc3a97f337122ca5a9e515e","transactionIndex":"0x1","blockHash":"0x41f1a563f54d6ce4330db1ad87c51b8ac3b68b9379e35b51e8c5e9b030b1f1b1","logIndex":"0x1","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0x0dc0e230687c0b67421b862b6ac7af9d21c157fd5f41d35266bf148f21c754b4","transactionIndex":"0x0","blockHash":"0x552c4d4884746b710049d85c8d6e3c420ff021ff65244672fcdcd82154c9292b","logIndex":"0x0","removed":false}]`, - }, { + want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0xa8028c655b6423204c8edfbc339f57b042d6bec2b6a61145d76b7c08b4cccd42","transactionIndex":"0x0","blockHash":"0x24417bb49ce44cfad65da68f33b510bf2a129c0d89ccf06acb6958b8585ccf34","logIndex":"0x0","removed":false},{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0xdba3e2ea9a7d690b722d70ee605fd67ba4c00d1d3aecd5cf187a7b92ad8eb3df","transactionIndex":"0x1","blockHash":"0x24417bb49ce44cfad65da68f33b510bf2a129c0d89ccf06acb6958b8585ccf34","logIndex":"0x1","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xdefe471992a07a02acdfbe33edaae22fbb86d7d3cec3f1b8e4e77702fb3acc1d","transactionIndex":"0x0","blockHash":"0x7a7556792ca7d37882882e2b001fe14833eaf81c2c7f865c9c771ec37a024f6b","logIndex":"0x0","removed":false}]`, + }, + { f: sys.NewRangeFilter(0, int64(rpc.LatestBlockNumber), nil, [][]common.Hash{{common.BytesToHash([]byte("fail"))}}, false), - }, { + }, + { f: sys.NewRangeFilter(0, int64(rpc.LatestBlockNumber), []common.Address{common.BytesToAddress([]byte("failmenow"))}, nil, false), - }, { + }, + { f: sys.NewRangeFilter(0, int64(rpc.LatestBlockNumber), nil, [][]common.Hash{{common.BytesToHash([]byte("fail"))}, {hash1}}, false), - }, { + }, + { f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.LatestBlockNumber), nil, nil, false), - want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x71bbc18e2797e26e27fef2e9dd6a65e1eff6421735e9568ea805fc4a57f20482","transactionIndex":"0x0","blockHash":"0x7f0be2e908e7a6b2bcbab9dc574a9050338ed6c6db592bd97be21d4f1a69518a","logIndex":"0x0","removed":false}]`, + want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x9a87842100a638dfa5da8842b4beda691d2fd77b0c84b57f24ecfa9fb208f747","transactionIndex":"0x0","blockHash":"0xb360bad5265261c075ece02d3bf0e39498a6a76310482cdfd90588748e6c5ee0","logIndex":"0x0","removed":false}]`, }, /* - // BSC's finalize logic is different from Ethereum, it is achieved from snapshot, no SetFinalized - // So skip finality related cases { f: sys.NewRangeFilter(int64(rpc.FinalizedBlockNumber), int64(rpc.LatestBlockNumber), nil, nil, false), - want: `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0xcaea5cabe64d59ac0c74ca2eed41b1ef36dc996415ca085396d0f5acb0094935","transactionIndex":"0x0","blockHash":"0xf926a72aac711b12c385bdb7e935c49c3b77b4a857e4c924d9bfcf940694f3c1","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x71bbc18e2797e26e27fef2e9dd6a65e1eff6421735e9568ea805fc4a57f20482","transactionIndex":"0x0","blockHash":"0x7f0be2e908e7a6b2bcbab9dc574a9050338ed6c6db592bd97be21d4f1a69518a","logIndex":"0x0","removed":false}]`, + want: `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0x53e3675800c6908424b61b35a44e51ca4c73ca603e58a65b32c67968b4f42200","transactionIndex":"0x0","blockHash":"0x2e4620a2b426b0612ec6cad9603f466723edaed87f98c9137405dd4f7a2409ff","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x9a87842100a638dfa5da8842b4beda691d2fd77b0c84b57f24ecfa9fb208f747","transactionIndex":"0x0","blockHash":"0xb360bad5265261c075ece02d3bf0e39498a6a76310482cdfd90588748e6c5ee0","logIndex":"0x0","removed":false}]`, }, { f: sys.NewRangeFilter(int64(rpc.FinalizedBlockNumber), int64(rpc.FinalizedBlockNumber), nil, nil, false), - want: `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0xcaea5cabe64d59ac0c74ca2eed41b1ef36dc996415ca085396d0f5acb0094935","transactionIndex":"0x0","blockHash":"0xf926a72aac711b12c385bdb7e935c49c3b77b4a857e4c924d9bfcf940694f3c1","logIndex":"0x0","removed":false}]`, - }, { - f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.FinalizedBlockNumber), nil, nil, false), - }, { - f: sys.NewRangeFilter(int64(rpc.SafeBlockNumber), int64(rpc.LatestBlockNumber), nil, nil, false), + want: `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0x53e3675800c6908424b61b35a44e51ca4c73ca603e58a65b32c67968b4f42200","transactionIndex":"0x0","blockHash":"0x2e4620a2b426b0612ec6cad9603f466723edaed87f98c9137405dd4f7a2409ff","logIndex":"0x0","removed":false}]`, + }, + { + f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.FinalizedBlockNumber), nil, nil), + }, + { + f: sys.NewRangeFilter(int64(rpc.SafeBlockNumber), int64(rpc.LatestBlockNumber), nil, nil), err: "safe header not found", - }, { - f: sys.NewRangeFilter(int64(rpc.SafeBlockNumber), int64(rpc.SafeBlockNumber), nil, nil, false), + }, + { + f: sys.NewRangeFilter(int64(rpc.SafeBlockNumber), int64(rpc.SafeBlockNumber), nil, nil), err: "safe header not found", - }, { - f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.SafeBlockNumber), nil, nil, false), + }, + { + f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.SafeBlockNumber), nil, nil), err: "safe header not found", }, */ { f: sys.NewRangeFilter(int64(rpc.PendingBlockNumber), int64(rpc.PendingBlockNumber), nil, nil, false), - want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696335"],"data":"0x","blockNumber":"0x3e9","transactionHash":"0xb2bb61fcb8a26dae28e833ba97e2e87cfb8d3dcdfe77f9375b8a5a2e62a890e9","transactionIndex":"0x0","blockHash":"0x53a4ca36e4e3108ce28f140f80327c4851a5eb5717abd8324d3bb6fc07fdc328","logIndex":"0x0","removed":false}]`, - }, { + want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696335"],"data":"0x","blockNumber":"0x3e9","transactionHash":"0x4110587c1b8d86edc85dce929a34127f1cb8809515a9f177c91c866de3eb0638","transactionIndex":"0x0","blockHash":"0xc7245899e5817f16fa99cf5ad2d9c1e4b98443a565a673ec9c764640443ef037","logIndex":"0x0","removed":false}]`, + }, + { f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.PendingBlockNumber), nil, nil, false), - want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x71bbc18e2797e26e27fef2e9dd6a65e1eff6421735e9568ea805fc4a57f20482","transactionIndex":"0x0","blockHash":"0x7f0be2e908e7a6b2bcbab9dc574a9050338ed6c6db592bd97be21d4f1a69518a","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696335"],"data":"0x","blockNumber":"0x3e9","transactionHash":"0xb2bb61fcb8a26dae28e833ba97e2e87cfb8d3dcdfe77f9375b8a5a2e62a890e9","transactionIndex":"0x0","blockHash":"0x53a4ca36e4e3108ce28f140f80327c4851a5eb5717abd8324d3bb6fc07fdc328","logIndex":"0x0","removed":false}]`, - }, { + want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x9a87842100a638dfa5da8842b4beda691d2fd77b0c84b57f24ecfa9fb208f747","transactionIndex":"0x0","blockHash":"0xb360bad5265261c075ece02d3bf0e39498a6a76310482cdfd90588748e6c5ee0","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696335"],"data":"0x","blockNumber":"0x3e9","transactionHash":"0x4110587c1b8d86edc85dce929a34127f1cb8809515a9f177c91c866de3eb0638","transactionIndex":"0x0","blockHash":"0xc7245899e5817f16fa99cf5ad2d9c1e4b98443a565a673ec9c764640443ef037","logIndex":"0x0","removed":false}]`, + }, + { f: sys.NewRangeFilter(int64(rpc.PendingBlockNumber), int64(rpc.LatestBlockNumber), nil, nil, false), err: "invalid block range", }, diff --git a/params/config.go b/params/config.go index 6476d2b760..79887de102 100644 --- a/params/config.go +++ b/params/config.go @@ -530,7 +530,12 @@ func (c *ChainConfig) String() string { engine = "unknown" } - return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Ramanujan: %v, Niels: %v, MirrorSync: %v, Bruno: %v, Berlin: %v, YOLO v3: %v, CatalystBlock: %v, London: %v, ArrowGlacier: %v, MergeFork:%v, Euler: %v, Gibbs: %v, Nano: %v, Moran: %v, Planck: %v,Luban: %v, Plato: %v, Hertz: %v, Engine: %v}", + var ShanghaiTime *big.Int + if c.ShanghaiTime != nil { + 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}", c.ChainID, c.HomesteadBlock, c.DAOForkBlock, @@ -561,6 +566,7 @@ func (c *ChainConfig) String() string { c.LubanBlock, c.PlatoBlock, c.HertzBlock, + ShanghaiTime, engine, ) } diff --git a/tests/block_test.go b/tests/block_test.go index ad522ad653..1989c26816 100644 --- a/tests/block_test.go +++ b/tests/block_test.go @@ -30,7 +30,7 @@ func TestBlockchain(t *testing.T) { // For speedier CI-runs, the line below can be uncommented, so those are skipped. // For now, in hardfork-times (Berlin), we run the tests both as StateTests and // as blockchain tests, since the latter also covers things like receipt root - bt.skipLoad(`^GeneralStateTests/`) + // bt.skipLoad(`^GeneralStateTests/`) // Skip random failures due to selfish mining test bt.skipLoad(`.*bcForgedTest/bcForkUncle\.json`) @@ -49,6 +49,9 @@ func TestBlockchain(t *testing.T) { // using 4.6 TGas bt.skipLoad(`.*randomStatetest94.json.*`) + bt.runonly(`^GeneralStateTests/Shanghai`) + bt.runonly(`^Pyspecs/shanghai/eip3.*`) + bt.walk(t, blockTestDir, func(t *testing.T, name string, test *BlockTest) { if err := bt.checkFailure(t, test.Run(false, rawdb.HashScheme, nil)); err != nil { t.Errorf("test in hash mode without snapshotter failed: %v", err) diff --git a/tests/init_test.go b/tests/init_test.go index 7d8743efcc..46a0a86089 100644 --- a/tests/init_test.go +++ b/tests/init_test.go @@ -93,7 +93,7 @@ type testMatcher struct { failpat []testFailure skiploadpat []*regexp.Regexp slowpat []*regexp.Regexp - runonlylistpat *regexp.Regexp + runonlylistpat []*regexp.Regexp } type testConfig struct { @@ -127,7 +127,7 @@ func (tm *testMatcher) fails(pattern string, reason string) { } func (tm *testMatcher) runonly(pattern string) { - tm.runonlylistpat = regexp.MustCompile(pattern) + tm.runonlylistpat = append(tm.runonlylistpat, regexp.MustCompile(pattern)) } // config defines chain config for tests matching the pattern. @@ -220,7 +220,14 @@ func (tm *testMatcher) runTestFile(t *testing.T, path, name string, runTest inte t.Skip(r) } if tm.runonlylistpat != nil { - if !tm.runonlylistpat.MatchString(name) { + match := false + for _, pat := range tm.runonlylistpat { + if pat.MatchString(name) { + match = true + break + } + } + if !match { t.Skip("Skipped by runonly") } } diff --git a/tests/state_test.go b/tests/state_test.go index 094dafcafd..1e8341f298 100644 --- a/tests/state_test.go +++ b/tests/state_test.go @@ -68,6 +68,8 @@ func TestState(t *testing.T) { st.fails(`stEIP4844-blobtransactions/opcodeBlobhashOutOfRange.json`, "test has incorrect state root") st.fails(`stEIP4844-blobtransactions/opcodeBlobhBounds.json`, "test has incorrect state root") + st.runonly(`^Shanghai`) + // For Istanbul, older tests were moved into LegacyTests for _, dir := range []string{ filepath.Join(baseDir, "EIPTests", "StateTests"), diff --git a/tests/state_test_util.go b/tests/state_test_util.go index c1d48edc21..d058fbf188 100644 --- a/tests/state_test_util.go +++ b/tests/state_test_util.go @@ -300,7 +300,7 @@ func (t *StateTest) RunNoVerify(subtest StateSubtest, vmconfig vm.Config, snapsh // And _now_ get the state root root := statedb.IntermediateRoot(config.IsEIP158(block.Number())) statedb.SetExpectedStateRoot(root) - root, _, err = statedb.Commit(block.NumberU64(), nil) + root, _, _ = statedb.Commit(block.NumberU64(), nil) return triedb, snaps, statedb, root, err } diff --git a/trie/triedb/pathdb/database.go b/trie/triedb/pathdb/database.go index 167db6643d..2da9717984 100644 --- a/trie/triedb/pathdb/database.go +++ b/trie/triedb/pathdb/database.go @@ -172,7 +172,7 @@ func New(diskdb ethdb.Database, config *Config) *Database { // mechanism also ensures that at most one **non-readOnly** database // is opened at the same time to prevent accidental mutation. if ancient, err := diskdb.AncientDatadir(); err == nil && ancient != "" && !db.readOnly { - offset := uint64(0) //TODO(Nathan): just for passing compilation + offset := uint64(0) // differ from in block data, only metadata is used in state data freezer, err := rawdb.NewStateFreezer(ancient, false, offset) if err != nil { log.Crit("Failed to open state history freezer", "err", err) From cd0356b1065d752f64adae9283d6deb1382b0336 Mon Sep 17 00:00:00 2001 From: buddh0 Date: Tue, 7 Nov 2023 15:28:27 +0800 Subject: [PATCH 07/31] core/systemcontracts: include BEP-319 on kepler hardfork --- consensus/parlia/parlia.go | 3 +- core/chain_makers.go | 2 +- core/state_processor.go | 6 ++- core/systemcontracts/upgrade.go | 72 ++++++++++++++++++++++++++++++++- miner/worker.go | 2 +- params/config.go | 29 ++++++++++++- 6 files changed, 106 insertions(+), 8 deletions(-) diff --git a/consensus/parlia/parlia.go b/consensus/parlia/parlia.go index 9de8c28a99..f6be4a3199 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 f0026089ac..cc17cd74cd 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 5b6411d80f..25cb7df409 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 d644533a39..562020686d 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 ffade84a39..d1ea4f8034 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 79887de102..eb91a37ecd 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), From c92b6ce2ad998926a671d841ee9ae7804e04d618 Mon Sep 17 00:00:00 2001 From: Ng Wei Han <47109095+weiihann@users.noreply.github.com> Date: Sat, 25 Nov 2023 20:57:23 +0800 Subject: [PATCH 08/31] cmd/utils: exit process if txlookuplimit flag is set (#2000) --- README.md | 6 +++--- cmd/utils/flags.go | 6 ++---- log/root.go | 2 ++ tests/truffle/scripts/bsc-rpc.sh | 2 +- tests/truffle/scripts/bsc-validator.sh | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 67099092db..381303ba2d 100644 --- a/README.md +++ b/README.md @@ -160,15 +160,15 @@ geth --datadir --state.scheme path init ./genesis.json ``` #### 4. Start a full node ```shell -./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --txlookuplimit 0 +./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 ## It is recommand to run fullnode with `--tries-verify-mode none` if you want high performance and care little about state consistency ## It will run with Hash-Base Storage Scheme by default -./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --txlookuplimit 0 --tries-verify-mode none +./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 --tries-verify-mode none ## It runs fullnode with Path-Base Storage Scheme. ## It will enable inline state prune, keeping the latest 90000 blocks' history state by default. -./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --txlookuplimit 0 --tries-verify-mode none --state.scheme path +./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 --tries-verify-mode none --state.scheme path ``` #### 5. Monitor node status diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 7c6ce0e6cb..406c5f7072 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -1948,14 +1948,12 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { // Parse transaction history flag, if user is still using legacy config // file with 'TxLookupLimit' configured, copy the value to 'TransactionHistory'. if cfg.TransactionHistory == ethconfig.Defaults.TransactionHistory && cfg.TxLookupLimit != ethconfig.Defaults.TxLookupLimit { - log.Warn("The config option 'TxLookupLimit' is deprecated and will be removed, please use 'TransactionHistory'") - cfg.TransactionHistory = cfg.TxLookupLimit + log.Crit("The config option 'TxLookupLimit' is deprecated and may cause unexpected performance degradation issues, please use 'TransactionHistory' instead") } if ctx.IsSet(TransactionHistoryFlag.Name) { cfg.TransactionHistory = ctx.Uint64(TransactionHistoryFlag.Name) } else if ctx.IsSet(TxLookupLimitFlag.Name) { - log.Warn("The flag --txlookuplimit is deprecated and will be removed, please use --history.transactions") - cfg.TransactionHistory = ctx.Uint64(TransactionHistoryFlag.Name) + log.Crit("The flag --txlookuplimit is deprecated and may cause unexpected performance degradation issues. Please use --history.transactions instead") } if ctx.IsSet(PathDBSyncFlag.Name) { cfg.PathSyncFlush = true diff --git a/log/root.go b/log/root.go index 5a41723c3e..c8893bf80c 100644 --- a/log/root.go +++ b/log/root.go @@ -2,6 +2,7 @@ package log import ( "os" + "time" ) var ( @@ -105,6 +106,7 @@ func Error(msg string, ctx ...interface{}) { // log.Crit("msg", "key1", val1, "key2", val2) func Crit(msg string, ctx ...interface{}) { root.write(msg, LvlCrit, ctx, skipLevel) + time.Sleep(3 * time.Second) os.Exit(1) } diff --git a/tests/truffle/scripts/bsc-rpc.sh b/tests/truffle/scripts/bsc-rpc.sh index 5367b807c1..43c811c787 100755 --- a/tests/truffle/scripts/bsc-rpc.sh +++ b/tests/truffle/scripts/bsc-rpc.sh @@ -12,5 +12,5 @@ done geth --config ${DATA_DIR}/config.toml --datadir ${DATA_DIR} --netrestrict ${CLUSTER_CIDR} \ --verbosity ${VERBOSE} --nousb \ - --rpc.allow-unprotected-txs --txlookuplimit 15768000 \ + --rpc.allow-unprotected-txs --history.transactions 15768000 \ -unlock ${unlock_sequences} --password /dev/null diff --git a/tests/truffle/scripts/bsc-validator.sh b/tests/truffle/scripts/bsc-validator.sh index 4605a867a7..16b8c2ed57 100755 --- a/tests/truffle/scripts/bsc-validator.sh +++ b/tests/truffle/scripts/bsc-validator.sh @@ -15,4 +15,4 @@ geth --config ${DATA_DIR}/config.toml --datadir ${DATA_DIR} --netrestrict ${CLUS --bootnodes enode://${BOOTSTRAP_PUB_KEY}@${BOOTSTRAP_IP}:${BOOTSTRAP_TCP_PORT} \ --mine -unlock ${VALIDATOR_ADDR} --miner.etherbase ${VALIDATOR_ADDR} --password /dev/null \ --light.serve 50 \ - --rpc.allow-unprotected-txs --txlookuplimit 15768000 + --rpc.allow-unprotected-txs --history.transactions 15768000 From 789442372d9cf6517de395bb324109b68d1c4ddb Mon Sep 17 00:00:00 2001 From: buddho Date: Tue, 28 Nov 2023 13:56:01 +0800 Subject: [PATCH 09/31] consensus/parlia: increase size of snapshot cache in parlia (#2007) --- consensus/parlia/parlia.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/consensus/parlia/parlia.go b/consensus/parlia/parlia.go index f6be4a3199..e12594ae90 100644 --- a/consensus/parlia/parlia.go +++ b/consensus/parlia/parlia.go @@ -48,7 +48,7 @@ import ( ) const ( - inMemorySnapshots = 128 // Number of recent snapshots to keep in memory + inMemorySnapshots = 256 // Number of recent snapshots to keep in memory inMemorySignatures = 4096 // Number of recent block signatures to keep in memory checkpointInterval = 1024 // Number of blocks after which to save the snapshot to the database From 1edb34fd6751d0e4d0628d7bdb28bff371d48b7b Mon Sep 17 00:00:00 2001 From: buddho Date: Tue, 28 Nov 2023 14:03:05 +0800 Subject: [PATCH 10/31] consensus/parlia: recover faster when snapshot of parlia is gone in disk (#2008) --- consensus/parlia/parlia.go | 10 ++++++---- consensus/parlia/snapshot.go | 3 +++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/consensus/parlia/parlia.go b/consensus/parlia/parlia.go index e12594ae90..a8643cc732 100644 --- a/consensus/parlia/parlia.go +++ b/consensus/parlia/parlia.go @@ -680,7 +680,7 @@ func (p *Parlia) snapshot(chain consensus.ChainHeaderReader, number uint64, hash // If we're at the genesis, snapshot the initial state. Alternatively if we have // piled up more headers than allowed to be reorged (chain reinit from a freezer), // consider the checkpoint trusted and snapshot it. - if number == 0 || (number%p.config.Epoch == 0 && (len(headers) > params.FullImmutabilityThreshold)) { + if number == 0 || (number%p.config.Epoch == 0 && (len(headers) > params.FullImmutabilityThreshold/10)) { checkpoint := chain.GetHeaderByNumber(number) if checkpoint != nil { // get checkpoint data @@ -694,10 +694,12 @@ func (p *Parlia) snapshot(chain consensus.ChainHeaderReader, number uint64, hash // new snapshot snap = newSnapshot(p.config, p.signatures, number, hash, validators, voteAddrs, p.ethAPI) - if err := snap.store(p.db); err != nil { - return nil, err + if snap.Number%checkpointInterval == 0 { // snapshot will only be loaded when snap.Number%checkpointInterval == 0 + if err := snap.store(p.db); err != nil { + return nil, err + } + log.Info("Stored checkpoint snapshot to disk", "number", number, "hash", hash) } - log.Info("Stored checkpoint snapshot to disk", "number", number, "hash", hash) break } } diff --git a/consensus/parlia/snapshot.go b/consensus/parlia/snapshot.go index a7bf16877e..ddfb1811fc 100644 --- a/consensus/parlia/snapshot.go +++ b/consensus/parlia/snapshot.go @@ -199,6 +199,9 @@ func (s *Snapshot) updateAttestation(header *types.Header, chainConfig *params.C } // Update attestation + // Two scenarios for s.Attestation being nil: + // 1) The first attestation is assembled. + // 2) The snapshot on disk is missing, prompting the creation of a new snapshot using `newSnapshot`. if s.Attestation != nil && attestation.Data.SourceNumber+1 != attestation.Data.TargetNumber { s.Attestation.TargetNumber = attestation.Data.TargetNumber s.Attestation.TargetHash = attestation.Data.TargetHash From 8e19728ea7ee00fed77e0b37a9488102e2c238eb Mon Sep 17 00:00:00 2001 From: "larry.lx" Date: Wed, 29 Nov 2023 12:37:43 +0800 Subject: [PATCH 11/31] fix: remove sharedPool --- CHANGELOG.md | 4 ++++ core/state_prefetcher.go | 8 ++++++-- params/version.go | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca6c999577..36dbe9b348 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ # Changelog +## v1.3.2 +BUGFIX +fix: remove sharedPool + ## v1.3.1 FEATURE * [\#1881](https://github.com/bnb-chain/bsc/pull/1881) feat: active pbss diff --git a/core/state_prefetcher.go b/core/state_prefetcher.go index f1bb60febd..12e90998f2 100644 --- a/core/state_prefetcher.go +++ b/core/state_prefetcher.go @@ -59,7 +59,9 @@ func (p *statePrefetcher) Prefetch(block *types.Block, statedb *state.StateDB, c for i := 0; i < prefetchThread; i++ { go func() { newStatedb := statedb.CopyDoPrefetch() - newStatedb.EnableWriteOnSharedStorage() + if header.Number.Uint64() < 33968300 { + newStatedb.EnableWriteOnSharedStorage() + } gaspool := new(GasPool).AddGas(block.GasLimit()) blockContext := NewEVMBlockContext(header, p.bc, nil) evm := vm.NewEVM(blockContext, vm.TxContext{}, statedb, p.config, *cfg) @@ -106,7 +108,9 @@ func (p *statePrefetcher) PrefetchMining(txs TransactionsByPriceAndNonce, header go func(startCh <-chan *types.Transaction, stopCh <-chan struct{}) { idx := 0 newStatedb := statedb.CopyDoPrefetch() - newStatedb.EnableWriteOnSharedStorage() + if header.Number.Uint64() < 33968300 { + newStatedb.EnableWriteOnSharedStorage() + } gaspool := new(GasPool).AddGas(gasLimit) blockContext := NewEVMBlockContext(header, p.bc, nil) evm := vm.NewEVM(blockContext, vm.TxContext{}, statedb, p.config, cfg) diff --git a/params/version.go b/params/version.go index 4f356fe345..b0aa560d4d 100644 --- a/params/version.go +++ b/params/version.go @@ -23,7 +23,7 @@ import ( const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 3 // Minor version component of the current release - VersionPatch = 1 // Patch version component of the current release + VersionPatch = 2 // Patch version component of the current release VersionMeta = "" // Version metadata to append to the version string ) From 3ce568ff443c90f96e69adc09335fbe16a6085e6 Mon Sep 17 00:00:00 2001 From: Ng Wei Han <47109095+weiihann@users.noreply.github.com> Date: Tue, 14 Nov 2023 20:10:41 +0800 Subject: [PATCH 12/31] fix(cmd): check pruneancient when creating db (#1986) --- cmd/utils/flags.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 36455d86b2..7c6ce0e6cb 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -2355,7 +2355,7 @@ func tryMakeReadOnlyDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database // If datadir doesn't exist we need to open db in write-mode // so database engine can create files. readonly := true - if !common.FileExist(stack.ResolvePath("chaindata")) { + if !common.FileExist(stack.ResolvePath("chaindata")) || ctx.Bool(PruneAncientDataFlag.Name) { readonly = false } return MakeChainDatabase(ctx, stack, readonly, false) From cf80501de591a1b27ff05f7e100e146009a8609f Mon Sep 17 00:00:00 2001 From: Ng Wei Han <47109095+weiihann@users.noreply.github.com> Date: Sat, 25 Nov 2023 20:57:23 +0800 Subject: [PATCH 13/31] cmd/utils: exit process if txlookuplimit flag is set (#2000) --- README.md | 5 ++--- cmd/utils/flags.go | 6 ++---- log/root.go | 2 ++ tests/truffle/scripts/bsc-rpc.sh | 2 +- tests/truffle/scripts/bsc-validator.sh | 2 +- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index f198c999ed..b699953303 100644 --- a/README.md +++ b/README.md @@ -153,11 +153,10 @@ Note: if you can not download the chaindata snapshot and want to sync from genes So just run: `geth --datadir init ./genesis.json` #### 4. Start a full node ```shell -./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --txlookuplimit 0 +./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 ## It is recommand to run fullnode with `--tries-verify-mode none` if you want high performance and care little about state consistency -./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --txlookuplimit 0 --tries-verify-mode none -``` +./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 --tries-verify-mode none #### 5. Monitor node status diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 7c6ce0e6cb..406c5f7072 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -1948,14 +1948,12 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { // Parse transaction history flag, if user is still using legacy config // file with 'TxLookupLimit' configured, copy the value to 'TransactionHistory'. if cfg.TransactionHistory == ethconfig.Defaults.TransactionHistory && cfg.TxLookupLimit != ethconfig.Defaults.TxLookupLimit { - log.Warn("The config option 'TxLookupLimit' is deprecated and will be removed, please use 'TransactionHistory'") - cfg.TransactionHistory = cfg.TxLookupLimit + log.Crit("The config option 'TxLookupLimit' is deprecated and may cause unexpected performance degradation issues, please use 'TransactionHistory' instead") } if ctx.IsSet(TransactionHistoryFlag.Name) { cfg.TransactionHistory = ctx.Uint64(TransactionHistoryFlag.Name) } else if ctx.IsSet(TxLookupLimitFlag.Name) { - log.Warn("The flag --txlookuplimit is deprecated and will be removed, please use --history.transactions") - cfg.TransactionHistory = ctx.Uint64(TransactionHistoryFlag.Name) + log.Crit("The flag --txlookuplimit is deprecated and may cause unexpected performance degradation issues. Please use --history.transactions instead") } if ctx.IsSet(PathDBSyncFlag.Name) { cfg.PathSyncFlush = true diff --git a/log/root.go b/log/root.go index 5a41723c3e..c8893bf80c 100644 --- a/log/root.go +++ b/log/root.go @@ -2,6 +2,7 @@ package log import ( "os" + "time" ) var ( @@ -105,6 +106,7 @@ func Error(msg string, ctx ...interface{}) { // log.Crit("msg", "key1", val1, "key2", val2) func Crit(msg string, ctx ...interface{}) { root.write(msg, LvlCrit, ctx, skipLevel) + time.Sleep(3 * time.Second) os.Exit(1) } diff --git a/tests/truffle/scripts/bsc-rpc.sh b/tests/truffle/scripts/bsc-rpc.sh index 5367b807c1..43c811c787 100755 --- a/tests/truffle/scripts/bsc-rpc.sh +++ b/tests/truffle/scripts/bsc-rpc.sh @@ -12,5 +12,5 @@ done geth --config ${DATA_DIR}/config.toml --datadir ${DATA_DIR} --netrestrict ${CLUSTER_CIDR} \ --verbosity ${VERBOSE} --nousb \ - --rpc.allow-unprotected-txs --txlookuplimit 15768000 \ + --rpc.allow-unprotected-txs --history.transactions 15768000 \ -unlock ${unlock_sequences} --password /dev/null diff --git a/tests/truffle/scripts/bsc-validator.sh b/tests/truffle/scripts/bsc-validator.sh index 4605a867a7..16b8c2ed57 100755 --- a/tests/truffle/scripts/bsc-validator.sh +++ b/tests/truffle/scripts/bsc-validator.sh @@ -15,4 +15,4 @@ geth --config ${DATA_DIR}/config.toml --datadir ${DATA_DIR} --netrestrict ${CLUS --bootnodes enode://${BOOTSTRAP_PUB_KEY}@${BOOTSTRAP_IP}:${BOOTSTRAP_TCP_PORT} \ --mine -unlock ${VALIDATOR_ADDR} --miner.etherbase ${VALIDATOR_ADDR} --password /dev/null \ --light.serve 50 \ - --rpc.allow-unprotected-txs --txlookuplimit 15768000 + --rpc.allow-unprotected-txs --history.transactions 15768000 From c409eb6ac6a5c65ed85d889d7630064760ab7f67 Mon Sep 17 00:00:00 2001 From: "larry.lx" Date: Thu, 30 Nov 2023 09:35:50 +0800 Subject: [PATCH 14/31] release: draft v1.3.3 --- CHANGELOG.md | 7 +++++++ params/version.go | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36dbe9b348..e8c70718a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,11 @@ # Changelog +## v1.3.3 +IMPROVEMENT +* [\#2000](https://github.com/bnb-chain/bsc/pull/2000) cmd/utils: exit process if txlookuplimit flag is set + +BUGFIX +* [\#1986](https://github.com/bnb-chain/bsc/pull/1986) fix(cmd): check pruneancient when creating db + ## v1.3.2 BUGFIX fix: remove sharedPool diff --git a/params/version.go b/params/version.go index b0aa560d4d..49a5efbc3c 100644 --- a/params/version.go +++ b/params/version.go @@ -23,7 +23,7 @@ import ( const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 3 // Minor version component of the current release - VersionPatch = 2 // Patch version component of the current release + VersionPatch = 3 // Patch version component of the current release VersionMeta = "" // Version metadata to append to the version string ) From f7e9adc2c87787ed6e42d79d5b64cc9a1007fb0a Mon Sep 17 00:00:00 2001 From: "larry.lx" Date: Wed, 29 Nov 2023 12:37:43 +0800 Subject: [PATCH 15/31] fix: remove sharedPool --- CHANGELOG.md | 4 ++++ core/state_prefetcher.go | 8 ++++++-- params/version.go | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca6c999577..36dbe9b348 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ # Changelog +## v1.3.2 +BUGFIX +fix: remove sharedPool + ## v1.3.1 FEATURE * [\#1881](https://github.com/bnb-chain/bsc/pull/1881) feat: active pbss diff --git a/core/state_prefetcher.go b/core/state_prefetcher.go index f1bb60febd..12e90998f2 100644 --- a/core/state_prefetcher.go +++ b/core/state_prefetcher.go @@ -59,7 +59,9 @@ func (p *statePrefetcher) Prefetch(block *types.Block, statedb *state.StateDB, c for i := 0; i < prefetchThread; i++ { go func() { newStatedb := statedb.CopyDoPrefetch() - newStatedb.EnableWriteOnSharedStorage() + if header.Number.Uint64() < 33968300 { + newStatedb.EnableWriteOnSharedStorage() + } gaspool := new(GasPool).AddGas(block.GasLimit()) blockContext := NewEVMBlockContext(header, p.bc, nil) evm := vm.NewEVM(blockContext, vm.TxContext{}, statedb, p.config, *cfg) @@ -106,7 +108,9 @@ func (p *statePrefetcher) PrefetchMining(txs TransactionsByPriceAndNonce, header go func(startCh <-chan *types.Transaction, stopCh <-chan struct{}) { idx := 0 newStatedb := statedb.CopyDoPrefetch() - newStatedb.EnableWriteOnSharedStorage() + if header.Number.Uint64() < 33968300 { + newStatedb.EnableWriteOnSharedStorage() + } gaspool := new(GasPool).AddGas(gasLimit) blockContext := NewEVMBlockContext(header, p.bc, nil) evm := vm.NewEVM(blockContext, vm.TxContext{}, statedb, p.config, cfg) diff --git a/params/version.go b/params/version.go index 4f356fe345..b0aa560d4d 100644 --- a/params/version.go +++ b/params/version.go @@ -23,7 +23,7 @@ import ( const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 3 // Minor version component of the current release - VersionPatch = 1 // Patch version component of the current release + VersionPatch = 2 // Patch version component of the current release VersionMeta = "" // Version metadata to append to the version string ) From b494339e1052316ecc451a5ae28c258b2cc13abd Mon Sep 17 00:00:00 2001 From: Ng Wei Han <47109095+weiihann@users.noreply.github.com> Date: Tue, 14 Nov 2023 20:10:41 +0800 Subject: [PATCH 16/31] fix(cmd): check pruneancient when creating db (#1986) --- cmd/utils/flags.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 36455d86b2..7c6ce0e6cb 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -2355,7 +2355,7 @@ func tryMakeReadOnlyDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database // If datadir doesn't exist we need to open db in write-mode // so database engine can create files. readonly := true - if !common.FileExist(stack.ResolvePath("chaindata")) { + if !common.FileExist(stack.ResolvePath("chaindata")) || ctx.Bool(PruneAncientDataFlag.Name) { readonly = false } return MakeChainDatabase(ctx, stack, readonly, false) From a3507cc2c119add44f4a22f5d62634a69fd17886 Mon Sep 17 00:00:00 2001 From: Ng Wei Han <47109095+weiihann@users.noreply.github.com> Date: Sat, 25 Nov 2023 20:57:23 +0800 Subject: [PATCH 17/31] cmd/utils: exit process if txlookuplimit flag is set (#2000) --- README.md | 5 ++--- cmd/utils/flags.go | 6 ++---- log/root.go | 2 ++ tests/truffle/scripts/bsc-rpc.sh | 2 +- tests/truffle/scripts/bsc-validator.sh | 2 +- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index f198c999ed..b699953303 100644 --- a/README.md +++ b/README.md @@ -153,11 +153,10 @@ Note: if you can not download the chaindata snapshot and want to sync from genes So just run: `geth --datadir init ./genesis.json` #### 4. Start a full node ```shell -./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --txlookuplimit 0 +./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 ## It is recommand to run fullnode with `--tries-verify-mode none` if you want high performance and care little about state consistency -./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --txlookuplimit 0 --tries-verify-mode none -``` +./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 --tries-verify-mode none #### 5. Monitor node status diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 7c6ce0e6cb..406c5f7072 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -1948,14 +1948,12 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { // Parse transaction history flag, if user is still using legacy config // file with 'TxLookupLimit' configured, copy the value to 'TransactionHistory'. if cfg.TransactionHistory == ethconfig.Defaults.TransactionHistory && cfg.TxLookupLimit != ethconfig.Defaults.TxLookupLimit { - log.Warn("The config option 'TxLookupLimit' is deprecated and will be removed, please use 'TransactionHistory'") - cfg.TransactionHistory = cfg.TxLookupLimit + log.Crit("The config option 'TxLookupLimit' is deprecated and may cause unexpected performance degradation issues, please use 'TransactionHistory' instead") } if ctx.IsSet(TransactionHistoryFlag.Name) { cfg.TransactionHistory = ctx.Uint64(TransactionHistoryFlag.Name) } else if ctx.IsSet(TxLookupLimitFlag.Name) { - log.Warn("The flag --txlookuplimit is deprecated and will be removed, please use --history.transactions") - cfg.TransactionHistory = ctx.Uint64(TransactionHistoryFlag.Name) + log.Crit("The flag --txlookuplimit is deprecated and may cause unexpected performance degradation issues. Please use --history.transactions instead") } if ctx.IsSet(PathDBSyncFlag.Name) { cfg.PathSyncFlush = true diff --git a/log/root.go b/log/root.go index 5a41723c3e..c8893bf80c 100644 --- a/log/root.go +++ b/log/root.go @@ -2,6 +2,7 @@ package log import ( "os" + "time" ) var ( @@ -105,6 +106,7 @@ func Error(msg string, ctx ...interface{}) { // log.Crit("msg", "key1", val1, "key2", val2) func Crit(msg string, ctx ...interface{}) { root.write(msg, LvlCrit, ctx, skipLevel) + time.Sleep(3 * time.Second) os.Exit(1) } diff --git a/tests/truffle/scripts/bsc-rpc.sh b/tests/truffle/scripts/bsc-rpc.sh index 5367b807c1..43c811c787 100755 --- a/tests/truffle/scripts/bsc-rpc.sh +++ b/tests/truffle/scripts/bsc-rpc.sh @@ -12,5 +12,5 @@ done geth --config ${DATA_DIR}/config.toml --datadir ${DATA_DIR} --netrestrict ${CLUSTER_CIDR} \ --verbosity ${VERBOSE} --nousb \ - --rpc.allow-unprotected-txs --txlookuplimit 15768000 \ + --rpc.allow-unprotected-txs --history.transactions 15768000 \ -unlock ${unlock_sequences} --password /dev/null diff --git a/tests/truffle/scripts/bsc-validator.sh b/tests/truffle/scripts/bsc-validator.sh index 4605a867a7..16b8c2ed57 100755 --- a/tests/truffle/scripts/bsc-validator.sh +++ b/tests/truffle/scripts/bsc-validator.sh @@ -15,4 +15,4 @@ geth --config ${DATA_DIR}/config.toml --datadir ${DATA_DIR} --netrestrict ${CLUS --bootnodes enode://${BOOTSTRAP_PUB_KEY}@${BOOTSTRAP_IP}:${BOOTSTRAP_TCP_PORT} \ --mine -unlock ${VALIDATOR_ADDR} --miner.etherbase ${VALIDATOR_ADDR} --password /dev/null \ --light.serve 50 \ - --rpc.allow-unprotected-txs --txlookuplimit 15768000 + --rpc.allow-unprotected-txs --history.transactions 15768000 From a8409158a5ee7817ae4973c9688e42b298a36b35 Mon Sep 17 00:00:00 2001 From: "larry.lx" Date: Thu, 30 Nov 2023 09:35:50 +0800 Subject: [PATCH 18/31] release: draft v1.3.3 --- CHANGELOG.md | 7 +++++++ params/version.go | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36dbe9b348..e8c70718a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,11 @@ # Changelog +## v1.3.3 +IMPROVEMENT +* [\#2000](https://github.com/bnb-chain/bsc/pull/2000) cmd/utils: exit process if txlookuplimit flag is set + +BUGFIX +* [\#1986](https://github.com/bnb-chain/bsc/pull/1986) fix(cmd): check pruneancient when creating db + ## v1.3.2 BUGFIX fix: remove sharedPool diff --git a/params/version.go b/params/version.go index b0aa560d4d..49a5efbc3c 100644 --- a/params/version.go +++ b/params/version.go @@ -23,7 +23,7 @@ import ( const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 3 // Minor version component of the current release - VersionPatch = 2 // Patch version component of the current release + VersionPatch = 3 // Patch version component of the current release VersionMeta = "" // Version metadata to append to the version string ) From 8b00720640aec6f979214a64d82481f9bc9e19e5 Mon Sep 17 00:00:00 2001 From: "larry.lx" Date: Fri, 1 Dec 2023 22:30:16 +0800 Subject: [PATCH 19/31] fix: remove pipecommit in miner --- miner/worker.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/miner/worker.go b/miner/worker.go index ffade84a39..6b4683b14f 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -1163,12 +1163,14 @@ func (w *worker) commit(env *environment, interval func(), update bool, start ti if interval != nil { interval() } + /* - err := env.state.WaitPipeVerification() - if err != nil { - return err - } - env.state.CorrectAccountsRoot(w.chain.CurrentBlock().Root) + err := env.state.WaitPipeVerification() + if err != nil { + return err + } + env.state.CorrectAccountsRoot(w.chain.CurrentBlock().Root) + */ // Withdrawals are set to nil here, because this is only called in PoW. finalizeStart := time.Now() From 761563155c788812c777c7230b0690a3083a2ce4 Mon Sep 17 00:00:00 2001 From: "larry.lx" Date: Mon, 4 Dec 2023 10:03:03 +0800 Subject: [PATCH 20/31] fork: add hardfork Hertzfix --- core/state_prefetcher.go | 4 ++-- params/config.go | 45 +++++++++++++++++++++++++++------------- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/core/state_prefetcher.go b/core/state_prefetcher.go index 12e90998f2..5e616b29e5 100644 --- a/core/state_prefetcher.go +++ b/core/state_prefetcher.go @@ -59,7 +59,7 @@ func (p *statePrefetcher) Prefetch(block *types.Block, statedb *state.StateDB, c for i := 0; i < prefetchThread; i++ { go func() { newStatedb := statedb.CopyDoPrefetch() - if header.Number.Uint64() < 33968300 { + if !p.config.IsHertzfix(header.Number) { newStatedb.EnableWriteOnSharedStorage() } gaspool := new(GasPool).AddGas(block.GasLimit()) @@ -108,7 +108,7 @@ func (p *statePrefetcher) PrefetchMining(txs TransactionsByPriceAndNonce, header go func(startCh <-chan *types.Transaction, stopCh <-chan struct{}) { idx := 0 newStatedb := statedb.CopyDoPrefetch() - if header.Number.Uint64() < 33968300 { + if !p.config.IsHertzfix(header.Number) { newStatedb.EnableWriteOnSharedStorage() } gaspool := new(GasPool).AddGas(gasLimit) diff --git a/params/config.go b/params/config.go index fc1f40e6de..93a0b83c1d 100644 --- a/params/config.go +++ b/params/config.go @@ -165,10 +165,10 @@ var ( LubanBlock: big.NewInt(29020050), PlatoBlock: big.NewInt(30720096), // TODO modify blockNumber, make sure HertzBlock=BerlinBlock=LondonBlock to enable Berlin and London EIPs - BerlinBlock: big.NewInt(31302048), - LondonBlock: big.NewInt(31302048), - HertzBlock: big.NewInt(31302048), - + BerlinBlock: big.NewInt(31302048), + LondonBlock: big.NewInt(31302048), + HertzBlock: big.NewInt(31302048), + HertzfixBlock: big.NewInt(34140700), Parlia: &ParliaConfig{ Period: 3, Epoch: 200, @@ -201,9 +201,10 @@ var ( LubanBlock: big.NewInt(29295050), PlatoBlock: big.NewInt(29861024), // TODO modify blockNumber, make sure HertzBlock=BerlinBlock=LondonBlock to enable Berlin and London EIPs - BerlinBlock: big.NewInt(31103030), - LondonBlock: big.NewInt(31103030), - HertzBlock: big.NewInt(31103030), + BerlinBlock: big.NewInt(31103030), + LondonBlock: big.NewInt(31103030), + HertzBlock: big.NewInt(31103030), + HertzfixBlock: big.NewInt(35682300), Parlia: &ParliaConfig{ Period: 3, @@ -233,10 +234,11 @@ var ( PlanckBlock: nil, // TODO - LubanBlock: nil, - PlatoBlock: nil, - BerlinBlock: nil, - HertzBlock: nil, + LubanBlock: nil, + PlatoBlock: nil, + BerlinBlock: nil, + HertzBlock: nil, + HertzfixBlock: nil, Parlia: &ParliaConfig{ Period: 3, @@ -269,7 +271,7 @@ var ( BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(0), HertzBlock: big.NewInt(0), - + HertzfixBlock: big.NewInt(0), Parlia: &ParliaConfig{ Period: 3, Epoch: 200, @@ -483,7 +485,7 @@ type ChainConfig struct { LubanBlock *big.Int `json:"lubanBlock,omitempty" toml:",omitempty"` // lubanBlock switch block (nil = no fork, 0 = already activated) PlatoBlock *big.Int `json:"platoBlock,omitempty" toml:",omitempty"` // platoBlock switch block (nil = no fork, 0 = already activated) HertzBlock *big.Int `json:"hertzBlock,omitempty" toml:",omitempty"` // hertzBlock switch block (nil = no fork, 0 = already activated) - + HertzfixBlock *big.Int `json:"hertzfixBlock,omitempty" toml:",omitempty"` // hertzfixBlock switch block (nil = no fork, 0 = already activated) // Various consensus engines Ethash *EthashConfig `json:"ethash,omitempty" toml:",omitempty"` Clique *CliqueConfig `json:"clique,omitempty" toml:",omitempty"` @@ -540,7 +542,7 @@ func (c *ChainConfig) String() string { engine = "unknown" } - return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Ramanujan: %v, Niels: %v, MirrorSync: %v, Bruno: %v, Berlin: %v, YOLO v3: %v, CatalystBlock: %v, London: %v, ArrowGlacier: %v, MergeFork:%v, Euler: %v, Gibbs: %v, Nano: %v, Moran: %v, Planck: %v,Luban: %v, Plato: %v, Hertz: %v, Engine: %v}", + return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Ramanujan: %v, Niels: %v, MirrorSync: %v, Bruno: %v, Berlin: %v, YOLO v3: %v, CatalystBlock: %v, London: %v, ArrowGlacier: %v, MergeFork:%v, Euler: %v, Gibbs: %v, Nano: %v, Moran: %v, Planck: %v,Luban: %v, Plato: %v, Hertz: %v, Hertzfix: %v, Engine: %v}", c.ChainID, c.HomesteadBlock, c.DAOForkBlock, @@ -571,6 +573,7 @@ func (c *ChainConfig) String() string { c.LubanBlock, c.PlatoBlock, c.HertzBlock, + c.HertzfixBlock, engine, ) } @@ -690,6 +693,14 @@ func (c *ChainConfig) IsOnHertz(num *big.Int) bool { return configBlockEqual(c.HertzBlock, num) } +func (c *ChainConfig) IsHertzfix(num *big.Int) bool { + return isBlockForked(c.HertzfixBlock, num) +} + +func (c *ChainConfig) IsOnHertzfix(num *big.Int) bool { + return configBlockEqual(c.HertzfixBlock, num) +} + // IsMuirGlacier returns whether num is either equal to the Muir Glacier (EIP-2384) fork block or greater. func (c *ChainConfig) IsMuirGlacier(num *big.Int) bool { return isBlockForked(c.MuirGlacierBlock, num) @@ -837,6 +848,7 @@ func (c *ChainConfig) CheckConfigForkOrder() error { {name: "lubanBlock", block: c.LubanBlock}, {name: "platoBlock", block: c.PlatoBlock}, {name: "hertzBlock", block: c.HertzBlock}, + {name: "hertzfixBlock", block: c.HertzfixBlock}, {name: "shanghaiTime", timestamp: c.ShanghaiTime}, {name: "cancunTime", timestamp: c.CancunTime, optional: true}, {name: "pragueTime", timestamp: c.PragueTime, optional: true}, @@ -968,6 +980,9 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, headNumber *big.Int, if isForkBlockIncompatible(c.HertzBlock, newcfg.HertzBlock, headNumber) { return newBlockCompatError("hertz fork block", c.HertzBlock, newcfg.HertzBlock) } + if isForkBlockIncompatible(c.HertzfixBlock, newcfg.HertzfixBlock, headNumber) { + return newBlockCompatError("hertzfix fork block", c.HertzfixBlock, newcfg.HertzfixBlock) + } if isForkTimestampIncompatible(c.ShanghaiTime, newcfg.ShanghaiTime, headTimestamp) { return newTimestampCompatError("Shanghai fork timestamp", c.ShanghaiTime, newcfg.ShanghaiTime) } @@ -1131,6 +1146,7 @@ type Rules struct { IsLuban bool IsPlato bool IsHertz bool + IsHertzfix bool IsShanghai, IsCancun, IsPrague bool IsVerkle bool } @@ -1160,6 +1176,7 @@ func (c *ChainConfig) Rules(num *big.Int, isMerge bool, timestamp uint64) Rules IsLuban: c.IsLuban(num), IsPlato: c.IsPlato(num), IsHertz: c.IsHertz(num), + IsHertzfix: c.IsHertzfix(num), IsShanghai: c.IsShanghai(num, timestamp), IsCancun: c.IsCancun(num, timestamp), IsPrague: c.IsPrague(num, timestamp), From a2f9ac0c8bc6e52a1372376b2816940766fc27fc Mon Sep 17 00:00:00 2001 From: "larry.lx" Date: Mon, 4 Dec 2023 11:45:52 +0800 Subject: [PATCH 21/31] release: prepare v1.3.4 --- CHANGELOG.md | 7 ++++++- params/version.go | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8c70718a6..75d36b42c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,9 @@ # Changelog +## v1.3.4 +BUGFIX +* fix: remove pipecommit in miner +* add a hard fork: Hertzfix + ## v1.3.3 IMPROVEMENT * [\#2000](https://github.com/bnb-chain/bsc/pull/2000) cmd/utils: exit process if txlookuplimit flag is set @@ -8,7 +13,7 @@ BUGFIX ## v1.3.2 BUGFIX -fix: remove sharedPool +* fix: remove sharedPool ## v1.3.1 FEATURE diff --git a/params/version.go b/params/version.go index 49a5efbc3c..cca396d7c5 100644 --- a/params/version.go +++ b/params/version.go @@ -23,7 +23,7 @@ import ( const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 3 // Minor version component of the current release - VersionPatch = 3 // Patch version component of the current release + VersionPatch = 4 // Patch version component of the current release VersionMeta = "" // Version metadata to append to the version string ) From afc3b42241f9b976537f8faa46d7cd2d4d881a28 Mon Sep 17 00:00:00 2001 From: "larry.lx" Date: Mon, 4 Dec 2023 13:02:19 +0800 Subject: [PATCH 22/31] fix: disable flag --pipecommit --- cmd/utils/flags.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 406c5f7072..33030bd5d1 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -1919,7 +1919,7 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { cfg.EnableTrustProtocol = ctx.IsSet(EnableTrustProtocolFlag.Name) } if ctx.IsSet(PipeCommitFlag.Name) { - cfg.PipeCommit = ctx.Bool(PipeCommitFlag.Name) + log.Warn("The --pipecommit flag is deprecated and could be removed in the future!") } if ctx.IsSet(RangeLimitFlag.Name) { cfg.RangeLimit = ctx.Bool(RangeLimitFlag.Name) From 885de2c1ca4c8cd73d7c8c6e6dba479015fb585e Mon Sep 17 00:00:00 2001 From: "larry.lx" Date: Mon, 4 Dec 2023 13:56:14 +0800 Subject: [PATCH 23/31] fix: failed ut --- core/eip3529tests/eip3529_parlia_test.go | 1 + eth/gasprice/gasprice_test.go | 1 + 2 files changed, 2 insertions(+) diff --git a/core/eip3529tests/eip3529_parlia_test.go b/core/eip3529tests/eip3529_parlia_test.go index f759a8f880..517b39d057 100644 --- a/core/eip3529tests/eip3529_parlia_test.go +++ b/core/eip3529tests/eip3529_parlia_test.go @@ -19,6 +19,7 @@ func preHertzConfig() *params.ChainConfig { config.LondonBlock = nil config.BerlinBlock = nil config.HertzBlock = nil + config.HertzfixBlock = nil return &config } diff --git a/eth/gasprice/gasprice_test.go b/eth/gasprice/gasprice_test.go index 8835fbb60c..fa41594739 100644 --- a/eth/gasprice/gasprice_test.go +++ b/eth/gasprice/gasprice_test.go @@ -146,6 +146,7 @@ func newTestBackend(t *testing.T, londonBlock *big.Int, pending bool) *testBacke config.LubanBlock = nil config.PlatoBlock = nil config.HertzBlock = nil + config.HertzfixBlock = nil config.TerminalTotalDifficulty = common.Big0 engine := ethash.NewFaker() From 5db73c9837bfa4621001e2ff6fff22245980a382 Mon Sep 17 00:00:00 2001 From: buddho Date: Tue, 5 Dec 2023 16:37:19 +0800 Subject: [PATCH 24/31] cmd/geth: standardize the action of importing bls account (#2020) * cmd/geth: standardize the action of importing bls account * rename bLSAccountPasswordFileFlag to blsAccountPasswordFileFlag * use password of wallet as account password when new an account or importing a raw key --- cmd/geth/blsaccountcmd.go | 148 +++++++++----------- cmd/geth/testdata/bls-account-usage-demo.sh | 33 +++++ cmd/utils/flags.go | 11 +- params/config.go | 2 +- 4 files changed, 108 insertions(+), 86 deletions(-) create mode 100644 cmd/geth/testdata/bls-account-usage-demo.sh diff --git a/cmd/geth/blsaccountcmd.go b/cmd/geth/blsaccountcmd.go index 1eeb5ee884..7e9b7b8078 100644 --- a/cmd/geth/blsaccountcmd.go +++ b/cmd/geth/blsaccountcmd.go @@ -26,6 +26,7 @@ import ( "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/internal/flags" "github.com/ethereum/go-ethereum/signer/core" ) @@ -35,19 +36,16 @@ const ( ) var ( - au = aurora.NewAurora(true) - privateKeyFlag = &cli.StringFlag{ - Name: "private-key", - Usage: "Hex string for the BLS12-381 private key you wish encrypt into a keystore file", - Value: "", - } + au = aurora.NewAurora(true) showPrivateKeyFlag = &cli.BoolFlag{ - Name: "show-private-key", - Usage: "Show the BLS12-381 private key you will encrypt into a keystore file", + Name: "show-private-key", + Usage: "Show the BLS12-381 private key you will encrypt into a keystore file", + Category: flags.AccountCategory, } - BLSAccountPasswordFileFlag = &cli.StringFlag{ - Name: "blsaccountpassword", - Usage: "File path for the BLS account password, which contains the password to encrypt private key into keystore file for managing votes in fast_finality feature", + importedAccountPasswordFileFlag = &cli.StringFlag{ + Name: "importedaccountpassword", + Usage: "Password file path for the imported BLS account , which contains the password to get the private key by decrypting the keystore file", + Category: flags.AccountCategory, } ) @@ -130,10 +128,8 @@ Make sure you backup your BLS keys regularly.`, Category: "BLS ACCOUNT COMMANDS", Flags: []cli.Flag{ utils.DataDirFlag, - privateKeyFlag, showPrivateKeyFlag, utils.BLSPasswordFileFlag, - BLSAccountPasswordFileFlag, }, Description: ` geth bls account new @@ -149,17 +145,17 @@ You must remember this password to unlock your account in the future.`, Name: "import", Usage: "Import a BLS account", Action: blsAccountImport, - ArgsUsage: "", + ArgsUsage: "", Category: "BLS ACCOUNT COMMANDS", Flags: []cli.Flag{ utils.DataDirFlag, utils.BLSPasswordFileFlag, - BLSAccountPasswordFileFlag, + importedAccountPasswordFileFlag, }, Description: ` geth bls account import -Import a encrypted BLS account from keystore file into the BLS wallet. +Import a encrypted BLS account or a BLS12-381 private key from file into the BLS wallet. If the BLS wallet not created yet, it will try to create BLS wallet first.`, }, @@ -219,7 +215,10 @@ func blsWalletCreate(ctx *cli.Context) error { utils.Fatalf("BLS wallet already exists in /bls/wallet.") } - password := utils.GetPassPhraseWithList("Your new BLS wallet will be locked with a password. Please give a password. Do not forget this password.", true, 0, GetBLSPassword(ctx)) + password := utils.GetPassPhraseWithList("Your new BLS wallet will be locked with a password. Please give a password. Do not forget this password.", true, 0, utils.MakePasswordListFromPath(ctx.String(utils.BLSPasswordFileFlag.Name))) + if err := core.ValidatePasswordFormat(password); err != nil { + utils.Fatalf("Password invalid: %v.", err) + } opts := []accounts.Option{} opts = append(opts, accounts.WithWalletDir(dir)) @@ -249,7 +248,10 @@ func openOrCreateBLSWallet(ctx *cli.Context, cfg *gethConfig) (*wallet.Wallet, e } if !dirExists { fmt.Println("BLS wallet not exists, creating BLS wallet...") - password := utils.GetPassPhraseWithList("Your new BLS wallet will be locked with a password. Please give a password. Do not forget this password.", true, 0, GetBLSPassword(ctx)) + password := utils.GetPassPhraseWithList("Your new BLS wallet will be locked with a password. Please give a password. Do not forget this password.", true, 0, utils.MakePasswordListFromPath(ctx.String(utils.BLSPasswordFileFlag.Name))) + if err := core.ValidatePasswordFormat(password); err != nil { + utils.Fatalf("Password invalid: %v.", err) + } opts := []accounts.Option{} opts = append(opts, accounts.WithWalletDir(walletDir)) @@ -269,7 +271,7 @@ func openOrCreateBLSWallet(ctx *cli.Context, cfg *gethConfig) (*wallet.Wallet, e return w, nil } - walletPassword := utils.GetPassPhraseWithList("Enter the password for your BLS wallet.", false, 0, GetBLSPassword(ctx)) + walletPassword := utils.GetPassPhraseWithList("Enter the password for your BLS wallet.", false, 0, utils.MakePasswordListFromPath(ctx.String(utils.BLSPasswordFileFlag.Name))) w, err = wallet.OpenWallet(context.Background(), &wallet.Config{ WalletDir: walletDir, WalletPassword: walletPassword, @@ -309,27 +311,11 @@ func blsAccountCreate(ctx *cli.Context) error { if err := os.MkdirAll(keystoreDir, 0755); err != nil { utils.Fatalf("Could not access keystore dir: %v.", err) } - accountPassword := utils.GetPassPhraseWithList("Your new BLS account will be encrypted with a password. Please give a password. Do not forget this password.", true, 0, GetBLSAccountPassword(ctx)) - if err := core.ValidatePasswordFormat(accountPassword); err != nil { - utils.Fatalf("Password invalid: %v.", err) - } + accountPassword := w.Password() encryptor := keystorev4.New() secretKey, err := bls.RandKey() - privateKeyString := ctx.String(privateKeyFlag.Name) - if privateKeyString != "" { - if len(privateKeyString) > 2 && strings.Contains(privateKeyString, "0x") { - privateKeyString = privateKeyString[2:] // Strip the 0x prefix, if any. - } - bytesValue, err := hex.DecodeString(privateKeyString) - if err != nil { - utils.Fatalf("could not decode as hex string: %s", privateKeyString) - } - secretKey, err = bls.SecretKeyFromBytes(bytesValue) - if err != nil { - utils.Fatalf("not a valid BLS12-381 private key") - } - } else if err != nil { + if err != nil { utils.Fatalf("Could not generate BLS secret key: %v.", err) } @@ -383,22 +369,6 @@ func blsAccountCreate(ctx *cli.Context) error { // blsAccountImport imports a BLS account into the BLS wallet. func blsAccountImport(ctx *cli.Context) error { - keyfile := ctx.Args().First() - if len(keyfile) == 0 { - utils.Fatalf("The keystore file must be given as argument.") - } - keyJSON, err := os.ReadFile(keyfile) - if err != nil { - utils.Fatalf("Could not read keystore file: %v", err) - } - keystore := &keymanager.Keystore{} - if err := json.Unmarshal(keyJSON, keystore); err != nil { - utils.Fatalf("Could not decode keystore file: %v.", err) - } - if keystore.Pubkey == "" { - utils.Fatalf(" Missing public key, wrong keystore file.") - } - cfg := gethConfig{Node: defaultNodeConfig()} // Load config file. if file := ctx.String(configFileFlag.Name); file != "" { @@ -421,13 +391,53 @@ func blsAccountImport(ctx *cli.Context) error { utils.Fatalf("The BLS keymanager cannot import keystores") } - password := utils.GetPassPhraseWithList("Enter the password for your imported account.", false, 0, GetBLSAccountPassword(ctx)) + keyfile := ctx.Args().First() + if len(keyfile) == 0 { + utils.Fatalf("The keystore file must be given as argument.") + } + keyInfo, err := os.ReadFile(keyfile) + if err != nil { + utils.Fatalf("Could not read keystore file: %v", err) + } + keystore := &keymanager.Keystore{} + var importedAccountPassword string + if err := json.Unmarshal(keyInfo, keystore); err != nil { + secretKey, err := bls.SecretKeyFromBytes(common.FromHex(strings.TrimRight(string(keyInfo), "\r\n"))) + if err != nil { + utils.Fatalf("keyFile is neither a keystore file or include a valid BLS12-381 private key: %v.", err) + } + pubKeyBytes := secretKey.PublicKey().Marshal() + encryptor := keystorev4.New() + importedAccountPassword = w.Password() + cryptoFields, err := encryptor.Encrypt(secretKey.Marshal(), importedAccountPassword) + if err != nil { + utils.Fatalf("Could not encrypt secret key: %v.", err) + } + id, err := uuid.NewRandom() + if err != nil { + utils.Fatalf("Could not generate uuid: %v.", err) + } + keystore = &keymanager.Keystore{ + Crypto: cryptoFields, + ID: id.String(), + Pubkey: fmt.Sprintf("%x", pubKeyBytes), + Version: encryptor.Version(), + Name: encryptor.Name(), + } + } + if keystore.Pubkey == "" { + utils.Fatalf(" Missing public key, wrong keystore file.") + } + + if importedAccountPassword == "" { + importedAccountPassword = utils.GetPassPhraseWithList("Enter the password for your imported account.", false, 0, utils.MakePasswordListFromPath(ctx.String(importedAccountPasswordFileFlag.Name))) + } fmt.Println("Importing BLS account, this may take a while...") statuses, err := accounts.ImportAccounts(context.Background(), &accounts.ImportAccountsConfig{ Importer: k, Keystores: []*keymanager.Keystore{keystore}, - AccountPassword: password, + AccountPassword: importedAccountPassword, }) if err != nil { utils.Fatalf("Import BLS account failed: %v.", err) @@ -458,7 +468,7 @@ func blsAccountList(ctx *cli.Context) error { utils.Fatalf("BLS wallet not exists.") } - walletPassword := utils.GetPassPhraseWithList("Enter the password for your BLS wallet.", false, 0, GetBLSPassword(ctx)) + walletPassword := utils.GetPassPhraseWithList("Enter the password for your BLS wallet.", false, 0, utils.MakePasswordListFromPath(ctx.String(utils.BLSPasswordFileFlag.Name))) w, err := wallet.OpenWallet(context.Background(), &wallet.Config{ WalletDir: walletDir, WalletPassword: walletPassword, @@ -537,7 +547,7 @@ func blsAccountDelete(ctx *cli.Context) error { utils.Fatalf("BLS wallet not exists.") } - walletPassword := utils.GetPassPhraseWithList("Enter the password for your BLS wallet.", false, 0, GetBLSPassword(ctx)) + walletPassword := utils.GetPassPhraseWithList("Enter the password for your BLS wallet.", false, 0, utils.MakePasswordListFromPath(ctx.String(utils.BLSPasswordFileFlag.Name))) w, err := wallet.OpenWallet(context.Background(), &wallet.Config{ WalletDir: walletDir, WalletPassword: walletPassword, @@ -598,27 +608,3 @@ func blsAccountDelete(ctx *cli.Context) error { return nil } - -func GetBLSPassword(ctx *cli.Context) []string { - path := ctx.String(utils.BLSPasswordFileFlag.Name) - if path == "" { - return nil - } - text, err := os.ReadFile(path) - if err != nil { - utils.Fatalf("Failed to read wallet password file: %v", err) - } - return []string{string(text)} -} - -func GetBLSAccountPassword(ctx *cli.Context) []string { - path := ctx.String(BLSAccountPasswordFileFlag.Name) - if path == "" { - return nil - } - text, err := os.ReadFile(path) - if err != nil { - utils.Fatalf("Failed to read account password file: %v", err) - } - return []string{string(text)} -} diff --git a/cmd/geth/testdata/bls-account-usage-demo.sh b/cmd/geth/testdata/bls-account-usage-demo.sh new file mode 100644 index 0000000000..ef4966c46d --- /dev/null +++ b/cmd/geth/testdata/bls-account-usage-demo.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +echo "0. prepare---------------------------------------------------------------------------------" +echo 123abc7890 > bls-password.txt +echo 123abc7891 > bls-password1.txt +basedir=$(cd `dirname $0`; pwd) +workspace=${basedir}/../../../ + +echo "1. create a bls account--------------------------------------------------------------------" +${workspace}/build/bin/geth bls account new --blspassword ./bls-password.txt --datadir ./bls +${workspace}/build/bin/geth bls account list --blspassword ./bls-password.txt --datadir ./bls + +echo "2. import a bls account by passing file including a private key-----------------------------" +secretKey=`${workspace}/build/bin/geth bls account new --show-private-key --blspassword ./bls-password1.txt --datadir ./bls1 | grep private | awk '{print $NF}'` +echo ${secretKey} > ./bls1/secretKey +${workspace}/build/bin/geth bls account import --blspassword ./bls-password.txt --datadir ./bls ./bls1/secretKey +${workspace}/build/bin/geth bls account list --blspassword ./bls-password.txt --datadir ./bls + +echo "3. delete the imported account above--------------------------------------------------------" +publicKey=`${workspace}/build/bin/geth bls account list --blspassword ./bls-password.txt --datadir ./bls |grep public | tail -1 | awk '{print $NF}'` +${workspace}/build/bin/geth bls account delete --blspassword ./bls-password.txt --datadir ./bls ${publicKey} +${workspace}/build/bin/geth bls account list --blspassword ./bls-password.txt --datadir ./bls + +echo "4. import a bls account by passing a keystore file------------------------------------------" +keystoreFile=`ls bls1/bls/keystore` +${workspace}/build/bin/geth bls account import --importedaccountpassword ./bls-password1.txt --blspassword ./bls-password.txt --datadir ./bls ./bls1/bls/keystore/${keystoreFile} +${workspace}/build/bin/geth bls account list --blspassword ./bls-password.txt --datadir ./bls + +echo "5. clearup----------------------------------------------------------------------------------" +rm -rf bls +rm -rf bls1 +rm -rf bls-password.txt +rm -rf bls-password1.txt \ No newline at end of file diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 33030bd5d1..a0c2e73aca 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -1092,14 +1092,14 @@ Please note that --` + MetricsHTTPFlag.Name + ` must be set to start the server. BLSPasswordFileFlag = &cli.StringFlag{ Name: "blspassword", - Usage: "File path for the BLS password, which contains the password to unlock BLS wallet for managing votes in fast_finality feature", - Category: flags.FastFinalityCategory, + Usage: "Password file path for the BLS wallet, which contains the password to unlock BLS wallet for managing votes in fast_finality feature", + Category: flags.AccountCategory, } BLSWalletDirFlag = &flags.DirectoryFlag{ Name: "blswallet", Usage: "Path for the blsWallet dir in fast finality feature (default = inside the datadir)", - Category: flags.FastFinalityCategory, + Category: flags.AccountCategory, } VoteJournalDirFlag = &flags.DirectoryFlag{ @@ -1462,7 +1462,10 @@ func setEtherbase(ctx *cli.Context, cfg *ethconfig.Config) { // MakePasswordList reads password lines from the file specified by the global --password flag. func MakePasswordList(ctx *cli.Context) []string { - path := ctx.Path(PasswordFileFlag.Name) + return MakePasswordListFromPath(ctx.Path(PasswordFileFlag.Name)) +} + +func MakePasswordListFromPath(path string) []string { if path == "" { return nil } diff --git a/params/config.go b/params/config.go index 26effd16ef..5777d50c90 100644 --- a/params/config.go +++ b/params/config.go @@ -229,7 +229,7 @@ var ( PlatoBlock: nil, BerlinBlock: nil, HertzBlock: nil, - HertzfixBlock: nil, + HertzfixBlock: nil, Parlia: &ParliaConfig{ Period: 3, From 195ae35130a8cc0a5654c5e117966e9fec34c1fe Mon Sep 17 00:00:00 2001 From: "larry.lx" Date: Mon, 27 Nov 2023 13:16:54 +0800 Subject: [PATCH 25/31] release: prepare for release v1.3.5 --- CHANGELOG.md | 23 ++++++++++++++++++++--- params/version.go | 2 +- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75d36b42c5..f2823ad034 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,20 +1,37 @@ # Changelog +## v1.3.5 +FEATURE +* [\#1970](https://github.com/bnb-chain/bsc/pull/1970) core: enable Shanghai EIPs +* [\#1973](https://github.com/bnb-chain/bsc/pull/1973) core/systemcontracts: include BEP-319 on kepler hardfork + +BUGFIX +* [\#1964](https://github.com/bnb-chain/bsc/pull/1964) consensus/parlia: hardfork block can be epoch block +* [\#1979](https://github.com/bnb-chain/bsc/pull/1979) fix: upgrade pebble and improve config +* [\#1980](https://github.com/bnb-chain/bsc/pull/1980) internal/ethapi: fix null effectiveGasPrice in GetTransactionReceipt + +IMPROVEMENT +* [\#1977](https://github.com/bnb-chain/bsc/pull/1977) doc: add instructions for starting fullnode with pbss + ## v1.3.4 BUGFIX * fix: remove pipecommit in miner * add a hard fork: Hertzfix ## v1.3.3 -IMPROVEMENT -* [\#2000](https://github.com/bnb-chain/bsc/pull/2000) cmd/utils: exit process if txlookuplimit flag is set - BUGFIX * [\#1986](https://github.com/bnb-chain/bsc/pull/1986) fix(cmd): check pruneancient when creating db +IMPROVEMENT +* [\#2000](https://github.com/bnb-chain/bsc/pull/2000) cmd/utils: exit process if txlookuplimit flag is set + ## v1.3.2 BUGFIX * fix: remove sharedPool +IMPROVEMENT +* [\#2007](https://github.com/bnb-chain/bsc/pull/2007) consensus/parlia: increase size of snapshot cache in parlia +* [\#2008](https://github.com/bnb-chain/bsc/pull/2008) consensus/parlia: recover faster when snapshot of parlia is gone in disk + ## v1.3.1 FEATURE * [\#1881](https://github.com/bnb-chain/bsc/pull/1881) feat: active pbss diff --git a/params/version.go b/params/version.go index cca396d7c5..28058aad1a 100644 --- a/params/version.go +++ b/params/version.go @@ -23,7 +23,7 @@ import ( const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 3 // Minor version component of the current release - VersionPatch = 4 // Patch version component of the current release + VersionPatch = 5 // Patch version component of the current release VersionMeta = "" // Version metadata to append to the version string ) From aa15df2814fdaf84c44736b886f169d9d935c76c Mon Sep 17 00:00:00 2001 From: lx <92799281+brilliant-lx@users.noreply.github.com> Date: Tue, 5 Dec 2023 14:52:45 +0800 Subject: [PATCH 26/31] config: setup Kepler/Shanghai hardfork date expected hard fork date: - Testnet: 19th Dec 2023, 2pm UTC+8, Tuesday - Mainnet: 23th Jan 2024, 4pm UTC+8, Tuesday --- params/config.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/params/config.go b/params/config.go index 5777d50c90..5fedc9868e 100644 --- a/params/config.go +++ b/params/config.go @@ -165,6 +165,9 @@ var ( LondonBlock: big.NewInt(31302048), HertzBlock: big.NewInt(31302048), HertzfixBlock: big.NewInt(34140700), + // UnixTime: 1705996800 is January 23, 2024 8:00:00 AM UTC + ShanghaiTime: newUint64(1705996800), + KeplerTime: newUint64(1705996800), Parlia: &ParliaConfig{ Period: 3, @@ -198,6 +201,9 @@ var ( LondonBlock: big.NewInt(31103030), HertzBlock: big.NewInt(31103030), HertzfixBlock: big.NewInt(35682300), + // UnixTime: 1702972800 is December 19, 2023 8:00:00 AM UTC + ShanghaiTime: newUint64(1702972800), + KeplerTime: newUint64(1702972800), Parlia: &ParliaConfig{ Period: 3, From a30beeba593584851debba1af2e5a7f49d8de70d Mon Sep 17 00:00:00 2001 From: buddho Date: Wed, 6 Dec 2023 17:05:13 +0800 Subject: [PATCH 27/31] core/txpool/legacypool: respect nolocals-setting (#2037) --- core/txpool/legacypool/legacypool.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/txpool/legacypool/legacypool.go b/core/txpool/legacypool/legacypool.go index 2c23f142b1..42962e4a27 100644 --- a/core/txpool/legacypool/legacypool.go +++ b/core/txpool/legacypool/legacypool.go @@ -1027,6 +1027,9 @@ func (pool *LegacyPool) addRemoteSync(tx *types.Transaction) error { // addTxs attempts to queue a batch of transactions if they are valid. func (pool *LegacyPool) addTxs(txs []*types.Transaction, local, sync bool) []error { + // Do not treat as local if local transactions have been disabled + local = local && !pool.config.NoLocals + // Filter out known ones without obtaining the pool lock or recovering signatures var ( errs = make([]error, len(txs)) From 6c788d7675c8c18551e26dcbebf009dcae3753cb Mon Sep 17 00:00:00 2001 From: buddh0 Date: Wed, 6 Dec 2023 18:32:31 +0800 Subject: [PATCH 28/31] tests/truffle: adapt changes in bsc-genesis-contracts --- .gitignore | 1 - docker/Dockerfile | 1 + tests/truffle/.env | 2 +- tests/truffle/scripts/bootstrap.sh | 25 ++-- tests/truffle/scripts/bsc-rpc.sh | 2 +- tests/truffle/scripts/bsc-validator.sh | 2 +- tests/truffle/scripts/create_bls_key.sh | 17 --- tests/truffle/storage/address | 1 + tests/truffle/storage/genesis.json | 130 ++++++++++++++++++ ...--03735c2ed70a56cd221e0024eb4bf90243c9d6e9 | 1 + 10 files changed, 150 insertions(+), 32 deletions(-) delete mode 100644 tests/truffle/scripts/create_bls_key.sh create mode 100644 tests/truffle/storage/address create mode 100644 tests/truffle/storage/genesis.json create mode 100644 tests/truffle/storage/keystore/UTC--2023-12-07T03-21-00.035782000Z--03735c2ed70a56cd221e0024eb4bf90243c9d6e9 diff --git a/.gitignore b/.gitignore index 483b4d73b3..6117fc2329 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,6 @@ */**/*tx_database* */**/*dapps* build/_vendor/pkg -/tests/truffle/storage #* .#* diff --git a/docker/Dockerfile b/docker/Dockerfile index d5925acb77..5fb971ffa0 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -18,6 +18,7 @@ RUN apk add --no-cache ca-certificates npm nodejs bash alpine-sdk expect RUN git clone https://github.com/bnb-chain/bsc-genesis-contract.git /root/genesis \ && cd /root/genesis && npm install +#RUN curl -L https://foundry.paradigm.xyz | bash COPY --from=bsc /usr/local/bin/geth /usr/local/bin/geth diff --git a/tests/truffle/.env b/tests/truffle/.env index e2b3e27f5c..daeffe13b2 100644 --- a/tests/truffle/.env +++ b/tests/truffle/.env @@ -1,4 +1,4 @@ -BSC_CHAIN_ID=99 +BSC_CHAIN_ID=714 CLUSTER_CIDR=99.1.0.0/16 BOOTSTRAP_PUB_KEY=177ae5db445a2f70db781b019aedd928f5b1528a7a43448840b022408f9a21509adcce0b37c87d59da68d47a16879cc1e95a62bbac9723f7b22f4365b2afabbe BOOTSTRAP_TCP_PORT=30311 diff --git a/tests/truffle/scripts/bootstrap.sh b/tests/truffle/scripts/bootstrap.sh index a28497c4aa..616357a84f 100755 --- a/tests/truffle/scripts/bootstrap.sh +++ b/tests/truffle/scripts/bootstrap.sh @@ -7,26 +7,29 @@ function prepare() { echo "geth do not exist!" exit 1 fi - rm -rf ${workspace}/storage/* cd ${workspace}/genesis - rm -rf validators.conf + cp ${workspace}/storage/genesis.json ${workspace}/genesis/genesis.json } function init_validator() { node_id=$1 + rm -rf ${workspace}/storage/${node_id} mkdir -p ${workspace}/storage/${node_id} - geth --datadir ${workspace}/storage/${node_id} account new --password /dev/null > ${workspace}/storage/${node_id}Info - validatorAddr=`cat ${workspace}/storage/${node_id}Info|grep 'Public address of the key'|awk '{print $6}'` - echo "${validatorAddr},${validatorAddr},${validatorAddr},0x0000000010000000" >> ${workspace}/genesis/validators.conf - echo ${validatorAddr} > ${workspace}/storage/${node_id}/address + cp -r ${workspace}/storage/keystore ${workspace}/storage/${node_id}/ + cp ${workspace}/storage/address ${workspace}/storage/${node_id}/address } function generate_genesis() { + cd ${workspace}/genesis/scripts/ node generate-validator.js INIT_HOLDER_ADDRESSES=$(ls ${workspace}/init-holders | tr '\n' ',') INIT_HOLDER_ADDRESSES=${INIT_HOLDER_ADDRESSES/%,/} node generate-initHolders.js --initHolders ${INIT_HOLDER_ADDRESSES} - node generate-genesis.js --chainid ${BSC_CHAIN_ID} + + cd ${workspace}/genesis + #source /root/.profile && foundryup + #forge install --no-git --no-commit foundry-rs/forge-std@v1.1.1 + bash ${workspace}/genesis/scripts/generate.sh local } function init_genesis_data() { @@ -43,8 +46,8 @@ function init_genesis_data() { function prepareBLSWallet(){ node_id=$1 - echo "123456" > ${workspace}/storage/${node_id}/blspassword.txt - expect ${workspace}/scripts/create_bls_key.sh ${workspace}/storage/${node_id} + echo "1234567890" > ${workspace}/storage/${node_id}/blspassword.txt + geth bls account new --datadir ${workspace}/storage/${node_id} --blspassword ${workspace}/storage/${node_id}/blspassword.txt sed -i -e 's/DataDir/BLSPasswordFile = \"{{BLSPasswordFile}}\"\nBLSWalletDir = \"{{BLSWalletDir}}\"\nDataDir/g' ${workspace}/storage/${node_id}/config.toml PassWordPath="/root/.ethereum/blspassword.txt" @@ -54,14 +57,14 @@ function prepareBLSWallet(){ } prepare - +NUMS_OF_VALIDATOR=1 # Step 1, generate config for each validator for((i=1;i<=${NUMS_OF_VALIDATOR};i++)); do init_validator "bsc-validator${i}" done # Step 2, use validator configs to generate genesis file -generate_genesis +#generate_genesis # Step 3, use genesis file to init cluster data init_genesis_data bsc-rpc bsc-rpc diff --git a/tests/truffle/scripts/bsc-rpc.sh b/tests/truffle/scripts/bsc-rpc.sh index 43c811c787..3b175d08e2 100755 --- a/tests/truffle/scripts/bsc-rpc.sh +++ b/tests/truffle/scripts/bsc-rpc.sh @@ -13,4 +13,4 @@ done geth --config ${DATA_DIR}/config.toml --datadir ${DATA_DIR} --netrestrict ${CLUSTER_CIDR} \ --verbosity ${VERBOSE} --nousb \ --rpc.allow-unprotected-txs --history.transactions 15768000 \ - -unlock ${unlock_sequences} --password /dev/null + -unlock ${unlock_sequences} --password /dev/null >${DATA_DIR}/bscnode-rpc.log diff --git a/tests/truffle/scripts/bsc-validator.sh b/tests/truffle/scripts/bsc-validator.sh index 16b8c2ed57..e58593ee5f 100755 --- a/tests/truffle/scripts/bsc-validator.sh +++ b/tests/truffle/scripts/bsc-validator.sh @@ -15,4 +15,4 @@ geth --config ${DATA_DIR}/config.toml --datadir ${DATA_DIR} --netrestrict ${CLUS --bootnodes enode://${BOOTSTRAP_PUB_KEY}@${BOOTSTRAP_IP}:${BOOTSTRAP_TCP_PORT} \ --mine -unlock ${VALIDATOR_ADDR} --miner.etherbase ${VALIDATOR_ADDR} --password /dev/null \ --light.serve 50 \ - --rpc.allow-unprotected-txs --history.transactions 15768000 + --rpc.allow-unprotected-txs --history.transactions 15768000 >${DATA_DIR}/bscnode-validator.log diff --git a/tests/truffle/scripts/create_bls_key.sh b/tests/truffle/scripts/create_bls_key.sh deleted file mode 100644 index a1a4d97bd6..0000000000 --- a/tests/truffle/scripts/create_bls_key.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/expect -# 6 num wanted -set wallet_password 123456 -# 10 characters at least wanted -set account_password 1234567890 - -set timeout 5 -spawn geth bls account new --datadir [lindex $argv 0] -expect "*assword:*" -send "$wallet_password\r" -expect "*assword:*" -send "$wallet_password\r" -expect "*assword:*" -send "$account_password\r" -expect "*assword:*" -send "$account_password\r" -expect EOF \ No newline at end of file diff --git a/tests/truffle/storage/address b/tests/truffle/storage/address new file mode 100644 index 0000000000..ec6b254d24 --- /dev/null +++ b/tests/truffle/storage/address @@ -0,0 +1 @@ +0x03735c2ED70a56CD221e0024eB4bF90243C9d6E9 \ No newline at end of file diff --git a/tests/truffle/storage/genesis.json b/tests/truffle/storage/genesis.json new file mode 100644 index 0000000000..fd32c556c6 --- /dev/null +++ b/tests/truffle/storage/genesis.json @@ -0,0 +1,130 @@ +{ + "config": { + "chainId": 714, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "muirGlacierBlock": 0, + "ramanujanBlock": 0, + "nielsBlock": 0, + "mirrorSyncBlock":1, + "brunoBlock": 1, + "eulerBlock": 2, + "nanoBlock": 3, + "moranBlock": 3, + "gibbsBlock": 4, + "planckBlock": 5, + "lubanBlock": 6, + "platoBlock": 7, + "berlinBlock": 8, + "londonBlock": 8, + "hertzBlock": 8, + "hertzfixBlock": 8, + "shanghaiTime": 0, + "keplerTime": 0, + "parlia": { + "period": 3, + "epoch": 200 + } + }, + "nonce": "0x0", + "timestamp": "0x5e9da7ce", + "extraData": "0x000000000000000000000000000000000000000000000000000000000000000003735c2ed70a56cd221e0024eb4bf90243c9d6e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x2625a00", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE", + "alloc": { + "0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE": { + "balance": "0x0" + }, + "0x0000000000000000000000000000000000001000": { + "balance": "0x0", + "code": "0x6080604052600436106104a35760003560e01c806388b32f1111610260578063c6d3394511610144578063e40716a1116100c1578063f92eb86b11610085578063f92eb86b14610c02578063f9a2bbc714610c17578063fc3e590814610c2c578063fccc281314610c41578063fd4ad81f14610c56578063fd6a687914610c85576104aa565b8063e40716a114610b85578063ea321e4914610b9a578063eb57e20214610bba578063eda5868c14610bda578063f340fa0114610bef576104aa565b8063d86222d511610108578063d86222d514610b1c578063daacdb6614610b31578063dc927faf14610b46578063e086c7b114610b5b578063e1c7392a14610b70576104aa565b8063c6d3394514610abd578063c81b166214610ad2578063c8509d81146108b6578063ce910b0c14610ae7578063d68fb56a14610b07576104aa565b8063a5422d5c116101dd578063ad3c9da6116101a1578063ad3c9da614610a3c578063aef198a914610a5c578063b7ab4db514610a71578063b8cf4ef114610a93578063bf9f499514610666578063c466689d14610aa8576104aa565b8063a5422d5c146109c8578063a78abc16146109dd578063aaf5eb68146109f2578063ab51bb9614610a07578063ac43175114610a1c576104aa565b806396713da91161022457806396713da91461095f5780639dc09262146109745780639fe0f81614610989578063a0dc27581461099e578063a1a11bf5146109b3576104aa565b806388b32f11146108eb5780638a7beb01146109005780638b5ad0c9146109155780638d19a4101461092a5780639369d7de1461094a576104aa565b806351e80672116103875780636e47b482116103045780637942fd05116102c85780637942fd05146108775780637a84ca2a1461088c57806381650b62146108a1578063831d65d1146108b6578063853230aa1461086257806386249882146108d6576104aa565b80636e47b4821461080e57806370fd5bad14610823578063718a8aa81461083857806375d47a0a1461084d57806378dfed4a14610862576104aa565b80635de1e22c1161034b5780635de1e22c14610792578063603d86d31461065157806360eba4fe146107a757806362b72cf5146107c75780636969a25c146107dc576104aa565b806351e806721461071357806355614fcc14610728578063565c56b3146107485780635667515a146107685780635d77156c1461077d576104aa565b80633365af3a1161042057806343756e5c116103e457806343756e5c1461068857806345cf9daf1461069d578063493279b1146106b25780634bf6c882146106d45780634df6e0c3146106e95780635192c82c146106fe576104aa565b80633365af3a146105ee57806335409f7f1461060e5780633b071dcc1461062e5780633de0f0d8146106515780633dffc38714610666576104aa565b8063152ad3b811610467578063152ad3b8146105625780631ff1806914610584578063219f22d514610599578063300c3567146105ae578063321d398a146105ce576104aa565b806304c4fec6146104af57806307a56847146104c65780630bee7a67146104f15780630e2374a5146105135780631182b87514610535576104aa565b366104aa57005b600080fd5b3480156104bb57600080fd5b506104c4610c9a565b005b3480156104d257600080fd5b506104db610d0c565b6040516104e89190617771565b60405180910390f35b3480156104fd57600080fd5b50610506610d12565b6040516104e8919061779b565b34801561051f57600080fd5b50610528610d17565b6040516104e89190616b40565b34801561054157600080fd5b50610555610550366004616a26565b610d1d565b6040516104e89190616cb7565b34801561056e57600080fd5b50610577610f55565b6040516104e89190616cac565b34801561059057600080fd5b506104db610f5e565b3480156105a557600080fd5b50610506610f64565b3480156105ba57600080fd5b506104c46105c93660046168b0565b610f69565b3480156105da57600080fd5b506105776105e93660046169d3565b6112b0565b3480156105fa57600080fd5b506105776106093660046169d3565b61137f565b34801561061a57600080fd5b506104c4610629366004616889565b611430565b34801561063a57600080fd5b50610643611589565b6040516104e8929190616bc2565b34801561065d57600080fd5b506104db611865565b34801561067257600080fd5b5061067b61186b565b6040516104e891906177ac565b34801561069457600080fd5b50610528611870565b3480156106a957600080fd5b506104db611876565b3480156106be57600080fd5b506106c761187c565b6040516104e89190617762565b3480156106e057600080fd5b5061067b611882565b3480156106f557600080fd5b50610643611887565b34801561070a57600080fd5b506104db611a05565b34801561071f57600080fd5b50610528611a0b565b34801561073457600080fd5b50610577610743366004616889565b611a11565b34801561075457600080fd5b506104db610763366004616889565b611a46565b34801561077457600080fd5b5061067b611a97565b34801561078957600080fd5b50610506611a9c565b34801561079e57600080fd5b506104db611aa1565b3480156107b357600080fd5b506105556107c23660046169d3565b611aa7565b3480156107d357600080fd5b506104db611b4d565b3480156107e857600080fd5b506107fc6107f73660046169d3565b611b53565b6040516104e896959493929190616b6d565b34801561081a57600080fd5b50610528611bb7565b34801561082f57600080fd5b5061067b611bbd565b34801561084457600080fd5b5061067b611bc2565b34801561085957600080fd5b50610528611bc7565b34801561086e57600080fd5b506104db611bcd565b34801561088357600080fd5b5061067b611bd3565b34801561089857600080fd5b506104db611bd8565b3480156108ad57600080fd5b50610506611bde565b3480156108c257600080fd5b506104c46108d1366004616a26565b611be3565b3480156108e257600080fd5b506104db611c44565b3480156108f757600080fd5b506104db611c4a565b34801561090c57600080fd5b50610577611c50565b34801561092157600080fd5b506104db611c59565b34801561093657600080fd5b506104db610945366004616889565b611c5f565b34801561095657600080fd5b506104c4611c9f565b34801561096b57600080fd5b5061067b611db3565b34801561098057600080fd5b50610528611db8565b34801561099557600080fd5b506104db611dbe565b3480156109aa57600080fd5b506104db611dc3565b3480156109bf57600080fd5b50610528611dc8565b3480156109d457600080fd5b50610555611dce565b3480156109e957600080fd5b50610577611dea565b3480156109fe57600080fd5b506104db611df3565b348015610a1357600080fd5b50610506611a97565b348015610a2857600080fd5b506104c4610a37366004616977565b611dfc565b348015610a4857600080fd5b506104db610a57366004616889565b61269a565b348015610a6857600080fd5b506104db6126ac565b348015610a7d57600080fd5b50610a866126b9565b6040516104e89190616baf565b348015610a9f57600080fd5b506104db6127a5565b348015610ab457600080fd5b506104db6127aa565b348015610ac957600080fd5b506104db611bbd565b348015610ade57600080fd5b506105286127b0565b348015610af357600080fd5b50610555610b023660046169d3565b6127b6565b348015610b1357600080fd5b506104db6127c3565b348015610b2857600080fd5b506104db612802565b348015610b3d57600080fd5b506104db61280e565b348015610b5257600080fd5b50610528612814565b348015610b6757600080fd5b506104db610d12565b348015610b7c57600080fd5b506104c461281a565b348015610b9157600080fd5b506104db612aab565b348015610ba657600080fd5b50610577610bb5366004616938565b612ab1565b348015610bc657600080fd5b506104c4610bd5366004616889565b612c37565b348015610be657600080fd5b50610506612d3f565b6104c4610bfd366004616889565b612d44565b348015610c0e57600080fd5b506104db6130ac565b348015610c2357600080fd5b506105286130b2565b348015610c3857600080fd5b5061067b611dbe565b348015610c4d57600080fd5b506105286130b8565b348015610c6257600080fd5b50610c76610c713660046169d3565b6130be565b6040516104e89392919061777a565b348015610c9157600080fd5b50610528613180565b6000610ca533611c5f565b9050600b8181548110610cb457fe5b600091825260209091206001601690920201015460ff16610cf05760405162461bcd60e51b8152600401610ce79061741c565b60405180910390fd5b6000610cfa6127c3565b9050610d07338383613186565b505050565b60095481565b606481565b61200181565b60005460609060ff16610d425760405162461bcd60e51b8152600401610ce790616e76565b3361200014610d635760405162461bcd60e51b8152600401610ce7906175b5565b600b54610e2157610d72616575565b60015460005b81811015610e1d57600b805460018101825560009190915283516000805160206178a083398151915260169092029182019081556020808601516000805160206178e08339815191528401805460ff1916911515919091179055604086015180518794610df9936000805160206178c08339815191529091019201906165a4565b506060820151610e0f906003830190601361661e565b505050806001019050610d78565b5050505b610e2961664b565b6000610e6a85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061337292505050565b9150915080610e8657610e7d606461352e565b92505050610f4e565b815160009060ff16610eab57610ea48360200151846040015161358f565b9050610f1a565b825160ff1660011415610f1657826020015151600114610ef057600080516020617804833981519152604051610ee0906172d5565b60405180910390a1506067610f11565b610ea48360200151600081518110610f0457fe5b60200260200101516141e3565b610f1a565b5060655b63ffffffff8116610f3f5750506040805160008152602081019091529150610f4e9050565b610f488161352e565b93505050505b9392505050565b60075460ff1681565b60035481565b606881565b334114610f885760405162461bcd60e51b8152600401610ce790617604565b6010544311610fa95760405162461bcd60e51b8152600401610ce790616fd2565b3a15610fc75760405162461bcd60e51b8152600401610ce79061735b565b60005460ff16610fe95760405162461bcd60e51b8152600401610ce790616e76565b60006110023168056bc75e2d63100000811115611020576110198168056bc75e2d6310000063ffffffff61435a16565b9150611027565b50506112a6565b6040516213929d60e11b8152611002906227253a9061104c9030908690600401616b54565b602060405180830381600087803b15801561106657600080fd5b505af115801561107a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109e91906169eb565b9150816110ac5750506112a6565b6000805b848110156110da578585828181106110c457fe5b90506020020135820191508060010190506110b0565b50806110e8575050506112a6565b6000806000805b8981101561129e578489898381811061110457fe5b9050602002013588028161111457fe5b0493508a8a8281811061112357fe5b90506020020160208101906111389190616889565b6001600160a01b0381166000908152600460205260409020549093509150811561125457600060018084038154811061116d57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff16156111da57836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d85866040516111cd9190617771565b60405180910390a261124e565b6003546111ed908663ffffffff61439c16565b6003908155810154611205908663ffffffff61439c16565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611245908890617771565b60405180910390a25b50611296565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d858560405161128d9190617771565b60405180910390a25b6001016110ef565b505050505050505b5050436010555050565b60015460009082106112c45750600061137a565b60006001600160a01b0316600183815481106112dc57fe5b60009182526020909120600490910201546001600160a01b0316148061130c5750600854158061130c5750600a54155b8061131b575060085460095410155b8061132c575061132a8261137f565b155b8061135557506000600b838154811061134157fe5b906000526020600020906016020160000154115b80611369575060016113656126b9565b5111155b156113765750600061137a565b5060015b919050565b60015460009082106113935750600061137a565b600b5482106113d057600182815481106113a957fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615905061137a565b600182815481106113dd57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615801561142a5750600b828154811061141157fe5b600091825260209091206001601690920201015460ff16155b92915050565b33611001146114515760405162461bcd60e51b8152600401610ce790617719565b600b5461150f57611460616575565b60015460005b8181101561150b57600b805460018101825560009190915283516000805160206178a083398151915260169092029182019081556020808601516000805160206178e08339815191528401805460ff19169115159190911790556040860151805187946114e7936000805160206178c08339815191529091019201906165a4565b5060608201516114fd906003830190601361661e565b505050806001019050611466565b5050505b6001600160a01b038116600090815260046020526040902054806115335750611586565b6001810390506000600b828154811061154857fe5b600091825260209091206001601690920201015460ff16905061156b83836143c1565b80156115745750805b15610d07576009805460001901905550505b50565b60015460609081906000805b828110156115dc57600181815481106115aa57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166115d4576001909101905b600101611595565b50606081604051908082528060200260200182016040528015611609578160200160208202803683370190505b50905060608260405190808252806020026020018201604052801561164257816020015b606081526020019060019003908161162d5790505b50600b54600094509091508414156117bd5760005b848110156117b7576001818154811061166c57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166117af576001818154811061169c57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106116c757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b81815481106116f457fe5b600091825260209182902060026016909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561178c5780601f106117615761010080835404028352916020019161178c565b820191906000526020600020905b81548152906001019060200180831161176f57829003601f168201915b505050505082858151811061179d57fe5b60209081029190910101526001909301925b600101611657565b50611859565b60005b8481101561185757600181815481106117d557fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661184f576001818154811061180557fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061183057fe5b6001600160a01b03909216602092830291909101909101526001909301925b6001016117c0565b505b909450925050505b9091565b61271081565b600181565b61100181565b60085481565b6102ca81565b600881565b600e54600c5460609182918061189b575060155b60606118a56126b9565b905060606118b282614774565b9050828251116118c9579094509250611861915050565b838383510310156118db578282510393505b83156119115760c843046118f783838388880360008a8a6148e2565b61190f8383838888038989038a8b8b8b5103016148e2565b505b60608360405190808252806020026020018201604052801561193d578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561197657816020015b60608152602001906001900390816119615790505b50905060005b858110156119f75784818151811061199057fe5b60200260200101518382815181106119a457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106119d057fe5b60200260200101518282815181106119e457fe5b602090810291909101015260010161197c565b509096509450505050509091565b60065481565b61200081565b6001600160a01b03811660009081526004602052604081205480611a3957600091505061137a565b60001901610f4e8161137f565b6001600160a01b03811660009081526004602052604081205480611a6e57600091505061137a565b600180820381548110611a7d57fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b600f5481565b60128181548110611ab457fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815293509091830182828015611b455780601f10611b1a57610100808354040283529160200191611b45565b820191906000526020600020905b815481529060010190602001808311611b2857829003601f168201915b505050505081565b60105481565b60018181548110611b6057fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b606681565b3361200014611c045760405162461bcd60e51b8152600401610ce7906175b5565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051611c37939291906177ba565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6001600160a01b03811660009081526004602052604081205480611c955760405162461bcd60e51b8152600401610ce79061753d565b6000190192915050565b600b54611d5d57611cae616575565b60015460005b81811015611d5957600b805460018101825560009190915283516000805160206178a083398151915260169092029182019081556020808601516000805160206178e08339815191528401805460ff1916911515919091179055604086015180518794611d35936000805160206178c08339815191529091019201906165a4565b506060820151611d4b906003830190601361661e565b505050806001019050611cb4565b5050505b600854611d6a5760036008555b600a54611d77576002600a555b6000611d8233611c5f565b9050611d8d816112b0565b611da95760405162461bcd60e51b8152600401610ce790617292565b6115863382614a39565b600981565b61100781565b600381565b60c881565b61100681565b6040518060a00160405280607c8152602001617824607c913981565b60005460ff1681565b6402540be40081565b60005460ff16611e1e5760405162461bcd60e51b8152600401610ce790616e76565b3361100714611e3f5760405162461bcd60e51b8152600401610ce790617389565b611ea984848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b60208201529150614ad19050565b15611f465760208114611ece5760405162461bcd60e51b8152600401610ce7906174f7565b604080516020601f8401819004810282018101909252828152600091611f0c91858580838501838280828437600092019190915250614b2a92505050565b905060648110158015611f225750620186a08111155b611f3e5760405162461bcd60e51b8152600401610ce790617182565b600255612657565b611fa684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b60208201529150614ad19050565b156120355760208114611fcb5760405162461bcd60e51b8152600401610ce790616cfc565b604080516020601f840181900481028201810190925282815260009161200991858580838501838280828437600092019190915250614b2a92505050565b905061271081111561202d5760405162461bcd60e51b8152600401610ce790617014565b600655612657565b61209f84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b60208201529150614ad19050565b1561213957602081146120c45760405162461bcd60e51b8152600401610ce790616d33565b604080516020601f840181900481028201810190925282815260009161210291858580838501838280828437600092019190915250614b2a92505050565b600c5490915080612111575060155b8082106121305760405162461bcd60e51b8152600401610ce790617087565b50600855612657565b6121a284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b60208201529150614ad19050565b1561223b57602081146121c75760405162461bcd60e51b8152600401610ce790616dfc565b604080516020601f840181900481028201810190925282815260009161220591858580838501838280828437600092019190915250614b2a92505050565b90506000811180156122175750600a81105b6122335760405162461bcd60e51b8152600401610ce790617695565b600a55612657565b6122af84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e646964617465730000000000000060208201529150614ad19050565b1561233e57602081146122d45760405162461bcd60e51b8152600401610ce790616db0565b604080516020601f840181900481028201810190925282815260009161231291858580838501838280828437600092019190915250614b2a92505050565b9050600d548111156123365760405162461bcd60e51b8152600401610ce7906171f8565b600e55612657565b6123a784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b60208201529150614ad19050565b1561242957602081146123cc5760405162461bcd60e51b8152600401610ce7906173d7565b604080516020601f840181900481028201810190925282815260009161240a91858580838501838280828437600092019190915250614b2a92505050565b600d819055600e5490915081101561242357600d54600e555b50612657565b61248d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b60208201529150614ad19050565b1561253b57602081146124b25760405162461bcd60e51b8152600401610ce790616e41565b604080516020601f84018190048102820181019092528281526000916124f091858580838501838280828437600092019190915250614b2a92505050565b9050600081116125125760405162461bcd60e51b8152600401610ce790616ee4565b60648111156125335760405162461bcd60e51b8152600401610ce790616f2c565b600c55612657565b6125a384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601181527073797374656d526577617264526174696f60781b60208201529150614ad19050565b1561263f57602081146125c85760405162461bcd60e51b8152600401610ce790617651565b604080516020601f840181900481028201810190925282815260009161260691858580838501838280828437600092019190915250614b2a92505050565b90506001811015801561261b57506127108111155b6126375760405162461bcd60e51b8152600401610ce79061712f565b600f55612657565b60405162461bcd60e51b8152600401610ce7906176f2565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a8484848460405161268c9493929190616cca565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b828110156126e8576126d48161137f565b156126e0578160010191505b6001016126c3565b50606081604051908082528060200260200182016040528015612715578160200160208202803683370190505b5090506000915060005b8381101561279c576127308161137f565b15612794576001818154811061274257fe5b600091825260209091206004909102015482516001600160a01b039091169083908590811061276d57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b60010161271f565b50925050505b90565b601581565b61027181565b61100281565b60138181548110611ab457fe5b60006127cd6126b9565b519050600080600c54116127e25760156127e6565b600c545b9050808211156127f4578091505b816127fe57600191505b5090565b67016345785d8a000081565b60055481565b61100381565b60005460ff161561283d5760405162461bcd60e51b8152600401610ce790617489565b61284561664b565b60006128686040518060a00160405280607c8152602001617824607c9139613372565b91509150806128895760405162461bcd60e51b8152600401610ce790617574565b612891616575565b60005b836020015151811015612a9257600b805460018101825560009190915282516000805160206178a083398151915260169092029182019081556020808501516000805160206178e08339815191528401805460ff191691151591909117905560408501518051869461291a936000805160206178c08339815191529091019201906165a4565b506060820151612930906003830190601361661e565b5050508360400151818151811061294357fe5b6020026020010151600b828154811061295857fe5b9060005260206000209060160201600201908051906020019061297c9291906165a4565b5060018460200151828151811061298f57fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a090930151600390930192909255918701518051918501939185908110612a6557fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101612894565b50506103e860025550506000805460ff19166001179055565b600d5481565b601354600090815b81811015612bba57612ba285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601380549092508591508110612b0a57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015612b985780601f10612b6d57610100808354040283529160200191612b98565b820191906000526020600020905b815481529060010190602001808311612b7b57829003601f168201915b5050505050614b2f565b15612bb25760019250505061142a565b600101612ab9565b5060125460005b81811015612c2b57612c1286868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601280549092508591508110612b0a57fe5b15612c23576001935050505061142a565b600101612bc1565b50600095945050505050565b3361100114612c585760405162461bcd60e51b8152600401610ce790617719565b600b54612d1657612c67616575565b60015460005b81811015612d1257600b805460018101825560009190915283516000805160206178a083398151915260169092029182019081556020808601516000805160206178e08339815191528401805460ff1916911515919091179055604086015180518794612cee936000805160206178c08339815191529091019201906165a4565b506060820151612d04906003830190601361661e565b505050806001019050612c6d565b5050505b6000612d2182614b93565b9050612d2c816112b0565b15612d3b57612d3b8282614a39565b5050565b606581565b334114612d635760405162461bcd60e51b8152600401610ce790617604565b60005460ff16612d855760405162461bcd60e51b8152600401610ce790616e76565b60003411612da55760405162461bcd60e51b8152600401610ce7906171c9565b3a15612dc35760405162461bcd60e51b8152600401610ce79061735b565b6001600160a01b03811660009081526004602052604090205460145434919060ff16612e0357610271600f556103e86006556014805460ff191660011790555b6000612e2c612710612e20600f5486614d3690919063ffffffff16565b9063ffffffff614d7016565b90508015612e9c576040516110029082156108fc029083906000818181858888f19350505050158015612e63573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d81604051612e939190617771565b60405180910390a15b600083118015612eae57506000600654115b15612f54576000612ed0612710612e2060065487614d3690919063ffffffff16565b90508015612f525760405161dead9082156108fc029083906000818181858888f19350505050158015612f07573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee581604051612f379190617771565b60405180910390a1612f4f848263ffffffff61435a16565b93505b505b612f64838263ffffffff61435a16565b92508115613064576000600180840381548110612f7d57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615612fea57846001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b485604051612fdd9190617771565b60405180910390a261305e565b600354612ffd908563ffffffff61439c16565b6003908155810154613015908563ffffffff61439c16565b60038201556040516001600160a01b038616907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc05590613055908790617771565b60405180910390a25b506130a6565b836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b48460405161309d9190617771565b60405180910390a25b50505050565b600e5481565b61100081565b61dead81565b600b81815481106130cb57fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff909116949192918301828280156131765780601f1061314b57610100808354040283529160200191613176565b820191906000526020600020905b81548152906001019060200180831161315957829003601f168201915b5050505050905083565b61100481565b6000600a5460001480613197575081155b806131a25750600954155b156131af57506000610f4e565b600960008154600190039190508190555060006131fa600a54612e2085612e20600b89815481106131dc57fe5b6000918252602090912060169091020154439063ffffffff61435a16565b90506000600b858154811061320b57fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b15801561327057600080fd5b505afa158015613284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a89190616a03565b9150915060009350808310613322576132c187876143c1565b506040516305bfb49960e41b815261100190635bfb4990906132e7908a90600401616b40565b600060405180830381600087803b15801561330157600080fd5b505af1158015613315573d6000803e3d6000fd5b5050505060019350613334565b8183106133345761333287614b93565b505b6040516001600160a01b038816907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050509392505050565b61337a61664b565b600061338461664b565b61338c61666f565b61339d61339886614db2565b614dd7565b90506000805b6133ac83614e21565b1561352057806133d1576133c76133c284614e42565b614e90565b60ff168452613518565b80600114156135135760606133ed6133e885614e42565b614f10565b9050805160405190808252806020026020018201604052801561342a57816020015b61341761668f565b81526020019060019003908161340f5790505b508560200181905250805160405190808252806020026020018201604052801561346857816020015b60608152602001906001900390816134535790505b50604086015260005b81518110156135085761348261668f565b606060006134a285858151811061349557fe5b6020026020010151614fe1565b925092509250806134c2578860009a509a50505050505050505050613529565b82896020015185815181106134d357fe5b602002602001018190525081896040015185815181106134ef57fe5b6020026020010181905250505050806001019050613471565b506001925050613518565b613520565b6001016133a3565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b606081526020019060019003908161354857905050905061356e8363ffffffff166150fb565b8160008151811061357b57fe5b6020026020010181905250610f4e8161510e565b60006064835111156135c6576000805160206178048339815191526040516135b690616f89565b60405180910390a150606661142a565b60005b83518110156136645760005b8181101561365b578481815181106135e957fe5b6020026020010151600001516001600160a01b031685838151811061360a57fe5b6020026020010151600001516001600160a01b0316141561365357600080516020617804833981519152604051613640906170e4565b60405180910390a160669250505061142a565b6001016135d5565b506001016135c9565b506060806136728585615198565b60015491935091506000908190815b818110156136f75767016345785d8a00006001828154811061369f57fe5b906000526020600020906004020160030154106136c1578360010193506136ef565b6000600182815481106136d057fe5b90600052602060002090600402016003015411156136ef578260010192505b600101613681565b50606083604051908082528060200260200182016040528015613724578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015613753578160200160208202803683370190505b509050606085604051908082528060200260200182016040528015613782578160200160208202803683370190505b5090506060866040519080825280602002602001820160405280156137b1578160200160208202803683370190505b50905060006060876040519080825280602002602001820160405280156137e2578160200160208202803683370190505b509050606088604051908082528060200260200182016040528015613811578160200160208202803683370190505b509050600099506000985060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561385957600080fd5b505afa15801561386d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061389191906169eb565b905067016345785d8a00008111156138dc576000805160206178048339815191526040516138be90617448565b60405180910390a160689d505050505050505050505050505061142a565b60005b89811015613b4d5767016345785d8a0000600182815481106138fd57fe5b90600052602060002090600402016003015410613a82576001818154811061392157fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898d8151811061395257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be4006001838154811061398757fe5b906000526020600020906004020160030154816139a057fe5b06600183815481106139ae57fe5b9060005260206000209060040201600301540390506139d6838261435a90919063ffffffff16565b898e815181106139e257fe5b602002602001018181525050600182815481106139fb57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878e81518110613a2c57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888e81518110613a5957fe5b6020908102919091010152613a74868263ffffffff61439c16565b95508c6001019c5050613b45565b600060018281548110613a9157fe5b9060005260206000209060040201600301541115613b455760018181548110613ab657fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848c81518110613ae757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060018181548110613b1457fe5b906000526020600020906004020160030154838c81518110613b3257fe5b6020026020010181815250508a6001019a505b6001016138df565b5060008415613dc3576002546040516303702b2960e51b815261100491636e056520918891613b87918e918e918d91420190600401616c32565b6020604051808303818588803b158015613ba057600080fd5b505af193505050508015613bd1575060408051601f3d908101601f19168201909252613bce91810190616918565b60015b613d48576040516000815260443d1015613bed57506000613c88565b60046000803e60005160e01c6308c379a08114613c0e576000915050613c88565b60043d036004833e81513d60248201116001600160401b0382111715613c3957600092505050613c88565b80830180516001600160401b03811115613c5a576000945050505050613c88565b8060208301013d8601811115613c7857600095505050505050613c88565b601f01601f191660405250925050505b80613c935750613cd5565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051613cc79190616cb7565b60405180910390a250613d43565b3d808015613cff576040519150601f19603f3d011682016040523d82523d6000602084013e613d04565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051613d399190616cb7565b60405180910390a2505b613dc3565b8015613d8a577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051613d7d9190617771565b60405180910390a1613dc1565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051613db890616d79565b60405180910390a25b505b8015613f795760005b8751811015613f77576000888281518110613de357fe5b60200260200101519050600060018281548110613dfc57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc9185908110613e2d57fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f1935050505090508015613ee95760018281548110613e6e57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d9185908110613ebd57fe5b906000526020600020906004020160030154604051613edc9190617771565b60405180910390a2613f6d565b60018281548110613ef657fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d9185908110613f4557fe5b906000526020600020906004020160030154604051613f649190617771565b60405180910390a25b5050600101613dcc565b505b8351156140c35760005b84518110156140c1576000858281518110613f9a57fe5b60200260200101516001600160a01b03166108fc868481518110613fba57fe5b60200260200101519081150290604051600060405180830381858888f193505050509050801561405057858281518110613ff057fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d86848151811061402e57fe5b60200260200101516040516140439190617771565b60405180910390a26140b8565b85828151811061405c57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d86848151811061409a57fe5b60200260200101516040516140af9190617771565b60405180910390a25b50600101613f83565b505b505050505050505050505050600047111561413f577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d476040516141079190617771565b60405180910390a1604051611002904780156108fc02916000818181858888f1935050505015801561413d573d6000803e3d6000fd5b505b6000600381905560055581511561415a5761415a82826153d1565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561419757600080fd5b505af11580156141ab573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b80516001600160a01b0316600090815260046020526040812054801580614234575060018082038154811061421457fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b1561427a5782516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a2600091505061137a565b6001546005546000198201118015906142d05784516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000935050505061137a565b6005805460019081019091558054819060001986019081106142ee57fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915585516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a2506000949350505050565b6000610f4e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615b8b565b600082820183811015610f4e5760405162461bcd60e51b8152600401610ce790616ead565b600080600183815481106143d157fe5b906000526020600020906004020160030154905060006001808054905003905060016143fb6126b9565b51116144305760006001858154811061441057fe5b90600052602060002090600402016003018190555060009250505061142a565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a70836040516144699190617771565b60405180910390a26001600160a01b038516600090815260046020526040812055835b6001546000190181101561465657600181600101815481106144aa57fe5b9060005260206000209060040201600182815481106144c557fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b80549091830190811061458657fe5b9060005260206000209060160201600b82815481106145a157fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff19909216919091179055600280840180546145f89383860193908216156101000260001901909116046166c4565b5061460b60038281019084016013616739565b5090505080600101600460006001848154811061462457fe5b600091825260208083206004909202909101546001600160a01b0316835282019290925260400190205560010161448c565b50600180548061466257fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b8054806146b557fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906146e76002830182616763565b6146f56003830160006167a7565b50509055600081838161470457fe5b04905080156147685760015460005b8181101561476557826001828154811061472957fe5b906000526020600020906004020160030154016001828154811061474957fe5b6000918252602090912060036004909202010155600101614713565b50505b50600195945050505050565b6001548151604080518281526020808402820101909152606092919083908280156147b357816020015b606081526020019060019003908161479e5790505b50600b5490915083146147ca57925061137a915050565b60005b828110156148d957600b6001600460008985815181106147e957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054038154811061481d57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156148b55780601f1061488a576101008083540402835291602001916148b5565b820191906000526020600020905b81548152906001019060200180831161489857829003601f168201915b50505050508282815181106148c657fe5b60209081029190910101526001016147cd565b50949350505050565b60005b82811015614a2f5760008287838801604051602001614905929190616b32565b6040516020818303038152906040528051906020012060001c8161492557fe5b06905080850182870114614a26576000898388018151811061494357fe5b602002602001015190506060898489018151811061495d57fe5b602002602001015190508a8388018151811061497557fe5b60200260200101518b858a018151811061498b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b848901815181106149ba57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505089838801815181106149e857fe5b60200260200101518a858a01815181106149fe57fe5b6020026020010181905250808a84890181518110614a1857fe5b602002602001018190525050505b506001016148e5565b5050505050505050565b600980546001908101909155600b805483908110614a5357fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b8281548110614a8957fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b600081604051602001614ae49190616b16565b6040516020818303038152906040528051906020012083604051602001614b0b9190616b16565b6040516020818303038152906040528051906020012014905092915050565b015190565b815181516000916001918114808314614b4b5760009250614b89565b600160208701838101602088015b600284838510011415614b84578051835114614b785760009650600093505b60209283019201614b59565b505050505b5090949350505050565b6001600160a01b03811660009081526004602052604081205480614bbc5750600019905061137a565b600181039050600060018281548110614bd157fe5b9060005260206000209060040201600301549050600060018381548110614bf457fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d90614c4d908590617771565b60405180910390a280614c655782935050505061137a565b6000818381614c7057fe5b0490508015614d2c5760005b84811015614cce578160018281548110614c9257fe5b9060005260206000209060040201600301540160018281548110614cb257fe5b6000918252602090912060036004909202010155600101614c7c565b50600180549085015b81811015614d29578260018281548110614ced57fe5b9060005260206000209060040201600301540160018281548110614d0d57fe5b6000918252602090912060036004909202010155600101614cd7565b50505b5091949350505050565b600082614d455750600061142a565b82820282848281614d5257fe5b0414610f4e5760405162461bcd60e51b8152600401610ce79061731a565b6000610f4e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615bb7565b614dba6167b6565b506040805180820190915281518152602082810190820152919050565b614ddf61666f565b614de882615bee565b614df157600080fd5b6000614e008360200151615c28565b60208085015160408051808201909152868152920190820152915050919050565b6000614e2b6167b6565b505080518051602091820151919092015191011190565b614e4a6167b6565b614e5382614e21565b614e5c57600080fd5b60208201516000614e6c82615c8b565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590614ea557508151602110155b614eae57600080fd5b6000614ebd8360200151615c28565b90508083600001511015614ee35760405162461bcd60e51b8152600401610ce7906174c0565b8251602080850151830180519284900392918310156148d957506020919091036101000a90049392505050565b6060614f1b82615bee565b614f2457600080fd5b6000614f2f83615d6c565b9050606081604051908082528060200260200182016040528015614f6d57816020015b614f5a6167b6565b815260200190600190039081614f525790505b5090506000614f7f8560200151615c28565b60208601510190506000805b84811015614fd657614f9c83615c8b565b9150604051806040016040528083815260200184815250848281518110614fbf57fe5b602090810291909101015291810191600101614f8b565b509195945050505050565b614fe961668f565b60606000614ff561668f565b6060614fff61666f565b61500887614dd7565b90506000805b61501783614e21565b156150ec57806150425761503261502d84614e42565b615dc8565b6001600160a01b031685526150e4565b806001141561506a5761505761502d84614e42565b6001600160a01b031660208601526150e4565b80600214156150925761507f61502d84614e42565b6001600160a01b031660408601526150e4565b80600314156150be576150a76133c284614e42565b6001600160401b03166060860152600191506150e4565b80600414156150df576150d86150d384614e42565b615de2565b93506150e4565b6150ec565b60010161500e565b50929791965091945092505050565b606061142a61510983615e52565b615f38565b606081516000141561512f575060408051600081526020810190915261137a565b60608260008151811061513e57fe5b602002602001015190506000600190505b835181101561517f576151758285838151811061516857fe5b6020026020010151615f8a565b915060010161514f565b50610f4e615192825160c060ff16616007565b82615f8a565b6060806000808080806151a96127c3565b6001549091505b80156152b757600181039250600b83815481106151c957fe5b600091825260209091206001601690920201015460ff166151e9576152ae565b600183815481106151f657fe5b60009182526020909120600490910201546001600160a01b0316945061521d858484613186565b9350831580615230575060018a51038610155b1561523a576152ae565b60005b8a518110156152ac57856001600160a01b03168b828151811061525c57fe5b6020026020010151600001516001600160a01b031614156152a45760018b828151811061528557fe5b60209081029190910101519015156080909101526001909601956152ac565b60010161523d565b505b600019016151b0565b50848951036040519080825280602002602001820160405280156152f557816020015b6152e261668f565b8152602001906001900390816152da5790505b5096508489510360405190808252806020026020018201604052801561532f57816020015b606081526020019060019003908161531a5790505b5095506000915060005b89518110156153c35789818151811061534e57fe5b6020026020010151608001516153bb5789818151811061536a57fe5b602002602001015188848151811061537e57fe5b602002602001018190525088818151811061539557fe5b60200260200101518784815181106153a957fe5b60200260200101819052508260010192505b600101615339565b5050505050505b9250929050565b600154825160005b828110156154ee5760016153eb61668f565b600183815481106153f857fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156154c25787818151811061548857fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b031614156154ba57600092506154c2565b600101615474565b5081156154e45780516001600160a01b03166000908152600460205260408120555b50506001016153d9565b50808211156155ad57805b828110156155ab57600180548061550c57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061555f57fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906155916002830182616763565b61559f6003830160006167a7565b505090556001016154f9565b505b60008183106155bc57816155be565b825b905060005b8181101561592d576156708682815181106155da57fe5b6020026020010151600183815481106155ef57fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a08201526160d9565b61582457806001016004600088848151811061568857fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055508581815181106156c457fe5b6020026020010151600182815481106156d957fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a090910151600390910155845185908290811061579457fe5b6020026020010151600b82815481106157a957fe5b906000526020600020906016020160020190805190602001906157cd9291906165a4565b506000600b82815481106157dd57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b80548390811061580e57fe5b6000918252602090912060169091020155615925565b6158b585828151811061583357fe5b6020026020010151600b838154811061584857fe5b600091825260209182902060026016909202018101805460408051601f600019610100600186161502019093169490940491820185900485028401850190528083529192909190830182828015612b985780601f10612b6d57610100808354040283529160200191612b98565b615900578481815181106158c557fe5b6020026020010151600b82815481106158da57fe5b906000526020600020906016020160020190805190602001906158fe9291906165a4565b505b60006001828154811061590f57fe5b9060005260206000209060040201600301819055505b6001016155c3565b5082821115615b055761593e616575565b835b83811015615b025785818151811061595457fe5b60200260200101518260400181905250600187828151811061597257fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b80549283018155909352845160169091026000805160206178a08339815191528101918255858301516000805160206178e08339815191528201805491151560ff1990921691909117905592850151805186949293615aa8936000805160206178c0833981519152019201906165a4565b506060820151615abe906003830190601361661e565b5050508060010160046000898481518110615ad557fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101615940565b50505b615b0d61615a565b615b1561633c565b6000600981905560015493505b83811015615b83576000600b8281548110615b3957fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b805483908110615b6a57fe5b6000918252602090912060169091020155600101615b22565b505050505050565b60008184841115615baf5760405162461bcd60e51b8152600401610ce79190616cb7565b505050900390565b60008183615bd85760405162461bcd60e51b8152600401610ce79190616cb7565b506000838581615be457fe5b0495945050505050565b8051600090615bff5750600061137a565b6020820151805160001a9060c0821015615c1e5760009250505061137a565b5060019392505050565b8051600090811a6080811015615c4257600091505061137a565b60b8811080615c5d575060c08110801590615c5d575060f881105b15615c6c57600191505061137a565b60c0811015615c805760b51901905061137a565b60f51901905061137a565b80516000908190811a6080811015615ca65760019150615d65565b60b8811015615cbb57607e1981019150615d65565b60c0811015615d0c57600060b78203600186019550806020036101000a865104915060018101820193505080831015615d065760405162461bcd60e51b8152600401610ce790617267565b50615d65565b60f8811015615d215760be1981019150615d65565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615d635760405162461bcd60e51b8152600401610ce790617267565b505b5092915050565b8051600090615d7d5750600061137a565b60008090506000615d918460200151615c28565b602085015185519181019250015b80821015615dbf57615db082615c8b565b82019150826001019250615d9f565b50909392505050565b8051600090601514615dd957600080fd5b61142a82614e90565b8051606090615df057600080fd5b6000615dff8360200151615c28565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015615e36576020820181803683370190505b50905060008160200190506148d984876020015101828561652a565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416615e9657506018615eba565b6fffffffffffffffffffffffffffffffff198416615eb657506010615eba565b5060005b6020811015615ef057818181518110615ecf57fe5b01602001516001600160f81b03191615615ee857615ef0565b600101615eba565b60008160200390506060816040519080825280601f01601f191660200182016040528015615f25576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015615f6a5750607f60f81b82600081518110615f5857fe5b01602001516001600160f81b03191611155b15615f7657508061137a565b61142a615f888351608060ff16616007565b835b6060806040519050835180825260208201818101602087015b81831015615fbb578051835260209283019201615fa3565b50855184518101855292509050808201602086015b81831015615fe8578051835260209283019201615fd0565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106160315760405162461bcd60e51b8152600401610ce79061705f565b6040805160018082528183019092526060916020820181803683370190505090506037841161608b5782840160f81b8160008151811061606d57fe5b60200101906001600160f81b031916908160001a905350905061142a565b606061609685615e52565b90508381510160370160f81b826000815181106160af57fe5b60200101906001600160f81b031916908160001a9053506160d08282615f8a565b95945050505050565b805182516000916001600160a01b039182169116148015616113575081602001516001600160a01b031683602001516001600160a01b0316145b8015616138575081604001516001600160a01b031683604001516001600160a01b0316145b8015610f4e5750506060908101519101516001600160401b0390811691161490565b601254601354808211156161a557805b828110156161a357601280548061617d57fe5b6001900381819060005260206000200160006161999190616763565b905560010161616a565b505b60008183106161b457816161b6565b825b905060005b818110156162ce57616273601282815481106161d357fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156162615780601f1061623657610100808354040283529160200191616261565b820191906000526020600020905b81548152906001019060200180831161624457829003601f168201915b505050505060138381548110612b0a57fe5b6162c6576013818154811061628457fe5b906000526020600020016012828154811061629b57fe5b9060005260206000200190805460018160011615610100020316600290046162c49291906166c4565b505b6001016161bb565b5082821115610d0757825b828110156130a6576012601382815481106162f057fe5b60009182526020808320845460018181018755958552919093209290910180546163339493909201929091600261010092821615929092026000190116046166c4565b506001016162d9565b601354600b548082111561638757805b8281101561638557601380548061635f57fe5b60019003818190600052602060002001600061637b9190616763565b905560010161634c565b505b60008183106163965781616398565b825b905060005b818110156164b757616455601382815481106163b557fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156164435780601f1061641857610100808354040283529160200191616443565b820191906000526020600020905b81548152906001019060200180831161642657829003601f168201915b5050505050600b838154811061584857fe5b6164af57600b818154811061646657fe5b90600052602060002090601602016002016013828154811061648457fe5b9060005260206000200190805460018160011615610100020316600290046164ad9291906166c4565b505b60010161639d565b5082821115610d0757825b828110156130a6576013600b82815481106164d957fe5b600091825260208083208454600180820187559585529190932060169290920290920160029081018054616521959390940193909260001990821615610100020116046166c4565b506001016164c2565b8061653457610d07565b5b60208110616554578251825260209283019290910190601f1901616535565b915181516020939093036101000a6000190180199091169216919091179052565b6040518060800160405280600081526020016000151581526020016060815260200161659f6167d0565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106165e557805160ff1916838001178555616612565b82800160010185558215616612579182015b828111156166125782518255916020019190600101906165f7565b506127fe9291506167ef565b826013810192821561661257916020028201828111156166125782518255916020019190600101906165f7565b6040518060600160405280600060ff16815260200160608152602001606081525090565b60405180604001604052806166826167b6565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106166fd5780548555616612565b8280016001018555821561661257600052602060002091601f016020900482015b8281111561661257825482559160010191906001019061671e565b8260138101928215616612579182018281111561661257825482559160010191906001019061671e565b50805460018160011615610100020316600290046000825580601f106167895750611586565b601f01602090049060005260206000209081019061158691906167ef565b506115869060138101906167ef565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b6127a291905b808211156127fe57600081556001016167f5565b60008083601f84011261681a578182fd5b5081356001600160401b03811115616830578182fd5b60208301915083602080830285010111156153ca57600080fd5b60008083601f84011261685b578182fd5b5081356001600160401b03811115616871578182fd5b6020830191508360208285010111156153ca57600080fd5b60006020828403121561689a578081fd5b81356001600160a01b0381168114610f4e578182fd5b600080600080604085870312156168c5578283fd5b84356001600160401b03808211156168db578485fd5b6168e788838901616809565b909650945060208701359150808211156168ff578384fd5b5061690c87828801616809565b95989497509550505050565b600060208284031215616929578081fd5b81518015158114610f4e578182fd5b6000806020838503121561694a578182fd5b82356001600160401b0381111561695f578283fd5b61696b8582860161684a565b90969095509350505050565b6000806000806040858703121561698c578384fd5b84356001600160401b03808211156169a2578586fd5b6169ae8883890161684a565b909650945060208701359150808211156169c6578384fd5b5061690c8782880161684a565b6000602082840312156169e4578081fd5b5035919050565b6000602082840312156169fc578081fd5b5051919050565b60008060408385031215616a15578182fd5b505080516020909101519092909150565b600080600060408486031215616a3a578283fd5b833560ff81168114616a4a578384fd5b925060208401356001600160401b03811115616a64578283fd5b616a708682870161684a565b9497909650939450505050565b6000815180845260208085019450808401835b83811015616ab55781516001600160a01b031687529582019590820190600101616a90565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452616b028160208601602086016177d7565b601f01601f19169290920160200192915050565b60008251616b288184602087016177d7565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b600060208252610f4e6020830184616a7d565b600060408252616bd56040830185616a7d565b602083820381850152818551808452828401915082838202850101838801865b83811015616c2357601f19878403018552616c11838351616aea565b94860194925090850190600101616bf5565b50909998505050505050505050565b600060808252616c456080830187616a7d565b828103602084810191909152865180835287820192820190845b81811015616c7b57845183529383019391830191600101616c5f565b50508481036040860152616c8f8188616a7d565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b600060208252610f4e6020830184616aea565b600060408252616cde604083018688616ac0565b8281036020840152616cf1818587616ac0565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252602b908201527f746865206275726e526174696f206d757374206265206e6f206772656174657260408201526a0207468616e2031303030360ac1b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526033908201527f7468652073797374656d526577617264526174696f206d757374206265206e6f60408201527202067726561746572207468616e20313030303606c1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526024908201527f6c656e677468206f662073797374656d526577617264526174696f206d69736d6040820152630c2e8c6d60e31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b61ffff91909116815260200190565b90815260200190565b60008482528315156020830152606060408301526160d06060830184616aea565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff85168252604060208301526160d0604083018486616ac0565b60005b838110156177f25781810151838201526020016177da565b838111156130a6575050600091015256fe70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2f87a80f877f8759403735c2ed70a56cd221e0024eb4bf90243c9d6e99403735c2ed70a56cd221e0024eb4bf90243c9d6e99403735c2ed70a56cd221e0024eb4bf90243c9d6e98410000000b085e6972fc98cd3c81d64d40e325acfed44365b97a7567a27939c14dbc7512ddcf54cb1284eb637cfa308ae4e00cb55880175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbb0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaa164736f6c6343000604000a" + }, + "0x0000000000000000000000000000000000001001": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106102955760003560e01c80638256ace611610167578063c81b1662116100ce578063e1c7392a11610087578063e1c7392a146104d3578063eb57bff7146104db578063f9a2bbc7146104e3578063fc3e5908146104eb578063fc4333cd146104f3578063fd6a6879146104fb57610295565b8063c81b166214610482578063c8509d811461048a578063c96be4cb1461049d578063cc844b73146104b0578063d2a42e4b146104c3578063dc927faf146104cb57610295565b8063a78abc1611610120578063a78abc1614610447578063ab51bb961461044f578063ac0af62914610457578063ac4317511461045f578063ae61dc3b14610472578063c80d4b8f1461047a57610295565b80638256ace61461040c578063831d65d11461041457806396713da9146104275780639bc8e4f21461042f5780639dc0926214610437578063a1a11bf51461043f57610295565b8063493279b11161020b5780636e47b482116101c45780636e47b482146103dc57806370fd5bad146103e4578063718a8aa8146103ec57806375d47a0a146103f45780637912a65d146103fc5780637942fd051461040457610295565b8063493279b1146103925780634bf6c882146103a757806351e80672146103af578063567a372d146103b75780635bfb4990146103bf57806362b72cf5146103d457610295565b806335aa2e441161025d57806335aa2e441461032457806337c8dab914610337578063389f4f71146103585780633a63f4b11461036d5780633dffc3871461037557806343756e5c1461038a57610295565b80630bee7a671461029a5780630e2374a5146102b85780631182b875146102cd57806322d1e80b146102ed57806323bac5a214610302575b600080fd5b6102a2610503565b6040516102af9190613560565b60405180910390f35b6102c0610508565b6040516102af9190612d7c565b6102e06102db366004612cb2565b61050e565b6040516102af9190612db4565b6102f5610574565b6040516102af9190612da9565b610315610310366004612a60565b61057d565b6040516102af93929190613548565b6102c0610332366004612c82565b6105a0565b61034a610345366004612a60565b6105c7565b6040516102af92919061353a565b61036061061e565b6040516102af9190613510565b610360610624565b61037d61062a565b6040516102af9190613571565b6102c061062f565b61039a610635565b6040516102af9190613501565b61037d61063b565b6102c0610640565b610360610646565b6103d26103cd366004612a60565b61064c565b005b6103606106f7565b6102c06106fd565b61037d610703565b61037d610708565b6102c061070d565b610360610713565b61037d610718565b61034a61071d565b6103d2610422366004612cb2565b610727565b61037d610839565b61036061083e565b6102c0610849565b6102c061084f565b6102f5610855565b6102a261085e565b610360610863565b6103d261046d366004612b66565b610868565b610360610e18565b610360610e1f565b6102c0610e24565b6103d2610498366004612cb2565b610e2a565b6103d26104ab366004612a60565b610e9b565b6103d26104be366004612bcf565b61128c565b61036061187d565b6102c0611882565b6103d2611888565b6103606118d4565b6102c06118da565b61037d6118e0565b6103d26118e5565b6102c0611d2e565b606481565b61200181565b6060336120001461053a5760405162461bcd60e51b815260040161053190613359565b60405180910390fd5b60005460ff1661055c5760405162461bcd60e51b815260040161053190612eaf565b60405162461bcd60e51b81526004016105319061344a565b60075460ff1681565b600260208190526000918252604090912080546001820154919092015460ff1683565b600181815481106105ad57fe5b6000918252602090912001546001600160a01b0316905081565b6000806105d2612847565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b60065481565b600181565b61100181565b6102ca81565b600881565b61200081565b60045481565b336110001461066d5760405162461bcd60e51b81526004016105319061313e565b60005460ff1661068f5760405162461bcd60e51b815260040161053190612eaf565b61200063f7a251d7600b6106a284611d34565b60006040518463ffffffff1660e01b81526004016106c29392919061357f565b600060405180830381600087803b1580156106dc57600080fd5b505af11580156106f0573d6000803e3d6000fd5b5050505050565b60035481565b61100581565b600281565b601081565b61100881565b603281565b600b81565b6004546005549091565b33612000146107485760405162461bcd60e51b815260040161053190613359565b60005460ff1661076a5760405162461bcd60e51b815260040161053190612eaf565b61077261286a565b60006107b384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e0792505050565b9150915080156107fa5781516040517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e629967916107ed91613560565b60405180910390a16106f0565b81516040517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e79161082a91613560565b60405180910390a15050505050565b600981565b662386f26fc1000081565b61100781565b61100681565b60005460ff1681565b600081565b600481565b60005460ff1661088a5760405162461bcd60e51b815260040161053190612eaf565b33611007146108ab5760405162461bcd60e51b815260040161053190613216565b61091684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b60208201529150611e879050565b156109b1576020811461093b5760405162461bcd60e51b8152600401610531906130ca565b604080516020601f840181900481028201810190925282815260009161097991858580838501838280828437600092019190915250611ee192505050565b90506001811015801561098d575060055481105b6109a95760405162461bcd60e51b815260040161053190613314565b600455610dd5565b610a1784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b60208201529150611e879050565b15610ab35760208114610a3c5760405162461bcd60e51b815260040161053190613264565b604080516020601f8401819004810282018101909252828152600091610a7a91858580838501838280828437600092019190915250611ee192505050565b90506103e88111158015610a8f575060045481115b610aab5760405162461bcd60e51b815260040161053190612f68565b600555610dd5565b610b2784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f66696e616c697479536c617368526577617264526174696f000000000000000060208201529150611e879050565b15610bc15760208114610b4c5760405162461bcd60e51b815260040161053190613481565b604080516020601f8401819004810282018101909252828152600091610b8a91858580838501838280828437600092019190915250611ee192505050565b9050600a8110158015610b9d5750606481105b610bb95760405162461bcd60e51b81526004016105319061307e565b600655610dd5565b610c3584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f656e61626c654d616c6963696f7573566f7465536c617368000000000000000060208201529150611e879050565b15610cac5760208114610c5a5760405162461bcd60e51b815260040161053190612f9d565b604080516020601f8401819004810282018101909252828152610c969190848480838501838280828437600092019190915250611ee692505050565b6007805460ff1916911515919091179055610dd5565b610d2084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601781527f6d616c6963696f7573566f7465536c61736853636f706500000000000000000060208201529150611e879050565b15610dbd5760208114610d455760405162461bcd60e51b815260040161053190612df9565b604080516020601f8401819004810282018101909252828152600091610d8391858580838501838280828437600092019190915250611ee192505050565b90506170808110158015610d995750620d2f0081105b610db55760405162461bcd60e51b815260040161053190612ee6565b600855610dd5565b60405162461bcd60e51b8152600401610531906133f5565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a84848484604051610e0a9493929190612dc7565b60405180910390a150505050565b6201518081565b609681565b61100281565b3361200014610e4b5760405162461bcd60e51b815260040161053190613359565b60005460ff16610e6d5760405162461bcd60e51b815260040161053190612eaf565b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b334114610eba5760405162461bcd60e51b8152600401610531906133a8565b60005460ff16610edc5760405162461bcd60e51b815260040161053190612eaf565b6003544311610efd5760405162461bcd60e51b8152600401610531906134cc565b3a15610f1b5760405162461bcd60e51b8152600401610531906131b9565b60405163155853f360e21b8152611000906355614fcc90610f40908490600401612d7c565b60206040518083038186803b158015610f5857600080fd5b505afa158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f909190612b46565b610f9957611285565b610fa1612847565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff161580159282019290925290610ffc576020810180516001019052611055565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b43815260055460208201518161106757fe5b066111b357600060208201526040516335409f7f60e01b8152611000906335409f7f90611098908590600401612d7c565b600060405180830381600087803b1580156110b257600080fd5b505af11580156110c6573d6000803e3d6000fd5b505050506120006001600160a01b031663f7a251d7600b6110e685611d34565b60006040518463ffffffff1660e01b81526004016111069392919061357f565b600060405180830381600087803b15801561112057600080fd5b505af1925050508015611131575060015b6111ae573d80801561115f576040519150601f19603f3d011682016040523d82523d6000602084013e611164565b606091505b50826001600160a01b03167fd7bc86ff5d08c8ab043edec743302aba2520e6635172a428bc956721db9e2d1c8360200151836040516111a4929190613519565b60405180910390a2505b61121f565b6004548160200151816111c257fe5b0661121f576040516375abf10160e11b81526110009063eb57e202906111ec908590600401612d7c565b600060405180830381600087803b15801561120657600080fd5b505af115801561121a573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505b5043600355565b60005460ff166112ae5760405162461bcd60e51b815260040161053190612eaf565b604051630a83aaa960e31b81526110069063541d5548906112d3903390600401612d7c565b60206040518083038186803b1580156112eb57600080fd5b505afa1580156112ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113239190612b46565b61133f5760405162461bcd60e51b815260040161053190612e43565b60075460ff166113615760405162461bcd60e51b815260040161053190612e7a565b60065461136e5760146006555b60085461137d57620151806008555b6008548151604001514391011180156113a157504360085482602001516040015101115b6113bd5760405162461bcd60e51b81526004016105319061341c565b8060200151602001518160000151602001511480156113eb5750806020015160600151816000015160600151145b156114085760405162461bcd60e51b815260040161053190613111565b8051604081015190511080156114275750602081015160408101519051105b6114435760405162461bcd60e51b815260040161053190613047565b6020810151518151511080156114685750806000015160400151816020015160400151105b8061149357508051516020820151511080156114935750806020015160400151816000015160400151105b806114ad5750806020015160400151816000015160400151145b6114c95760405162461bcd60e51b815260040161053190612f31565b604080820151905163ea321e4960e01b81526110009163ea321e49916114f29190600401612db4565b60206040518083038186803b15801561150a57600080fd5b505afa15801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190612b46565b61155e5760405162461bcd60e51b8152600401610531906131e7565b61157081600001518260400151611f0e565b8015611589575061158981602001518260400151611f0e565b6115a55760405162461bcd60e51b815260040161053190612fe8565b6060806110006001600160a01b0316633b071dcc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156115e357600080fd5b505afa1580156115f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261161f9190810190612a83565b9150915060005b815181101561175a5761165082828151811061163e57fe5b602002602001015185604001516120e6565b15611752576006546040516213929d60e11b8152606461100280319093020491906227253a906116869033908590600401612d90565b602060405180830381600087803b1580156116a057600080fd5b505af11580156116b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d89190612c9a565b506110006001600160a01b03166335409f7f8584815181106116f657fe5b60200260200101516040518263ffffffff1660e01b815260040161171a9190612d7c565b600060405180830381600087803b15801561173457600080fd5b505af1158015611748573d6000803e3d6000fd5b505050505061175a565b600101611626565b50600061176c8460400151600061214a565b90506120006001600160a01b031663f7a251d7600b61178e8760400151612166565b60006040518463ffffffff1660e01b81526004016117ae9392919061357f565b600060405180830381600087803b1580156117c857600080fd5b505af19250505080156117d9575060015b61184b573d808015611807576040519150601f19603f3d011682016040523d82523d6000602084013e61180c565b606091505b50817fd58d1183100bd0932c0588f31c4205d6bc6168909765a96c41adbed3115f36288260405161183d9190612db4565b60405180910390a250611877565b60405181907f7b78aadacff901d8b63d0dba4f86283d4db8aef27f9ed70413dd860f1c9532b690600090a25b50505050565b601481565b61100381565b60005460ff16156118ab5760405162461bcd60e51b8152600401610531906132a6565b6032600455609660055560078054600160ff199182168117909255600080549091169091179055565b60085481565b61100081565b600381565b33611000146119065760405162461bcd60e51b81526004016105319061313e565b60005460ff166119285760405162461bcd60e51b815260040161053190612eaf565b60015461193457611d2c565b600154600090600019015b808211611d00576000805b82841015611a635761195a612847565b600260006001878154811061196b57fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611a4d576004600554816119d857fe5b048160200151038160200181815250508060026000600188815481106119fa57fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611a57565b6001925050611a63565b5083600101935061194a565b828411611bfa57611a72612847565b6002600060018681548110611a8357fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611b6b57600460055481611af057fe5b04816020015103816020018181525050806002600060018781548110611b1257fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff19169115159190911790559150611bfa9050565b6002600060018681548110611b7c57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805480611bc057fe5b600082815260209020810160001990810180546001600160a01b031916905501905583611bed5750611bfa565b5060001990920191611a63565b818015611c045750805b15611ce3576002600060018681548110611c1a57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805484908110611c6157fe5b600091825260209091200154600180546001600160a01b039092169186908110611c8757fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001805480611cc057fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b82611cef575050611d00565b50506001909101906000190161193f565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081611d4f579050509050611d78836001600160a01b03166121a1565b81600081518110611d8557fe5b6020026020010181905250611d99436121c4565b81600181518110611da657fe5b6020908102919091010152611dbc6102ca6121c4565b81600281518110611dc957fe5b6020026020010181905250611ddd426121c4565b81600381518110611dea57fe5b6020026020010181905250611dfe816121d7565b9150505b919050565b611e0f61286a565b6000611e1961286a565b611e2161287c565b611e32611e2d86612261565b612286565b90506000805b611e41836122d0565b15611e7a5780611e6d57611e5c611e57846122f1565b61233f565b63ffffffff16845260019150611e72565b611e7a565b600101611e38565b5091935090915050915091565b600081604051602001611e9a9190612d60565b6040516020818303038152906040528051906020012083604051602001611ec19190612d60565b604051602081830303815290604052805190602001201490505b92915050565b015190565b8082015160009060ff811615611f00576001915081611f06565b60009150815b505092915050565b60408051600480825260a0820190925260009160609190816020015b6060815260200190600190039081611f2a575050604080516020808252818301909252919250606091908082018180368337019050509050611f6f85600001516121c4565b82600081518110611f7c57fe5b6020026020010181905250611f9760208660200151836123c1565b611fa0816123d1565b82600181518110611fad57fe5b6020026020010181905250611fc585604001516121c4565b82600281518110611fd257fe5b6020026020010181905250611fed60208660600151836123c1565b611ff6816123d1565b8260038151811061200357fe5b6020026020010181905250612029602061201c846121d7565b80519060200120836123c1565b6040805160b080825260e08201909252606091602082018180368337019050509050612059818360006020612427565b61206b81876080015160206060612427565b612079818660806030612427565b604080516001808252818301909252606091602082018180368337019050509050815160016020830182602086016066600019fa6120b657600080fd5b5060016120c482600061247a565b60ff16146120d9576000945050505050611edb565b5060019695505050505050565b8151815160009160019181148083146121025760009250612140565b600160208701838101602088015b60028483851001141561213b57805183511461212f5760009650600093505b60209283019201612110565b505050505b5090949350505050565b6000816020018351101561215d57600080fd5b50016020015190565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081612181579050509050611d78836123d1565b60408051600560a21b8318601482015260348101909152606090611dfe816123d1565b6060611edb6121d283612496565b6123d1565b60608151600014156121f85750604080516000815260208101909152611e02565b60608260008151811061220757fe5b602002602001015190506000600190505b83518110156122485761223e8285838151811061223157fe5b602002602001015161257c565b9150600101612218565b50611dfe61225b825160c060ff166125f9565b8261257c565b61226961289c565b506040805180820190915281518152602082810190820152919050565b61228e61287c565b612297826126cb565b6122a057600080fd5b60006122af8360200151612705565b60208085015160408051808201909152868152920190820152915050919050565b60006122da61289c565b505080518051602091820151919092015191011190565b6122f961289c565b612302826122d0565b61230b57600080fd5b6020820151600061231b82612768565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061235457508151602110155b61235d57600080fd5b600061236c8360200151612705565b905080836000015110156123925760405162461bcd60e51b8152600401610531906132dd565b8251602080850151830180519284900392918310156123b857826020036101000a820491505b50949350505050565b9091018181526020918201910152565b6060815160011480156124035750607f60f81b826000815181106123f157fe5b01602001516001600160f81b03191611155b1561240f575080611e02565b611edb6124218351608060ff166125f9565b8361257c565b60005b818110156106f05783818151811061243e57fe5b602001015160f81c60f81b85848060010195508151811061245b57fe5b60200101906001600160f81b031916908160001a90535060010161242a565b6000816001018351101561248d57600080fd5b50016001015190565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166124da575060186124fe565b6fffffffffffffffffffffffffffffffff1984166124fa575060106124fe565b5060005b60208110156125345781818151811061251357fe5b01602001516001600160f81b0319161561252c57612534565b6001016124fe565b60008160200390506060816040519080825280601f01601f191660200182016040528015612569576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b818310156125ad578051835260209283019201612595565b50855184518101855292509050808201602086015b818310156125da5780518352602092830192016125c2565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106126235760405162461bcd60e51b81526004016105319061301f565b6040805160018082528183019092526060916020820181803683370190505090506037841161267d5782840160f81b8160008151811061265f57fe5b60200101906001600160f81b031916908160001a9053509050611edb565b606061268885612496565b90508381510160370160f81b826000815181106126a157fe5b60200101906001600160f81b031916908160001a9053506126c2828261257c565b95945050505050565b80516000906126dc57506000611e02565b6020820151805160001a9060c08210156126fb57600092505050611e02565b5060019392505050565b8051600090811a608081101561271f576000915050611e02565b60b881108061273a575060c0811080159061273a575060f881105b15612749576001915050611e02565b60c081101561275d5760b519019050611e02565b60f519019050611e02565b80516000908190811a60808110156127835760019150612840565b60b881101561279857607e1981019150612840565b60c08110156127e957600060b78203600186019550806020036101000a8651049150600181018201935050808310156127e35760405162461bcd60e51b81526004016105319061318e565b50612840565b60f88110156127fe5760be1981019150612840565b600060f78203600186019550806020036101000a865104915060018101820193505080831015611f065760405162461bcd60e51b81526004016105319061318e565b5092915050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b604051806040016040528061288f61289c565b8152602001600081525090565b604051806040016040528060008152602001600081525090565b600082601f8301126128c6578081fd5b81516128d96128d4826135d2565b6135ab565b818152915060208083019084810160005b8481101561294f578151870188603f82011261290557600080fd5b838101516129156128d4826135f2565b81815260408b8184860101111561292b57600080fd5b61293a83888401838701613616565b508652505092820192908201906001016128ea565b505050505092915050565b60008083601f84011261296b578182fd5b50813567ffffffffffffffff811115612982578182fd5b60208301915083602082850101111561299a57600080fd5b9250929050565b600082601f8301126129b1578081fd5b81356129bf6128d4826135f2565b91508082528360208285010111156129d657600080fd5b8060208401602084013760009082016020015292915050565b600060a08284031215612a00578081fd5b612a0a60a06135ab565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff811115612a4857600080fd5b612a54848285016129a1565b60808301525092915050565b600060208284031215612a71578081fd5b8135612a7c81613642565b9392505050565b60008060408385031215612a95578081fd5b825167ffffffffffffffff80821115612aac578283fd5b81850186601f820112612abd578384fd5b80519250612acd6128d4846135d2565b80848252602080830192508084018a828389028701011115612aed578788fd5b8794505b86851015612b18578051612b0481613642565b845260019490940193928101928101612af1565b508801519096509350505080821115612b2f578283fd5b50612b3c858286016128b6565b9150509250929050565b600060208284031215612b57578081fd5b81518015158114612a7c578182fd5b60008060008060408587031215612b7b578182fd5b843567ffffffffffffffff80821115612b92578384fd5b612b9e8883890161295a565b90965094506020870135915080821115612bb6578384fd5b50612bc38782880161295a565b95989497509550505050565b600060208284031215612be0578081fd5b813567ffffffffffffffff80821115612bf7578283fd5b81840160608187031215612c09578384fd5b612c1360606135ab565b9250803582811115612c23578485fd5b612c2f878284016129ef565b845250602081013582811115612c43578485fd5b612c4f878284016129ef565b602085015250604081013582811115612c66578485fd5b612c72878284016129a1565b6040850152509195945050505050565b600060208284031215612c93578081fd5b5035919050565b600060208284031215612cab578081fd5b5051919050565b600080600060408486031215612cc6578283fd5b833560ff81168114612cd6578384fd5b9250602084013567ffffffffffffffff811115612cf1578283fd5b612cfd8682870161295a565b9497909650939450505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612d4c816020860160208601613616565b601f01601f19169290920160200192915050565b60008251612d72818460208701613616565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060208252612a7c6020830184612d34565b600060408252612ddb604083018688612d0a565b8281036020840152612dee818587612d0a565b979650505050505050565b6020808252602a908201527f6c656e677468206f66206d616c6963696f7573566f7465536c61736853636f706040820152690ca40dad2e6dac2e8c6d60b31b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604082015260600190565b6020808252818101527f6d616c6963696f757320766f746520736c617368206e6f7420656e61626c6564604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252602b908201527f746865206d616c6963696f757320766f746520736c6173682073636f7065206f60408201526a7574206f662072616e676560a81b606082015260800190565b6020808252601a908201527f6e6f2076696f6c6174696f6e206f6620766f74652072756c6573000000000000604082015260600190565b6020808252818101527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604082015260600190565b6020808252602b908201527f6c656e677468206f6620656e61626c654d616c6963696f7573566f7465536c6160408201526a0e6d040dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526017908201527f766572696679207369676e6174757265206661696c6564000000000000000000604082015260600190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526019908201527f7372634e756d20626967676572207468616e207461724e756d00000000000000604082015260600190565b6020808252602c908201527f7468652066696e616c69747920736c6173682072657761726420726174696f2060408201526b6f7574206f662072616e676560a01b606082015260800190565b60208082526027908201527f6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d6040820152660d2e6dac2e8c6d60cb1b606082015260800190565b60208082526013908201527274776f206964656e746963616c20766f74657360681b604082015260600190565b60208082526030908201527f746865206d6573736167652073656e646572206d7573742062652076616c696460408201526f185d1bdc94d95d0818dbdb9d1c9858dd60821b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252601590820152741d9bdd195059191c881a5cc81b9bdd08199bdd5b99605a1b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526022908201527f6c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746040820152610c6d60f31b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526025908201527f746865206d697364656d65616e6f725468726573686f6c64206f7574206f662060408201526472616e676560d81b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b6020808252601490820152731d185c99d95d08189b1bd8dac81d1bdbc81bdb1960621b604082015260600190565b6020808252601e908201527f7265636569766520756e65787065637465642073796e207061636b6167650000604082015260600190565b6020808252602b908201527f6c656e677468206f662066696e616c697479536c61736852657761726452617460408201526a0d2de40dad2e6dac2e8c6d60ab1b606082015260800190565b6020808252818101527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604082015260600190565b61ffff91909116815260200190565b90815260200190565b6000838252604060208301526135326040830184612d34565b949350505050565b918252602082015260400190565b92835260208301919091521515604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff851682526060602083015261359b6060830185612d34565b9050826040830152949350505050565b60405181810167ffffffffffffffff811182821017156135ca57600080fd5b604052919050565b600067ffffffffffffffff8211156135e8578081fd5b5060209081020190565b600067ffffffffffffffff821115613608578081fd5b50601f01601f191660200190565b60005b83811015613631578181015183820152602001613619565b838111156118775750506000910152565b6001600160a01b038116811461365757600080fd5b5056fea164736f6c6343000604000a" + }, + "0x0000000000000000000000000000000000001002": { + "balance": "0x0", + "code": "0x6080604052600436106101c55760003560e01c806375d47a0a116100f7578063ab51bb9611610095578063f9a2bbc711610064578063f9a2bbc7146105c3578063fb5478b3146105d8578063fc3e5908146105ed578063fd6a68791461060257610209565b8063ab51bb96146104b5578063ac431751146104ca578063c81b166214610599578063dc927faf146105ae57610209565b80639a99b4f0116100d15780639a99b4f01461043d5780639dc0926214610476578063a1a11bf51461048b578063a78abc16146104a057610209565b806375d47a0a146103fe5780637942fd051461041357806396713da91461042857610209565b8063493279b1116101645780636d70f7ae1161013e5780636d70f7ae146103785780636e47b482146103bf57806370fd5bad146103d4578063718a8aa8146103e957610209565b8063493279b1146103225780634bf6c8821461034e57806351e806721461036357610209565b806331b6d4a5116101a057806331b6d4a5146102b85780633a0b0eff146102cd5780633dffc387146102e257806343756e5c1461030d57610209565b806227253a1461020e5780630bee7a67146102595780630e2374a51461028757610209565b366102095734156102075760408051348152905133917f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db919081900360200190a25b005b600080fd5b34801561021a57600080fd5b506102476004803603604081101561023157600080fd5b506001600160a01b038135169060200135610617565b60408051918252519081900360200190f35b34801561026557600080fd5b5061026e610817565b6040805163ffffffff9092168252519081900360200190f35b34801561029357600080fd5b5061029c61081c565b604080516001600160a01b039092168252519081900360200190f35b3480156102c457600080fd5b50610247610822565b3480156102d957600080fd5b5061024761082e565b3480156102ee57600080fd5b506102f7610834565b6040805160ff9092168252519081900360200190f35b34801561031957600080fd5b5061029c610839565b34801561032e57600080fd5b5061033761083f565b6040805161ffff9092168252519081900360200190f35b34801561035a57600080fd5b506102f7610845565b34801561036f57600080fd5b5061029c61084a565b34801561038457600080fd5b506103ab6004803603602081101561039b57600080fd5b50356001600160a01b0316610850565b604080519115158252519081900360200190f35b3480156103cb57600080fd5b5061029c61086e565b3480156103e057600080fd5b506102f7610874565b3480156103f557600080fd5b506102f7610879565b34801561040a57600080fd5b5061029c61087e565b34801561041f57600080fd5b506102f7610884565b34801561043457600080fd5b506102f7610889565b34801561044957600080fd5b506102476004803603604081101561046057600080fd5b506001600160a01b03813516906020013561088e565b34801561048257600080fd5b5061029c610a0d565b34801561049757600080fd5b5061029c610a13565b3480156104ac57600080fd5b506103ab610a19565b3480156104c157600080fd5b5061026e610a22565b3480156104d657600080fd5b50610207600480360360408110156104ed57600080fd5b81019060208101813564010000000081111561050857600080fd5b82018360208201111561051a57600080fd5b8035906020019184600183028401116401000000008311171561053c57600080fd5b91939092909160208101903564010000000081111561055a57600080fd5b82018360208201111561056c57600080fd5b8035906020019184600183028401116401000000008311171561058e57600080fd5b509092509050610a27565b3480156105a557600080fd5b5061029c610daa565b3480156105ba57600080fd5b5061029c610db0565b3480156105cf57600080fd5b5061029c610db6565b3480156105e457600080fd5b50610247610dbc565b3480156105f957600080fd5b506102f7610dc8565b34801561060e57600080fd5b5061029c610dcd565b6000805460ff166106e95760026020527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff1991821681179092557fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548216831790557ffcc09d5775472c6fa988b216f5ce189894c14e093527f732b9b65da0880b5f81805482168317905561100160009081527fd5856b6520af3fbaacead8d875ff5c4db19c2ad37c909e14d0ea394740e2ebc8805483168417905560048355805490911690911790555b3360009081526002602052604090205460ff166107375760405162461bcd60e51b815260040180806020018281038252602b815260200180610ebb602b913960400191505060405180910390fd5b60004783106107465747610748565b825b9050674563918244f400008111156107655750674563918244f400005b80156107e6576040516001600160a01b0385169082156108fc029083906000818181858888f193505050501580156107a1573d6000803e3d6000fd5b506040805182815290516001600160a01b038616917ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0919081900360200190a2610810565b6040517fe589651933c2457488cc0d8e0941518abf748e799435e4e396d9c4d0b2db2d4d90600090a15b9392505050565b606481565b61200181565b674563918244f4000081565b60015481565b600181565b61100181565b6102ca81565b600881565b61200081565b6001600160a01b031660009081526002602052604090205460ff1690565b61100581565b600281565b601081565b61100881565b600b81565b600981565b6000805460ff166109605760026020527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff1991821681179092557fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548216831790557ffcc09d5775472c6fa988b216f5ce189894c14e093527f732b9b65da0880b5f81805482168317905561100160009081527fd5856b6520af3fbaacead8d875ff5c4db19c2ad37c909e14d0ea394740e2ebc8805483168417905560048355805490911690911790555b3360009081526002602052604090205460ff166109ae5760405162461bcd60e51b815260040180806020018281038252602b815260200180610ebb602b913960400191505060405180910390fd5b60004783106109bd57476109bf565b825b9050670de0b6b3a76400008111156107655750604051670de0b6b3a7640000906001600160a01b03851690600090839082818181858883f193505050501580156107a1573d6000803e3d6000fd5b61100781565b61100681565b60005460ff1681565b600081565b3361100714610a675760405162461bcd60e51b815260040180806020018281038252602e815260200180610f15602e913960400191505060405180910390fd5b610ac984848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600b81526a30b23227b832b930ba37b960a91b60208201529150610dd39050565b15610ba157606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091149050610b4c5760405162461bcd60e51b815260040180806020018281038252602c815260200180610f43602c913960400191505060405180910390fd5b60148101516001600160a01b038116600081815260026020526040808220805460ff19166001179055517f9870d7fe5d112134c55844951dedf365363006d9c588db07c4c85af6322a06199190a25050610d18565b610c0684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81526d3232b632ba32a7b832b930ba37b960911b60208201529150610dd39050565b15610cdb57606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091149050610c895760405162461bcd60e51b815260040180806020018281038252602f815260200180610ee6602f913960400191505060405180910390fd5b60148101516001600160a01b038116600081815260026020526040808220805460ff19169055517fb40992a19dba61ea600e87fce607102bf5908dc89076217b6ca6ae195224f7029190a25050610d18565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b61100281565b61100381565b61100081565b670de0b6b3a764000081565b600381565b61100481565b6000816040516020018082805190602001908083835b60208310610e085780518252601f199092019160209182019101610de9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310610e765780518252601f199092019160209182019101610e57565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490509291505056fe6f6e6c79206f70657261746f7220697320616c6c6f77656420746f2063616c6c20746865206d6574686f646c656e677468206f662076616c756520666f722064656c6574654f70657261746f722073686f756c64206265203230746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662076616c756520666f72206164644f70657261746f722073686f756c64206265203230a164736f6c6343000604000a" + }, + "0x0000000000000000000000000000000000001003": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106102275760003560e01c8063a1a11bf511610130578063dc927faf116100b8578063e405bbc31161007c578063e405bbc3146106a7578063ea54b2aa146106af578063f9a2bbc7146106b7578063fc3e5908146106bf578063fd6a6879146106c757610227565b8063dc927faf14610627578063dda831481461062f578063df5fe70414610655578063e1c7392a1461067b578063e2761af01461068357610227565b8063adc879e9116100ff578063adc879e914610552578063c81b16621461055a578063cba510a914610562578063d816987914610588578063da8d08f01461060157610227565b8063a1a11bf514610462578063a78abc161461046a578063ab51bb9614610486578063ac4317511461048e57610227565b8063564b81ef116101b3578063718a8aa811610182578063718a8aa81461043a57806375d47a0a146104425780637942fd051461044a57806396713da9146104525780639dc092621461045a57610227565b8063564b81ef146102e85780635c5ae8db146103655780636e47b4821461042a57806370fd5bad1461043257610227565b80633dffc387116101fa5780633dffc3871461029357806343756e5c146102b1578063493279b1146102b95780634bf6c882146102d857806351e80672146102e057610227565b80630bee7a671461022c5780630e2374a51461024d5780632657e9b61461027157806333f7798d1461028b575b600080fd5b6102346106cf565b6040805163ffffffff9092168252519081900360200190f35b6102556106d4565b604080516001600160a01b039092168252519081900360200190f35b6102796106da565b60408051918252519081900360200190f35b6102796106e5565b61029b6106eb565b6040805160ff9092168252519081900360200190f35b6102556106f0565b6102c16106f6565b6040805161ffff9092168252519081900360200190f35b61029b6106fc565b610255610701565b6102f0610707565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032a578181015183820152602001610312565b50505050905090810190601f1680156103575780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61038b6004803603602081101561037b57600080fd5b50356001600160401b0316610813565b60405180856001600160401b03166001600160401b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103ec5781810151838201526020016103d4565b50505050905090810190601f1680156104195780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b6102556108ce565b61029b6108d4565b61029b6108d9565b6102556108de565b61029b6108e4565b61029b6108e9565b6102556108ee565b6102556108f4565b6104726108fa565b604080519115158252519081900360200190f35b610234610903565b610550600480360360408110156104a457600080fd5b8101906020810181356401000000008111156104bf57600080fd5b8201836020820111156104d157600080fd5b803590602001918460018302840111640100000000831117156104f357600080fd5b91939092909160208101903564010000000081111561051157600080fd5b82018360208201111561052357600080fd5b8035906020019184600183028401116401000000008311171561054557600080fd5b509092509050610908565b005b610279610bc1565b610255610bc7565b6102796004803603602081101561057857600080fd5b50356001600160401b0316610bcd565b6104726004803603604081101561059e57600080fd5b8101906020810181356401000000008111156105b957600080fd5b8201836020820111156105cb57600080fd5b803590602001918460018302840111640100000000831117156105ed57600080fd5b9193509150356001600160401b0316610bec565b6102556004803603602081101561061757600080fd5b50356001600160401b03166113cd565b6102556113e8565b6102556004803603602081101561064557600080fd5b50356001600160401b03166113ee565b6104726004803603602081101561066b57600080fd5b50356001600160401b0316611412565b610550611454565b61068b611675565b604080516001600160401b039092168252519081900360200190f35b61068b611684565b6102f061169a565b6102556116b6565b61029b6116bc565b6102556116c1565b606481565b61200181565b662386f26fc1000081565b60055481565b600181565b61100181565b6102ca81565b600881565b61200081565b604080516020808252818301909252606091829190602082018180368337505060045460208301525090506000805b60208160ff16101561077d57828160ff168151811061075157fe5b01602001516001600160f81b0319161561077057816001019150610775565b61077d565b600101610736565b5060608160ff166040519080825280601f01601f1916602001820160405280156107ae576020820181803683370190505b50905060005b8260ff168160ff16101561080a57838160ff16815181106107d157fe5b602001015160f81c60f81b828260ff16815181106107eb57fe5b60200101906001600160f81b031916908160001a9053506001016107b4565b50925050505b90565b60016020818152600092835260409283902080548184015460028084015460038501805489516101009982161599909902600019011692909204601f81018790048702880187019098528787526001600160401b0390931696919592949091908301828280156108c45780601f10610899576101008083540402835291602001916108c4565b820191906000526020600020905b8154815290600101906020018083116108a757829003601f168201915b5050505050905084565b61100581565b600281565b601081565b61100881565b600b81565b600981565b61100781565b61100681565b60005460ff1681565b600081565b60005460ff1661095f576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b336110071461099f5760405162461bcd60e51b815260040180806020018281038252602e815260200180611a93602e913960400191505060405180910390fd5b610a1384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601b81527f726577617264466f7256616c696461746f725365744368616e67650000000000602082015291506116c79050565b15610af25760208114610a575760405162461bcd60e51b815260040180806020018281038252602e815260200180611a32602e913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610a95918585808385018382808284376000920191909152506117ae92505050565b9050600081118015610aaf5750670de0b6b3a76400008111155b610aea5760405162461bcd60e51b815260040180806020018281038252602f815260200180611ac1602f913960400191505060405180910390fd5b600555610b2f565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60045481565b61100281565b6001600160401b03166000908152600160208190526040909120015490565b60408051630a83aaa960e31b815233600482015290516000916110069163541d554891602480820192602092909190829003018186803b158015610c2f57600080fd5b505afa158015610c43573d6000803e3d6000fd5b505050506040513d6020811015610c5957600080fd5b5051610cac576040805162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604482015290519081900360640190fd5b6001600160401b0382166000908152600260205260409020546001600160a01b031615610d20576040805162461bcd60e51b815260206004820152601c60248201527f63616e27742073796e63206475706c6963617465642068656164657200000000604482015290519081900360640190fd5b6003546001600160401b0390811690831611610d6d5760405162461bcd60e51b8152600401808060200182810382526026815260200180611b806026913960400191505060405180910390fd5b600354600160401b90046001600160401b0316610d88611910565b6001600160401b0382811660009081526001602081815260409283902083516080810185528154909516855280830154858301526002808201548686015260038201805486516101009682161596909602600019011691909104601f81018490048402850184019095528484529093606086019392830182828015610e4e5780601f10610e2357610100808354040283529160200191610e4e565b820191906000526020600020905b815481529060010190602001808311610e3157829003601f168201915b50505050508152505090505b836001600160401b0316826001600160401b031610158015610e8b57506003546001600160401b0390811690831610155b15610f6c5780516001600160401b0380821660009081526001602081815260409283902083516080810185528154909516855280830154858301526002808201548686015260038201805486516101009682161596909602600019011691909104601f8101849004840285018401909552848452959750939460608601939091830182828015610f5c5780601f10610f3157610100808354040283529160200191610f5c565b820191906000526020600020905b815481529060010190602001808311610f3f57829003601f168201915b5050505050815250509050610e5a565b6060810151516110635780516001600160401b03811660009081526001602081815260409283902060030180548451600294821615610100026000190190911693909304601f81018390048302840183019094528383529395509092919083018282801561101b5780601f10610ff05761010080835404028352916020019161101b565b820191906000526020600020905b815481529060010190602001808311610ffe57829003601f168201915b505050506060830182905250516110635760405162461bcd60e51b8152600401808060200182810382526021815260200180611a116021913960400191505060405180910390fd5b6000816060015151608801905060608787905082016040519080825280601f01601f1916602001820160405280156110a2576020820181803683370190505b50905060006110b0826117b3565b90506110be848683866117b9565b6110f95760405162461bcd60e51b81526004018080602001828103825260238152602001806119ee6023913960400191505060405180910390fd5b6000838201915061113f8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061182592505050565b9450905061114e81838661182f565b8251602001935061115d611936565b6110008186866064600019fa61117257600080fd5b805194506000600160f81b8616156112015750600554604080516309a99b4f60e41b815233600482015260248101929092525160019161100291639a99b4f0916044808201926020929091908290030181600087803b1580156111d457600080fd5b505af11580156111e8573d6000803e3d6000fd5b505050506040513d60208110156111fe57600080fd5b50505b856001600160401b03169550602082019350600061122185888415611870565b90985090506001600160401b03808216908c16146112705760405162461bcd60e51b8152600401808060200182810382526033815260200180611a606033913960400191505060405180910390fd5b6001600160401b03808c16600081815260026020818152604080842080546001600160a01b031916331790558e86168e529383526001808252928490208d518154961667ffffffffffffffff199096169590951785558c81015192850192909255918b01519183019190915560608a015180518b93926112f7926003850192910190611955565b50506003546001600160401b03600160401b9091048116908d161115905061133f576003805467ffffffffffffffff60401b1916600160401b6001600160401b038e16021790555b7f4042c1020a8f410fb1c8859d276ab436aeb2c3074960e48467299cf1c966d3b48b8a8a602001518560405180856001600160401b03166001600160401b03168152602001846001600160401b03166001600160401b031681526020018381526020018215151515815260200194505050505060405180910390a15060019c9b505050505050505050505050565b6002602052600090815260409020546001600160a01b031681565b61100381565b6001600160401b03166000908152600260205260409020546001600160a01b031690565b6001600160401b0381166000908152600260205260408120546001600160a01b031615158061144e57506003546001600160401b038381169116145b92915050565b60005460ff16156114ac576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b6000806114d06040518060c0016040528060908152602001611af060909139611825565b815160045590925090506114e2611910565b60006114f084846000611870565b60008083526001600160401b038281168252600160208181526040938490208651815467ffffffffffffffff191694169390931783558086015191830191909155918401516002820155606084015180519496509294508593909261155c926003850192910190611955565b50506003805467ffffffffffffffff19166001600160401b03841690811767ffffffffffffffff60401b1916600160401b9190910217905550604080516309a99b4f60e41b8152306004820152600060248201819052915161100292639a99b4f092604480820193602093909283900390910190829087803b1580156115e157600080fd5b505af11580156115f5573d6000803e3d6000fd5b505050506040513d602081101561160b57600080fd5b50506000805460ff19166001179055662386f26fc10000600555600354602083810151604080516001600160401b0390941684529183015280517f5ac9b37d571677b80957ca05693f371526c602fd08042b416a29fdab7efefa499281900390910190a150505050565b6003546001600160401b031681565b600354600160401b90046001600160401b031681565b6040518060c0016040528060908152602001611af06090913981565b61100081565b600381565b61100481565b6000816040516020018082805190602001908083835b602083106116fc5780518252601f1990920191602091820191016116dd565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b6020831061176a5780518252601f19909201916020918201910161174b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b60200190565b60008460600151518284010392506000806117d78760600151611825565b90925090506117e782868361182f565b5050506040840151601f1983810191909152602090940151603f19830152605f19820192909252600454606719820152910160871990910152600190565b8051602090910191565b5b6020811061184f578251825260209283019290910190601f1901611830565b915181516020939093036101000a6000190180199091169216919091179052565b611878611910565b6008840151602885015160489095018051909560009291611897611910565b6020810183905260408101829052866119025760008060688a036040519080825280601f01601f1916602001820160405280156118db576020820181803683370190505b50606084018190526118ec90611825565b90925090506118ff60208c01838361182f565b50505b989297509195505050505050565b604080516080810182526000808252602082018190529181019190915260608082015290565b6040518061100001604052806080906020820280368337509192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061199657805160ff19168380011785556119c3565b828001600101855582156119c3579182015b828111156119c35782518255916020019190600101906119a8565b506119cf9291506119d3565b5090565b61081091905b808211156119cf57600081556001016119d956fe6661696c656420746f2073657269616c697a6520636f6e73656e7375732073746174656661696c656420746f206c6f61642076616c696461746f722073657420646174616c656e677468206f6620726577617264466f7256616c696461746f725365744368616e6765206d69736d617463686865616465722068656967687420646f65736e277420657175616c20746f207468652073706563696669656420686569676874746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374746865206e6577526577617264466f7256616c696461746f725365744368616e6765206f7574206f662072616e676542696e616e63652d436861696e2d4e696c650000000000000000000000000000000000000000000229eca254b3859bffefaf85f4c95da9fbd26527766b784272789c30ec56b380b6eb96442aaab207bc59978ba3dd477690f5c5872334fc39e627723daa97e441e88ba4515150ec3182bc82593df36f8abb25a619187fcfab7e552b94e64ed2deed000000e8d4a5100063616e27742073796e6320686561646572206265666f726520696e697469616c486569676874a164736f6c6343000604000a" + }, + "0x0000000000000000000000000000000000001004": { + "balance": "176405560900000000000000000", + "code": "0x6080604052600436106103d15760003560e01c80639509b980116101fd578063bd46646111610118578063ebf71d53116100ab578063fb063e8f1161007a578063fb063e8f14610f53578063fc1a598f14610f68578063fc3e590814610bc8578063fd6a687914610f9b578063ff9c00271461084057610419565b8063ebf71d5314610eff578063f014847214610f14578063f9a2bbc714610f29578063fa9e915914610f3e57610419565b8063d9e6dae9116100e7578063d9e6dae9146107c2578063dc927faf14610ea2578063e1c7392a14610eb7578063e8f35cea14610ecc57610419565b8063bd46646114610d9a578063c81b166214610dcd578063c8509d8114610de2578063cf41984414610e6757610419565b8063a7c9f02d11610190578063b99328c51161015f578063b99328c514610d04578063b9fd21e314610d3d578063ba35ead614610d52578063bbface1f14610d6757610419565b8063a7c9f02d14610bc8578063aa7415f514610bdd578063ab51bb9614610c24578063ac43175114610c3957610419565b80639dc09262116101cc5780639dc0926214610b74578063a1a11bf514610b89578063a496fba214610b9e578063a78abc1614610bb357610419565b80639509b98014610ad857806396713da914610b115780639a854bbd14610b265780639a99b4f014610b3b57610419565b806351e80672116102ed578063718a8aa8116102805780637942fd051161024f5780637942fd05146109ff578063831d65d114610a145780638b87b21f146107175780638eff336c14610a9957610419565b8063718a8aa81461099657806371d30863146109ab578063727be1f8146109c057806375d47a0a146109ea57610419565b806366dea52a116102bc57806366dea52a146108405780636e056520146108555780636e47b4821461098157806370fd5bad1461084057610419565b806351e80672146107ec57806359b92789146108015780635d499b1b1461082b57806361368475146107c257610419565b80633dffc38711610365578063493279b111610334578063493279b1146107815780634a3acdf4146107ad5780634bf6c882146107c257806350432d32146107d757610419565b80633dffc387146107175780633fd8b02f1461074257806343756e5c1461075757806343a368b91461076c57610419565b806312234582116103a157806312234582146105c2578063149d14d9146105fd5780632ae45483146106125780633d7132231461066657610419565b806227253a1461041e5780630bee7a67146104695780630e2374a5146104975780631182b875146104c857610419565b36610419573415610417576040805133815234602082015281517f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db929181900390910190a15b005b600080fd5b34801561042a57600080fd5b506104576004803603604081101561044157600080fd5b506001600160a01b038135169060200135610fb0565b60408051918252519081900360200190f35b34801561047557600080fd5b5061047e61106d565b6040805163ffffffff9092168252519081900360200190f35b3480156104a357600080fd5b506104ac611072565b604080516001600160a01b039092168252519081900360200190f35b3480156104d457600080fd5b5061054d600480360360408110156104eb57600080fd5b60ff8235169190810190604081016020820135600160201b81111561050f57600080fd5b82018360208201111561052157600080fd5b803590602001918460018302840111600160201b8311171561054257600080fd5b509092509050611078565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561058757818101518382015260200161056f565b50505050905090810190601f1680156105b45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105ce57600080fd5b50610417600480360360408110156105e557600080fd5b506001600160a01b03813581169160200135166111a6565b34801561060957600080fd5b506104576112a0565b34801561061e57600080fd5b5061064d6004803603604081101561063557600080fd5b506001600160a01b03813581169160200135166112a6565b6040805192835260208301919091528051918290030190f35b34801561067257600080fd5b506104ac6004803603602081101561068957600080fd5b810190602081018135600160201b8111156106a357600080fd5b8201836020820111156106b557600080fd5b803590602001918460018302840111600160201b831117156106d657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506112ca945050505050565b34801561072357600080fd5b5061072c6112ee565b6040805160ff9092168252519081900360200190f35b34801561074e57600080fd5b506104576112f3565b34801561076357600080fd5b506104ac6112f9565b34801561077857600080fd5b506104576112ff565b34801561078d57600080fd5b5061079661130b565b6040805161ffff9092168252519081900360200190f35b3480156107b957600080fd5b50610457611311565b3480156107ce57600080fd5b5061072c611317565b3480156107e357600080fd5b5061045761131c565b3480156107f857600080fd5b506104ac611327565b34801561080d57600080fd5b506104ac6004803603602081101561082457600080fd5b503561132d565b34801561083757600080fd5b50610457611348565b34801561084c57600080fd5b5061072c611351565b61096d6004803603608081101561086b57600080fd5b810190602081018135600160201b81111561088557600080fd5b82018360208201111561089757600080fd5b803590602001918460208302840111600160201b831117156108b857600080fd5b919390929091602081019035600160201b8111156108d557600080fd5b8201836020820111156108e757600080fd5b803590602001918460208302840111600160201b8311171561090857600080fd5b919390929091602081019035600160201b81111561092557600080fd5b82018360208201111561093757600080fd5b803590602001918460208302840111600160201b8311171561095857600080fd5b91935091503567ffffffffffffffff16611356565b604080519115158252519081900360200190f35b34801561098d57600080fd5b506104ac61182b565b3480156109a257600080fd5b5061072c611831565b3480156109b757600080fd5b50610457611836565b3480156109cc57600080fd5b5061096d600480360360208110156109e357600080fd5b503561183c565b3480156109f657600080fd5b506104ac6118bd565b348015610a0b57600080fd5b5061072c6118c3565b348015610a2057600080fd5b5061041760048036036040811015610a3757600080fd5b60ff8235169190810190604081016020820135600160201b811115610a5b57600080fd5b820183602082011115610a6d57600080fd5b803590602001918460018302840111600160201b83111715610a8e57600080fd5b5090925090506118c8565b348015610aa557600080fd5b5061041760048036036060811015610abc57600080fd5b508035906001600160a01b036020820135169060400135611a11565b348015610ae457600080fd5b5061041760048036036040811015610afb57600080fd5b506001600160a01b038135169060200135611a97565b348015610b1d57600080fd5b5061072c611c54565b348015610b3257600080fd5b50610457611c59565b348015610b4757600080fd5b5061045760048036036040811015610b5e57600080fd5b506001600160a01b038135169060200135611c65565b348015610b8057600080fd5b506104ac611da3565b348015610b9557600080fd5b506104ac611da9565b348015610baa57600080fd5b5061072c611daf565b348015610bbf57600080fd5b5061096d611db4565b348015610bd457600080fd5b5061072c611dbd565b61096d60048036036080811015610bf357600080fd5b5080356001600160a01b03908116916020810135909116906040810135906060013567ffffffffffffffff16611dc2565b348015610c3057600080fd5b5061047e611daf565b348015610c4557600080fd5b5061041760048036036040811015610c5c57600080fd5b810190602081018135600160201b811115610c7657600080fd5b820183602082011115610c8857600080fd5b803590602001918460018302840111600160201b83111715610ca957600080fd5b919390929091602081019035600160201b811115610cc657600080fd5b820183602082011115610cd857600080fd5b803590602001918460018302840111600160201b83111715610cf957600080fd5b509092509050612483565b348015610d1057600080fd5b5061041760048036036040811015610d2757600080fd5b50803590602001356001600160a01b031661292b565b348015610d4957600080fd5b506104576129ab565b348015610d5e57600080fd5b506104576129b5565b348015610d7357600080fd5b5061045760048036036020811015610d8a57600080fd5b50356001600160a01b03166129bb565b348015610da657600080fd5b5061045760048036036020811015610dbd57600080fd5b50356001600160a01b03166129cd565b348015610dd957600080fd5b506104ac6129e8565b348015610dee57600080fd5b5061041760048036036040811015610e0557600080fd5b60ff8235169190810190604081016020820135600160201b811115610e2957600080fd5b820183602082011115610e3b57600080fd5b803590602001918460018302840111600160201b83111715610e5c57600080fd5b5090925090506129ee565b348015610e7357600080fd5b5061041760048036036040811015610e8a57600080fd5b506001600160a01b0381358116916020013516612abe565b348015610eae57600080fd5b506104ac612d92565b348015610ec357600080fd5b50610417612d98565b348015610ed857600080fd5b5061045760048036036020811015610eef57600080fd5b50356001600160a01b0316612e38565b348015610f0b57600080fd5b5061072c612e4a565b348015610f2057600080fd5b5061072c612e4f565b348015610f3557600080fd5b506104ac612e54565b348015610f4a57600080fd5b50610457612e5a565b348015610f5f57600080fd5b50610457612e60565b348015610f7457600080fd5b5061054d60048036036020811015610f8b57600080fd5b50356001600160a01b0316612e6e565b348015610fa757600080fd5b506104ac612f95565b6000805460ff16610ff6576040805162461bcd60e51b8152602060048201526019602482015260008051602061568d833981519152604482015290519081900360640190fd5b33611005146110365760405162461bcd60e51b815260040180806020018281038252602f815260200180615314602f913960400191505060405180910390fd5b60405162461bcd60e51b81526004018080602001828103825260268152602001806157436026913960400191505060405180910390fd5b606481565b61200181565b60005460609060ff166110c0576040805162461bcd60e51b8152602060048201526019602482015260008051602061568d833981519152604482015290519081900360640190fd5b33612000146111005760405162461bcd60e51b815260040180806020018281038252602f81526020018061563b602f913960400191505060405180910390fd5b60ff8416600214156111525761114b83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f9b92505050565b905061119f565b6040805162461bcd60e51b815260206004820152601860248201527f756e7265636f676e697a65642073796e207061636b6167650000000000000000604482015290519081900360640190fd5b9392505050565b33612000146111e65760405162461bcd60e51b815260040180806020018281038252602f81526020018061563b602f913960400191505060405180910390fd5b6001600160a01b0380831660009081526007602090815260408083209385168352929052208054611251576040805162461bcd60e51b815260206004820152601060248201526f1b9bc81b1bd8dad95908185b5bdd5b9d60821b604482015290519081900360640190fd5b8054600082556040805182815290516001600160a01b0380861692908716917f152fb15aa5d80f843e1e4bd5f2fc9161714f169945024decec7e84fb910fdd519181900360200190a350505050565b60015490565b60076020908152600092835260408084209091529082529020805460019091015482565b6020818101516000908152600490915260409020546001600160a01b03165b919050565b600181565b60055481565b61100181565b670de0b6b3a764000081565b6102ca81565b61a8c081565b600881565b66071afd498d000081565b61200081565b6000908152600460205260409020546001600160a01b031690565b6402540be40081565b600281565b6000805460ff1661139c576040805162461bcd60e51b8152602060048201526019602482015260008051602061568d833981519152604482015290519081900360640190fd5b8685146113da5760405162461bcd60e51b815260040180806020018281038252603b815260200180615600603b913960400191505060405180910390fd5b8683146114185760405162461bcd60e51b815260040180806020018281038252603f8152602001806154d3603f913960400191505060405180910390fd5b426078018267ffffffffffffffff1610156114645760405162461bcd60e51b81526004018080602001828103825260248152602001806153c36024913960400191505060405180910390fd5b6402540be4003406156114a85760405162461bcd60e51b81526004018080602001828103825260408152602001806157036040913960400191505060405180910390fd5b604080518681526020808802820101909152859060009081906060908480156114db578160200160208202803683370190505b50905060005b848110156115b6576402540be4008b8b838181106114fb57fe5b905060200201358161150957fe5b06156115465760405162461bcd60e51b815260040180806020018281038252603c815260200180615512603c913960400191505060405180910390fd5b61156b8b8b8381811061155557fe5b90506020020135856130bf90919063ffffffff16565b93506115976402540be4008c8c8481811061158257fe5b9050602002013561311990919063ffffffff16565b8282815181106115a357fe5b60209081029190910101526001016114e1565b506001546115db906115ce908663ffffffff61315b16565b849063ffffffff6130bf16565b3410156116195760405162461bcd60e51b81526004018080602001828103825260568152602001806156ad6056913960600191505060405180910390fd5b611629348463ffffffff6131b416565b91506116336151c7565b6040518060c001604052806221272160e91b60001b815260200160006001600160a01b031681526020018381526020018e8e808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d91829185019084908082843760009201919091525050509082525067ffffffffffffffff8916602090910152905061200063f7a251d760036116f7846131f6565b61170c876402540be40063ffffffff61311916565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561176a578181015183820152602001611752565b50505050905090810190601f1680156117975780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156117b857600080fd5b505af11580156117cc573d6000803e3d6000fd5b505060408051600081523360208201528082018890526060810187905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a15060019c9b505050505050505050505050565b61100581565b601081565b60015481565b6000336120011461187e5760405162461bcd60e51b81526004018080602001828103825260338152602001806152e16033913960400191505060405180910390fd5b81156118b5576040516120019083156108fc029084906000818181858888f193505050501580156118b3573d6000803e3d6000fd5b505b506001919050565b61100881565b600b81565b60005460ff1661190d576040805162461bcd60e51b8152602060048201526019602482015260008051602061568d833981519152604482015290519081900360640190fd5b336120001461194d5760405162461bcd60e51b815260040180806020018281038252602f81526020018061563b602f913960400191505060405180910390fd5b60ff83166003141561199d5761199882828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134b192505050565b611a0c565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b3361100814611a515760405162461bcd60e51b815260040180806020018281038252602381526020018061566a6023913960400191505060405180910390fd5b600083815260046020908152604080832080546001600160a01b039096166001600160a01b03199096168617905593825260038152838220949094556002909352912055565b81806001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015611ad157600080fd5b505afa158015611ae5573d6000803e3d6000fd5b505050506040513d6020811015611afb57600080fd5b50516001600160a01b03163314611b59576040805162461bcd60e51b815260206004820152601860248201527f6e6f74206f776e6572206f6620424550323020746f6b656e0000000000000000604482015290519081900360640190fd5b60008211611ba7576040805162461bcd60e51b81526020600482015260166024820152751e995c9bc81b1a5b5a5d081b9bdd08185b1b1bddd95960521b604482015290519081900360640190fd5b6001600160a01b038316600090815260036020526040902054611bfd576040805162461bcd60e51b81526020600482015260096024820152681b9bdd08189bdd5b9960ba1b604482015290519081900360640190fd5b6001600160a01b038316600081815260066020908152604091829020859055815185815291513393927f9df3a90730dbf23b5cc18dbbd5f4af3fa94a0dffb6ff6841f98a9a9a6ac626a892908290030190a3505050565b600981565b677ce66c50e284000081565b6000805460ff16611cab576040805162461bcd60e51b8152602060048201526019602482015260008051602061568d833981519152604482015290519081900360640190fd5b3361100514611ceb5760405162461bcd60e51b815260040180806020018281038252602f815260200180615314602f913960400191505060405180910390fd5b6000478310611cfa5747611cfc565b825b9050670de0b6b3a7640000811115611d18576000915050611d9d565b8015611d9a576040516001600160a01b0385169082156108fc029083906000818181858888f19350505050158015611d54573d6000803e3d6000fd5b50604080516001600160a01b03861681526020810183905281517ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0929181900390910190a15b90505b92915050565b61100781565b61100681565b600081565b60005460ff1681565b600381565b6000805460ff16611e08576040805162461bcd60e51b8152602060048201526019602482015260008051602061568d833981519152604482015290519081900360640190fd5b426078018267ffffffffffffffff161015611e545760405162461bcd60e51b81526004018080602001828103825260248152602001806153c36024913960400191505060405180910390fd5b6402540be400340615611e985760405162461bcd60e51b81526004018080602001828103825260408152602001806157036040913960400191505060405180910390fd5b600080806001600160a01b038816611f7757600154611ebe90879063ffffffff6130bf16565b341015611efc5760405162461bcd60e51b815260040180806020018281038252606181526020018061544d6061913960800191505060405180910390fd5b6402540be400860615611f405760405162461bcd60e51b815260040180806020018281038252603c815260200180615512603c913960400191505060405180910390fd5b611f50348763ffffffff6131b416565b9050611f67866402540be40063ffffffff61311916565b6221272160e91b9350915061221a565b6001600160a01b038816600090815260036020526040902054925082611fce5760405162461bcd60e51b815260040180806020018281038252603181526020018061541c6031913960400191505060405180910390fd5b60015434101561200f5760405162461bcd60e51b815260040180806020018281038252603f81526020018061556f603f913960400191505060405180910390fd5b506001600160a01b038716600090815260026020526040902054349060088111158061205a575060088111801561205a5750612058876007198301600a0a63ffffffff61350d16565b155b6120955760405162461bcd60e51b815260040180806020018281038252603c815260200180615512603c913960400191505060405180910390fd5b61209f878261354f565b92506120aa8461358f565b156120f2576305f5e1008310156120f25760405162461bcd60e51b815260040180806020018281038252603a815260200180615365603a913960400191505060405180910390fd5b60088110158061210c575060088110801561210c57508683115b6121475760405162461bcd60e51b81526004018080602001828103825260258152602001806154ae6025913960400191505060405180910390fd5b677ce66c50e284000083111561218e5760405162461bcd60e51b81526004018080602001828103825260358152602001806153e76035913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810189905290516001600160a01b038b16916323b872dd9160648083019260209291908290030181600087803b1580156121e357600080fd5b505af11580156121f7573d6000803e3d6000fd5b505050506040513d602081101561220d57600080fd5b505161221857600080fd5b505b6122226151c7565b6040805160c0810182528581526001600160a01b038b166020820152815160018082528184018452919283019181602001602082028036833750505081526040805160018082528183019092526020928301929091908083019080368337505050815260408051600180825281830190925260209283019290919080830190803683370190505081526020018767ffffffffffffffff1681525090508281604001516000815181106122d057fe5b6020026020010181815250508781606001516000815181106122ee57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505033816080015160008151811061232057fe5b6001600160a01b039092166020928302919091019091015261200063f7a251d7600361234b846131f6565b612360866402540be40063ffffffff61311916565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156123be5781810151838201526020016123a6565b50505050905090810190601f1680156123eb5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561240c57600080fd5b505af1158015612420573d6000803e3d6000fd5b5050604080516001600160a01b038d1681523360208201528082018b90526060810186905290517f74eab09b0e53aefc23f2e1b16da593f95c2dd49c6f5a23720463d10d9c330b2a9350908190036080019150a150600198975050505050505050565b33611007146124c35760405162461bcd60e51b815260040180806020018281038252602e8152602001806155ae602e913960400191505060405180910390fd5b60208114612518576040805162461bcd60e51b815260206004820152601b60248201527f65787065637465642076616c7565206c656e6774682069732033320000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8801819004810282018101909252868152939450606093925086915085908190840183828082843760009201919091525050505060208301519091506772656c617946656560c01b811415612620576020820151670de0b6b3a764000081118015906125c757506402540be4008106155b612618576040805162461bcd60e51b815260206004820152601960248201527f7468652072656c6179466565206f7574206f662072616e676500000000000000604482015290519081900360640190fd5b600155612896565b61269487878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601781527f6c617267655472616e736665724c6f636b506572696f64000000000000000000602082015291506136959050565b1561273057604080516020601f87018190048102820181019092528581526000916126d79188888083850183828082843760009201919091525061377c92505050565b905062093a80811115612728576040805162461bcd60e51b81526020600482015260146024820152736c6f636b20706572696f6420746f6f206c6f6e6760601b604482015290519081900360640190fd5b600555612896565b61279c87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526015815274189b9893185c99d9551c985b9cd9995c931a5b5a5d605a1b602082015291506136959050565b1561285957604080516020601f87018190048102820181019092528581526000916127df9188888083850183828082843760009201919091525061377c92505050565b905068056bc75e2d631000008110156128295760405162461bcd60e51b81526004018080602001828103825260228152602001806153436022913960400191505060405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f855612896565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b336110081461296b5760405162461bcd60e51b815260040180806020018281038252602381526020018061566a6023913960400191505060405180910390fd5b600091825260046020908152604080842080546001600160a01b03191690556001600160a01b039290921683526003815281832083905560029052812055565b6221272160e91b81565b61c35081565b60026020526000908152604090205481565b6001600160a01b031660009081526003602052604090205490565b61100281565b60005460ff16612a33576040805162461bcd60e51b8152602060048201526019602482015260008051602061568d833981519152604482015290519081900360640190fd5b3361200014612a735760405162461bcd60e51b815260040180806020018281038252602f81526020018061563b602f913960400191505060405180910390fd5b60ff83166003141561199d5761199882828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061378192505050565b60085460ff1660021415612b0a576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b6008805460ff191660021790556001600160a01b0380831660009081526007602090815260408083209385168352929052208054612b82576040805162461bcd60e51b815260206004820152601060248201526f1b9bc81b1bd8dad95908185b5bdd5b9d60821b604482015290519081900360640190fd5b8060010154421015612bdb576040805162461bcd60e51b815260206004820152601760248201527f7374696c6c206f6e206c6f636b696e6720706572696f64000000000000000000604482015290519081900360640190fd5b805460008083556001600160a01b038516612c4e576040516001600160a01b038516906127109084906000818181858888f193505050503d8060008114612c3e576040519150601f19603f3d011682016040523d82523d6000602084013e612c43565b606091505b505080915050612ce1565b846001600160a01b031663a9059cbb61c35086856040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b158015612cb157600080fd5b5087f1158015612cc5573d6000803e3d6000fd5b50505050506040513d6020811015612cdc57600080fd5b505190505b80612d33576040805162461bcd60e51b815260206004820152601e60248201527f776974686472617720756e6c6f636b656420746f6b656e206661696c65640000604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b03167f832fc3e25f2b3e6fb0eb59419a73cba405f2a249fce75f7e31ea5a457a0323f1846040518082815260200191505060405180910390a350506008805460ff19166001179055505050565b61100381565b60005460ff1615612df0576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b66071afd498d000060019081556000808052600260205260127fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55805460ff19169091179055565b60066020526000908152604090205481565b600481565b600581565b61100081565b61271081565b69021e19e0c9bab240000081565b6001600160a01b03811660009081526003602090815260409182902054825182815280840190935260609290918391906020820181803683375050506020810183905290506000805b60208160ff161015612efe57828160ff1681518110612ed257fe5b01602001516001600160f81b03191615612ef157816001019150612ef6565b612efe565b600101612eb7565b5060608160ff166040519080825280601f01601f191660200182016040528015612f2f576020820181803683370190505b50905060005b8260ff168160ff161015612f8b57838160ff1681518110612f5257fe5b602001015160f81c60f81b828260ff1681518110612f6c57fe5b60200101906001600160f81b031916908160001a905350600101612f35565b5095945050505050565b61100481565b6060612fa5615213565b6000612fb08461387f565b9150915080613006576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b6000613011836139be565b905063ffffffff8116156130a5576040808401516020808601516001600160a01b0316600090815260029091529182205461304c919061354f565b9050613056615248565b60405180608001604052808660000151815260200183815260200186608001516001600160a01b031681526020018463ffffffff16815250905061309981613d24565b955050505050506112e9565b505060408051600081526020810190915291506112e99050565b600082820183811015611d9a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000611d9a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e00565b60008261316a57506000611d9d565b8282028284828161317757fe5b0414611d9a5760405162461bcd60e51b815260040180806020018281038252602181526020018061554e6021913960400191505060405180910390fd5b6000611d9a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ea2565b60408051600680825260e08201909252606091829190816020015b6060815260200190600190039081613211575050835190915061323390613efc565b8160008151811061324057fe5b602002602001018190525061326183602001516001600160a01b0316613f0f565b8160018151811061326e57fe5b6020026020010181905250600083604001515190506060816040519080825280602002602001820160405280156132b957816020015b60608152602001906001900390816132a45790505b50905060005b82811015613306576132e7866040015182815181106132da57fe5b6020026020010151613efc565b8282815181106132f357fe5b60209081029190910101526001016132bf565b5061331081613f32565b8360028151811061331d57fe5b602002602001018190525060608260405190808252806020026020018201604052801561335e57816020015b60608152602001906001900390816133495790505b50905060005b838110156133b4576133958760600151828151811061337f57fe5b60200260200101516001600160a01b0316613f0f565b8282815181106133a157fe5b6020908102919091010152600101613364565b506133be81613f32565b846003815181106133cb57fe5b602002602001018190525060608360405190808252806020026020018201604052801561340c57816020015b60608152602001906001900390816133f75790505b50905060005b8481101561344c5761342d8860800151828151811061337f57fe5b82828151811061343957fe5b6020908102919091010152600101613412565b5061345681613f32565b8560048151811061346357fe5b60200260200101819052506134858760a0015167ffffffffffffffff16613efc565b8560058151811061349257fe5b60200260200101819052506134a685613f32565b979650505050505050565b6134b961526f565b60006134c483613fbc565b91509150806135045760405162461bcd60e51b81526004018080602001828103825260248152602001806155dc6024913960400191505060405180910390fd5b611a0c82614187565b6000611d9a83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f000000000000000081525061460b565b6000600882111561357857613571836007198401600a0a63ffffffff61311916565b9050611d9d565b611d9a836008849003600a0a63ffffffff61315b16565b604080516020808252818301909252600091606091906020820181803683375050506020810184905290506000805b60208160ff16101561360557828160ff16815181106135d957fe5b01602001516001600160f81b031916156135f8578160010191506135fd565b613605565b6001016135be565b50600760ff8216101561361d576000925050506112e9565b816005820360ff168151811061362f57fe5b6020910101516001600160f81b031916602d60f81b14613654576000925050506112e9565b816001820360ff168151811061366657fe5b6020910101516001600160f81b031916604d60f81b1461368b576000925050506112e9565b5060019392505050565b6000816040516020018082805190602001908083835b602083106136ca5780518252601f1990920191602091820191016136ab565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106137385780518252601f199092019160209182019101613719565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b6137896151c7565b60006137948361466d565b91509150806137d45760405162461bcd60e51b815260040180806020018281038252602481526020018061539f6024913960400191505060405180910390fd5b6137dc61526f565b602080840180516001600160a01b0390811684526040808701518585015291511660009081526002909252812054905b84604001515181101561385d5761383a8560400151828151811061382c57fe5b6020026020010151836148d1565b8560400151828151811061384a57fe5b602090810291909101015260010161380c565b50608084015160408301526005606083015261387882614187565b5050505050565b613887615213565b6000613891615213565b6138996152a6565b6138aa6138a58661490a565b61492f565b90506000805b6138b983614979565b156139b157806138db576138d46138cf8461499a565b6149e8565b84526139a9565b8060011415613908576138f56138f08461499a565b614a9f565b6001600160a01b031660208501526139a9565b80600214156139275761391d6138cf8461499a565b60408501526139a9565b806003141561394f5761393c6138f08461499a565b6001600160a01b031660608501526139a9565b8060041415613977576139646138f08461499a565b6001600160a01b031660808501526139a9565b80600514156139a45761398c6138cf8461499a565b67ffffffffffffffff1660a0850152600191506139a9565b6139b1565b6001016138b0565b5091935090915050915091565b60208101516000906001600160a01b0316613b02578160a0015167ffffffffffffffff164211156139f1575060016112e9565b8160400151471015613a05575060036112e9565b613a0e82614ab9565b613a8357606082015160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d8060008114613a69576040519150601f19603f3d011682016040523d82523d6000602084013e613a6e565b606091505b5050905080613a815750600490506112e9565b505b7f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5982602001518360600151846040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a15060006112e9565b8160a0015167ffffffffffffffff16421115613b20575060016112e9565b81516020808401516001600160a01b031660009081526003909152604090205414613b4d575060026112e9565b602080830151604080516370a0823160e01b815230600482015290516000936001600160a01b03909316926370a082319261c3509260248083019392829003018187803b158015613b9d57600080fd5b5086fa158015613bb1573d6000803e3d6000fd5b50505050506040513d6020811015613bc857600080fd5b50516040840151909150811015613be35750600390506112e9565b613bec83614ab9565b613ca357600083602001516001600160a01b031663a9059cbb61c350866060015187604001516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b158015613c6157600080fd5b5087f1158015613c75573d6000803e3d6000fd5b50505050506040513d6020811015613c8c57600080fd5b5051905080613ca15750600591506112e99050565b505b7f471eb9cc1ffe55ffadf15b32595415eb9d80f22e761d24bd6dffc607e1284d5983602001518460600151856040015160405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a150600090506112e9565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081613d3f5750508351909150613d6190613efc565b81600081518110613d6e57fe5b6020026020010181905250613d868360200151613efc565b81600181518110613d9357fe5b6020026020010181905250613db483604001516001600160a01b0316613f0f565b81600281518110613dc157fe5b6020026020010181905250613ddf836060015163ffffffff16613efc565b81600381518110613dec57fe5b602002602001018190525061119f81613f32565b60008183613e8c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e51578181015183820152602001613e39565b50505050905090810190601f168015613e7e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613e9857fe5b0495945050505050565b60008184841115613ef45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613e51578181015183820152602001613e39565b505050900390565b6060611d9d613f0a83614c27565b614d0d565b60408051600560a21b831860148201526034810190915260609061119f81614d0d565b6060815160001415613f5357506040805160008152602081019091526112e9565b606082600081518110613f6257fe5b602002602001015190506000600190505b8351811015613fa357613f9982858381518110613f8c57fe5b6020026020010151614d5f565b9150600101613f73565b5061119f613fb6825160c060ff16614ddc565b82614d5f565b613fc461526f565b6000613fce61526f565b613fd66152a6565b613fe26138a58661490a565b90506000805b613ff183614979565b156139b15780614017576140076138f08461499a565b6001600160a01b0316845261417f565b80600114156140b857606061403361402e8561499a565b614ed4565b90508051604051908082528060200260200182016040528015614060578160200160208202803683370190505b50602086015260005b81518110156140b15761408e82828151811061408157fe5b60200260200101516149e8565b8660200151828151811061409e57fe5b6020908102919091010152600101614069565b505061417f565b806002141561415a5760606140cf61402e8561499a565b905080516040519080825280602002602001820160405280156140fc578160200160208202803683370190505b50604086015260005b81518110156140b15761412a82828151811061411d57fe5b6020026020010151614a9f565b8660400151828151811061413a57fe5b6001600160a01b0390921660209283029190910190910152600101614105565b80600314156139a45761416f6138cf8461499a565b63ffffffff166060850152600191505b600101613fe8565b80516001600160a01b03166143b15760005b8160200151518110156143ab576000826040015182815181106141b857fe5b60200260200101516001600160a01b0316612710846020015184815181106141dc57fe5b60209081029190910101516040516000818181858888f193505050503d8060008114614224576040519150601f19603f3d011682016040523d82523d6000602084013e614229565b606091505b50509050806142ec577f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061426857fe5b60200260200101518560200151858151811061428057fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a16143a2565b7fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a83600001518460400151848151811061432257fe5b60200260200101518560200151858151811061433a57fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b50600101614199565b50614608565b60005b81602001515181101561460657600082600001516001600160a01b031663a9059cbb61c350856040015185815181106143e957fe5b60200260200101518660200151868151811061440157fe5b60200260200101516040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600088803b15801561445857600080fd5b5087f115801561446c573d6000803e3d6000fd5b50505050506040513d602081101561448357600080fd5b505190508015614547577fd468d4fa5e8fb4adc119b29a983fd0785e04af5cb8b7a3a69a47270c54b6901a8360000151846040015184815181106144c357fe5b6020026020010151856020015185815181106144db57fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a16145fd565b7f203f9f67a785f4f81be4d48b109aa0c498d1bc8097ecc2627063f480cc5fe73e83600001518460400151848151811061457d57fe5b60200260200101518560200151858151811061459557fe5b6020026020010151866060015160405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a15b506001016143b4565b505b50565b6000818361465a5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613e51578181015183820152602001613e39565b5082848161466457fe5b06949350505050565b6146756151c7565b600061467f6151c7565b6146876152a6565b6146936138a58661490a565b90506000805b6146a283614979565b156139b157806146bf576146b86138cf8461499a565b84526148c9565b80600114156146e7576146d46138f08461499a565b6001600160a01b031660208501526148c9565b80600214156147765760606146fe61402e8561499a565b9050805160405190808252806020026020018201604052801561472b578160200160208202803683370190505b50604086015260005b815181101561476f5761474c82828151811061408157fe5b8660400151828151811061475c57fe5b6020908102919091010152600101614734565b50506148c9565b806003141561480b57606061478d61402e8561499a565b905080516040519080825280602002602001820160405280156147ba578160200160208202803683370190505b50606086015260005b815181101561476f576147db82828151811061411d57fe5b866060015182815181106147eb57fe5b6001600160a01b03909216602092830291909101909101526001016147c3565b80600414156148a057606061482261402e8561499a565b9050805160405190808252806020026020018201604052801561484f578160200160208202803683370190505b50608086015260005b815181101561476f5761487082828151811061411d57fe5b8660800151828151811061488057fe5b6001600160a01b0390921660209283029190910190910152600101614858565b80600514156139a4576148b56138cf8461499a565b67ffffffffffffffff1660a0850152600191505b600101614699565b600060088211156148f357613571836007198401600a0a63ffffffff61315b16565b611d9a836008849003600a0a63ffffffff61311916565b6149126152c6565b506040805180820190915281518152602082810190820152919050565b6149376152a6565b61494082614fa5565b61494957600080fd5b60006149588360200151614fd5565b60208085015160408051808201909152868152920190820152915050919050565b60006149836152c6565b505080518051602091820151919092015191011190565b6149a26152c6565b6149ab82614979565b6149b457600080fd5b602082015160006149c482615038565b80830160209586015260408051808201909152908152938401919091525090919050565b8051600090158015906149fd57508151602110155b614a0657600080fd5b6000614a158360200151614fd5565b90508083600001511015614a70576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015614a9657826020036101000a820491505b50949350505050565b8051600090601514614ab057600080fd5b611d9d826149e8565b600080805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f854158015614af25750600554155b15614b345760008052600660205269021e19e0c9bab24000007f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85561a8c06005555b6020808301516001600160a01b0316600090815260069091526040902054801580614b625750808360400151105b15614b715760009150506112e9565b6020808401516001600160a01b039081166000908152600783526040808220606088015190931682529190925290819020908401518154614bb79163ffffffff6130bf16565b8155600554420160018201819055606085015160208087015160408089015181519081529283019490945283516001600160a01b039384169493909116927f3fb83143cd331170da18fb1e8564d97e8ec39264b6ecb1ba248ea7596ab07258928290030190a35060019392505050565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416614c6b57506018614c8f565b6fffffffffffffffffffffffffffffffff198416614c8b57506010614c8f565b5060005b6020811015614cc557818181518110614ca457fe5b01602001516001600160f81b03191615614cbd57614cc5565b600101614c8f565b60008160200390506060816040519080825280601f01601f191660200182016040528015614cfa576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015614d3f5750607f60f81b82600081518110614d2d57fe5b01602001516001600160f81b03191611155b15614d4b5750806112e9565b611d9d614d5d8351608060ff16614ddc565b835b6060806040519050835180825260208201818101602087015b81831015614d90578051835260209283019201614d78565b50855184518101855292509050808201602086015b81831015614dbd578051835260209283019201614da5565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310614e2c576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411614e865782840160f81b81600081518110614e6857fe5b60200101906001600160f81b031916908160001a9053509050611d9d565b6060614e9185614c27565b90508381510160370160f81b82600081518110614eaa57fe5b60200101906001600160f81b031916908160001a905350614ecb8282614d5f565b95945050505050565b6060614edf82614fa5565b614ee857600080fd5b6000614ef38361516b565b9050606081604051908082528060200260200182016040528015614f3157816020015b614f1e6152c6565b815260200190600190039081614f165790505b5090506000614f438560200151614fd5565b60208601510190506000805b84811015614f9a57614f6083615038565b9150604051806040016040528083815260200184815250848281518110614f8357fe5b602090810291909101015291810191600101614f4f565b509195945050505050565b8051600090614fb6575060006112e9565b6020820151805160001a9060c082101561368b576000925050506112e9565b8051600090811a6080811015614fef5760009150506112e9565b60b881108061500a575060c0811080159061500a575060f881105b156150195760019150506112e9565b60c081101561502d5760b5190190506112e9565b60f5190190506112e9565b80516000908190811a60808110156150535760019150615164565b60b881101561506857607e1981019150615164565b60c08110156150e257600060b78203600186019550806020036101000a8651049150600181018201935050808310156150dc576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50615164565b60f88110156150f75760be1981019150615164565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615162576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b805160009061517c575060006112e9565b600080905060006151908460200151614fd5565b602085015185519181019250015b808210156151be576151af82615038565b8201915082600101925061519e565b50909392505050565b6040518060c001604052806000801916815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600067ffffffffffffffff1681525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600063ffffffff1681525090565b60405180604001604052806152b96152c6565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6f6e6c79207374616b696e672073797374656d20636f6e74726163742063616e2063616c6c20746869732066756e6374696f6e746865206d6573736167652073656e646572206d75737420626520696e63656e746976697a6520636f6e7472616374626e62206c61726765207472616e73666572206c696d697420746f6f20736d616c6c466f72206d696e69546f6b656e2c20746865207472616e7366657220616d6f756e74206d757374206e6f74206265206c657373207468616e2031756e7265636f676e697a6564207472616e736665724f75742073796e207061636b61676565787069726554696d65206d7573742062652074776f206d696e75746573206c61746572616d6f756e7420697320746f6f206c617267652c20657863656564206d6178696d756d206265703220746f6b656e20616d6f756e7474686520636f6e747261637420686173206e6f74206265656e20626f756e6420746f20616e79206265703220746f6b656e726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e736665724f757420424e4220616d6f756e7420616e64206d696e696d756d2072656c6179466565616d6f756e7420697320746f6f206c617267652c2075696e74323536206f766572666c6f774c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620726566756e644164647273696e76616c6964207472616e7366657220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e20746865206d696e696d756d2072656c6179466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374756e7265636f676e697a6564207472616e736665724f75742061636b207061636b6167654c656e677468206f6620726563697069656e74416464727320646f65736e277420657175616c20746f206c656e677468206f6620616d6f756e7473746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e7472616374746865206d73672073656e646572206d75737420626520746f6b656e4d616e6167657274686520636f6e7472616374206e6f7420696e69742079657400000000000000726563656976656420424e4220616d6f756e742073686f756c64206265206e6f206c657373207468616e207468652073756d206f66207472616e7366657220424e4220616d6f756e7420616e642072656c6179466565696e76616c696420726563656976656420424e4220616d6f756e743a20707265636973696f6e206c6f737320696e20616d6f756e7420636f6e76657273696f6e434c41494d5f524557415244535f464f525f46494e414c4954595f4e4f545f414c4c4f574544a164736f6c6343000604000a" + }, + "0x0000000000000000000000000000000000001005": { + "balance": "0x0", + "code": "0x6080604052600436106102975760003560e01c80637e146cc51161015a578063bd4cc830116100c1578063e75d72c71161007a578063e75d72c7146107f5578063e89a302014610828578063f9a2bbc714610852578063fc3e590814610867578063fd6a68791461087c578063fdd31fcd146108915761029e565b8063bd4cc83014610762578063c81b16621461078c578063d0ab528a146107a1578063dc927faf146107b6578063dcae76ab146107cb578063e1c7392a146107e05761029e565b8063a78abc1611610113578063a78abc1614610613578063a7c6a59d14610628578063ab51bb961461063d578063ac43175114610652578063ace9fcc214610723578063af400681146107385761029e565b80637e146cc514610577578063930e1b091461058c57806396713da9146105bf5780639dc09262146105d4578063a1a11bf5146105e9578063a3c3c0ad146105fe5761029e565b806343756e5c116101fe5780636f93d2e6116101b75780636f93d2e6146104af57806370fd5bad1461050e578063718a8aa81461052357806374f2272d1461053857806375d47a0a1461054d5780637942fd05146105625761029e565b806343756e5c1461041a578063493279b11461042f5780634bf6c8821461045b57806351e806721461047057806354133307146104855780636e47b4821461049a5761029e565b806312950c461161025057806312950c46146103685780631b20087c1461037d5780631c643312146103925780633a975612146102a35780633dffc387146103bc57806340bb43c0146103e75761029e565b8063081e9d13146102a357806308f2ec06146102ca578063093f2fc4146102df5780630bee7a67146102f45780630e2374a51461032257806310e06a76146103535761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b86108c4565b60408051918252519081900360200190f35b3480156102d657600080fd5b506102b86108c9565b3480156102eb57600080fd5b506102b86108ce565b34801561030057600080fd5b506103096108d3565b6040805163ffffffff9092168252519081900360200190f35b34801561032e57600080fd5b506103376108d8565b604080516001600160a01b039092168252519081900360200190f35b34801561035f57600080fd5b506102b86108de565b34801561037457600080fd5b506102b86108e4565b34801561038957600080fd5b506102b86108ea565b34801561039e57600080fd5b50610337600480360360208110156103b557600080fd5b50356108f0565b3480156103c857600080fd5b506103d16108c4565b6040805160ff9092168252519081900360200190f35b3480156103f357600080fd5b506102b86004803603602081101561040a57600080fd5b50356001600160a01b0316610917565b34801561042657600080fd5b50610337610929565b34801561043b57600080fd5b5061044461092f565b6040805161ffff9092168252519081900360200190f35b34801561046757600080fd5b506103d1610935565b34801561047c57600080fd5b5061033761093a565b34801561049157600080fd5b506102b86108d3565b3480156104a657600080fd5b50610337610940565b3480156104bb57600080fd5b506104fa600480360360808110156104d257600080fd5b506001600160a01b038135811691602081013590911690604081013590606001351515610946565b604080519115158252519081900360200190f35b34801561051a57600080fd5b506103d1610dd8565b34801561052f57600080fd5b506103d1610ddd565b34801561054457600080fd5b506102b8610de2565b34801561055957600080fd5b50610337610de8565b34801561056e57600080fd5b506103d1610dee565b34801561058357600080fd5b506102b8610df3565b34801561059857600080fd5b506102b8600480360360208110156105af57600080fd5b50356001600160a01b0316610df8565b3480156105cb57600080fd5b506103d1610e0a565b3480156105e057600080fd5b50610337610e0f565b3480156105f557600080fd5b50610337610e15565b34801561060a57600080fd5b506102b8610e1b565b34801561061f57600080fd5b506104fa610e21565b34801561063457600080fd5b506102b8610e2a565b34801561064957600080fd5b50610309610e30565b34801561065e57600080fd5b506107216004803603604081101561067557600080fd5b81019060208101813564010000000081111561069057600080fd5b8201836020820111156106a257600080fd5b803590602001918460018302840111640100000000831117156106c457600080fd5b9193909290916020810190356401000000008111156106e257600080fd5b8201836020820111156106f457600080fd5b8035906020019184600183028401116401000000008311171561071657600080fd5b509092509050610e35565b005b34801561072f57600080fd5b506102b8611583565b34801561074457600080fd5b506102b86004803603602081101561075b57600080fd5b5035611589565b34801561076e57600080fd5b506102b86004803603602081101561078557600080fd5b50356115e4565b34801561079857600080fd5b506103376115fd565b3480156107ad57600080fd5b506102b8611603565b3480156107c257600080fd5b50610337611609565b3480156107d757600080fd5b506102b861160f565b3480156107ec57600080fd5b50610721611615565b34801561080157600080fd5b506107216004803603602081101561081857600080fd5b50356001600160a01b03166116de565b34801561083457600080fd5b506103376004803603602081101561084b57600080fd5b5035611837565b34801561085e57600080fd5b50610337611844565b34801561087357600080fd5b506103d161184a565b34801561088857600080fd5b5061033761184f565b34801561089d57600080fd5b506102b8600480360360208110156108b457600080fd5b50356001600160a01b0316611855565b600181565b602881565b605081565b606481565b61200181565b600b5481565b60015481565b600c5481565b600681815481106108fd57fe5b6000918252602090912001546001600160a01b0316905081565b60076020526000908152604090205481565b61100181565b6102ca81565b600881565b61200081565b61100581565b6000805460ff1661099e576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b33612000146109de5760405162461bcd60e51b815260040180806020018281038252602f8152602001806123d8602f913960400191505060405180910390fd5b60008215610a91576110026001600160a01b0316639a99b4f0611005610a0f600e548861186790919063ffffffff16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610a5e57600080fd5b505af1158015610a72573d6000803e3d6000fd5b505050506040513d6020811015610a8857600080fd5b50519050610ba0565b604080516309a99b4f60e41b8152611005600482015260248101869052905161100491639a99b4f09160448083019260209291908290030181600087803b158015610adb57600080fd5b505af1158015610aef573d6000803e3d6000fd5b505050506040513d6020811015610b0557600080fd5b5051600e5490915015610ba057600e54604080516309a99b4f60e41b81526110056004820152602481019290925251610b9d9161100291639a99b4f0916044808201926020929091908290030181600087803b158015610b6457600080fd5b505af1158015610b78573d6000803e3d6000fd5b505050506040513d6020811015610b8e57600080fd5b5051829063ffffffff61186716565b90505b600c805460010190556000610bb4826118ca565b600954909150610bca908263ffffffff61186716565b600955600a54610bf2908290610be6908563ffffffff61186716565b9063ffffffff6118f316565b600a556001600160a01b038716600090815260056020526040902054610c5e57600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0389161790555b6001600160a01b038088166000908152600560209081526040808320805460010190559289168252600790522054610cdc57600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b038616600090815260076020526040902080546001019055600c54606411610dcb57600b54600954600a5460408051938452602084019290925282820152517f2649b1b772a1a74bd332a67695e285317dd722941166595741c60a00fa65bb759181900360600190a16000610d56611935565b90506000610d62611c25565b6001600160a01b0389166000908152600d6020526040902054909150610da0908290610d94908563ffffffff61186716565b9063ffffffff61186716565b6001600160a01b0389166000908152600d6020526040812091909155600b80546001019055600c5550505b5060019695505050505050565b600281565b601081565b60035481565b61100881565b600b81565b600581565b60056020526000908152604090205481565b600981565b61100781565b61100681565b600a5481565b60005460ff1681565b60045481565b600081565b3361100714610e755760405162461bcd60e51b815260040180806020018281038252602e81526020018061231d602e913960400191505060405180910390fd5b60005460ff16610eb65760405162461bcd60e51b815260040180806020018281038252602181526020018061234b6021913960400191505060405180910390fd5b610f2a84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601f81527f68656164657252656c61796572526577617264526174654d6f6c6563756c650060208201529150611eac9050565b15610ff75760208114610f6e5760405162461bcd60e51b81526004018080602001828103825260328152602001806124076032913960400191505060405180910390fd5b604080516020601f8401819004810282018101909252828152600091610fac91858580838501838280828437600092019190915250611f9392505050565b9050600254811115610fef5760405162461bcd60e51b81526004018080602001828103825260608152602001806121f66060913960600191505060405180910390fd5b6001556114f1565b61105084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805160608101909152602280825290925090506122fb6020830139611eac565b1561112857602081146110945760405162461bcd60e51b815260040180806020018281038252602e8152602001806122ac602e913960400191505060405180910390fd5b604080516020601f84018190048102820181019092528281526000916110d291858580838501838280828437600092019190915250611f9392505050565b905080158015906110e557506001548110155b6111205760405162461bcd60e51b815260040180806020018281038252606c81526020018061236c606c913960800191505060405180910390fd5b6002556114f1565b61119c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601a81527f63616c6c6572436f6d70656e736174696f6e4d6f6c6563756c6500000000000060208201529150611eac9050565b1561126957602081146111e05760405162461bcd60e51b815260040180806020018281038252602e8152602001806122ac602e913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161121e91858580838501838280828437600092019190915250611f9392505050565b90506004548111156112615760405162461bcd60e51b81526004018080602001828103825260568152602001806122566056913960600191505060405180910390fd5b6003556114f1565b6112dd84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601d81527f63616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f7200000060208201529150611eac9050565b156113b557602081146113215760405162461bcd60e51b815260040180806020018281038252602e8152602001806122ac602e913960400191505060405180910390fd5b604080516020601f840181900481028201810190925282815260009161135f91858580838501838280828437600092019190915250611f9392505050565b9050801580159061137257506003548110155b6113ad5760405162461bcd60e51b81526004018080602001828103825260618152602001806121676061913960800191505060405180910390fd5b6004556114f1565b61142984848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601b81527f64796e616d69634578747261496e63656e74697665416d6f756e74000000000060208201529150611eac9050565b156114b4576020811461146d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604080516020601f84018190048102820181019092528281526000916114ab91858580838501838280828437600092019190915250611f9392505050565b600e55506114f1565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b60025481565b60006028821161159a5750806115df565b8160281080156115ab575060508211155b156115b8575060286115df565b6050821180156115c95750606e8211155b156115d9575060788190036115df565b50600481045b919050565b6000602882116115f55750806115df565b5060286115df565b61100281565b600e5481565b61100381565b60095481565b60005460ff161561166d576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b60005460ff16156116bb576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b60018080556005600255600381905560506004556000805460ff19169091179055565b6001600160a01b0381166000908152600d60205260409020548061173d576040805162461bcd60e51b81526020600482015260116024820152701b9bc81c995b185e595c881c995dd85c99607a1b604482015290519081900360640190fd5b6001600160a01b0382166000818152600d60205260408082208290555184929184156108fc02918591818181858888f193505050506117ed5760405161100290819084156108fc029085906000818181858888f193505050501580156117a7573d6000803e3d6000fd5b506040805161100281526020810185905281517f24502838a334c8f2bb2ee1f8262a4fa7183e4489a717e96cc824e325f8b39e11929181900390910190a1505050611834565b604080516001600160a01b03851681526020810184905281517f24502838a334c8f2bb2ee1f8262a4fa7183e4489a717e96cc824e325f8b39e11929181900390910190a150505b50565b600881815481106108fd57fe5b61100081565b600381565b61100481565b600d6020526000908152604090205481565b6000828201838110156118c1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60006118c46002546118e760015485611f9890919063ffffffff16565b9063ffffffff611ff116565b60006118c183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612033565b600954600680546040805160208084028201810190925282815260009493859360609383018282801561199157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611973575b50505050509050606081516040519080825280602002602001820160405280156119c5578160200160208202803683370190505b50905060005b8251811015611a555760008382815181106119e257fe5b602002602001015190506000611a1c60056000846001600160a01b03166001600160a01b03168152602001908152602001600020546115e4565b905080848481518110611a2b57fe5b6020908102919091010152611a46868263ffffffff61186716565b955050508060010190506119cb565b506000611a736004546118e760035488611f9890919063ffffffff16565b9050611a85858263ffffffff6118f316565b94508460015b8451811015611b5c576000611ac0876118e78a888681518110611aaa57fe5b6020026020010151611f9890919063ffffffff16565b9050611b0d81600d6000898681518110611ad657fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205461186790919063ffffffff16565b600d6000888581518110611b1d57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055611b51838263ffffffff6118f316565b925050600101611a8b565b50611b7281600d600087600081518110611ad657fe5b600d600086600081518110611b8357fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060098190555060008090505b8451811015611c0d5760056000868381518110611bd657fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009055806001019050611bbd565b50611c1a6006600061212f565b509450505050505b90565b600a546008805460408051602080840282018101909252828152600094938593606093830182828015611c8157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c63575b5050505050905060608151604051908082528060200260200182016040528015611cb5578160200160208202803683370190505b50905060005b8251811015611d34576000838281518110611cd257fe5b602002602001015190506000611d0c60076000846001600160a01b03166001600160a01b0316815260200190815260200160002054611589565b905080848481518110611d1b57fe5b6020908102919091010152949094019350600101611cbb565b506000611d526004546118e760035488611f9890919063ffffffff16565b9050611d64858263ffffffff6118f316565b94508460015b8451811015611dee576000611d89876118e78a888681518110611aaa57fe5b9050611d9f81600d6000898681518110611ad657fe5b600d6000888581518110611daf57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055611de3838263ffffffff6118f316565b925050600101611d6a565b50611e0481600d600087600081518110611ad657fe5b600d600086600081518110611e1557fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055506000600a8190555060008090505b8451811015611e9f5760076000868381518110611e6857fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009055806001019050611e4f565b50611c1a6008600061212f565b6000816040516020018082805190602001908083835b60208310611ee15780518252601f199092019160209182019101611ec2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310611f4f5780518252601f199092019160209182019101611f30565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b600082611fa7575060006118c4565b82820282848281611fb457fe5b04146118c15760405162461bcd60e51b81526004018080602001828103825260218152602001806122da6021913960400191505060405180910390fd5b60006118c183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120ca565b600081848411156120c25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561208757818101518382015260200161206f565b50505050905090810190601f1680156120b45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836121195760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561208757818101518382015260200161206f565b50600083858161212557fe5b0495945050505050565b50805460008255906000526020600020908101906118349190611c2291905b80821115612162576000815560010161214e565b509056fe746865206e657743616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f72206d757374206e6f74206265207a65726f20616e64206e6f206c657373207468616e2063616c6c6572436f6d70656e736174696f6e4d6f6c6563756c656c656e677468206f662064796e616d69634578747261496e63656e74697665416d6f756e74206d69736d617463686e65772068656164657252656c61796572526577617264526174654d6f6c6563756c652073686f756c646e27742062652067726561746572207468616e2068656164657252656c617965725265776172645261746544656e6f6d696e61746f726e65772063616c6c6572436f6d70656e736174696f6e4d6f6c6563756c652073686f756c646e27742062652067726561746572207468616e2063616c6c6572436f6d70656e736174696f6e44656e6f6d696e61746f726c656e677468206f6620726577617264466f7256616c696461746f725365744368616e6765206d69736d61746368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7768656164657252656c617965725265776172645261746544656e6f6d696e61746f72746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374636f6e747261637420686173206e6f74206265656e20696e697469616c697a6564746865206e65772068656164657252656c617965725265776172645261746544656e6f6d696e61746f72206d757374206e6f74206265207a65726f20616e64206e6f206c657373207468616e2068656164657252656c61796572526577617264526174654d6f6c6563756c65746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e74726163746c656e677468206f662068656164657252656c61796572526577617264526174654d6f6c6563756c65206d69736d61746368a164736f6c6343000604000a" + }, + "0x0000000000000000000000000000000000001006": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106102275760003560e01c80638f83ab1311610130578063c81b1662116100b8578063f3ae24151161007c578063f3ae2415146104e8578063f9a2bbc71461050e578063fc3e590814610516578063fd30d9b81461051e578063fd6a68791461052657610227565b8063c81b1662146104c0578063dc927faf146104c8578063dd91d1c5146104d0578063e1c7392a146104d8578063e79a198f146104e057610227565b8063a1a11bf5116100ff578063a1a11bf5146103de578063a74b83ca146103e6578063a78abc16146103ee578063ab51bb96146103f6578063ac431751146103fe57610227565b80638f83ab13146103a057806395468d26146103c657806396713da9146103ce5780639dc09262146103d657610227565b8063541d5548116101b3578063718a8aa811610182578063718a8aa81461034857806375d47a0a1461035057806378beee67146103585780637942fd051461037e5780637ae230881461038657610227565b8063541d5548146102d85780636a6a419e146103125780636e47b4821461033857806370fd5bad1461034057610227565b80633dffc387116101fa5780633dffc3871461028357806343756e5c146102a1578063493279b1146102a95780634bf6c882146102c857806351e80672146102d057610227565b806303aff02b1461022c578063049a5716146102365780630bee7a671461025a5780630e2374a51461027b575b600080fd5b61023461052e565b005b61023e610539565b604080516001600160a01b039092168252519081900360200190f35b610262610551565b6040805163ffffffff9092168252519081900360200190f35b61023e610556565b61028b61055c565b6040805160ff9092168252519081900360200190f35b61023e610561565b6102b1610567565b6040805161ffff9092168252519081900360200190f35b61028b61056d565b61023e610572565b6102fe600480360360208110156102ee57600080fd5b50356001600160a01b0316610578565b604080519115158252519081900360200190f35b6102fe6004803603602081101561032857600080fd5b50356001600160a01b0316610596565b61023e6105b4565b61028b6105ba565b61028b6105bf565b61023e6105c4565b6102346004803603602081101561036e57600080fd5b50356001600160a01b03166105ca565b61028b6107b2565b61038e6107b7565b60408051918252519081900360200190f35b610234600480360360208110156103b657600080fd5b50356001600160a01b03166107c4565b61038e610a03565b61028b610a0f565b61023e610a14565b61023e610a1a565b61023e610a20565b6102fe610a38565b610262610a41565b6102346004803603604081101561041457600080fd5b81019060208101813564010000000081111561042f57600080fd5b82018360208201111561044157600080fd5b8035906020019184600183028401116401000000008311171561046357600080fd5b91939092909160208101903564010000000081111561048157600080fd5b82018360208201111561049357600080fd5b803590602001918460018302840111640100000000831117156104b557600080fd5b509092509050610a46565b61023e610d97565b61023e610d9d565b610234610da3565b610234610e44565b610234610ecc565b6102fe600480360360208110156104fe57600080fd5b50356001600160a01b0316611085565b61023e6110a3565b61028b6110a9565b6102fe6110ae565b61023e6110b7565b610537336110bd565b565b73a904540818ac9c47f2321f97f1069b9d8746c6db81565b606481565b61200181565b600181565b61100181565b6102ca81565b600881565b61200081565b6001600160a01b031660009081526007602052604090205460ff1690565b6001600160a01b031660009081526008602052604090205460ff1690565b61100581565b600281565b601081565b61100881565b3360009081526008602052604090205460ff166106185760405162461bcd60e51b81526004018080602001828103825260248152602001806115c96024913960400191505060405180910390fd5b6106213361121f565b1561065d5760405162461bcd60e51b81526004018080602001828103825260218152602001806115866021913960400191505060405180910390fd5b3233146106b1576040805162461bcd60e51b815260206004820152601e60248201527f70726f766973696f6e616c2072656c6179657220697320612070726f78790000604482015290519081900360640190fd5b6001600160a01b038181166000908152600960205260409020541633146107095760405162461bcd60e51b81526004018080602001828103825260278152602001806116426027913960400191505060405180910390fd5b6001600160a01b03818116600081815260066020908152604080832080543380865260078086528487208054600160ff199182161790915584546001600160a01b031990811684179095556008875285882080548216905597875260098652848720805490941690935596168085529083529281902080549094169093558251828152908101939093528151909260008051602061166983398151915292908290030190a15050565b600b81565b68056bc75e2d6310000081565b3360009081526005602052604090205460ff16610821576040805162461bcd60e51b81526020600482015260166024820152751b585b9859d95c88191bd95cc81b9bdd08195e1a5cdd60521b604482015290519081900360640190fd5b61082a8161121f565b156108665760405162461bcd60e51b81526004018080602001828103825260278152602001806115ed6027913960400191505060405180910390fd5b6001600160a01b03811615610922576001600160a01b03811660009081526007602052604090205460ff16156108dc576040805162461bcd60e51b815260206004820152601660248201527572656c6179657220616c72656164792065786973747360501b604482015290519081900360640190fd5b6001600160a01b0381166000818152600860209081526040808320805460ff191660011790553383526009909152902080546001600160a01b03191690911790556109c3565b3360008181526006602090815260408083208054600980855283862080546001600160a01b03198085169095556001600160a01b0393841680895260078852868920805460ff19908116909155918516808a5260088952878a20805490931690925598909752908552805490921690915581518581529086169281019290925280516000805160206116698339815191529281900390910190a15050610a00565b604080516001600160a01b038316815290517ffba56633276570c7d3120d4535bf3bce26523da53958e40734210b9fd99b36939181900360200190a15b50565b67016345785d8a000081565b600981565b61100781565b61100681565b73316b2fa7c8a2ab7e21110a4b3f58771c01a7134481565b60005460ff1681565b600081565b60005460ff16610a99576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b3361100714610ad95760405162461bcd60e51b815260040180806020018281038252602e815260200180611614602e913960400191505060405180910390fd5b610b3a84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600a81526930b23226b0b730b3b2b960b11b602082015291506112259050565b15610bd25760148114610b7e5760405162461bcd60e51b81526004018080602001828103825260228152602001806115a76022913960400191505060405180910390fd5b6000610bc1601484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061130c92505050565b9050610bcc81611311565b50610d05565b610c3684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c3932b6b7bb32a6b0b730b3b2b960991b602082015291506112259050565b15610cc85760148114610c7a5760405162461bcd60e51b81526004018080602001828103825260228152602001806115a76022913960400191505060405180910390fd5b6000610cbd601484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061130c92505050565b9050610bcc816110bd565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b61100281565b61100381565b600a5460ff1615610dfb576040805162461bcd60e51b815260206004820152601e60248201527f7468652077686974656c6973747320616c726561647920757064617465640000604482015290519081900360640190fd5b610e1873a904540818ac9c47f2321f97f1069b9d8746c6db6113d3565b610e3573316b2fa7c8a2ab7e21110a4b3f58771c01a713446113d3565b600a805460ff19166001179055565b60005460ff1615610e9c576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b68056bc75e2d6310000060015567016345785d8a0000600255610ebd610da3565b6000805460ff19166001179055565b3360009081526004602052604090205460ff16610f27576040805162461bcd60e51b81526020600482015260146024820152731c995b185e595c88191bc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b60005460ff16610f7a576040805162461bcd60e51b81526020600482015260196024820152781d1a194818dbdb9d1c9858dd081b9bdd081a5b9a5d081e595d603a1b604482015290519081900360640190fd5b610f8261156b565b5033600081815260036020908152604091829020825180840190935280548084526001909101549183018290529192916108fc91610fc6919063ffffffff61148b16565b6040518115909202916000818181858888f19350505050158015610fee573d6000803e3d6000fd5b50602081015160405161100291829181156108fc0291906000818181858888f19350505050158015611024573d6000803e3d6000fd5b50336000818152600460209081526040808320805460ff191690556003825280832083815560010192909255815192835290517fd17202129b83db7880d6b9f25df81c58ad46f7e0e2c92236b1aa10663a4876679281900390910190a15050565b6001600160a01b031660009081526005602052604090205460ff1690565b61100081565b600381565b600a5460ff1681565b61100481565b6001600160a01b03811660009081526005602052604090205460ff16611122576040805162461bcd60e51b81526020600482015260156024820152741b585b9859d95c88191bd95cdb89dd08195e1a5cdd605a1b604482015290519081900360640190fd5b6001600160a01b038082166000818152600660209081526040808320805460058452828520805460ff1990811690915582546001600160a01b0319908116909355600980865284872080548a16885260088752858820805490931690925595879052948452845490911690935580519384525191909316927f2002866d443ac6c241fecaaa2af4895828c7de2cc423b9d01f7969650f557c76928290030190a16001600160a01b0381161561121b576001600160a01b0381166000818152600760209081526040808320805460ff1916905580519384529083019190915280516000805160206116698339815191529281900390910190a15b5050565b3b151590565b6000816040516020018082805190602001908083835b6020831061125a5780518252601f19909201916020918201910161123b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106112c85780518252601f1990920191602091820191016112a9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b6001600160a01b03811660009081526005602052604090205460ff1615611378576040805162461bcd60e51b81526020600482015260166024820152756d616e6167657220616c72656164792065786973747360501b604482015290519081900360640190fd5b6001600160a01b038116600081815260056020908152604091829020805460ff19166001179055815192835290517fe0de8e71a22c046647f4ef744348fa126ad6d052d4ce070999481f69d45575179281900390910190a150565b6001600160a01b03811660008181526005602090815260408083208054600160ff1991821681179092556006845282852080546001600160a01b031916871790556007845293829020805490941617909255815192835290517fe0de8e71a22c046647f4ef744348fa126ad6d052d4ce070999481f69d45575179281900390910190a160408051600081526001600160a01b03831660208201528151600080516020611669833981519152929181900390910190a150565b60006114cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114d4565b9392505050565b600081848411156115635760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611528578181015183820152602001611510565b50505050905090810190601f1680156115555780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60405180604001604052806000815260200160008152509056fe70726f766973696f6e616c2072656c61796572206973206120636f6e74726163746c656e677468206f66206d616e616765722061646472657373206d69736d6174636872656c61796572206973206e6f7420612070726f766973696f6e616c2072656c61796572636f6e7472616374206973206e6f7420616c6c6f77656420746f20626520612072656c61796572746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e747261637470726f766973696f6e616c206973206e6f742073657420666f722074686973206d616e61676572a5a19d7e9dab30a215022382d7abe782b579986fcbedec9942ecd0db9510a148a164736f6c6343000604000a" + }, + "0x0000000000000000000000000000000000001007": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80637942fd05116100f9578063ab51bb9611610097578063dc927faf11610071578063dc927faf146104cc578063f9a2bbc7146104d4578063fc3e5908146104dc578063fd6a6879146104e4576101c4565b8063ab51bb9614610442578063c81b16621461044a578063c8509d8114610452576101c4565b80639ab1a373116100d35780639ab1a3731461040e5780639dc0926214610416578063a1a11bf51461041e578063a78abc1614610426576101c4565b80637942fd0514610382578063831d65d11461038a57806396713da914610406576101c4565b8063493279b1116101665780636e47b482116101405780636e47b4821461036257806370fd5bad1461036a578063718a8aa81461037257806375d47a0a1461037a576101c4565b8063493279b1146103335780634bf6c8821461035257806351e806721461035a576101c4565b80633a21baae116101a25780633a21baae146102fd5780633dffc3871461030557806343756e5c146103235780634900c4ea1461032b576101c4565b80630bee7a67146101c95780630e2374a5146101ea5780631182b8751461020e575b600080fd5b6101d16104ec565b6040805163ffffffff9092168252519081900360200190f35b6101f26104f1565b604080516001600160a01b039092168252519081900360200190f35b6102886004803603604081101561022457600080fd5b60ff823516919081019060408101602082013564010000000081111561024957600080fd5b82018360208201111561025b57600080fd5b8035906020019184600183028401116401000000008311171561027d57600080fd5b5090925090506104f7565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102c25781810151838201526020016102aa565b50505050905090810190601f1680156102ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d16105e6565b61030d6105eb565b6040805160ff9092168252519081900360200190f35b6101f26105f0565b61030d6105f6565b61033b6105fb565b6040805161ffff9092168252519081900360200190f35b61030d610601565b6101f2610606565b6101f261060c565b61030d610612565b61030d610617565b6101f261061c565b61030d610622565b610404600480360360408110156103a057600080fd5b60ff82351691908101906040810160208201356401000000008111156103c557600080fd5b8201836020820111156103d757600080fd5b803590602001918460018302840111640100000000831117156103f957600080fd5b509092509050610627565b005b61030d6106b9565b6101d16106be565b6101f26106c3565b6101f26106c9565b61042e6106cf565b604080519115158252519081900360200190f35b6101d16105f6565b6101f26106d8565b6104046004803603604081101561046857600080fd5b60ff823516919081019060408101602082013564010000000081111561048d57600080fd5b82018360208201111561049f57600080fd5b803590602001918460018302840111640100000000831117156104c157600080fd5b5090925090506106de565b6101f2610755565b6101f261075b565b61030d610761565b6101f2610766565b606481565b61200181565b606033612000146105395760405162461bcd60e51b815260040180806020018281038252602f815260200180611439602f913960400191505060405180910390fd5b6105416113d4565b600061058285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061076c92505050565b915091508061059e576105956064610832565b925050506105df565b60006105a98361089c565b905063ffffffff81166105d057505060408051600081526020810190915291506105df9050565b6105d981610832565b93505050505b9392505050565b606681565b600181565b61100181565b600081565b6102ca81565b600881565b61200081565b61100581565b600281565b601081565b61100881565b600b81565b33612000146106675760405162461bcd60e51b815260040180806020018281038252602f815260200180611439602f913960400191505060405180910390fd5b6040805162461bcd60e51b815260206004820152601e60248201527f7265636569766520756e65787065637465642061636b207061636b6167650000604482015290519081900360640190fd5b505050565b600981565b606581565b61100781565b61100681565b60005460ff1681565b61100281565b336120001461071e5760405162461bcd60e51b815260040180806020018281038252602f815260200180611439602f913960400191505060405180910390fd5b60405162461bcd60e51b81526004018080602001828103825260238152602001806114686023913960400191505060405180910390fd5b61100381565b61100081565b600381565b61100481565b6107746113d4565b600061077e6113d4565b6107866113fe565b61079761079286610c3d565b610c62565b90506000805b6107a683610cac565b1561082557806107c8576107c16107bc84610ccd565b610d1b565b845261081d565b80600114156107e7576107dd6107bc84610ccd565b602085015261081d565b8060021415610818576108016107fc84610ccd565b610d94565b6001600160a01b031660408501526001915061081d565b610825565b60010161079d565b5091935090915050915091565b604080516001808252818301909252606091829190816020015b606081526020019060019003908161084c5790505090506108728363ffffffff16610db4565b8160008151811061087f57fe5b602002602001018190525061089381610dc7565b9150505b919050565b60006108ab8260400151610e51565b61091757604080516020808252601c908201527f74686520746172676574206973206e6f74206120636f6e7472616374000000008183015290517f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb29181900360600190a1506065610897565b81604001516001600160a01b031663ac431751836000015184602001516040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561098457818101518382015260200161096c565b50505050905090810190601f1680156109b15780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156109e45781810151838201526020016109cc565b50505050905090810190601f168015610a115780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610a3257600080fd5b505af1925050508015610a43575060015b610c35576040516000815260443d1015610a5f57506000610afc565b60046000803e60005160e01c6308c379a08114610a80576000915050610afc565b60043d036004833e81513d602482011167ffffffffffffffff82111715610aac57600092505050610afc565b808301805167ffffffffffffffff811115610ace576000945050505050610afc565b8060208301013d8601811115610aec57600095505050505050610afc565b601f01601f191660405250925050505b80610b075750610baa565b7f70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb2816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b66578181015183820152602001610b4e565b50505050905090810190601f168015610b935780820380516001836020036101000a031916815260200191505b509250505060405180910390a16066915050610897565b3d808015610bd4576040519150601f19603f3d011682016040523d82523d6000602084013e610bd9565b606091505b5060408051602080825283518183015283517f1279f84165b4fd69c35e1f338ff107231b036c655cd1688851e011ce617c4e8d938593928392918301919085019080838360008315610b66578181015183820152602001610b4e565b506000919050565b610c4561141e565b506040805180820190915281518152602082810190820152919050565b610c6a6113fe565b610c7382610e57565b610c7c57600080fd5b6000610c8b8360200151610e91565b60208085015160408051808201909152868152920190820152915050919050565b6000610cb661141e565b505080518051602091820151919092015191011190565b610cd561141e565b610cde82610cac565b610ce757600080fd5b60208201516000610cf782610ef4565b80830160209586015260408051808201909152908152938401919091525090919050565b8051606090610d2957600080fd5b6000610d388360200151610e91565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015610d6f576020820181803683370190505b5090506000816020019050610d8b848760200151018285611027565b50949350505050565b8051600090601514610da557600080fd5b610dae82611072565b92915050565b6060610dae610dc283611127565b61120d565b6060815160001415610de85750604080516000815260208101909152610897565b606082600081518110610df757fe5b602002602001015190506000600190505b8351811015610e3857610e2e82858381518110610e2157fe5b602002602001015161125f565b9150600101610e08565b50610893610e4b825160c060ff166112dc565b8261125f565b3b151590565b8051600090610e6857506000610897565b6020820151805160001a9060c0821015610e8757600092505050610897565b5060019392505050565b8051600090811a6080811015610eab576000915050610897565b60b8811080610ec6575060c08110801590610ec6575060f881105b15610ed5576001915050610897565b60c0811015610ee95760b519019050610897565b60f519019050610897565b80516000908190811a6080811015610f0f5760019150611020565b60b8811015610f2457607e1981019150611020565b60c0811015610f9e57600060b78203600186019550806020036101000a865104915060018101820193505080831015610f98576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50611020565b60f8811015610fb35760be1981019150611020565b600060f78203600186019550806020036101000a86510491506001810182019350508083101561101e576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b80611031576106b4565b5b60208110611051578251825260209283019290910190601f1901611032565b915181516020939093036101000a6000190180199091169216919091179052565b80516000901580159061108757508151602110155b61109057600080fd5b600061109f8360200151610e91565b905080836000015110156110fa576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015610d8b57506020919091036101000a90049392505050565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff19841661116b5750601861118f565b6fffffffffffffffffffffffffffffffff19841661118b5750601061118f565b5060005b60208110156111c5578181815181106111a457fe5b01602001516001600160f81b031916156111bd576111c5565b60010161118f565b60008160200390506060816040519080825280601f01601f1916602001820160405280156111fa576020820181803683370190505b5080830196909652508452509192915050565b60608151600114801561123f5750607f60f81b8260008151811061122d57fe5b01602001516001600160f81b03191611155b1561124b575080610897565b610dae61125d8351608060ff166112dc565b835b6060806040519050835180825260208201818101602087015b81831015611290578051835260209283019201611278565b50855184518101855292509050808201602086015b818310156112bd5780518352602092830192016112a5565b508651929092011591909101601f01601f191660405250905092915050565b606068010000000000000000831061132c576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b604080516001808252818301909252606091602082018180368337019050509050603784116113865782840160f81b8160008151811061136857fe5b60200101906001600160f81b031916908160001a9053509050610dae565b606061139185611127565b90508381510160370160f81b826000815181106113aa57fe5b60200101906001600160f81b031916908160001a9053506113cb828261125f565b95945050505050565b6040518060600160405280606081526020016060815260200160006001600160a01b031681525090565b604051806040016040528061141161141e565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e74726163747265636569766520756e6578706563746564206661696c2061636b207061636b616765a164736f6c6343000604000a" + }, + "0x0000000000000000000000000000000000001008": { + "balance": "0x0", + "code": "0x6080604052600436106103975760003560e01c80637942fd05116101dc578063b795031711610102578063d9e6dae9116100a0578063fa9e91591161006f578063fa9e915914610d78578063fc3e5908146105f9578063fd6a687914610d8d578063fe3a2af514610da257610397565b8063d9e6dae914610727578063dc927faf14610d39578063e605bca014610d4e578063f9a2bbc714610d6357610397565b8063c8509d81116100dc578063c8509d8114610c1f578063c8e704a4146105f9578063d117a11014610ca4578063d7109ce614610d2457610397565b8063b795031714610766578063bd32d3f914610520578063c81b166214610c0a57610397565b806396713da91161017a578063a78abc1611610149578063a78abc1614610b15578063ab51bb9614610b2a578063ab67a48514610766578063ac43175114610b3f57610397565b806396713da914610ac15780639a854bbd14610ad65780639dc0926214610aeb578063a1a11bf514610b0057610397565b8063831d65d1116101b6578063831d65d1146109f0578063859180fb1461071257806394553a4e14610a7757806395b9ad2614610aac57610397565b80637942fd05146109c65780637d078e13146105355780637ec816dd146109db57610397565b8063493279b1116102c157806366dea52a1161025f578063718a8aa81161022e578063718a8aa81461084457806372c4e0861461085957806375d47a0a146108fd57806377d9dae81461091257610397565b806366dea52a146107665780636b3f13071461077b5780636e47b4821461082f57806370fd5bad1461076657610397565b806351e806721161029b57806351e806721461073c5780635d499b1b146107515780635f558f8614610766578063613684751461072757610397565b8063493279b1146106e65780634bc81c00146107125780634bf6c8821461072757610397565b80632d89ac3211610339578063401809f911610308578063401809f9146105f957806343756e5c1461060e578063445fcefe14610623578063487c88ac1461053557610397565b80632d89ac32146105355780632e02d7761461059357806337e6ecda146105c65780633dffc3871461053557610397565b80631182b875116103755780631182b875146104265780631f91600b1461052057806323996b531461053557806325c751b71461054a57610397565b80630bee7a671461039c5780630e2374a5146103ca5780630f212b1b146103fb575b600080fd5b3480156103a857600080fd5b506103b1610db7565b6040805163ffffffff9092168252519081900360200190f35b3480156103d657600080fd5b506103df610dbc565b604080516001600160a01b039092168252519081900360200190f35b34801561040757600080fd5b50610410610dc2565b6040805160ff9092168252519081900360200190f35b34801561043257600080fd5b506104ab6004803603604081101561044957600080fd5b60ff8235169190810190604081016020820135600160201b81111561046d57600080fd5b82018360208201111561047f57600080fd5b803590602001918460018302840111600160201b831117156104a057600080fd5b509092509050610dc7565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104e55781810151838201526020016104cd565b50505050905090810190601f1680156105125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561052c57600080fd5b50610410610ee1565b34801561054157600080fd5b50610410610ee6565b61057f6004803603604081101561056057600080fd5b5080356001600160a01b031690602001356001600160401b0316610eeb565b604080519115158252519081900360200190f35b34801561059f57600080fd5b5061057f600480360360208110156105b657600080fd5b50356001600160a01b0316611437565b3480156105d257600080fd5b5061057f600480360360208110156105e957600080fd5b50356001600160a01b031661144c565b34801561060557600080fd5b50610410611461565b34801561061a57600080fd5b506103df611466565b34801561062f57600080fd5b506106d46004803603602081101561064657600080fd5b810190602081018135600160201b81111561066057600080fd5b82018360208201111561067257600080fd5b803590602001918460018302840111600160201b8311171561069357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061146c945050505050565b60408051918252519081900360200190f35b3480156106f257600080fd5b506106fb6115ca565b6040805161ffff9092168252519081900360200190f35b34801561071e57600080fd5b506104106115d0565b34801561073357600080fd5b506104106115d5565b34801561074857600080fd5b506103df6115da565b34801561075d57600080fd5b506106d46115e0565b34801561077257600080fd5b506104106115e9565b61057f6004803603604081101561079157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156107bb57600080fd5b8201836020820111156107cd57600080fd5b803590602001918460018302840111600160201b831117156107ee57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506115ee945050505050565b34801561083b57600080fd5b506103df611ec4565b34801561085057600080fd5b50610410611eca565b61057f6004803603602081101561086f57600080fd5b810190602081018135600160201b81111561088957600080fd5b82018360208201111561089b57600080fd5b803590602001918460018302840111600160201b831117156108bc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ecf945050505050565b34801561090957600080fd5b506103df61231b565b61057f6004803603604081101561092857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561095257600080fd5b82018360208201111561096457600080fd5b803590602001918460018302840111600160201b8311171561098557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612321945050505050565b3480156109d257600080fd5b50610410612827565b3480156109e757600080fd5b506106d461282c565b3480156109fc57600080fd5b50610a7560048036036040811015610a1357600080fd5b60ff8235169190810190604081016020820135600160201b811115610a3757600080fd5b820183602082011115610a4957600080fd5b803590602001918460018302840111600160201b83111715610a6a57600080fd5b509092509050612832565b005b61057f60048036036040811015610a8d57600080fd5b5080356001600160a01b031690602001356001600160401b0316612981565b348015610ab857600080fd5b50610410613378565b348015610acd57600080fd5b5061041061337d565b348015610ae257600080fd5b506106d4613382565b348015610af757600080fd5b506103df61338e565b348015610b0c57600080fd5b506103df613394565b348015610b2157600080fd5b5061057f61339a565b348015610b3657600080fd5b506103b16133a3565b348015610b4b57600080fd5b50610a7560048036036040811015610b6257600080fd5b810190602081018135600160201b811115610b7c57600080fd5b820183602082011115610b8e57600080fd5b803590602001918460018302840111600160201b83111715610baf57600080fd5b919390929091602081019035600160201b811115610bcc57600080fd5b820183602082011115610bde57600080fd5b803590602001918460018302840111600160201b83111715610bff57600080fd5b5090925090506133a8565b348015610c1657600080fd5b506103df61367d565b348015610c2b57600080fd5b50610a7560048036036040811015610c4257600080fd5b60ff8235169190810190604081016020820135600160201b811115610c6657600080fd5b820183602082011115610c7857600080fd5b803590602001918460018302840111600160201b83111715610c9957600080fd5b509092509050613683565b348015610cb057600080fd5b50610cce60048036036020811015610cc757600080fd5b5035613759565b6040805160ff988916815260208101979097526001600160a01b03909516868601526060860193909352608085019190915290931660a08301526001600160401b0390921660c082015290519081900360e00190f35b348015610d3057600080fd5b506106d46137b0565b348015610d4557600080fd5b506103df6137b5565b348015610d5a57600080fd5b506106d46137bb565b348015610d6f57600080fd5b506103df6137c1565b348015610d8457600080fd5b506106d46137c7565b348015610d9957600080fd5b506103df6137cd565b348015610dae57600080fd5b506104106133a3565b606481565b61200181565b600681565b60603361200014610e095760405162461bcd60e51b815260040180806020018281038252602f815260200180615bd5602f913960400191505060405180910390fd5b60ff841660011415610e5b57610e5483838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506137d392505050565b9050610eda565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605848484604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1506040805160008152602081019091525b9392505050565b600481565b600181565b6040805163bd46646160e01b81526001600160a01b0384166004820152905160009182916110049163bd466461916024808301926020929190829003018186803b158015610f3857600080fd5b505afa158015610f4c573d6000803e3d6000fd5b505050506040513d6020811015610f6257600080fd5b5051905080610fa4576040805162461bcd60e51b81526020600482015260096024820152681b9bdd08189bdd5b9960ba1b604482015290519081900360640190fd5b6001600160a01b03841660009081526003602052604090205460ff16611007576040805162461bcd60e51b81526020600482015260136024820152723737ba103137bab73210313c9036b4b93937b960691b604482015290519081900360640190fd5b60006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561104457600080fd5b505afa158015611058573d6000803e3d6000fd5b505050506040513d602081101561106e57600080fd5b505190506402540be40034061580156110995750600554611095908263ffffffff613a6316565b3410155b6110d45760405162461bcd60e51b8152600401808060200182810382526046815260200180615b616046913960600191505060405180910390fd5b42607801846001600160401b0316101580156110fe5750426201518001846001600160401b031611155b6111395760405162461bcd60e51b8152600401808060200182810382526038815260200180615a5e6038913960400191505060405180910390fd5b6000856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561117457600080fd5b505afa158015611188573d6000803e3d6000fd5b505050506040513d602081101561119e57600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0389169163313ce567916004808301926020929190829003018186803b1580156111e657600080fd5b505afa1580156111fa573d6000803e3d6000fd5b505050506040513d602081101561121057600080fd5b50519050677ce66c50e284000061122a8360ff8416613abd565b1115611276576040805162461bcd60e51b8152602060048201526016602482015275746f6f206c6172676520746f74616c20737570706c7960501b604482015290519081900360640190fd5b600554611004906108fc9061129290349063ffffffff613b4c16565b6040518115909202916000818181858888f193505050501580156112ba573d6000803e3d6000fd5b506112c36158b5565b6040518060c00160405280336001600160a01b03168152602001896001600160a01b031681526020018681526020018481526020016113126402540be400600554613b8e90919063ffffffff16565b81526001600160401b038916602090910152905061200063f7a251d7600561133984613bd0565b6113636402540be40061135760055434613b4c90919063ffffffff16565b9063ffffffff613b8e16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156113c15781810151838201526020016113a9565b50505050905090810190601f1680156113ee5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561140f57600080fd5b505af1158015611423573d6000803e3d6000fd5b505050506001955050505050505b92915050565b60036020526000908152604090205460ff1681565b60026020526000908152604090205460ff1681565b600381565b61100181565b602081015160009061147c6158ea565b50600081815260016020818152604092839020835160e081018552815460ff9081168252938201549281019290925260028101546001600160a01b031693820184905260038101546060830152600481015460808301526005015491821660a08201526101009091046001600160401b031660c082015290611503576000925050506115c5565b600081604001516001600160a01b03166370a082316110046040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561156157600080fd5b505afa158015611575573d6000803e3d6000fd5b505050506040513d602081101561158b57600080fd5b5051608083015160608401519192506000916115ac9163ffffffff613b4c16565b90506115be818363ffffffff613b4c16565b9450505050505b919050565b6102ca81565b600581565b600881565b61200081565b6402540be40081565b600281565b6001600160a01b03821660009081526002602052604081205460ff16156116465760405162461bcd60e51b815260040180806020018281038252602b815260200180615c04602b913960400191505060405180910390fd5b600061165183613d05565b905061165b6158ea565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c0830152611720576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b600061173d82608001518360600151613b4c90919063ffffffff16565b905081604001516001600160a01b0316866001600160a01b0316146117935760405162461bcd60e51b8152600401808060200182810382526045815260200180615acd6045913960600191505060405180910390fd5b336001600160a01b0316866001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b1580156117d657600080fd5b505afa1580156117ea573d6000803e3d6000fd5b505050506040513d602081101561180057600080fd5b50516001600160a01b0316146118475760405162461bcd60e51b815260040180806020018281038252602e815260200180615a30602e913960400191505060405180910390fd5b604080516370a0823160e01b8152611004600482015290516000916001600160a01b038916916370a0823191602480820192602092909190829003018186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d60208110156118bd57600080fd5b505160408051636eb1769f60e11b81523360048201523060248201529051919250839161194e9184916001600160a01b038c169163dd62ed3e916044808301926020929190829003018186803b15801561191657600080fd5b505afa15801561192a573d6000803e3d6000fd5b505050506040513d602081101561194057600080fd5b50519063ffffffff613a6316565b10156119a1576040805162461bcd60e51b815260206004820152601760248201527f616c6c6f77616e6365206973206e6f7420656e6f756768000000000000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b1580156119e357600080fd5b505afa1580156119f7573d6000803e3d6000fd5b505050506040513d6020811015611a0d57600080fd5b50519050808210801590611a2657506402540be4008206155b611a615760405162461bcd60e51b8152600401808060200182810382526037815260200180615a966037913960400191505060405180910390fd5b6000611a6d868b613d0c565b905063ffffffff8116611c6c576001600160a01b038a166323b872dd33611004611a9d898963ffffffff613b4c16565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015611b0557600080fd5b505af1158015611b19573d6000803e3d6000fd5b505050506040513d6020811015611b2f57600080fd5b5050602086015160408088015160a089015182516323bfccdb60e21b815260048101949094526001600160a01b03909116602484015260ff1660448301525161100491638eff336c91606480830192600092919082900301818387803b158015611b9857600080fd5b505af1158015611bac573d6000803e3d6000fd5b50505050896001600160a01b03167f78e7dd9aefcdbf795c4936a66f7dc6d41bb56637b54f561a6bf7829dca3348a88a8860600151886040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b83811015611c2b578181015183820152602001611c13565b50505050905090810190601f168015611c585780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2611d24565b896001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a1078a8360405180806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611ce8578181015183820152602001611cd0565b50505050905090810190601f168015611d155780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25b60008781526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055611d7e615926565b5060408051808201825263ffffffff831681526020810189905290516110049085156108fc029086906000818181858888f19350505050158015611dc6573d6000803e3d6000fd5b5061200063f7a251d76001611dda84614166565b611def886402540be40063ffffffff613b8e16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611e4d578181015183820152602001611e35565b50505050905090810190601f168015611e7a5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611e9b57600080fd5b505af1158015611eaf573d6000803e3d6000fd5b5060019e9d5050505050505050505050505050565b61100581565b601081565b600080611edb83613d05565b9050611ee56158ea565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c0830152611faa576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b428160c001516001600160401b03161061200b576040805162461bcd60e51b815260206004820152601b60248201527f62696e642072657175657374206973206e6f7420657870697265640000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561204d57600080fd5b505afa158015612061573d6000803e3d6000fd5b505050506040513d602081101561207757600080fd5b5051905080821080159061209057506402540be4008206155b6120cb5760405162461bcd60e51b8152600401808060200182810382526037815260200180615a966037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055612125615926565b50604080518082018252600181526020810186905290516110049084156108fc029085906000818181858888f19350505050158015612168573d6000803e3d6000fd5b5061200063f7a251d7600161217c84614166565b612191876402540be40063ffffffff613b8e16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156121ef5781810151838201526020016121d7565b50505050905090810190601f16801561221c5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561223d57600080fd5b505af1158015612251573d6000803e3d6000fd5b5050505083604001516001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600160405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b838110156122d35781810151838201526020016122bb565b50505050905090810190601f1680156123005780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25060019695505050505050565b61100881565b60008061232d83613d05565b90506123376158ea565b50600081815260016020818152604092839020835160e081018552815460ff90811682529382015492810183905260028201546001600160a01b03169481019490945260038101546060850152600481015460808501526005015491821660a08401526101009091046001600160401b031660c08301526123fc576040805162461bcd60e51b815260206004820152601a602482015279189a5b99081c995c5d595cdd08191bd95cdb89dd08195e1a5cdd60321b604482015290519081900360640190fd5b80604001516001600160a01b0316856001600160a01b0316146124505760405162461bcd60e51b8152600401808060200182810382526045815260200180615acd6045913960600191505060405180910390fd5b336001600160a01b0316856001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561249357600080fd5b505afa1580156124a7573d6000803e3d6000fd5b505050506040513d60208110156124bd57600080fd5b50516001600160a01b03161461251a576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c79206265703230206f776e65722063616e2072656a6563740000000000604482015290519081900360640190fd5b600034905060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561255c57600080fd5b505afa158015612570573d6000803e3d6000fd5b505050506040513d602081101561258657600080fd5b5051905080821080159061259f57506402540be4008206155b6125da5760405162461bcd60e51b8152600401808060200182810382526037815260200180615a966037913960400191505060405180910390fd5b60008481526001602081905260408220805460ff191681559081018290556002810180546001600160a01b0319169055600381018290556004810191909155600501805468ffffffffffffffffff19169055612634615926565b50604080518082018252600781526020810186905290516110049084156108fc029085906000818181858888f19350505050158015612677573d6000803e3d6000fd5b5061200063f7a251d7600161268b84614166565b6126a0876402540be40063ffffffff613b8e16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156126fe5781810151838201526020016126e6565b50505050905090810190601f16801561272b5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561274c57600080fd5b505af1158015612760573d6000803e3d6000fd5b50505050876001600160a01b03167f831c0ef4d93bda3bce08b69ae3f29ef1a6e052b833200988554158494405a10788600760405180806020018360ff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b838110156127de5781810151838201526020016127c6565b50505050905090810190601f16801561280b5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2506001979650505050505050565b600b81565b60045481565b33612000146128725760405162461bcd60e51b815260040180806020018281038252602f815260200180615bd5602f913960400191505060405180910390fd5b60ff8316600414156128c2576128bd82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506141dc92505050565b61297c565b60ff83166005141561290d576128bd82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061448992505050565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051808460ff1660ff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15b505050565b6040805163bd46646160e01b81526001600160a01b0384166004820152905160009182916110049163bd466461916024808301926020929190829003018186803b1580156129ce57600080fd5b505afa1580156129e2573d6000803e3d6000fd5b505050506040513d60208110156129f857600080fd5b505114612a3c576040805162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48189bdd5b99609a1b604482015290519081900360640190fd5b6001600160a01b03831660009081526002602052604090205460ff1615612a9b576040805162461bcd60e51b815260206004820152600e60248201526d6d6972726f722070656e64696e6760901b604482015290519081900360640190fd5b60006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b158015612ad857600080fd5b505afa158015612aec573d6000803e3d6000fd5b505050506040513d6020811015612b0257600080fd5b505190506402540be4003406158015612b2d5750600454612b29908263ffffffff613a6316565b3410155b612b685760405162461bcd60e51b815260040180806020018281038252604d8152602001806159e3604d913960600191505060405180910390fd5b42607801836001600160401b031610158015612b925750426201518001836001600160401b031611155b612bcd5760405162461bcd60e51b8152600401808060200182810382526038815260200180615a5e6038913960400191505060405180910390fd5b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612c0857600080fd5b505afa158015612c1c573d6000803e3d6000fd5b505050506040513d6020811015612c3257600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038816916318160ddd916004808301926020929190829003018186803b158015612c7a57600080fd5b505afa158015612c8e573d6000803e3d6000fd5b505050506040513d6020811015612ca457600080fd5b50519050677ce66c50e2840000612cbe8260ff8516613abd565b1115612d0a576040805162461bcd60e51b8152602060048201526016602482015275746f6f206c6172676520746f74616c20737570706c7960501b604482015290519081900360640190fd5b6060866001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015612d4557600080fd5b505afa158015612d59573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612d8257600080fd5b8101908080516040519392919084600160201b821115612da157600080fd5b908301906020820185811115612db657600080fd5b8251600160201b811182820188101715612dcf57600080fd5b82525081516020918201929091019080838360005b83811015612dfc578181015183820152602001612de4565b50505050905090810190601f168015612e295780820380516001836020036101000a031916815260200191505b50604052505050905060608190506001815110158015612e4b57506020815111155b612e9c576040805162461bcd60e51b815260206004820152601d60248201527f6e616d65206c656e677468206d75737420626520696e205b312c33325d000000604482015290519081900360640190fd5b6060886001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015612ed757600080fd5b505afa158015612eeb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612f1457600080fd5b8101908080516040519392919084600160201b821115612f3357600080fd5b908301906020820185811115612f4857600080fd5b8251600160201b811182820188101715612f6157600080fd5b82525081516020918201929091019080838360005b83811015612f8e578181015183820152602001612f76565b50505050905090810190601f168015612fbb5780820380516001836020036101000a031916815260200191505b5060405250508151919250829160021180159150612fdb57508051600810155b61302c576040805162461bcd60e51b815260206004820152601e60248201527f73796d626f6c206c656e677468206d75737420626520696e205b322c385d0000604482015290519081900360640190fd5b60005b81518160ff16101561318057604160f81b828260ff168151811061304f57fe5b01602001516001600160f81b0319161080159061308d5750602d60f91b828260ff168151811061307b57fe5b01602001516001600160f81b03191611155b806130e55750606160f81b828260ff16815181106130a757fe5b01602001516001600160f81b031916108015906130e55750603d60f91b828260ff16815181106130d357fe5b01602001516001600160f81b03191611155b8061313d5750600360fc1b828260ff16815181106130ff57fe5b01602001516001600160f81b0319161080159061313d5750603960f81b828260ff168151811061312b57fe5b01602001516001600160f81b03191611155b6131785760405162461bcd60e51b815260040180806020018281038252602e815260200180615b12602e913960400191505060405180910390fd5b60010161302f565b50600454611004906108fc9061319d90349063ffffffff613b4c16565b6040518115909202916000818181858888f193505050501580156131c5573d6000803e3d6000fd5b506001600160a01b038a166000908152600260209081526040909120805460ff1916600117905584810151908301516131fc61593d565b604051806101000160405280336001600160a01b031681526020018e6001600160a01b031681526020018481526020018381526020018981526020018a60ff16815260200161325b6402540be400600454613b8e90919063ffffffff16565b81526001600160401b038e16602090910152905061200063f7a251d7600461328284614654565b6132a06402540be40061135760045434613b4c90919063ffffffff16565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156132fe5781810151838201526020016132e6565b50505050905090810190601f16801561332b5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561334c57600080fd5b505af1158015613360573d6000803e3d6000fd5b5050505060019a505050505050505050505092915050565b600781565b600981565b677ce66c50e284000081565b61100781565b61100681565b60005460ff1681565b600081565b33611007146133e85760405162461bcd60e51b815260040180806020018281038252602e815260200180615ba7602e913960400191505060405180910390fd5b6020811461343d576040805162461bcd60e51b815260206004820152601860248201527f65787065637465642076616c7565206c656e6774682033320000000000000000604482015290519081900360640190fd5b606084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f880181900481028201810190925286815293945060609392508691508590819084018382808284376000920191909152505050506020830151909150686d6972726f7246656560b81b8114156135325760208201516402540be40081061561352a576040805162461bcd60e51b815260206004820152601a60248201527f6d6972726f72466565206d757374206265204e202a2031653130000000000000604482015290519081900360640190fd5b6004556135e8565b6673796e6346656560c81b8114156135ab5760208201516402540be4008106156135a3576040805162461bcd60e51b815260206004820152601860248201527f73796e63466565206d757374206265204e202a20316531300000000000000000604482015290519081900360640190fd5b6005556135e8565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a878787876040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050505050565b61100281565b33612000146136c35760405162461bcd60e51b815260040180806020018281038252602f815260200180615bd5602f913960400191505060405180910390fd5b60ff83166004141561370e576128bd82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506147c692505050565b60ff83166005141561290d576128bd82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061490592505050565b600160208190526000918252604090912080549181015460028201546003830154600484015460059094015460ff9586169593946001600160a01b039093169391929181169061010090046001600160401b031687565b604d81565b61100381565b60055481565b61100081565b61271081565b61100481565b60606137dd6158ea565b60006137e8846149ff565b915091508061383e576040805162461bcd60e51b815260206004820152601f60248201527f756e7265636f676e697a6564207472616e73666572496e207061636b61676500604482015290519081900360640190fd5b815160ff166138f1576020828101805160009081526001928390526040908190208551815460ff1990811660ff928316178355935194820194909455908501516002820180546001600160a01b0319166001600160a01b03909216919091179055606085015160038201556080850151600482015560a08501516005909101805460c08701519316919093161768ffffffffffffffff0019166101006001600160401b0390921691909102179055613a48565b815160ff16600114156139fb5760006110046001600160a01b03166359b9278984602001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561394a57600080fd5b505afa15801561395e573d6000803e3d6000fd5b505050506040513d602081101561397457600080fd5b505190506001600160a01b038116156139f55760208301516040805163b99328c560e01b815260048101929092526001600160a01b0383166024830152516110049163b99328c591604480830192600092919082900301818387803b1580156139dc57600080fd5b505af11580156139f0573d6000803e3d6000fd5b505050505b50613a48565b6040805162461bcd60e51b815260206004820152601960248201527f756e7265636f676e697a65642062696e64207061636b61676500000000000000604482015290519081900360640190fd5b60408051600080825260208201909252905b50949350505050565b600082820183811015610eda576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006008821115613b3557604d60071983011115613b17576040805162461bcd60e51b8152602060048201526012602482015271746f6f206c6172676520646563696d616c7360701b604482015290519081900360640190fd5b613b2e836007198401600a0a63ffffffff613b8e16565b9050611431565b610eda836008849003600a0a63ffffffff614b5016565b6000610eda83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614ba9565b6000610eda83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c40565b60408051600680825260e08201909252606091829190816020015b6060815260200190600190039081613beb5750508351909150613c16906001600160a01b0316614ca5565b81600081518110613c2357fe5b6020026020010181905250613c4483602001516001600160a01b0316614ca5565b81600181518110613c5157fe5b6020026020010181905250613c6c836040015160001c614cc8565b81600281518110613c7957fe5b6020026020010181905250613c918360600151614cc8565b81600381518110613c9e57fe5b6020026020010181905250613cb68360800151614cc8565b81600481518110613cc357fe5b6020026020010181905250613ce48360a001516001600160401b0316614cc8565b81600581518110613cf157fe5b6020026020010181905250610eda81614cdb565b6020015190565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015613d4857600080fd5b505afa158015613d5c573d6000803e3d6000fd5b505050506040513d6020811015613d7257600080fd5b5051604080516395d89b4160e01b8152905160ff90921692506060916001600160a01b038616916395d89b41916004808301926000929190829003018186803b158015613dbe57600080fd5b505afa158015613dd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613dfb57600080fd5b8101908080516040519392919084600160201b821115613e1a57600080fd5b908301906020820185811115613e2f57600080fd5b8251600160201b811182820188101715613e4857600080fd5b82525081516020918201929091019080838360005b83811015613e75578181015183820152602001613e5d565b50505050905090810190601f168015613ea25780820380516001836020036101000a031916815260200191505b5060408181526370a0823160e01b82526110046004830152519495506000946001600160a01b038a1694506370a08231935060248083019350602092829003018186803b158015613ef257600080fd5b505afa158015613f06573d6000803e3d6000fd5b505050506040513d6020811015613f1c57600080fd5b505160808701516060880151919250600091613f3d9163ffffffff613b4c16565b9050428760c001516001600160401b03161015613f6257506001935061143192505050565b613f70838860200151614d65565b613f8257506002935061143192505050565b80821115613f9857506003935061143192505050565b866060015187604001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613fda57600080fd5b505afa158015613fee573d6000803e3d6000fd5b505050506040513d602081101561400457600080fd5b50511461401957506004935061143192505050565b8660a0015160ff16841461403557506005935061143192505050565b602080880151604080516359b9278960e01b8152600481019290925251600092611004926359b927899260248083019392829003018186803b15801561407a57600080fd5b505afa15801561408e573d6000803e3d6000fd5b505050506040513d60208110156140a457600080fd5b50516001600160a01b031614158061414657506000801b6110046001600160a01b031663bd46646189604001516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561411757600080fd5b505afa15801561412b573d6000803e3d6000fd5b505050506040513d602081101561414157600080fd5b505114155b1561415957506006935061143192505050565b5060009695505050505050565b6040805160028082526060828101909352829190816020015b606081526020019060019003908161417f57505083519091506141a79063ffffffff16614cc8565b816000815181106141b457fe5b60200260200101819052506141cf836020015160001c614cc8565b81600181518110613cf157fe5b6141e46158b5565b60006141ef83614e4d565b915091508061423c576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b6020808301516001600160a01b03166000908152600290915260409020805460ff1916905560a082015160ff1661439d5760808201516040516110049180156108fc02916000818181858888f1935050505015801561429f573d6000803e3d6000fd5b506110046001600160a01b0316638eff336c8360600151846020015185604001516040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b031681526020018260ff1681526020019350505050600060405180830381600087803b15801561431957600080fd5b505af115801561432d573d6000803e3d6000fd5b50505050602082810180516001600160a01b03908116600090815260038452604090819020805460ff1916600117905591516060860151835190815292519116927f41787d7db08fc5907641ee8343379f28215727eb123d4b462099afab4300b036928290030190a25050614486565b815160808301516040516000926001600160a01b0316916127109184818181858888f193505050503d80600081146143f1576040519150601f19603f3d011682016040523d82523d6000602084013e6143f6565b606091505b50509050806144335760808301516040516110029180156108fc02916000818181858888f19350505050158015614431573d6000803e3d6000fd5b505b82602001516001600160a01b03167fefe400ad0042ebf81a245de9ae669616105e0ca9fc946352c085da0c2bc524e58460a00151604051808260ff1660ff16815260200191505060405180910390a25050505b50565b614491615981565b600061449c83614f5a565b91509150806144e9576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b606082015160ff166145695760408083015190516110049180156108fc02916000818181858888f19350505050158015614527573d6000803e3d6000fd5b5081602001516001600160a01b03167fbb7d3a9a559080d8281b0e4fb39dacbe2fdcafd5ef765e9a6ed871c9167dc60f60405160405180910390a25050614486565b81602001516001600160a01b03167ff1e25fa536da84053644fd788b1d6a27ea6edd1f3af80c7d36ca253c4c82c9c38360600151604051808260ff1660ff16815260200191505060405180910390a2815160408084015190516000926001600160a01b0316916127109184818181858888f193505050503d806000811461460c576040519150601f19603f3d011682016040523d82523d6000602084013e614611565b606091505b505090508061464e5760408084015190516110029180156108fc02916000818181858888f1935050505015801561464c573d6000803e3d6000fd5b505b50505050565b6040805160088082526101208201909252606091829190816020015b6060815260200190600190039081614670575050835190915061469b906001600160a01b0316614ca5565b816000815181106146a857fe5b60200260200101819052506146c983602001516001600160a01b0316614ca5565b816001815181106146d657fe5b60200260200101819052506146f1836040015160001c614cc8565b816002815181106146fe57fe5b6020026020010181905250614719836060015160001c614cc8565b8160038151811061472657fe5b602002602001018190525061473e8360800151614cc8565b8160048151811061474b57fe5b60200260200101819052506147668360a0015160ff16614cc8565b8160058151811061477357fe5b602002602001018190525061478b8360c00151614cc8565b8160068151811061479857fe5b60200260200101819052506147b98360e001516001600160401b0316614cc8565b81600781518110613cf157fe5b6147ce61593d565b60006147d983615026565b9150915080614826576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b6020808301516001600160a01b039081166000908152600290925260408220805460ff19169055835160c085015191169061271090614870906402540be40063ffffffff614b5016565b6040516000818181858888f193505050503d80600081146148ad576040519150601f19603f3d011682016040523d82523d6000602084013e6148b2565b606091505b505090508061464e5760c0830151611002906108fc906148dd906402540be40063ffffffff614b5016565b6040518115909202916000818181858888f1935050505015801561464c573d6000803e3d6000fd5b61490d6158b5565b600061491883615177565b9150915080614965576040805162461bcd60e51b8152602060048201526014602482015273756e7265636f676e697a6564207061636b61676560601b604482015290519081900360640190fd5b815160808301516000916001600160a01b03169061271090614992906402540be40063ffffffff614b5016565b6040516000818181858888f193505050503d80600081146149cf576040519150601f19603f3d011682016040523d82523d6000602084013e6149d4565b606091505b505090508061464e576080830151611002906108fc906148dd906402540be40063ffffffff614b5016565b614a076158ea565b6000614a116158ea565b614a196159a8565b614a2a614a2586615287565b6152ac565b90506000805b614a39836152f6565b15614b435780614a5e57614a54614a4f84615317565b615365565b60ff168452614b3b565b8060011415614a7d57614a73614a4f84615317565b6020850152614b3b565b8060021415614aaa57614a97614a9284615317565b61541a565b6001600160a01b03166040850152614b3b565b8060031415614ac957614abf614a4f84615317565b6060850152614b3b565b8060041415614ae857614ade614a4f84615317565b6080850152614b3b565b8060051415614b0a57614afd614a4f84615317565b60ff1660a0850152614b3b565b8060061415614b3657614b1f614a4f84615317565b6001600160401b031660c085015260019150614b3b565b614b43565b600101614a30565b5091935090915050915091565b600082614b5f57506000611431565b82820282848281614b6c57fe5b0414610eda5760405162461bcd60e51b8152600401808060200182810382526021815260200180615b406021913960400191505060405180910390fd5b60008184841115614c385760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614bfd578181015183820152602001614be5565b50505050905090810190601f168015614c2a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183614c8f5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614bfd578181015183820152602001614be5565b506000838581614c9b57fe5b0495945050505050565b60408051600560a21b8318601482015260348101909152606090610eda81615434565b6060611431614cd68361548a565b615434565b6060815160001415614cfc57506040805160008152602081019091526115c5565b606082600081518110614d0b57fe5b602002602001015190506000600190505b8351811015614d4c57614d4282858381518110614d3557fe5b6020026020010151615570565b9150600101614d1c565b50610eda614d5f825160c060ff166155ed565b82615570565b8151600090839060081080614d7b575080516002115b15614d8a576000915050611431565b60408051602080825281830190925260609160208201818036833701905050905083602082015280825181518110614dbe57fe5b6020910101516001600160f81b031916602d60f81b14614de357600092505050611431565b600160005b8351811015614e4357828181518110614dfd57fe5b602001015160f81c60f81b6001600160f81b031916848281518110614e1e57fe5b01602001516001600160f81b03191614614e3b5760009150614e43565b600101614de8565b5095945050505050565b614e556158b5565b6000614e5f6158b5565b614e676159a8565b614e73614a2586615287565b90506000805b614e82836152f6565b15614b435780614ea857614e98614a9284615317565b6001600160a01b03168452614f52565b8060011415614ed057614ebd614a9284615317565b6001600160a01b03166020850152614f52565b8060021415614ef257614ee5614a4f84615317565b60ff166040850152614f52565b8060031415614f1157614f07614a4f84615317565b6060850152614f52565b8060041415614f3057614f26614a4f84615317565b6080850152614f52565b8060051415614b3657614f45614a4f84615317565b60ff1660a0850152600191505b600101614e79565b614f62615981565b6000614f6c615981565b614f746159a8565b614f80614a2586615287565b90506000805b614f8f836152f6565b15614b435780614fb557614fa5614a9284615317565b6001600160a01b0316845261501e565b8060011415614fdd57614fca614a9284615317565b6001600160a01b0316602085015261501e565b8060021415614ffc57614ff2614a4f84615317565b604085015261501e565b8060031415614b3657615011614a4f84615317565b60ff166060850152600191505b600101614f86565b61502e61593d565b600061503861593d565b6150406159a8565b61504c614a2586615287565b90506000805b61505b836152f6565b15614b43578061508157615071614a9284615317565b6001600160a01b0316845261516f565b80600114156150a957615096614a9284615317565b6001600160a01b0316602085015261516f565b80600214156150c8576150be614a4f84615317565b604085015261516f565b80600314156150e7576150dd614a4f84615317565b606085015261516f565b8060041415615106576150fc614a4f84615317565b608085015261516f565b80600514156151285761511b614a4f84615317565b60ff1660a085015261516f565b80600614156151475761513d614a4f84615317565b60c085015261516f565b8060071415614b365761515c614a4f84615317565b6001600160401b031660e0850152600191505b600101615052565b61517f6158b5565b60006151896158b5565b6151916159a8565b61519d614a2586615287565b90506000805b6151ac836152f6565b15614b4357806151d2576151c2614a9284615317565b6001600160a01b0316845261527f565b80600114156151fa576151e7614a9284615317565b6001600160a01b0316602085015261527f565b80600214156152195761520f614a4f84615317565b604085015261527f565b80600314156152385761522e614a4f84615317565b606085015261527f565b80600414156152575761524d614a4f84615317565b608085015261527f565b8060051415614b365761526c614a4f84615317565b6001600160401b031660a0850152600191505b6001016151a3565b61528f6159c8565b506040805180820190915281518152602082810190820152919050565b6152b46159a8565b6152bd826156e5565b6152c657600080fd5b60006152d5836020015161571f565b60208085015160408051808201909152868152920190820152915050919050565b60006153006159c8565b505080518051602091820151919092015191011190565b61531f6159c8565b615328826152f6565b61533157600080fd5b6020820151600061534182615782565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061537a57508151602110155b61538357600080fd5b6000615392836020015161571f565b905080836000015110156153ed576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b825160208085015183018051928490039291831015613a5a57506020919091036101000a90049392505050565b805160009060151461542b57600080fd5b61143182615365565b6060815160011480156154665750607f60f81b8260008151811061545457fe5b01602001516001600160f81b03191611155b156154725750806115c5565b6114316154848351608060ff166155ed565b83615570565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166154ce575060186154f2565b6fffffffffffffffffffffffffffffffff1984166154ee575060106154f2565b5060005b60208110156155285781818151811061550757fe5b01602001516001600160f81b0319161561552057615528565b6001016154f2565b60008160200390506060816040519080825280601f01601f19166020018201604052801561555d576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b818310156155a1578051835260209283019201615589565b50855184518101855292509050808201602086015b818310156155ce5780518352602092830192016155b6565b508651929092011591909101601f01601f191660405250905092915050565b606068010000000000000000831061563d576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b604080516001808252818301909252606091602082018180368337019050509050603784116156975782840160f81b8160008151811061567957fe5b60200101906001600160f81b031916908160001a9053509050611431565b60606156a28561548a565b90508381510160370160f81b826000815181106156bb57fe5b60200101906001600160f81b031916908160001a9053506156dc8282615570565b95945050505050565b80516000906156f6575060006115c5565b6020820151805160001a9060c0821015615715576000925050506115c5565b5060019392505050565b8051600090811a60808110156157395760009150506115c5565b60b8811080615754575060c08110801590615754575060f881105b156157635760019150506115c5565b60c08110156157775760b5190190506115c5565b60f5190190506115c5565b80516000908190811a608081101561579d57600191506158ae565b60b88110156157b257607e19810191506158ae565b60c081101561582c57600060b78203600186019550806020036101000a865104915060018101820193505080831015615826576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b506158ae565b60f88110156158415760be19810191506158ae565b600060f78203600186019550806020036101000a8651049150600181018201935050808310156158ac576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b60405180604001604052806159bb6159c8565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe6d73672e76616c7565206d757374206265204e202a203165313020616e642067726561746572207468616e2073756d206f66206d696e6952656c617946656520616e64206d6972726f724665656f6e6c79206265703230206f776e65722063616e20617070726f766520746869732062696e64207265717565737465787069726554696d65206d7573742062652074776f206d696e75746573206c6174657220616e64206f6e6520646179206561726c69657272656c6179466565206d757374206265204e202a203165313020616e642067726561746572207468616e206d696e6952656c6179466565636f6e74616374206164647265737320646f65736e277420657175616c20746f2074686520636f6e7472616374206164647265737320696e2062696e64207265717565737473796d626f6c2073686f756c64206f6e6c7920636f6e7461696e20616c70686162657420616e64206e756d626572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776d73672e76616c7565206d757374206265204e202a203165313020616e64206e6f206c6573732073756d206f66206d696e6952656c617946656520616e642073796e63466565746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e7472616374746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e747261637474686520626570323020746f6b656e20697320696e206d6972726f722070656e64696e6720737461747573a164736f6c6343000604000a" + }, + "0x0000000000000000000000000000000000002000": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106103995760003560e01c8063718a8aa8116101e9578063c27cdcfb1161010f578063dc927faf116100ad578063f7a251d71161007c578063f7a251d714610b2f578063f9a2bbc714610ba7578063fc3e590814610baf578063fd6a687914610bb757610399565b8063dc927faf14610af7578063e1c7392a14610aff578063e3b0480514610b07578063e6400bbe14610b2757610399565b8063ccc108d7116100e9578063ccc108d714610ab0578063d31f968d14610ab8578063d76a867514610ae7578063dc40433114610aef57610399565b8063c27cdcfb14610a80578063c780e9de14610aa0578063c81b166214610aa857610399565b80638cc8f56111610187578063a78abc1611610156578063a78abc16146109b2578063ab51bb96146109ba578063ac431751146109c2578063b0355f5b1461078157610399565b80638cc8f5611461088757806396713da91461099a5780639dc09262146109a2578063a1a11bf5146109aa57610399565b806375d47a0a116101c357806375d47a0a146108a75780637942fd05146108af57806384013b6a146108b7578063863fe4ab1461099257610399565b8063718a8aa81461088f578063719482d51461089757806374f079b81461089f57610399565b8063422f9050116102ce57806363e1394e1161026c5780636de380bd1161023b5780636de380bd146108575780636e47a51a1461085f5780636e47b4821461087f57806370fd5bad1461088757610399565b806363e1394e146107ff5780636a3cb34d146108075780636bacff2c1461080f5780636c46aa681461080757610399565b80634bf6c882116102a85780634bf6c882146107b957806351e80672146107c15780635692ddd3146107c95780635f832177146107d157610399565b8063422f90501461078957806343756e5c146107a9578063493279b1146107b157610399565b8063299b533d1161033b578063308325f411610315578063308325f4146106155780633a648b151461061d5780633bdc47a6146106595780633dffc3871461078157610399565b8063299b533d146105a35780632af6f399146105d75780632ff32aea146105f457610399565b806314b3023b1161037757806314b3023b146104015780631d1309351461041b5780631e275ae11461043757806322556cdc1461059b57610399565b806305e682581461039e5780630bee7a67146103bc5780630e2374a5146103dd575b600080fd5b6103a6610bbf565b6040805160ff9092168252519081900360200190f35b6103c4610bc4565b6040805163ffffffff9092168252519081900360200190f35b6103e5610bc9565b604080516001600160a01b039092168252519081900360200190f35b610409610bcf565b60408051918252519081900360200190f35b610423610bd5565b604080519115158252519081900360200190f35b610599600480360361010081101561044e57600080fd5b81018160a081016080820135600160201b81111561046b57600080fd5b82018360208201111561047d57600080fd5b803590602001918460018302840111600160201b8311171561049e57600080fd5b919390929091602081019035600160201b8111156104bb57600080fd5b8201836020820111156104cd57600080fd5b803590602001918460018302840111600160201b831117156104ee57600080fd5b919390929091602081019035600160201b81111561050b57600080fd5b82018360208201111561051d57600080fd5b803590602001918460018302840111600160201b8311171561053e57600080fd5b919390929091602081019035600160201b81111561055b57600080fd5b82018360208201111561056d57600080fd5b803590602001918460018302840111600160201b8311171561058e57600080fd5b509092509050610bde565b005b6104096112c2565b6105c0600480360360208110156105b957600080fd5b50356112c7565b6040805161ffff9092168252519081900360200190f35b610423600480360360208110156105ed57600080fd5b50356112dd565b6105fc6112f2565b60408051600792830b90920b8252519081900360200190f35b6104096112fb565b61063d6004803603602081101561063357600080fd5b503560ff16611301565b604080516001600160401b039092168252519081900360200190f35b61070c6004803603606081101561066f57600080fd5b60ff82351691602081013591810190606081016040820135600160201b81111561069857600080fd5b8201836020820111156106aa57600080fd5b803590602001918460018302840111600160201b831117156106cb57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061131c945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561074657818101518382015260200161072e565b50505050905090810190601f1680156107735780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103a6611392565b6104236004803603602081101561079f57600080fd5b503560ff16611397565b6103e56113ac565b6105c06113b2565b6103a66113b8565b6103e56113bd565b6104096113c3565b610599600480360360408110156107e757600080fd5b506001600160a01b03813581169160200135166113f3565b610409611653565b6105c061167b565b61082c6004803603602081101561082557600080fd5b5035611680565b6040805161ffff90941684526001600160801b03909216602084015282820152519081900360600190f35b6104096116af565b6103e56004803603602081101561087557600080fd5b503560ff166116d6565b6103e56116f1565b6103a661167b565b6103a66116f7565b6105c0611392565b6104096116fc565b6103e5611702565b6103a6611708565b610599600480360360a08110156108cd57600080fd5b810190602081018135600160201b8111156108e757600080fd5b8201836020820111156108f957600080fd5b803590602001918460018302840111600160201b8311171561091a57600080fd5b919390929091602081019035600160201b81111561093757600080fd5b82018360208201111561094957600080fd5b803590602001918460018302840111600160201b8311171561096a57600080fd5b919350915080356001600160401b03908116916020810135909116906040013560ff1661170d565b6104096129c7565b6103a66129cf565b6103e56129d4565b6103e56129da565b6104236129e0565b6103c4610bbf565b610599600480360360408110156109d857600080fd5b810190602081018135600160201b8111156109f257600080fd5b820183602082011115610a0457600080fd5b803590602001918460018302840111600160201b83111715610a2557600080fd5b919390929091602081019035600160201b811115610a4257600080fd5b820183602082011115610a5457600080fd5b803590602001918460018302840111600160201b83111715610a7557600080fd5b5090925090506129e9565b61063d60048036036020811015610a9657600080fd5b503560ff166134ad565b6104096134c8565b6103e56134ec565b6105996134f2565b61042360048036036040811015610ace57600080fd5b5080356001600160a01b0316906020013560ff16613746565b61070c613766565b610409613785565b6103e561378b565b610599613791565b61063d60048036036020811015610b1d57600080fd5b503560ff16613b48565b610599613b63565b61059960048036036060811015610b4557600080fd5b60ff8235169190810190604081016020820135600160201b811115610b6957600080fd5b820183602082011115610b7b57600080fd5b803590602001918460018302840111600160201b83111715610b9c57600080fd5b919350915035613d82565b6103e5613ec5565b6103a6613ecb565b6103e5613ed0565b600081565b606481565b61200181565b60015481565b600b5460ff1681565b60005460ff16610c23576040805162461bcd60e51b815260206004820152601960248201526000805160206149b4833981519152604482015290519081900360640190fd5b604080516337d7f9c160e21b81526001600160401b038b35166004820181905291516110039163df5fe704916024808301926020929190829003018186803b158015610c6e57600080fd5b505afa158015610c82573d6000803e3d6000fd5b505050506040513d6020811015610c9857600080fd5b5051610cd55760405162461bcd60e51b81526004018080602001828103825260238152602001806149d46023913960400191505060405180910390fd5b604080516337d7f9c160e21b815260208c8101356001600160401b03166004830181905292516110039263df5fe704926024808301939192829003018186803b158015610d2157600080fd5b505afa158015610d35573d6000803e3d6000fd5b505050506040513d6020811015610d4b57600080fd5b5051610d885760405162461bcd60e51b81526004018080602001828103825260238152602001806149d46023913960400191505060405180910390fd5b60608b013560ff81166000908152600560205260409020546001600160401b03909116906001600160a01b0316610e01576040805162461bcd60e51b815260206004820152601860248201527718da185b9b995b081a5cc81b9bdd081cdd5c1c1bdc9d195960421b604482015290519081900360640190fd5b600b5460ff1615610e45576040805162461bcd60e51b81526020600482015260096024820152681cdd5cdc195b99195960ba1b604482015290519081900360640190fd5b8888604051808383808284376040519201829003822094508f93508e9250819050838380828437808301925050509250505060405180910390201415610ec1576040805162461bcd60e51b815260206004820152600c60248201526b1cd85b59481c185e5b1bd85960a21b604482015290519081900360640190fd5b60606001600160401b0360408e01358116908e83013516610ee28282613ed6565b80516020808301919091206000818152600e9092526040909120549194509060ff1615610f4b576040805162461bcd60e51b8152602060048201526012602482015271185b1c9958591e4818da185b1b195b99d95960721b604482015290519081900360640190fd5b6000908152600e60205260408120805460ff191660011790558f8160200201356001600160401b0316905060608f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905060608c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506040805163cba510a960e01b81526001600160401b038a16600482015290519596509094611003945063cba510a9935060248083019350602092829003018186803b15801561104157600080fd5b505afa158015611055573d6000803e3d6000fd5b505050506040513d602081101561106b57600080fd5b505160408051808201909152600381526269626360e81b6020820152909150611098908290898686613f1e565b6110e1576040805162461bcd60e51b81526020600482015260156024820152740696e76616c6964206d65726b6c652070726f6f663605c1b604482015290519081900360640190fd5b5050505060008f6001600481106110f457fe5b60200201356001600160401b0316905060608d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815293945060609392508d91508c908190840183828082843760009201829052506040805163cba510a960e01b81526001600160401b038a16600482015290519596509094611003945063cba510a9935060248083019350602092829003018186803b1580156111c057600080fd5b505afa1580156111d4573d6000803e3d6000fd5b505050506040513d60208110156111ea57600080fd5b505160408051808201909152600381526269626360e81b6020820152909150611217908290898686613f1e565b611260576040805162461bcd60e51b8152602060048201526015602482015274696e76616c6964206d65726b6c652070726f6f663160581b604482015290519081900360640190fd5b5050505061126c61401b565b604080516001600160401b038416815260ff83166020820152815133927f039eb91179ffd7d3b6e97f8ea106e748e827f910b872375dbc9c14a362319c3c928290030190a2505050505050505050505050505050565b603281565b600d6020526000908152604090205461ffff1681565b600e6020526000908152604090205460ff1681565b60045460070b81565b60025481565b600a602052600090815260409020546001600160401b031681565b60606000825160210190506060816040519080825280601f01601f191660200182016040528015611354576020820181803683370190505b506021810186905260018101879052828152905060418101600061137786614099565b509050611386818388516140a3565b50909695505050505050565b600181565b60096020526000908152604090205460ff1681565b61100181565b6102ca81565b600881565b61200081565b604080517710d05390d15317d514905394d1915497d41493d413d4d05360421b8152905190819003601801902081565b60005460ff16611438576040805162461bcd60e51b815260206004820152601960248201526000805160206149b4833981519152604482015290519081900360640190fd5b6040805163569e4ed360e11b815233600482015290516000916110009163ad3c9da691602480820192602092909190829003018186803b15801561147b57600080fd5b505afa15801561148f573d6000803e3d6000fd5b505050506040513d60208110156114a557600080fd5b505160408051633d42651560e11b8152905191925060009161100091637a84ca2a916004808301926020929190829003018186803b1580156114e657600080fd5b505afa1580156114fa573d6000803e3d6000fd5b505050506040513d602081101561151057600080fd5b505190508061151d575060155b60008211801561152d5750808211155b61156c576040805162461bcd60e51b815260206004820152600b60248201526a1b9bdd0818d8589a5b995d60aa1b604482015290519081900360640190fd5b604080516001600160a01b038087166020808401919091529086168284015282518083038401815260608301808552815191909201207710d05390d15317d514905394d1915497d41493d413d4d05360421b90915291519081900360780190206000906115d990836140e4565b9050801561164b5760408051630911a2c160e11b81526001600160a01b03888116600483015287166024820152905161100491631223458291604480830192600092919082900301818387803b15801561163257600080fd5b505af1158015611646573d6000803e3d6000fd5b505050505b505050505050565b604080516f14d554d411539117d41493d413d4d05360821b8152905190819003601001902081565b600281565b600c602052600090815260409020805460019091015461ffff8216916201000090046001600160801b03169083565b604080516e149153d4115397d41493d413d4d053608a1b8152905190819003600f01902081565b6005602052600090815260409020546001600160a01b031681565b61100581565b601081565b60035481565b61100881565b600b81565b60005460ff16611752576040805162461bcd60e51b815260206004820152601960248201526000805160206149b4833981519152604482015290519081900360640190fd5b60408051630a83aaa960e31b815233600482015290516110069163541d5548916024808301926020929190829003018186803b15801561179157600080fd5b505afa1580156117a5573d6000803e3d6000fd5b505050506040513d60208110156117bb57600080fd5b505161180e576040805162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604482015290519081900360640190fd5b60ff8116600090815260086020526040902054829082906001600160401b03908116908316811461187e576040805162461bcd60e51b815260206004820152601560248201527439b2b8bab2b731b2903737ba1034b71037b93232b960591b604482015290519081900360640190fd5b60ff8216600090815260086020908152604091829020805467ffffffffffffffff1916600185016001600160401b039081169190911790915582516337d7f9c160e21b81529089166004820152915188926110039263df5fe70492602480840193829003018186803b1580156118f357600080fd5b505afa158015611907573d6000803e3d6000fd5b505050506040513d602081101561191d57600080fd5b505161195a5760405162461bcd60e51b81526004018080602001828103825260238152602001806149d46023913960400191505060405180910390fd5b60ff851660009081526005602052604090205485906001600160a01b03166119c4576040805162461bcd60e51b815260206004820152601860248201527718da185b9b995b081a5cc81b9bdd081cdd5c1c1bdc9d195960421b604482015290519081900360640190fd5b60ff86166000908152600a6020526040902054889087906001600160401b039081169083161015611a2d576040805162461bcd60e51b815260206004820152600e60248201526d3a37b79037b632103432b0b232b960911b604482015290519081900360640190fd5b60ff81166000908152600a60205260409020546001600160401b03838116911614611a7f5760ff81166000908152600a60205260409020805467ffffffffffffffff19166001600160401b0384161790555b600b5460ff1615611ac3576040805162461bcd60e51b81526020600482015260096024820152681cdd5cdc195b99195960ba1b604482015290519081900360640190fd5b60608e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905060608d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050611c076110036001600160a01b031663cba510a98e6040518263ffffffff1660e01b815260040180826001600160401b03166001600160401b0316815260200191505060206040518083038186803b158015611bb057600080fd5b505afa158015611bc4573d6000803e3d6000fd5b505050506040513d6020811015611bda57600080fd5b505160408051808201909152600381526269626360e81b6020820152611c008e8e613ed6565b8585613f1e565b611c4f576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015290519081900360640190fd5b60408051631bb5062960e31b81526001600160401b038e16600482015290516000916110039163dda8314891602480820192602092909190829003018186803b158015611c9b57600080fd5b505afa158015611caf573d6000803e3d6000fd5b505050506040513d6020811015611cc557600080fd5b505190508b8b600080806060611cda896143c9565b935093509350935083611d9c578460ff16866001600160401b03167ff7b2e42d694eb1100184aae86d4245d9e46966100b1dc7e723275b98326854ac8b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611d54578181015183820152602001611d3c565b50505050905090810190601f168015611d815780820380516001836020036101000a031916815260200191505b509250505060405180910390a35050505050505050506129b7565b6040805160ff85811682529151918716916001600160401b038916917f36afdaf439a8f43fe72135135d804ae620b37a474f0943b5b85f6788312cad40919081900360200190a360ff83166123215760ff85166000818152600560209081526040808320548151631182b87560e01b815260048101958652602481019283528651604482015286516001600160a01b03909216958695631182b875958d958a9593949093606490910192918601918190849084905b83811015611e69578181015183820152602001611e51565b50505050905090810190601f168015611e965780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015611eb657600080fd5b505af1925050508015611f9a57506040513d6000823e601f3d908101601f191682016040526020811015611ee957600080fd5b8101908080516040519392919084600160201b821115611f0857600080fd5b908301906020820185811115611f1d57600080fd5b8251600160201b811182820188101715611f3657600080fd5b82525081516020918201929091019080838360005b83811015611f63578181015183820152602001611f4b565b50505050905090810190601f168015611f905780820380516001836020036101000a031916815260200191505b5060405250505060015b6122ac576040516000815260443d1015611fb657506000612051565b60046000803e60005160e01c6308c379a08114611fd7576000915050612051565b60043d036004833e81513d60248201116001600160401b038211171561200257600092505050612051565b80830180516001600160401b03811115612023576000945050505050612051565b8060208301013d860181111561204157600095505050505050612051565b601f01601f191660405250925050505b8061205c575061216e565b60ff8716600090815260076020526040812054612093916001600160401b0390911690899061208e906002908861131c565b614479565b60ff8716600090815260076020908152604080832080546001600160401b038082166001011667ffffffffffffffff19909116179055805182815284518184015284516001600160a01b038716947ff91a8f63e5b3e0e89e5f93e1915a7805f3c52d9a73b3c09769785c2c7bf87acf948794849390840192918601918190849084905b8381101561212e578181015183820152602001612116565b50505050905090810190601f16801561215b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2506122a7565b3d808015612198576040519150601f19603f3d011682016040523d82523d6000602084013e61219d565b606091505b5060ff87166000908152600760205260408120546121d0916001600160401b0390911690899061208e906002908861131c565b60ff8716600090815260076020908152604080832080546001600160401b038082166001011667ffffffffffffffff19909116179055805182815284518184015284516001600160a01b038716947f63ac299d6332d1cc4e61b81e59bc00c0ac7c798addadf33840f1307cd2977351948794849390840192918601918190849084905b8381101561226b578181015183820152602001612253565b50505050905090810190601f1680156122985780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505b61231b565b8051156123195760ff87166000908152600760205260408120546122e5916001600160401b0390911690899061208e906001908661131c565b60ff8716600090815260076020526040902080546001600160401b038082166001011667ffffffffffffffff199091161790555b505b506128ef565b60ff8316600114156125c55760ff8516600081815260056020908152604080832054815163831d65d160e01b815260048101958652602481019283528651604482015286516001600160a01b0390921695869563831d65d1958d958a9593949093606490910192918601918190849084905b838110156123ab578181015183820152602001612393565b50505050905090810190601f1680156123d85780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156123f857600080fd5b505af1925050508015612409575060015b61231b576040516000815260443d1015612425575060006124c0565b60046000803e60005160e01c6308c379a081146124465760009150506124c0565b60043d036004833e81513d60248201116001600160401b0382111715612471576000925050506124c0565b80830180516001600160401b038111156124925760009450505050506124c0565b8060208301013d86018111156124b0576000955050505050506124c0565b601f01601f191660405250925050505b806124cb5750612530565b60408051602080825283518183015283516001600160a01b038616937ff91a8f63e5b3e0e89e5f93e1915a7805f3c52d9a73b3c09769785c2c7bf87acf938693909283928301918501908083836000831561212e578181015183820152602001612116565b3d80801561255a576040519150601f19603f3d011682016040523d82523d6000602084013e61255f565b606091505b5060408051602080825283518183015283516001600160a01b038616937f63ac299d6332d1cc4e61b81e59bc00c0ac7c798addadf33840f1307cd2977351938693909283928301918501908083836000831561226b578181015183820152602001612253565b60ff8316600214156128ef5760ff8516600081815260056020908152604080832054815163c8509d8160e01b815260048101958652602481019283528651604482015286516001600160a01b0390921695869563c8509d81958d958a9593949093606490910192918601918190849084905b8381101561264f578181015183820152602001612637565b50505050905090810190601f16801561267c5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561269c57600080fd5b505af19250505080156126ad575060015b6128ed576040516000815260443d10156126c957506000612764565b60046000803e60005160e01c6308c379a081146126ea576000915050612764565b60043d036004833e81513d60248201116001600160401b038211171561271557600092505050612764565b80830180516001600160401b03811115612736576000945050505050612764565b8060208301013d860181111561275457600095505050505050612764565b601f01601f191660405250925050505b8061276f5750612818565b816001600160a01b03167ff91a8f63e5b3e0e89e5f93e1915a7805f3c52d9a73b3c09769785c2c7bf87acf826040518080602001828103825283818151815260200191508051906020019080838360005b838110156127d85781810151838201526020016127c0565b50505050905090810190601f1680156128055780820380516001836020036101000a031916815260200191505b509250505060405180910390a2506128ed565b3d808015612842576040519150601f19603f3d011682016040523d82523d6000602084013e612847565b606091505b50816001600160a01b03167f63ac299d6332d1cc4e61b81e59bc00c0ac7c798addadf33840f1307cd2977351826040518080602001828103825283818151815260200191508051906020019080838360005b838110156128b1578181015183820152602001612899565b50505050905090810190601f1680156128de5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505b505b60ff80861660009081526009602052604090205461100591636f93d2e6918a91339187911680612921575060ff881615155b604080516001600160e01b031960e088901b1681526001600160a01b039586166004820152939094166024840152604483019190915215156064820152905160848083019260209291908290030181600087803b15801561298157600080fd5b505af1158015612995573d6000803e3d6000fd5b505050506040513d60208110156129ab57600080fd5b50505050505050505050505b5050505050505050505050505050565b630102ca0081565b600981565b61100781565b61100681565b60005460ff1681565b3361100714612a295760405162461bcd60e51b815260040180806020018281038252602e81526020018061490a602e913960400191505060405180910390fd5b600b5460ff1615612a6d576040805162461bcd60e51b81526020600482015260096024820152681cdd5cdc195b99195960ba1b604482015290519081900360640190fd5b612ad684848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526012815271626174636853697a65466f724f7261636c6560701b602082015291506146149050565b15612b7157604080516020601f8401819004810282018101909252828152600091612b19918585808385018382808284376000920191909152506146fb92505050565b90506127108111158015612b2e5750600a8110155b612b695760405162461bcd60e51b81526004018080602001828103825260328152602001806149826032913960400191505060405180910390fd5b60015561341b565b612bda84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601281527118591913dc955c19185d1950da185b9b995b60721b602082015291506146149050565b15612d6257606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060169091149050612c5d5760405162461bcd60e51b815260040180806020018281038252605a815260200180614823605a913960600191505060405180910390fd5b60018101516002820151601683015160ff82161590612c7b81614700565b612ccc576040805162461bcd60e51b815260206004820152601960248201527f61646472657373206973206e6f74206120636f6e747261637400000000000000604482015290519081900360640190fd5b60ff8416600081815260056020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600683528184208585528352818420805460ff199081166001179091556009909352818420805490931687151517909255519092917f7e3b6af43092577ee20e60eaa1d9b114a7031305c895ee7dd3ffe17196d2e1e091a3505050505061341b565b612dcf84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526016815275195b98589b1953dc911a5cd8589b1950da185b9b995b60521b602082015291506146149050565b15612f0057606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060029091149050612e525760405162461bcd60e51b815260040180806020018281038252604a815260200180614938604a913960600191505060405180910390fd5b600181810151600283015160ff80831660009081526005602052604090205492939192908316909114906001600160a01b03168015612ef6576001600160a01b038116600090815260066020908152604080832060ff881680855290835292819020805460ff1916861515908117909155815190815290517fa3132e3f9819fbddc7f0ed6d38d7feef59aa95112090b7c592f5cb5bc4aa4adc929181900390910190a25b505050505061341b565b612f6484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c73757370656e6451756f72756d60981b602082015291506146149050565b156130995760028114612fa85760405162461bcd60e51b815260040180806020018281038252602d8152602001806148b1602d913960400191505060405180910390fd5b6000612feb600284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506146fb92505050565b905060008161ffff16118015613005575060648161ffff16105b61304f576040805162461bcd60e51b8152602060048201526016602482015275696e76616c69642073757370656e642071756f72756d60501b604482015290519081900360640190fd5b604080516f14d554d411539117d41493d413d4d05360821b815281519081900360100190206000908152600d60205220805461ffff90921661ffff1990921691909117905561341b565b6130fc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600c81526b72656f70656e51756f72756d60a01b602082015291506146149050565b1561322f57600281146131405760405162461bcd60e51b815260040180806020018281038252602c8152602001806148de602c913960400191505060405180910390fd5b6000613183600284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506146fb92505050565b905060008161ffff1611801561319d575060648161ffff16105b6131e6576040805162461bcd60e51b8152602060048201526015602482015274696e76616c69642072656f70656e2071756f72756d60581b604482015290519081900360640190fd5b604080516e149153d4115397d41493d413d4d053608a1b8152815190819003600f0190206000908152600d60205220805461ffff90921661ffff1990921691909117905561341b565b61329a84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601481527363616e63656c5472616e7366657251756f72756d60601b602082015291506146149050565b156133de57600281146132de5760405162461bcd60e51b815260040180806020018281038252603481526020018061487d6034913960400191505060405180910390fd5b6000613321600284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506146fb92505050565b905060008161ffff1611801561333b575060648161ffff16105b61338c576040805162461bcd60e51b815260206004820152601e60248201527f696e76616c69642063616e63656c207472616e736665722071756f72756d0000604482015290519081900360640190fd5b604080517710d05390d15317d514905394d1915497d41493d413d4d05360421b815281519081900360180190206000908152600d60205220805461ffff90921661ffff1990921691909117905561341b565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b6008602052600090815260409020546001600160401b031681565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081565b61100281565b60005460ff16613537576040805162461bcd60e51b815260206004820152601960248201526000805160206149b4833981519152604482015290519081900360640190fd5b6040805163569e4ed360e11b815233600482015290516000916110009163ad3c9da691602480820192602092909190829003018186803b15801561357a57600080fd5b505afa15801561358e573d6000803e3d6000fd5b505050506040513d60208110156135a457600080fd5b505160408051633d42651560e11b8152905191925060009161100091637a84ca2a916004808301926020929190829003018186803b1580156135e557600080fd5b505afa1580156135f9573d6000803e3d6000fd5b505050506040513d602081101561360f57600080fd5b505190508061361c575060155b60008211801561362c5750808211155b61366b576040805162461bcd60e51b815260206004820152600b60248201526a1b9bdd0818d8589a5b995d60aa1b604482015290519081900360640190fd5b600b5460ff166136b2576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081cdd5cdc195b991959609a1b604482015290519081900360640190fd5b604080516e149153d4115397d41493d413d4d053608a1b8152905190819003600f019020600090613703907fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4706140e4565b9050801561374157600b805460ff1916905560405133907f899fe8c37dc61708a3aaa99c4bf143346c1d1da69af79be9e8920c0a6785b75290600090a25b505050565b600660209081526000928352604080842090915290825290205460ff1681565b6040518060400160405280600381526020016269626360e81b81525081565b610e1081565b61100381565b60005460ff16156137e9576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e747261637420616c726561647920696e697400000000000000604482015290519081900360640190fd5b7f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b80546001600160a01b0319908116611008179091557f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36805460ff199081169091557fd8af288fc1c8680b4f4706064cf021e264efb6828fcaf7eb5ca36818eb365bcc8054821660019081179091557f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a805484166110049081179091557f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c38054841690557f72e4efa1513b071517c6c74dba31b5934a81aa83cddd400e7081df5529c9943680548416831790557fa9bc9a3a348c357ba16b37005d7e6b3236198c0e939f4af8c5f19b8deeb8ebc08054851690911790557fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e78054831690557f4e523af77f034e9810f1c94057f5e931fb3d16a51511a4c3add793617d18610580548316821790557ffb33122aa9f93cc639ebe80a7bc4784c11e6053dde89c6f4f7e268c6a623da1e805484166110001790557fc7694af312c4f286114180fd0ba6a52461fcee8a381636770b19a343af92538a80548316821790557f01112dd68e482ba8d68a7e828cff8b3abcea08eab88941953c180a7e650e9cd480548316821790557fc0a4a8be475dfebc377ebef2d7c4ff47656f572a08dd92b81017efcdba0febe1805484166110071790557f87e8a52529e8ece4ef759037313542a6429ff494a9fab9027fb79db90124eba680548316821790557f4c7666bbcb22d46469f7cc282f70764a7012dca2cce630ff8d83db9a9cdd48f080548316821790557f40f28f99a40bc9f6beea1013afdbc3cdcc689eb76b82c4de06c0acf1e1932ed58054909316611001179092557f0d9cf2cd531699eed8dd34e40ff2884a14a698c4898184fba85194e6f6772d248054821683179055600b60009081527f23f68c9bd22b8a93d06adabe17481c87c016bcbd20adc8bfd707a4d813a572176020527fdf0d5d05428057f5455c2dc8e810dd86d1e9350faa72f16bda8a45443c5b39328054831684179055603283556004805467ffffffffffffffff19166001600160401b031790556002819055600381905580549091169091179055565b6007602052600090815260409020546001600160401b031681565b60005460ff16613ba8576040805162461bcd60e51b815260206004820152601960248201526000805160206149b4833981519152604482015290519081900360640190fd5b6040805163569e4ed360e11b815233600482015290516000916110009163ad3c9da691602480820192602092909190829003018186803b158015613beb57600080fd5b505afa158015613bff573d6000803e3d6000fd5b505050506040513d6020811015613c1557600080fd5b505160408051633d42651560e11b8152905191925060009161100091637a84ca2a916004808301926020929190829003018186803b158015613c5657600080fd5b505afa158015613c6a573d6000803e3d6000fd5b505050506040513d6020811015613c8057600080fd5b5051905080613c8d575060155b600082118015613c9d5750808211155b613cdc576040805162461bcd60e51b815260206004820152600b60248201526a1b9bdd0818d8589a5b995d60aa1b604482015290519081900360640190fd5b600b5460ff1615613d20576040805162461bcd60e51b81526020600482015260096024820152681cdd5cdc195b99195960ba1b604482015290519081900360640190fd5b604080516f14d554d411539117d41493d413d4d05360821b81529051908190036010019020600090613d72907fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4706140e4565b905080156137415761374161401b565b60005460ff16613dc7576040805162461bcd60e51b815260206004820152601960248201526000805160206149b4833981519152604482015290519081900360640190fd5b33600090815260066020908152604080832060ff8089168552925290912054859116613e245760405162461bcd60e51b81526004018080602001828103825260318152602001806147f26031913960400191505060405180910390fd5b60ff85166000908152600760209081526040808320548151601f88018490048402810184019092528682526001600160401b031692613e899284928a9261208e92909189918c908c908190840183828082843760009201919091525061131c92505050565b60ff959095166000908152600760205260409020805467ffffffffffffffff191660019096016001600160401b03169590951790945550505050565b61100081565b600381565b61100481565b60408051600e808252818301909252606091630102ca0060ff851617918391602082018180368337505050600e81810187905260068201939093529182525090505b92915050565b600085613f2d57506000614012565b606082518451865160800101016040519080825280601f01601f191660200182016040528015613f64576020820181803683370190505b5090506000613f7282614706565b602080890151825201905086600080613f8a89614099565b8086526020909501949092509050613fa38285836140a3565b92830192613fb088614099565b8086526020909501949092509050613fc98285836140a3565b9283018a815260200192613fdc87614099565b9092509050613fec8285836140a3565b508351602001613ffa61470c565b60208183886065600019fa5051600114955050505050505b95945050505050565b600b5460ff161561405f576040805162461bcd60e51b81526020600482015260096024820152681cdd5cdc195b99195960ba1b604482015290519081900360640190fd5b600b805460ff1916600117905560405133907f6f123d3d54c84a7960a573b31c221dcd86e13fd849c5adb0c6ca851468cc1ae490600090a2565b8051602090910191565b5b602081106140c3578251825260209283019290910190601f19016140a4565b915181516020939093036101000a6000190180199091169216919091179052565b6000828152600d602052604081205461ffff166141ad57604080516f14d554d411539117d41493d413d4d05360821b815281519081900360100181206000908152600d6020818152848320805461ffff199081166001179091556e149153d4115397d41493d413d4d053608a1b8552855194859003600f01852084528282528584208054821660029081179091557710d05390d15317d514905394d1915497d41493d413d4d05360421b8652865195869003601801909520845291905292902080549092161790555b6000838152600c6020526040902080546201000090046001600160801b0316421015806141de575082816001015414155b156142b1576000848152600d602090815260409182902054835461ffff90911661ffff199091161771ffffffffffffffffffffffffffffffff0000191662010000610e1042016001600160801b031602178355600180840186905582519182019092523381526142539160028401919061472a565b5080546040805161ffff83168152620100009092046001600160801b0316602083015281810185905251339186917f9e109f0e55ef32e99e4880be2ec357f1ddb3469c79d0747ef4762da6e89fabe5916060908290030190a3614365565b60005b600282015481101561433c57336001600160a01b03168260020182815481106142d957fe5b6000918252602090912001546001600160a01b03161415614334576040805162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48185c1c1c9bdd995960821b604482015290519081900360640190fd5b6001016142b4565b50600281018054600181018255600091825260209091200180546001600160a01b031916331790555b8054600282015461ffff909116116143bf576000848152600c60205260408120805471ffffffffffffffffffffffffffffffffffff1916815560018101829055906143b3600283018261478f565b50506001915050613f18565b5060009392505050565b600080600060606021855110156143f9575050604080516000808252602082019092529092508291508190614472565b600185015160218601518651604080516020198301808252601f1960011990940193909316810160200190915260418901939291606091908015614444576020820181803683370190505b509050600061445282614099565b509050614464858260218d51036140a3565b506001975091955093509150505b9193509193565b600b5460ff16156144bd576040805162461bcd60e51b81526020600482015260096024820152681cdd5cdc195b99195960ba1b604482015290519081900360640190fd5b6002544311156144fc576004805467ffffffffffffffff1981166001600160401b036001600793840b810190930b16179091556003554360025561453d565b6003805460019081019182905554101561453d576004805467ffffffffffffffff1981166001600160401b036001600793840b810190930b16179091556003555b8160ff16836001600160401b0316600460009054906101000a900460070b6001600160401b03167f3a6e0fc61675aa2a100bcba0568368bb92bcec91c97673391074f11138f0cffe6102ca85604051808361ffff1661ffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156145d45781810151838201526020016145bc565b50505050905090810190601f1680156146015780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050565b6000816040516020018082805190602001908083835b602083106146495780518252601f19909201916020918201910161462a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106146b75780518252601f199092019160209182019101614698565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b3b151590565b60200190565b60405180602001604052806001906020820280368337509192915050565b82805482825590600052602060002090810192821561477f579160200282015b8281111561477f57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061474a565b5061478b9291506147b0565b5090565b50805460008255906000526020600020908101906147ad91906147d7565b50565b6147d491905b8082111561478b5780546001600160a01b03191681556001016147b6565b90565b6147d491905b8082111561478b57600081556001016147dd56fe74686520636f6e747261637420616e64206368616e6e656c2068617665206e6f74206265656e20726567697374657265646c656e677468206f662076616c756520666f72206164644f725570646174654368616e6e656c2073686f756c642062652032322c206368616e6e656c49643a697346726f6d53797374656d3a68616e646c6572416464726573736c656e677468206f662076616c756520666f722063616e63656c5472616e7366657251756f72756d2073686f756c6420626520326c656e677468206f662076616c756520666f722073757370656e6451756f72756d2073686f756c6420626520326c656e677468206f662076616c756520666f722072656f70656e51756f72756d2073686f756c642062652032746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662076616c756520666f7220656e61626c654f7244697361626c654368616e6e656c2073686f756c6420626520322c206368616e6e656c49643a6973456e61626c65746865206e6577426174636853697a65466f724f7261636c652073686f756c6420626520696e205b31302c2031303030305d74686520636f6e7472616374206e6f7420696e697420796574000000000000006c6967687420636c69656e74206e6f742073796e632074686520626c6f636b20796574a164736f6c6343000604000a" + }, + "0x0000000000000000000000000000000000002001": { + "balance": "0x0", + "code": "0x6080604052600436106103855760003560e01c806370fd5bad116101d1578063b88a802f11610102578063d7ecfcb6116100a0578063f9a2bbc71161006f578063f9a2bbc714610c40578063fa03f79714610c55578063fc3e590814610671578063fd6a687914610c6a5761038c565b8063d7ecfcb614610819578063dc927faf14610bd1578063edc1a5b014610be6578063f45fd80b14610bfb5761038c565b8063c2117d82116100dc578063c2117d8214610ae7578063c81b166214610afc578063c8509d8114610b11578063d61b9b9314610b965761038c565b8063b88a802f14610a82578063baaafd3b14610a97578063bf8546ca14610aac5761038c565b806396713da91161016f578063a78abc1611610149578063a78abc1614610964578063ab51bb961461098d578063ac431751146109a2578063b14315df14610a6d5761038c565b806396713da9146109255780639dc092621461093a578063a1a11bf51461094f5761038c565b806375d47a0a116101ab57806375d47a0a146108765780637942fd051461088b578063831d65d1146108a057806392b888a41461061d5761038c565b806370fd5bad14610819578063718a8aa81461082e57806375aca593146108435761038c565b80633fdfa7e4116102b6578063552aaf931161025457806369b635b61161022357806369b635b6146107865780636bd8f8041461079b5780636e47b482146107d15780636fb7f7eb146107e65761038c565b8063552aaf93146107325780635d17c8bd146107475780635d499b1b1461075c57806362b171d2146107715761038c565b8063493279b111610290578063493279b1146106b05780634bf6c882146106dc5780634d99dd16146106f157806351e806721461071d5761038c565b80633fdfa7e414610671578063413d9c3a1461068657806343756e5c1461069b5761038c565b806311fe9ec6116103235780632fdeb111116102fd5780632fdeb11114610632578063333ad3e71461064757806334c433541461065c5780633dffc3871461061d5761038c565b806311fe9ec6146105bf578063151817e3146105f257806317c9efb01461061d5761038c565b80630bee7a671161035f5780630bee7a67146104515780630c7957151461047f5780630e2374a5146104945780631182b875146104c55761038c565b8063026e402b1461039157806302985992146103bf578063047636d1146103e65761038c565b3661038c57005b600080fd5b6103bd600480360360408110156103a757600080fd5b506001600160a01b038135169060200135610c7f565b005b3480156103cb57600080fd5b506103d46111bc565b60408051918252519081900360200190f35b3480156103f257600080fd5b506104196004803603602081101561040957600080fd5b50356001600160a01b03166111c2565b6040518082606080838360005b8381101561043e578181015183820152602001610426565b5050505090500191505060405180910390f35b34801561045d57600080fd5b50610466611216565b6040805163ffffffff9092168252519081900360200190f35b34801561048b57600080fd5b506103d461121b565b3480156104a057600080fd5b506104a9611221565b604080516001600160a01b039092168252519081900360200190f35b3480156104d157600080fd5b5061054a600480360360408110156104e857600080fd5b60ff8235169190810190604081016020820135600160201b81111561050c57600080fd5b82018360208201111561051e57600080fd5b803590602001918460018302840111600160201b8311171561053f57600080fd5b509092509050611227565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561058457818101518382015260200161056c565b50505050905090810190601f1680156105b15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105cb57600080fd5b506103d4600480360360208110156105e257600080fd5b50356001600160a01b03166113e3565b3480156105fe57600080fd5b506106076113fe565b6040805160ff9092168252519081900360200190f35b34801561062957600080fd5b50610607611403565b34801561063e57600080fd5b506103d4611408565b34801561065357600080fd5b5061046661140e565b34801561066857600080fd5b506103d4611413565b34801561067d57600080fd5b5061060761141e565b34801561069257600080fd5b506103d4611423565b3480156106a757600080fd5b506104a961142a565b3480156106bc57600080fd5b506106c5611430565b6040805161ffff9092168252519081900360200190f35b3480156106e857600080fd5b50610607611436565b6103bd6004803603604081101561070757600080fd5b506001600160a01b03813516906020013561143b565b34801561072957600080fd5b506104a9611a63565b34801561073e57600080fd5b50610607611a69565b34801561075357600080fd5b506103d4611a6e565b34801561076857600080fd5b506103d4611a74565b34801561077d57600080fd5b506103d4611a7d565b34801561079257600080fd5b506103d4611c1d565b6103bd600480360360608110156107b157600080fd5b506001600160a01b03813581169160208101359091169060400135611c23565b3480156107dd57600080fd5b506104a961230c565b3480156107f257600080fd5b506103d46004803603602081101561080957600080fd5b50356001600160a01b0316612312565b34801561082557600080fd5b5061060761232d565b34801561083a57600080fd5b50610607612332565b34801561084f57600080fd5b506103d46004803603602081101561086657600080fd5b50356001600160a01b0316612337565b34801561088257600080fd5b506104a9612352565b34801561089757600080fd5b50610607612358565b3480156108ac57600080fd5b506103bd600480360360408110156108c357600080fd5b60ff8235169190810190604081016020820135600160201b8111156108e757600080fd5b8201836020820111156108f957600080fd5b803590602001918460018302840111600160201b8311171561091a57600080fd5b50909250905061235d565b34801561093157600080fd5b50610607612625565b34801561094657600080fd5b506104a961262a565b34801561095b57600080fd5b506104a9612630565b34801561097057600080fd5b50610979612636565b604080519115158252519081900360200190f35b34801561099957600080fd5b50610466611a69565b3480156109ae57600080fd5b506103bd600480360360408110156109c557600080fd5b810190602081018135600160201b8111156109df57600080fd5b8201836020820111156109f157600080fd5b803590602001918460018302840111600160201b83111715610a1257600080fd5b919390929091602081019035600160201b811115610a2f57600080fd5b820183602082011115610a4157600080fd5b803590602001918460018302840111600160201b83111715610a6257600080fd5b50909250905061263f565b348015610a7957600080fd5b50610607612dd1565b348015610a8e57600080fd5b506103d4612dd6565b348015610aa357600080fd5b506103d4612f73565b348015610ab857600080fd5b506103d460048036036040811015610acf57600080fd5b506001600160a01b0381358116916020013516612f7e565b348015610af357600080fd5b506103d4612fab565b348015610b0857600080fd5b506104a9612fb1565b348015610b1d57600080fd5b506103bd60048036036040811015610b3457600080fd5b60ff8235169190810190604081016020820135600160201b811115610b5857600080fd5b820183602082011115610b6a57600080fd5b803590602001918460018302840111600160201b83111715610b8b57600080fd5b509092509050612fb7565b348015610ba257600080fd5b506103d460048036036040811015610bb957600080fd5b506001600160a01b03813581169160200135166131da565b348015610bdd57600080fd5b506104a9613205565b348015610bf257600080fd5b506103d461320b565b348015610c0757600080fd5b506103d460048036036060811015610c1e57600080fd5b506001600160a01b038135811691602081013582169160409091013516613218565b348015610c4c57600080fd5b506104a961324d565b348015610c6157600080fd5b506103d4613253565b348015610c7657600080fd5b506104a9613259565b60105460ff1660021415610ccb576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b6010805460ff19166002179055806402540be4003406158015610cf357506402540be4008106155b610d44576040805162461bcd60e51b815260206004820152601c60248201527f707265636973696f6e206c6f737320696e20636f6e76657273696f6e00000000604482015290519081900360640190fd5b60005460ff16610d87576638d7ea4c6800006001908155662386f26fc1000060025568056bc75e2d631000006003556108fc6011556000805460ff191690911790555b600354821015610dde576040805162461bcd60e51b815260206004820152601760248201527f696e76616c69642064656c656761746520616d6f756e74000000000000000000604482015290519081900360640190fd5b600154610df290839063ffffffff61325f16565b341015610e3d576040805162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f756768206d73672076616c756560601b604482015290519081900360640190fd5b601154604051600091339183818181818787f1925050503d8060008114610e80576040519150601f19603f3d011682016040523d82523d6000602084013e610e85565b606091505b5050905080610ecf576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b2103232b632b3b0ba37b960791b604482015290519081900360640190fd5b6000610ee6846402540be40063ffffffff6132c016565b90506000610efa348663ffffffff61330216565b90506000610f136002548361330290919063ffffffff16565b6040805160038082526080820190925291925060609190816020015b6060815260200190600190039081610f2f579050509050610f4f33613344565b81600081518110610f5c57fe5b6020026020010181905250610f79886001600160a01b0316613344565b81600181518110610f8657fe5b6020026020010181905250610f9a84613367565b81600281518110610fa757fe5b60200260200101819052506060610fc76001610fc28461337a565b613404565b8051602080830191909120600f80546000908152600a845260408082209390935581546001908101909255338152600b909352912080549091019055905061200063f7a251d7601083611025876402540be40063ffffffff6132c016565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561108357818101518382015260200161106b565b50505050905090810190601f1680156110b05780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156110d157600080fd5b505af11580156110e5573d6000803e3d6000fd5b5061100492506108fc915061110290508a8663ffffffff61325f16565b6040518115909202916000818181858888f1935050505015801561112a573d6000803e3d6000fd5b506002546040516110029180156108fc02916000818181858888f1935050505015801561115b573d6000803e3d6000fd5b50604080518981526020810185905281516001600160a01b038c169233927f5f32ed2794e2e72d19e3cb2320e8820a499c4204887372beba51f5e61c040867929081900390910190a350506010805460ff1916600117905550505050505050565b60035481565b6111ca615194565b6111d2615194565b6001600160a01b0383166000818152600b60209081526040808320548552838352600c82528083205485830152928252600d9052819020549082015290505b919050565b606481565b6108fc81565b61200181565b606033612000146112695760405162461bcd60e51b815260040180806020018281038252602f81526020018061539c602f913960400191505060405180910390fd5b60005460ff166112ac576638d7ea4c6800006001908155662386f26fc1000060025568056bc75e2d631000006003556108fc6011556000805460ff191690911790555b6112b46151b2565b6112fb6112f685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348a92505050565b6134af565b9050600061131061130b836134f9565b613547565b90506000606060ff8316600414156113355761132b846135fe565b909250905061138c565b60ff83166005141561134a5761132b846137de565b6040805162461bcd60e51b8152602060048201526012602482015271756e6b6e6f776e206576656e74207479706560701b604482015290519081900360640190fd5b63ffffffff8216156113d8576040805163ffffffff84168152905160ff8516917f391d6e5ea6ab6c49b9a0abb1782cae5def8d711f973b00c729658c0b2a80b31b919081900360200190a25b979650505050505050565b6001600160a01b031660009081526006602052604090205490565b600581565b600181565b60015481565b606581565b662386f26fc1000081565b600381565b620a8c0081565b61100181565b6102ca81565b600881565b60105460ff1660021415611487576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b6010805460ff19166002179055806402540be40034061580156114af57506402540be4008106155b611500576040805162461bcd60e51b815260206004820152601c60248201527f707265636973696f6e206c6f737320696e20636f6e76657273696f6e00000000604482015290519081900360640190fd5b60005460ff16611543576638d7ea4c6800006001908155662386f26fc1000060025568056bc75e2d631000006003556108fc6011556000805460ff191690911790555b600154341015611591576040805162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f7567682072656c61792066656560601b604482015290519081900360640190fd5b60035482101561164c573360009081526005602090815260408083206001600160a01b03871684529091529020548214611603576040805162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b604482015290519081900360640190fd5b600254821161164c576040805162461bcd60e51b815260206004820152601060248201526f6e6f7420656e6f7567682066756e647360801b604482015290519081900360640190fd5b3360009081526007602090815260408083206001600160a01b03871684529091529020544210156116c4576040805162461bcd60e51b815260206004820152601a60248201527f70656e64696e6720756e64656c65676174696f6e206578697374000000000000604482015290519081900360640190fd5b604080518082018252601081526f6e6f7420656e6f7567682066756e647360801b602080830191909152336000908152600582528381206001600160a01b03881682529091529182205461171f91859063ffffffff6139fa16565b905080156117675760025481116117675760405162461bcd60e51b81526004018080602001828103825260258152602001806153776025913960400191505060405180910390fd5b600061177e846402540be40063ffffffff6132c016565b600254909150349060009061179a90839063ffffffff61330216565b6040805160038082526080820190925291925060609190816020015b60608152602001906001900390816117b65790505090506117d633613344565b816000815181106117e357fe5b6020026020010181905250611800886001600160a01b0316613344565b8160018151811061180d57fe5b602002602001018190525061182184613367565b8160028151811061182e57fe5b602002602001018190525060606118496002610fc28461337a565b8051602080830191909120600f80546000908152600a845260408082209390935581546001908101909255338152600c909352912080549091019055905061189a42620a8c0063ffffffff61325f16565b3360009081526007602090815260408083206001600160a01b038e16845290915290205561200063f7a251d76010836118de876402540be40063ffffffff6132c016565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561193c578181015183820152602001611924565b50505050905090810190601f1680156119695780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561198a57600080fd5b505af115801561199e573d6000803e3d6000fd5b5050604051611004925085156108fc02915085906000818181858888f193505050501580156119d1573d6000803e3d6000fd5b506002546040516110029180156108fc02916000818181858888f19350505050158015611a02573d6000803e3d6000fd5b50604080518981526020810185905281516001600160a01b038c169233927fdf0b6ac27f3f3bb31cee3dab0f4fe40cc19c6a3f8daaec52e06b261e58a12519929081900390910190a350506010805460ff1916600117905550505050505050565b61200081565b600081565b60025481565b6402540be40081565b60105460009060ff1660021415611acc576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b506010805460ff191660021790553360009081526008602052604090205480611b33576040805162461bcd60e51b81526020600482015260146024820152736e6f20756e64656c6567617465642066756e647360601b604482015290519081900360640190fd5b336000818152600860205260408082208290556011549051919291849084818181858888f193505050503d8060008114611b89576040519150601f19603f3d011682016040523d82523d6000602084013e611b8e565b606091505b5050905080611bd6576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60408051838152905133917fc712d133b8d448221aaed2198ed1f0db6dfc860fb01bc3a630916fe6cbef946f919081900360200190a2506010805460ff1916600117905590565b60035490565b60105460ff1660021415611c6f576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b6010805460ff19166002179055806402540be4003406158015611c9757506402540be4008106155b611ce8576040805162461bcd60e51b815260206004820152601c60248201527f707265636973696f6e206c6f737320696e20636f6e76657273696f6e00000000604482015290519081900360640190fd5b60005460ff16611d2b576638d7ea4c6800006001908155662386f26fc1000060025568056bc75e2d631000006003556108fc6011556000805460ff191690911790555b826001600160a01b0316846001600160a01b03161415611d89576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b2103932b232b632b3b0ba34b7b760611b604482015290519081900360640190fd5b600154341015611dd7576040805162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f7567682072656c61792066656560601b604482015290519081900360640190fd5b600354821015611e1f576040805162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b604482015290519081900360640190fd5b3360009081526009602090815260408083206001600160a01b03888116855290835281842090871684529091529020544210801590611e8d57503360009081526009602090815260408083206001600160a01b03878116855290835281842090881684529091529020544210155b611ede576040805162461bcd60e51b815260206004820152601a60248201527f70656e64696e6720726564656c65676174696f6e206578697374000000000000604482015290519081900360640190fd5b604080518082018252601081526f6e6f7420656e6f7567682066756e647360801b602080830191909152336000908152600582528381206001600160a01b038916825290915291822054611f3991859063ffffffff6139fa16565b90508015611f81576002548111611f815760405162461bcd60e51b815260040180806020018281038252602581526020018061527b6025913960400191505060405180910390fd5b6000611f98846402540be40063ffffffff6132c016565b6002549091503490600090611fb490839063ffffffff61330216565b60408051600480825260a0820190925291925060609190816020015b6060815260200190600190039081611fd0579050509050611ff033613344565b81600081518110611ffd57fe5b602002602001018190525061201a896001600160a01b0316613344565b8160018151811061202757fe5b6020026020010181905250612044886001600160a01b0316613344565b8160028151811061205157fe5b602002602001018190525061206584613367565b8160038151811061207257fe5b6020026020010181905250606061208d6003610fc28461337a565b8051602080830191909120600f80546000908152600a845260408082209390935581546001908101909255338152600d90935291208054909101905590506120de42620a8c0063ffffffff61325f16565b3360009081526009602090815260408083206001600160a01b038e81168552908352818420908f16845290915290205561212142620a8c0063ffffffff61325f16565b3360009081526009602090815260408083206001600160a01b038f81168552908352818420908e16845290915290205561200063f7a251d7601083612171876402540be40063ffffffff6132c016565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156121cf5781810151838201526020016121b7565b50505050905090810190601f1680156121fc5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561221d57600080fd5b505af1158015612231573d6000803e3d6000fd5b5050604051611004925085156108fc02915085906000818181858888f19350505050158015612264573d6000803e3d6000fd5b506002546040516110029180156108fc02916000818181858888f19350505050158015612295573d6000803e3d6000fd5b50886001600160a01b03168a6001600160a01b0316336001600160a01b03167fdb0d03fdfcb145c486c442659e6a341a8828985505097cb5190afcf541e840158b87604051808381526020018281526020019250505060405180910390a450506010805460ff191660011790555050505050505050565b61100581565b6001600160a01b031660009081526004602052604090205490565b600281565b601081565b6001600160a01b031660009081526008602052604090205490565b61100881565b600b81565b336120001461239d5760405162461bcd60e51b815260040180806020018281038252602f81526020018061539c602f913960400191505060405180910390fd5b60005460ff166123e0576638d7ea4c6800006001908155662386f26fc1000060025568056bc75e2d631000006003556108fc6011556000805460ff191690911790555b6123e86151b2565b61242a6112f684848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348a92505050565b905060008060606000805b61243e86613a91565b156124a9578061245b5761245461130b876134f9565b94506124a1565b80600114156124775761247061130b876134f9565b93506124a1565b806002141561249c5761249161248c876134f9565b613ab2565b9250600191506124a1565b6124a9565b600101612435565b816124ef576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b6124f883613b22565b61253b576040805162461bcd60e51b815260206004820152600f60248201526e0eee4dedcce40e0c2c6d640d0c2e6d608b1b604482015290519081900360640190fd5b6125476112f68461348a565b9550600061255761130b886134f9565b90506125616151b2565b61256a88613a91565b1561258d576125866112f661258161248c8b6134f9565b61348a565b90506125ce565b6040805162461bcd60e51b8152602060048201526011602482015270656d7074792061636b207061636b61676560781b604482015290519081900360640190fd5b60ff8216600114156125ea576125e5818888613b76565b612618565b60ff821660021415612601576125e5818888613f2d565b60ff82166003141561134a576125e58188886141fa565b5050505050505050505050565b600981565b61100781565b61100681565b60005460ff1681565b60005460ff16612696576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b33611007146126d65760405162461bcd60e51b815260040180806020018281038252602e8152602001806152ed602e913960400191505060405180910390fd5b61273784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600a81526972656c6179657246656560b01b6020820152915061455f9050565b1561289d5760208114612791576040805162461bcd60e51b815260206004820152601d60248201527f6c656e677468206f662072656c61796572466565206d69736d61746368000000604482015290519081900360640190fd5b604080516020601f84018190048102820181019092528281526000916127cf9185858083850183828082843760009201919091525061464692505050565b905060035481106128115760405162461bcd60e51b815260040180806020018281038252602e81526020018061531b602e913960400191505060405180910390fd5b60025481116128515760405162461bcd60e51b815260040180806020018281038252602e815260200180615349602e913960400191505060405180910390fd5b6402540be4008106156128955760405162461bcd60e51b815260040180806020018281038252602c8152602001806152c1602c913960400191505060405180910390fd5b600155612d3f565b61290184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c62534352656c6179657246656560981b6020820152915061455f9050565b15612a63576020811461295b576040805162461bcd60e51b815260206004820181905260248201527f6c656e677468206f662062534352656c61796572466565206d69736d61746368604482015290519081900360640190fd5b604080516020601f84018190048102820181019092528281526000916129999185858083850183828082843760009201919091525061464692505050565b9050806129d75760405162461bcd60e51b81526004018080602001828103825260228152602001806153cb6022913960400191505060405180910390fd5b6001548110612a175760405162461bcd60e51b815260040180806020018281038252602e81526020018061521c602e913960400191505060405180910390fd5b6402540be400810615612a5b5760405162461bcd60e51b815260040180806020018281038252602f8152602001806151ed602f913960400191505060405180910390fd5b600255612d3f565b612ac784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c36b4b72232b632b3b0ba34b7b760991b6020820152915061455f9050565b15612ba95760208114612b21576040805162461bcd60e51b815260206004820181905260248201527f6c656e677468206f66206d696e44656c65676174696f6e206d69736d61746368604482015290519081900360640190fd5b604080516020601f8401819004810282018101909252828152600091612b5f9185858083850183828082843760009201919091525061464692505050565b90506001548111612ba15760405162461bcd60e51b815260040180806020018281038252603181526020018061524a6031913960400191505060405180910390fd5b600355612d3f565b612c0b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600b81526a7472616e7366657247617360a81b6020820152915061455f9050565b15612d025760208114612c65576040805162461bcd60e51b815260206004820152601e60248201527f6c656e677468206f66207472616e73666572476173206d69736d617463680000604482015290519081900360640190fd5b604080516020601f8401819004810282018101909252828152600091612ca39185858083850183828082843760009201919091525061464692505050565b905060008111612cfa576040805162461bcd60e51b815260206004820152601e60248201527f746865207472616e736665724761732063616e6e6f74206265207a65726f0000604482015290519081900360640190fd5b601155612d3f565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b600481565b60105460009060ff1660021415612e25576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b506010805460ff191660021790553360009081526006602052604090205480612e89576040805162461bcd60e51b81526020600482015260116024820152701b9bc81c195b991a5b99c81c995dd85c99607a1b604482015290519081900360640190fd5b336000818152600660205260408082208290556011549051919291849084818181858888f193505050503d8060008114612edf576040519150601f19603f3d011682016040523d82523d6000602084013e612ee4565b606091505b5050905080612f2c576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60408051838152905133917f83b78188b13346b2ffb484da70d42ee27de7fbf9f2bd8045269e10ed643ccd76919081900360200190a2506010805460ff1916600117905590565b6638d7ea4c68000081565b6001600160a01b038083166000908152600760209081526040808320938516835292905220545b92915050565b60015490565b61100281565b3361200014612ff75760405162461bcd60e51b815260040180806020018281038252602f81526020018061539c602f913960400191505060405180910390fd5b60005460ff1661303a576638d7ea4c6800006001908155662386f26fc1000060025568056bc75e2d631000006003556108fc6011556000805460ff191690911790555b61307982828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b2292505050565b6130bc576040805162461bcd60e51b815260206004820152600f60248201526e0eee4dedcce40e0c2c6d640d0c2e6d608b1b604482015290519081900360640190fd5b6130c46151b2565b6131066112f684848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348a92505050565b9050600061311661130b836134f9565b90506131206151b2565b61312983613a91565b15613147576131406112f661258161248c866134f9565b905061318d565b6040805162461bcd60e51b8152602060048201526016602482015275656d707479206661696c2061636b207061636b61676560501b604482015290519081900360640190fd5b60ff8216600114156131a7576131a28161464b565b6131d1565b60ff8216600214156131bc576131a281614865565b60ff82166003141561134a576131a28161498f565b5050505b505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b61100381565b68056bc75e2d6310000081565b6001600160a01b0392831660009081526009602090815260408083209486168352938152838220929094168152925290205490565b61100081565b60115481565b61100481565b6000828201838110156132b9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006132b983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614af4565b60006132b983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139fa565b60408051600560a21b83186014820152603481019091526060906132b981614b59565b6060612fa561337583614baf565b614b59565b606081516000141561339b5750604080516000815260208101909152611211565b6060826000815181106133aa57fe5b602002602001015190506000600190505b83518110156133eb576133e1828583815181106133d457fe5b6020026020010151614c95565b91506001016133bb565b506132b96133fe825160c060ff16614d12565b82614c95565b6040805160028082526060828101909352829190816020015b606081526020019060019003908161341d5790505090506134408460ff16613367565b8160008151811061344d57fe5b602002602001018190525061346183614b59565b8160018151811061346e57fe5b60200260200101819052506134828161337a565b949350505050565b6134926151d2565b506040805180820190915281518152602082810190820152919050565b6134b76151b2565b6134c082614e0a565b6134c957600080fd5b60006134d88360200151614e44565b60208085015160408051808201909152868152920190820152915050919050565b6135016151d2565b61350a82613a91565b61351357600080fd5b6020820151600061352382614ea7565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061355c57508151602110155b61356557600080fd5b60006135748360200151614e44565b905080836000015110156135cf576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b8251602080850151830180519284900392918310156135f557826020036101000a820491505b50949350505050565b600060606000806000805b61361287613a91565b1561366457826136345761362d613628886134f9565b614fda565b9150613659565b82600114156136545761364961130b886134f9565b905060019350613659565b613664565b826001019250613609565b836136aa576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b60006110046001600160a01b031663727be1f8836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156136f457600080fd5b505af1158015613708573d6000803e3d6000fd5b505050506040513d602081101561371e57600080fd5b505190508061374357613735600484846065614ff4565b9650965050505050506137d9565b6001600160a01b03831660009081526006602052604090205461376c908363ffffffff61325f16565b6001600160a01b038416600081815260066020908152604091829020939093558051858152905191927f7cc266c7b444f808013fa187f7b904d470a051a6564e78f482aa496581ba4bf892918290030190a260408051600080825260208201909252909750955050505050505b915091565b6000606060008060008060005b6137f488613a91565b1561385d57836138115761380a613628896134f9565b9250613852565b836001141561382d57613826613628896134f9565b9150613852565b836002141561384d5761384261130b896134f9565b905060019450613852565b61385d565b8360010193506137eb565b846138a3576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b60006110046001600160a01b031663727be1f8836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156138ed57600080fd5b505af1158015613901573d6000803e3d6000fd5b505050506040513d602081101561391757600080fd5b505190508061393d5761392e600585846065614ff4565b975097505050505050506137d9565b6001600160a01b038085166000818152600760209081526040808320948816835293815283822082905591815260089091522054613981908363ffffffff61325f16565b6001600160a01b0380861660008181526008602090815260409182902094909455805186815290519287169391927f35a799836f74fac7eccf5c73902823b970543d2274d3b93d8da3d37a255772a2929181900390910190a3604080516000808252602082019092529098509650505050505050915091565b60008184841115613a895760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613a4e578181015183820152602001613a36565b50505050905090810190601f168015613a7b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000613a9b6151d2565b505080518051602091820151919092015191011190565b8051606090613ac057600080fd5b6000613acf8360200151614e44565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015613b06576020820181803683370190505b50905060008160200190506135f58487602001510182856150f0565b8051602080830191909120600e546000908152600a9092526040822054808214613b5157600092505050611211565b5050600e80546000908152600a60205260408120558054600190810190915592915050565b60008060008060005b613b8888613a91565b15613bf15783613ba557613b9e613628896134f9565b9250613be6565b8360011415613bc157613bba613628896134f9565b9150613be6565b8360021415613be157613bd661130b896134f9565b905060019450613be6565b613bf1565b836001019350613b7f565b84613c37576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b6000613c4e826402540be40063ffffffff61513b16565b6001600160a01b0385166000908152600b602052604090208054600019019055905060ff881660011415613d945760ff871615613cc1576040805162461bcd60e51b815260206004820152600c60248201526b77726f6e672073746174757360a01b604482015290519081900360640190fd5b6001600160a01b038416600090815260046020526040902054613cea908263ffffffff61325f16565b6001600160a01b03808616600090815260046020908152604080832094909455600581528382209287168252919091522054613d2c908263ffffffff61325f16565b6001600160a01b038086166000818152600560209081526040808320948916808452948252918290209490945580518581529051929391927f9a57c81564ab02642f34fd87e41baa9b074c18342cec3b7268b62bf752018fd1929181900390910190a3613f22565b60ff8816613ee6576001600160a01b038416600090815260086020526040902054613dc5908263ffffffff61325f16565b6001600160a01b0385166000908152600860209081526040808320939093558251630e4f7c3f60e31b81526004810185905292516110049363727be1f89360248083019493928390030190829087803b158015613e2157600080fd5b505af1158015613e35573d6000803e3d6000fd5b505050506040513d6020811015613e4b57600080fd5b5051613e94576040805162461bcd60e51b81526020600482015260136024820152721dda5d1a191c985dc8189b988819985a5b1959606a1b604482015290519081900360640190fd5b6040805182815260ff8916602082015281516001600160a01b0380871693908816927fcbd481ae600289fad8c0484d07ce0ffe4f010d7c844ecfdeaf2a13fead52886e929081900390910190a3613f22565b6040805162461bcd60e51b815260206004820152600c60248201526b77726f6e672073746174757360a01b604482015290519081900360640190fd5b505050505050505050565b60008060008060005b613f3f88613a91565b15613fa85783613f5c57613f55613628896134f9565b9250613f9d565b8360011415613f7857613f71613628896134f9565b9150613f9d565b8360021415613f9857613f8d61130b896134f9565b905060019450613f9d565b613fa8565b836001019350613f36565b84613fee576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b6000614005826402540be40063ffffffff61513b16565b6001600160a01b0385166000908152600c602052604090208054600019019055905060ff8816600114156141845760ff871615614078576040805162461bcd60e51b815260206004820152600c60248201526b77726f6e672073746174757360a01b604482015290519081900360640190fd5b6001600160a01b0384166000908152600460205260409020546140a1908263ffffffff61330216565b6001600160a01b038086166000908152600460209081526040808320949094556005815283822092871682529190915220546140e3908263ffffffff61330216565b6001600160a01b0380861660009081526005602090815260408083209388168352929052205561411c42620a8c0063ffffffff61325f16565b6001600160a01b038086166000818152600760209081526040808320948916808452948252918290209490945580518581529051929391927fd6f878a5bcbbe79a64e6418bb0d56aaa20b9a60587d45749819df88dfc7c3c44929181900390910190a3613f22565b60ff8816613ee6576001600160a01b03808516600081815260076020908152604080832094881680845294825280832092909255815185815260ff8c169181019190915281517f4417d10c1e33efa83a770b8d4f47176e78c08c1298d534901ad3b16bb585fa2e929181900390910190a3613f22565b6000806000806000805b61420d89613a91565b15614292578461422a576142236136288a6134f9565b9350614287565b84600114156142465761423f6136288a6134f9565b9250614287565b84600214156142625761425b6136288a6134f9565b9150614287565b84600314156142825761427761130b8a6134f9565b905060019550614287565b614292565b846001019450614204565b856142d8576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b60006142ef826402540be40063ffffffff61513b16565b6001600160a01b0386166000908152600d602052604090208054600019019055905060ff8916600114156144c25760ff881615614362576040805162461bcd60e51b815260206004820152600c60248201526b77726f6e672073746174757360a01b604482015290519081900360640190fd5b6001600160a01b03808616600090815260056020908152604080832093881683529290522054614398908263ffffffff61330216565b6001600160a01b038681166000908152600560209081526040808320898516845290915280822093909355908516815220546143d4908261325f565b6001600160a01b0380871660009081526005602090815260408083209388168352929052205561440d42620a8c0063ffffffff61325f16565b6001600160a01b038087166000908152600960209081526040808320898516845282528083209388168352929052205561445042620a8c0063ffffffff61325f16565b6001600160a01b038087166000818152600960209081526040808320898616808552908352818420958b1680855295835292819020959095558451868152945191947f78bffae3f8c6691ac7fc1a3bff800cb2d612f5ad9ae5b0444cfe2eb15c189e18929081900390910190a4614553565b60ff8916613ee6576001600160a01b038581166000818152600960209081526040808320898616808552818452828520968a16808652968452828520859055908352818420818552835281842093909355805186815260ff8e169281019290925280519293927fb93bee5c59f85ede6b074a99f4ffcd3e3fc0d5c3d8156de331de89a49e0ce77c9281900390910190a45b50505050505050505050565b6000816040516020018082805190602001908083835b602083106145945780518252601f199092019160209182019101614575565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106146025780518252601f1990920191602091820191016145e3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b60008060008060005b61465d86613a91565b156146c6578361467a57614673613628876134f9565b92506146bb565b83600114156146965761468f613628876134f9565b91506146bb565b83600214156146b6576146ab61130b876134f9565b9050600194506146bb565b6146c6565b836001019350614654565b8461470c576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b6000614723826402540be40063ffffffff61513b16565b6001600160a01b0385166000908152600b6020908152604080832080546000190190556008909152902054909150614761908263ffffffff61325f16565b6001600160a01b0385166000908152600860209081526040808320939093558251630e4f7c3f60e31b81526004810185905292516110049363727be1f89360248083019493928390030190829087803b1580156147bd57600080fd5b505af11580156147d1573d6000803e3d6000fd5b505050506040513d60208110156147e757600080fd5b5051614830576040805162461bcd60e51b81526020600482015260136024820152721dda5d1a191c985dc8189b988819985a5b1959606a1b604482015290519081900360640190fd5b6040516001907ff83de021914a4585482db5ca47d520a5657165b443fa2c7ef8ed4635f054da9b90600090a250505050505050565b60008060008060005b61487786613a91565b156148e057836148945761488d613628876134f9565b92506148d5565b83600114156148b0576148a9613628876134f9565b91506148d5565b83600214156148d0576148c561130b876134f9565b9050600194506148d5565b6148e0565b83600101935061486e565b84614926576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b6001600160a01b038084166000908152600c60209081526040808320805460001901905560078252808320938616835292905281812081905590516002917ff83de021914a4585482db5ca47d520a5657165b443fa2c7ef8ed4635f054da9b91a2505050505050565b6000806000806000805b6149a287613a91565b15614a2757846149bf576149b8613628886134f9565b9350614a1c565b84600114156149db576149d4613628886134f9565b9250614a1c565b84600214156149f7576149f0613628886134f9565b9150614a1c565b8460031415614a1757614a0c61130b886134f9565b905060019550614a1c565b614a27565b846001019450614999565b85614a6d576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b6001600160a01b038481166000908152600d602090815260408083208054600019019055600982528083208785168085528184528285209588168552948352818420849055825280832093835292905281812081905590516003917ff83de021914a4585482db5ca47d520a5657165b443fa2c7ef8ed4635f054da9b91a250505050505050565b60008183614b435760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613a4e578181015183820152602001613a36565b506000838581614b4f57fe5b0495945050505050565b606081516001148015614b8b5750607f60f81b82600081518110614b7957fe5b01602001516001600160f81b03191611155b15614b97575080611211565b612fa5614ba98351608060ff16614d12565b83614c95565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416614bf357506018614c17565b6fffffffffffffffffffffffffffffffff198416614c1357506010614c17565b5060005b6020811015614c4d57818181518110614c2c57fe5b01602001516001600160f81b03191615614c4557614c4d565b600101614c17565b60008160200390506060816040519080825280601f01601f191660200182016040528015614c82576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b81831015614cc6578051835260209283019201614cae565b50855184518101855292509050808201602086015b81831015614cf3578051835260209283019201614cdb565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310614d62576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411614dbc5782840160f81b81600081518110614d9e57fe5b60200101906001600160f81b031916908160001a9053509050612fa5565b6060614dc785614baf565b90508381510160370160f81b82600081518110614de057fe5b60200101906001600160f81b031916908160001a905350614e018282614c95565b95945050505050565b8051600090614e1b57506000611211565b6020820151805160001a9060c0821015614e3a57600092505050611211565b5060019392505050565b8051600090811a6080811015614e5e576000915050611211565b60b8811080614e79575060c08110801590614e79575060f881105b15614e88576001915050611211565b60c0811015614e9c5760b519019050611211565b60f519019050611211565b80516000908190811a6080811015614ec25760019150614fd3565b60b8811015614ed757607e1981019150614fd3565b60c0811015614f5157600060b78203600186019550806020036101000a865104915060018101820193505080831015614f4b576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50614fd3565b60f8811015614f665760be1981019150614fd3565b600060f78203600186019550806020036101000a865104915060018101820193505080831015614fd1576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b8051600090601514614feb57600080fd5b612fa582613547565b6000606061500d846402540be40063ffffffff6132c016565b60408051600480825260a0820190925291955060609190816020015b606081526020019060019003908161502957905050905061504c8760ff16613367565b8160008151811061505957fe5b6020026020010181905250615076866001600160a01b0316613344565b8160018151811061508357fe5b602002602001018190525061509785613367565b816002815181106150a457fe5b60200260200101819052506150be8463ffffffff16613367565b816003815181106150cb57fe5b602002602001018190525060606150e18261337a565b94989497509395505050505050565b806150fa576131d5565b5b6020811061511a578251825260209283019290910190601f19016150fb565b915181516020939093036101000a6000190180199091169216919091179052565b60008261514a57506000612fa5565b8282028284828161515757fe5b04146132b95760405162461bcd60e51b81526004018080602001828103825260218152602001806152a06021913960400191505060405180910390fd5b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806151c56151d2565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe7468652042534352656c61796572466565206d6f642074656e20646563696d616c73206d757374206265207a65726f7468652042534352656c61796572466565206d757374206265206c657373207468616e2072656c61796572466565746865206d696e44656c65676174696f6e206d7573742062652067726561746572207468616e2072656c61796572466565696e73756666696369656e742062616c616e636520616674657220726564656c6567617465536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777468652072656c61796572466565206d6f642074656e20646563696d616c73206d757374206265207a65726f746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163747468652072656c61796572466565206d757374206265206c657373207468616e206d696e44656c65676174696f6e7468652072656c61796572466565206d757374206265206d6f7265207468616e2042534352656c61796572466565696e73756666696369656e742062616c616e636520616674657220756e64656c6567617465746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e74726163747468652042534352656c61796572466565206d757374206e6f74206265207a65726fa164736f6c6343000604000a" + }, + "0x88cb4D8F77742c24d647BEf8049D3f3C56067cDD": { + "balance": "0x100000000000000000000" + }, + "0x42D596440775C90db8d9187b47650986E1063493": { + "balance": "0x1000000000000000000000" + }, + "37B8516a0F88E65D677229b402ec6C1e0E333004": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "6c468CF8c9879006E22EC4029696E005C2319C9D": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "59b02d4d2f94ea5c55230715a58ebb0b703bcd4b": { + "balance": "0x19d971e4fe8401e74000000" + }, + "7fd60c817837dcfefca6d0a52a44980d12f70c59": { + "balance": "0x19d971e4fe8401e74000000" + }, + "8e1ad6fac6ea5871140594abef5b1d503385e936": { + "balance": "0x19d971e4fe8401e74000000" + }, + "a2bc4cf857f3d7a22b29c71774b4d8f25cc7edd0": { + "balance": "0x19d971e4fe8401e74000000" + }, + "b75573a04648535bddc52adf6fbc887149624253": { + "balance": "0x19d971e4fe8401e74000000" + }, + "bb46abbcc95213754f549e0cfa2b13bef0abfab6": { + "balance": "0x19d971e4fe8401e74000000" + }, + "c32ec0115bcb6693d4b4854531ca5e6a99217abf": { + "balance": "0x19d971e4fe8401e74000000" + }, + "c8d063a7e0a118432721dae5e059404b5598bd76": { + "balance": "0x19d971e4fe8401e74000000" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" +} diff --git a/tests/truffle/storage/keystore/UTC--2023-12-07T03-21-00.035782000Z--03735c2ed70a56cd221e0024eb4bf90243c9d6e9 b/tests/truffle/storage/keystore/UTC--2023-12-07T03-21-00.035782000Z--03735c2ed70a56cd221e0024eb4bf90243c9d6e9 new file mode 100644 index 0000000000..effd29a10d --- /dev/null +++ b/tests/truffle/storage/keystore/UTC--2023-12-07T03-21-00.035782000Z--03735c2ed70a56cd221e0024eb4bf90243c9d6e9 @@ -0,0 +1 @@ +{"address":"03735c2ed70a56cd221e0024eb4bf90243c9d6e9","crypto":{"cipher":"aes-128-ctr","ciphertext":"b66550ef67345005ead82c9e2835d311fb0e8787191af3696119977064f6120e","cipherparams":{"iv":"5b8f4ed6026ab6c733857e3bed90a869"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"68fc3d0829122badcf8c6efd40c6f2e086a5167db489bed099e3d2b97c1be496"},"mac":"71fd9f23862f7252ca88a6ea2c29fd0ab3527c5b9f5d1f827856263247c92f46"},"id":"7f75b57a-a4ba-4877-a42b-652f966d8aa6","version":3} \ No newline at end of file From fa5d0cf2875a7144b4bd921c2a09ddec88d8642c Mon Sep 17 00:00:00 2001 From: buddh0 Date: Wed, 6 Dec 2023 18:09:25 +0800 Subject: [PATCH 29/31] core/systemcontracts: update CommitUrl for keplerUpgrade --- core/systemcontracts/upgrade.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/core/systemcontracts/upgrade.go b/core/systemcontracts/upgrade.go index 562020686d..e38bd65d70 100644 --- a/core/systemcontracts/upgrade.go +++ b/core/systemcontracts/upgrade.go @@ -704,17 +704,17 @@ func init() { Configs: []*UpgradeConfig{ { ContractAddr: common.HexToAddress(ValidatorContract), - CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe", Code: "6080604052600436106104a35760003560e01c806388b32f1111610260578063c6d3394511610144578063e40716a1116100c1578063f92eb86b11610085578063f92eb86b14610c02578063f9a2bbc714610c17578063fc3e590814610c2c578063fccc281314610c41578063fd4ad81f14610c56578063fd6a687914610c85576104aa565b8063e40716a114610b85578063ea321e4914610b9a578063eb57e20214610bba578063eda5868c14610bda578063f340fa0114610bef576104aa565b8063d86222d511610108578063d86222d514610b1c578063daacdb6614610b31578063dc927faf14610b46578063e086c7b114610b5b578063e1c7392a14610b70576104aa565b8063c6d3394514610abd578063c81b166214610ad2578063c8509d81146108b6578063ce910b0c14610ae7578063d68fb56a14610b07576104aa565b8063a5422d5c116101dd578063ad3c9da6116101a1578063ad3c9da614610a3c578063aef198a914610a5c578063b7ab4db514610a71578063b8cf4ef114610a93578063bf9f499514610666578063c466689d14610aa8576104aa565b8063a5422d5c146109c8578063a78abc16146109dd578063aaf5eb68146109f2578063ab51bb9614610a07578063ac43175114610a1c576104aa565b806396713da91161022457806396713da91461095f5780639dc09262146109745780639fe0f81614610989578063a0dc27581461099e578063a1a11bf5146109b3576104aa565b806388b32f11146108eb5780638a7beb01146109005780638b5ad0c9146109155780638d19a4101461092a5780639369d7de1461094a576104aa565b806351e80672116103875780636e47b482116103045780637942fd05116102c85780637942fd05146108775780637a84ca2a1461088c57806381650b62146108a1578063831d65d1146108b6578063853230aa1461086257806386249882146108d6576104aa565b80636e47b4821461080e57806370fd5bad14610823578063718a8aa81461083857806375d47a0a1461084d57806378dfed4a14610862576104aa565b80635de1e22c1161034b5780635de1e22c14610792578063603d86d31461065157806360eba4fe146107a757806362b72cf5146107c75780636969a25c146107dc576104aa565b806351e806721461071357806355614fcc14610728578063565c56b3146107485780635667515a146107685780635d77156c1461077d576104aa565b80633365af3a1161042057806343756e5c116103e457806343756e5c1461068857806345cf9daf1461069d578063493279b1146106b25780634bf6c882146106d45780634df6e0c3146106e95780635192c82c146106fe576104aa565b80633365af3a146105ee57806335409f7f1461060e5780633b071dcc1461062e5780633de0f0d8146106515780633dffc38714610666576104aa565b8063152ad3b811610467578063152ad3b8146105625780631ff1806914610584578063219f22d514610599578063300c3567146105ae578063321d398a146105ce576104aa565b806304c4fec6146104af57806307a56847146104c65780630bee7a67146104f15780630e2374a5146105135780631182b87514610535576104aa565b366104aa57005b600080fd5b3480156104bb57600080fd5b506104c4610c9a565b005b3480156104d257600080fd5b506104db610d0c565b6040516104e89190617691565b60405180910390f35b3480156104fd57600080fd5b50610506610d12565b6040516104e891906176bb565b34801561051f57600080fd5b50610528610d17565b6040516104e89190616a60565b34801561054157600080fd5b50610555610550366004616946565b610d1d565b6040516104e89190616bd7565b34801561056e57600080fd5b50610577610f55565b6040516104e89190616bcc565b34801561059057600080fd5b506104db610f5e565b3480156105a557600080fd5b50610506610f64565b3480156105ba57600080fd5b506104c46105c93660046167d0565b610f69565b3480156105da57600080fd5b506105776105e93660046168f3565b6112b0565b3480156105fa57600080fd5b506105776106093660046168f3565b61137f565b34801561061a57600080fd5b506104c46106293660046167a9565b611430565b34801561063a57600080fd5b50610643611589565b6040516104e8929190616ae2565b34801561065d57600080fd5b506104db611865565b34801561067257600080fd5b5061067b61186b565b6040516104e891906176cc565b34801561069457600080fd5b50610528611870565b3480156106a957600080fd5b506104db611876565b3480156106be57600080fd5b506106c761187c565b6040516104e89190617682565b3480156106e057600080fd5b5061067b611881565b3480156106f557600080fd5b50610643611886565b34801561070a57600080fd5b506104db611a04565b34801561071f57600080fd5b50610528611a0a565b34801561073457600080fd5b506105776107433660046167a9565b611a10565b34801561075457600080fd5b506104db6107633660046167a9565b611a45565b34801561077457600080fd5b5061067b611a96565b34801561078957600080fd5b50610506611a9b565b34801561079e57600080fd5b506104db611aa0565b3480156107b357600080fd5b506105556107c23660046168f3565b611aa6565b3480156107d357600080fd5b506104db611b4c565b3480156107e857600080fd5b506107fc6107f73660046168f3565b611b52565b6040516104e896959493929190616a8d565b34801561081a57600080fd5b50610528611bb6565b34801561082f57600080fd5b5061067b611bbc565b34801561084457600080fd5b5061067b611bc1565b34801561085957600080fd5b50610528611bc6565b34801561086e57600080fd5b506104db611bcc565b34801561088357600080fd5b5061067b611bd2565b34801561089857600080fd5b506104db611bd7565b3480156108ad57600080fd5b50610506611bdd565b3480156108c257600080fd5b506104c46108d1366004616946565b611be2565b3480156108e257600080fd5b506104db611c43565b3480156108f757600080fd5b506104db611c49565b34801561090c57600080fd5b50610577611c4f565b34801561092157600080fd5b506104db611c58565b34801561093657600080fd5b506104db6109453660046167a9565b611c5e565b34801561095657600080fd5b506104c4611c9e565b34801561096b57600080fd5b5061067b611db2565b34801561098057600080fd5b50610528611db7565b34801561099557600080fd5b506104db611dbd565b3480156109aa57600080fd5b506104db611dc2565b3480156109bf57600080fd5b50610528611dc7565b3480156109d457600080fd5b50610555611dcd565b3480156109e957600080fd5b50610577611dec565b3480156109fe57600080fd5b506104db611df5565b348015610a1357600080fd5b50610506611a96565b348015610a2857600080fd5b506104c4610a37366004616897565b611dfe565b348015610a4857600080fd5b506104db610a573660046167a9565b61269c565b348015610a6857600080fd5b506104db6126ae565b348015610a7d57600080fd5b50610a866126bb565b6040516104e89190616acf565b348015610a9f57600080fd5b506104db6127a7565b348015610ab457600080fd5b506104db6127ac565b348015610ac957600080fd5b506104db611bbc565b348015610ade57600080fd5b506105286127b2565b348015610af357600080fd5b50610555610b023660046168f3565b6127b8565b348015610b1357600080fd5b506104db6127c5565b348015610b2857600080fd5b506104db612804565b348015610b3d57600080fd5b506104db612810565b348015610b5257600080fd5b50610528612816565b348015610b6757600080fd5b506104db610d12565b348015610b7c57600080fd5b506104c461281c565b348015610b9157600080fd5b506104db6129cb565b348015610ba657600080fd5b50610577610bb5366004616858565b6129d1565b348015610bc657600080fd5b506104c4610bd53660046167a9565b612b57565b348015610be657600080fd5b50610506612c5f565b6104c4610bfd3660046167a9565b612c64565b348015610c0e57600080fd5b506104db612fcc565b348015610c2357600080fd5b50610528612fd2565b348015610c3857600080fd5b5061067b611dbd565b348015610c4d57600080fd5b50610528612fd8565b348015610c6257600080fd5b50610c76610c713660046168f3565b612fde565b6040516104e89392919061769a565b348015610c9157600080fd5b506105286130a0565b6000610ca533611c5e565b9050600b8181548110610cb457fe5b600091825260209091206001601690920201015460ff16610cf05760405162461bcd60e51b8152600401610ce79061733c565b60405180910390fd5b6000610cfa6127c5565b9050610d073383836130a6565b505050565b60095481565b606481565b61200181565b60005460609060ff16610d425760405162461bcd60e51b8152600401610ce790616d96565b3361200014610d635760405162461bcd60e51b8152600401610ce7906174d5565b600b54610e2157610d72616495565b60015460005b81811015610e1d57600b805460018101825560009190915283516000805160206177448339815191526016909202918201908155602080860151600080516020617d738339815191528401805460ff1916911515919091179055604086015180518794610df9936000805160206177648339815191529091019201906164c4565b506060820151610e0f906003830190601361653e565b505050806001019050610d78565b5050505b610e2961656b565b6000610e6a85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329292505050565b9150915080610e8657610e7d606461344e565b92505050610f4e565b815160009060ff16610eab57610ea4836020015184604001516134af565b9050610f1a565b825160ff1660011415610f1657826020015151600114610ef057600080516020617724833981519152604051610ee0906171f5565b60405180910390a1506067610f11565b610ea48360200151600081518110610f0457fe5b6020026020010151614103565b610f1a565b5060655b63ffffffff8116610f3f5750506040805160008152602081019091529150610f4e9050565b610f488161344e565b93505050505b9392505050565b60075460ff1681565b60035481565b606881565b334114610f885760405162461bcd60e51b8152600401610ce790617524565b6010544311610fa95760405162461bcd60e51b8152600401610ce790616ef2565b3a15610fc75760405162461bcd60e51b8152600401610ce79061727b565b60005460ff16610fe95760405162461bcd60e51b8152600401610ce790616d96565b60006110023168056bc75e2d63100000811115611020576110198168056bc75e2d6310000063ffffffff61427a16565b9150611027565b50506112a6565b6040516213929d60e11b8152611002906227253a9061104c9030908690600401616a74565b602060405180830381600087803b15801561106657600080fd5b505af115801561107a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109e919061690b565b9150816110ac5750506112a6565b6000805b848110156110da578585828181106110c457fe5b90506020020135820191508060010190506110b0565b50806110e8575050506112a6565b6000806000805b8981101561129e578489898381811061110457fe5b9050602002013588028161111457fe5b0493508a8a8281811061112357fe5b905060200201602081019061113891906167a9565b6001600160a01b0381166000908152600460205260409020549093509150811561125457600060018084038154811061116d57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff16156111da57836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d85866040516111cd9190617691565b60405180910390a261124e565b6003546111ed908663ffffffff6142bc16565b6003908155810154611205908663ffffffff6142bc16565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611245908890617691565b60405180910390a25b50611296565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d858560405161128d9190617691565b60405180910390a25b6001016110ef565b505050505050505b5050436010555050565b60015460009082106112c45750600061137a565b60006001600160a01b0316600183815481106112dc57fe5b60009182526020909120600490910201546001600160a01b0316148061130c5750600854158061130c5750600a54155b8061131b575060085460095410155b8061132c575061132a8261137f565b155b8061135557506000600b838154811061134157fe5b906000526020600020906016020160000154115b80611369575060016113656126bb565b5111155b156113765750600061137a565b5060015b919050565b60015460009082106113935750600061137a565b600b5482106113d057600182815481106113a957fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615905061137a565b600182815481106113dd57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615801561142a5750600b828154811061141157fe5b600091825260209091206001601690920201015460ff16155b92915050565b33611001146114515760405162461bcd60e51b8152600401610ce790617639565b600b5461150f57611460616495565b60015460005b8181101561150b57600b805460018101825560009190915283516000805160206177448339815191526016909202918201908155602080860151600080516020617d738339815191528401805460ff19169115159190911790556040860151805187946114e7936000805160206177648339815191529091019201906164c4565b5060608201516114fd906003830190601361653e565b505050806001019050611466565b5050505b6001600160a01b038116600090815260046020526040902054806115335750611586565b6001810390506000600b828154811061154857fe5b600091825260209091206001601690920201015460ff16905061156b83836142e1565b80156115745750805b15610d07576009805460001901905550505b50565b60015460609081906000805b828110156115dc57600181815481106115aa57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166115d4576001909101905b600101611595565b50606081604051908082528060200260200182016040528015611609578160200160208202803683370190505b50905060608260405190808252806020026020018201604052801561164257816020015b606081526020019060019003908161162d5790505b50600b54600094509091508414156117bd5760005b848110156117b7576001818154811061166c57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166117af576001818154811061169c57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106116c757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b81815481106116f457fe5b600091825260209182902060026016909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561178c5780601f106117615761010080835404028352916020019161178c565b820191906000526020600020905b81548152906001019060200180831161176f57829003601f168201915b505050505082858151811061179d57fe5b60209081029190910101526001909301925b600101611657565b50611859565b60005b8481101561185757600181815481106117d557fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661184f576001818154811061180557fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061183057fe5b6001600160a01b03909216602092830291909101909101526001909301925b6001016117c0565b505b909450925050505b9091565b61271081565b600181565b61100181565b60085481565b603881565b600881565b600e54600c5460609182918061189a575060155b60606118a46126bb565b905060606118b182614694565b9050828251116118c8579094509250611861915050565b838383510310156118da578282510393505b83156119105760c843046118f683838388880360008a8a614802565b61190e8383838888038989038a8b8b8b510301614802565b505b60608360405190808252806020026020018201604052801561193c578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561197557816020015b60608152602001906001900390816119605790505b50905060005b858110156119f65784818151811061198f57fe5b60200260200101518382815181106119a357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106119cf57fe5b60200260200101518282815181106119e357fe5b602090810291909101015260010161197b565b509096509450505050509091565b60065481565b61200081565b6001600160a01b03811660009081526004602052604081205480611a3857600091505061137a565b60001901610f4e8161137f565b6001600160a01b03811660009081526004602052604081205480611a6d57600091505061137a565b600180820381548110611a7c57fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b600f5481565b60128181548110611ab357fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815293509091830182828015611b445780601f10611b1957610100808354040283529160200191611b44565b820191906000526020600020905b815481529060010190602001808311611b2757829003601f168201915b505050505081565b60105481565b60018181548110611b5f57fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b606681565b3361200014611c035760405162461bcd60e51b8152600401610ce7906174d5565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051611c36939291906176da565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6001600160a01b03811660009081526004602052604081205480611c945760405162461bcd60e51b8152600401610ce79061745d565b6000190192915050565b600b54611d5c57611cad616495565b60015460005b81811015611d5857600b805460018101825560009190915283516000805160206177448339815191526016909202918201908155602080860151600080516020617d738339815191528401805460ff1916911515919091179055604086015180518794611d34936000805160206177648339815191529091019201906164c4565b506060820151611d4a906003830190601361653e565b505050806001019050611cb3565b5050505b600854611d695760036008555b600a54611d76576002600a555b6000611d8133611c5e565b9050611d8c816112b0565b611da85760405162461bcd60e51b8152600401610ce7906171b2565b6115863382614959565b600981565b61100781565b600381565b60c881565b61100681565b6040518061062001604052806105ef81526020016177846105ef913981565b60005460ff1681565b6402540be40081565b60005460ff16611e205760405162461bcd60e51b8152600401610ce790616d96565b3361100714611e415760405162461bcd60e51b8152600401610ce7906172a9565b611eab84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b602082015291506149f19050565b15611f485760208114611ed05760405162461bcd60e51b8152600401610ce790617417565b604080516020601f8401819004810282018101909252828152600091611f0e91858580838501838280828437600092019190915250614a4a92505050565b905060648110158015611f245750620186a08111155b611f405760405162461bcd60e51b8152600401610ce7906170a2565b600255612659565b611fa884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b602082015291506149f19050565b156120375760208114611fcd5760405162461bcd60e51b8152600401610ce790616c1c565b604080516020601f840181900481028201810190925282815260009161200b91858580838501838280828437600092019190915250614a4a92505050565b905061271081111561202f5760405162461bcd60e51b8152600401610ce790616f34565b600655612659565b6120a184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b602082015291506149f19050565b1561213b57602081146120c65760405162461bcd60e51b8152600401610ce790616c53565b604080516020601f840181900481028201810190925282815260009161210491858580838501838280828437600092019190915250614a4a92505050565b600c5490915080612113575060155b8082106121325760405162461bcd60e51b8152600401610ce790616fa7565b50600855612659565b6121a484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b602082015291506149f19050565b1561223d57602081146121c95760405162461bcd60e51b8152600401610ce790616d1c565b604080516020601f840181900481028201810190925282815260009161220791858580838501838280828437600092019190915250614a4a92505050565b90506000811180156122195750600a81105b6122355760405162461bcd60e51b8152600401610ce7906175b5565b600a55612659565b6122b184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e6469646174657300000000000000602082015291506149f19050565b1561234057602081146122d65760405162461bcd60e51b8152600401610ce790616cd0565b604080516020601f840181900481028201810190925282815260009161231491858580838501838280828437600092019190915250614a4a92505050565b9050600d548111156123385760405162461bcd60e51b8152600401610ce790617118565b600e55612659565b6123a984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b602082015291506149f19050565b1561242b57602081146123ce5760405162461bcd60e51b8152600401610ce7906172f7565b604080516020601f840181900481028201810190925282815260009161240c91858580838501838280828437600092019190915250614a4a92505050565b600d819055600e5490915081101561242557600d54600e555b50612659565b61248f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b602082015291506149f19050565b1561253d57602081146124b45760405162461bcd60e51b8152600401610ce790616d61565b604080516020601f84018190048102820181019092528281526000916124f291858580838501838280828437600092019190915250614a4a92505050565b9050600081116125145760405162461bcd60e51b8152600401610ce790616e04565b60648111156125355760405162461bcd60e51b8152600401610ce790616e4c565b600c55612659565b6125a584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601181527073797374656d526577617264526174696f60781b602082015291506149f19050565b1561264157602081146125ca5760405162461bcd60e51b8152600401610ce790617571565b604080516020601f840181900481028201810190925282815260009161260891858580838501838280828437600092019190915250614a4a92505050565b90506001811015801561261d57506127108111155b6126395760405162461bcd60e51b8152600401610ce79061704f565b600f55612659565b60405162461bcd60e51b8152600401610ce790617612565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a8484848460405161268e9493929190616bea565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b828110156126ea576126d68161137f565b156126e2578160010191505b6001016126c5565b50606081604051908082528060200260200182016040528015612717578160200160208202803683370190505b5090506000915060005b8381101561279e576127328161137f565b15612796576001818154811061274457fe5b600091825260209091206004909102015482516001600160a01b039091169083908590811061276f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b600101612721565b50925050505b90565b601581565b61027181565b61100281565b60138181548110611ab357fe5b60006127cf6126bb565b519050600080600c54116127e45760156127e8565b600c545b9050808211156127f6578091505b8161280057600191505b5090565b67016345785d8a000081565b60055481565b61100381565b60005460ff161561283f5760405162461bcd60e51b8152600401610ce7906173a9565b61284761656b565b600061286d6040518061062001604052806105ef81526020016177846105ef9139613292565b915091508061288e5760405162461bcd60e51b8152600401610ce790617494565b60005b8260200151518110156129b3576001836020015182815181106128b057fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a09093015160039093019290925591860151805191850193918590811061298657fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101612891565b50506103e8600255506000805460ff19166001179055565b600d5481565b601354600090815b81811015612ada57612ac285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601380549092508591508110612a2a57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015612ab85780601f10612a8d57610100808354040283529160200191612ab8565b820191906000526020600020905b815481529060010190602001808311612a9b57829003601f168201915b5050505050614a4f565b15612ad25760019250505061142a565b6001016129d9565b5060125460005b81811015612b4b57612b3286868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601280549092508591508110612a2a57fe5b15612b43576001935050505061142a565b600101612ae1565b50600095945050505050565b3361100114612b785760405162461bcd60e51b8152600401610ce790617639565b600b54612c3657612b87616495565b60015460005b81811015612c3257600b805460018101825560009190915283516000805160206177448339815191526016909202918201908155602080860151600080516020617d738339815191528401805460ff1916911515919091179055604086015180518794612c0e936000805160206177648339815191529091019201906164c4565b506060820151612c24906003830190601361653e565b505050806001019050612b8d565b5050505b6000612c4182614ab3565b9050612c4c816112b0565b15612c5b57612c5b8282614959565b5050565b606581565b334114612c835760405162461bcd60e51b8152600401610ce790617524565b60005460ff16612ca55760405162461bcd60e51b8152600401610ce790616d96565b60003411612cc55760405162461bcd60e51b8152600401610ce7906170e9565b3a15612ce35760405162461bcd60e51b8152600401610ce79061727b565b6001600160a01b03811660009081526004602052604090205460145434919060ff16612d2357610271600f556103e86006556014805460ff191660011790555b6000612d4c612710612d40600f5486614c5690919063ffffffff16565b9063ffffffff614c9016565b90508015612dbc576040516110029082156108fc029083906000818181858888f19350505050158015612d83573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d81604051612db39190617691565b60405180910390a15b600083118015612dce57506000600654115b15612e74576000612df0612710612d4060065487614c5690919063ffffffff16565b90508015612e725760405161dead9082156108fc029083906000818181858888f19350505050158015612e27573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee581604051612e579190617691565b60405180910390a1612e6f848263ffffffff61427a16565b93505b505b612e84838263ffffffff61427a16565b92508115612f84576000600180840381548110612e9d57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615612f0a57846001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b485604051612efd9190617691565b60405180910390a2612f7e565b600354612f1d908563ffffffff6142bc16565b6003908155810154612f35908563ffffffff6142bc16565b60038201556040516001600160a01b038616907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc05590612f75908790617691565b60405180910390a25b50612fc6565b836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b484604051612fbd9190617691565b60405180910390a25b50505050565b600e5481565b61100081565b61dead81565b600b8181548110612feb57fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff909116949192918301828280156130965780601f1061306b57610100808354040283529160200191613096565b820191906000526020600020905b81548152906001019060200180831161307957829003601f168201915b5050505050905083565b61100481565b6000600a54600014806130b7575081155b806130c25750600954155b156130cf57506000610f4e565b6009600081546001900391905081905550600061311a600a54612d4085612d40600b89815481106130fc57fe5b6000918252602090912060169091020154439063ffffffff61427a16565b90506000600b858154811061312b57fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b15801561319057600080fd5b505afa1580156131a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c89190616923565b9150915060009350808310613242576131e187876142e1565b506040516305bfb49960e41b815261100190635bfb499090613207908a90600401616a60565b600060405180830381600087803b15801561322157600080fd5b505af1158015613235573d6000803e3d6000fd5b5050505060019350613254565b8183106132545761325287614ab3565b505b6040516001600160a01b038816907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050509392505050565b61329a61656b565b60006132a461656b565b6132ac61658f565b6132bd6132b886614cd2565b614cf7565b90506000805b6132cc83614d41565b1561344057806132f1576132e76132e284614d62565b614db0565b60ff168452613438565b806001141561343357606061330d61330885614d62565b614e30565b9050805160405190808252806020026020018201604052801561334a57816020015b6133376165af565b81526020019060019003908161332f5790505b508560200181905250805160405190808252806020026020018201604052801561338857816020015b60608152602001906001900390816133735790505b50604086015260005b8151811015613428576133a26165af565b606060006133c28585815181106133b557fe5b6020026020010151614f01565b925092509250806133e2578860009a509a50505050505050505050613449565b82896020015185815181106133f357fe5b6020026020010181905250818960400151858151811061340f57fe5b6020026020010181905250505050806001019050613391565b506001925050613438565b613440565b6001016132c3565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b606081526020019060019003908161346857905050905061348e8363ffffffff1661501b565b8160008151811061349b57fe5b6020026020010181905250610f4e8161502e565b60006064835111156134e6576000805160206177248339815191526040516134d690616ea9565b60405180910390a150606661142a565b60005b83518110156135845760005b8181101561357b5784818151811061350957fe5b6020026020010151600001516001600160a01b031685838151811061352a57fe5b6020026020010151600001516001600160a01b031614156135735760008051602061772483398151915260405161356090617004565b60405180910390a160669250505061142a565b6001016134f5565b506001016134e9565b5060608061359285856150b8565b60015491935091506000908190815b818110156136175767016345785d8a0000600182815481106135bf57fe5b906000526020600020906004020160030154106135e15783600101935061360f565b6000600182815481106135f057fe5b906000526020600020906004020160030154111561360f578260010192505b6001016135a1565b50606083604051908082528060200260200182016040528015613644578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015613673578160200160208202803683370190505b5090506060856040519080825280602002602001820160405280156136a2578160200160208202803683370190505b5090506060866040519080825280602002602001820160405280156136d1578160200160208202803683370190505b5090506000606087604051908082528060200260200182016040528015613702578160200160208202803683370190505b509050606088604051908082528060200260200182016040528015613731578160200160208202803683370190505b509050600099506000985060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561377957600080fd5b505afa15801561378d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b1919061690b565b905067016345785d8a00008111156137fc576000805160206177248339815191526040516137de90617368565b60405180910390a160689d505050505050505050505050505061142a565b60005b89811015613a6d5767016345785d8a00006001828154811061381d57fe5b906000526020600020906004020160030154106139a2576001818154811061384157fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898d8151811061387257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be400600183815481106138a757fe5b906000526020600020906004020160030154816138c057fe5b06600183815481106138ce57fe5b9060005260206000209060040201600301540390506138f6838261427a90919063ffffffff16565b898e8151811061390257fe5b6020026020010181815250506001828154811061391b57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878e8151811061394c57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888e8151811061397957fe5b6020908102919091010152613994868263ffffffff6142bc16565b95508c6001019c5050613a65565b6000600182815481106139b157fe5b9060005260206000209060040201600301541115613a6557600181815481106139d657fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848c81518110613a0757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060018181548110613a3457fe5b906000526020600020906004020160030154838c81518110613a5257fe5b6020026020010181815250508a6001019a505b6001016137ff565b5060008415613ce3576002546040516303702b2960e51b815261100491636e056520918891613aa7918e918e918d91420190600401616b52565b6020604051808303818588803b158015613ac057600080fd5b505af193505050508015613af1575060408051601f3d908101601f19168201909252613aee91810190616838565b60015b613c68576040516000815260443d1015613b0d57506000613ba8565b60046000803e60005160e01c6308c379a08114613b2e576000915050613ba8565b60043d036004833e81513d60248201116001600160401b0382111715613b5957600092505050613ba8565b80830180516001600160401b03811115613b7a576000945050505050613ba8565b8060208301013d8601811115613b9857600095505050505050613ba8565b601f01601f191660405250925050505b80613bb35750613bf5565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051613be79190616bd7565b60405180910390a250613c63565b3d808015613c1f576040519150601f19603f3d011682016040523d82523d6000602084013e613c24565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051613c599190616bd7565b60405180910390a2505b613ce3565b8015613caa577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051613c9d9190617691565b60405180910390a1613ce1565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051613cd890616c99565b60405180910390a25b505b8015613e995760005b8751811015613e97576000888281518110613d0357fe5b60200260200101519050600060018281548110613d1c57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc9185908110613d4d57fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f1935050505090508015613e095760018281548110613d8e57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d9185908110613ddd57fe5b906000526020600020906004020160030154604051613dfc9190617691565b60405180910390a2613e8d565b60018281548110613e1657fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d9185908110613e6557fe5b906000526020600020906004020160030154604051613e849190617691565b60405180910390a25b5050600101613cec565b505b835115613fe35760005b8451811015613fe1576000858281518110613eba57fe5b60200260200101516001600160a01b03166108fc868481518110613eda57fe5b60200260200101519081150290604051600060405180830381858888f1935050505090508015613f7057858281518110613f1057fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d868481518110613f4e57fe5b6020026020010151604051613f639190617691565b60405180910390a2613fd8565b858281518110613f7c57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d868481518110613fba57fe5b6020026020010151604051613fcf9190617691565b60405180910390a25b50600101613ea3565b505b505050505050505050505050600047111561405f577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d476040516140279190617691565b60405180910390a1604051611002904780156108fc02916000818181858888f1935050505015801561405d573d6000803e3d6000fd5b505b6000600381905560055581511561407a5761407a82826152f1565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156140b757600080fd5b505af11580156140cb573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b80516001600160a01b0316600090815260046020526040812054801580614154575060018082038154811061413457fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b1561419a5782516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a2600091505061137a565b6001546005546000198201118015906141f05784516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000935050505061137a565b60058054600190810190915580548190600019860190811061420e57fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915585516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a2506000949350505050565b6000610f4e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615aab565b600082820183811015610f4e5760405162461bcd60e51b8152600401610ce790616dcd565b600080600183815481106142f157fe5b9060005260206000209060040201600301549050600060018080549050039050600161431b6126bb565b51116143505760006001858154811061433057fe5b90600052602060002090600402016003018190555060009250505061142a565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a70836040516143899190617691565b60405180910390a26001600160a01b038516600090815260046020526040812055835b6001546000190181101561457657600181600101815481106143ca57fe5b9060005260206000209060040201600182815481106143e557fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b8054909183019081106144a657fe5b9060005260206000209060160201600b82815481106144c157fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff19909216919091179055600280840180546145189383860193908216156101000260001901909116046165e4565b5061452b60038281019084016013616659565b5090505080600101600460006001848154811061454457fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020556001016143ac565b50600180548061458257fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b8054806145d557fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906146076002830182616683565b6146156003830160006166c7565b50509055600081838161462457fe5b04905080156146885760015460005b8181101561468557826001828154811061464957fe5b906000526020600020906004020160030154016001828154811061466957fe5b6000918252602090912060036004909202010155600101614633565b50505b50600195945050505050565b6001548151604080518281526020808402820101909152606092919083908280156146d357816020015b60608152602001906001900390816146be5790505b50600b5490915083146146ea57925061137a915050565b60005b828110156147f957600b60016004600089858151811061470957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054038154811061473d57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156147d55780601f106147aa576101008083540402835291602001916147d5565b820191906000526020600020905b8154815290600101906020018083116147b857829003601f168201915b50505050508282815181106147e657fe5b60209081029190910101526001016146ed565b50949350505050565b60005b8281101561494f5760008287838801604051602001614825929190616a52565b6040516020818303038152906040528051906020012060001c8161484557fe5b06905080850182870114614946576000898388018151811061486357fe5b602002602001015190506060898489018151811061487d57fe5b602002602001015190508a8388018151811061489557fe5b60200260200101518b858a01815181106148ab57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b848901815181106148da57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050898388018151811061490857fe5b60200260200101518a858a018151811061491e57fe5b6020026020010181905250808a8489018151811061493857fe5b602002602001018190525050505b50600101614805565b5050505050505050565b600980546001908101909155600b80548390811061497357fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b82815481106149a957fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b600081604051602001614a049190616a36565b6040516020818303038152906040528051906020012083604051602001614a2b9190616a36565b6040516020818303038152906040528051906020012014905092915050565b015190565b815181516000916001918114808314614a6b5760009250614aa9565b600160208701838101602088015b600284838510011415614aa4578051835114614a985760009650600093505b60209283019201614a79565b505050505b5090949350505050565b6001600160a01b03811660009081526004602052604081205480614adc5750600019905061137a565b600181039050600060018281548110614af157fe5b9060005260206000209060040201600301549050600060018381548110614b1457fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d90614b6d908590617691565b60405180910390a280614b855782935050505061137a565b6000818381614b9057fe5b0490508015614c4c5760005b84811015614bee578160018281548110614bb257fe5b9060005260206000209060040201600301540160018281548110614bd257fe5b6000918252602090912060036004909202010155600101614b9c565b50600180549085015b81811015614c49578260018281548110614c0d57fe5b9060005260206000209060040201600301540160018281548110614c2d57fe5b6000918252602090912060036004909202010155600101614bf7565b50505b5091949350505050565b600082614c655750600061142a565b82820282848281614c7257fe5b0414610f4e5760405162461bcd60e51b8152600401610ce79061723a565b6000610f4e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615ad7565b614cda6166d6565b506040805180820190915281518152602082810190820152919050565b614cff61658f565b614d0882615b0e565b614d1157600080fd5b6000614d208360200151615b48565b60208085015160408051808201909152868152920190820152915050919050565b6000614d4b6166d6565b505080518051602091820151919092015191011190565b614d6a6166d6565b614d7382614d41565b614d7c57600080fd5b60208201516000614d8c82615bab565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590614dc557508151602110155b614dce57600080fd5b6000614ddd8360200151615b48565b90508083600001511015614e035760405162461bcd60e51b8152600401610ce7906173e0565b8251602080850151830180519284900392918310156147f957506020919091036101000a90049392505050565b6060614e3b82615b0e565b614e4457600080fd5b6000614e4f83615c8c565b9050606081604051908082528060200260200182016040528015614e8d57816020015b614e7a6166d6565b815260200190600190039081614e725790505b5090506000614e9f8560200151615b48565b60208601510190506000805b84811015614ef657614ebc83615bab565b9150604051806040016040528083815260200184815250848281518110614edf57fe5b602090810291909101015291810191600101614eab565b509195945050505050565b614f096165af565b60606000614f156165af565b6060614f1f61658f565b614f2887614cf7565b90506000805b614f3783614d41565b1561500c5780614f6257614f52614f4d84614d62565b615ce8565b6001600160a01b03168552615004565b8060011415614f8a57614f77614f4d84614d62565b6001600160a01b03166020860152615004565b8060021415614fb257614f9f614f4d84614d62565b6001600160a01b03166040860152615004565b8060031415614fde57614fc76132e284614d62565b6001600160401b0316606086015260019150615004565b8060041415614fff57614ff8614ff384614d62565b615d02565b9350615004565b61500c565b600101614f2e565b50929791965091945092505050565b606061142a61502983615d72565b615e58565b606081516000141561504f575060408051600081526020810190915261137a565b60608260008151811061505e57fe5b602002602001015190506000600190505b835181101561509f576150958285838151811061508857fe5b6020026020010151615eaa565b915060010161506f565b50610f4e6150b2825160c060ff16615f27565b82615eaa565b6060806000808080806150c96127c5565b6001549091505b80156151d757600181039250600b83815481106150e957fe5b600091825260209091206001601690920201015460ff16615109576151ce565b6001838154811061511657fe5b60009182526020909120600490910201546001600160a01b0316945061513d8584846130a6565b9350831580615150575060018a51038610155b1561515a576151ce565b60005b8a518110156151cc57856001600160a01b03168b828151811061517c57fe5b6020026020010151600001516001600160a01b031614156151c45760018b82815181106151a557fe5b60209081029190910101519015156080909101526001909601956151cc565b60010161515d565b505b600019016150d0565b508489510360405190808252806020026020018201604052801561521557816020015b6152026165af565b8152602001906001900390816151fa5790505b5096508489510360405190808252806020026020018201604052801561524f57816020015b606081526020019060019003908161523a5790505b5095506000915060005b89518110156152e35789818151811061526e57fe5b6020026020010151608001516152db5789818151811061528a57fe5b602002602001015188848151811061529e57fe5b60200260200101819052508881815181106152b557fe5b60200260200101518784815181106152c957fe5b60200260200101819052508260010192505b600101615259565b5050505050505b9250929050565b600154825160005b8281101561540e57600161530b6165af565b6001838154811061531857fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156153e2578781815181106153a857fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b031614156153da57600092506153e2565b600101615394565b5081156154045780516001600160a01b03166000908152600460205260408120555b50506001016152f9565b50808211156154cd57805b828110156154cb57600180548061542c57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061547f57fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906154b16002830182616683565b6154bf6003830160006166c7565b50509055600101615419565b505b60008183106154dc57816154de565b825b905060005b8181101561584d576155908682815181106154fa57fe5b60200260200101516001838154811061550f57fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152615ff9565b6157445780600101600460008884815181106155a857fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055508581815181106155e457fe5b6020026020010151600182815481106155f957fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015584518590829081106156b457fe5b6020026020010151600b82815481106156c957fe5b906000526020600020906016020160020190805190602001906156ed9291906164c4565b506000600b82815481106156fd57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b80548390811061572e57fe5b6000918252602090912060169091020155615845565b6157d585828151811061575357fe5b6020026020010151600b838154811061576857fe5b600091825260209182902060026016909202018101805460408051601f600019610100600186161502019093169490940491820185900485028401850190528083529192909190830182828015612ab85780601f10612a8d57610100808354040283529160200191612ab8565b615820578481815181106157e557fe5b6020026020010151600b82815481106157fa57fe5b9060005260206000209060160201600201908051906020019061581e9291906164c4565b505b60006001828154811061582f57fe5b9060005260206000209060040201600301819055505b6001016154e3565b5082821115615a255761585e616495565b835b83811015615a225785818151811061587457fe5b60200260200101518260400181905250600187828151811061589257fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b8054928301815590935284516016909102600080516020617744833981519152810191825585830151600080516020617d738339815191528201805491151560ff19909216919091179055928501518051869492936159c893600080516020617764833981519152019201906164c4565b5060608201516159de906003830190601361653e565b50505080600101600460008984815181106159f557fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101615860565b50505b615a2d61607a565b615a3561625c565b6000600981905560015493505b83811015615aa3576000600b8281548110615a5957fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b805483908110615a8a57fe5b6000918252602090912060169091020155600101615a42565b505050505050565b60008184841115615acf5760405162461bcd60e51b8152600401610ce79190616bd7565b505050900390565b60008183615af85760405162461bcd60e51b8152600401610ce79190616bd7565b506000838581615b0457fe5b0495945050505050565b8051600090615b1f5750600061137a565b6020820151805160001a9060c0821015615b3e5760009250505061137a565b5060019392505050565b8051600090811a6080811015615b6257600091505061137a565b60b8811080615b7d575060c08110801590615b7d575060f881105b15615b8c57600191505061137a565b60c0811015615ba05760b51901905061137a565b60f51901905061137a565b80516000908190811a6080811015615bc65760019150615c85565b60b8811015615bdb57607e1981019150615c85565b60c0811015615c2c57600060b78203600186019550806020036101000a865104915060018101820193505080831015615c265760405162461bcd60e51b8152600401610ce790617187565b50615c85565b60f8811015615c415760be1981019150615c85565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615c835760405162461bcd60e51b8152600401610ce790617187565b505b5092915050565b8051600090615c9d5750600061137a565b60008090506000615cb18460200151615b48565b602085015185519181019250015b80821015615cdf57615cd082615bab565b82019150826001019250615cbf565b50909392505050565b8051600090601514615cf957600080fd5b61142a82614db0565b8051606090615d1057600080fd5b6000615d1f8360200151615b48565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015615d56576020820181803683370190505b50905060008160200190506147f984876020015101828561644a565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416615db657506018615dda565b6fffffffffffffffffffffffffffffffff198416615dd657506010615dda565b5060005b6020811015615e1057818181518110615def57fe5b01602001516001600160f81b03191615615e0857615e10565b600101615dda565b60008160200390506060816040519080825280601f01601f191660200182016040528015615e45576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015615e8a5750607f60f81b82600081518110615e7857fe5b01602001516001600160f81b03191611155b15615e9657508061137a565b61142a615ea88351608060ff16615f27565b835b6060806040519050835180825260208201818101602087015b81831015615edb578051835260209283019201615ec3565b50855184518101855292509050808201602086015b81831015615f08578051835260209283019201615ef0565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310615f515760405162461bcd60e51b8152600401610ce790616f7f565b60408051600180825281830190925260609160208201818036833701905050905060378411615fab5782840160f81b81600081518110615f8d57fe5b60200101906001600160f81b031916908160001a905350905061142a565b6060615fb685615d72565b90508381510160370160f81b82600081518110615fcf57fe5b60200101906001600160f81b031916908160001a905350615ff08282615eaa565b95945050505050565b805182516000916001600160a01b039182169116148015616033575081602001516001600160a01b031683602001516001600160a01b0316145b8015616058575081604001516001600160a01b031683604001516001600160a01b0316145b8015610f4e5750506060908101519101516001600160401b0390811691161490565b601254601354808211156160c557805b828110156160c357601280548061609d57fe5b6001900381819060005260206000200160006160b99190616683565b905560010161608a565b505b60008183106160d457816160d6565b825b905060005b818110156161ee57616193601282815481106160f357fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156161815780601f1061615657610100808354040283529160200191616181565b820191906000526020600020905b81548152906001019060200180831161616457829003601f168201915b505050505060138381548110612a2a57fe5b6161e657601381815481106161a457fe5b90600052602060002001601282815481106161bb57fe5b9060005260206000200190805460018160011615610100020316600290046161e49291906165e4565b505b6001016160db565b5082821115610d0757825b82811015612fc65760126013828154811061621057fe5b60009182526020808320845460018181018755958552919093209290910180546162539493909201929091600261010092821615929092026000190116046165e4565b506001016161f9565b601354600b54808211156162a757805b828110156162a557601380548061627f57fe5b60019003818190600052602060002001600061629b9190616683565b905560010161626c565b505b60008183106162b657816162b8565b825b905060005b818110156163d757616375601382815481106162d557fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156163635780601f1061633857610100808354040283529160200191616363565b820191906000526020600020905b81548152906001019060200180831161634657829003601f168201915b5050505050600b838154811061576857fe5b6163cf57600b818154811061638657fe5b9060005260206000209060160201600201601382815481106163a457fe5b9060005260206000200190805460018160011615610100020316600290046163cd9291906165e4565b505b6001016162bd565b5082821115610d0757825b82811015612fc6576013600b82815481106163f957fe5b600091825260208083208454600180820187559585529190932060169290920290920160029081018054616441959390940193909260001990821615610100020116046165e4565b506001016163e2565b8061645457610d07565b5b60208110616474578251825260209283019290910190601f1901616455565b915181516020939093036101000a6000190180199091169216919091179052565b604051806080016040528060008152602001600015158152602001606081526020016164bf6166f0565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061650557805160ff1916838001178555616532565b82800160010185558215616532579182015b82811115616532578251825591602001919060010190616517565b5061280092915061670f565b82601381019282156165325791602002820182811115616532578251825591602001919060010190616517565b6040518060600160405280600060ff16815260200160608152602001606081525090565b60405180604001604052806165a26166d6565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061661d5780548555616532565b8280016001018555821561653257600052602060002091601f016020900482015b8281111561653257825482559160010191906001019061663e565b8260138101928215616532579182018281111561653257825482559160010191906001019061663e565b50805460018160011615610100020316600290046000825580601f106166a95750611586565b601f016020900490600052602060002090810190611586919061670f565b5061158690601381019061670f565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b6127a491905b808211156128005760008155600101616715565b60008083601f84011261673a578182fd5b5081356001600160401b03811115616750578182fd5b60208301915083602080830285010111156152ea57600080fd5b60008083601f84011261677b578182fd5b5081356001600160401b03811115616791578182fd5b6020830191508360208285010111156152ea57600080fd5b6000602082840312156167ba578081fd5b81356001600160a01b0381168114610f4e578182fd5b600080600080604085870312156167e5578283fd5b84356001600160401b03808211156167fb578485fd5b61680788838901616729565b9096509450602087013591508082111561681f578384fd5b5061682c87828801616729565b95989497509550505050565b600060208284031215616849578081fd5b81518015158114610f4e578182fd5b6000806020838503121561686a578182fd5b82356001600160401b0381111561687f578283fd5b61688b8582860161676a565b90969095509350505050565b600080600080604085870312156168ac578384fd5b84356001600160401b03808211156168c2578586fd5b6168ce8883890161676a565b909650945060208701359150808211156168e6578384fd5b5061682c8782880161676a565b600060208284031215616904578081fd5b5035919050565b60006020828403121561691c578081fd5b5051919050565b60008060408385031215616935578182fd5b505080516020909101519092909150565b60008060006040848603121561695a578283fd5b833560ff8116811461696a578384fd5b925060208401356001600160401b03811115616984578283fd5b6169908682870161676a565b9497909650939450505050565b6000815180845260208085019450808401835b838110156169d55781516001600160a01b0316875295820195908201906001016169b0565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452616a228160208601602086016176f7565b601f01601f19169290920160200192915050565b60008251616a488184602087016176f7565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b600060208252610f4e602083018461699d565b600060408252616af5604083018561699d565b602083820381850152818551808452828401915082838202850101838801865b83811015616b4357601f19878403018552616b31838351616a0a565b94860194925090850190600101616b15565b50909998505050505050505050565b600060808252616b65608083018761699d565b828103602084810191909152865180835287820192820190845b81811015616b9b57845183529383019391830191600101616b7f565b50508481036040860152616baf818861699d565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b600060208252610f4e6020830184616a0a565b600060408252616bfe6040830186886169e0565b8281036020840152616c118185876169e0565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252602b908201527f746865206275726e526174696f206d757374206265206e6f206772656174657260408201526a0207468616e2031303030360ac1b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526033908201527f7468652073797374656d526577617264526174696f206d757374206265206e6f60408201527202067726561746572207468616e20313030303606c1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526024908201527f6c656e677468206f662073797374656d526577617264526174696f206d69736d6040820152630c2e8c6d60e31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b61ffff91909116815260200190565b90815260200190565b6000848252831515602083015260606040830152615ff06060830184616a0a565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff8516825260406020830152615ff06040830184866169e0565b60005b838110156177125781810151838201526020016176fa565b83811115612fc6575050600091015256fe70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb20175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbbf905ec80f905e8f846942a7cdd959bfe8d9487b2a43b33565295a698f7e294b6a7edd747c0554875d3fc531d19ba1497992c5e941ff80f3f7f110ffd8920a3ac38fdef318fe94a3f86048c27395000f846946488aa4d1955ee33403f8ccb1d4de5fb97c7ade294220f003d8bdfaadf52aa1e55ae4cc485e6794875941a87e90e440a39c99aa9cb5cea0ad6a3f0b2407b86048c27395000f846949ef9f4360c606c7ab4db26b016007d3ad0ab86a0946103af86a874b705854033438383c82575f25bc29418e2db06cbff3e3c5f856410a1838649e760175786048c27395000f84694ee01c3b1283aa067c58eab4709f85e99d46de5fe94ee4b9bfb1871c64e2bcabb1dc382dc8b7c4218a29415904ab26ab0e99d70b51c220ccdcccabee6e29786048c27395000f84694685b1ded8013785d6623cc18d214320b6bb6475994a20ef4e5e4e7e36258dbf51f4d905114cb1b34bc9413e39085dc88704f4394d35209a02b1a9520320c86048c27395000f8469478f3adfc719c99674c072166708589033e2d9afe9448a30d5eaa7b64492a160f139e2da2800ec3834e94055838358c29edf4dcc1ba1985ad58aedbb6be2b86048c27395000f84694c2be4ec20253b8642161bc3f444f53679c1f3d479466f50c616d737e60d7ca6311ff0d9c434197898a94d1d678a2506eeaa365056fe565df8bc8659f28b086048c27395000f846942f7be8361c80a4c1e7e9aaf001d0877f1cfde218945f93992ac37f3e61db2ef8a587a436a161fd210b94ecbc4fb1a97861344dad0867ca3cba2b860411f086048c27395000f84694ce2fd7544e0b2cc94692d4a704debef7bcb613289444abc67b4b2fba283c582387f54c9cba7c34bafa948acc2ab395ded08bb75ce85bf0f95ad2abc51ad586048c27395000f84694b8f7166496996a7da21cf1f1b04d9b3e26a3d077946770572763289aac606e4f327c2f6cc1aa3b3e3b94882d745ed97d4422ca8da1c22ec49d880c4c097286048c27395000f846942d4c407bbe49438ed859fe965b140dcf1aab71a9943ad0939e120f33518fbba04631afe7a3ed6327b194b2bbb170ca4e499a2b0f3cc85ebfa6e8c4dfcbea86048c27395000f846946bbad7cf34b5fa511d8e963dbba288b1960e75d694853b0f6c324d1f4e76c8266942337ac1b0af1a229442498946a51ca5924552ead6fc2af08b94fcba648601d1a94a2000f846944430b3230294d12c6ab2aac5c2cd68e80b16b581947b107f4976a252a6939b771202c28e64e03f52d694795811a7f214084116949fc4f53cedbf189eeab28601d1a94a2000f84694ea0a6e3c511bbd10f4519ece37dc24887e11b55d946811ca77acfb221a49393c193f3a22db829fcc8e9464feb7c04830dd9ace164fc5c52b3f5a29e5018a8601d1a94a2000f846947ae2f5b9e386cd1b50a4550696d957cb4900f03a94e83bcc5077e6b873995c24bac871b5ad856047e19464e48d4057a90b233e026c1041e6012ada897fe88601d1a94a2000f8469482012708dafc9e1b880fd083b32182b869be8e09948e5adc73a2d233a1b496ed3115464dd6c7b887509428b383d324bc9a37f4e276190796ba5a8947f5ed8601d1a94a2000f8469422b81f8e175ffde54d797fe11eb03f9e3bf75f1d94a1c3ef7ca38d8ba80cce3bfc53ebd2903ed21658942767f7447f7b9b70313d4147b795414aecea54718601d1a94a2000f8469468bf0b8b6fb4e317a0f9d6f03eaf8ce6675bc60d94675cfe570b7902623f47e7f59c9664b5f5065dcf94d84f0d2e50bcf00f2fc476e1c57f5ca2d57f625b8601d1a94a2000f846948c4d90829ce8f72d0163c1d5cf348a862d5506309485c42a7b34309bee2ed6a235f86d16f059deec5894cc2cedc53f0fa6d376336efb67e43d167169f3b78601d1a94a2000f8469435e7a025f4da968de7e4d7e4004197917f4070f194b1182abaeeb3b4d8eba7e6a4162eac7ace23d57394c4fd0d870da52e73de2dd8ded19fe3d26f43a1138601d1a94a2000f84694d6caa02bbebaebb5d7e581e4b66559e635f805ff94c07335cf083c1c46a487f0325769d88e163b653694efaff03b42e41f953a925fc43720e45fb61a19938601d1a94a20000175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaa164736f6c6343000604000a", }, { ContractAddr: common.HexToAddress(SlashContract), - CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe", Code: "608060405234801561001057600080fd5b50600436106102955760003560e01c80638256ace611610167578063c81b1662116100ce578063e1c7392a11610087578063e1c7392a146104d3578063eb57bff7146104db578063f9a2bbc7146104e3578063fc3e5908146104eb578063fc4333cd146104f3578063fd6a6879146104fb57610295565b8063c81b166214610482578063c8509d811461048a578063c96be4cb1461049d578063cc844b73146104b0578063d2a42e4b146104c3578063dc927faf146104cb57610295565b8063a78abc1611610120578063a78abc1614610447578063ab51bb961461044f578063ac0af62914610457578063ac4317511461045f578063ae61dc3b14610472578063c80d4b8f1461047a57610295565b80638256ace61461040c578063831d65d11461041457806396713da9146104275780639bc8e4f21461042f5780639dc0926214610437578063a1a11bf51461043f57610295565b8063493279b11161020b5780636e47b482116101c45780636e47b482146103dc57806370fd5bad146103e4578063718a8aa8146103ec57806375d47a0a146103f45780637912a65d146103fc5780637942fd051461040457610295565b8063493279b1146103925780634bf6c882146103a757806351e80672146103af578063567a372d146103b75780635bfb4990146103bf57806362b72cf5146103d457610295565b806335aa2e441161025d57806335aa2e441461032457806337c8dab914610337578063389f4f71146103585780633a63f4b11461036d5780633dffc3871461037557806343756e5c1461038a57610295565b80630bee7a671461029a5780630e2374a5146102b85780631182b875146102cd57806322d1e80b146102ed57806323bac5a214610302575b600080fd5b6102a2610503565b6040516102af919061354e565b60405180910390f35b6102c0610508565b6040516102af9190612d6a565b6102e06102db366004612ca0565b61050e565b6040516102af9190612da2565b6102f5610574565b6040516102af9190612d97565b610315610310366004612a4e565b61057d565b6040516102af93929190613536565b6102c0610332366004612c70565b6105a0565b61034a610345366004612a4e565b6105c7565b6040516102af929190613528565b61036061061e565b6040516102af91906134fe565b610360610624565b61037d61062a565b6040516102af919061355f565b6102c061062f565b61039a610635565b6040516102af91906134ef565b61037d61063a565b6102c061063f565b610360610645565b6103d26103cd366004612a4e565b61064b565b005b6103606106f6565b6102c06106fc565b61037d610702565b61037d610707565b6102c061070c565b610360610712565b61037d610717565b61034a61071c565b6103d2610422366004612ca0565b610726565b61037d610838565b61036061083d565b6102c0610848565b6102c061084e565b6102f5610854565b6102a261085d565b610360610862565b6103d261046d366004612b54565b610867565b610360610e17565b610360610e1e565b6102c0610e23565b6103d2610498366004612ca0565b610e29565b6103d26104ab366004612a4e565b610e9a565b6103d26104be366004612bbd565b61128b565b61036061187c565b6102c0611881565b6103d2611887565b6103606118c3565b6102c06118c9565b61037d6118cf565b6103d26118d4565b6102c0611d1d565b606481565b61200181565b6060336120001461053a5760405162461bcd60e51b815260040161053190613347565b60405180910390fd5b60005460ff1661055c5760405162461bcd60e51b815260040161053190612e9d565b60405162461bcd60e51b815260040161053190613438565b60075460ff1681565b600260208190526000918252604090912080546001820154919092015460ff1683565b600181815481106105ad57fe5b6000918252602090912001546001600160a01b0316905081565b6000806105d2612835565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b60065481565b600181565b61100181565b603881565b600881565b61200081565b60045481565b336110001461066c5760405162461bcd60e51b81526004016105319061312c565b60005460ff1661068e5760405162461bcd60e51b815260040161053190612e9d565b61200063f7a251d7600b6106a184611d23565b60006040518463ffffffff1660e01b81526004016106c19392919061356d565b600060405180830381600087803b1580156106db57600080fd5b505af11580156106ef573d6000803e3d6000fd5b5050505050565b60035481565b61100581565b600281565b601081565b61100881565b603281565b600b81565b6004546005549091565b33612000146107475760405162461bcd60e51b815260040161053190613347565b60005460ff166107695760405162461bcd60e51b815260040161053190612e9d565b610771612858565b60006107b284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611df592505050565b9150915080156107f95781516040517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e629967916107ec9161354e565b60405180910390a16106ef565b81516040517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e7916108299161354e565b60405180910390a15050505050565b600981565b662386f26fc1000081565b61100781565b61100681565b60005460ff1681565b600081565b600481565b60005460ff166108895760405162461bcd60e51b815260040161053190612e9d565b33611007146108aa5760405162461bcd60e51b815260040161053190613204565b61091584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b60208201529150611e759050565b156109b0576020811461093a5760405162461bcd60e51b8152600401610531906130b8565b604080516020601f840181900481028201810190925282815260009161097891858580838501838280828437600092019190915250611ecf92505050565b90506001811015801561098c575060055481105b6109a85760405162461bcd60e51b815260040161053190613302565b600455610dd4565b610a1684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b60208201529150611e759050565b15610ab25760208114610a3b5760405162461bcd60e51b815260040161053190613252565b604080516020601f8401819004810282018101909252828152600091610a7991858580838501838280828437600092019190915250611ecf92505050565b90506103e88111158015610a8e575060045481115b610aaa5760405162461bcd60e51b815260040161053190612f56565b600555610dd4565b610b2684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f66696e616c697479536c617368526577617264526174696f000000000000000060208201529150611e759050565b15610bc05760208114610b4b5760405162461bcd60e51b81526004016105319061346f565b604080516020601f8401819004810282018101909252828152600091610b8991858580838501838280828437600092019190915250611ecf92505050565b9050600a8110158015610b9c5750606481105b610bb85760405162461bcd60e51b81526004016105319061306c565b600655610dd4565b610c3484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f656e61626c654d616c6963696f7573566f7465536c617368000000000000000060208201529150611e759050565b15610cab5760208114610c595760405162461bcd60e51b815260040161053190612f8b565b604080516020601f8401819004810282018101909252828152610c959190848480838501838280828437600092019190915250611ed492505050565b6007805460ff1916911515919091179055610dd4565b610d1f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601781527f6d616c6963696f7573566f7465536c61736853636f706500000000000000000060208201529150611e759050565b15610dbc5760208114610d445760405162461bcd60e51b815260040161053190612de7565b604080516020601f8401819004810282018101909252828152600091610d8291858580838501838280828437600092019190915250611ecf92505050565b90506170808110158015610d985750620d2f0081105b610db45760405162461bcd60e51b815260040161053190612ed4565b600855610dd4565b60405162461bcd60e51b8152600401610531906133e3565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a84848484604051610e099493929190612db5565b60405180910390a150505050565b6201518081565b609681565b61100281565b3361200014610e4a5760405162461bcd60e51b815260040161053190613347565b60005460ff16610e6c5760405162461bcd60e51b815260040161053190612e9d565b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b334114610eb95760405162461bcd60e51b815260040161053190613396565b60005460ff16610edb5760405162461bcd60e51b815260040161053190612e9d565b6003544311610efc5760405162461bcd60e51b8152600401610531906134ba565b3a15610f1a5760405162461bcd60e51b8152600401610531906131a7565b60405163155853f360e21b8152611000906355614fcc90610f3f908490600401612d6a565b60206040518083038186803b158015610f5757600080fd5b505afa158015610f6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8f9190612b34565b610f9857611284565b610fa0612835565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff161580159282019290925290610ffb576020810180516001019052611054565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b43815260055460208201518161106657fe5b066111b257600060208201526040516335409f7f60e01b8152611000906335409f7f90611097908590600401612d6a565b600060405180830381600087803b1580156110b157600080fd5b505af11580156110c5573d6000803e3d6000fd5b505050506120006001600160a01b031663f7a251d7600b6110e585611d23565b60006040518463ffffffff1660e01b81526004016111059392919061356d565b600060405180830381600087803b15801561111f57600080fd5b505af1925050508015611130575060015b6111ad573d80801561115e576040519150601f19603f3d011682016040523d82523d6000602084013e611163565b606091505b50826001600160a01b03167fd7bc86ff5d08c8ab043edec743302aba2520e6635172a428bc956721db9e2d1c8360200151836040516111a3929190613507565b60405180910390a2505b61121e565b6004548160200151816111c157fe5b0661121e576040516375abf10160e11b81526110009063eb57e202906111eb908590600401612d6a565b600060405180830381600087803b15801561120557600080fd5b505af1158015611219573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505b5043600355565b60005460ff166112ad5760405162461bcd60e51b815260040161053190612e9d565b604051630a83aaa960e31b81526110069063541d5548906112d2903390600401612d6a565b60206040518083038186803b1580156112ea57600080fd5b505afa1580156112fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113229190612b34565b61133e5760405162461bcd60e51b815260040161053190612e31565b60075460ff166113605760405162461bcd60e51b815260040161053190612e68565b60065461136d5760146006555b60085461137c57620151806008555b6008548151604001514391011180156113a057504360085482602001516040015101115b6113bc5760405162461bcd60e51b81526004016105319061340a565b8060200151602001518160000151602001511480156113ea5750806020015160600151816000015160600151145b156114075760405162461bcd60e51b8152600401610531906130ff565b8051604081015190511080156114265750602081015160408101519051105b6114425760405162461bcd60e51b815260040161053190613035565b6020810151518151511080156114675750806000015160400151816020015160400151105b8061149257508051516020820151511080156114925750806020015160400151816000015160400151105b806114ac5750806020015160400151816000015160400151145b6114c85760405162461bcd60e51b815260040161053190612f1f565b604080820151905163ea321e4960e01b81526110009163ea321e49916114f19190600401612da2565b60206040518083038186803b15801561150957600080fd5b505afa15801561151d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115419190612b34565b61155d5760405162461bcd60e51b8152600401610531906131d5565b61156f81600001518260400151611efc565b8015611588575061158881602001518260400151611efc565b6115a45760405162461bcd60e51b815260040161053190612fd6565b6060806110006001600160a01b0316633b071dcc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156115e257600080fd5b505afa1580156115f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261161e9190810190612a71565b9150915060005b81518110156117595761164f82828151811061163d57fe5b602002602001015185604001516120d4565b15611751576006546040516213929d60e11b8152606461100280319093020491906227253a906116859033908590600401612d7e565b602060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d79190612c88565b506110006001600160a01b03166335409f7f8584815181106116f557fe5b60200260200101516040518263ffffffff1660e01b81526004016117199190612d6a565b600060405180830381600087803b15801561173357600080fd5b505af1158015611747573d6000803e3d6000fd5b5050505050611759565b600101611625565b50600061176b84604001516000612138565b90506120006001600160a01b031663f7a251d7600b61178d8760400151612154565b60006040518463ffffffff1660e01b81526004016117ad9392919061356d565b600060405180830381600087803b1580156117c757600080fd5b505af19250505080156117d8575060015b61184a573d808015611806576040519150601f19603f3d011682016040523d82523d6000602084013e61180b565b606091505b50817fd58d1183100bd0932c0588f31c4205d6bc6168909765a96c41adbed3115f36288260405161183c9190612da2565b60405180910390a250611876565b60405181907f7b78aadacff901d8b63d0dba4f86283d4db8aef27f9ed70413dd860f1c9532b690600090a25b50505050565b601481565b61100381565b60005460ff16156118aa5760405162461bcd60e51b815260040161053190613294565b603260045560966005556000805460ff19166001179055565b60085481565b61100081565b600381565b33611000146118f55760405162461bcd60e51b81526004016105319061312c565b60005460ff166119175760405162461bcd60e51b815260040161053190612e9d565b60015461192357611d1b565b600154600090600019015b808211611cef576000805b82841015611a5257611949612835565b600260006001878154811061195a57fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611a3c576004600554816119c757fe5b048160200151038160200181815250508060026000600188815481106119e957fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611a46565b6001925050611a52565b50836001019350611939565b828411611be957611a61612835565b6002600060018681548110611a7257fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611b5a57600460055481611adf57fe5b04816020015103816020018181525050806002600060018781548110611b0157fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff19169115159190911790559150611be99050565b6002600060018681548110611b6b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805480611baf57fe5b600082815260209020810160001990810180546001600160a01b031916905501905583611bdc5750611be9565b5060001990920191611a52565b818015611bf35750805b15611cd2576002600060018681548110611c0957fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805484908110611c5057fe5b600091825260209091200154600180546001600160a01b039092169186908110611c7657fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001805480611caf57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b82611cde575050611cef565b50506001909101906000190161192e565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081611d3e579050509050611d67836001600160a01b031661218f565b81600081518110611d7457fe5b6020026020010181905250611d88436121b2565b81600181518110611d9557fe5b6020908102919091010152611daa60386121b2565b81600281518110611db757fe5b6020026020010181905250611dcb426121b2565b81600381518110611dd857fe5b6020026020010181905250611dec816121c5565b9150505b919050565b611dfd612858565b6000611e07612858565b611e0f61286a565b611e20611e1b8661224f565b612274565b90506000805b611e2f836122be565b15611e685780611e5b57611e4a611e45846122df565b61232d565b63ffffffff16845260019150611e60565b611e68565b600101611e26565b5091935090915050915091565b600081604051602001611e889190612d4e565b6040516020818303038152906040528051906020012083604051602001611eaf9190612d4e565b604051602081830303815290604052805190602001201490505b92915050565b015190565b8082015160009060ff811615611eee576001915081611ef4565b60009150815b505092915050565b60408051600480825260a0820190925260009160609190816020015b6060815260200190600190039081611f18575050604080516020808252818301909252919250606091908082018180368337019050509050611f5d85600001516121b2565b82600081518110611f6a57fe5b6020026020010181905250611f8560208660200151836123af565b611f8e816123bf565b82600181518110611f9b57fe5b6020026020010181905250611fb385604001516121b2565b82600281518110611fc057fe5b6020026020010181905250611fdb60208660600151836123af565b611fe4816123bf565b82600381518110611ff157fe5b6020026020010181905250612017602061200a846121c5565b80519060200120836123af565b6040805160b080825260e08201909252606091602082018180368337019050509050612047818360006020612415565b61205981876080015160206060612415565b612067818660806030612415565b604080516001808252818301909252606091602082018180368337019050509050815160016020830182602086016066600019fa6120a457600080fd5b5060016120b2826000612468565b60ff16146120c7576000945050505050611ec9565b5060019695505050505050565b8151815160009160019181148083146120f0576000925061212e565b600160208701838101602088015b60028483851001141561212957805183511461211d5760009650600093505b602092830192016120fe565b505050505b5090949350505050565b6000816020018351101561214b57600080fd5b50016020015190565b60408051600480825260a08201909252606091829190816020015b606081526020019060019003908161216f579050509050611d67836123bf565b60408051600560a21b8318601482015260348101909152606090611dec816123bf565b6060611ec96121c083612484565b6123bf565b60608151600014156121e65750604080516000815260208101909152611df0565b6060826000815181106121f557fe5b602002602001015190506000600190505b83518110156122365761222c8285838151811061221f57fe5b602002602001015161256a565b9150600101612206565b50611dec612249825160c060ff166125e7565b8261256a565b61225761288a565b506040805180820190915281518152602082810190820152919050565b61227c61286a565b612285826126b9565b61228e57600080fd5b600061229d83602001516126f3565b60208085015160408051808201909152868152920190820152915050919050565b60006122c861288a565b505080518051602091820151919092015191011190565b6122e761288a565b6122f0826122be565b6122f957600080fd5b6020820151600061230982612756565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061234257508151602110155b61234b57600080fd5b600061235a83602001516126f3565b905080836000015110156123805760405162461bcd60e51b8152600401610531906132cb565b8251602080850151830180519284900392918310156123a657826020036101000a820491505b50949350505050565b9091018181526020918201910152565b6060815160011480156123f15750607f60f81b826000815181106123df57fe5b01602001516001600160f81b03191611155b156123fd575080611df0565b611ec961240f8351608060ff166125e7565b8361256a565b60005b818110156106ef5783818151811061242c57fe5b602001015160f81c60f81b85848060010195508151811061244957fe5b60200101906001600160f81b031916908160001a905350600101612418565b6000816001018351101561247b57600080fd5b50016001015190565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166124c8575060186124ec565b6fffffffffffffffffffffffffffffffff1984166124e8575060106124ec565b5060005b60208110156125225781818151811061250157fe5b01602001516001600160f81b0319161561251a57612522565b6001016124ec565b60008160200390506060816040519080825280601f01601f191660200182016040528015612557576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561259b578051835260209283019201612583565b50855184518101855292509050808201602086015b818310156125c85780518352602092830192016125b0565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106126115760405162461bcd60e51b81526004016105319061300d565b6040805160018082528183019092526060916020820181803683370190505090506037841161266b5782840160f81b8160008151811061264d57fe5b60200101906001600160f81b031916908160001a9053509050611ec9565b606061267685612484565b90508381510160370160f81b8260008151811061268f57fe5b60200101906001600160f81b031916908160001a9053506126b0828261256a565b95945050505050565b80516000906126ca57506000611df0565b6020820151805160001a9060c08210156126e957600092505050611df0565b5060019392505050565b8051600090811a608081101561270d576000915050611df0565b60b8811080612728575060c08110801590612728575060f881105b15612737576001915050611df0565b60c081101561274b5760b519019050611df0565b60f519019050611df0565b80516000908190811a6080811015612771576001915061282e565b60b881101561278657607e198101915061282e565b60c08110156127d757600060b78203600186019550806020036101000a8651049150600181018201935050808310156127d15760405162461bcd60e51b81526004016105319061317c565b5061282e565b60f88110156127ec5760be198101915061282e565b600060f78203600186019550806020036101000a865104915060018101820193505080831015611ef45760405162461bcd60e51b81526004016105319061317c565b5092915050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b604051806040016040528061287d61288a565b8152602001600081525090565b604051806040016040528060008152602001600081525090565b600082601f8301126128b4578081fd5b81516128c76128c2826135c0565b613599565b818152915060208083019084810160005b8481101561293d578151870188603f8201126128f357600080fd5b838101516129036128c2826135e0565b81815260408b8184860101111561291957600080fd5b61292883888401838701613604565b508652505092820192908201906001016128d8565b505050505092915050565b60008083601f840112612959578182fd5b50813567ffffffffffffffff811115612970578182fd5b60208301915083602082850101111561298857600080fd5b9250929050565b600082601f83011261299f578081fd5b81356129ad6128c2826135e0565b91508082528360208285010111156129c457600080fd5b8060208401602084013760009082016020015292915050565b600060a082840312156129ee578081fd5b6129f860a0613599565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff811115612a3657600080fd5b612a428482850161298f565b60808301525092915050565b600060208284031215612a5f578081fd5b8135612a6a81613630565b9392505050565b60008060408385031215612a83578081fd5b825167ffffffffffffffff80821115612a9a578283fd5b81850186601f820112612aab578384fd5b80519250612abb6128c2846135c0565b80848252602080830192508084018a828389028701011115612adb578788fd5b8794505b86851015612b06578051612af281613630565b845260019490940193928101928101612adf565b508801519096509350505080821115612b1d578283fd5b50612b2a858286016128a4565b9150509250929050565b600060208284031215612b45578081fd5b81518015158114612a6a578182fd5b60008060008060408587031215612b69578182fd5b843567ffffffffffffffff80821115612b80578384fd5b612b8c88838901612948565b90965094506020870135915080821115612ba4578384fd5b50612bb187828801612948565b95989497509550505050565b600060208284031215612bce578081fd5b813567ffffffffffffffff80821115612be5578283fd5b81840160608187031215612bf7578384fd5b612c016060613599565b9250803582811115612c11578485fd5b612c1d878284016129dd565b845250602081013582811115612c31578485fd5b612c3d878284016129dd565b602085015250604081013582811115612c54578485fd5b612c608782840161298f565b6040850152509195945050505050565b600060208284031215612c81578081fd5b5035919050565b600060208284031215612c99578081fd5b5051919050565b600080600060408486031215612cb4578283fd5b833560ff81168114612cc4578384fd5b9250602084013567ffffffffffffffff811115612cdf578283fd5b612ceb86828701612948565b9497909650939450505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612d3a816020860160208601613604565b601f01601f19169290920160200192915050565b60008251612d60818460208701613604565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060208252612a6a6020830184612d22565b600060408252612dc9604083018688612cf8565b8281036020840152612ddc818587612cf8565b979650505050505050565b6020808252602a908201527f6c656e677468206f66206d616c6963696f7573566f7465536c61736853636f706040820152690ca40dad2e6dac2e8c6d60b31b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604082015260600190565b6020808252818101527f6d616c6963696f757320766f746520736c617368206e6f7420656e61626c6564604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252602b908201527f746865206d616c6963696f757320766f746520736c6173682073636f7065206f60408201526a7574206f662072616e676560a81b606082015260800190565b6020808252601a908201527f6e6f2076696f6c6174696f6e206f6620766f74652072756c6573000000000000604082015260600190565b6020808252818101527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604082015260600190565b6020808252602b908201527f6c656e677468206f6620656e61626c654d616c6963696f7573566f7465536c6160408201526a0e6d040dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526017908201527f766572696679207369676e6174757265206661696c6564000000000000000000604082015260600190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526019908201527f7372634e756d20626967676572207468616e207461724e756d00000000000000604082015260600190565b6020808252602c908201527f7468652066696e616c69747920736c6173682072657761726420726174696f2060408201526b6f7574206f662072616e676560a01b606082015260800190565b60208082526027908201527f6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d6040820152660d2e6dac2e8c6d60cb1b606082015260800190565b60208082526013908201527274776f206964656e746963616c20766f74657360681b604082015260600190565b60208082526030908201527f746865206d6573736167652073656e646572206d7573742062652076616c696460408201526f185d1bdc94d95d0818dbdb9d1c9858dd60821b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252601590820152741d9bdd195059191c881a5cc81b9bdd08199bdd5b99605a1b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526022908201527f6c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746040820152610c6d60f31b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526025908201527f746865206d697364656d65616e6f725468726573686f6c64206f7574206f662060408201526472616e676560d81b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b6020808252601490820152731d185c99d95d08189b1bd8dac81d1bdbc81bdb1960621b604082015260600190565b6020808252601e908201527f7265636569766520756e65787065637465642073796e207061636b6167650000604082015260600190565b6020808252602b908201527f6c656e677468206f662066696e616c697479536c61736852657761726452617460408201526a0d2de40dad2e6dac2e8c6d60ab1b606082015260800190565b6020808252818101527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604082015260600190565b61ffff91909116815260200190565b90815260200190565b6000838252604060208301526135206040830184612d22565b949350505050565b918252602082015260400190565b92835260208301919091521515604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff85168252606060208301526135896060830185612d22565b9050826040830152949350505050565b60405181810167ffffffffffffffff811182821017156135b857600080fd5b604052919050565b600067ffffffffffffffff8211156135d6578081fd5b5060209081020190565b600067ffffffffffffffff8211156135f6578081fd5b50601f01601f191660200190565b60005b8381101561361f578181015183820152602001613607565b838111156118765750506000910152565b6001600160a01b038116811461364557600080fd5b5056fea164736f6c6343000604000a", }, { ContractAddr: common.HexToAddress(SystemRewardContract), - CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe", Code: "6080604052600436106101c55760003560e01c806375d47a0a116100f7578063ab51bb9611610095578063f9a2bbc711610064578063f9a2bbc7146105c3578063fb5478b3146105d8578063fc3e5908146105ed578063fd6a68791461060257610209565b8063ab51bb96146104b5578063ac431751146104ca578063c81b166214610599578063dc927faf146105ae57610209565b80639a99b4f0116100d15780639a99b4f01461043d5780639dc0926214610476578063a1a11bf51461048b578063a78abc16146104a057610209565b806375d47a0a146103fe5780637942fd051461041357806396713da91461042857610209565b8063493279b1116101645780636d70f7ae1161013e5780636d70f7ae146103785780636e47b482146103bf57806370fd5bad146103d4578063718a8aa8146103e957610209565b8063493279b1146103225780634bf6c8821461034e57806351e806721461036357610209565b806331b6d4a5116101a057806331b6d4a5146102b85780633a0b0eff146102cd5780633dffc387146102e257806343756e5c1461030d57610209565b806227253a1461020e5780630bee7a67146102595780630e2374a51461028757610209565b366102095734156102075760408051348152905133917f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db919081900360200190a25b005b600080fd5b34801561021a57600080fd5b506102476004803603604081101561023157600080fd5b506001600160a01b038135169060200135610617565b60408051918252519081900360200190f35b34801561026557600080fd5b5061026e6107c2565b6040805163ffffffff9092168252519081900360200190f35b34801561029357600080fd5b5061029c6107c7565b604080516001600160a01b039092168252519081900360200190f35b3480156102c457600080fd5b506102476107cd565b3480156102d957600080fd5b506102476107d9565b3480156102ee57600080fd5b506102f76107df565b6040805160ff9092168252519081900360200190f35b34801561031957600080fd5b5061029c6107e4565b34801561032e57600080fd5b506103376107ea565b6040805161ffff9092168252519081900360200190f35b34801561035a57600080fd5b506102f76107ef565b34801561036f57600080fd5b5061029c6107f4565b34801561038457600080fd5b506103ab6004803603602081101561039b57600080fd5b50356001600160a01b03166107fa565b604080519115158252519081900360200190f35b3480156103cb57600080fd5b5061029c610818565b3480156103e057600080fd5b506102f761081e565b3480156103f557600080fd5b506102f7610823565b34801561040a57600080fd5b5061029c610828565b34801561041f57600080fd5b506102f761082e565b34801561043457600080fd5b506102f7610833565b34801561044957600080fd5b506102476004803603604081101561046057600080fd5b506001600160a01b038135169060200135610838565b34801561048257600080fd5b5061029c610962565b34801561049757600080fd5b5061029c610968565b3480156104ac57600080fd5b506103ab61096e565b3480156104c157600080fd5b5061026e610977565b3480156104d657600080fd5b50610207600480360360408110156104ed57600080fd5b81019060208101813564010000000081111561050857600080fd5b82018360208201111561051a57600080fd5b8035906020019184600183028401116401000000008311171561053c57600080fd5b91939092909160208101903564010000000081111561055a57600080fd5b82018360208201111561056c57600080fd5b8035906020019184600183028401116401000000008311171561058e57600080fd5b50909250905061097c565b3480156105a557600080fd5b5061029c610cff565b3480156105ba57600080fd5b5061029c610d05565b3480156105cf57600080fd5b5061029c610d0b565b3480156105e457600080fd5b50610247610d11565b3480156105f957600080fd5b506102f7610d1d565b34801561060e57600080fd5b5061029c610d22565b6000805460ff1661069457600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166106e25760405162461bcd60e51b815260040180806020018281038252602b815260200180610e10602b913960400191505060405180910390fd5b60004783106106f157476106f3565b825b9050674563918244f400008111156107105750674563918244f400005b8015610791576040516001600160a01b0385169082156108fc029083906000818181858888f1935050505015801561074c573d6000803e3d6000fd5b506040805182815290516001600160a01b038616917ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0919081900360200190a26107bb565b6040517fe589651933c2457488cc0d8e0941518abf748e799435e4e396d9c4d0b2db2d4d90600090a15b9392505050565b606481565b61200181565b674563918244f4000081565b60015481565b600181565b61100181565b603881565b600881565b61200081565b6001600160a01b031660009081526002602052604090205460ff1690565b61100581565b600281565b601081565b61100881565b600b81565b600981565b6000805460ff166108b557600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166109035760405162461bcd60e51b815260040180806020018281038252602b815260200180610e10602b913960400191505060405180910390fd5b60004783106109125747610914565b825b9050670de0b6b3a76400008111156107105750604051670de0b6b3a7640000906001600160a01b03851690600090839082818181858883f1935050505015801561074c573d6000803e3d6000fd5b61100781565b61100681565b60005460ff1681565b600081565b33611007146109bc5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e6a602e913960400191505060405180910390fd5b610a1e84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600b81526a30b23227b832b930ba37b960a91b60208201529150610d289050565b15610af657606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091149050610aa15760405162461bcd60e51b815260040180806020018281038252602c815260200180610e98602c913960400191505060405180910390fd5b60148101516001600160a01b038116600081815260026020526040808220805460ff19166001179055517f9870d7fe5d112134c55844951dedf365363006d9c588db07c4c85af6322a06199190a25050610c6d565b610b5b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81526d3232b632ba32a7b832b930ba37b960911b60208201529150610d289050565b15610c3057606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091149050610bde5760405162461bcd60e51b815260040180806020018281038252602f815260200180610e3b602f913960400191505060405180910390fd5b60148101516001600160a01b038116600081815260026020526040808220805460ff19169055517fb40992a19dba61ea600e87fce607102bf5908dc89076217b6ca6ae195224f7029190a25050610c6d565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b61100281565b61100381565b61100081565b670de0b6b3a764000081565b600381565b61100481565b6000816040516020018082805190602001908083835b60208310610d5d5780518252601f199092019160209182019101610d3e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310610dcb5780518252601f199092019160209182019101610dac565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490509291505056fe6f6e6c79206f70657261746f7220697320616c6c6f77656420746f2063616c6c20746865206d6574686f646c656e677468206f662076616c756520666f722064656c6574654f70657261746f722073686f756c64206265203230746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662076616c756520666f72206164644f70657261746f722073686f756c64206265203230a164736f6c6343000604000a", }, }, @@ -725,17 +725,17 @@ func init() { Configs: []*UpgradeConfig{ { ContractAddr: common.HexToAddress(ValidatorContract), - CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe", Code: "6080604052600436106104a35760003560e01c806388b32f1111610260578063c6d3394511610144578063e40716a1116100c1578063f92eb86b11610085578063f92eb86b14610c02578063f9a2bbc714610c17578063fc3e590814610c2c578063fccc281314610c41578063fd4ad81f14610c56578063fd6a687914610c85576104aa565b8063e40716a114610b85578063ea321e4914610b9a578063eb57e20214610bba578063eda5868c14610bda578063f340fa0114610bef576104aa565b8063d86222d511610108578063d86222d514610b1c578063daacdb6614610b31578063dc927faf14610b46578063e086c7b114610b5b578063e1c7392a14610b70576104aa565b8063c6d3394514610abd578063c81b166214610ad2578063c8509d81146108b6578063ce910b0c14610ae7578063d68fb56a14610b07576104aa565b8063a5422d5c116101dd578063ad3c9da6116101a1578063ad3c9da614610a3c578063aef198a914610a5c578063b7ab4db514610a71578063b8cf4ef114610a93578063bf9f499514610666578063c466689d14610aa8576104aa565b8063a5422d5c146109c8578063a78abc16146109dd578063aaf5eb68146109f2578063ab51bb9614610a07578063ac43175114610a1c576104aa565b806396713da91161022457806396713da91461095f5780639dc09262146109745780639fe0f81614610989578063a0dc27581461099e578063a1a11bf5146109b3576104aa565b806388b32f11146108eb5780638a7beb01146109005780638b5ad0c9146109155780638d19a4101461092a5780639369d7de1461094a576104aa565b806351e80672116103875780636e47b482116103045780637942fd05116102c85780637942fd05146108775780637a84ca2a1461088c57806381650b62146108a1578063831d65d1146108b6578063853230aa1461086257806386249882146108d6576104aa565b80636e47b4821461080e57806370fd5bad14610823578063718a8aa81461083857806375d47a0a1461084d57806378dfed4a14610862576104aa565b80635de1e22c1161034b5780635de1e22c14610792578063603d86d31461065157806360eba4fe146107a757806362b72cf5146107c75780636969a25c146107dc576104aa565b806351e806721461071357806355614fcc14610728578063565c56b3146107485780635667515a146107685780635d77156c1461077d576104aa565b80633365af3a1161042057806343756e5c116103e457806343756e5c1461068857806345cf9daf1461069d578063493279b1146106b25780634bf6c882146106d45780634df6e0c3146106e95780635192c82c146106fe576104aa565b80633365af3a146105ee57806335409f7f1461060e5780633b071dcc1461062e5780633de0f0d8146106515780633dffc38714610666576104aa565b8063152ad3b811610467578063152ad3b8146105625780631ff1806914610584578063219f22d514610599578063300c3567146105ae578063321d398a146105ce576104aa565b806304c4fec6146104af57806307a56847146104c65780630bee7a67146104f15780630e2374a5146105135780631182b87514610535576104aa565b366104aa57005b600080fd5b3480156104bb57600080fd5b506104c4610c9a565b005b3480156104d257600080fd5b506104db610d0c565b6040516104e89190617691565b60405180910390f35b3480156104fd57600080fd5b50610506610d12565b6040516104e891906176bb565b34801561051f57600080fd5b50610528610d17565b6040516104e89190616a60565b34801561054157600080fd5b50610555610550366004616946565b610d1d565b6040516104e89190616bd7565b34801561056e57600080fd5b50610577610f55565b6040516104e89190616bcc565b34801561059057600080fd5b506104db610f5e565b3480156105a557600080fd5b50610506610f64565b3480156105ba57600080fd5b506104c46105c93660046167d0565b610f69565b3480156105da57600080fd5b506105776105e93660046168f3565b6112b0565b3480156105fa57600080fd5b506105776106093660046168f3565b61137f565b34801561061a57600080fd5b506104c46106293660046167a9565b611430565b34801561063a57600080fd5b50610643611589565b6040516104e8929190616ae2565b34801561065d57600080fd5b506104db611865565b34801561067257600080fd5b5061067b61186b565b6040516104e891906176cc565b34801561069457600080fd5b50610528611870565b3480156106a957600080fd5b506104db611876565b3480156106be57600080fd5b506106c761187c565b6040516104e89190617682565b3480156106e057600080fd5b5061067b611881565b3480156106f557600080fd5b50610643611886565b34801561070a57600080fd5b506104db611a04565b34801561071f57600080fd5b50610528611a0a565b34801561073457600080fd5b506105776107433660046167a9565b611a10565b34801561075457600080fd5b506104db6107633660046167a9565b611a45565b34801561077457600080fd5b5061067b611a96565b34801561078957600080fd5b50610506611a9b565b34801561079e57600080fd5b506104db611aa0565b3480156107b357600080fd5b506105556107c23660046168f3565b611aa6565b3480156107d357600080fd5b506104db611b4c565b3480156107e857600080fd5b506107fc6107f73660046168f3565b611b52565b6040516104e896959493929190616a8d565b34801561081a57600080fd5b50610528611bb6565b34801561082f57600080fd5b5061067b611bbc565b34801561084457600080fd5b5061067b611bc1565b34801561085957600080fd5b50610528611bc6565b34801561086e57600080fd5b506104db611bcc565b34801561088357600080fd5b5061067b611bd2565b34801561089857600080fd5b506104db611bd7565b3480156108ad57600080fd5b50610506611bdd565b3480156108c257600080fd5b506104c46108d1366004616946565b611be2565b3480156108e257600080fd5b506104db611c43565b3480156108f757600080fd5b506104db611c49565b34801561090c57600080fd5b50610577611c4f565b34801561092157600080fd5b506104db611c58565b34801561093657600080fd5b506104db6109453660046167a9565b611c5e565b34801561095657600080fd5b506104c4611c9e565b34801561096b57600080fd5b5061067b611db2565b34801561098057600080fd5b50610528611db7565b34801561099557600080fd5b506104db611dbd565b3480156109aa57600080fd5b506104db611dc2565b3480156109bf57600080fd5b50610528611dc7565b3480156109d457600080fd5b50610555611dcd565b3480156109e957600080fd5b50610577611dec565b3480156109fe57600080fd5b506104db611df5565b348015610a1357600080fd5b50610506611a96565b348015610a2857600080fd5b506104c4610a37366004616897565b611dfe565b348015610a4857600080fd5b506104db610a573660046167a9565b61269c565b348015610a6857600080fd5b506104db6126ae565b348015610a7d57600080fd5b50610a866126bb565b6040516104e89190616acf565b348015610a9f57600080fd5b506104db6127a7565b348015610ab457600080fd5b506104db6127ac565b348015610ac957600080fd5b506104db611bbc565b348015610ade57600080fd5b506105286127b2565b348015610af357600080fd5b50610555610b023660046168f3565b6127b8565b348015610b1357600080fd5b506104db6127c5565b348015610b2857600080fd5b506104db612804565b348015610b3d57600080fd5b506104db612810565b348015610b5257600080fd5b50610528612816565b348015610b6757600080fd5b506104db610d12565b348015610b7c57600080fd5b506104c461281c565b348015610b9157600080fd5b506104db6129cb565b348015610ba657600080fd5b50610577610bb5366004616858565b6129d1565b348015610bc657600080fd5b506104c4610bd53660046167a9565b612b57565b348015610be657600080fd5b50610506612c5f565b6104c4610bfd3660046167a9565b612c64565b348015610c0e57600080fd5b506104db612fcc565b348015610c2357600080fd5b50610528612fd2565b348015610c3857600080fd5b5061067b611dbd565b348015610c4d57600080fd5b50610528612fd8565b348015610c6257600080fd5b50610c76610c713660046168f3565b612fde565b6040516104e89392919061769a565b348015610c9157600080fd5b506105286130a0565b6000610ca533611c5e565b9050600b8181548110610cb457fe5b600091825260209091206001601690920201015460ff16610cf05760405162461bcd60e51b8152600401610ce79061733c565b60405180910390fd5b6000610cfa6127c5565b9050610d073383836130a6565b505050565b60095481565b606481565b61200181565b60005460609060ff16610d425760405162461bcd60e51b8152600401610ce790616d96565b3361200014610d635760405162461bcd60e51b8152600401610ce7906174d5565b600b54610e2157610d72616495565b60015460005b81811015610e1d57600b805460018101825560009190915283516000805160206178ef833981519152601690920291820190815560208086015160008051602061792f8339815191528401805460ff1916911515919091179055604086015180518794610df99360008051602061790f8339815191529091019201906164c4565b506060820151610e0f906003830190601361653e565b505050806001019050610d78565b5050505b610e2961656b565b6000610e6a85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329292505050565b9150915080610e8657610e7d606461344e565b92505050610f4e565b815160009060ff16610eab57610ea4836020015184604001516134af565b9050610f1a565b825160ff1660011415610f1657826020015151600114610ef0576000805160206178cf833981519152604051610ee0906171f5565b60405180910390a1506067610f11565b610ea48360200151600081518110610f0457fe5b6020026020010151614103565b610f1a565b5060655b63ffffffff8116610f3f5750506040805160008152602081019091529150610f4e9050565b610f488161344e565b93505050505b9392505050565b60075460ff1681565b60035481565b606881565b334114610f885760405162461bcd60e51b8152600401610ce790617524565b6010544311610fa95760405162461bcd60e51b8152600401610ce790616ef2565b3a15610fc75760405162461bcd60e51b8152600401610ce79061727b565b60005460ff16610fe95760405162461bcd60e51b8152600401610ce790616d96565b60006110023168056bc75e2d63100000811115611020576110198168056bc75e2d6310000063ffffffff61427a16565b9150611027565b50506112a6565b6040516213929d60e11b8152611002906227253a9061104c9030908690600401616a74565b602060405180830381600087803b15801561106657600080fd5b505af115801561107a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109e919061690b565b9150816110ac5750506112a6565b6000805b848110156110da578585828181106110c457fe5b90506020020135820191508060010190506110b0565b50806110e8575050506112a6565b6000806000805b8981101561129e578489898381811061110457fe5b9050602002013588028161111457fe5b0493508a8a8281811061112357fe5b905060200201602081019061113891906167a9565b6001600160a01b0381166000908152600460205260409020549093509150811561125457600060018084038154811061116d57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff16156111da57836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d85866040516111cd9190617691565b60405180910390a261124e565b6003546111ed908663ffffffff6142bc16565b6003908155810154611205908663ffffffff6142bc16565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611245908890617691565b60405180910390a25b50611296565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d858560405161128d9190617691565b60405180910390a25b6001016110ef565b505050505050505b5050436010555050565b60015460009082106112c45750600061137a565b60006001600160a01b0316600183815481106112dc57fe5b60009182526020909120600490910201546001600160a01b0316148061130c5750600854158061130c5750600a54155b8061131b575060085460095410155b8061132c575061132a8261137f565b155b8061135557506000600b838154811061134157fe5b906000526020600020906016020160000154115b80611369575060016113656126bb565b5111155b156113765750600061137a565b5060015b919050565b60015460009082106113935750600061137a565b600b5482106113d057600182815481106113a957fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615905061137a565b600182815481106113dd57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615801561142a5750600b828154811061141157fe5b600091825260209091206001601690920201015460ff16155b92915050565b33611001146114515760405162461bcd60e51b8152600401610ce790617639565b600b5461150f57611460616495565b60015460005b8181101561150b57600b805460018101825560009190915283516000805160206178ef833981519152601690920291820190815560208086015160008051602061792f8339815191528401805460ff19169115159190911790556040860151805187946114e79360008051602061790f8339815191529091019201906164c4565b5060608201516114fd906003830190601361653e565b505050806001019050611466565b5050505b6001600160a01b038116600090815260046020526040902054806115335750611586565b6001810390506000600b828154811061154857fe5b600091825260209091206001601690920201015460ff16905061156b83836142e1565b80156115745750805b15610d07576009805460001901905550505b50565b60015460609081906000805b828110156115dc57600181815481106115aa57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166115d4576001909101905b600101611595565b50606081604051908082528060200260200182016040528015611609578160200160208202803683370190505b50905060608260405190808252806020026020018201604052801561164257816020015b606081526020019060019003908161162d5790505b50600b54600094509091508414156117bd5760005b848110156117b7576001818154811061166c57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166117af576001818154811061169c57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106116c757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b81815481106116f457fe5b600091825260209182902060026016909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561178c5780601f106117615761010080835404028352916020019161178c565b820191906000526020600020905b81548152906001019060200180831161176f57829003601f168201915b505050505082858151811061179d57fe5b60209081029190910101526001909301925b600101611657565b50611859565b60005b8481101561185757600181815481106117d557fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661184f576001818154811061180557fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061183057fe5b6001600160a01b03909216602092830291909101909101526001909301925b6001016117c0565b505b909450925050505b9091565b61271081565b600181565b61100181565b60085481565b606181565b600881565b600e54600c5460609182918061189a575060155b60606118a46126bb565b905060606118b182614694565b9050828251116118c8579094509250611861915050565b838383510310156118da578282510393505b83156119105760c843046118f683838388880360008a8a614802565b61190e8383838888038989038a8b8b8b510301614802565b505b60608360405190808252806020026020018201604052801561193c578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561197557816020015b60608152602001906001900390816119605790505b50905060005b858110156119f65784818151811061198f57fe5b60200260200101518382815181106119a357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106119cf57fe5b60200260200101518282815181106119e357fe5b602090810291909101015260010161197b565b509096509450505050509091565b60065481565b61200081565b6001600160a01b03811660009081526004602052604081205480611a3857600091505061137a565b60001901610f4e8161137f565b6001600160a01b03811660009081526004602052604081205480611a6d57600091505061137a565b600180820381548110611a7c57fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b600f5481565b60128181548110611ab357fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815293509091830182828015611b445780601f10611b1957610100808354040283529160200191611b44565b820191906000526020600020905b815481529060010190602001808311611b2757829003601f168201915b505050505081565b60105481565b60018181548110611b5f57fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b606681565b3361200014611c035760405162461bcd60e51b8152600401610ce7906174d5565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051611c36939291906176da565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6001600160a01b03811660009081526004602052604081205480611c945760405162461bcd60e51b8152600401610ce79061745d565b6000190192915050565b600b54611d5c57611cad616495565b60015460005b81811015611d5857600b805460018101825560009190915283516000805160206178ef833981519152601690920291820190815560208086015160008051602061792f8339815191528401805460ff1916911515919091179055604086015180518794611d349360008051602061790f8339815191529091019201906164c4565b506060820151611d4a906003830190601361653e565b505050806001019050611cb3565b5050505b600854611d695760036008555b600a54611d76576002600a555b6000611d8133611c5e565b9050611d8c816112b0565b611da85760405162461bcd60e51b8152600401610ce7906171b2565b6115863382614959565b600981565b61100781565b600381565b60c881565b61100681565b604051806101e001604052806101ab81526020016177246101ab913981565b60005460ff1681565b6402540be40081565b60005460ff16611e205760405162461bcd60e51b8152600401610ce790616d96565b3361100714611e415760405162461bcd60e51b8152600401610ce7906172a9565b611eab84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b602082015291506149f19050565b15611f485760208114611ed05760405162461bcd60e51b8152600401610ce790617417565b604080516020601f8401819004810282018101909252828152600091611f0e91858580838501838280828437600092019190915250614a4a92505050565b905060648110158015611f245750620186a08111155b611f405760405162461bcd60e51b8152600401610ce7906170a2565b600255612659565b611fa884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b602082015291506149f19050565b156120375760208114611fcd5760405162461bcd60e51b8152600401610ce790616c1c565b604080516020601f840181900481028201810190925282815260009161200b91858580838501838280828437600092019190915250614a4a92505050565b905061271081111561202f5760405162461bcd60e51b8152600401610ce790616f34565b600655612659565b6120a184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b602082015291506149f19050565b1561213b57602081146120c65760405162461bcd60e51b8152600401610ce790616c53565b604080516020601f840181900481028201810190925282815260009161210491858580838501838280828437600092019190915250614a4a92505050565b600c5490915080612113575060155b8082106121325760405162461bcd60e51b8152600401610ce790616fa7565b50600855612659565b6121a484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b602082015291506149f19050565b1561223d57602081146121c95760405162461bcd60e51b8152600401610ce790616d1c565b604080516020601f840181900481028201810190925282815260009161220791858580838501838280828437600092019190915250614a4a92505050565b90506000811180156122195750600a81105b6122355760405162461bcd60e51b8152600401610ce7906175b5565b600a55612659565b6122b184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e6469646174657300000000000000602082015291506149f19050565b1561234057602081146122d65760405162461bcd60e51b8152600401610ce790616cd0565b604080516020601f840181900481028201810190925282815260009161231491858580838501838280828437600092019190915250614a4a92505050565b9050600d548111156123385760405162461bcd60e51b8152600401610ce790617118565b600e55612659565b6123a984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b602082015291506149f19050565b1561242b57602081146123ce5760405162461bcd60e51b8152600401610ce7906172f7565b604080516020601f840181900481028201810190925282815260009161240c91858580838501838280828437600092019190915250614a4a92505050565b600d819055600e5490915081101561242557600d54600e555b50612659565b61248f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b602082015291506149f19050565b1561253d57602081146124b45760405162461bcd60e51b8152600401610ce790616d61565b604080516020601f84018190048102820181019092528281526000916124f291858580838501838280828437600092019190915250614a4a92505050565b9050600081116125145760405162461bcd60e51b8152600401610ce790616e04565b60648111156125355760405162461bcd60e51b8152600401610ce790616e4c565b600c55612659565b6125a584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601181527073797374656d526577617264526174696f60781b602082015291506149f19050565b1561264157602081146125ca5760405162461bcd60e51b8152600401610ce790617571565b604080516020601f840181900481028201810190925282815260009161260891858580838501838280828437600092019190915250614a4a92505050565b90506001811015801561261d57506127108111155b6126395760405162461bcd60e51b8152600401610ce79061704f565b600f55612659565b60405162461bcd60e51b8152600401610ce790617612565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a8484848460405161268e9493929190616bea565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b828110156126ea576126d68161137f565b156126e2578160010191505b6001016126c5565b50606081604051908082528060200260200182016040528015612717578160200160208202803683370190505b5090506000915060005b8381101561279e576127328161137f565b15612796576001818154811061274457fe5b600091825260209091206004909102015482516001600160a01b039091169083908590811061276f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b600101612721565b50925050505b90565b601581565b61027181565b61100281565b60138181548110611ab357fe5b60006127cf6126bb565b519050600080600c54116127e45760156127e8565b600c545b9050808211156127f6578091505b8161280057600191505b5090565b67016345785d8a000081565b60055481565b61100381565b60005460ff161561283f5760405162461bcd60e51b8152600401610ce7906173a9565b61284761656b565b600061286d604051806101e001604052806101ab81526020016177246101ab9139613292565b915091508061288e5760405162461bcd60e51b8152600401610ce790617494565b60005b8260200151518110156129b3576001836020015182815181106128b057fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a09093015160039093019290925591860151805191850193918590811061298657fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101612891565b50506103e8600255506000805460ff19166001179055565b600d5481565b601354600090815b81811015612ada57612ac285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601380549092508591508110612a2a57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015612ab85780601f10612a8d57610100808354040283529160200191612ab8565b820191906000526020600020905b815481529060010190602001808311612a9b57829003601f168201915b5050505050614a4f565b15612ad25760019250505061142a565b6001016129d9565b5060125460005b81811015612b4b57612b3286868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601280549092508591508110612a2a57fe5b15612b43576001935050505061142a565b600101612ae1565b50600095945050505050565b3361100114612b785760405162461bcd60e51b8152600401610ce790617639565b600b54612c3657612b87616495565b60015460005b81811015612c3257600b805460018101825560009190915283516000805160206178ef833981519152601690920291820190815560208086015160008051602061792f8339815191528401805460ff1916911515919091179055604086015180518794612c0e9360008051602061790f8339815191529091019201906164c4565b506060820151612c24906003830190601361653e565b505050806001019050612b8d565b5050505b6000612c4182614ab3565b9050612c4c816112b0565b15612c5b57612c5b8282614959565b5050565b606581565b334114612c835760405162461bcd60e51b8152600401610ce790617524565b60005460ff16612ca55760405162461bcd60e51b8152600401610ce790616d96565b60003411612cc55760405162461bcd60e51b8152600401610ce7906170e9565b3a15612ce35760405162461bcd60e51b8152600401610ce79061727b565b6001600160a01b03811660009081526004602052604090205460145434919060ff16612d2357610271600f556103e86006556014805460ff191660011790555b6000612d4c612710612d40600f5486614c5690919063ffffffff16565b9063ffffffff614c9016565b90508015612dbc576040516110029082156108fc029083906000818181858888f19350505050158015612d83573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d81604051612db39190617691565b60405180910390a15b600083118015612dce57506000600654115b15612e74576000612df0612710612d4060065487614c5690919063ffffffff16565b90508015612e725760405161dead9082156108fc029083906000818181858888f19350505050158015612e27573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee581604051612e579190617691565b60405180910390a1612e6f848263ffffffff61427a16565b93505b505b612e84838263ffffffff61427a16565b92508115612f84576000600180840381548110612e9d57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615612f0a57846001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b485604051612efd9190617691565b60405180910390a2612f7e565b600354612f1d908563ffffffff6142bc16565b6003908155810154612f35908563ffffffff6142bc16565b60038201556040516001600160a01b038616907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc05590612f75908790617691565b60405180910390a25b50612fc6565b836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b484604051612fbd9190617691565b60405180910390a25b50505050565b600e5481565b61100081565b61dead81565b600b8181548110612feb57fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff909116949192918301828280156130965780601f1061306b57610100808354040283529160200191613096565b820191906000526020600020905b81548152906001019060200180831161307957829003601f168201915b5050505050905083565b61100481565b6000600a54600014806130b7575081155b806130c25750600954155b156130cf57506000610f4e565b6009600081546001900391905081905550600061311a600a54612d4085612d40600b89815481106130fc57fe5b6000918252602090912060169091020154439063ffffffff61427a16565b90506000600b858154811061312b57fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b15801561319057600080fd5b505afa1580156131a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c89190616923565b9150915060009350808310613242576131e187876142e1565b506040516305bfb49960e41b815261100190635bfb499090613207908a90600401616a60565b600060405180830381600087803b15801561322157600080fd5b505af1158015613235573d6000803e3d6000fd5b5050505060019350613254565b8183106132545761325287614ab3565b505b6040516001600160a01b038816907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050509392505050565b61329a61656b565b60006132a461656b565b6132ac61658f565b6132bd6132b886614cd2565b614cf7565b90506000805b6132cc83614d41565b1561344057806132f1576132e76132e284614d62565b614db0565b60ff168452613438565b806001141561343357606061330d61330885614d62565b614e30565b9050805160405190808252806020026020018201604052801561334a57816020015b6133376165af565b81526020019060019003908161332f5790505b508560200181905250805160405190808252806020026020018201604052801561338857816020015b60608152602001906001900390816133735790505b50604086015260005b8151811015613428576133a26165af565b606060006133c28585815181106133b557fe5b6020026020010151614f01565b925092509250806133e2578860009a509a50505050505050505050613449565b82896020015185815181106133f357fe5b6020026020010181905250818960400151858151811061340f57fe5b6020026020010181905250505050806001019050613391565b506001925050613438565b613440565b6001016132c3565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b606081526020019060019003908161346857905050905061348e8363ffffffff1661501b565b8160008151811061349b57fe5b6020026020010181905250610f4e8161502e565b60006064835111156134e6576000805160206178cf8339815191526040516134d690616ea9565b60405180910390a150606661142a565b60005b83518110156135845760005b8181101561357b5784818151811061350957fe5b6020026020010151600001516001600160a01b031685838151811061352a57fe5b6020026020010151600001516001600160a01b03161415613573576000805160206178cf83398151915260405161356090617004565b60405180910390a160669250505061142a565b6001016134f5565b506001016134e9565b5060608061359285856150b8565b60015491935091506000908190815b818110156136175767016345785d8a0000600182815481106135bf57fe5b906000526020600020906004020160030154106135e15783600101935061360f565b6000600182815481106135f057fe5b906000526020600020906004020160030154111561360f578260010192505b6001016135a1565b50606083604051908082528060200260200182016040528015613644578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015613673578160200160208202803683370190505b5090506060856040519080825280602002602001820160405280156136a2578160200160208202803683370190505b5090506060866040519080825280602002602001820160405280156136d1578160200160208202803683370190505b5090506000606087604051908082528060200260200182016040528015613702578160200160208202803683370190505b509050606088604051908082528060200260200182016040528015613731578160200160208202803683370190505b509050600099506000985060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561377957600080fd5b505afa15801561378d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b1919061690b565b905067016345785d8a00008111156137fc576000805160206178cf8339815191526040516137de90617368565b60405180910390a160689d505050505050505050505050505061142a565b60005b89811015613a6d5767016345785d8a00006001828154811061381d57fe5b906000526020600020906004020160030154106139a2576001818154811061384157fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898d8151811061387257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be400600183815481106138a757fe5b906000526020600020906004020160030154816138c057fe5b06600183815481106138ce57fe5b9060005260206000209060040201600301540390506138f6838261427a90919063ffffffff16565b898e8151811061390257fe5b6020026020010181815250506001828154811061391b57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878e8151811061394c57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888e8151811061397957fe5b6020908102919091010152613994868263ffffffff6142bc16565b95508c6001019c5050613a65565b6000600182815481106139b157fe5b9060005260206000209060040201600301541115613a6557600181815481106139d657fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848c81518110613a0757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060018181548110613a3457fe5b906000526020600020906004020160030154838c81518110613a5257fe5b6020026020010181815250508a6001019a505b6001016137ff565b5060008415613ce3576002546040516303702b2960e51b815261100491636e056520918891613aa7918e918e918d91420190600401616b52565b6020604051808303818588803b158015613ac057600080fd5b505af193505050508015613af1575060408051601f3d908101601f19168201909252613aee91810190616838565b60015b613c68576040516000815260443d1015613b0d57506000613ba8565b60046000803e60005160e01c6308c379a08114613b2e576000915050613ba8565b60043d036004833e81513d60248201116001600160401b0382111715613b5957600092505050613ba8565b80830180516001600160401b03811115613b7a576000945050505050613ba8565b8060208301013d8601811115613b9857600095505050505050613ba8565b601f01601f191660405250925050505b80613bb35750613bf5565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051613be79190616bd7565b60405180910390a250613c63565b3d808015613c1f576040519150601f19603f3d011682016040523d82523d6000602084013e613c24565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051613c599190616bd7565b60405180910390a2505b613ce3565b8015613caa577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051613c9d9190617691565b60405180910390a1613ce1565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051613cd890616c99565b60405180910390a25b505b8015613e995760005b8751811015613e97576000888281518110613d0357fe5b60200260200101519050600060018281548110613d1c57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc9185908110613d4d57fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f1935050505090508015613e095760018281548110613d8e57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d9185908110613ddd57fe5b906000526020600020906004020160030154604051613dfc9190617691565b60405180910390a2613e8d565b60018281548110613e1657fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d9185908110613e6557fe5b906000526020600020906004020160030154604051613e849190617691565b60405180910390a25b5050600101613cec565b505b835115613fe35760005b8451811015613fe1576000858281518110613eba57fe5b60200260200101516001600160a01b03166108fc868481518110613eda57fe5b60200260200101519081150290604051600060405180830381858888f1935050505090508015613f7057858281518110613f1057fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d868481518110613f4e57fe5b6020026020010151604051613f639190617691565b60405180910390a2613fd8565b858281518110613f7c57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d868481518110613fba57fe5b6020026020010151604051613fcf9190617691565b60405180910390a25b50600101613ea3565b505b505050505050505050505050600047111561405f577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d476040516140279190617691565b60405180910390a1604051611002904780156108fc02916000818181858888f1935050505015801561405d573d6000803e3d6000fd5b505b6000600381905560055581511561407a5761407a82826152f1565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156140b757600080fd5b505af11580156140cb573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b80516001600160a01b0316600090815260046020526040812054801580614154575060018082038154811061413457fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b1561419a5782516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a2600091505061137a565b6001546005546000198201118015906141f05784516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000935050505061137a565b60058054600190810190915580548190600019860190811061420e57fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915585516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a2506000949350505050565b6000610f4e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615aab565b600082820183811015610f4e5760405162461bcd60e51b8152600401610ce790616dcd565b600080600183815481106142f157fe5b9060005260206000209060040201600301549050600060018080549050039050600161431b6126bb565b51116143505760006001858154811061433057fe5b90600052602060002090600402016003018190555060009250505061142a565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a70836040516143899190617691565b60405180910390a26001600160a01b038516600090815260046020526040812055835b6001546000190181101561457657600181600101815481106143ca57fe5b9060005260206000209060040201600182815481106143e557fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b8054909183019081106144a657fe5b9060005260206000209060160201600b82815481106144c157fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff19909216919091179055600280840180546145189383860193908216156101000260001901909116046165e4565b5061452b60038281019084016013616659565b5090505080600101600460006001848154811061454457fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020556001016143ac565b50600180548061458257fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b8054806145d557fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906146076002830182616683565b6146156003830160006166c7565b50509055600081838161462457fe5b04905080156146885760015460005b8181101561468557826001828154811061464957fe5b906000526020600020906004020160030154016001828154811061466957fe5b6000918252602090912060036004909202010155600101614633565b50505b50600195945050505050565b6001548151604080518281526020808402820101909152606092919083908280156146d357816020015b60608152602001906001900390816146be5790505b50600b5490915083146146ea57925061137a915050565b60005b828110156147f957600b60016004600089858151811061470957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054038154811061473d57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156147d55780601f106147aa576101008083540402835291602001916147d5565b820191906000526020600020905b8154815290600101906020018083116147b857829003601f168201915b50505050508282815181106147e657fe5b60209081029190910101526001016146ed565b50949350505050565b60005b8281101561494f5760008287838801604051602001614825929190616a52565b6040516020818303038152906040528051906020012060001c8161484557fe5b06905080850182870114614946576000898388018151811061486357fe5b602002602001015190506060898489018151811061487d57fe5b602002602001015190508a8388018151811061489557fe5b60200260200101518b858a01815181106148ab57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b848901815181106148da57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050898388018151811061490857fe5b60200260200101518a858a018151811061491e57fe5b6020026020010181905250808a8489018151811061493857fe5b602002602001018190525050505b50600101614805565b5050505050505050565b600980546001908101909155600b80548390811061497357fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b82815481106149a957fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b600081604051602001614a049190616a36565b6040516020818303038152906040528051906020012083604051602001614a2b9190616a36565b6040516020818303038152906040528051906020012014905092915050565b015190565b815181516000916001918114808314614a6b5760009250614aa9565b600160208701838101602088015b600284838510011415614aa4578051835114614a985760009650600093505b60209283019201614a79565b505050505b5090949350505050565b6001600160a01b03811660009081526004602052604081205480614adc5750600019905061137a565b600181039050600060018281548110614af157fe5b9060005260206000209060040201600301549050600060018381548110614b1457fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d90614b6d908590617691565b60405180910390a280614b855782935050505061137a565b6000818381614b9057fe5b0490508015614c4c5760005b84811015614bee578160018281548110614bb257fe5b9060005260206000209060040201600301540160018281548110614bd257fe5b6000918252602090912060036004909202010155600101614b9c565b50600180549085015b81811015614c49578260018281548110614c0d57fe5b9060005260206000209060040201600301540160018281548110614c2d57fe5b6000918252602090912060036004909202010155600101614bf7565b50505b5091949350505050565b600082614c655750600061142a565b82820282848281614c7257fe5b0414610f4e5760405162461bcd60e51b8152600401610ce79061723a565b6000610f4e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615ad7565b614cda6166d6565b506040805180820190915281518152602082810190820152919050565b614cff61658f565b614d0882615b0e565b614d1157600080fd5b6000614d208360200151615b48565b60208085015160408051808201909152868152920190820152915050919050565b6000614d4b6166d6565b505080518051602091820151919092015191011190565b614d6a6166d6565b614d7382614d41565b614d7c57600080fd5b60208201516000614d8c82615bab565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590614dc557508151602110155b614dce57600080fd5b6000614ddd8360200151615b48565b90508083600001511015614e035760405162461bcd60e51b8152600401610ce7906173e0565b8251602080850151830180519284900392918310156147f957506020919091036101000a90049392505050565b6060614e3b82615b0e565b614e4457600080fd5b6000614e4f83615c8c565b9050606081604051908082528060200260200182016040528015614e8d57816020015b614e7a6166d6565b815260200190600190039081614e725790505b5090506000614e9f8560200151615b48565b60208601510190506000805b84811015614ef657614ebc83615bab565b9150604051806040016040528083815260200184815250848281518110614edf57fe5b602090810291909101015291810191600101614eab565b509195945050505050565b614f096165af565b60606000614f156165af565b6060614f1f61658f565b614f2887614cf7565b90506000805b614f3783614d41565b1561500c5780614f6257614f52614f4d84614d62565b615ce8565b6001600160a01b03168552615004565b8060011415614f8a57614f77614f4d84614d62565b6001600160a01b03166020860152615004565b8060021415614fb257614f9f614f4d84614d62565b6001600160a01b03166040860152615004565b8060031415614fde57614fc76132e284614d62565b6001600160401b0316606086015260019150615004565b8060041415614fff57614ff8614ff384614d62565b615d02565b9350615004565b61500c565b600101614f2e565b50929791965091945092505050565b606061142a61502983615d72565b615e58565b606081516000141561504f575060408051600081526020810190915261137a565b60608260008151811061505e57fe5b602002602001015190506000600190505b835181101561509f576150958285838151811061508857fe5b6020026020010151615eaa565b915060010161506f565b50610f4e6150b2825160c060ff16615f27565b82615eaa565b6060806000808080806150c96127c5565b6001549091505b80156151d757600181039250600b83815481106150e957fe5b600091825260209091206001601690920201015460ff16615109576151ce565b6001838154811061511657fe5b60009182526020909120600490910201546001600160a01b0316945061513d8584846130a6565b9350831580615150575060018a51038610155b1561515a576151ce565b60005b8a518110156151cc57856001600160a01b03168b828151811061517c57fe5b6020026020010151600001516001600160a01b031614156151c45760018b82815181106151a557fe5b60209081029190910101519015156080909101526001909601956151cc565b60010161515d565b505b600019016150d0565b508489510360405190808252806020026020018201604052801561521557816020015b6152026165af565b8152602001906001900390816151fa5790505b5096508489510360405190808252806020026020018201604052801561524f57816020015b606081526020019060019003908161523a5790505b5095506000915060005b89518110156152e35789818151811061526e57fe5b6020026020010151608001516152db5789818151811061528a57fe5b602002602001015188848151811061529e57fe5b60200260200101819052508881815181106152b557fe5b60200260200101518784815181106152c957fe5b60200260200101819052508260010192505b600101615259565b5050505050505b9250929050565b600154825160005b8281101561540e57600161530b6165af565b6001838154811061531857fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156153e2578781815181106153a857fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b031614156153da57600092506153e2565b600101615394565b5081156154045780516001600160a01b03166000908152600460205260408120555b50506001016152f9565b50808211156154cd57805b828110156154cb57600180548061542c57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061547f57fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906154b16002830182616683565b6154bf6003830160006166c7565b50509055600101615419565b505b60008183106154dc57816154de565b825b905060005b8181101561584d576155908682815181106154fa57fe5b60200260200101516001838154811061550f57fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152615ff9565b6157445780600101600460008884815181106155a857fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055508581815181106155e457fe5b6020026020010151600182815481106155f957fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015584518590829081106156b457fe5b6020026020010151600b82815481106156c957fe5b906000526020600020906016020160020190805190602001906156ed9291906164c4565b506000600b82815481106156fd57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b80548390811061572e57fe5b6000918252602090912060169091020155615845565b6157d585828151811061575357fe5b6020026020010151600b838154811061576857fe5b600091825260209182902060026016909202018101805460408051601f600019610100600186161502019093169490940491820185900485028401850190528083529192909190830182828015612ab85780601f10612a8d57610100808354040283529160200191612ab8565b615820578481815181106157e557fe5b6020026020010151600b82815481106157fa57fe5b9060005260206000209060160201600201908051906020019061581e9291906164c4565b505b60006001828154811061582f57fe5b9060005260206000209060040201600301819055505b6001016154e3565b5082821115615a255761585e616495565b835b83811015615a225785818151811061587457fe5b60200260200101518260400181905250600187828151811061589257fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b80549283018155909352845160169091026000805160206178ef83398151915281019182558583015160008051602061792f8339815191528201805491151560ff19909216919091179055928501518051869492936159c89360008051602061790f833981519152019201906164c4565b5060608201516159de906003830190601361653e565b50505080600101600460008984815181106159f557fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101615860565b50505b615a2d61607a565b615a3561625c565b6000600981905560015493505b83811015615aa3576000600b8281548110615a5957fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b805483908110615a8a57fe5b6000918252602090912060169091020155600101615a42565b505050505050565b60008184841115615acf5760405162461bcd60e51b8152600401610ce79190616bd7565b505050900390565b60008183615af85760405162461bcd60e51b8152600401610ce79190616bd7565b506000838581615b0457fe5b0495945050505050565b8051600090615b1f5750600061137a565b6020820151805160001a9060c0821015615b3e5760009250505061137a565b5060019392505050565b8051600090811a6080811015615b6257600091505061137a565b60b8811080615b7d575060c08110801590615b7d575060f881105b15615b8c57600191505061137a565b60c0811015615ba05760b51901905061137a565b60f51901905061137a565b80516000908190811a6080811015615bc65760019150615c85565b60b8811015615bdb57607e1981019150615c85565b60c0811015615c2c57600060b78203600186019550806020036101000a865104915060018101820193505080831015615c265760405162461bcd60e51b8152600401610ce790617187565b50615c85565b60f8811015615c415760be1981019150615c85565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615c835760405162461bcd60e51b8152600401610ce790617187565b505b5092915050565b8051600090615c9d5750600061137a565b60008090506000615cb18460200151615b48565b602085015185519181019250015b80821015615cdf57615cd082615bab565b82019150826001019250615cbf565b50909392505050565b8051600090601514615cf957600080fd5b61142a82614db0565b8051606090615d1057600080fd5b6000615d1f8360200151615b48565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015615d56576020820181803683370190505b50905060008160200190506147f984876020015101828561644a565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416615db657506018615dda565b6fffffffffffffffffffffffffffffffff198416615dd657506010615dda565b5060005b6020811015615e1057818181518110615def57fe5b01602001516001600160f81b03191615615e0857615e10565b600101615dda565b60008160200390506060816040519080825280601f01601f191660200182016040528015615e45576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015615e8a5750607f60f81b82600081518110615e7857fe5b01602001516001600160f81b03191611155b15615e9657508061137a565b61142a615ea88351608060ff16615f27565b835b6060806040519050835180825260208201818101602087015b81831015615edb578051835260209283019201615ec3565b50855184518101855292509050808201602086015b81831015615f08578051835260209283019201615ef0565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310615f515760405162461bcd60e51b8152600401610ce790616f7f565b60408051600180825281830190925260609160208201818036833701905050905060378411615fab5782840160f81b81600081518110615f8d57fe5b60200101906001600160f81b031916908160001a905350905061142a565b6060615fb685615d72565b90508381510160370160f81b82600081518110615fcf57fe5b60200101906001600160f81b031916908160001a905350615ff08282615eaa565b95945050505050565b805182516000916001600160a01b039182169116148015616033575081602001516001600160a01b031683602001516001600160a01b0316145b8015616058575081604001516001600160a01b031683604001516001600160a01b0316145b8015610f4e5750506060908101519101516001600160401b0390811691161490565b601254601354808211156160c557805b828110156160c357601280548061609d57fe5b6001900381819060005260206000200160006160b99190616683565b905560010161608a565b505b60008183106160d457816160d6565b825b905060005b818110156161ee57616193601282815481106160f357fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156161815780601f1061615657610100808354040283529160200191616181565b820191906000526020600020905b81548152906001019060200180831161616457829003601f168201915b505050505060138381548110612a2a57fe5b6161e657601381815481106161a457fe5b90600052602060002001601282815481106161bb57fe5b9060005260206000200190805460018160011615610100020316600290046161e49291906165e4565b505b6001016160db565b5082821115610d0757825b82811015612fc65760126013828154811061621057fe5b60009182526020808320845460018181018755958552919093209290910180546162539493909201929091600261010092821615929092026000190116046165e4565b506001016161f9565b601354600b54808211156162a757805b828110156162a557601380548061627f57fe5b60019003818190600052602060002001600061629b9190616683565b905560010161626c565b505b60008183106162b657816162b8565b825b905060005b818110156163d757616375601382815481106162d557fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156163635780601f1061633857610100808354040283529160200191616363565b820191906000526020600020905b81548152906001019060200180831161634657829003601f168201915b5050505050600b838154811061576857fe5b6163cf57600b818154811061638657fe5b9060005260206000209060160201600201601382815481106163a457fe5b9060005260206000200190805460018160011615610100020316600290046163cd9291906165e4565b505b6001016162bd565b5082821115610d0757825b82811015612fc6576013600b82815481106163f957fe5b600091825260208083208454600180820187559585529190932060169290920290920160029081018054616441959390940193909260001990821615610100020116046165e4565b506001016163e2565b8061645457610d07565b5b60208110616474578251825260209283019290910190601f1901616455565b915181516020939093036101000a6000190180199091169216919091179052565b604051806080016040528060008152602001600015158152602001606081526020016164bf6166f0565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061650557805160ff1916838001178555616532565b82800160010185558215616532579182015b82811115616532578251825591602001919060010190616517565b5061280092915061670f565b82601381019282156165325791602002820182811115616532578251825591602001919060010190616517565b6040518060600160405280600060ff16815260200160608152602001606081525090565b60405180604001604052806165a26166d6565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061661d5780548555616532565b8280016001018555821561653257600052602060002091601f016020900482015b8281111561653257825482559160010191906001019061663e565b8260138101928215616532579182018281111561653257825482559160010191906001019061663e565b50805460018160011615610100020316600290046000825580601f106166a95750611586565b601f016020900490600052602060002090810190611586919061670f565b5061158690601381019061670f565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b6127a491905b808211156128005760008155600101616715565b60008083601f84011261673a578182fd5b5081356001600160401b03811115616750578182fd5b60208301915083602080830285010111156152ea57600080fd5b60008083601f84011261677b578182fd5b5081356001600160401b03811115616791578182fd5b6020830191508360208285010111156152ea57600080fd5b6000602082840312156167ba578081fd5b81356001600160a01b0381168114610f4e578182fd5b600080600080604085870312156167e5578283fd5b84356001600160401b03808211156167fb578485fd5b61680788838901616729565b9096509450602087013591508082111561681f578384fd5b5061682c87828801616729565b95989497509550505050565b600060208284031215616849578081fd5b81518015158114610f4e578182fd5b6000806020838503121561686a578182fd5b82356001600160401b0381111561687f578283fd5b61688b8582860161676a565b90969095509350505050565b600080600080604085870312156168ac578384fd5b84356001600160401b03808211156168c2578586fd5b6168ce8883890161676a565b909650945060208701359150808211156168e6578384fd5b5061682c8782880161676a565b600060208284031215616904578081fd5b5035919050565b60006020828403121561691c578081fd5b5051919050565b60008060408385031215616935578182fd5b505080516020909101519092909150565b60008060006040848603121561695a578283fd5b833560ff8116811461696a578384fd5b925060208401356001600160401b03811115616984578283fd5b6169908682870161676a565b9497909650939450505050565b6000815180845260208085019450808401835b838110156169d55781516001600160a01b0316875295820195908201906001016169b0565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452616a228160208601602086016176f7565b601f01601f19169290920160200192915050565b60008251616a488184602087016176f7565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b600060208252610f4e602083018461699d565b600060408252616af5604083018561699d565b602083820381850152818551808452828401915082838202850101838801865b83811015616b4357601f19878403018552616b31838351616a0a565b94860194925090850190600101616b15565b50909998505050505050505050565b600060808252616b65608083018761699d565b828103602084810191909152865180835287820192820190845b81811015616b9b57845183529383019391830191600101616b7f565b50508481036040860152616baf818861699d565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b600060208252610f4e6020830184616a0a565b600060408252616bfe6040830186886169e0565b8281036020840152616c118185876169e0565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252602b908201527f746865206275726e526174696f206d757374206265206e6f206772656174657260408201526a0207468616e2031303030360ac1b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526033908201527f7468652073797374656d526577617264526174696f206d757374206265206e6f60408201527202067726561746572207468616e20313030303606c1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526024908201527f6c656e677468206f662073797374656d526577617264526174696f206d69736d6040820152630c2e8c6d60e31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b61ffff91909116815260200190565b90815260200190565b6000848252831515602083015260606040830152615ff06060830184616a0a565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff8516825260406020830152615ff06040830184866169e0565b60005b838110156177125781810151838201526020016176fa565b83811115612fc6575050600091015256fef901a880f901a4f844941284214b9b9c85549ab3d2b972df0deef66ac2c9946ddf42a51534fc98d0c0a3b42c963cace8441ddf946ddf42a51534fc98d0c0a3b42c963cace8441ddf8410000000f84494a2959d3f95eae5dc7d70144ce1b73b403b7eb6e0948081ef03f1d9e0bb4a5bf38f16285c879299f07f948081ef03f1d9e0bb4a5bf38f16285c879299f07f8410000000f8449435552c16704d214347f29fa77f77da6d75d7c75294dc4973e838e3949c77aced16ac2315dc2d7ab11194dc4973e838e3949c77aced16ac2315dc2d7ab1118410000000f84494980a75ecd1309ea12fa2ed87a8744fbfc9b863d594cc6ac05c95a99c1f7b5f88de0e3486c82293b27094cc6ac05c95a99c1f7b5f88de0e3486c82293b2708410000000f84494f474cf03cceff28abc65c9cbae594f725c80e12d94e61a183325a18a173319dd8e19c8d069459e217594e61a183325a18a173319dd8e19c8d069459e21758410000000f84494b71b214cb885500844365e95cd9942c7276e7fd894d22ca3ba2141d23adab65ce4940eb7665ea2b6a794d22ca3ba2141d23adab65ce4940eb7665ea2b6a7841000000070e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb20175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbb0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaa164736f6c6343000604000a", }, { ContractAddr: common.HexToAddress(SlashContract), - CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe", Code: "608060405234801561001057600080fd5b50600436106102955760003560e01c80638256ace611610167578063c81b1662116100ce578063e1c7392a11610087578063e1c7392a146104d3578063eb57bff7146104db578063f9a2bbc7146104e3578063fc3e5908146104eb578063fc4333cd146104f3578063fd6a6879146104fb57610295565b8063c81b166214610482578063c8509d811461048a578063c96be4cb1461049d578063cc844b73146104b0578063d2a42e4b146104c3578063dc927faf146104cb57610295565b8063a78abc1611610120578063a78abc1614610447578063ab51bb961461044f578063ac0af62914610457578063ac4317511461045f578063ae61dc3b14610472578063c80d4b8f1461047a57610295565b80638256ace61461040c578063831d65d11461041457806396713da9146104275780639bc8e4f21461042f5780639dc0926214610437578063a1a11bf51461043f57610295565b8063493279b11161020b5780636e47b482116101c45780636e47b482146103dc57806370fd5bad146103e4578063718a8aa8146103ec57806375d47a0a146103f45780637912a65d146103fc5780637942fd051461040457610295565b8063493279b1146103925780634bf6c882146103a757806351e80672146103af578063567a372d146103b75780635bfb4990146103bf57806362b72cf5146103d457610295565b806335aa2e441161025d57806335aa2e441461032457806337c8dab914610337578063389f4f71146103585780633a63f4b11461036d5780633dffc3871461037557806343756e5c1461038a57610295565b80630bee7a671461029a5780630e2374a5146102b85780631182b875146102cd57806322d1e80b146102ed57806323bac5a214610302575b600080fd5b6102a2610503565b6040516102af919061354e565b60405180910390f35b6102c0610508565b6040516102af9190612d6a565b6102e06102db366004612ca0565b61050e565b6040516102af9190612da2565b6102f5610574565b6040516102af9190612d97565b610315610310366004612a4e565b61057d565b6040516102af93929190613536565b6102c0610332366004612c70565b6105a0565b61034a610345366004612a4e565b6105c7565b6040516102af929190613528565b61036061061e565b6040516102af91906134fe565b610360610624565b61037d61062a565b6040516102af919061355f565b6102c061062f565b61039a610635565b6040516102af91906134ef565b61037d61063a565b6102c061063f565b610360610645565b6103d26103cd366004612a4e565b61064b565b005b6103606106f6565b6102c06106fc565b61037d610702565b61037d610707565b6102c061070c565b610360610712565b61037d610717565b61034a61071c565b6103d2610422366004612ca0565b610726565b61037d610838565b61036061083d565b6102c0610848565b6102c061084e565b6102f5610854565b6102a261085d565b610360610862565b6103d261046d366004612b54565b610867565b610360610e17565b610360610e1e565b6102c0610e23565b6103d2610498366004612ca0565b610e29565b6103d26104ab366004612a4e565b610e9a565b6103d26104be366004612bbd565b61128b565b61036061187c565b6102c0611881565b6103d2611887565b6103606118c3565b6102c06118c9565b61037d6118cf565b6103d26118d4565b6102c0611d1d565b606481565b61200181565b6060336120001461053a5760405162461bcd60e51b815260040161053190613347565b60405180910390fd5b60005460ff1661055c5760405162461bcd60e51b815260040161053190612e9d565b60405162461bcd60e51b815260040161053190613438565b60075460ff1681565b600260208190526000918252604090912080546001820154919092015460ff1683565b600181815481106105ad57fe5b6000918252602090912001546001600160a01b0316905081565b6000806105d2612835565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b60065481565b600181565b61100181565b606181565b600881565b61200081565b60045481565b336110001461066c5760405162461bcd60e51b81526004016105319061312c565b60005460ff1661068e5760405162461bcd60e51b815260040161053190612e9d565b61200063f7a251d7600b6106a184611d23565b60006040518463ffffffff1660e01b81526004016106c19392919061356d565b600060405180830381600087803b1580156106db57600080fd5b505af11580156106ef573d6000803e3d6000fd5b5050505050565b60035481565b61100581565b600281565b601081565b61100881565b603281565b600b81565b6004546005549091565b33612000146107475760405162461bcd60e51b815260040161053190613347565b60005460ff166107695760405162461bcd60e51b815260040161053190612e9d565b610771612858565b60006107b284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611df592505050565b9150915080156107f95781516040517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e629967916107ec9161354e565b60405180910390a16106ef565b81516040517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e7916108299161354e565b60405180910390a15050505050565b600981565b662386f26fc1000081565b61100781565b61100681565b60005460ff1681565b600081565b600481565b60005460ff166108895760405162461bcd60e51b815260040161053190612e9d565b33611007146108aa5760405162461bcd60e51b815260040161053190613204565b61091584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b60208201529150611e759050565b156109b0576020811461093a5760405162461bcd60e51b8152600401610531906130b8565b604080516020601f840181900481028201810190925282815260009161097891858580838501838280828437600092019190915250611ecf92505050565b90506001811015801561098c575060055481105b6109a85760405162461bcd60e51b815260040161053190613302565b600455610dd4565b610a1684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b60208201529150611e759050565b15610ab25760208114610a3b5760405162461bcd60e51b815260040161053190613252565b604080516020601f8401819004810282018101909252828152600091610a7991858580838501838280828437600092019190915250611ecf92505050565b90506103e88111158015610a8e575060045481115b610aaa5760405162461bcd60e51b815260040161053190612f56565b600555610dd4565b610b2684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f66696e616c697479536c617368526577617264526174696f000000000000000060208201529150611e759050565b15610bc05760208114610b4b5760405162461bcd60e51b81526004016105319061346f565b604080516020601f8401819004810282018101909252828152600091610b8991858580838501838280828437600092019190915250611ecf92505050565b9050600a8110158015610b9c5750606481105b610bb85760405162461bcd60e51b81526004016105319061306c565b600655610dd4565b610c3484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f656e61626c654d616c6963696f7573566f7465536c617368000000000000000060208201529150611e759050565b15610cab5760208114610c595760405162461bcd60e51b815260040161053190612f8b565b604080516020601f8401819004810282018101909252828152610c959190848480838501838280828437600092019190915250611ed492505050565b6007805460ff1916911515919091179055610dd4565b610d1f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601781527f6d616c6963696f7573566f7465536c61736853636f706500000000000000000060208201529150611e759050565b15610dbc5760208114610d445760405162461bcd60e51b815260040161053190612de7565b604080516020601f8401819004810282018101909252828152600091610d8291858580838501838280828437600092019190915250611ecf92505050565b90506170808110158015610d985750620d2f0081105b610db45760405162461bcd60e51b815260040161053190612ed4565b600855610dd4565b60405162461bcd60e51b8152600401610531906133e3565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a84848484604051610e099493929190612db5565b60405180910390a150505050565b6201518081565b609681565b61100281565b3361200014610e4a5760405162461bcd60e51b815260040161053190613347565b60005460ff16610e6c5760405162461bcd60e51b815260040161053190612e9d565b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b334114610eb95760405162461bcd60e51b815260040161053190613396565b60005460ff16610edb5760405162461bcd60e51b815260040161053190612e9d565b6003544311610efc5760405162461bcd60e51b8152600401610531906134ba565b3a15610f1a5760405162461bcd60e51b8152600401610531906131a7565b60405163155853f360e21b8152611000906355614fcc90610f3f908490600401612d6a565b60206040518083038186803b158015610f5757600080fd5b505afa158015610f6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8f9190612b34565b610f9857611284565b610fa0612835565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff161580159282019290925290610ffb576020810180516001019052611054565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b43815260055460208201518161106657fe5b066111b257600060208201526040516335409f7f60e01b8152611000906335409f7f90611097908590600401612d6a565b600060405180830381600087803b1580156110b157600080fd5b505af11580156110c5573d6000803e3d6000fd5b505050506120006001600160a01b031663f7a251d7600b6110e585611d23565b60006040518463ffffffff1660e01b81526004016111059392919061356d565b600060405180830381600087803b15801561111f57600080fd5b505af1925050508015611130575060015b6111ad573d80801561115e576040519150601f19603f3d011682016040523d82523d6000602084013e611163565b606091505b50826001600160a01b03167fd7bc86ff5d08c8ab043edec743302aba2520e6635172a428bc956721db9e2d1c8360200151836040516111a3929190613507565b60405180910390a2505b61121e565b6004548160200151816111c157fe5b0661121e576040516375abf10160e11b81526110009063eb57e202906111eb908590600401612d6a565b600060405180830381600087803b15801561120557600080fd5b505af1158015611219573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505b5043600355565b60005460ff166112ad5760405162461bcd60e51b815260040161053190612e9d565b604051630a83aaa960e31b81526110069063541d5548906112d2903390600401612d6a565b60206040518083038186803b1580156112ea57600080fd5b505afa1580156112fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113229190612b34565b61133e5760405162461bcd60e51b815260040161053190612e31565b60075460ff166113605760405162461bcd60e51b815260040161053190612e68565b60065461136d5760146006555b60085461137c57620151806008555b6008548151604001514391011180156113a057504360085482602001516040015101115b6113bc5760405162461bcd60e51b81526004016105319061340a565b8060200151602001518160000151602001511480156113ea5750806020015160600151816000015160600151145b156114075760405162461bcd60e51b8152600401610531906130ff565b8051604081015190511080156114265750602081015160408101519051105b6114425760405162461bcd60e51b815260040161053190613035565b6020810151518151511080156114675750806000015160400151816020015160400151105b8061149257508051516020820151511080156114925750806020015160400151816000015160400151105b806114ac5750806020015160400151816000015160400151145b6114c85760405162461bcd60e51b815260040161053190612f1f565b604080820151905163ea321e4960e01b81526110009163ea321e49916114f19190600401612da2565b60206040518083038186803b15801561150957600080fd5b505afa15801561151d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115419190612b34565b61155d5760405162461bcd60e51b8152600401610531906131d5565b61156f81600001518260400151611efc565b8015611588575061158881602001518260400151611efc565b6115a45760405162461bcd60e51b815260040161053190612fd6565b6060806110006001600160a01b0316633b071dcc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156115e257600080fd5b505afa1580156115f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261161e9190810190612a71565b9150915060005b81518110156117595761164f82828151811061163d57fe5b602002602001015185604001516120d4565b15611751576006546040516213929d60e11b8152606461100280319093020491906227253a906116859033908590600401612d7e565b602060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d79190612c88565b506110006001600160a01b03166335409f7f8584815181106116f557fe5b60200260200101516040518263ffffffff1660e01b81526004016117199190612d6a565b600060405180830381600087803b15801561173357600080fd5b505af1158015611747573d6000803e3d6000fd5b5050505050611759565b600101611625565b50600061176b84604001516000612138565b90506120006001600160a01b031663f7a251d7600b61178d8760400151612154565b60006040518463ffffffff1660e01b81526004016117ad9392919061356d565b600060405180830381600087803b1580156117c757600080fd5b505af19250505080156117d8575060015b61184a573d808015611806576040519150601f19603f3d011682016040523d82523d6000602084013e61180b565b606091505b50817fd58d1183100bd0932c0588f31c4205d6bc6168909765a96c41adbed3115f36288260405161183c9190612da2565b60405180910390a250611876565b60405181907f7b78aadacff901d8b63d0dba4f86283d4db8aef27f9ed70413dd860f1c9532b690600090a25b50505050565b601481565b61100381565b60005460ff16156118aa5760405162461bcd60e51b815260040161053190613294565b603260045560966005556000805460ff19166001179055565b60085481565b61100081565b600381565b33611000146118f55760405162461bcd60e51b81526004016105319061312c565b60005460ff166119175760405162461bcd60e51b815260040161053190612e9d565b60015461192357611d1b565b600154600090600019015b808211611cef576000805b82841015611a5257611949612835565b600260006001878154811061195a57fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611a3c576004600554816119c757fe5b048160200151038160200181815250508060026000600188815481106119e957fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611a46565b6001925050611a52565b50836001019350611939565b828411611be957611a61612835565b6002600060018681548110611a7257fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611b5a57600460055481611adf57fe5b04816020015103816020018181525050806002600060018781548110611b0157fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff19169115159190911790559150611be99050565b6002600060018681548110611b6b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805480611baf57fe5b600082815260209020810160001990810180546001600160a01b031916905501905583611bdc5750611be9565b5060001990920191611a52565b818015611bf35750805b15611cd2576002600060018681548110611c0957fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805484908110611c5057fe5b600091825260209091200154600180546001600160a01b039092169186908110611c7657fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001805480611caf57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b82611cde575050611cef565b50506001909101906000190161192e565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081611d3e579050509050611d67836001600160a01b031661218f565b81600081518110611d7457fe5b6020026020010181905250611d88436121b2565b81600181518110611d9557fe5b6020908102919091010152611daa60616121b2565b81600281518110611db757fe5b6020026020010181905250611dcb426121b2565b81600381518110611dd857fe5b6020026020010181905250611dec816121c5565b9150505b919050565b611dfd612858565b6000611e07612858565b611e0f61286a565b611e20611e1b8661224f565b612274565b90506000805b611e2f836122be565b15611e685780611e5b57611e4a611e45846122df565b61232d565b63ffffffff16845260019150611e60565b611e68565b600101611e26565b5091935090915050915091565b600081604051602001611e889190612d4e565b6040516020818303038152906040528051906020012083604051602001611eaf9190612d4e565b604051602081830303815290604052805190602001201490505b92915050565b015190565b8082015160009060ff811615611eee576001915081611ef4565b60009150815b505092915050565b60408051600480825260a0820190925260009160609190816020015b6060815260200190600190039081611f18575050604080516020808252818301909252919250606091908082018180368337019050509050611f5d85600001516121b2565b82600081518110611f6a57fe5b6020026020010181905250611f8560208660200151836123af565b611f8e816123bf565b82600181518110611f9b57fe5b6020026020010181905250611fb385604001516121b2565b82600281518110611fc057fe5b6020026020010181905250611fdb60208660600151836123af565b611fe4816123bf565b82600381518110611ff157fe5b6020026020010181905250612017602061200a846121c5565b80519060200120836123af565b6040805160b080825260e08201909252606091602082018180368337019050509050612047818360006020612415565b61205981876080015160206060612415565b612067818660806030612415565b604080516001808252818301909252606091602082018180368337019050509050815160016020830182602086016066600019fa6120a457600080fd5b5060016120b2826000612468565b60ff16146120c7576000945050505050611ec9565b5060019695505050505050565b8151815160009160019181148083146120f0576000925061212e565b600160208701838101602088015b60028483851001141561212957805183511461211d5760009650600093505b602092830192016120fe565b505050505b5090949350505050565b6000816020018351101561214b57600080fd5b50016020015190565b60408051600480825260a08201909252606091829190816020015b606081526020019060019003908161216f579050509050611d67836123bf565b60408051600560a21b8318601482015260348101909152606090611dec816123bf565b6060611ec96121c083612484565b6123bf565b60608151600014156121e65750604080516000815260208101909152611df0565b6060826000815181106121f557fe5b602002602001015190506000600190505b83518110156122365761222c8285838151811061221f57fe5b602002602001015161256a565b9150600101612206565b50611dec612249825160c060ff166125e7565b8261256a565b61225761288a565b506040805180820190915281518152602082810190820152919050565b61227c61286a565b612285826126b9565b61228e57600080fd5b600061229d83602001516126f3565b60208085015160408051808201909152868152920190820152915050919050565b60006122c861288a565b505080518051602091820151919092015191011190565b6122e761288a565b6122f0826122be565b6122f957600080fd5b6020820151600061230982612756565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061234257508151602110155b61234b57600080fd5b600061235a83602001516126f3565b905080836000015110156123805760405162461bcd60e51b8152600401610531906132cb565b8251602080850151830180519284900392918310156123a657826020036101000a820491505b50949350505050565b9091018181526020918201910152565b6060815160011480156123f15750607f60f81b826000815181106123df57fe5b01602001516001600160f81b03191611155b156123fd575080611df0565b611ec961240f8351608060ff166125e7565b8361256a565b60005b818110156106ef5783818151811061242c57fe5b602001015160f81c60f81b85848060010195508151811061244957fe5b60200101906001600160f81b031916908160001a905350600101612418565b6000816001018351101561247b57600080fd5b50016001015190565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166124c8575060186124ec565b6fffffffffffffffffffffffffffffffff1984166124e8575060106124ec565b5060005b60208110156125225781818151811061250157fe5b01602001516001600160f81b0319161561251a57612522565b6001016124ec565b60008160200390506060816040519080825280601f01601f191660200182016040528015612557576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561259b578051835260209283019201612583565b50855184518101855292509050808201602086015b818310156125c85780518352602092830192016125b0565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106126115760405162461bcd60e51b81526004016105319061300d565b6040805160018082528183019092526060916020820181803683370190505090506037841161266b5782840160f81b8160008151811061264d57fe5b60200101906001600160f81b031916908160001a9053509050611ec9565b606061267685612484565b90508381510160370160f81b8260008151811061268f57fe5b60200101906001600160f81b031916908160001a9053506126b0828261256a565b95945050505050565b80516000906126ca57506000611df0565b6020820151805160001a9060c08210156126e957600092505050611df0565b5060019392505050565b8051600090811a608081101561270d576000915050611df0565b60b8811080612728575060c08110801590612728575060f881105b15612737576001915050611df0565b60c081101561274b5760b519019050611df0565b60f519019050611df0565b80516000908190811a6080811015612771576001915061282e565b60b881101561278657607e198101915061282e565b60c08110156127d757600060b78203600186019550806020036101000a8651049150600181018201935050808310156127d15760405162461bcd60e51b81526004016105319061317c565b5061282e565b60f88110156127ec5760be198101915061282e565b600060f78203600186019550806020036101000a865104915060018101820193505080831015611ef45760405162461bcd60e51b81526004016105319061317c565b5092915050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b604051806040016040528061287d61288a565b8152602001600081525090565b604051806040016040528060008152602001600081525090565b600082601f8301126128b4578081fd5b81516128c76128c2826135c0565b613599565b818152915060208083019084810160005b8481101561293d578151870188603f8201126128f357600080fd5b838101516129036128c2826135e0565b81815260408b8184860101111561291957600080fd5b61292883888401838701613604565b508652505092820192908201906001016128d8565b505050505092915050565b60008083601f840112612959578182fd5b50813567ffffffffffffffff811115612970578182fd5b60208301915083602082850101111561298857600080fd5b9250929050565b600082601f83011261299f578081fd5b81356129ad6128c2826135e0565b91508082528360208285010111156129c457600080fd5b8060208401602084013760009082016020015292915050565b600060a082840312156129ee578081fd5b6129f860a0613599565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff811115612a3657600080fd5b612a428482850161298f565b60808301525092915050565b600060208284031215612a5f578081fd5b8135612a6a81613630565b9392505050565b60008060408385031215612a83578081fd5b825167ffffffffffffffff80821115612a9a578283fd5b81850186601f820112612aab578384fd5b80519250612abb6128c2846135c0565b80848252602080830192508084018a828389028701011115612adb578788fd5b8794505b86851015612b06578051612af281613630565b845260019490940193928101928101612adf565b508801519096509350505080821115612b1d578283fd5b50612b2a858286016128a4565b9150509250929050565b600060208284031215612b45578081fd5b81518015158114612a6a578182fd5b60008060008060408587031215612b69578182fd5b843567ffffffffffffffff80821115612b80578384fd5b612b8c88838901612948565b90965094506020870135915080821115612ba4578384fd5b50612bb187828801612948565b95989497509550505050565b600060208284031215612bce578081fd5b813567ffffffffffffffff80821115612be5578283fd5b81840160608187031215612bf7578384fd5b612c016060613599565b9250803582811115612c11578485fd5b612c1d878284016129dd565b845250602081013582811115612c31578485fd5b612c3d878284016129dd565b602085015250604081013582811115612c54578485fd5b612c608782840161298f565b6040850152509195945050505050565b600060208284031215612c81578081fd5b5035919050565b600060208284031215612c99578081fd5b5051919050565b600080600060408486031215612cb4578283fd5b833560ff81168114612cc4578384fd5b9250602084013567ffffffffffffffff811115612cdf578283fd5b612ceb86828701612948565b9497909650939450505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612d3a816020860160208601613604565b601f01601f19169290920160200192915050565b60008251612d60818460208701613604565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060208252612a6a6020830184612d22565b600060408252612dc9604083018688612cf8565b8281036020840152612ddc818587612cf8565b979650505050505050565b6020808252602a908201527f6c656e677468206f66206d616c6963696f7573566f7465536c61736853636f706040820152690ca40dad2e6dac2e8c6d60b31b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604082015260600190565b6020808252818101527f6d616c6963696f757320766f746520736c617368206e6f7420656e61626c6564604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252602b908201527f746865206d616c6963696f757320766f746520736c6173682073636f7065206f60408201526a7574206f662072616e676560a81b606082015260800190565b6020808252601a908201527f6e6f2076696f6c6174696f6e206f6620766f74652072756c6573000000000000604082015260600190565b6020808252818101527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604082015260600190565b6020808252602b908201527f6c656e677468206f6620656e61626c654d616c6963696f7573566f7465536c6160408201526a0e6d040dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526017908201527f766572696679207369676e6174757265206661696c6564000000000000000000604082015260600190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526019908201527f7372634e756d20626967676572207468616e207461724e756d00000000000000604082015260600190565b6020808252602c908201527f7468652066696e616c69747920736c6173682072657761726420726174696f2060408201526b6f7574206f662072616e676560a01b606082015260800190565b60208082526027908201527f6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d6040820152660d2e6dac2e8c6d60cb1b606082015260800190565b60208082526013908201527274776f206964656e746963616c20766f74657360681b604082015260600190565b60208082526030908201527f746865206d6573736167652073656e646572206d7573742062652076616c696460408201526f185d1bdc94d95d0818dbdb9d1c9858dd60821b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252601590820152741d9bdd195059191c881a5cc81b9bdd08199bdd5b99605a1b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526022908201527f6c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746040820152610c6d60f31b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526025908201527f746865206d697364656d65616e6f725468726573686f6c64206f7574206f662060408201526472616e676560d81b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b6020808252601490820152731d185c99d95d08189b1bd8dac81d1bdbc81bdb1960621b604082015260600190565b6020808252601e908201527f7265636569766520756e65787065637465642073796e207061636b6167650000604082015260600190565b6020808252602b908201527f6c656e677468206f662066696e616c697479536c61736852657761726452617460408201526a0d2de40dad2e6dac2e8c6d60ab1b606082015260800190565b6020808252818101527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604082015260600190565b61ffff91909116815260200190565b90815260200190565b6000838252604060208301526135206040830184612d22565b949350505050565b918252602082015260400190565b92835260208301919091521515604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff85168252606060208301526135896060830185612d22565b9050826040830152949350505050565b60405181810167ffffffffffffffff811182821017156135b857600080fd5b604052919050565b600067ffffffffffffffff8211156135d6578081fd5b5060209081020190565b600067ffffffffffffffff8211156135f6578081fd5b50601f01601f191660200190565b60005b8381101561361f578181015183820152602001613607565b838111156118765750506000910152565b6001600160a01b038116811461364557600080fd5b5056fea164736f6c6343000604000a", }, { ContractAddr: common.HexToAddress(SystemRewardContract), - CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe", Code: "6080604052600436106101c55760003560e01c806375d47a0a116100f7578063ab51bb9611610095578063f9a2bbc711610064578063f9a2bbc7146105c3578063fb5478b3146105d8578063fc3e5908146105ed578063fd6a68791461060257610209565b8063ab51bb96146104b5578063ac431751146104ca578063c81b166214610599578063dc927faf146105ae57610209565b80639a99b4f0116100d15780639a99b4f01461043d5780639dc0926214610476578063a1a11bf51461048b578063a78abc16146104a057610209565b806375d47a0a146103fe5780637942fd051461041357806396713da91461042857610209565b8063493279b1116101645780636d70f7ae1161013e5780636d70f7ae146103785780636e47b482146103bf57806370fd5bad146103d4578063718a8aa8146103e957610209565b8063493279b1146103225780634bf6c8821461034e57806351e806721461036357610209565b806331b6d4a5116101a057806331b6d4a5146102b85780633a0b0eff146102cd5780633dffc387146102e257806343756e5c1461030d57610209565b806227253a1461020e5780630bee7a67146102595780630e2374a51461028757610209565b366102095734156102075760408051348152905133917f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db919081900360200190a25b005b600080fd5b34801561021a57600080fd5b506102476004803603604081101561023157600080fd5b506001600160a01b038135169060200135610617565b60408051918252519081900360200190f35b34801561026557600080fd5b5061026e6107c2565b6040805163ffffffff9092168252519081900360200190f35b34801561029357600080fd5b5061029c6107c7565b604080516001600160a01b039092168252519081900360200190f35b3480156102c457600080fd5b506102476107cd565b3480156102d957600080fd5b506102476107d9565b3480156102ee57600080fd5b506102f76107df565b6040805160ff9092168252519081900360200190f35b34801561031957600080fd5b5061029c6107e4565b34801561032e57600080fd5b506103376107ea565b6040805161ffff9092168252519081900360200190f35b34801561035a57600080fd5b506102f76107ef565b34801561036f57600080fd5b5061029c6107f4565b34801561038457600080fd5b506103ab6004803603602081101561039b57600080fd5b50356001600160a01b03166107fa565b604080519115158252519081900360200190f35b3480156103cb57600080fd5b5061029c610818565b3480156103e057600080fd5b506102f761081e565b3480156103f557600080fd5b506102f7610823565b34801561040a57600080fd5b5061029c610828565b34801561041f57600080fd5b506102f761082e565b34801561043457600080fd5b506102f7610833565b34801561044957600080fd5b506102476004803603604081101561046057600080fd5b506001600160a01b038135169060200135610838565b34801561048257600080fd5b5061029c610962565b34801561049757600080fd5b5061029c610968565b3480156104ac57600080fd5b506103ab61096e565b3480156104c157600080fd5b5061026e610977565b3480156104d657600080fd5b50610207600480360360408110156104ed57600080fd5b81019060208101813564010000000081111561050857600080fd5b82018360208201111561051a57600080fd5b8035906020019184600183028401116401000000008311171561053c57600080fd5b91939092909160208101903564010000000081111561055a57600080fd5b82018360208201111561056c57600080fd5b8035906020019184600183028401116401000000008311171561058e57600080fd5b50909250905061097c565b3480156105a557600080fd5b5061029c610cff565b3480156105ba57600080fd5b5061029c610d05565b3480156105cf57600080fd5b5061029c610d0b565b3480156105e457600080fd5b50610247610d11565b3480156105f957600080fd5b506102f7610d1d565b34801561060e57600080fd5b5061029c610d22565b6000805460ff1661069457600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166106e25760405162461bcd60e51b815260040180806020018281038252602b815260200180610e10602b913960400191505060405180910390fd5b60004783106106f157476106f3565b825b9050674563918244f400008111156107105750674563918244f400005b8015610791576040516001600160a01b0385169082156108fc029083906000818181858888f1935050505015801561074c573d6000803e3d6000fd5b506040805182815290516001600160a01b038616917ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0919081900360200190a26107bb565b6040517fe589651933c2457488cc0d8e0941518abf748e799435e4e396d9c4d0b2db2d4d90600090a15b9392505050565b606481565b61200181565b674563918244f4000081565b60015481565b600181565b61100181565b606181565b600881565b61200081565b6001600160a01b031660009081526002602052604090205460ff1690565b61100581565b600281565b601081565b61100881565b600b81565b600981565b6000805460ff166108b557600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166109035760405162461bcd60e51b815260040180806020018281038252602b815260200180610e10602b913960400191505060405180910390fd5b60004783106109125747610914565b825b9050670de0b6b3a76400008111156107105750604051670de0b6b3a7640000906001600160a01b03851690600090839082818181858883f1935050505015801561074c573d6000803e3d6000fd5b61100781565b61100681565b60005460ff1681565b600081565b33611007146109bc5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e6a602e913960400191505060405180910390fd5b610a1e84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600b81526a30b23227b832b930ba37b960a91b60208201529150610d289050565b15610af657606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091149050610aa15760405162461bcd60e51b815260040180806020018281038252602c815260200180610e98602c913960400191505060405180910390fd5b60148101516001600160a01b038116600081815260026020526040808220805460ff19166001179055517f9870d7fe5d112134c55844951dedf365363006d9c588db07c4c85af6322a06199190a25050610c6d565b610b5b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81526d3232b632ba32a7b832b930ba37b960911b60208201529150610d289050565b15610c3057606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091149050610bde5760405162461bcd60e51b815260040180806020018281038252602f815260200180610e3b602f913960400191505060405180910390fd5b60148101516001600160a01b038116600081815260026020526040808220805460ff19169055517fb40992a19dba61ea600e87fce607102bf5908dc89076217b6ca6ae195224f7029190a25050610c6d565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b61100281565b61100381565b61100081565b670de0b6b3a764000081565b600381565b61100481565b6000816040516020018082805190602001908083835b60208310610d5d5780518252601f199092019160209182019101610d3e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310610dcb5780518252601f199092019160209182019101610dac565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490509291505056fe6f6e6c79206f70657261746f7220697320616c6c6f77656420746f2063616c6c20746865206d6574686f646c656e677468206f662076616c756520666f722064656c6574654f70657261746f722073686f756c64206265203230746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662076616c756520666f72206164644f70657261746f722073686f756c64206265203230a164736f6c6343000604000a", }, }, @@ -746,17 +746,17 @@ func init() { Configs: []*UpgradeConfig{ { ContractAddr: common.HexToAddress(ValidatorContract), - CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe", Code: "6080604052600436106104a35760003560e01c806388b32f1111610260578063c6d3394511610144578063e40716a1116100c1578063f92eb86b11610085578063f92eb86b14610c02578063f9a2bbc714610c17578063fc3e590814610c2c578063fccc281314610c41578063fd4ad81f14610c56578063fd6a687914610c85576104aa565b8063e40716a114610b85578063ea321e4914610b9a578063eb57e20214610bba578063eda5868c14610bda578063f340fa0114610bef576104aa565b8063d86222d511610108578063d86222d514610b1c578063daacdb6614610b31578063dc927faf14610b46578063e086c7b114610b5b578063e1c7392a14610b70576104aa565b8063c6d3394514610abd578063c81b166214610ad2578063c8509d81146108b6578063ce910b0c14610ae7578063d68fb56a14610b07576104aa565b8063a5422d5c116101dd578063ad3c9da6116101a1578063ad3c9da614610a3c578063aef198a914610a5c578063b7ab4db514610a71578063b8cf4ef114610a93578063bf9f499514610666578063c466689d14610aa8576104aa565b8063a5422d5c146109c8578063a78abc16146109dd578063aaf5eb68146109f2578063ab51bb9614610a07578063ac43175114610a1c576104aa565b806396713da91161022457806396713da91461095f5780639dc09262146109745780639fe0f81614610989578063a0dc27581461099e578063a1a11bf5146109b3576104aa565b806388b32f11146108eb5780638a7beb01146109005780638b5ad0c9146109155780638d19a4101461092a5780639369d7de1461094a576104aa565b806351e80672116103875780636e47b482116103045780637942fd05116102c85780637942fd05146108775780637a84ca2a1461088c57806381650b62146108a1578063831d65d1146108b6578063853230aa1461086257806386249882146108d6576104aa565b80636e47b4821461080e57806370fd5bad14610823578063718a8aa81461083857806375d47a0a1461084d57806378dfed4a14610862576104aa565b80635de1e22c1161034b5780635de1e22c14610792578063603d86d31461065157806360eba4fe146107a757806362b72cf5146107c75780636969a25c146107dc576104aa565b806351e806721461071357806355614fcc14610728578063565c56b3146107485780635667515a146107685780635d77156c1461077d576104aa565b80633365af3a1161042057806343756e5c116103e457806343756e5c1461068857806345cf9daf1461069d578063493279b1146106b25780634bf6c882146106d45780634df6e0c3146106e95780635192c82c146106fe576104aa565b80633365af3a146105ee57806335409f7f1461060e5780633b071dcc1461062e5780633de0f0d8146106515780633dffc38714610666576104aa565b8063152ad3b811610467578063152ad3b8146105625780631ff1806914610584578063219f22d514610599578063300c3567146105ae578063321d398a146105ce576104aa565b806304c4fec6146104af57806307a56847146104c65780630bee7a67146104f15780630e2374a5146105135780631182b87514610535576104aa565b366104aa57005b600080fd5b3480156104bb57600080fd5b506104c4610c9a565b005b3480156104d257600080fd5b506104db610d0c565b6040516104e89190617692565b60405180910390f35b3480156104fd57600080fd5b50610506610d12565b6040516104e891906176bc565b34801561051f57600080fd5b50610528610d17565b6040516104e89190616a61565b34801561054157600080fd5b50610555610550366004616947565b610d1d565b6040516104e89190616bd8565b34801561056e57600080fd5b50610577610f55565b6040516104e89190616bcd565b34801561059057600080fd5b506104db610f5e565b3480156105a557600080fd5b50610506610f64565b3480156105ba57600080fd5b506104c46105c93660046167d1565b610f69565b3480156105da57600080fd5b506105776105e93660046168f4565b6112b0565b3480156105fa57600080fd5b506105776106093660046168f4565b61137f565b34801561061a57600080fd5b506104c46106293660046167aa565b611430565b34801561063a57600080fd5b50610643611589565b6040516104e8929190616ae3565b34801561065d57600080fd5b506104db611865565b34801561067257600080fd5b5061067b61186b565b6040516104e891906176cd565b34801561069457600080fd5b50610528611870565b3480156106a957600080fd5b506104db611876565b3480156106be57600080fd5b506106c761187c565b6040516104e89190617683565b3480156106e057600080fd5b5061067b611882565b3480156106f557600080fd5b50610643611887565b34801561070a57600080fd5b506104db611a05565b34801561071f57600080fd5b50610528611a0b565b34801561073457600080fd5b506105776107433660046167aa565b611a11565b34801561075457600080fd5b506104db6107633660046167aa565b611a46565b34801561077457600080fd5b5061067b611a97565b34801561078957600080fd5b50610506611a9c565b34801561079e57600080fd5b506104db611aa1565b3480156107b357600080fd5b506105556107c23660046168f4565b611aa7565b3480156107d357600080fd5b506104db611b4d565b3480156107e857600080fd5b506107fc6107f73660046168f4565b611b53565b6040516104e896959493929190616a8e565b34801561081a57600080fd5b50610528611bb7565b34801561082f57600080fd5b5061067b611bbd565b34801561084457600080fd5b5061067b611bc2565b34801561085957600080fd5b50610528611bc7565b34801561086e57600080fd5b506104db611bcd565b34801561088357600080fd5b5061067b611bd3565b34801561089857600080fd5b506104db611bd8565b3480156108ad57600080fd5b50610506611bde565b3480156108c257600080fd5b506104c46108d1366004616947565b611be3565b3480156108e257600080fd5b506104db611c44565b3480156108f757600080fd5b506104db611c4a565b34801561090c57600080fd5b50610577611c50565b34801561092157600080fd5b506104db611c59565b34801561093657600080fd5b506104db6109453660046167aa565b611c5f565b34801561095657600080fd5b506104c4611c9f565b34801561096b57600080fd5b5061067b611db3565b34801561098057600080fd5b50610528611db8565b34801561099557600080fd5b506104db611dbe565b3480156109aa57600080fd5b506104db611dc3565b3480156109bf57600080fd5b50610528611dc8565b3480156109d457600080fd5b50610555611dce565b3480156109e957600080fd5b50610577611ded565b3480156109fe57600080fd5b506104db611df6565b348015610a1357600080fd5b50610506611a97565b348015610a2857600080fd5b506104c4610a37366004616898565b611dff565b348015610a4857600080fd5b506104db610a573660046167aa565b61269d565b348015610a6857600080fd5b506104db6126af565b348015610a7d57600080fd5b50610a866126bc565b6040516104e89190616ad0565b348015610a9f57600080fd5b506104db6127a8565b348015610ab457600080fd5b506104db6127ad565b348015610ac957600080fd5b506104db611bbd565b348015610ade57600080fd5b506105286127b3565b348015610af357600080fd5b50610555610b023660046168f4565b6127b9565b348015610b1357600080fd5b506104db6127c6565b348015610b2857600080fd5b506104db612805565b348015610b3d57600080fd5b506104db612811565b348015610b5257600080fd5b50610528612817565b348015610b6757600080fd5b506104db610d12565b348015610b7c57600080fd5b506104c461281d565b348015610b9157600080fd5b506104db6129cc565b348015610ba657600080fd5b50610577610bb5366004616859565b6129d2565b348015610bc657600080fd5b506104c4610bd53660046167aa565b612b58565b348015610be657600080fd5b50610506612c60565b6104c4610bfd3660046167aa565b612c65565b348015610c0e57600080fd5b506104db612fcd565b348015610c2357600080fd5b50610528612fd3565b348015610c3857600080fd5b5061067b611dbe565b348015610c4d57600080fd5b50610528612fd9565b348015610c6257600080fd5b50610c76610c713660046168f4565b612fdf565b6040516104e89392919061769b565b348015610c9157600080fd5b506105286130a1565b6000610ca533611c5f565b9050600b8181548110610cb457fe5b600091825260209091206001601690920201015460ff16610cf05760405162461bcd60e51b8152600401610ce79061733d565b60405180910390fd5b6000610cfa6127c6565b9050610d073383836130a7565b505050565b60095481565b606481565b61200181565b60005460609060ff16610d425760405162461bcd60e51b8152600401610ce790616d97565b3361200014610d635760405162461bcd60e51b8152600401610ce7906174d6565b600b54610e2157610d72616496565b60015460005b81811015610e1d57600b805460018101825560009190915283516000805160206178f083398151915260169092029182019081556020808601516000805160206179308339815191528401805460ff1916911515919091179055604086015180518794610df9936000805160206179108339815191529091019201906164c5565b506060820151610e0f906003830190601361653f565b505050806001019050610d78565b5050505b610e2961656c565b6000610e6a85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329392505050565b9150915080610e8657610e7d606461344f565b92505050610f4e565b815160009060ff16610eab57610ea4836020015184604001516134b0565b9050610f1a565b825160ff1660011415610f1657826020015151600114610ef0576000805160206178d0833981519152604051610ee0906171f6565b60405180910390a1506067610f11565b610ea48360200151600081518110610f0457fe5b6020026020010151614104565b610f1a565b5060655b63ffffffff8116610f3f5750506040805160008152602081019091529150610f4e9050565b610f488161344f565b93505050505b9392505050565b60075460ff1681565b60035481565b606881565b334114610f885760405162461bcd60e51b8152600401610ce790617525565b6010544311610fa95760405162461bcd60e51b8152600401610ce790616ef3565b3a15610fc75760405162461bcd60e51b8152600401610ce79061727c565b60005460ff16610fe95760405162461bcd60e51b8152600401610ce790616d97565b60006110023168056bc75e2d63100000811115611020576110198168056bc75e2d6310000063ffffffff61427b16565b9150611027565b50506112a6565b6040516213929d60e11b8152611002906227253a9061104c9030908690600401616a75565b602060405180830381600087803b15801561106657600080fd5b505af115801561107a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109e919061690c565b9150816110ac5750506112a6565b6000805b848110156110da578585828181106110c457fe5b90506020020135820191508060010190506110b0565b50806110e8575050506112a6565b6000806000805b8981101561129e578489898381811061110457fe5b9050602002013588028161111457fe5b0493508a8a8281811061112357fe5b905060200201602081019061113891906167aa565b6001600160a01b0381166000908152600460205260409020549093509150811561125457600060018084038154811061116d57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff16156111da57836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d85866040516111cd9190617692565b60405180910390a261124e565b6003546111ed908663ffffffff6142bd16565b6003908155810154611205908663ffffffff6142bd16565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611245908890617692565b60405180910390a25b50611296565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d858560405161128d9190617692565b60405180910390a25b6001016110ef565b505050505050505b5050436010555050565b60015460009082106112c45750600061137a565b60006001600160a01b0316600183815481106112dc57fe5b60009182526020909120600490910201546001600160a01b0316148061130c5750600854158061130c5750600a54155b8061131b575060085460095410155b8061132c575061132a8261137f565b155b8061135557506000600b838154811061134157fe5b906000526020600020906016020160000154115b80611369575060016113656126bc565b5111155b156113765750600061137a565b5060015b919050565b60015460009082106113935750600061137a565b600b5482106113d057600182815481106113a957fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615905061137a565b600182815481106113dd57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615801561142a5750600b828154811061141157fe5b600091825260209091206001601690920201015460ff16155b92915050565b33611001146114515760405162461bcd60e51b8152600401610ce79061763a565b600b5461150f57611460616496565b60015460005b8181101561150b57600b805460018101825560009190915283516000805160206178f083398151915260169092029182019081556020808601516000805160206179308339815191528401805460ff19169115159190911790556040860151805187946114e7936000805160206179108339815191529091019201906164c5565b5060608201516114fd906003830190601361653f565b505050806001019050611466565b5050505b6001600160a01b038116600090815260046020526040902054806115335750611586565b6001810390506000600b828154811061154857fe5b600091825260209091206001601690920201015460ff16905061156b83836142e2565b80156115745750805b15610d07576009805460001901905550505b50565b60015460609081906000805b828110156115dc57600181815481106115aa57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166115d4576001909101905b600101611595565b50606081604051908082528060200260200182016040528015611609578160200160208202803683370190505b50905060608260405190808252806020026020018201604052801561164257816020015b606081526020019060019003908161162d5790505b50600b54600094509091508414156117bd5760005b848110156117b7576001818154811061166c57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166117af576001818154811061169c57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106116c757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b81815481106116f457fe5b600091825260209182902060026016909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561178c5780601f106117615761010080835404028352916020019161178c565b820191906000526020600020905b81548152906001019060200180831161176f57829003601f168201915b505050505082858151811061179d57fe5b60209081029190910101526001909301925b600101611657565b50611859565b60005b8481101561185757600181815481106117d557fe5b9060005260206000209060040201600201601c9054906101000a900460ff1661184f576001818154811061180557fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061183057fe5b6001600160a01b03909216602092830291909101909101526001909301925b6001016117c0565b505b909450925050505b9091565b61271081565b600181565b61100181565b60085481565b6102ca81565b600881565b600e54600c5460609182918061189b575060155b60606118a56126bc565b905060606118b282614695565b9050828251116118c9579094509250611861915050565b838383510310156118db578282510393505b83156119115760c843046118f783838388880360008a8a614803565b61190f8383838888038989038a8b8b8b510301614803565b505b60608360405190808252806020026020018201604052801561193d578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561197657816020015b60608152602001906001900390816119615790505b50905060005b858110156119f75784818151811061199057fe5b60200260200101518382815181106119a457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106119d057fe5b60200260200101518282815181106119e457fe5b602090810291909101015260010161197c565b509096509450505050509091565b60065481565b61200081565b6001600160a01b03811660009081526004602052604081205480611a3957600091505061137a565b60001901610f4e8161137f565b6001600160a01b03811660009081526004602052604081205480611a6e57600091505061137a565b600180820381548110611a7d57fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b600f5481565b60128181548110611ab457fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815293509091830182828015611b455780601f10611b1a57610100808354040283529160200191611b45565b820191906000526020600020905b815481529060010190602001808311611b2857829003601f168201915b505050505081565b60105481565b60018181548110611b6057fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b606681565b3361200014611c045760405162461bcd60e51b8152600401610ce7906174d6565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051611c37939291906176db565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6001600160a01b03811660009081526004602052604081205480611c955760405162461bcd60e51b8152600401610ce79061745e565b6000190192915050565b600b54611d5d57611cae616496565b60015460005b81811015611d5957600b805460018101825560009190915283516000805160206178f083398151915260169092029182019081556020808601516000805160206179308339815191528401805460ff1916911515919091179055604086015180518794611d35936000805160206179108339815191529091019201906164c5565b506060820151611d4b906003830190601361653f565b505050806001019050611cb4565b5050505b600854611d6a5760036008555b600a54611d77576002600a555b6000611d8233611c5f565b9050611d8d816112b0565b611da95760405162461bcd60e51b8152600401610ce7906171b3565b611586338261495a565b600981565b61100781565b600381565b60c881565b61100681565b604051806101e001604052806101ab81526020016177256101ab913981565b60005460ff1681565b6402540be40081565b60005460ff16611e215760405162461bcd60e51b8152600401610ce790616d97565b3361100714611e425760405162461bcd60e51b8152600401610ce7906172aa565b611eac84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b602082015291506149f29050565b15611f495760208114611ed15760405162461bcd60e51b8152600401610ce790617418565b604080516020601f8401819004810282018101909252828152600091611f0f91858580838501838280828437600092019190915250614a4b92505050565b905060648110158015611f255750620186a08111155b611f415760405162461bcd60e51b8152600401610ce7906170a3565b60025561265a565b611fa984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b602082015291506149f29050565b156120385760208114611fce5760405162461bcd60e51b8152600401610ce790616c1d565b604080516020601f840181900481028201810190925282815260009161200c91858580838501838280828437600092019190915250614a4b92505050565b90506127108111156120305760405162461bcd60e51b8152600401610ce790616f35565b60065561265a565b6120a284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b602082015291506149f29050565b1561213c57602081146120c75760405162461bcd60e51b8152600401610ce790616c54565b604080516020601f840181900481028201810190925282815260009161210591858580838501838280828437600092019190915250614a4b92505050565b600c5490915080612114575060155b8082106121335760405162461bcd60e51b8152600401610ce790616fa8565b5060085561265a565b6121a584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b602082015291506149f29050565b1561223e57602081146121ca5760405162461bcd60e51b8152600401610ce790616d1d565b604080516020601f840181900481028201810190925282815260009161220891858580838501838280828437600092019190915250614a4b92505050565b905060008111801561221a5750600a81105b6122365760405162461bcd60e51b8152600401610ce7906175b6565b600a5561265a565b6122b284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e6469646174657300000000000000602082015291506149f29050565b1561234157602081146122d75760405162461bcd60e51b8152600401610ce790616cd1565b604080516020601f840181900481028201810190925282815260009161231591858580838501838280828437600092019190915250614a4b92505050565b9050600d548111156123395760405162461bcd60e51b8152600401610ce790617119565b600e5561265a565b6123aa84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b602082015291506149f29050565b1561242c57602081146123cf5760405162461bcd60e51b8152600401610ce7906172f8565b604080516020601f840181900481028201810190925282815260009161240d91858580838501838280828437600092019190915250614a4b92505050565b600d819055600e5490915081101561242657600d54600e555b5061265a565b61249084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b602082015291506149f29050565b1561253e57602081146124b55760405162461bcd60e51b8152600401610ce790616d62565b604080516020601f84018190048102820181019092528281526000916124f391858580838501838280828437600092019190915250614a4b92505050565b9050600081116125155760405162461bcd60e51b8152600401610ce790616e05565b60648111156125365760405162461bcd60e51b8152600401610ce790616e4d565b600c5561265a565b6125a684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601181527073797374656d526577617264526174696f60781b602082015291506149f29050565b1561264257602081146125cb5760405162461bcd60e51b8152600401610ce790617572565b604080516020601f840181900481028201810190925282815260009161260991858580838501838280828437600092019190915250614a4b92505050565b90506001811015801561261e57506127108111155b61263a5760405162461bcd60e51b8152600401610ce790617050565b600f5561265a565b60405162461bcd60e51b8152600401610ce790617613565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a8484848460405161268f9493929190616beb565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b828110156126eb576126d78161137f565b156126e3578160010191505b6001016126c6565b50606081604051908082528060200260200182016040528015612718578160200160208202803683370190505b5090506000915060005b8381101561279f576127338161137f565b15612797576001818154811061274557fe5b600091825260209091206004909102015482516001600160a01b039091169083908590811061277057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b600101612722565b50925050505b90565b601581565b61027181565b61100281565b60138181548110611ab457fe5b60006127d06126bc565b519050600080600c54116127e55760156127e9565b600c545b9050808211156127f7578091505b8161280157600191505b5090565b67016345785d8a000081565b60055481565b61100381565b60005460ff16156128405760405162461bcd60e51b8152600401610ce7906173aa565b61284861656c565b600061286e604051806101e001604052806101ab81526020016177256101ab9139613293565b915091508061288f5760405162461bcd60e51b8152600401610ce790617495565b60005b8260200151518110156129b4576001836020015182815181106128b157fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a09093015160039093019290925591860151805191850193918590811061298757fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101612892565b50506103e8600255506000805460ff19166001179055565b600d5481565b601354600090815b81811015612adb57612ac385858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601380549092508591508110612a2b57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015612ab95780601f10612a8e57610100808354040283529160200191612ab9565b820191906000526020600020905b815481529060010190602001808311612a9c57829003601f168201915b5050505050614a50565b15612ad35760019250505061142a565b6001016129da565b5060125460005b81811015612b4c57612b3386868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601280549092508591508110612a2b57fe5b15612b44576001935050505061142a565b600101612ae2565b50600095945050505050565b3361100114612b795760405162461bcd60e51b8152600401610ce79061763a565b600b54612c3757612b88616496565b60015460005b81811015612c3357600b805460018101825560009190915283516000805160206178f083398151915260169092029182019081556020808601516000805160206179308339815191528401805460ff1916911515919091179055604086015180518794612c0f936000805160206179108339815191529091019201906164c5565b506060820151612c25906003830190601361653f565b505050806001019050612b8e565b5050505b6000612c4282614ab4565b9050612c4d816112b0565b15612c5c57612c5c828261495a565b5050565b606581565b334114612c845760405162461bcd60e51b8152600401610ce790617525565b60005460ff16612ca65760405162461bcd60e51b8152600401610ce790616d97565b60003411612cc65760405162461bcd60e51b8152600401610ce7906170ea565b3a15612ce45760405162461bcd60e51b8152600401610ce79061727c565b6001600160a01b03811660009081526004602052604090205460145434919060ff16612d2457610271600f556103e86006556014805460ff191660011790555b6000612d4d612710612d41600f5486614c5790919063ffffffff16565b9063ffffffff614c9116565b90508015612dbd576040516110029082156108fc029083906000818181858888f19350505050158015612d84573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d81604051612db49190617692565b60405180910390a15b600083118015612dcf57506000600654115b15612e75576000612df1612710612d4160065487614c5790919063ffffffff16565b90508015612e735760405161dead9082156108fc029083906000818181858888f19350505050158015612e28573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee581604051612e589190617692565b60405180910390a1612e70848263ffffffff61427b16565b93505b505b612e85838263ffffffff61427b16565b92508115612f85576000600180840381548110612e9e57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615612f0b57846001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b485604051612efe9190617692565b60405180910390a2612f7f565b600354612f1e908563ffffffff6142bd16565b6003908155810154612f36908563ffffffff6142bd16565b60038201556040516001600160a01b038616907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc05590612f76908790617692565b60405180910390a25b50612fc7565b836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b484604051612fbe9190617692565b60405180910390a25b50505050565b600e5481565b61100081565b61dead81565b600b8181548110612fec57fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff909116949192918301828280156130975780601f1061306c57610100808354040283529160200191613097565b820191906000526020600020905b81548152906001019060200180831161307a57829003601f168201915b5050505050905083565b61100481565b6000600a54600014806130b8575081155b806130c35750600954155b156130d057506000610f4e565b6009600081546001900391905081905550600061311b600a54612d4185612d41600b89815481106130fd57fe5b6000918252602090912060169091020154439063ffffffff61427b16565b90506000600b858154811061312c57fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b15801561319157600080fd5b505afa1580156131a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c99190616924565b9150915060009350808310613243576131e287876142e2565b506040516305bfb49960e41b815261100190635bfb499090613208908a90600401616a61565b600060405180830381600087803b15801561322257600080fd5b505af1158015613236573d6000803e3d6000fd5b5050505060019350613255565b8183106132555761325387614ab4565b505b6040516001600160a01b038816907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050509392505050565b61329b61656c565b60006132a561656c565b6132ad616590565b6132be6132b986614cd3565b614cf8565b90506000805b6132cd83614d42565b1561344157806132f2576132e86132e384614d63565b614db1565b60ff168452613439565b806001141561343457606061330e61330985614d63565b614e31565b9050805160405190808252806020026020018201604052801561334b57816020015b6133386165b0565b8152602001906001900390816133305790505b508560200181905250805160405190808252806020026020018201604052801561338957816020015b60608152602001906001900390816133745790505b50604086015260005b8151811015613429576133a36165b0565b606060006133c38585815181106133b657fe5b6020026020010151614f02565b925092509250806133e3578860009a509a5050505050505050505061344a565b82896020015185815181106133f457fe5b6020026020010181905250818960400151858151811061341057fe5b6020026020010181905250505050806001019050613392565b506001925050613439565b613441565b6001016132c4565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b606081526020019060019003908161346957905050905061348f8363ffffffff1661501c565b8160008151811061349c57fe5b6020026020010181905250610f4e8161502f565b60006064835111156134e7576000805160206178d08339815191526040516134d790616eaa565b60405180910390a150606661142a565b60005b83518110156135855760005b8181101561357c5784818151811061350a57fe5b6020026020010151600001516001600160a01b031685838151811061352b57fe5b6020026020010151600001516001600160a01b03161415613574576000805160206178d083398151915260405161356190617005565b60405180910390a160669250505061142a565b6001016134f6565b506001016134ea565b5060608061359385856150b9565b60015491935091506000908190815b818110156136185767016345785d8a0000600182815481106135c057fe5b906000526020600020906004020160030154106135e257836001019350613610565b6000600182815481106135f157fe5b9060005260206000209060040201600301541115613610578260010192505b6001016135a2565b50606083604051908082528060200260200182016040528015613645578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015613674578160200160208202803683370190505b5090506060856040519080825280602002602001820160405280156136a3578160200160208202803683370190505b5090506060866040519080825280602002602001820160405280156136d2578160200160208202803683370190505b5090506000606087604051908082528060200260200182016040528015613703578160200160208202803683370190505b509050606088604051908082528060200260200182016040528015613732578160200160208202803683370190505b509050600099506000985060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561377a57600080fd5b505afa15801561378e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b2919061690c565b905067016345785d8a00008111156137fd576000805160206178d08339815191526040516137df90617369565b60405180910390a160689d505050505050505050505050505061142a565b60005b89811015613a6e5767016345785d8a00006001828154811061381e57fe5b906000526020600020906004020160030154106139a3576001818154811061384257fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898d8151811061387357fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be400600183815481106138a857fe5b906000526020600020906004020160030154816138c157fe5b06600183815481106138cf57fe5b9060005260206000209060040201600301540390506138f7838261427b90919063ffffffff16565b898e8151811061390357fe5b6020026020010181815250506001828154811061391c57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878e8151811061394d57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888e8151811061397a57fe5b6020908102919091010152613995868263ffffffff6142bd16565b95508c6001019c5050613a66565b6000600182815481106139b257fe5b9060005260206000209060040201600301541115613a6657600181815481106139d757fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848c81518110613a0857fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060018181548110613a3557fe5b906000526020600020906004020160030154838c81518110613a5357fe5b6020026020010181815250508a6001019a505b600101613800565b5060008415613ce4576002546040516303702b2960e51b815261100491636e056520918891613aa8918e918e918d91420190600401616b53565b6020604051808303818588803b158015613ac157600080fd5b505af193505050508015613af2575060408051601f3d908101601f19168201909252613aef91810190616839565b60015b613c69576040516000815260443d1015613b0e57506000613ba9565b60046000803e60005160e01c6308c379a08114613b2f576000915050613ba9565b60043d036004833e81513d60248201116001600160401b0382111715613b5a57600092505050613ba9565b80830180516001600160401b03811115613b7b576000945050505050613ba9565b8060208301013d8601811115613b9957600095505050505050613ba9565b601f01601f191660405250925050505b80613bb45750613bf6565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051613be89190616bd8565b60405180910390a250613c64565b3d808015613c20576040519150601f19603f3d011682016040523d82523d6000602084013e613c25565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051613c5a9190616bd8565b60405180910390a2505b613ce4565b8015613cab577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051613c9e9190617692565b60405180910390a1613ce2565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051613cd990616c9a565b60405180910390a25b505b8015613e9a5760005b8751811015613e98576000888281518110613d0457fe5b60200260200101519050600060018281548110613d1d57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc9185908110613d4e57fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f1935050505090508015613e0a5760018281548110613d8f57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d9185908110613dde57fe5b906000526020600020906004020160030154604051613dfd9190617692565b60405180910390a2613e8e565b60018281548110613e1757fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d9185908110613e6657fe5b906000526020600020906004020160030154604051613e859190617692565b60405180910390a25b5050600101613ced565b505b835115613fe45760005b8451811015613fe2576000858281518110613ebb57fe5b60200260200101516001600160a01b03166108fc868481518110613edb57fe5b60200260200101519081150290604051600060405180830381858888f1935050505090508015613f7157858281518110613f1157fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d868481518110613f4f57fe5b6020026020010151604051613f649190617692565b60405180910390a2613fd9565b858281518110613f7d57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d868481518110613fbb57fe5b6020026020010151604051613fd09190617692565b60405180910390a25b50600101613ea4565b505b5050505050505050505050506000471115614060577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d476040516140289190617692565b60405180910390a1604051611002904780156108fc02916000818181858888f1935050505015801561405e573d6000803e3d6000fd5b505b6000600381905560055581511561407b5761407b82826152f2565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156140b857600080fd5b505af11580156140cc573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b80516001600160a01b0316600090815260046020526040812054801580614155575060018082038154811061413557fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b1561419b5782516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a2600091505061137a565b6001546005546000198201118015906141f15784516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000935050505061137a565b60058054600190810190915580548190600019860190811061420f57fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915585516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a2506000949350505050565b6000610f4e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615aac565b600082820183811015610f4e5760405162461bcd60e51b8152600401610ce790616dce565b600080600183815481106142f257fe5b9060005260206000209060040201600301549050600060018080549050039050600161431c6126bc565b51116143515760006001858154811061433157fe5b90600052602060002090600402016003018190555060009250505061142a565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a708360405161438a9190617692565b60405180910390a26001600160a01b038516600090815260046020526040812055835b6001546000190181101561457757600181600101815481106143cb57fe5b9060005260206000209060040201600182815481106143e657fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b8054909183019081106144a757fe5b9060005260206000209060160201600b82815481106144c257fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff19909216919091179055600280840180546145199383860193908216156101000260001901909116046165e5565b5061452c6003828101908401601361665a565b5090505080600101600460006001848154811061454557fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020556001016143ad565b50600180548061458357fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b8054806145d657fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906146086002830182616684565b6146166003830160006166c8565b50509055600081838161462557fe5b04905080156146895760015460005b8181101561468657826001828154811061464a57fe5b906000526020600020906004020160030154016001828154811061466a57fe5b6000918252602090912060036004909202010155600101614634565b50505b50600195945050505050565b6001548151604080518281526020808402820101909152606092919083908280156146d457816020015b60608152602001906001900390816146bf5790505b50600b5490915083146146eb57925061137a915050565b60005b828110156147fa57600b60016004600089858151811061470a57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054038154811061473e57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156147d65780601f106147ab576101008083540402835291602001916147d6565b820191906000526020600020905b8154815290600101906020018083116147b957829003601f168201915b50505050508282815181106147e757fe5b60209081029190910101526001016146ee565b50949350505050565b60005b828110156149505760008287838801604051602001614826929190616a53565b6040516020818303038152906040528051906020012060001c8161484657fe5b06905080850182870114614947576000898388018151811061486457fe5b602002602001015190506060898489018151811061487e57fe5b602002602001015190508a8388018151811061489657fe5b60200260200101518b858a01815181106148ac57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b848901815181106148db57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050898388018151811061490957fe5b60200260200101518a858a018151811061491f57fe5b6020026020010181905250808a8489018151811061493957fe5b602002602001018190525050505b50600101614806565b5050505050505050565b600980546001908101909155600b80548390811061497457fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b82815481106149aa57fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b600081604051602001614a059190616a37565b6040516020818303038152906040528051906020012083604051602001614a2c9190616a37565b6040516020818303038152906040528051906020012014905092915050565b015190565b815181516000916001918114808314614a6c5760009250614aaa565b600160208701838101602088015b600284838510011415614aa5578051835114614a995760009650600093505b60209283019201614a7a565b505050505b5090949350505050565b6001600160a01b03811660009081526004602052604081205480614add5750600019905061137a565b600181039050600060018281548110614af257fe5b9060005260206000209060040201600301549050600060018381548110614b1557fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d90614b6e908590617692565b60405180910390a280614b865782935050505061137a565b6000818381614b9157fe5b0490508015614c4d5760005b84811015614bef578160018281548110614bb357fe5b9060005260206000209060040201600301540160018281548110614bd357fe5b6000918252602090912060036004909202010155600101614b9d565b50600180549085015b81811015614c4a578260018281548110614c0e57fe5b9060005260206000209060040201600301540160018281548110614c2e57fe5b6000918252602090912060036004909202010155600101614bf8565b50505b5091949350505050565b600082614c665750600061142a565b82820282848281614c7357fe5b0414610f4e5760405162461bcd60e51b8152600401610ce79061723b565b6000610f4e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615ad8565b614cdb6166d7565b506040805180820190915281518152602082810190820152919050565b614d00616590565b614d0982615b0f565b614d1257600080fd5b6000614d218360200151615b49565b60208085015160408051808201909152868152920190820152915050919050565b6000614d4c6166d7565b505080518051602091820151919092015191011190565b614d6b6166d7565b614d7482614d42565b614d7d57600080fd5b60208201516000614d8d82615bac565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590614dc657508151602110155b614dcf57600080fd5b6000614dde8360200151615b49565b90508083600001511015614e045760405162461bcd60e51b8152600401610ce7906173e1565b8251602080850151830180519284900392918310156147fa57506020919091036101000a90049392505050565b6060614e3c82615b0f565b614e4557600080fd5b6000614e5083615c8d565b9050606081604051908082528060200260200182016040528015614e8e57816020015b614e7b6166d7565b815260200190600190039081614e735790505b5090506000614ea08560200151615b49565b60208601510190506000805b84811015614ef757614ebd83615bac565b9150604051806040016040528083815260200184815250848281518110614ee057fe5b602090810291909101015291810191600101614eac565b509195945050505050565b614f0a6165b0565b60606000614f166165b0565b6060614f20616590565b614f2987614cf8565b90506000805b614f3883614d42565b1561500d5780614f6357614f53614f4e84614d63565b615ce9565b6001600160a01b03168552615005565b8060011415614f8b57614f78614f4e84614d63565b6001600160a01b03166020860152615005565b8060021415614fb357614fa0614f4e84614d63565b6001600160a01b03166040860152615005565b8060031415614fdf57614fc86132e384614d63565b6001600160401b0316606086015260019150615005565b806004141561500057614ff9614ff484614d63565b615d03565b9350615005565b61500d565b600101614f2f565b50929791965091945092505050565b606061142a61502a83615d73565b615e59565b6060815160001415615050575060408051600081526020810190915261137a565b60608260008151811061505f57fe5b602002602001015190506000600190505b83518110156150a0576150968285838151811061508957fe5b6020026020010151615eab565b9150600101615070565b50610f4e6150b3825160c060ff16615f28565b82615eab565b6060806000808080806150ca6127c6565b6001549091505b80156151d857600181039250600b83815481106150ea57fe5b600091825260209091206001601690920201015460ff1661510a576151cf565b6001838154811061511757fe5b60009182526020909120600490910201546001600160a01b0316945061513e8584846130a7565b9350831580615151575060018a51038610155b1561515b576151cf565b60005b8a518110156151cd57856001600160a01b03168b828151811061517d57fe5b6020026020010151600001516001600160a01b031614156151c55760018b82815181106151a657fe5b60209081029190910101519015156080909101526001909601956151cd565b60010161515e565b505b600019016150d1565b508489510360405190808252806020026020018201604052801561521657816020015b6152036165b0565b8152602001906001900390816151fb5790505b5096508489510360405190808252806020026020018201604052801561525057816020015b606081526020019060019003908161523b5790505b5095506000915060005b89518110156152e45789818151811061526f57fe5b6020026020010151608001516152dc5789818151811061528b57fe5b602002602001015188848151811061529f57fe5b60200260200101819052508881815181106152b657fe5b60200260200101518784815181106152ca57fe5b60200260200101819052508260010192505b60010161525a565b5050505050505b9250929050565b600154825160005b8281101561540f57600161530c6165b0565b6001838154811061531957fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156153e3578781815181106153a957fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b031614156153db57600092506153e3565b600101615395565b5081156154055780516001600160a01b03166000908152600460205260408120555b50506001016152fa565b50808211156154ce57805b828110156154cc57600180548061542d57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061548057fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906154b26002830182616684565b6154c06003830160006166c8565b5050905560010161541a565b505b60008183106154dd57816154df565b825b905060005b8181101561584e576155918682815181106154fb57fe5b60200260200101516001838154811061551057fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152615ffa565b6157455780600101600460008884815181106155a957fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055508581815181106155e557fe5b6020026020010151600182815481106155fa57fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015584518590829081106156b557fe5b6020026020010151600b82815481106156ca57fe5b906000526020600020906016020160020190805190602001906156ee9291906164c5565b506000600b82815481106156fe57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b80548390811061572f57fe5b6000918252602090912060169091020155615846565b6157d685828151811061575457fe5b6020026020010151600b838154811061576957fe5b600091825260209182902060026016909202018101805460408051601f600019610100600186161502019093169490940491820185900485028401850190528083529192909190830182828015612ab95780601f10612a8e57610100808354040283529160200191612ab9565b615821578481815181106157e657fe5b6020026020010151600b82815481106157fb57fe5b9060005260206000209060160201600201908051906020019061581f9291906164c5565b505b60006001828154811061583057fe5b9060005260206000209060040201600301819055505b6001016154e4565b5082821115615a265761585f616496565b835b83811015615a235785818151811061587557fe5b60200260200101518260400181905250600187828151811061589357fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b80549283018155909352845160169091026000805160206178f08339815191528101918255858301516000805160206179308339815191528201805491151560ff19909216919091179055928501518051869492936159c993600080516020617910833981519152019201906164c5565b5060608201516159df906003830190601361653f565b50505080600101600460008984815181106159f657fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101615861565b50505b615a2e61607b565b615a3661625d565b6000600981905560015493505b83811015615aa4576000600b8281548110615a5a57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b805483908110615a8b57fe5b6000918252602090912060169091020155600101615a43565b505050505050565b60008184841115615ad05760405162461bcd60e51b8152600401610ce79190616bd8565b505050900390565b60008183615af95760405162461bcd60e51b8152600401610ce79190616bd8565b506000838581615b0557fe5b0495945050505050565b8051600090615b205750600061137a565b6020820151805160001a9060c0821015615b3f5760009250505061137a565b5060019392505050565b8051600090811a6080811015615b6357600091505061137a565b60b8811080615b7e575060c08110801590615b7e575060f881105b15615b8d57600191505061137a565b60c0811015615ba15760b51901905061137a565b60f51901905061137a565b80516000908190811a6080811015615bc75760019150615c86565b60b8811015615bdc57607e1981019150615c86565b60c0811015615c2d57600060b78203600186019550806020036101000a865104915060018101820193505080831015615c275760405162461bcd60e51b8152600401610ce790617188565b50615c86565b60f8811015615c425760be1981019150615c86565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615c845760405162461bcd60e51b8152600401610ce790617188565b505b5092915050565b8051600090615c9e5750600061137a565b60008090506000615cb28460200151615b49565b602085015185519181019250015b80821015615ce057615cd182615bac565b82019150826001019250615cc0565b50909392505050565b8051600090601514615cfa57600080fd5b61142a82614db1565b8051606090615d1157600080fd5b6000615d208360200151615b49565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015615d57576020820181803683370190505b50905060008160200190506147fa84876020015101828561644b565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416615db757506018615ddb565b6fffffffffffffffffffffffffffffffff198416615dd757506010615ddb565b5060005b6020811015615e1157818181518110615df057fe5b01602001516001600160f81b03191615615e0957615e11565b600101615ddb565b60008160200390506060816040519080825280601f01601f191660200182016040528015615e46576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015615e8b5750607f60f81b82600081518110615e7957fe5b01602001516001600160f81b03191611155b15615e9757508061137a565b61142a615ea98351608060ff16615f28565b835b6060806040519050835180825260208201818101602087015b81831015615edc578051835260209283019201615ec4565b50855184518101855292509050808201602086015b81831015615f09578051835260209283019201615ef1565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310615f525760405162461bcd60e51b8152600401610ce790616f80565b60408051600180825281830190925260609160208201818036833701905050905060378411615fac5782840160f81b81600081518110615f8e57fe5b60200101906001600160f81b031916908160001a905350905061142a565b6060615fb785615d73565b90508381510160370160f81b82600081518110615fd057fe5b60200101906001600160f81b031916908160001a905350615ff18282615eab565b95945050505050565b805182516000916001600160a01b039182169116148015616034575081602001516001600160a01b031683602001516001600160a01b0316145b8015616059575081604001516001600160a01b031683604001516001600160a01b0316145b8015610f4e5750506060908101519101516001600160401b0390811691161490565b601254601354808211156160c657805b828110156160c457601280548061609e57fe5b6001900381819060005260206000200160006160ba9190616684565b905560010161608b565b505b60008183106160d557816160d7565b825b905060005b818110156161ef57616194601282815481106160f457fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156161825780601f1061615757610100808354040283529160200191616182565b820191906000526020600020905b81548152906001019060200180831161616557829003601f168201915b505050505060138381548110612a2b57fe5b6161e757601381815481106161a557fe5b90600052602060002001601282815481106161bc57fe5b9060005260206000200190805460018160011615610100020316600290046161e59291906165e5565b505b6001016160dc565b5082821115610d0757825b82811015612fc75760126013828154811061621157fe5b60009182526020808320845460018181018755958552919093209290910180546162549493909201929091600261010092821615929092026000190116046165e5565b506001016161fa565b601354600b54808211156162a857805b828110156162a657601380548061628057fe5b60019003818190600052602060002001600061629c9190616684565b905560010161626d565b505b60008183106162b757816162b9565b825b905060005b818110156163d857616376601382815481106162d657fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156163645780601f1061633957610100808354040283529160200191616364565b820191906000526020600020905b81548152906001019060200180831161634757829003601f168201915b5050505050600b838154811061576957fe5b6163d057600b818154811061638757fe5b9060005260206000209060160201600201601382815481106163a557fe5b9060005260206000200190805460018160011615610100020316600290046163ce9291906165e5565b505b6001016162be565b5082821115610d0757825b82811015612fc7576013600b82815481106163fa57fe5b600091825260208083208454600180820187559585529190932060169290920290920160029081018054616442959390940193909260001990821615610100020116046165e5565b506001016163e3565b8061645557610d07565b5b60208110616475578251825260209283019290910190601f1901616456565b915181516020939093036101000a6000190180199091169216919091179052565b604051806080016040528060008152602001600015158152602001606081526020016164c06166f1565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061650657805160ff1916838001178555616533565b82800160010185558215616533579182015b82811115616533578251825591602001919060010190616518565b50612801929150616710565b82601381019282156165335791602002820182811115616533578251825591602001919060010190616518565b6040518060600160405280600060ff16815260200160608152602001606081525090565b60405180604001604052806165a36166d7565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061661e5780548555616533565b8280016001018555821561653357600052602060002091601f016020900482015b8281111561653357825482559160010191906001019061663f565b8260138101928215616533579182018281111561653357825482559160010191906001019061663f565b50805460018160011615610100020316600290046000825580601f106166aa5750611586565b601f0160209004906000526020600020908101906115869190616710565b50611586906013810190616710565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b6127a591905b808211156128015760008155600101616716565b60008083601f84011261673b578182fd5b5081356001600160401b03811115616751578182fd5b60208301915083602080830285010111156152eb57600080fd5b60008083601f84011261677c578182fd5b5081356001600160401b03811115616792578182fd5b6020830191508360208285010111156152eb57600080fd5b6000602082840312156167bb578081fd5b81356001600160a01b0381168114610f4e578182fd5b600080600080604085870312156167e6578283fd5b84356001600160401b03808211156167fc578485fd5b6168088883890161672a565b90965094506020870135915080821115616820578384fd5b5061682d8782880161672a565b95989497509550505050565b60006020828403121561684a578081fd5b81518015158114610f4e578182fd5b6000806020838503121561686b578182fd5b82356001600160401b03811115616880578283fd5b61688c8582860161676b565b90969095509350505050565b600080600080604085870312156168ad578384fd5b84356001600160401b03808211156168c3578586fd5b6168cf8883890161676b565b909650945060208701359150808211156168e7578384fd5b5061682d8782880161676b565b600060208284031215616905578081fd5b5035919050565b60006020828403121561691d578081fd5b5051919050565b60008060408385031215616936578182fd5b505080516020909101519092909150565b60008060006040848603121561695b578283fd5b833560ff8116811461696b578384fd5b925060208401356001600160401b03811115616985578283fd5b6169918682870161676b565b9497909650939450505050565b6000815180845260208085019450808401835b838110156169d65781516001600160a01b0316875295820195908201906001016169b1565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452616a238160208601602086016176f8565b601f01601f19169290920160200192915050565b60008251616a498184602087016176f8565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b600060208252610f4e602083018461699e565b600060408252616af6604083018561699e565b602083820381850152818551808452828401915082838202850101838801865b83811015616b4457601f19878403018552616b32838351616a0b565b94860194925090850190600101616b16565b50909998505050505050505050565b600060808252616b66608083018761699e565b828103602084810191909152865180835287820192820190845b81811015616b9c57845183529383019391830191600101616b80565b50508481036040860152616bb0818861699e565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b600060208252610f4e6020830184616a0b565b600060408252616bff6040830186886169e1565b8281036020840152616c128185876169e1565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252602b908201527f746865206275726e526174696f206d757374206265206e6f206772656174657260408201526a0207468616e2031303030360ac1b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526033908201527f7468652073797374656d526577617264526174696f206d757374206265206e6f60408201527202067726561746572207468616e20313030303606c1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526024908201527f6c656e677468206f662073797374656d526577617264526174696f206d69736d6040820152630c2e8c6d60e31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b61ffff91909116815260200190565b90815260200190565b6000848252831515602083015260606040830152615ff16060830184616a0b565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff8516825260406020830152615ff16040830184866169e1565b60005b838110156177135781810151838201526020016176fb565b83811115612fc7575050600091015256fef901a880f901a4f844941284214b9b9c85549ab3d2b972df0deef66ac2c9946ddf42a51534fc98d0c0a3b42c963cace8441ddf946ddf42a51534fc98d0c0a3b42c963cace8441ddf8410000000f84494a2959d3f95eae5dc7d70144ce1b73b403b7eb6e0948081ef03f1d9e0bb4a5bf38f16285c879299f07f948081ef03f1d9e0bb4a5bf38f16285c879299f07f8410000000f8449435552c16704d214347f29fa77f77da6d75d7c75294dc4973e838e3949c77aced16ac2315dc2d7ab11194dc4973e838e3949c77aced16ac2315dc2d7ab1118410000000f84494980a75ecd1309ea12fa2ed87a8744fbfc9b863d594cc6ac05c95a99c1f7b5f88de0e3486c82293b27094cc6ac05c95a99c1f7b5f88de0e3486c82293b2708410000000f84494f474cf03cceff28abc65c9cbae594f725c80e12d94e61a183325a18a173319dd8e19c8d069459e217594e61a183325a18a173319dd8e19c8d069459e21758410000000f84494b71b214cb885500844365e95cd9942c7276e7fd894d22ca3ba2141d23adab65ce4940eb7665ea2b6a794d22ca3ba2141d23adab65ce4940eb7665ea2b6a7841000000070e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb20175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbb0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaa164736f6c6343000604000a", }, { ContractAddr: common.HexToAddress(SlashContract), - CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe", Code: "608060405234801561001057600080fd5b50600436106102955760003560e01c80638256ace611610167578063c81b1662116100ce578063e1c7392a11610087578063e1c7392a146104d3578063eb57bff7146104db578063f9a2bbc7146104e3578063fc3e5908146104eb578063fc4333cd146104f3578063fd6a6879146104fb57610295565b8063c81b166214610482578063c8509d811461048a578063c96be4cb1461049d578063cc844b73146104b0578063d2a42e4b146104c3578063dc927faf146104cb57610295565b8063a78abc1611610120578063a78abc1614610447578063ab51bb961461044f578063ac0af62914610457578063ac4317511461045f578063ae61dc3b14610472578063c80d4b8f1461047a57610295565b80638256ace61461040c578063831d65d11461041457806396713da9146104275780639bc8e4f21461042f5780639dc0926214610437578063a1a11bf51461043f57610295565b8063493279b11161020b5780636e47b482116101c45780636e47b482146103dc57806370fd5bad146103e4578063718a8aa8146103ec57806375d47a0a146103f45780637912a65d146103fc5780637942fd051461040457610295565b8063493279b1146103925780634bf6c882146103a757806351e80672146103af578063567a372d146103b75780635bfb4990146103bf57806362b72cf5146103d457610295565b806335aa2e441161025d57806335aa2e441461032457806337c8dab914610337578063389f4f71146103585780633a63f4b11461036d5780633dffc3871461037557806343756e5c1461038a57610295565b80630bee7a671461029a5780630e2374a5146102b85780631182b875146102cd57806322d1e80b146102ed57806323bac5a214610302575b600080fd5b6102a2610503565b6040516102af9190613550565b60405180910390f35b6102c0610508565b6040516102af9190612d6c565b6102e06102db366004612ca2565b61050e565b6040516102af9190612da4565b6102f5610574565b6040516102af9190612d99565b610315610310366004612a50565b61057d565b6040516102af93929190613538565b6102c0610332366004612c72565b6105a0565b61034a610345366004612a50565b6105c7565b6040516102af92919061352a565b61036061061e565b6040516102af9190613500565b610360610624565b61037d61062a565b6040516102af9190613561565b6102c061062f565b61039a610635565b6040516102af91906134f1565b61037d61063b565b6102c0610640565b610360610646565b6103d26103cd366004612a50565b61064c565b005b6103606106f7565b6102c06106fd565b61037d610703565b61037d610708565b6102c061070d565b610360610713565b61037d610718565b61034a61071d565b6103d2610422366004612ca2565b610727565b61037d610839565b61036061083e565b6102c0610849565b6102c061084f565b6102f5610855565b6102a261085e565b610360610863565b6103d261046d366004612b56565b610868565b610360610e18565b610360610e1f565b6102c0610e24565b6103d2610498366004612ca2565b610e2a565b6103d26104ab366004612a50565b610e9b565b6103d26104be366004612bbf565b61128c565b61036061187d565b6102c0611882565b6103d2611888565b6103606118c4565b6102c06118ca565b61037d6118d0565b6103d26118d5565b6102c0611d1e565b606481565b61200181565b6060336120001461053a5760405162461bcd60e51b815260040161053190613349565b60405180910390fd5b60005460ff1661055c5760405162461bcd60e51b815260040161053190612e9f565b60405162461bcd60e51b81526004016105319061343a565b60075460ff1681565b600260208190526000918252604090912080546001820154919092015460ff1683565b600181815481106105ad57fe5b6000918252602090912001546001600160a01b0316905081565b6000806105d2612837565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b60065481565b600181565b61100181565b6102ca81565b600881565b61200081565b60045481565b336110001461066d5760405162461bcd60e51b81526004016105319061312e565b60005460ff1661068f5760405162461bcd60e51b815260040161053190612e9f565b61200063f7a251d7600b6106a284611d24565b60006040518463ffffffff1660e01b81526004016106c29392919061356f565b600060405180830381600087803b1580156106dc57600080fd5b505af11580156106f0573d6000803e3d6000fd5b5050505050565b60035481565b61100581565b600281565b601081565b61100881565b603281565b600b81565b6004546005549091565b33612000146107485760405162461bcd60e51b815260040161053190613349565b60005460ff1661076a5760405162461bcd60e51b815260040161053190612e9f565b61077261285a565b60006107b384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611df792505050565b9150915080156107fa5781516040517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e629967916107ed91613550565b60405180910390a16106f0565b81516040517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e79161082a91613550565b60405180910390a15050505050565b600981565b662386f26fc1000081565b61100781565b61100681565b60005460ff1681565b600081565b600481565b60005460ff1661088a5760405162461bcd60e51b815260040161053190612e9f565b33611007146108ab5760405162461bcd60e51b815260040161053190613206565b61091684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b60208201529150611e779050565b156109b1576020811461093b5760405162461bcd60e51b8152600401610531906130ba565b604080516020601f840181900481028201810190925282815260009161097991858580838501838280828437600092019190915250611ed192505050565b90506001811015801561098d575060055481105b6109a95760405162461bcd60e51b815260040161053190613304565b600455610dd5565b610a1784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b60208201529150611e779050565b15610ab35760208114610a3c5760405162461bcd60e51b815260040161053190613254565b604080516020601f8401819004810282018101909252828152600091610a7a91858580838501838280828437600092019190915250611ed192505050565b90506103e88111158015610a8f575060045481115b610aab5760405162461bcd60e51b815260040161053190612f58565b600555610dd5565b610b2784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f66696e616c697479536c617368526577617264526174696f000000000000000060208201529150611e779050565b15610bc15760208114610b4c5760405162461bcd60e51b815260040161053190613471565b604080516020601f8401819004810282018101909252828152600091610b8a91858580838501838280828437600092019190915250611ed192505050565b9050600a8110158015610b9d5750606481105b610bb95760405162461bcd60e51b81526004016105319061306e565b600655610dd5565b610c3584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f656e61626c654d616c6963696f7573566f7465536c617368000000000000000060208201529150611e779050565b15610cac5760208114610c5a5760405162461bcd60e51b815260040161053190612f8d565b604080516020601f8401819004810282018101909252828152610c969190848480838501838280828437600092019190915250611ed692505050565b6007805460ff1916911515919091179055610dd5565b610d2084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601781527f6d616c6963696f7573566f7465536c61736853636f706500000000000000000060208201529150611e779050565b15610dbd5760208114610d455760405162461bcd60e51b815260040161053190612de9565b604080516020601f8401819004810282018101909252828152600091610d8391858580838501838280828437600092019190915250611ed192505050565b90506170808110158015610d995750620d2f0081105b610db55760405162461bcd60e51b815260040161053190612ed6565b600855610dd5565b60405162461bcd60e51b8152600401610531906133e5565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a84848484604051610e0a9493929190612db7565b60405180910390a150505050565b6201518081565b609681565b61100281565b3361200014610e4b5760405162461bcd60e51b815260040161053190613349565b60005460ff16610e6d5760405162461bcd60e51b815260040161053190612e9f565b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b334114610eba5760405162461bcd60e51b815260040161053190613398565b60005460ff16610edc5760405162461bcd60e51b815260040161053190612e9f565b6003544311610efd5760405162461bcd60e51b8152600401610531906134bc565b3a15610f1b5760405162461bcd60e51b8152600401610531906131a9565b60405163155853f360e21b8152611000906355614fcc90610f40908490600401612d6c565b60206040518083038186803b158015610f5857600080fd5b505afa158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f909190612b36565b610f9957611285565b610fa1612837565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff161580159282019290925290610ffc576020810180516001019052611055565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b43815260055460208201518161106757fe5b066111b357600060208201526040516335409f7f60e01b8152611000906335409f7f90611098908590600401612d6c565b600060405180830381600087803b1580156110b257600080fd5b505af11580156110c6573d6000803e3d6000fd5b505050506120006001600160a01b031663f7a251d7600b6110e685611d24565b60006040518463ffffffff1660e01b81526004016111069392919061356f565b600060405180830381600087803b15801561112057600080fd5b505af1925050508015611131575060015b6111ae573d80801561115f576040519150601f19603f3d011682016040523d82523d6000602084013e611164565b606091505b50826001600160a01b03167fd7bc86ff5d08c8ab043edec743302aba2520e6635172a428bc956721db9e2d1c8360200151836040516111a4929190613509565b60405180910390a2505b61121f565b6004548160200151816111c257fe5b0661121f576040516375abf10160e11b81526110009063eb57e202906111ec908590600401612d6c565b600060405180830381600087803b15801561120657600080fd5b505af115801561121a573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505b5043600355565b60005460ff166112ae5760405162461bcd60e51b815260040161053190612e9f565b604051630a83aaa960e31b81526110069063541d5548906112d3903390600401612d6c565b60206040518083038186803b1580156112eb57600080fd5b505afa1580156112ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113239190612b36565b61133f5760405162461bcd60e51b815260040161053190612e33565b60075460ff166113615760405162461bcd60e51b815260040161053190612e6a565b60065461136e5760146006555b60085461137d57620151806008555b6008548151604001514391011180156113a157504360085482602001516040015101115b6113bd5760405162461bcd60e51b81526004016105319061340c565b8060200151602001518160000151602001511480156113eb5750806020015160600151816000015160600151145b156114085760405162461bcd60e51b815260040161053190613101565b8051604081015190511080156114275750602081015160408101519051105b6114435760405162461bcd60e51b815260040161053190613037565b6020810151518151511080156114685750806000015160400151816020015160400151105b8061149357508051516020820151511080156114935750806020015160400151816000015160400151105b806114ad5750806020015160400151816000015160400151145b6114c95760405162461bcd60e51b815260040161053190612f21565b604080820151905163ea321e4960e01b81526110009163ea321e49916114f29190600401612da4565b60206040518083038186803b15801561150a57600080fd5b505afa15801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190612b36565b61155e5760405162461bcd60e51b8152600401610531906131d7565b61157081600001518260400151611efe565b8015611589575061158981602001518260400151611efe565b6115a55760405162461bcd60e51b815260040161053190612fd8565b6060806110006001600160a01b0316633b071dcc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156115e357600080fd5b505afa1580156115f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261161f9190810190612a73565b9150915060005b815181101561175a5761165082828151811061163e57fe5b602002602001015185604001516120d6565b15611752576006546040516213929d60e11b8152606461100280319093020491906227253a906116869033908590600401612d80565b602060405180830381600087803b1580156116a057600080fd5b505af11580156116b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d89190612c8a565b506110006001600160a01b03166335409f7f8584815181106116f657fe5b60200260200101516040518263ffffffff1660e01b815260040161171a9190612d6c565b600060405180830381600087803b15801561173457600080fd5b505af1158015611748573d6000803e3d6000fd5b505050505061175a565b600101611626565b50600061176c8460400151600061213a565b90506120006001600160a01b031663f7a251d7600b61178e8760400151612156565b60006040518463ffffffff1660e01b81526004016117ae9392919061356f565b600060405180830381600087803b1580156117c857600080fd5b505af19250505080156117d9575060015b61184b573d808015611807576040519150601f19603f3d011682016040523d82523d6000602084013e61180c565b606091505b50817fd58d1183100bd0932c0588f31c4205d6bc6168909765a96c41adbed3115f36288260405161183d9190612da4565b60405180910390a250611877565b60405181907f7b78aadacff901d8b63d0dba4f86283d4db8aef27f9ed70413dd860f1c9532b690600090a25b50505050565b601481565b61100381565b60005460ff16156118ab5760405162461bcd60e51b815260040161053190613296565b603260045560966005556000805460ff19166001179055565b60085481565b61100081565b600381565b33611000146118f65760405162461bcd60e51b81526004016105319061312e565b60005460ff166119185760405162461bcd60e51b815260040161053190612e9f565b60015461192457611d1c565b600154600090600019015b808211611cf0576000805b82841015611a535761194a612837565b600260006001878154811061195b57fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611a3d576004600554816119c857fe5b048160200151038160200181815250508060026000600188815481106119ea57fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611a47565b6001925050611a53565b5083600101935061193a565b828411611bea57611a62612837565b6002600060018681548110611a7357fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611b5b57600460055481611ae057fe5b04816020015103816020018181525050806002600060018781548110611b0257fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff19169115159190911790559150611bea9050565b6002600060018681548110611b6c57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805480611bb057fe5b600082815260209020810160001990810180546001600160a01b031916905501905583611bdd5750611bea565b5060001990920191611a53565b818015611bf45750805b15611cd3576002600060018681548110611c0a57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805484908110611c5157fe5b600091825260209091200154600180546001600160a01b039092169186908110611c7757fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001805480611cb057fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b82611cdf575050611cf0565b50506001909101906000190161192f565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081611d3f579050509050611d68836001600160a01b0316612191565b81600081518110611d7557fe5b6020026020010181905250611d89436121b4565b81600181518110611d9657fe5b6020908102919091010152611dac6102ca6121b4565b81600281518110611db957fe5b6020026020010181905250611dcd426121b4565b81600381518110611dda57fe5b6020026020010181905250611dee816121c7565b9150505b919050565b611dff61285a565b6000611e0961285a565b611e1161286c565b611e22611e1d86612251565b612276565b90506000805b611e31836122c0565b15611e6a5780611e5d57611e4c611e47846122e1565b61232f565b63ffffffff16845260019150611e62565b611e6a565b600101611e28565b5091935090915050915091565b600081604051602001611e8a9190612d50565b6040516020818303038152906040528051906020012083604051602001611eb19190612d50565b604051602081830303815290604052805190602001201490505b92915050565b015190565b8082015160009060ff811615611ef0576001915081611ef6565b60009150815b505092915050565b60408051600480825260a0820190925260009160609190816020015b6060815260200190600190039081611f1a575050604080516020808252818301909252919250606091908082018180368337019050509050611f5f85600001516121b4565b82600081518110611f6c57fe5b6020026020010181905250611f8760208660200151836123b1565b611f90816123c1565b82600181518110611f9d57fe5b6020026020010181905250611fb585604001516121b4565b82600281518110611fc257fe5b6020026020010181905250611fdd60208660600151836123b1565b611fe6816123c1565b82600381518110611ff357fe5b6020026020010181905250612019602061200c846121c7565b80519060200120836123b1565b6040805160b080825260e08201909252606091602082018180368337019050509050612049818360006020612417565b61205b81876080015160206060612417565b612069818660806030612417565b604080516001808252818301909252606091602082018180368337019050509050815160016020830182602086016066600019fa6120a657600080fd5b5060016120b482600061246a565b60ff16146120c9576000945050505050611ecb565b5060019695505050505050565b8151815160009160019181148083146120f25760009250612130565b600160208701838101602088015b60028483851001141561212b57805183511461211f5760009650600093505b60209283019201612100565b505050505b5090949350505050565b6000816020018351101561214d57600080fd5b50016020015190565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081612171579050509050611d68836123c1565b60408051600560a21b8318601482015260348101909152606090611dee816123c1565b6060611ecb6121c283612486565b6123c1565b60608151600014156121e85750604080516000815260208101909152611df2565b6060826000815181106121f757fe5b602002602001015190506000600190505b83518110156122385761222e8285838151811061222157fe5b602002602001015161256c565b9150600101612208565b50611dee61224b825160c060ff166125e9565b8261256c565b61225961288c565b506040805180820190915281518152602082810190820152919050565b61227e61286c565b612287826126bb565b61229057600080fd5b600061229f83602001516126f5565b60208085015160408051808201909152868152920190820152915050919050565b60006122ca61288c565b505080518051602091820151919092015191011190565b6122e961288c565b6122f2826122c0565b6122fb57600080fd5b6020820151600061230b82612758565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061234457508151602110155b61234d57600080fd5b600061235c83602001516126f5565b905080836000015110156123825760405162461bcd60e51b8152600401610531906132cd565b8251602080850151830180519284900392918310156123a857826020036101000a820491505b50949350505050565b9091018181526020918201910152565b6060815160011480156123f35750607f60f81b826000815181106123e157fe5b01602001516001600160f81b03191611155b156123ff575080611df2565b611ecb6124118351608060ff166125e9565b8361256c565b60005b818110156106f05783818151811061242e57fe5b602001015160f81c60f81b85848060010195508151811061244b57fe5b60200101906001600160f81b031916908160001a90535060010161241a565b6000816001018351101561247d57600080fd5b50016001015190565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166124ca575060186124ee565b6fffffffffffffffffffffffffffffffff1984166124ea575060106124ee565b5060005b60208110156125245781818151811061250357fe5b01602001516001600160f81b0319161561251c57612524565b6001016124ee565b60008160200390506060816040519080825280601f01601f191660200182016040528015612559576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561259d578051835260209283019201612585565b50855184518101855292509050808201602086015b818310156125ca5780518352602092830192016125b2565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106126135760405162461bcd60e51b81526004016105319061300f565b6040805160018082528183019092526060916020820181803683370190505090506037841161266d5782840160f81b8160008151811061264f57fe5b60200101906001600160f81b031916908160001a9053509050611ecb565b606061267885612486565b90508381510160370160f81b8260008151811061269157fe5b60200101906001600160f81b031916908160001a9053506126b2828261256c565b95945050505050565b80516000906126cc57506000611df2565b6020820151805160001a9060c08210156126eb57600092505050611df2565b5060019392505050565b8051600090811a608081101561270f576000915050611df2565b60b881108061272a575060c0811080159061272a575060f881105b15612739576001915050611df2565b60c081101561274d5760b519019050611df2565b60f519019050611df2565b80516000908190811a60808110156127735760019150612830565b60b881101561278857607e1981019150612830565b60c08110156127d957600060b78203600186019550806020036101000a8651049150600181018201935050808310156127d35760405162461bcd60e51b81526004016105319061317e565b50612830565b60f88110156127ee5760be1981019150612830565b600060f78203600186019550806020036101000a865104915060018101820193505080831015611ef65760405162461bcd60e51b81526004016105319061317e565b5092915050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b604051806040016040528061287f61288c565b8152602001600081525090565b604051806040016040528060008152602001600081525090565b600082601f8301126128b6578081fd5b81516128c96128c4826135c2565b61359b565b818152915060208083019084810160005b8481101561293f578151870188603f8201126128f557600080fd5b838101516129056128c4826135e2565b81815260408b8184860101111561291b57600080fd5b61292a83888401838701613606565b508652505092820192908201906001016128da565b505050505092915050565b60008083601f84011261295b578182fd5b50813567ffffffffffffffff811115612972578182fd5b60208301915083602082850101111561298a57600080fd5b9250929050565b600082601f8301126129a1578081fd5b81356129af6128c4826135e2565b91508082528360208285010111156129c657600080fd5b8060208401602084013760009082016020015292915050565b600060a082840312156129f0578081fd5b6129fa60a061359b565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff811115612a3857600080fd5b612a4484828501612991565b60808301525092915050565b600060208284031215612a61578081fd5b8135612a6c81613632565b9392505050565b60008060408385031215612a85578081fd5b825167ffffffffffffffff80821115612a9c578283fd5b81850186601f820112612aad578384fd5b80519250612abd6128c4846135c2565b80848252602080830192508084018a828389028701011115612add578788fd5b8794505b86851015612b08578051612af481613632565b845260019490940193928101928101612ae1565b508801519096509350505080821115612b1f578283fd5b50612b2c858286016128a6565b9150509250929050565b600060208284031215612b47578081fd5b81518015158114612a6c578182fd5b60008060008060408587031215612b6b578182fd5b843567ffffffffffffffff80821115612b82578384fd5b612b8e8883890161294a565b90965094506020870135915080821115612ba6578384fd5b50612bb38782880161294a565b95989497509550505050565b600060208284031215612bd0578081fd5b813567ffffffffffffffff80821115612be7578283fd5b81840160608187031215612bf9578384fd5b612c03606061359b565b9250803582811115612c13578485fd5b612c1f878284016129df565b845250602081013582811115612c33578485fd5b612c3f878284016129df565b602085015250604081013582811115612c56578485fd5b612c6287828401612991565b6040850152509195945050505050565b600060208284031215612c83578081fd5b5035919050565b600060208284031215612c9b578081fd5b5051919050565b600080600060408486031215612cb6578283fd5b833560ff81168114612cc6578384fd5b9250602084013567ffffffffffffffff811115612ce1578283fd5b612ced8682870161294a565b9497909650939450505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612d3c816020860160208601613606565b601f01601f19169290920160200192915050565b60008251612d62818460208701613606565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060208252612a6c6020830184612d24565b600060408252612dcb604083018688612cfa565b8281036020840152612dde818587612cfa565b979650505050505050565b6020808252602a908201527f6c656e677468206f66206d616c6963696f7573566f7465536c61736853636f706040820152690ca40dad2e6dac2e8c6d60b31b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604082015260600190565b6020808252818101527f6d616c6963696f757320766f746520736c617368206e6f7420656e61626c6564604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252602b908201527f746865206d616c6963696f757320766f746520736c6173682073636f7065206f60408201526a7574206f662072616e676560a81b606082015260800190565b6020808252601a908201527f6e6f2076696f6c6174696f6e206f6620766f74652072756c6573000000000000604082015260600190565b6020808252818101527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604082015260600190565b6020808252602b908201527f6c656e677468206f6620656e61626c654d616c6963696f7573566f7465536c6160408201526a0e6d040dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526017908201527f766572696679207369676e6174757265206661696c6564000000000000000000604082015260600190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526019908201527f7372634e756d20626967676572207468616e207461724e756d00000000000000604082015260600190565b6020808252602c908201527f7468652066696e616c69747920736c6173682072657761726420726174696f2060408201526b6f7574206f662072616e676560a01b606082015260800190565b60208082526027908201527f6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d6040820152660d2e6dac2e8c6d60cb1b606082015260800190565b60208082526013908201527274776f206964656e746963616c20766f74657360681b604082015260600190565b60208082526030908201527f746865206d6573736167652073656e646572206d7573742062652076616c696460408201526f185d1bdc94d95d0818dbdb9d1c9858dd60821b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252601590820152741d9bdd195059191c881a5cc81b9bdd08199bdd5b99605a1b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526022908201527f6c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746040820152610c6d60f31b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526025908201527f746865206d697364656d65616e6f725468726573686f6c64206f7574206f662060408201526472616e676560d81b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b6020808252601490820152731d185c99d95d08189b1bd8dac81d1bdbc81bdb1960621b604082015260600190565b6020808252601e908201527f7265636569766520756e65787065637465642073796e207061636b6167650000604082015260600190565b6020808252602b908201527f6c656e677468206f662066696e616c697479536c61736852657761726452617460408201526a0d2de40dad2e6dac2e8c6d60ab1b606082015260800190565b6020808252818101527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604082015260600190565b61ffff91909116815260200190565b90815260200190565b6000838252604060208301526135226040830184612d24565b949350505050565b918252602082015260400190565b92835260208301919091521515604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff851682526060602083015261358b6060830185612d24565b9050826040830152949350505050565b60405181810167ffffffffffffffff811182821017156135ba57600080fd5b604052919050565b600067ffffffffffffffff8211156135d8578081fd5b5060209081020190565b600067ffffffffffffffff8211156135f8578081fd5b50601f01601f191660200190565b60005b83811015613621578181015183820152602001613609565b838111156118775750506000910152565b6001600160a01b038116811461364757600080fd5b5056fea164736f6c6343000604000a", }, { ContractAddr: common.HexToAddress(SystemRewardContract), - CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ff75c61ecd457c1370327e136b38c7a0d63ca821", + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe", Code: "6080604052600436106101c55760003560e01c806375d47a0a116100f7578063ab51bb9611610095578063f9a2bbc711610064578063f9a2bbc7146105c3578063fb5478b3146105d8578063fc3e5908146105ed578063fd6a68791461060257610209565b8063ab51bb96146104b5578063ac431751146104ca578063c81b166214610599578063dc927faf146105ae57610209565b80639a99b4f0116100d15780639a99b4f01461043d5780639dc0926214610476578063a1a11bf51461048b578063a78abc16146104a057610209565b806375d47a0a146103fe5780637942fd051461041357806396713da91461042857610209565b8063493279b1116101645780636d70f7ae1161013e5780636d70f7ae146103785780636e47b482146103bf57806370fd5bad146103d4578063718a8aa8146103e957610209565b8063493279b1146103225780634bf6c8821461034e57806351e806721461036357610209565b806331b6d4a5116101a057806331b6d4a5146102b85780633a0b0eff146102cd5780633dffc387146102e257806343756e5c1461030d57610209565b806227253a1461020e5780630bee7a67146102595780630e2374a51461028757610209565b366102095734156102075760408051348152905133917f6c98249d85d88c3753a04a22230f595e4dc8d3dc86c34af35deeeedc861b89db919081900360200190a25b005b600080fd5b34801561021a57600080fd5b506102476004803603604081101561023157600080fd5b506001600160a01b038135169060200135610617565b60408051918252519081900360200190f35b34801561026557600080fd5b5061026e6107c2565b6040805163ffffffff9092168252519081900360200190f35b34801561029357600080fd5b5061029c6107c7565b604080516001600160a01b039092168252519081900360200190f35b3480156102c457600080fd5b506102476107cd565b3480156102d957600080fd5b506102476107d9565b3480156102ee57600080fd5b506102f76107df565b6040805160ff9092168252519081900360200190f35b34801561031957600080fd5b5061029c6107e4565b34801561032e57600080fd5b506103376107ea565b6040805161ffff9092168252519081900360200190f35b34801561035a57600080fd5b506102f76107f0565b34801561036f57600080fd5b5061029c6107f5565b34801561038457600080fd5b506103ab6004803603602081101561039b57600080fd5b50356001600160a01b03166107fb565b604080519115158252519081900360200190f35b3480156103cb57600080fd5b5061029c610819565b3480156103e057600080fd5b506102f761081f565b3480156103f557600080fd5b506102f7610824565b34801561040a57600080fd5b5061029c610829565b34801561041f57600080fd5b506102f761082f565b34801561043457600080fd5b506102f7610834565b34801561044957600080fd5b506102476004803603604081101561046057600080fd5b506001600160a01b038135169060200135610839565b34801561048257600080fd5b5061029c610963565b34801561049757600080fd5b5061029c610969565b3480156104ac57600080fd5b506103ab61096f565b3480156104c157600080fd5b5061026e610978565b3480156104d657600080fd5b50610207600480360360408110156104ed57600080fd5b81019060208101813564010000000081111561050857600080fd5b82018360208201111561051a57600080fd5b8035906020019184600183028401116401000000008311171561053c57600080fd5b91939092909160208101903564010000000081111561055a57600080fd5b82018360208201111561056c57600080fd5b8035906020019184600183028401116401000000008311171561058e57600080fd5b50909250905061097d565b3480156105a557600080fd5b5061029c610d00565b3480156105ba57600080fd5b5061029c610d06565b3480156105cf57600080fd5b5061029c610d0c565b3480156105e457600080fd5b50610247610d12565b3480156105f957600080fd5b506102f7610d1e565b34801561060e57600080fd5b5061029c610d23565b6000805460ff1661069457600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166106e25760405162461bcd60e51b815260040180806020018281038252602b815260200180610e11602b913960400191505060405180910390fd5b60004783106106f157476106f3565b825b9050674563918244f400008111156107105750674563918244f400005b8015610791576040516001600160a01b0385169082156108fc029083906000818181858888f1935050505015801561074c573d6000803e3d6000fd5b506040805182815290516001600160a01b038616917ff8b71c64315fc33b2ead2adfa487955065152a8ac33d9d5193aafd7f45dc15a0919081900360200190a26107bb565b6040517fe589651933c2457488cc0d8e0941518abf748e799435e4e396d9c4d0b2db2d4d90600090a15b9392505050565b606481565b61200181565b674563918244f4000081565b60015481565b600181565b61100181565b6102ca81565b600881565b61200081565b6001600160a01b031660009081526002602052604090205460ff1690565b61100581565b600281565b601081565b61100881565b600b81565b600981565b6000805460ff166108b657600260208190527fe57bda0a954a7c7381b17b2c763e646ba2c60f67292d287ba583603e2c1c41668054600160ff19918216811790925561100560009081527fe25235fc0de9d7165652bef0846fefda506174abb9a190f03d0f7bcc6146dbce80548316841790559282558254161790555b3360009081526002602052604090205460ff166109045760405162461bcd60e51b815260040180806020018281038252602b815260200180610e11602b913960400191505060405180910390fd5b60004783106109135747610915565b825b9050670de0b6b3a76400008111156107105750604051670de0b6b3a7640000906001600160a01b03851690600090839082818181858883f1935050505015801561074c573d6000803e3d6000fd5b61100781565b61100681565b60005460ff1681565b600081565b33611007146109bd5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e6b602e913960400191505060405180910390fd5b610a1f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600b81526a30b23227b832b930ba37b960a91b60208201529150610d299050565b15610af757606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091149050610aa25760405162461bcd60e51b815260040180806020018281038252602c815260200180610e99602c913960400191505060405180910390fd5b60148101516001600160a01b038116600081815260026020526040808220805460ff19166001179055517f9870d7fe5d112134c55844951dedf365363006d9c588db07c4c85af6322a06199190a25050610c6e565b610b5c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81526d3232b632ba32a7b832b930ba37b960911b60208201529150610d299050565b15610c3157606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091149050610bdf5760405162461bcd60e51b815260040180806020018281038252602f815260200180610e3c602f913960400191505060405180910390fd5b60148101516001600160a01b038116600081815260026020526040808220805460ff19169055517fb40992a19dba61ea600e87fce607102bf5908dc89076217b6ca6ae195224f7029190a25050610c6e565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b61100281565b61100381565b61100081565b670de0b6b3a764000081565b600381565b61100481565b6000816040516020018082805190602001908083835b60208310610d5e5780518252601f199092019160209182019101610d3f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310610dcc5780518252601f199092019160209182019101610dad565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490509291505056fe6f6e6c79206f70657261746f7220697320616c6c6f77656420746f2063616c6c20746865206d6574686f646c656e677468206f662076616c756520666f722064656c6574654f70657261746f722073686f756c64206265203230746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163746c656e677468206f662076616c756520666f72206164644f70657261746f722073686f756c64206265203230a164736f6c6343000604000a", }, }, From e3ef62f3bde2d8b41a2b9592a945b1cc0af219b6 Mon Sep 17 00:00:00 2001 From: buddho Date: Thu, 7 Dec 2023 16:07:48 +0800 Subject: [PATCH 30/31] rpc,eth: output more info about failed txs(#2041) --- eth/fetcher/tx_fetcher.go | 12 ++++----- eth/fetcher/tx_fetcher_test.go | 30 ++++++++++----------- eth/handler.go | 21 ++++++++++++--- eth/peer.go | 9 +++++++ p2p/peer.go | 3 +++ rpc/handler.go | 10 +++++++ tests/fuzzers/txfetcher/txfetcher_fuzzer.go | 2 +- 7 files changed, 62 insertions(+), 25 deletions(-) diff --git a/eth/fetcher/tx_fetcher.go b/eth/fetcher/tx_fetcher.go index a3a0f9da46..d82c838736 100644 --- a/eth/fetcher/tx_fetcher.go +++ b/eth/fetcher/tx_fetcher.go @@ -170,9 +170,9 @@ type TxFetcher struct { alternates map[common.Hash]map[string]struct{} // In-flight transaction alternate origins if retrieval fails // Callbacks - hasTx func(common.Hash) bool // Retrieves a tx from the local txpool - addTxs func([]*txpool.Transaction) []error // Insert a batch of transactions into local txpool - fetchTxs func(string, []common.Hash) error // Retrieves a set of txs from a remote peer + hasTx func(common.Hash) bool // Retrieves a tx from the local txpool + addTxs func(string, []*txpool.Transaction) []error // Insert a batch of transactions into local txpool + fetchTxs func(string, []common.Hash) error // Retrieves a set of txs from a remote peer step chan struct{} // Notification channel when the fetcher loop iterates clock mclock.Clock // Time wrapper to simulate in tests @@ -181,14 +181,14 @@ type TxFetcher struct { // NewTxFetcher creates a transaction fetcher to retrieve transaction // based on hash announcements. -func NewTxFetcher(hasTx func(common.Hash) bool, addTxs func([]*txpool.Transaction) []error, fetchTxs func(string, []common.Hash) error) *TxFetcher { +func NewTxFetcher(hasTx func(common.Hash) bool, addTxs func(string, []*txpool.Transaction) []error, fetchTxs func(string, []common.Hash) error) *TxFetcher { return NewTxFetcherForTests(hasTx, addTxs, fetchTxs, mclock.System{}, nil) } // NewTxFetcherForTests is a testing method to mock out the realtime clock with // a simulated version and the internal randomness with a deterministic one. func NewTxFetcherForTests( - hasTx func(common.Hash) bool, addTxs func([]*txpool.Transaction) []error, fetchTxs func(string, []common.Hash) error, + hasTx func(common.Hash) bool, addTxs func(string, []*txpool.Transaction) []error, fetchTxs func(string, []common.Hash) error, clock mclock.Clock, rand *mrand.Rand) *TxFetcher { return &TxFetcher{ notify: make(chan *txAnnounce), @@ -300,7 +300,7 @@ func (f *TxFetcher) Enqueue(peer string, txs []*types.Transaction, direct bool) for j, tx := range batch { wrapped[j] = &txpool.Transaction{Tx: tx} } - for j, err := range f.addTxs(wrapped) { + for j, err := range f.addTxs(peer, wrapped) { // Track the transaction hash if the price is too low for us. // Avoid re-request this transaction when we receive another // announcement. diff --git a/eth/fetcher/tx_fetcher_test.go b/eth/fetcher/tx_fetcher_test.go index c5805d6ef3..1125f1fbb8 100644 --- a/eth/fetcher/tx_fetcher_test.go +++ b/eth/fetcher/tx_fetcher_test.go @@ -378,7 +378,7 @@ func TestTransactionFetcherCleanup(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { return make([]error, len(txs)) }, func(string, []common.Hash) error { return nil }, @@ -417,7 +417,7 @@ func TestTransactionFetcherCleanupEmpty(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { return make([]error, len(txs)) }, func(string, []common.Hash) error { return nil }, @@ -455,7 +455,7 @@ func TestTransactionFetcherMissingRescheduling(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { return make([]error, len(txs)) }, func(string, []common.Hash) error { return nil }, @@ -501,7 +501,7 @@ func TestTransactionFetcherMissingCleanup(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { return make([]error, len(txs)) }, func(string, []common.Hash) error { return nil }, @@ -539,7 +539,7 @@ func TestTransactionFetcherBroadcasts(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { return make([]error, len(txs)) }, func(string, []common.Hash) error { return nil }, @@ -644,7 +644,7 @@ func TestTransactionFetcherTimeoutRescheduling(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { return make([]error, len(txs)) }, func(string, []common.Hash) error { return nil }, @@ -865,7 +865,7 @@ func TestTransactionFetcherUnderpricedDedup(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { errs := make([]error, len(txs)) for i := 0; i < len(errs); i++ { if i%2 == 0 { @@ -938,7 +938,7 @@ func TestTransactionFetcherUnderpricedDoSProtection(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { errs := make([]error, len(txs)) for i := 0; i < len(errs); i++ { errs[i] = txpool.ErrUnderpriced @@ -964,7 +964,7 @@ func TestTransactionFetcherOutOfBoundDeliveries(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { return make([]error, len(txs)) }, func(string, []common.Hash) error { return nil }, @@ -1017,7 +1017,7 @@ func TestTransactionFetcherDrop(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { return make([]error, len(txs)) }, func(string, []common.Hash) error { return nil }, @@ -1083,7 +1083,7 @@ func TestTransactionFetcherDropRescheduling(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { return make([]error, len(txs)) }, func(string, []common.Hash) error { return nil }, @@ -1128,7 +1128,7 @@ func TestTransactionFetcherFuzzCrash01(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { return make([]error, len(txs)) }, func(string, []common.Hash) error { return nil }, @@ -1155,7 +1155,7 @@ func TestTransactionFetcherFuzzCrash02(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { return make([]error, len(txs)) }, func(string, []common.Hash) error { return nil }, @@ -1184,7 +1184,7 @@ func TestTransactionFetcherFuzzCrash03(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { return make([]error, len(txs)) }, func(string, []common.Hash) error { return nil }, @@ -1217,7 +1217,7 @@ func TestTransactionFetcherFuzzCrash04(t *testing.T) { init: func() *TxFetcher { return NewTxFetcher( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { return make([]error, len(txs)) }, func(string, []common.Hash) error { diff --git a/eth/handler.go b/eth/handler.go index e59bbb4884..b93382402d 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -33,6 +33,7 @@ import ( "github.com/ethereum/go-ethereum/core/monitor" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/txpool" + "github.com/ethereum/go-ethereum/core/txpool/legacypool" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/eth/fetcher" @@ -65,7 +66,8 @@ const ( ) var ( - syncChallengeTimeout = 15 * time.Second // Time allowance for a node to reply to the sync progress challenge + syncChallengeTimeout = 15 * time.Second // Time allowance for a node to reply to the sync progress challenge + accountBlacklistPeerCounter = metrics.NewRegisteredCounter("eth/count/blacklist", nil) ) // txPool defines the methods needed from a transaction pool implementation to @@ -342,8 +344,21 @@ func newHandler(config *handlerConfig) (*handler, error) { } return p.RequestTxs(hashes) } - addTxs := func(txs []*txpool.Transaction) []error { - return h.txpool.Add(txs, false, false) + addTxs := func(peer string, txs []*txpool.Transaction) []error { + errors := h.txpool.Add(txs, false, false) + for _, err := range errors { + if err == legacypool.ErrInBlackList { + accountBlacklistPeerCounter.Inc(1) + p := h.peers.peer(peer) + if p != nil { + remoteAddr := p.remoteAddr() + if remoteAddr != nil { + log.Warn("blacklist account detected from other peer", "remoteAddr", remoteAddr, "ID", p.ID()) + } + } + } + } + return errors } h.txFetcher = fetcher.NewTxFetcher(h.txpool.Has, addTxs, fetchTx) h.chainSync = newChainSyncer(h) diff --git a/eth/peer.go b/eth/peer.go index dd67242192..3125753047 100644 --- a/eth/peer.go +++ b/eth/peer.go @@ -17,6 +17,8 @@ package eth import ( + "net" + "github.com/ethereum/go-ethereum/eth/protocols/bsc" "github.com/ethereum/go-ethereum/eth/protocols/trust" @@ -45,6 +47,13 @@ func (p *ethPeer) info() *ethPeerInfo { } } +func (p *ethPeer) remoteAddr() net.Addr { + if p.Peer != nil && p.Peer.Peer != nil { + return p.Peer.Peer.RemoteAddr() + } + return nil +} + // snapPeerInfo represents a short summary of the `snap` sub-protocol metadata known // about a connected peer. type snapPeerInfo struct { diff --git a/p2p/peer.go b/p2p/peer.go index 723a142ff3..ed80b226bf 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -210,6 +210,9 @@ func (p *Peer) RemoteAddr() net.Addr { } log.Warn("RemoteAddr", "invalid testRemoteAddr", p.testRemoteAddr) } + if p.rw == nil { + return nil + } return p.rw.fd.RemoteAddr() } diff --git a/rpc/handler.go b/rpc/handler.go index e7d138e923..8f799a41fb 100644 --- a/rpc/handler.go +++ b/rpc/handler.go @@ -26,10 +26,15 @@ import ( "time" "github.com/ethereum/go-ethereum/common/gopool" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/log" ) +var ( + accountBlacklistRpcCounter = metrics.NewRegisteredCounter("rpc/count/blacklist", nil) +) + // handler handles JSON-RPC messages. There is one handler per connection. Note that // handler is not safe for concurrent use. Message handling never blocks indefinitely // because RPCs are processed on background goroutines launched by handler. @@ -476,6 +481,11 @@ func (h *handler) handleCallMsg(ctx *callProc, reqCtx context.Context, msg *json xForward := reqCtx.Value("X-Forwarded-For") h.log.Warn("Served "+msg.Method, "reqid", idForLog{msg.ID}, "t", time.Since(start), "err", resp.Error.Message, "X-Forwarded-For", xForward) + monitoredError := "sender or to in black list" // using legacypool.ErrInBlackList.Error() will cause `import cycle` + if strings.Contains(resp.Error.Message, monitoredError) { + accountBlacklistRpcCounter.Inc(1) + log.Warn("blacklist account detected from direct rpc", "remoteAddr", h.conn.remoteAddr()) + } ctx = append(ctx, "err", resp.Error.Message) if resp.Error.Data != nil { ctx = append(ctx, "errdata", resp.Error.Data) diff --git a/tests/fuzzers/txfetcher/txfetcher_fuzzer.go b/tests/fuzzers/txfetcher/txfetcher_fuzzer.go index 56b6b1e64e..91ca2eefb2 100644 --- a/tests/fuzzers/txfetcher/txfetcher_fuzzer.go +++ b/tests/fuzzers/txfetcher/txfetcher_fuzzer.go @@ -80,7 +80,7 @@ func Fuzz(input []byte) int { f := fetcher.NewTxFetcherForTests( func(common.Hash) bool { return false }, - func(txs []*txpool.Transaction) []error { + func(peer string, txs []*txpool.Transaction) []error { return make([]error, len(txs)) }, func(string, []common.Hash) error { return nil }, From a140a5a324d010f20d7f997980450b47d956a0b5 Mon Sep 17 00:00:00 2001 From: Eric <45141191+qybdyx@users.noreply.github.com> Date: Fri, 8 Dec 2023 13:44:16 +0800 Subject: [PATCH 31/31] cmd/jsutils: add 2 tools get validator version and block txs number (#2036) --- cmd/jsutils/README.md | 25 ++++++++++++++++++++++++ cmd/jsutils/gettxcount.js | 31 ++++++++++++++++++++++++++++++ cmd/jsutils/getvalidatorversion.js | 25 ++++++++++++++++++++++++ cmd/jsutils/package.json | 16 +++++++++++++++ 4 files changed, 97 insertions(+) create mode 100644 cmd/jsutils/README.md create mode 100644 cmd/jsutils/gettxcount.js create mode 100644 cmd/jsutils/getvalidatorversion.js create mode 100644 cmd/jsutils/package.json diff --git a/cmd/jsutils/README.md b/cmd/jsutils/README.md new file mode 100644 index 0000000000..88efa98dce --- /dev/null +++ b/cmd/jsutils/README.md @@ -0,0 +1,25 @@ +## Requirement + +- nodejs: v20.10.0 +- npm: v10.2.3 + +## Prepare +Recommend use [nvm](https://github.com/nvm-sh/nvm) to manage node version. + +Install node.js dependency: +```shell script + npm install +``` +## Run +mainnet validators version +```bash + npm run startMainnet +``` +testnet validators version +```bash + npm run startTestnet +``` +Transaction count +```bash +node gettxcount.js --rpc ${url} --startNum ${start} --endNum ${end} +``` \ No newline at end of file diff --git a/cmd/jsutils/gettxcount.js b/cmd/jsutils/gettxcount.js new file mode 100644 index 0000000000..06ee487881 --- /dev/null +++ b/cmd/jsutils/gettxcount.js @@ -0,0 +1,31 @@ +import { ethers } from "ethers"; +import program from "commander"; + +program.option("--rpc ", "Rpc"); +program.option("--startNum ", "start num") +program.option("--endNum ", "end num") +program.parse(process.argv); + +const provider = new ethers.JsonRpcProvider(program.rpc) + +const main = async () => { + let txCount = 0; + let num = 0; + console.log("Find the max txs count between", program.startNum, "and", program.endNum); + for (let i = program.startNum; i < program.endNum; i++) { + let x = await provider.send("eth_getBlockTransactionCountByNumber", [ + ethers.toQuantity(i)]); + let a = ethers.toNumber(x) + if (a > txCount) { + num = i; + txCount = a; + } + } + console.log("BlockNum = ", num, "TxCount =", txCount); +}; + +main().then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); \ No newline at end of file diff --git a/cmd/jsutils/getvalidatorversion.js b/cmd/jsutils/getvalidatorversion.js new file mode 100644 index 0000000000..d0d9fc3d90 --- /dev/null +++ b/cmd/jsutils/getvalidatorversion.js @@ -0,0 +1,25 @@ +import { ethers } from "ethers"; +import program from "commander"; + +program.option("--Rpc ", "Rpc"); +program.option("--Num ", "validator num", 21) +program.parse(process.argv); + +const provider = new ethers.JsonRpcProvider(program.Rpc); + +const main = async () => { + const blockNum = await provider.getBlockNumber(); + console.log(blockNum); + for (let i = 0; i < program.Num; i++) { + let blockData = await provider.getBlock(blockNum - i); + let major = ethers.toNumber(ethers.dataSlice(blockData.extraData, 2, 3)) + let minor = ethers.toNumber(ethers.dataSlice(blockData.extraData, 3, 4)) + let patch = ethers.toNumber(ethers.dataSlice(blockData.extraData, 4, 5)) + console.log(blockData.miner, "version =", major + "." + minor + "." + patch) + } +}; +main().then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); \ No newline at end of file diff --git a/cmd/jsutils/package.json b/cmd/jsutils/package.json new file mode 100644 index 0000000000..68a76c9aa4 --- /dev/null +++ b/cmd/jsutils/package.json @@ -0,0 +1,16 @@ +{ + "name": "jsutils", + "version": "1.0.0", + "type": "module", + "description": "jsUtils for bsc", + "main": "index.js", + "scripts": { + "startMainnet": "node getvalidatorversion.js --Rpc https://bsc-dataseed.bnbchain.org --Num 21", + "startTestnet": "node getvalidatorversion.js --Rpc https://bsc-testnet-dataseed.bnbchain.org --Num 7" + }, + "dependencies": { + "commander": "^3.0.1", + "ethers": "^6.2.3" + }, + "author": "BNB Chain" +}