From 700d7bcdf498d202c49b87611a9e72c150d7fb8c Mon Sep 17 00:00:00 2001 From: Krishna Upadhyaya Date: Wed, 1 Sep 2021 01:56:09 +0530 Subject: [PATCH 01/13] add: mumbai network flag --- cmd/devp2p/nodesetcmd.go | 2 ++ cmd/faucet/faucet.go | 7 ++++-- cmd/geth/chaincmd.go | 1 + cmd/geth/consolecmd.go | 2 ++ cmd/geth/dbcmd.go | 8 +++++++ cmd/geth/main.go | 6 ++++- cmd/geth/snapshot.go | 5 ++++ cmd/geth/usage.go | 1 + cmd/utils/flags.go | 23 ++++++++++++++++-- core/genesis.go | 21 ++++++++++++++++- core/genesis_alloc.go | 1 + mobile/geth.go | 7 ++++++ mobile/params.go | 9 ++++++++ params/bootnodes.go | 8 +++++++ params/config.go | 50 ++++++++++++++++++++++++++++++++++++++++ 15 files changed, 145 insertions(+), 6 deletions(-) diff --git a/cmd/devp2p/nodesetcmd.go b/cmd/devp2p/nodesetcmd.go index 848288c9cf..3291171c26 100644 --- a/cmd/devp2p/nodesetcmd.go +++ b/cmd/devp2p/nodesetcmd.go @@ -235,6 +235,8 @@ func ethFilter(args []string) (nodeFilter, error) { filter = forkid.NewStaticFilter(params.GoerliChainConfig, params.GoerliGenesisHash) case "ropsten": filter = forkid.NewStaticFilter(params.RopstenChainConfig, params.RopstenGenesisHash) + case "mumbai": + filter = forkid.NewStaticFilter(params.MumbaiChainConfig, params.MumbaiGenesisHash) default: return nil, fmt.Errorf("unknown network %q", args[0]) } diff --git a/cmd/faucet/faucet.go b/cmd/faucet/faucet.go index bb5375384f..981b7b6afc 100644 --- a/cmd/faucet/faucet.go +++ b/cmd/faucet/faucet.go @@ -88,6 +88,7 @@ var ( goerliFlag = flag.Bool("goerli", false, "Initializes the faucet with Görli network config") rinkebyFlag = flag.Bool("rinkeby", false, "Initializes the faucet with Rinkeby network config") + mumbaiFlag = flag.Bool("mumbai", false, "Initializes the faucet with Mumbai network config") ) var ( @@ -147,7 +148,7 @@ func main() { log.Crit("Failed to render the faucet template", "err", err) } // Load and parse the genesis block requested by the user - genesis, err := getGenesis(genesisFlag, *goerliFlag, *rinkebyFlag) + genesis, err := getGenesis(genesisFlag, *goerliFlag, *rinkebyFlag, *mumbaiFlag) if err != nil { log.Crit("Failed to parse genesis config", "err", err) } @@ -886,7 +887,7 @@ func authNoAuth(url string) (string, string, common.Address, error) { } // getGenesis returns a genesis based on input args -func getGenesis(genesisFlag *string, goerliFlag bool, rinkebyFlag bool) (*core.Genesis, error) { +func getGenesis(genesisFlag *string, goerliFlag bool, rinkebyFlag bool, mumbaiFlag bool) (*core.Genesis, error) { switch { case genesisFlag != nil: var genesis core.Genesis @@ -896,6 +897,8 @@ func getGenesis(genesisFlag *string, goerliFlag bool, rinkebyFlag bool) (*core.G return core.DefaultGoerliGenesisBlock(), nil case rinkebyFlag: return core.DefaultRinkebyGenesisBlock(), nil + case mumbaiFlag: + return core.DefaultMumbaiGenesisBlock(), nil default: return nil, fmt.Errorf("no genesis flag provided") } diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go index 8c460c3b5b..6643207001 100644 --- a/cmd/geth/chaincmd.go +++ b/cmd/geth/chaincmd.go @@ -68,6 +68,7 @@ It expects the genesis file as argument.`, utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, }, Category: "BLOCKCHAIN COMMANDS", Description: ` diff --git a/cmd/geth/consolecmd.go b/cmd/geth/consolecmd.go index 0e156fde9a..e508bc0797 100644 --- a/cmd/geth/consolecmd.go +++ b/cmd/geth/consolecmd.go @@ -134,6 +134,8 @@ func remoteConsole(ctx *cli.Context) error { path = filepath.Join(path, "rinkeby") } else if ctx.GlobalBool(utils.GoerliFlag.Name) { path = filepath.Join(path, "goerli") + } else if ctx.GlobalBool(utils.MumbaiFlag.Name) { + path = filepath.Join(path, "mumbai") } } endpoint = fmt.Sprintf("%s/geth.ipc", path) diff --git a/cmd/geth/dbcmd.go b/cmd/geth/dbcmd.go index 54ada40890..36a9b44a9d 100644 --- a/cmd/geth/dbcmd.go +++ b/cmd/geth/dbcmd.go @@ -75,6 +75,7 @@ Remove blockchain and state databases`, utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, }, Usage: "Inspect the storage size for each type of data in the database", Description: `This commands iterates the entire database. If the optional 'prefix' and 'start' arguments are provided, then the iteration is limited to the given subset of data.`, @@ -90,6 +91,7 @@ Remove blockchain and state databases`, utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, }, } dbCompactCmd = cli.Command{ @@ -103,6 +105,7 @@ Remove blockchain and state databases`, utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, utils.CacheFlag, utils.CacheDatabaseFlag, }, @@ -122,6 +125,7 @@ corruption if it is aborted during execution'!`, utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, }, Description: "This command looks up the specified database key from the database.", } @@ -137,6 +141,7 @@ corruption if it is aborted during execution'!`, utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, }, Description: `This command deletes the specified database key from the database. WARNING: This is a low-level operation which may cause database corruption!`, @@ -153,6 +158,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, }, Description: `This command sets a given database key to the given value. WARNING: This is a low-level operation which may cause database corruption!`, @@ -169,6 +175,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, }, Description: "This command looks up the specified database key from the database.", } @@ -184,6 +191,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, }, Description: "This command displays information about the freezer index.", } diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 0954debff9..4b0d8835e0 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -140,6 +140,7 @@ var ( utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, utils.VMEnableDebugFlag, utils.NetworkIdFlag, utils.EthStatsURLFlag, @@ -282,6 +283,9 @@ func prepare(ctx *cli.Context) { case ctx.GlobalIsSet(utils.GoerliFlag.Name): log.Info("Starting Geth on Görli testnet...") + case ctx.GlobalIsSet(utils.MumbaiFlag.Name): + log.Info("Starting Geth on Mumbai testnet...") + case ctx.GlobalIsSet(utils.DeveloperFlag.Name): log.Info("Starting Geth in ephemeral dev mode...") @@ -291,7 +295,7 @@ func prepare(ctx *cli.Context) { // If we're a full node on mainnet without --cache specified, bump default cache allowance if ctx.GlobalString(utils.SyncModeFlag.Name) != "light" && !ctx.GlobalIsSet(utils.CacheFlag.Name) && !ctx.GlobalIsSet(utils.NetworkIdFlag.Name) { // Make sure we're not on any supported preconfigured testnet either - if !ctx.GlobalIsSet(utils.RopstenFlag.Name) && !ctx.GlobalIsSet(utils.RinkebyFlag.Name) && !ctx.GlobalIsSet(utils.GoerliFlag.Name) && !ctx.GlobalIsSet(utils.DeveloperFlag.Name) { + if !ctx.GlobalIsSet(utils.RopstenFlag.Name) && !ctx.GlobalIsSet(utils.RinkebyFlag.Name) && !ctx.GlobalIsSet(utils.GoerliFlag.Name) && !ctx.GlobalIsSet(utils.MumbaiFlag.Name) && !ctx.GlobalIsSet(utils.DeveloperFlag.Name) { // Nope, we're really on mainnet. Bump that cache up! log.Info("Bumping default cache on mainnet", "provided", ctx.GlobalInt(utils.CacheFlag.Name), "updated", 4096) ctx.GlobalSet(utils.CacheFlag.Name, strconv.Itoa(4096)) diff --git a/cmd/geth/snapshot.go b/cmd/geth/snapshot.go index 9976db49f6..7d0f996936 100644 --- a/cmd/geth/snapshot.go +++ b/cmd/geth/snapshot.go @@ -63,6 +63,7 @@ var ( utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, utils.CacheTrieJournalFlag, utils.BloomFilterSizeFlag, }, @@ -93,6 +94,7 @@ the trie clean cache with default directory will be deleted. utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, }, Description: ` geth snapshot verify-state @@ -113,6 +115,7 @@ In other words, this command does the snapshot to trie conversion. utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, }, Description: ` geth snapshot traverse-state @@ -135,6 +138,7 @@ It's also usable without snapshot enabled. utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, }, Description: ` geth snapshot traverse-rawstate @@ -158,6 +162,7 @@ It's also usable without snapshot enabled. utils.RopstenFlag, utils.RinkebyFlag, utils.GoerliFlag, + utils.MumbaiFlag, utils.ExcludeCodeFlag, utils.ExcludeStorageFlag, utils.StartKeyFlag, diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go index f39e4f402f..52c9f609a0 100644 --- a/cmd/geth/usage.go +++ b/cmd/geth/usage.go @@ -43,6 +43,7 @@ var AppHelpFlagGroups = []flags.FlagGroup{ utils.NetworkIdFlag, utils.MainnetFlag, utils.GoerliFlag, + utils.MumbaiFlag, utils.RinkebyFlag, utils.RopstenFlag, utils.SyncModeFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 366be6db65..1c19542b38 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -155,6 +155,10 @@ var ( Name: "ropsten", Usage: "Ropsten network: pre-configured proof-of-work test network", } + MumbaiFlag = cli.BoolFlag{ + Name: "mumbai", + Usage: "Mumbai network: pre-configured proof-of-stake test network", + } DeveloperFlag = cli.BoolFlag{ Name: "dev", Usage: "Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled", @@ -797,6 +801,9 @@ func MakeDataDir(ctx *cli.Context) string { if ctx.GlobalBool(GoerliFlag.Name) { return filepath.Join(path, "goerli") } + if ctx.GlobalBool(MumbaiFlag.Name) { + return filepath.Join(path, "mumbai") + } return path } Fatalf("Cannot determine default data directory, please set manually (--datadir)") @@ -849,6 +856,8 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) { urls = params.RinkebyBootnodes case ctx.GlobalBool(GoerliFlag.Name): urls = params.GoerliBootnodes + case ctx.GlobalBool(MumbaiFlag.Name): + urls = params.MumbaiBootnodes case cfg.BootstrapNodes != nil: return // already set, don't apply defaults. } @@ -1292,6 +1301,8 @@ func setDataDir(ctx *cli.Context, cfg *node.Config) { cfg.DataDir = filepath.Join(node.DefaultDataDir(), "rinkeby") case ctx.GlobalBool(GoerliFlag.Name) && cfg.DataDir == node.DefaultDataDir(): cfg.DataDir = filepath.Join(node.DefaultDataDir(), "goerli") + case ctx.GlobalBool(MumbaiFlag.Name) && cfg.DataDir == node.DefaultDataDir(): + cfg.DataDir = filepath.Join(node.DefaultDataDir(), "mumbai") } } @@ -1477,7 +1488,7 @@ func CheckExclusive(ctx *cli.Context, args ...interface{}) { // SetEthConfig applies eth-related command line flags to the config. func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { // Avoid conflicting network flags - CheckExclusive(ctx, MainnetFlag, DeveloperFlag, RopstenFlag, RinkebyFlag, GoerliFlag) + CheckExclusive(ctx, MainnetFlag, DeveloperFlag, RopstenFlag, RinkebyFlag, MumbaiFlag) CheckExclusive(ctx, LightServeFlag, SyncModeFlag, "light") CheckExclusive(ctx, DeveloperFlag, ExternalSignerFlag) // Can't use both ephemeral unlocked and external signer if ctx.GlobalString(GCModeFlag.Name) == "archive" && ctx.GlobalUint64(TxLookupLimitFlag.Name) != 0 { @@ -1503,7 +1514,7 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { cfg.BorLogs = ctx.GlobalBool(BorLogsFlag.Name) } - // Cap the cache allowance and tune the garbage collector + // Cap the cache allowance and tune the garbage collector mem, err := gopsutil.VirtualMemory() if err == nil { if 32<<(^uintptr(0)>>63) == 32 && mem.Total > 2*1024*1024*1024 { @@ -1634,6 +1645,12 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { } cfg.Genesis = core.DefaultGoerliGenesisBlock() SetDNSDiscoveryDefaults(cfg, params.GoerliGenesisHash) + case ctx.GlobalBool(MumbaiFlag.Name): + if !ctx.GlobalIsSet(NetworkIdFlag.Name) { + cfg.NetworkId = 80001 + } + cfg.Genesis = core.DefaultMumbaiGenesisBlock() + SetDNSDiscoveryDefaults(cfg, params.MumbaiGenesisHash) case ctx.GlobalBool(DeveloperFlag.Name): if !ctx.GlobalIsSet(NetworkIdFlag.Name) { cfg.NetworkId = 1337 @@ -1854,6 +1871,8 @@ func MakeGenesis(ctx *cli.Context) *core.Genesis { genesis = core.DefaultRinkebyGenesisBlock() case ctx.GlobalBool(GoerliFlag.Name): genesis = core.DefaultGoerliGenesisBlock() + case ctx.GlobalBool(MumbaiFlag.Name): + genesis = core.DefaultMumbaiGenesisBlock() case ctx.GlobalBool(DeveloperFlag.Name): Fatalf("Developer chains are ephemeral") } diff --git a/core/genesis.go b/core/genesis.go index c1f226c34a..f90af0e661 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -248,6 +248,8 @@ func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig { return params.RinkebyChainConfig case ghash == params.GoerliGenesisHash: return params.GoerliChainConfig + case ghash == params.MumbaiGenesisHash: + return params.MumbaiChainConfig default: return params.AllEthashProtocolChanges } @@ -397,6 +399,20 @@ func DefaultGoerliGenesisBlock() *Genesis { } } +// DefaultMumbaiGenesisBlock returns the Mumbai network genesis block. +func DefaultMumbaiGenesisBlock() *Genesis { + return &Genesis{ + Config: params.MumbaiChainConfig, + Nonce: 0, + Timestamp: 1558348305, + GasLimit: 10000000, + Difficulty: big.NewInt(1), + Mixhash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), + Coinbase: common.HexToAddress("0x0000000000000000000000000000000000000000"), + Alloc: decodePrealloc(mumbaiAllocData), + } +} + // DeveloperGenesisBlock returns the 'geth --dev' genesis block. func DeveloperGenesisBlock(period uint64, faucet common.Address) *Genesis { // Override the default period to the user requested one @@ -429,7 +445,10 @@ func DeveloperGenesisBlock(period uint64, faucet common.Address) *Genesis { } func decodePrealloc(data string) GenesisAlloc { - var p []struct{ Addr, Balance *big.Int } + var p []struct { + Addr, Balance *big.Int + Code []byte + } if err := rlp.NewStream(strings.NewReader(data), 0).Decode(&p); err != nil { panic(err) } diff --git a/core/genesis_alloc.go b/core/genesis_alloc.go index ee542334b5..293a29ad7a 100644 --- a/core/genesis_alloc.go +++ b/core/genesis_alloc.go @@ -26,3 +26,4 @@ const ropstenAllocData = "\xf9\x03\xa4\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03 const rinkebyAllocData = "\xf9\x03\xb7\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xf6\x941\xb9\x8d\x14\x00{\xde\xe67)\x80\x86\x98\x8a\v\xbd1\x18E#\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" const goerliAllocData = "\xf9\x04\x06\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xe0\x94L*\xe4\x82Y5\x05\xf0\x16<\xde\xfc\a>\x81\xc6<\xdaA\a\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe0\x94\xa8\xe8\xf1G2e\x8eKQ\xe8q\x191\x05:\x8ai\xba\xf2\xb1\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe1\x94\u0665\x17\x9f\t\x1d\x85\x05\x1d<\x98'\x85\xef\xd1E\\\uc199\x8b\bE\x95\x16\x14\x01HJ\x00\x00\x00\xe1\x94\u08bdBX\xd2v\x887\xba\xa2j(\xfeq\xdc\a\x9f\x84\u01cbJG\xe3\xc1$H\xf4\xad\x00\x00\x00" const calaverasAllocData = "\xf9\x06\x14\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xf6\x94\x0e\x89\xe2\xae\xdb\x1c\xfc\u06d4$\xd4\x1a\x1f!\x8fA2s\x81r\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\x10A\xaf\xbc\xb3Y\u0568\xdcX\xc1[/\xf5\x13T\xff\x8a!}\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94#o\xf1\xe9t\x19\xae\x93\xad\x80\xca\xfb\xaa!\"\f]x\xfb}\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94`\xad\xc0\xf8\x9aA\xaf#|\xe75T\xed\xe1p\xd73\xec\x14\xe0\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94y\x9d2\x9e_X4\x19\x16|\xd7\"\x96$\x85\x92n3\x8fJ\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94|\xf5\xb7\x9b\xfe)\x1ag\xab\x02\xb3\x93\xe4V\xcc\xc4\xc2f\xf7S\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\x8a\x8e\xaf\xb1\xcfb\xbf\xbe\xb1t\x17i\xda\xe1\xa9\xddG\x99a\x92\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\x8b\xa1\xf1\tU\x1b\xd42\x800\x12dZ\xc16\xdd\xd6M\xbar\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xb0*.\xda\x1b1\u007f\xbd\x16v\x01(\x83k\n\u015bV\x0e\x9d\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xba\xdc\r\xe9\xe0yK\x04\x9b^\xa6<>\x1ei\x8a4v\xc1r\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xf00\v\ue24a\xe2r\xeb4~\x83i\xac\fv\xdfB\xc9?\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xfe;U~\x8f\xb6+\x89\xf4\x91kr\x1b\xe5\\\ub08d\xbds\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +const mumbaiAllocData = "\xf9`\xfd\xf97\"\x82\x10\x00\x80\xb97\x1b`\x80`@R4\x80\x15a\x00\x10W`\x00\x80\xfd[P`\x046\x10a\x01\xf0W`\x005`\xe0\x1c\x80c`\xc8aM\x11a\x01\x0fW\x80c\xaf&\xaa\x96\x11a\x00\xa2W\x80c\u0578D\xeb\x11a\x00qW\x80c\u0578D\xeb\x14a\x06fW\x80c\xdc\xf2y:\x14a\x06\x84W\x80c\xe3\xb7\xc9$\x14a\x06\xb6W\x80c\xf5\x9c\xf5e\x14a\x06\xd4Wa\x01\xf0V[\x80c\xaf&\xaa\x96\x14a\x05\xc7W\x80c\xb7\x1dzi\x14a\x05\xe7W\x80c\xb7\xabM\xb5\x14a\x06\x17W\x80c\xc1\xb3\xc9\x19\x14a\x066Wa\x01\xf0V[\x80cp\xbaW\a\x11a\x00\xdeW\x80cp\xbaW\a\x14a\x05+W\x80c\x98\xab+b\x14a\x05[W\x80c\x9d\x11\xb8\a\x14a\x05yW\x80c\xaeudQ\x14a\x05\xa9Wa\x01\xf0V[\x80c`\xc8aM\x14a\x04\x9cW\x80ce\xb3\xa1\xe2\x14a\x04\xbcW\x80cf3#T\x14a\x04\xdbW\x80chz\x9b\xd6\x14a\x04\xf9Wa\x01\xf0V[\x80c44s_\x11a\x01\x87W\x80cD\xd6R\x8f\x11a\x01VW\x80cD\xd6R\x8f\x14a\x03\xeeW\x80cM\xbc\x95\x9f\x14a\x04\x1eW\x80cUaO\xcc\x14a\x04=`\x00\xfd[PPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RPa\x12\xff\x91\x90\x81\x01\x90a*XV[\x90P\x92\x91PPV[`\x00```\x00\x80\x84\x81R` \x01\x90\x81R` \x01`\x00 \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01`\x00\x90[\x82\x82\x10\x15a\x13\xd9W\x83\x82\x90`\x00R` `\x00 \x90`\x03\x02\x01`@Q\x80``\x01`@R\x90\x81`\x00\x82\x01T\x81R` \x01`\x01\x82\x01T\x81R` \x01`\x02\x82\x01`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81RPP\x81R` \x01\x90`\x01\x01\x90a\x13=V[PPPP\x90P`\x00\x80\x90P`\x00\x80\x90P[\x82Q\x81\x10\x15a\x14,Wa\x14\x1d\x83\x82\x81Q\x81\x10a\x14\x02W\xfe[` \x02` \x01\x01Q` \x01Q\x83a\"\xac\x90\x91\x90c\xff\xff\xff\xff\x16V[\x91P\x80\x80`\x01\x01\x91PPa\x13\xeaV[P\x80\x92PPP\x91\x90PV[s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x81V[`\x00\x80`\x00\x80\x85\x90P`\x00`!\x80\x87Q\x81a\x14fW\xfe[\x04\x02\x90P`\x00\x81\x11\x15a\x14\u007fWa\x14|\x87a\x17\xabV[\x91P[`\x00`!\x90P[\x81\x81\x11a\x15\tW`\x00`\x01\x82\x03\x88\x01Q\x90P\x81\x88\x01Q\x95P\x80`\x00` \x81\x10a\x14\xabW\xfe[\x1a`\xf8\x1b\x94P`\x00`\xf8\x1b\x85~\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x16\x14\x15a\x14\xf0Wa\x14\u9185a\x12\x86V[\x93Pa\x14\xfdV[a\x14\xfa\x84\x87a\x12\x86V[\x93P[P`!\x81\x01\x90Pa\x14\x86V[P\x87\x82\x14\x94PPPPP\x93\x92PPPV[`@Qa\x15&\x90a2TV[`@Q\x80\x91\x03\x90 \x81V[`\x00\x80`\x00\x90P`\x00\x80\x90P`\x00\x80\x90P[\x84Q\x81g\xff\xff\xff\xff\xff\xff\xff\xff\x16\x10\x15a\x16\fW``a\x15n\x86\x83g\xff\xff\xff\xff\xff\xff\xff\xff\x16`Aa$jV[\x90P`\x00a\x15\x85\x82\x89a$\xf6\x90\x91\x90c\xff\xff\xff\xff\x16V[\x90Pa\x15\x8fa(2V[a\x15\x99\x8a\x83a\x16\x19V[\x90Pa\x15\xa5\x8a\x83a\x11*V[\x80\x15a\x15\xdcWP\x84s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x11[\x15a\x15\xfeW\x81\x94Pa\x15\xfb\x81` \x01Q\x87a\"\xac\x90\x91\x90c\xff\xff\xff\xff\x16V[\x95P[PPP`A\x81\x01\x90Pa\x15CV[P\x81\x92PPP\x93\x92PPPV[a\x16!a(2V[```\x00\x80\x85\x81R` \x01\x90\x81R` \x01`\x00 \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01`\x00\x90[\x82\x82\x10\x15a\x16\xf1W\x83\x82\x90`\x00R` `\x00 \x90`\x03\x02\x01`@Q\x80``\x01`@R\x90\x81`\x00\x82\x01T\x81R` \x01`\x01\x82\x01T\x81R` \x01`\x02\x82\x01`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81RPP\x81R` \x01\x90`\x01\x01\x90a\x16UV[PPPP\x90P`\x00\x80\x90P[\x81Q\x81\x10\x15a\x17yW\x83s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x82\x82\x81Q\x81\x10a\x17)W\xfe[` \x02` \x01\x01Q`@\x01Qs\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x14\x15a\x17lW\x81\x81\x81Q\x81\x10a\x17]W\xfe[` \x02` \x01\x01Q\x92Pa\x17yV[\x80\x80`\x01\x01\x91PPa\x16\xfdV[PP\x92\x91PPV[`\x00a\x17\x8cCa\x1d\xb1V[\x90P\x90V[`\x00a\x17\xa4a\x17\x9ea\x17\x81V[\x83a\x11*V[\x90P\x91\x90PV[`\x00`\x02`\x00`\xf8\x1b\x83`@Q` \x01a\x17\u0192\x91\x90a1\xaaV[`@Q` \x81\x83\x03\x03\x81R\x90`@R`@Qa\x17\u2450a2\x13V[` `@Q\x80\x83\x03\x81\x85Z\xfa\x15\x80\x15a\x17\xffW=`\x00\x80>=`\x00\xfd[PPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RPa\x18\"\x91\x90\x81\x01\x90a*XV[\x90P\x91\x90PV[`\x00\x80`\x00\x80a\x18J`\x01a\x18=`\x00\xfd[PPP` `@Q\x03Q\x90P`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x14\x15a%\xf2W`\x00\x80\xfd[\x80\x94PPPPP[\x92\x91PPV[`\x00\x80\x82`\x00\x01Q\x14\x15a&\x17W`\x00\x90Pa&IV[`\x00\x80\x83` \x01Q\x90P\x80Q`\x00\x1a\x91P`\xc0`\xff\x16\x82`\xff\x16\x10\x15a&BW`\x00\x92PPPa&IV[`\x01\x92PPP[\x91\x90PV[`\x00\x80\x82`\x00\x01Q\x14\x15a&eW`\x00\x90Pa&\xbaV[`\x00\x80\x90P`\x00a&y\x84` \x01Qa&\xbfV[\x84` \x01Q\x01\x90P`\x00\x84`\x00\x01Q\x85` \x01Q\x01\x90P[\x80\x82\x10\x15a&\xb3Wa&\xa2\x82a'HV[\x82\x01\x91P\x82\x80`\x01\x01\x93PPa&\x91V[\x82\x93PPPP[\x91\x90PV[`\x00\x80\x82Q`\x00\x1a\x90P`\x80`\xff\x16\x81\x10\x15a&\xdfW`\x00\x91PPa'CV[`\xb8`\xff\x16\x81\x10\x80a'\x04WP`\xc0`\xff\x16\x81\x10\x15\x80\x15a'\x03WP`\xf8`\xff\x16\x81\x10[[\x15a'\x13W`\x01\x91PPa'CV[`\xc0`\xff\x16\x81\x10\x15a'3W`\x01\x80`\xb8\x03`\xff\x16\x82\x03\x01\x91PPa'CV[`\x01\x80`\xf8\x03`\xff\x16\x82\x03\x01\x91PP[\x91\x90PV[`\x00\x80`\x00\x83Q`\x00\x1a\x90P`\x80`\xff\x16\x81\x10\x15a'iW`\x01\x91Pa'\xf6V[`\xb8`\xff\x16\x81\x10\x15a'\x86W`\x01`\x80`\xff\x16\x82\x03\x01\x91Pa'\xf5V[`\xc0`\xff\x16\x81\x10\x15a'\xb6W`\xb7\x81\x03`\x01\x85\x01\x94P\x80` \x03a\x01\x00\n\x85Q\x04`\x01\x82\x01\x81\x01\x93PPPa'\xf4V[`\xf8`\xff\x16\x81\x10\x15a'\xd3W`\x01`\xc0`\xff\x16\x82\x03\x01\x91Pa'\xf3V[`\xf7\x81\x03`\x01\x85\x01\x94P\x80` \x03a\x01\x00\n\x85Q\x04`\x01\x82\x01\x81\x01\x93PPP[[[[\x81\x92PPP\x91\x90PV[\x81T\x81\x83U\x81\x81\x11\x15a(-W`\x03\x02\x81`\x03\x02\x83`\x00R` `\x00 \x91\x82\x01\x91\x01a(,\x91\x90a(\xbeV[[PPPV[`@Q\x80``\x01`@R\x80`\x00\x81R` \x01`\x00\x81R` \x01`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81RP\x90V[`@Q\x80``\x01`@R\x80`\x00\x81R` \x01`\x00\x81R` \x01`\x00\x81RP\x90V[`@Q\x80`@\x01`@R\x80`\x00\x81R` \x01`\x00\x81RP\x90V[`@Q\x80`@\x01`@R\x80`\x00\x81R` \x01`\x00\x81RP\x90V[a)\x11\x91\x90[\x80\x82\x11\x15a)\rW`\x00\x80\x82\x01`\x00\x90U`\x01\x82\x01`\x00\x90U`\x02\x82\x01`\x00a\x01\x00\n\x81T\x90s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02\x19\x16\x90UP`\x03\x01a(\xc4V[P\x90V[\x90V[`\x00\x815\x90Pa)#\x81a6\x93V[\x92\x91PPV[`\x00\x815\x90Pa)8\x81a6\xaaV[\x92\x91PPV[`\x00\x81Q\x90Pa)M\x81a6\xaaV[\x92\x91PPV[`\x00\x80\x83`\x1f\x84\x01\x12a)eW`\x00\x80\xfd[\x825\x90Pg\xff\xff\xff\xff\xff\xff\xff\xff\x81\x11\x15a)~W`\x00\x80\xfd[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15a)\x96W`\x00\x80\xfd[\x92P\x92\x90PV[`\x00\x82`\x1f\x83\x01\x12a)\xaeW`\x00\x80\xfd[\x815a)\xc1a)\xbc\x82a4\xe2V[a4\xb5V[\x91P\x80\x82R` \x83\x01` \x83\x01\x85\x83\x83\x01\x11\x15a)\xddW`\x00\x80\xfd[a)\u80c2\x84a6=V[PPP\x92\x91PPV[`\x00\x815\x90Pa*\x00\x81a6\xc1V[\x92\x91PPV[`\x00` \x82\x84\x03\x12\x15a*\x18W`\x00\x80\xfd[`\x00a*&\x84\x82\x85\x01a)\x14V[\x91PP\x92\x91PPV[`\x00` \x82\x84\x03\x12\x15a*AW`\x00\x80\xfd[`\x00a*O\x84\x82\x85\x01a))V[\x91PP\x92\x91PPV[`\x00` \x82\x84\x03\x12\x15a*jW`\x00\x80\xfd[`\x00a*x\x84\x82\x85\x01a)>V[\x91PP\x92\x91PPV[`\x00\x80`@\x83\x85\x03\x12\x15a*\x94W`\x00\x80\xfd[`\x00a*\xa2\x85\x82\x86\x01a))V[\x92PP` a*\xb3\x85\x82\x86\x01a))V[\x91PP\x92P\x92\x90PV[`\x00\x80`\x00``\x84\x86\x03\x12\x15a*\xd2W`\x00\x80\xfd[`\x00a*\xe0\x86\x82\x87\x01a))V[\x93PP` a*\U00046087\x01a))V[\x92PP`@\x84\x015g\xff\xff\xff\xff\xff\xff\xff\xff\x81\x11\x15a+\x0eW`\x00\x80\xfd[a+\x1a\x86\x82\x87\x01a)\x9dV[\x91PP\x92P\x92P\x92V[`\x00` \x82\x84\x03\x12\x15a+6W`\x00\x80\xfd[`\x00a+D\x84\x82\x85\x01a)\xf1V[\x91PP\x92\x91PPV[`\x00\x80`@\x83\x85\x03\x12\x15a+`W`\x00\x80\xfd[`\x00a+n\x85\x82\x86\x01a)\xf1V[\x92PP` a+\u007f\x85\x82\x86\x01a)\x14V[\x91PP\x92P\x92\x90PV[`\x00\x80`\x00``\x84\x86\x03\x12\x15a+\x9eW`\x00\x80\xfd[`\x00a+\xac\x86\x82\x87\x01a)\xf1V[\x93PP` a+\xbd\x86\x82\x87\x01a))V[\x92PP`@\x84\x015g\xff\xff\xff\xff\xff\xff\xff\xff\x81\x11\x15a+\xdaW`\x00\x80\xfd[a+\u6182\x87\x01a)\x9dV[\x91PP\x92P\x92P\x92V[`\x00\x80`@\x83\x85\x03\x12\x15a,\x03W`\x00\x80\xfd[`\x00a,\x11\x85\x82\x86\x01a)\xf1V[\x92PP` a,\"\x85\x82\x86\x01a)\xf1V[\x91PP\x92P\x92\x90PV[`\x00\x80`\x00\x80`\x00\x80`\x00`\xa0\x88\x8a\x03\x12\x15a,GW`\x00\x80\xfd[`\x00a,U\x8a\x82\x8b\x01a)\xf1V[\x97PP` a,f\x8a\x82\x8b\x01a)\xf1V[\x96PP`@a,w\x8a\x82\x8b\x01a)\xf1V[\x95PP``\x88\x015g\xff\xff\xff\xff\xff\xff\xff\xff\x81\x11\x15a,\x94W`\x00\x80\xfd[a,\xa0\x8a\x82\x8b\x01a)SV[\x94P\x94PP`\x80\x88\x015g\xff\xff\xff\xff\xff\xff\xff\xff\x81\x11\x15a,\xbfW`\x00\x80\xfd[a,\u02ca\x82\x8b\x01a)SV[\x92P\x92PP\x92\x95\x98\x91\x94\x97P\x92\x95PV[`\x00a,\u80c3a-\fV[` \x83\x01\x90P\x92\x91PPV[`\x00a-\x00\x83\x83a1}V[` \x83\x01\x90P\x92\x91PPV[a-\x15\x81a5\xb2V[\x82RPPV[a-$\x81a5\xb2V[\x82RPPV[`\x00a-5\x82a5.V[a-?\x81\x85a5iV[\x93Pa-J\x83a5\x0eV[\x80`\x00[\x83\x81\x10\x15a-{W\x81Qa-b\x88\x82a,\xdcV[\x97Pa-m\x83a5OV[\x92PP`\x01\x81\x01\x90Pa-NV[P\x85\x93PPPP\x92\x91PPV[`\x00a-\x93\x82a59V[a-\x9d\x81\x85a5zV[\x93Pa-\xa8\x83a5\x1eV[\x80`\x00[\x83\x81\x10\x15a-\xd9W\x81Qa-\xc0\x88\x82a,\xf4V[\x97Pa-\u02c3a5\\V[\x92PP`\x01\x81\x01\x90Pa-\xacV[P\x85\x93PPPP\x92\x91PPV[a-\xef\x81a5\xc4V[\x82RPPV[a.\x06a.\x01\x82a5\xd0V[a6\u007fV[\x82RPPV[a.\x15\x81a5\xfcV[\x82RPPV[a.,a.'\x82a5\xfcV[a6\x89V[\x82RPPV[`\x00a.=\x82a5DV[a.G\x81\x85a5\x8bV[\x93Pa.W\x81\x85` \x86\x01a6LV[\x80\x84\x01\x91PP\x92\x91PPV[`\x00a.p`\x04\x83a5\xa7V[\x91P\u007fvote\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x83\x01R`\x04\x82\x01\x90P\x91\x90PV[`\x00a.\xb0`-\x83a5\x96V[\x91P\u007fStart block must be greater than`\x00\x83\x01R\u007f current span\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00` \x83\x01R`@\x82\x01\x90P\x91\x90PV[`\x00a/\x16`\x0f\x83a5\x96V[\x91P\u007fInvalid span id\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x83\x01R` \x82\x01\x90P\x91\x90PV[`\x00a/V`\x13\x83a5\x96V[\x91P\u007fSpan already exists\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x83\x01R` \x82\x01\x90P\x91\x90PV[`\x00a/\x96`E\x83a5\x96V[\x91P\u007fDifference between start and end`\x00\x83\x01R\u007f block must be in multiples of s` \x83\x01R\u007fprint\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`@\x83\x01R``\x82\x01\x90P\x91\x90PV[`\x00a0\"`*\x83a5\x96V[\x91P\u007fEnd block must be greater than s`\x00\x83\x01R\u007ftart block\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00` \x83\x01R`@\x82\x01\x90P\x91\x90PV[`\x00a0\x88`\x12\x83a5\x96V[\x91P\u007fNot System Addess!\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x83\x01R` \x82\x01\x90P\x91\x90PV[`\x00a0\xc8`\x05\x83a5\xa7V[\x91P\u007f80001\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x83\x01R`\x05\x82\x01\x90P\x91\x90PV[`\x00a1\b`\x0e\x83a5\xa7V[\x91P\u007fheimdall-80001\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x83\x01R`\x0e\x82\x01\x90P\x91\x90PV[``\x82\x01`\x00\x82\x01Qa1Q`\x00\x85\x01\x82a1}V[P` \x82\x01Qa1d` \x85\x01\x82a1}V[P`@\x82\x01Qa1w`@\x85\x01\x82a-\fV[PPPPV[a1\x86\x81a6&V[\x82RPPV[a1\x95\x81a6&V[\x82RPPV[a1\xa4\x81a60V[\x82RPPV[`\x00a1\xb6\x82\x85a-\xf5V[`\x01\x82\x01\x91Pa1\u0182\x84a.\x1bV[` \x82\x01\x91P\x81\x90P\x93\x92PPPV[`\x00a1\u2086a-\xf5V[`\x01\x82\x01\x91Pa1\xf2\x82\x85a.\x1bV[` \x82\x01\x91Pa2\x02\x82\x84a.\x1bV[` \x82\x01\x91P\x81\x90P\x94\x93PPPPV[`\x00a2\x1f\x82\x84a.2V[\x91P\x81\x90P\x92\x91PPV[`\x00a25\x82a.cV[\x91P\x81\x90P\x91\x90PV[`\x00a2J\x82a0\xbbV[\x91P\x81\x90P\x91\x90PV[`\x00a2_\x82a0\xfbV[\x91P\x81\x90P\x91\x90PV[`\x00` \x82\x01\x90Pa2~`\x00\x83\x01\x84a-\x1bV[\x92\x91PPV[`\x00`@\x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra2\x9e\x81\x85a-*V[\x90P\x81\x81\x03` \x83\x01Ra2\xb2\x81\x84a-\x88V[\x90P\x93\x92PPPV[`\x00` \x82\x01\x90Pa2\xd0`\x00\x83\x01\x84a-\xe6V[\x92\x91PPV[`\x00` \x82\x01\x90Pa2\xeb`\x00\x83\x01\x84a.\fV[\x92\x91PPV[`\x00`\x80\x82\x01\x90Pa3\x06`\x00\x83\x01\x87a.\fV[a3\x13` \x83\x01\x86a1\x9bV[a3 `@\x83\x01\x85a.\fV[a3-``\x83\x01\x84a.\fV[\x95\x94PPPPPV[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra3O\x81a.\xa3V[\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra3o\x81a/\tV[\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra3\x8f\x81a/IV[\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra3\xaf\x81a/\x89V[\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra3\u03c1a0\x15V[\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra3\xef\x81a0{V[\x90P\x91\x90PV[`\x00``\x82\x01\x90Pa4\v`\x00\x83\x01\x84a1;V[\x92\x91PPV[`\x00` \x82\x01\x90Pa4&`\x00\x83\x01\x84a1\x8cV[\x92\x91PPV[`\x00``\x82\x01\x90Pa4A`\x00\x83\x01\x86a1\x8cV[a4N` \x83\x01\x85a1\x8cV[a4[`@\x83\x01\x84a-\x1bV[\x94\x93PPPPV[`\x00``\x82\x01\x90Pa4x`\x00\x83\x01\x86a1\x8cV[a4\x85` \x83\x01\x85a1\x8cV[a4\x92`@\x83\x01\x84a1\x8cV[\x94\x93PPPPV[`\x00` \x82\x01\x90Pa4\xaf`\x00\x83\x01\x84a1\x9bV[\x92\x91PPV[`\x00`@Q\x90P\x81\x81\x01\x81\x81\x10g\xff\xff\xff\xff\xff\xff\xff\xff\x82\x11\x17\x15a4\xd8W`\x00\x80\xfd[\x80`@RP\x91\x90PV[`\x00g\xff\xff\xff\xff\xff\xff\xff\xff\x82\x11\x15a4\xf9W`\x00\x80\xfd[`\x1f\x19`\x1f\x83\x01\x16\x90P` \x81\x01\x90P\x91\x90PV[`\x00\x81\x90P` \x82\x01\x90P\x91\x90PV[`\x00\x81\x90P` \x82\x01\x90P\x91\x90PV[`\x00\x81Q\x90P\x91\x90PV[`\x00\x81Q\x90P\x91\x90PV[`\x00\x81Q\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x91\x90PV[`\x00\x82\x82R` \x82\x01\x90P\x92\x91PPV[`\x00\x82\x82R` \x82\x01\x90P\x92\x91PPV[`\x00\x81\x90P\x92\x91PPV[`\x00\x82\x82R` \x82\x01\x90P\x92\x91PPV[`\x00\x81\x90P\x92\x91PPV[`\x00a5\xbd\x82a6\x06V[\x90P\x91\x90PV[`\x00\x81\x15\x15\x90P\x91\x90PV[`\x00\u007f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x16\x90P\x91\x90PV[`\x00\x81\x90P\x91\x90PV[`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x82\x16\x90P\x91\x90PV[`\x00\x81\x90P\x91\x90PV[`\x00`\xff\x82\x16\x90P\x91\x90PV[\x82\x81\x837`\x00\x83\x83\x01RPPPV[`\x00[\x83\x81\x10\x15a6jW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa6OV[\x83\x81\x11\x15a6yW`\x00\x84\x84\x01R[PPPPV[`\x00\x81\x90P\x91\x90PV[`\x00\x81\x90P\x91\x90PV[a6\x9c\x81a5\xb2V[\x81\x14a6\xa7W`\x00\x80\xfd[PV[a6\xb3\x81a5\xfcV[\x81\x14a6\xbeW`\x00\x80\xfd[PV[a6\u0281a6&V[\x81\x14a6\xd5W`\x00\x80\xfd[PV\xfe\xa3ebzzr1X \x8fR\xee\ac\x0f\xfeR<\u01ad>\x15\xf47\xf9s\xdc\xfa6r\x9c\u0597\xf9\xb0\xfcJ\x14ZH\xf0lexperimental\xf5dsolcC\x00\x05\v\x00@\xf9\t\xb3\x82\x10\x01\x80\xb9\t\xac`\x80`@R4\x80\x15a\x00\x10W`\x00\x80\xfd[P`\x046\x10a\x00AW`\x005`\xe0\x1c\x80c\x19IJ\x17\x14a\x00FW\x80c44s_\x14a\x00\xe1W\x80cT\a\xcag\x14a\x01+W[`\x00\x80\xfd[a\x00\xc7`\x04\x806\x03`@\x81\x10\x15a\x00\\W`\x00\x80\xfd[\x81\x01\x90\x80\x805\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90d\x01\x00\x00\x00\x00\x81\x11\x15a\x00\x83W`\x00\x80\xfd[\x82\x01\x83` \x82\x01\x11\x15a\x00\x95W`\x00\x80\xfd[\x805\x90` \x01\x91\x84`\x01\x83\x02\x84\x01\x11d\x01\x00\x00\x00\x00\x83\x11\x17\x15a\x00\xb7W`\x00\x80\xfd[\x90\x91\x92\x93\x91\x92\x93\x90PPPa\x01IV[`@Q\x80\x82\x15\x15\x15\x15\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[a\x00\xe9a\x04zV[`@Q\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[a\x013a\x04\x92V[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfes\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x163s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x14a\x02\x00W`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`\x12\x81R` \x01\x80\u007fNot System Addess!\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP` \x01\x91PP`@Q\x80\x91\x03\x90\xfd[``a\x02Wa\x02R\x85\x85\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\x00\x81\x84\x01R`\x1f\x19`\x1f\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa\x04\x98V[a\x04\xc6V[\x90P`\x00a\x02x\x82`\x00\x81Q\x81\x10a\x02kW\xfe[` \x02` \x01\x01Qa\x05\xa3V[\x90P\x80`\x01`\x00T\x01\x14a\x02\xf4W`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`\x1b\x81R` \x01\x80\u007fStateIds are not sequential\x00\x00\x00\x00\x00\x81RP` \x01\x91PP`@Q\x80\x91\x03\x90\xfd[`\x00\x80\x81T\x80\x92\x91\x90`\x01\x01\x91\x90PUP`\x00a\x03$\x83`\x01\x81Q\x81\x10a\x03\x17W\xfe[` \x02` \x01\x01Qa\x06\x14V[\x90P``a\x03E\x84`\x02\x81Q\x81\x10a\x038W\xfe[` \x02` \x01\x01Qa\x067V[\x90Pa\x03P\x82a\x06\xc3V[\x15a\x04oW`\x00bLK@\x90P``\x84\x83`@Q`$\x01\x80\x83\x81R` \x01\x80` \x01\x82\x81\x03\x82R\x83\x81\x81Q\x81R` \x01\x91P\x80Q\x90` \x01\x90\x80\x83\x83`\x00[\x83\x81\x10\x15a\x03\xaaW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa\x03\x8fV[PPPP\x90P\x90\x81\x01\x90`\x1f\x16\x80\x15a\x03\xd7W\x80\x82\x03\x80Q`\x01\x83` \x03a\x01\x00\n\x03\x19\x16\x81R` \x01\x91P[P\x93PPPP`@Q` \x81\x83\x03\x03\x81R\x90`@R\u007f&\xc5;\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00{\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x16` \x82\x01\x80Q{\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x81\x83\x16\x17\x83RPPPP\x90P`\x00\x80\x82Q` \x84\x01`\x00\x88\x87\xf1\x96PPP[PPPP\x93\x92PPPV[s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x81V[`\x00T\x81V[a\x04\xa0a\tCV[`\x00` \x83\x01\x90P`@Q\x80`@\x01`@R\x80\x84Q\x81R` \x01\x82\x81RP\x91PP\x91\x90PV[``a\x04\u0442a\x06\xdcV[a\x04\xdaW`\x00\x80\xfd[`\x00a\x04\xe5\x83a\a*V[\x90P``\x81`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x05#W\x81` \x01[a\x05\x10a\t]V[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x05\bW\x90P[P\x90P`\x00a\x055\x85` \x01Qa\a\x9bV[\x85` \x01Q\x01\x90P`\x00\x80`\x00\x90P[\x84\x81\x10\x15a\x05\x96Wa\x05V\x83a\b$V[\x91P`@Q\x80`@\x01`@R\x80\x83\x81R` \x01\x84\x81RP\x84\x82\x81Q\x81\x10a\x05yW\xfe[` \x02` \x01\x01\x81\x90RP\x81\x83\x01\x92P\x80\x80`\x01\x01\x91PPa\x05EV[P\x82\x94PPPPP\x91\x90PV[`\x00\x80\x82`\x00\x01Q\x11\x80\x15a\x05\xbdWP`!\x82`\x00\x01Q\x11\x15[a\x05\xc6W`\x00\x80\xfd[`\x00a\x05\u0543` \x01Qa\a\x9bV[\x90P`\x00\x81\x84`\x00\x01Q\x03\x90P`\x00\x80\x83\x86` \x01Q\x01\x90P\x80Q\x91P` \x83\x10\x15a\x06\bW\x82` \x03a\x01\x00\n\x82\x04\x91P[\x81\x94PPPPP\x91\x90PV[`\x00`\x15\x82`\x00\x01Q\x14a\x06'W`\x00\x80\xfd[a\x060\x82a\x05\xa3V[\x90P\x91\x90PV[```\x00\x82`\x00\x01Q\x11a\x06JW`\x00\x80\xfd[`\x00a\x06Y\x83` \x01Qa\a\x9bV[\x90P`\x00\x81\x84`\x00\x01Q\x03\x90P``\x81`@Q\x90\x80\x82R\x80`\x1f\x01`\x1f\x19\x16` \x01\x82\x01`@R\x80\x15a\x06\x9bW\x81` \x01`\x01\x82\x02\x808\x839\x80\x82\x01\x91PP\x90P[P\x90P`\x00\x81` \x01\x90Pa\x06\xb7\x84\x87` \x01Q\x01\x82\x85a\b\xdcV[\x81\x94PPPPP\x91\x90PV[`\x00\x80\x82;\x90P`\x00\x81c\xff\xff\xff\xff\x16\x11\x91PP\x91\x90PV[`\x00\x80\x82`\x00\x01Q\x14\x15a\x06\xf3W`\x00\x90Pa\a%V[`\x00\x80\x83` \x01Q\x90P\x80Q`\x00\x1a\x91P`\xc0`\xff\x16\x82`\xff\x16\x10\x15a\a\x1eW`\x00\x92PPPa\a%V[`\x01\x92PPP[\x91\x90PV[`\x00\x80\x82`\x00\x01Q\x14\x15a\aAW`\x00\x90Pa\a\x96V[`\x00\x80\x90P`\x00a\aU\x84` \x01Qa\a\x9bV[\x84` \x01Q\x01\x90P`\x00\x84`\x00\x01Q\x85` \x01Q\x01\x90P[\x80\x82\x10\x15a\a\x8fWa\a~\x82a\b$V[\x82\x01\x91P\x82\x80`\x01\x01\x93PPa\amV[\x82\x93PPPP[\x91\x90PV[`\x00\x80\x82Q`\x00\x1a\x90P`\x80`\xff\x16\x81\x10\x15a\a\xbbW`\x00\x91PPa\b\x1fV[`\xb8`\xff\x16\x81\x10\x80a\a\xe0WP`\xc0`\xff\x16\x81\x10\x15\x80\x15a\a\xdfWP`\xf8`\xff\x16\x81\x10[[\x15a\a\xefW`\x01\x91PPa\b\x1fV[`\xc0`\xff\x16\x81\x10\x15a\b\x0fW`\x01\x80`\xb8\x03`\xff\x16\x82\x03\x01\x91PPa\b\x1fV[`\x01\x80`\xf8\x03`\xff\x16\x82\x03\x01\x91PP[\x91\x90PV[`\x00\x80`\x00\x83Q`\x00\x1a\x90P`\x80`\xff\x16\x81\x10\x15a\bEW`\x01\x91Pa\b\xd2V[`\xb8`\xff\x16\x81\x10\x15a\bbW`\x01`\x80`\xff\x16\x82\x03\x01\x91Pa\b\xd1V[`\xc0`\xff\x16\x81\x10\x15a\b\x92W`\xb7\x81\x03`\x01\x85\x01\x94P\x80` \x03a\x01\x00\n\x85Q\x04`\x01\x82\x01\x81\x01\x93PPPa\b\xd0V[`\xf8`\xff\x16\x81\x10\x15a\b\xafW`\x01`\xc0`\xff\x16\x82\x03\x01\x91Pa\b\xcfV[`\xf7\x81\x03`\x01\x85\x01\x94P\x80` \x03a\x01\x00\n\x85Q\x04`\x01\x82\x01\x81\x01\x93PPP[[[[\x81\x92PPP\x91\x90PV[`\x00\x81\x14\x15a\b\xeaWa\t>V[[` `\xff\x16\x81\x10a\t\x1aW\x82Q\x82R` `\xff\x16\x83\x01\x92P` `\xff\x16\x82\x01\x91P` `\xff\x16\x81\x03\x90Pa\b\xebV[`\x00`\x01\x82` `\xff\x16\x03a\x01\x00\n\x03\x90P\x80\x19\x84Q\x16\x81\x84Q\x16\x81\x81\x17\x85RPPP[PPPV[`@Q\x80`@\x01`@R\x80`\x00\x81R` \x01`\x00\x81RP\x90V[`@Q\x80`@\x01`@R\x80`\x00\x81R` \x01`\x00\x81RP\x90V\xfe\xa2ebzzr1X \x83\xfb\xda\xcbv\xf3+A\x12\xd0\xf7\u06daYi7\x92X$y\x8a\x00&\xba\x0222#\x90\xb5&7dsolcC\x00\x05\v\x002\xf9\x1fz\x82\x10\x10\x8c O\xcdO14\x9d\x83\xb6\xe0\x00\x00\xb9\x1fg`\x80`@R`\x046\x10a\x01\x9cW`\x005`\xe0\x1c\x80cw\xd3.\x94\x11a\x00\xecW\x80c\xac\xd0l\xb3\x11a\x00\x8aW\x80c\xe3\x06\xf7y\x11a\x00dW\x80c\xe3\x06\xf7y\x14a\n{W\x80c\xe6\x14\xd0\xd6\x14a\n\xa6W\x80c\xf2\xfd\xe3\x8b\x14a\n\xd1W\x80c\xfc\fTj\x14a\v\"Wa\x01\x9cV[\x80c\xac\xd0l\xb3\x14a\tzW\x80c\xb7\x89T<\x14a\t\xcdW\x80c\xccy\xf9{\x14a\nPWa\x01\x9cV[\x80c\x90%\xe6L\x11a\x00\xc6W\x80c\x90%\xe6L\x14a\a\xc9W\x80c\x95\u061bA\x14a\bYW\x80c\xa9\x05\x9c\xbb\x14a\b\xe9W\x80c\xab\xce\xeb\xa2\x14a\tOWa\x01\x9cV[\x80cw\xd3.\x94\x14a\x061W\x80c\x8d\xa5\xcb[\x14a\aCW\x80c\x8f2\u055b\x14a\a\x9aWa\x01\x9cV[\x80cG\xe7\xef$\x11a\x01YW\x80cp\x19\xd4\x1a\x11a\x013W\x80cp\x19\xd4\x1a\x14a\x053W\x80cp\xa0\x821\x14a\x05\x8aW\x80cqP\x18\xa6\x14a\x05\xefW\x80cw\x12\x82\xf6\x14a\x06\x06Wa\x01\x9cV[\x80cG\xe7\xef$\x14a\x04\x10W\x80cH\\\xc9U\x14a\x04kW\x80c`\xf9j\x8f\x14a\x04\xdcWa\x01\x9cV[\x80c\x06\xfd\xde\x03\x14a\x01\xa1W\x80c\x14\x99\u0152\x14a\x021W\x80c\x18\x16\r\xdd\x14a\x02\x82W\x80c\x19\xd2}\x9c\x14a\x02\xadW\x80c.\x1a}M\x14a\x03\xb1W\x80c1<\xe5g\x14a\x03\xdfW[`\x00\x80\xfd[4\x80\x15a\x01\xadW`\x00\x80\xfd[Pa\x01\xb6a\vyV[`@Q\x80\x80` \x01\x82\x81\x03\x82R\x83\x81\x81Q\x81R` \x01\x91P\x80Q\x90` \x01\x90\x80\x83\x83`\x00[\x83\x81\x10\x15a\x01\xf6W\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa\x01\xdbV[PPPP\x90P\x90\x81\x01\x90`\x1f\x16\x80\x15a\x02#W\x80\x82\x03\x80Q`\x01\x83` \x03a\x01\x00\n\x03\x19\x16\x81R` \x01\x91P[P\x92PPP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x02=W`\x00\x80\xfd[Pa\x02\x80`\x04\x806\x03` \x81\x10\x15a\x02TW`\x00\x80\xfd[\x81\x01\x90\x80\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90PPPa\v\xb6V[\x00[4\x80\x15a\x02\x8eW`\x00\x80\xfd[Pa\x02\x97a\f$V[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x02\xb9W`\x00\x80\xfd[Pa\x03o`\x04\x806\x03`\xa0\x81\x10\x15a\x02\xd0W`\x00\x80\xfd[\x81\x01\x90\x80\x805\x90` \x01\x90d\x01\x00\x00\x00\x00\x81\x11\x15a\x02\xedW`\x00\x80\xfd[\x82\x01\x83` \x82\x01\x11\x15a\x02\xffW`\x00\x80\xfd[\x805\x90` \x01\x91\x84`\x01\x83\x02\x84\x01\x11d\x01\x00\x00\x00\x00\x83\x11\x17\x15a\x03!W`\x00\x80\xfd[\x90\x91\x92\x93\x91\x92\x93\x90\x805\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90\x92\x91\x90\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90PPPa\f:V[`@Q\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[a\x03\xdd`\x04\x806\x03` \x81\x10\x15a\x03\xc7W`\x00\x80\xfd[\x81\x01\x90\x80\x805\x90` \x01\x90\x92\x91\x90PPPa\x0e\x06V[\x00[4\x80\x15a\x03\xebW`\x00\x80\xfd[Pa\x03\xf4a\x0fXV[`@Q\x80\x82`\xff\x16`\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x04\x1cW`\x00\x80\xfd[Pa\x04i`\x04\x806\x03`@\x81\x10\x15a\x043W`\x00\x80\xfd[\x81\x01\x90\x80\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90\x92\x91\x90PPPa\x0faV[\x00[4\x80\x15a\x04wW`\x00\x80\xfd[Pa\x04\xda`\x04\x806\x03`@\x81\x10\x15a\x04\x8eW`\x00\x80\xfd[\x81\x01\x90\x80\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90PPPa\x11\x1dV[\x00[4\x80\x15a\x04\xe8W`\x00\x80\xfd[Pa\x04\xf1a\x11\xecV[`@Q\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x05?W`\x00\x80\xfd[Pa\x05Ha\x12\x12V[`@Q\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x05\x96W`\x00\x80\xfd[Pa\x05\xd9`\x04\x806\x03` \x81\x10\x15a\x05\xadW`\x00\x80\xfd[\x81\x01\x90\x80\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90PPPa\x128V[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x05\xfbW`\x00\x80\xfd[Pa\x06\x04a\x12YV[\x00[4\x80\x15a\x06\x12W`\x00\x80\xfd[Pa\x06\x1ba\x13)V[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x06=W`\x00\x80\xfd[Pa\a\x01`\x04\x806\x03`@\x81\x10\x15a\x06TW`\x00\x80\xfd[\x81\x01\x90\x80\x805\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90d\x01\x00\x00\x00\x00\x81\x11\x15a\x06{W`\x00\x80\xfd[\x82\x01\x83` \x82\x01\x11\x15a\x06\x8dW`\x00\x80\xfd[\x805\x90` \x01\x91\x84`\x01\x83\x02\x84\x01\x11d\x01\x00\x00\x00\x00\x83\x11\x17\x15a\x06\xafW`\x00\x80\xfd[\x91\x90\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\x00\x81\x84\x01R`\x1f\x19`\x1f\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x91\x92\x91\x92\x90PPPa\x13/V[`@Q\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\aOW`\x00\x80\xfd[Pa\aXa\x14\xb4V[`@Q\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\a\xa6W`\x00\x80\xfd[Pa\a\xafa\x14\xddV[`@Q\x80\x82\x15\x15\x15\x15\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\a\xd5W`\x00\x80\xfd[Pa\a\xdea\x154V[`@Q\x80\x80` \x01\x82\x81\x03\x82R\x83\x81\x81Q\x81R` \x01\x91P\x80Q\x90` \x01\x90\x80\x83\x83`\x00[\x83\x81\x10\x15a\b\x1eW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa\b\x03V[PPPP\x90P\x90\x81\x01\x90`\x1f\x16\x80\x15a\bKW\x80\x82\x03\x80Q`\x01\x83` \x03a\x01\x00\n\x03\x19\x16\x81R` \x01\x91P[P\x92PPP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\beW`\x00\x80\xfd[Pa\bna\x15mV[`@Q\x80\x80` \x01\x82\x81\x03\x82R\x83\x81\x81Q\x81R` \x01\x91P\x80Q\x90` \x01\x90\x80\x83\x83`\x00[\x83\x81\x10\x15a\b\xaeW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa\b\x93V[PPPP\x90P\x90\x81\x01\x90`\x1f\x16\x80\x15a\b\xdbW\x80\x82\x03\x80Q`\x01\x83` \x03a\x01\x00\n\x03\x19\x16\x81R` \x01\x91P[P\x92PPP`@Q\x80\x91\x03\x90\xf3[a\t5`\x04\x806\x03`@\x81\x10\x15a\b\xffW`\x00\x80\xfd[\x81\x01\x90\x80\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90\x92\x91\x90PPPa\x15\xaaV[`@Q\x80\x82\x15\x15\x15\x15\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\t[W`\x00\x80\xfd[Pa\tda\x15\xd0V[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\t\x86W`\x00\x80\xfd[Pa\t\xb3`\x04\x806\x03` \x81\x10\x15a\t\x9dW`\x00\x80\xfd[\x81\x01\x90\x80\x805\x90` \x01\x90\x92\x91\x90PPPa\x16]V[`@Q\x80\x82\x15\x15\x15\x15\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\t\xd9W`\x00\x80\xfd[Pa\n:`\x04\x806\x03`\x80\x81\x10\x15a\t\xf0W`\x00\x80\xfd[\x81\x01\x90\x80\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90\x92\x91\x90PPPa\x16}V[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\n\\W`\x00\x80\xfd[Pa\nea\x16\x9dV[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\n\x87W`\x00\x80\xfd[Pa\n\x90a\x16\xa4V[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\n\xb2W`\x00\x80\xfd[Pa\n\xbba\x16\xaaV[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\n\xddW`\x00\x80\xfd[Pa\v `\x04\x806\x03` \x81\x10\x15a\n\xf4W`\x00\x80\xfd[\x81\x01\x90\x80\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90PPPa\x177V[\x00[4\x80\x15a\v.W`\x00\x80\xfd[Pa\v7a\x17TV[`@Q\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[```@Q\x80`@\x01`@R\x80`\v\x81R` \x01\u007fMatic Token\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP\x90P\x90V[`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`\x10\x81R` \x01\x80\u007fDisabled feature\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP` \x01\x91PP`@Q\x80\x91\x03\x90\xfd[`\x00`\x12`\xff\x16`\n\nd\x02T\v\xe4\x00\x02\x90P\x90V[`\x00\x80\x85\x11a\fHW`\x00\x80\xfd[`\x00\x83\x14\x80a\fWWP\x82C\x11\x15[a\f\xc9W`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`\x14\x81R` \x01\x80\u007fSignature is expired\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP` \x01\x91PP`@Q\x80\x91\x03\x90\xfd[`\x00a\f\xd73\x87\x87\x87a\x16}V[\x90P`\x00\x15\x15`\x05`\x00\x83\x81R` \x01\x90\x81R` \x01`\x00 `\x00\x90T\x90a\x01\x00\n\x90\x04`\xff\x16\x15\x15\x14a\rsW`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`\x0f\x81R` \x01\x80\u007fSig deactivated\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP` \x01\x91PP`@Q\x80\x91\x03\x90\xfd[`\x01`\x05`\x00\x83\x81R` \x01\x90\x81R` \x01`\x00 `\x00a\x01\x00\n\x81T\x81`\xff\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPa\r\ud049\x89\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\x00\x81\x84\x01R`\x1f\x19`\x1f\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa\x13/V[\x91Pa\r\xfa\x82\x84\x88a\x17zV[PP\x96\x95PPPPPPV[`\x003\x90P`\x00a\x0e\x16\x82a\x128V[\x90Pa\x0e-\x83`\x06Ta\x1b7\x90\x91\x90c\xff\xff\xff\xff\x16V[`\x06\x81\x90UP`\x00\x83\x11\x80\x15a\x0eBWP\x824\x14[a\x0e\xb4W`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`\x13\x81R` \x01\x80\u007fInsufficient amount\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP` \x01\x91PP`@Q\x80\x91\x03\x90\xfd[\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16`\x02`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\u007f\xeb\xff&\x02\xb3\xf4h%\x9e\x1e\x99\xf6\x13\xfe\xd6i\x1f:e&\xef\xfen\xf3\xe7h\xbaz\xe7\xa3lO\x85\x84a\x0f0\x87a\x128V[`@Q\x80\x84\x81R` \x01\x83\x81R` \x01\x82\x81R` \x01\x93PPPP`@Q\x80\x91\x03\x90\xa3PPPV[`\x00`\x12\x90P\x90V[a\x0fia\x14\xddV[a\x0frW`\x00\x80\xfd[`\x00\x81\x11\x80\x15a\x0f\xafWP`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x14\x15[a\x10\x04W`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`#\x81R` \x01\x80a\x1ec`#\x919`@\x01\x91PP`@Q\x80\x91\x03\x90\xfd[`\x00a\x10\x0f\x83a\x128V[\x90P`\x00\x83\x90P\x80s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16a\b\xfc\x84\x90\x81\x15\x02\x90`@Q`\x00`@Q\x80\x83\x03\x81\x85\x88\x88\xf1\x93PPPP\x15\x80\x15a\x10\\W=`\x00\x80>=`\x00\xfd[Pa\x10r\x83`\x06Ta\x1bW\x90\x91\x90c\xff\xff\xff\xff\x16V[`\x06\x81\x90UP\x83s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16`\x02`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\u007fN,\xa0Q^\u046e\xf19_f\xb50;\xb5\xd6\xf1\xbf\x9da\xa3S\xfaS\xf7?\x8a\u0257?\xa9\xf6\x85\x85a\x10\xf4\x89a\x128V[`@Q\x80\x84\x81R` \x01\x83\x81R` \x01\x82\x81R` \x01\x93PPPP`@Q\x80\x91\x03\x90\xa3PPPPV[`\a`\x00\x90T\x90a\x01\x00\n\x90\x04`\xff\x16\x15a\x11\x83W`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`#\x81R` \x01\x80a\x1e@`#\x919`@\x01\x91PP`@Q\x80\x91\x03\x90\xfd[`\x01`\a`\x00a\x01\x00\n\x81T\x81`\xff\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x80`\x02`\x00a\x01\x00\n\x81T\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02\x19\x16\x90\x83s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x02\x17\x90UPa\x11\xe8\x82a\x1bvV[PPV[`\x03`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81V[`\x04`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81V[`\x00\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x161\x90P\x91\x90PV[a\x12aa\x14\xddV[a\x12jW`\x00\x80\xfd[`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16`\x00\x80\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\u007f\x8b\xe0\a\x9cS\x16Y\x14\x13D\xcd\x1f\u0424\xf2\x84\x19I\u007f\x97\"\xa3\u06af\xe3\xb4\x18okdW\xe0`@Q`@Q\x80\x91\x03\x90\xa3`\x00\x80`\x00a\x01\x00\n\x81T\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02\x19\x16\x90\x83s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x02\x17\x90UPV[`\x06T\x81V[`\x00\x80`\x00\x80`A\x85Q\x14a\x13JW`\x00\x93PPPPa\x14\xaeV[` \x85\x01Q\x92P`@\x85\x01Q\x91P`\xff`A\x86\x01Q\x16\x90P`\x1b\x81`\xff\x16\x10\x15a\x13uW`\x1b\x81\x01\x90P[`\x1b\x81`\xff\x16\x14\x15\x80\x15a\x13\x8dWP`\x1c\x81`\xff\x16\x14\x15[\x15a\x13\x9eW`\x00\x93PPPPa\x14\xaeV[`\x01\x86\x82\x85\x85`@Q`\x00\x81R` \x01`@R`@Q\x80\x85\x81R` \x01\x84`\xff\x16`\xff\x16\x81R` \x01\x83\x81R` \x01\x82\x81R` \x01\x94PPPPP` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xfa\x15\x80\x15a\x13\xfbW=`\x00\x80>=`\x00\xfd[PPP` `@Q\x03Q\x93P`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x84s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x14\x15a\x14\xaaW`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`\x12\x81R` \x01\x80\u007fError in ecrecover\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP` \x01\x91PP`@Q\x80\x91\x03\x90\xfd[PPP[\x92\x91PPV[`\x00\x80`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90P\x90V[`\x00\x80`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x163s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x14\x90P\x90V[`@Q\x80`@\x01`@R\x80`\x03\x81R` \x01\u007f\x018\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP\x81V[```@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\u007fMATIC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP\x90P\x90V[`\x00\x814\x14a\x15\xbcW`\x00\x90Pa\x15\xcaV[a\x15\xc73\x84\x84a\x17zV[\x90P[\x92\x91PPV[`@Q\x80`\x80\x01`@R\x80`[\x81R` \x01a\x1e\xd8`[\x919`@Q` \x01\x80\x82\x80Q\x90` \x01\x90\x80\x83\x83[` \x83\x10a\x16\x1fW\x80Q\x82R` \x82\x01\x91P` \x81\x01\x90P` \x83\x03\x92Pa\x15\xfcV[`\x01\x83` \x03a\x01\x00\n\x03\x80\x19\x82Q\x16\x81\x84Q\x16\x80\x82\x17\x85RPPPPPP\x90P\x01\x91PP`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x81V[`\x05` R\x80`\x00R`@`\x00 `\x00\x91PT\x90a\x01\x00\n\x90\x04`\xff\x16\x81V[`\x00a\x16\x93a\x16\x8e\x86\x86\x86\x86a\x1cnV[a\x1dDV[\x90P\x94\x93PPPPV[b\x018\x81\x81V[`\x01T\x81V[`@Q\x80`\x80\x01`@R\x80`R\x81R` \x01a\x1e\x86`R\x919`@Q` \x01\x80\x82\x80Q\x90` \x01\x90\x80\x83\x83[` \x83\x10a\x16\xf9W\x80Q\x82R` \x82\x01\x91P` \x81\x01\x90P` \x83\x03\x92Pa\x16\xd6V[`\x01\x83` \x03a\x01\x00\n\x03\x80\x19\x82Q\x16\x81\x84Q\x16\x80\x82\x17\x85RPPPPPP\x90P\x01\x91PP`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x81V[a\x17?a\x14\xddV[a\x17HW`\x00\x80\xfd[a\x17Q\x81a\x1bvV[PV[`\x02`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81V[`\x00\x800s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16cp\xa0\x821\x86`@Q\x82c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP` `@Q\x80\x83\x03\x81\x86\x80;\x15\x80\x15a\x17\xfaW`\x00\x80\xfd[PZ\xfa\x15\x80\x15a\x18\x0eW=`\x00\x80>=`\x00\xfd[PPPP`@Q=` \x81\x10\x15a\x18$W`\x00\x80\xfd[\x81\x01\x90\x80\x80Q\x90` \x01\x90\x92\x91\x90PPP\x90P`\x000s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16cp\xa0\x821\x86`@Q\x82c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP` `@Q\x80\x83\x03\x81\x86\x80;\x15\x80\x15a\x18\xb6W`\x00\x80\xfd[PZ\xfa\x15\x80\x15a\x18\xcaW=`\x00\x80>=`\x00\xfd[PPPP`@Q=` \x81\x10\x15a\x18\xe0W`\x00\x80\xfd[\x81\x01\x90\x80\x80Q\x90` \x01\x90\x92\x91\x90PPP\x90Pa\x18\xfe\x86\x86\x86a\x1d\x8eV[\x84s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x86s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16`\x02`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\u007f\xe6I~>\xe5H\xa37!6\xaf/\xcb\x06\x96\xdb1\xfcl\xf2\x02`pvE\x06\x8b\xd3\xfe\x97\xf3\u0107\x86\x860s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16cp\xa0\x821\x8e`@Q\x82c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP` `@Q\x80\x83\x03\x81\x86\x80;\x15\x80\x15a\x1a\x06W`\x00\x80\xfd[PZ\xfa\x15\x80\x15a\x1a\x1aW=`\x00\x80>=`\x00\xfd[PPPP`@Q=` \x81\x10\x15a\x1a0W`\x00\x80\xfd[\x81\x01\x90\x80\x80Q\x90` \x01\x90\x92\x91\x90PPP0s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16cp\xa0\x821\x8e`@Q\x82c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP` `@Q\x80\x83\x03\x81\x86\x80;\x15\x80\x15a\x1a\xbeW`\x00\x80\xfd[PZ\xfa\x15\x80\x15a\x1a\xd2W=`\x00\x80>=`\x00\xfd[PPPP`@Q=` \x81\x10\x15a\x1a\xe8W`\x00\x80\xfd[\x81\x01\x90\x80\x80Q\x90` \x01\x90\x92\x91\x90PPP`@Q\x80\x86\x81R` \x01\x85\x81R` \x01\x84\x81R` \x01\x83\x81R` \x01\x82\x81R` \x01\x95PPPPPP`@Q\x80\x91\x03\x90\xa4`\x01\x92PPP\x93\x92PPPV[`\x00\x82\x82\x11\x15a\x1bFW`\x00\x80\xfd[`\x00\x82\x84\x03\x90P\x80\x91PP\x92\x91PPV[`\x00\x80\x82\x84\x01\x90P\x83\x81\x10\x15a\x1blW`\x00\x80\xfd[\x80\x91PP\x92\x91PPV[`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x14\x15a\x1b\xb0W`\x00\x80\xfd[\x80s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16`\x00\x80\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\u007f\x8b\xe0\a\x9cS\x16Y\x14\x13D\xcd\x1f\u0424\xf2\x84\x19I\u007f\x97\"\xa3\u06af\xe3\xb4\x18okdW\xe0`@Q`@Q\x80\x91\x03\x90\xa3\x80`\x00\x80a\x01\x00\n\x81T\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02\x19\x16\x90\x83s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x02\x17\x90UPPV[`\x00\x80`@Q\x80`\x80\x01`@R\x80`[\x81R` \x01a\x1e\xd8`[\x919`@Q` \x01\x80\x82\x80Q\x90` \x01\x90\x80\x83\x83[` \x83\x10a\x1c\xc0W\x80Q\x82R` \x82\x01\x91P` \x81\x01\x90P` \x83\x03\x92Pa\x1c\x9dV[`\x01\x83` \x03a\x01\x00\n\x03\x80\x19\x82Q\x16\x81\x84Q\x16\x80\x82\x17\x85RPPPPPP\x90P\x01\x91PP`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P`@Q\x81\x81Rs\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x16` \x82\x01R\x85`@\x82\x01R\x84``\x82\x01R\x83`\x80\x82\x01R`\xa0\x81 \x92PP\x81\x91PP\x94\x93PPPPV[`\x00\x80`\x01T\x90P`@Q\u007f\x19\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R\x81`\x02\x82\x01R\x83`\"\x82\x01R`B\x81 \x92PP\x81\x91PP\x91\x90PV[\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16a\b\xfc\x82\x90\x81\x15\x02\x90`@Q`\x00`@Q\x80\x83\x03\x81\x85\x88\x88\xf1\x93PPPP\x15\x80\x15a\x1d\xd4W=`\x00\x80>=`\x00\xfd[P\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x83s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\u007f\xdd\xf2R\xad\x1b\xe2\u021bi\u00b0h\xfc7\x8d\xaa\x95+\xa7\xf1c\u0121\x16(\xf5ZM\xf5#\xb3\xef\x83`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xa3PPPV\xfeThe contract is already initializedInsufficient amount or invalid userEIP712Domain(string name,string version,uint256 chainId,address verifyingContract)TokenTransferOrder(address spender,uint256 tokenIdOrAmount,bytes32 data,uint256 expiration)\xa2ebzzr1X \x8f\x81p\x013s\x8dvj\xe3\u058a\xf5\x91\xadX\x8b\x01%\xbd\x91D\x91\x92\x17\x9fF\b\x93\xf7\x9fkdsolcC\x00\x05\v\x002\xe0\x94\x92\x8e\u05a3\xe9D7\xbb\xd3\x16\u032dxG\x9f\x1d\x16:j\x8c\x8965\u026d\xc5\u07a0\x00\x00\x80\xe0\x94\xbe\x18\x8dfA\u8d80t:H\x15\u07e0\xf6 \x808\x96\x0f\x8965\u026d\xc5\u07a0\x00\x00\x80\xe0\x94\xc2h\x80\xa0\xaf.\xa0\xc7\xe8\x13\x0en\xc4z\xf7VFTR\xe8\x8965\u026d\xc5\u07a0\x00\x00\x80\xe0\x94\xc2u\u070b\xe3\x9fP\xd1/f\xb6\xa66)\u00dd\xa5\xba\u5f4965\u026d\xc5\u07a0\x00\x00\x80\xe0\x94\xf9\x03\xba\x9e\x00a\x93\xc1R{\xfb\xe6_\xe2\x127\x04\xea?\x99\x8965\u026d\xc5\u07a0\x00\x00\x80" diff --git a/mobile/geth.go b/mobile/geth.go index 704d432e04..3923c02a37 100644 --- a/mobile/geth.go +++ b/mobile/geth.go @@ -179,6 +179,13 @@ func NewNode(datadir string, config *NodeConfig) (stack *Node, _ error) { config.EthereumNetworkID = 5 } } + // If we have the Mumbai testnet, hard code the chain configs too + if config.EthereumGenesis == MumbaiGenesis() { + genesis.Config = params.MumbaiChainConfig + if config.EthereumNetworkID == 1 { + config.EthereumNetworkID = 80001 + } + } } // Register the Ethereum protocol if requested if config.EthereumEnabled { diff --git a/mobile/params.go b/mobile/params.go index 0fc197c9e5..44b348f45b 100644 --- a/mobile/params.go +++ b/mobile/params.go @@ -59,6 +59,15 @@ func GoerliGenesis() string { return string(enc) } +// MumbaiGenesis returns the JSON spec to use for the Mumbai test network +func MumbaiGenesis() string { + enc, err := json.Marshal(core.DefaultMumbaiGenesisBlock()) + if err != nil { + panic(err) + } + return string(enc) +} + // FoundationBootnodes returns the enode URLs of the P2P bootstrap nodes operated // by the foundation running the V5 discovery protocol. func FoundationBootnodes() *Enodes { diff --git a/params/bootnodes.go b/params/bootnodes.go index bc291449e2..20136ca422 100644 --- a/params/bootnodes.go +++ b/params/bootnodes.go @@ -67,6 +67,12 @@ var GoerliBootnodes = []string{ "enode://a59e33ccd2b3e52d578f1fbd70c6f9babda2650f0760d6ff3b37742fdcdfdb3defba5d56d315b40c46b70198c7621e63ffa3f987389c7118634b0fefbbdfa7fd@51.15.119.157:40303", } +// MumbaiBootnodes are the enode URLs of the P2P bootstrap nodes running on the +// Mumbai test network. +var MumbaiBootnodes = []string{ + "enode://320553cda00dfc003f499a3ce9598029f364fbb3ed1222fdc20a94d97dcc4d8ba0cd0bfa996579dcc6d17a534741fb0a5da303a90579431259150de66b597251@54.147.31.250:30303", +} + var V5Bootnodes = []string{ // Teku team's bootnode "enr:-KG4QOtcP9X1FbIMOe17QNMKqDxCpm14jcX5tiOE4_TyMrFqbmhPZHK_ZPG2Gxb1GE2xdtodOfx9-cgvNtxnRyHEmC0ghGV0aDKQ9aX9QgAAAAD__________4JpZIJ2NIJpcIQDE8KdiXNlY3AyNTZrMaEDhpehBDbZjM_L9ek699Y7vhUJ-eAdMyQW_Fil522Y0fODdGNwgiMog3VkcIIjKA", @@ -101,6 +107,8 @@ func KnownDNSNetwork(genesis common.Hash, protocol string) string { net = "rinkeby" case GoerliGenesisHash: net = "goerli" + case MumbaiGenesisHash: + net = "mumbai" default: return "" } diff --git a/params/config.go b/params/config.go index 1cacea5d55..2a442e9bfb 100644 --- a/params/config.go +++ b/params/config.go @@ -31,6 +31,7 @@ var ( RopstenGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") RinkebyGenesisHash = common.HexToHash("0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177") GoerliGenesisHash = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a") + MumbaiGenesisHash = common.HexToHash("0x7b66506a9ebdbf30d32b43c5f15a3b1216269a1ec3a75aa3182b86176a2b1ca7") ) // TrustedCheckpoints associates each known checkpoint with the genesis hash of @@ -40,6 +41,7 @@ var TrustedCheckpoints = map[common.Hash]*TrustedCheckpoint{ RopstenGenesisHash: RopstenTrustedCheckpoint, RinkebyGenesisHash: RinkebyTrustedCheckpoint, GoerliGenesisHash: GoerliTrustedCheckpoint, + MumbaiGenesisHash: MumbaiTrustedCheckpoint, } // CheckpointOracles associates each known checkpoint oracles with the genesis hash of @@ -49,6 +51,7 @@ var CheckpointOracles = map[common.Hash]*CheckpointOracleConfig{ RopstenGenesisHash: RopstenCheckpointOracle, RinkebyGenesisHash: RinkebyCheckpointOracle, GoerliGenesisHash: GoerliCheckpointOracle, + MumbaiGenesisHash: MumbaiCheckpointOracle, } var ( @@ -220,6 +223,53 @@ var ( Threshold: 2, } + // MumbaiChainConfig contains the chain parameters to run a node on the Mumbai test network. + MumbaiChainConfig = &ChainConfig{ + ChainID: big.NewInt(80001), + HomesteadBlock: big.NewInt(0), + DAOForkBlock: nil, + DAOForkSupport: true, + EIP150Hash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), + EIP150Block: big.NewInt(0), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(2722000), + MuirGlacierBlock: big.NewInt(2722000), + BerlinBlock: big.NewInt(13996000), + Bor: &BorConfig{ + Period: 2, + ProducerDelay: 6, + Sprint: 64, + BackupMultiplier: 2, + ValidatorContract: "0x0000000000000000000000000000000000001000", + StateReceiverContract: "0x0000000000000000000000000000000000001001", + }, + } + + // MumbaiTrustedCheckpoint contains the light client trusted checkpoint for the Mumbai test network. + MumbaiTrustedCheckpoint = &TrustedCheckpoint{ + SectionIndex: 160, + SectionHead: common.HexToHash("0xb5a666c790dc35a5613d04ebba8ba47a850b45a15d9b95ad7745c35ae034b5a5"), + CHTRoot: common.HexToHash("0x6b4e00df52bdc38fa6c26c8ef595c2ad6184963ea36ab08ee744af460aa735e1"), + BloomRoot: common.HexToHash("0x8fa88f5e50190cb25243aeee262a1a9e4434a06f8d455885dcc1b5fc48c33836"), + } + + // MumbaiCheckpointOracle contains a set of configs for the Mumbai test network oracle. + MumbaiCheckpointOracle = &CheckpointOracleConfig{ + Address: common.HexToAddress("0x18CA0E045F0D772a851BC7e48357Bcaab0a0795D"), + Signers: []common.Address{ + common.HexToAddress("0x4769bcaD07e3b938B7f43EB7D278Bc7Cb9efFb38"), // Peter + common.HexToAddress("0x78d1aD571A1A09D60D9BBf25894b44e4C8859595"), // Martin + common.HexToAddress("0x286834935f4A8Cfb4FF4C77D5770C2775aE2b0E7"), // Zsolt + common.HexToAddress("0xb86e2B0Ab5A4B1373e40c51A7C712c70Ba2f9f8E"), // Gary + common.HexToAddress("0x0DF8fa387C602AE62559cC4aFa4972A7045d6707"), // Guillaume + }, + Threshold: 2, + } + // AllEthashProtocolChanges contains every protocol change (EIPs) introduced // and accepted by the Ethereum core developers into the Ethash consensus. // From adbd18f42c791e2dcf0131e1b6d9b42ced5c49b3 Mon Sep 17 00:00:00 2001 From: Krishna Upadhyaya Date: Wed, 1 Sep 2021 15:04:25 +0530 Subject: [PATCH 02/13] fix: genesis alloc issue --- core/allocs/mumbai.json | 29 +++++++++++++++++++++++++++++ core/genesis.go | 26 +++++++++++++++++++++----- go.mod | 2 +- go.sum | 2 -- params/config.go | 23 ----------------------- 5 files changed, 51 insertions(+), 31 deletions(-) create mode 100644 core/allocs/mumbai.json diff --git a/core/allocs/mumbai.json b/core/allocs/mumbai.json new file mode 100644 index 0000000000..63fabecfe7 --- /dev/null +++ b/core/allocs/mumbai.json @@ -0,0 +1,29 @@ +{ + "0000000000000000000000000000000000001000": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106101f05760003560e01c806360c8614d1161010f578063af26aa96116100a2578063d5b844eb11610071578063d5b844eb14610666578063dcf2793a14610684578063e3b7c924146106b6578063f59cf565146106d4576101f0565b8063af26aa96146105c7578063b71d7a69146105e7578063b7ab4db514610617578063c1b3c91914610636576101f0565b806370ba5707116100de57806370ba57071461052b57806398ab2b621461055b5780639d11b80714610579578063ae756451146105a9576101f0565b806360c8614d1461049c57806365b3a1e2146104bc57806366332354146104db578063687a9bd6146104f9576101f0565b80633434735f1161018757806344d6528f1161015657806344d6528f146103ee5780634dbc959f1461041e57806355614fcc1461043c578063582a8d081461046c576101f0565b80633434735f1461035257806335ddfeea1461037057806343ee8213146103a057806344c15cb1146103be576101f0565b806323f2a73f116101c357806323f2a73f146102a45780632bc06564146102d45780632de3a180146102f25780632eddf35214610322576101f0565b8063047a6c5b146101f55780630c35b1cb146102275780631270b5741461025857806323c2a2b414610288575b600080fd5b61020f600480360361020a9190810190612b24565b610706565b60405161021e93929190613463565b60405180910390f35b610241600480360361023c9190810190612b24565b61075d565b60405161024f929190613284565b60405180910390f35b610272600480360361026d9190810190612b4d565b610939565b60405161027f91906132bb565b60405180910390f35b6102a2600480360361029d9190810190612c2c565b610a91565b005b6102be60048036036102b99190810190612b4d565b61112a565b6040516102cb91906132bb565b60405180910390f35b6102dc611281565b6040516102e99190613411565b60405180910390f35b61030c60048036036103079190810190612a81565b611286565b60405161031991906132d6565b60405180910390f35b61033c60048036036103379190810190612b24565b611307565b6040516103499190613411565b60405180910390f35b61035a611437565b6040516103679190613269565b60405180910390f35b61038a60048036036103859190810190612abd565b61144f565b60405161039791906132bb565b60405180910390f35b6103a861151a565b6040516103b591906132d6565b60405180910390f35b6103d860048036036103d39190810190612b89565b611531565b6040516103e59190613411565b60405180910390f35b61040860048036036104039190810190612b4d565b611619565b60405161041591906133f6565b60405180910390f35b610426611781565b6040516104339190613411565b60405180910390f35b61045660048036036104519190810190612a06565b611791565b60405161046391906132bb565b60405180910390f35b61048660048036036104819190810190612a2f565b6117ab565b60405161049391906132d6565b60405180910390f35b6104a4611829565b6040516104b393929190613463565b60405180910390f35b6104c461189d565b6040516104d2929190613284565b60405180910390f35b6104e3611b6e565b6040516104f09190613411565b60405180910390f35b610513600480360361050e9190810190612bf0565b611b73565b6040516105229392919061342c565b60405180910390f35b61054560048036036105409190810190612a06565b611bd7565b60405161055291906132bb565b60405180910390f35b610563611bf1565b60405161057091906132d6565b60405180910390f35b610593600480360361058e9190810190612b24565b611c08565b6040516105a09190613411565b60405180910390f35b6105b1611d39565b6040516105be91906132d6565b60405180910390f35b6105cf611d50565b6040516105de93929190613463565b60405180910390f35b61060160048036036105fc9190810190612b24565b611db1565b60405161060e9190613411565b60405180910390f35b61061f611eb1565b60405161062d929190613284565b60405180910390f35b610650600480360361064b9190810190612b24565b611ec5565b60405161065d9190613411565b60405180910390f35b61066e611ee6565b60405161067b919061349a565b60405180910390f35b61069e60048036036106999190810190612bf0565b611eeb565b6040516106ad9392919061342c565b60405180910390f35b6106be611f4f565b6040516106cb9190613411565b60405180910390f35b6106ee60048036036106e99190810190612b24565b611f61565b6040516106fd93929190613463565b60405180910390f35b60008060006002600085815260200190815260200160002060000154600260008681526020019081526020016000206001015460026000878152602001908152602001600020600201549250925092509193909250565b60608060ff83116107795761077061189d565b91509150610934565b600061078484611db1565b9050606060016000838152602001908152602001600020805490506040519080825280602002602001820160405280156107cd5781602001602082028038833980820191505090505b509050606060016000848152602001908152602001600020805490506040519080825280602002602001820160405280156108175781602001602082028038833980820191505090505b50905060008090505b60016000858152602001908152602001600020805490508110156109295760016000858152602001908152602001600020818154811061085c57fe5b906000526020600020906003020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683828151811061089a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506001600085815260200190815260200160002081815481106108f257fe5b90600052602060002090600302016001015482828151811061091057fe5b6020026020010181815250508080600101915050610820565b508181945094505050505b915091565b6000606060016000858152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610a0c578382906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190610970565b50505050905060008090505b8151811015610a84578373ffffffffffffffffffffffffffffffffffffffff16828281518110610a4457fe5b60200260200101516040015173ffffffffffffffffffffffffffffffffffffffff161415610a7757600192505050610a8b565b8080600101915050610a18565b5060009150505b92915050565b73fffffffffffffffffffffffffffffffffffffffe73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a906133d6565b60405180910390fd5b6000610b1d611781565b90506000811415610b3157610b30611f8b565b5b610b456001826122ac90919063ffffffff16565b8814610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d90613356565b60405180910390fd5b868611610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf906133b6565b60405180910390fd5b6000604060018989030181610bd957fe5b0614610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1190613396565b60405180910390fd5b8660026000838152602001908152602001600020600101541115610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a90613336565b60405180910390fd5b6000600260008a81526020019081526020016000206000015414610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc390613376565b60405180910390fd5b604051806060016040528089815260200188815260200187815250600260008a8152602001908152602001600020600082015181600001556020820151816001015560408201518160020155905050600388908060018154018082558091505090600182039060005260206000200160009091929091909150555060008060008a815260200190815260200160002081610d669190612800565b506000600160008a815260200190815260200160002081610d879190612800565b506060610ddf610dda87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506122cb565b6122f9565b905060008090505b8151811015610f51576060610e0e838381518110610e0157fe5b60200260200101516122f9565b90506000808c81526020019081526020016000208054809190600101610e349190612800565b506040518060600160405280610e5d83600081518110610e5057fe5b60200260200101516123d6565b8152602001610e7f83600181518110610e7257fe5b60200260200101516123d6565b8152602001610ea183600281518110610e9457fe5b6020026020010151612447565b73ffffffffffffffffffffffffffffffffffffffff168152506000808d81526020019081526020016000208381548110610ed757fe5b9060005260206000209060030201600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050508080600101915050610de7565b506060610fa9610fa486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506122cb565b6122f9565b905060008090505b815181101561111d576060610fd8838381518110610fcb57fe5b60200260200101516122f9565b9050600160008d81526020019081526020016000208054809190600101610fff9190612800565b5060405180606001604052806110288360008151811061101b57fe5b60200260200101516123d6565b815260200161104a8360018151811061103d57fe5b60200260200101516123d6565b815260200161106c8360028151811061105f57fe5b6020026020010151612447565b73ffffffffffffffffffffffffffffffffffffffff16815250600160008e815260200190815260200160002083815481106110a357fe5b9060005260206000209060030201600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050508080600101915050610fb1565b5050505050505050505050565b60006060600080858152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156111fc578382906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611160565b50505050905060008090505b8151811015611274578373ffffffffffffffffffffffffffffffffffffffff1682828151811061123457fe5b60200260200101516040015173ffffffffffffffffffffffffffffffffffffffff1614156112675760019250505061127b565b8080600101915050611208565b5060009150505b92915050565b604081565b60006002600160f81b84846040516020016112a3939291906131d6565b6040516020818303038152906040526040516112bf9190613213565b602060405180830381855afa1580156112dc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052506112ff9190810190612a58565b905092915050565b60006060600080848152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156113d9578382906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250508152602001906001019061133d565b505050509050600080905060008090505b825181101561142c5761141d83828151811061140257fe5b602002602001015160200151836122ac90919063ffffffff16565b915080806001019150506113ea565b508092505050919050565b73fffffffffffffffffffffffffffffffffffffffe81565b600080600080859050600060218087518161146657fe5b04029050600081111561147f5761147c876117ab565b91505b6000602190505b818111611509576000600182038801519050818801519550806000602081106114ab57fe5b1a60f81b9450600060f81b857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156114f0576114e98685611286565b93506114fd565b6114fa8487611286565b93505b50602181019050611486565b508782149450505050509392505050565b60405161152690613254565b604051809103902081565b60008060009050600080905060008090505b84518167ffffffffffffffff16101561160c57606061156e868367ffffffffffffffff16604161246a565b9050600061158582896124f690919063ffffffff16565b905061158f612832565b6115998a83611619565b90506115a58a8361112a565b80156115dc57508473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16115b156115fe578194506115fb8160200151876122ac90919063ffffffff16565b95505b505050604181019050611543565b5081925050509392505050565b611621612832565b6060600080858152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156116f1578382906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611655565b50505050905060008090505b8151811015611779578373ffffffffffffffffffffffffffffffffffffffff1682828151811061172957fe5b60200260200101516040015173ffffffffffffffffffffffffffffffffffffffff16141561176c5781818151811061175d57fe5b60200260200101519250611779565b80806001019150506116fd565b505092915050565b600061178c43611db1565b905090565b60006117a461179e611781565b8361112a565b9050919050565b60006002600060f81b836040516020016117c69291906131aa565b6040516020818303038152906040526040516117e29190613213565b602060405180830381855afa1580156117ff573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052506118229190810190612a58565b9050919050565b60008060008061184a600161183c611781565b6122ac90919063ffffffff16565b905060026000828152602001908152602001600020600001546002600083815260200190815260200160002060010154600260008481526020019081526020016000206002015493509350935050909192565b606080606060056040519080825280602002602001820160405280156118d25781602001602082028038833980820191505090505b50905073c26880a0af2ea0c7e8130e6ec47af756465452e8816000815181106118f757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073be188d6641e8b680743a4815dfa0f6208038960f8160018151811061195357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073c275dc8be39f50d12f66b6a63629c39da5bae5bd816002815181106119af57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073f903ba9e006193c1527bfbe65fe2123704ea3f9981600381518110611a0b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073928ed6a3e94437bbd316ccad78479f1d163a6a8c81600481518110611a6757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606005604051908082528060200260200182016040528015611ad35781602001602082028038833980820191505090505b50905061271081600081518110611ae657fe5b60200260200101818152505061271081600181518110611b0257fe5b60200260200101818152505061271081600281518110611b1e57fe5b60200260200101818152505061271081600381518110611b3a57fe5b60200260200101818152505061271081600481518110611b5657fe5b60200260200101818152505081819350935050509091565b60ff81565b60016020528160005260406000208181548110611b8c57fe5b9060005260206000209060030201600091509150508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b6000611bea611be4611781565b83610939565b9050919050565b604051611bfd9061322a565b604051809103902081565b6000606060016000848152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611cdb578382906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611c3f565b505050509050600080905060008090505b8251811015611d2e57611d1f838281518110611d0457fe5b602002602001015160200151836122ac90919063ffffffff16565b91508080600101915050611cec565b508092505050919050565b604051611d459061323f565b604051809103902081565b600080600080611d5e611781565b905060026000828152602001908152602001600020600001546002600083815260200190815260200160002060010154600260008481526020019081526020016000206002015493509350935050909192565b60008060038054905090505b6000811115611e7157611dce612869565b6002600060036001850381548110611de257fe5b906000526020600020015481526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050905083816020015111158015611e3f57506000816040015114155b8015611e4f575080604001518411155b15611e6257806000015192505050611eac565b50808060019003915050611dbd565b5060006003805490501115611ea757600360016003805490500381548110611e9557fe5b90600052602060002001549050611eac565b600090505b919050565b606080611ebd4361075d565b915091509091565b60038181548110611ed257fe5b906000526020600020016000915090505481565b600281565b60006020528160005260406000208181548110611f0457fe5b9060005260206000209060030201600091509150508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b600060404381611f5b57fe5b04905090565b60026020528060005260406000206000915090508060000154908060010154908060020154905083565b606080611f9661189d565b8092508193505050600080905060405180606001604052808281526020016000815260200160ff81525060026000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155905050600381908060018154018082558091505090600182039060005260206000200160009091929091909150555060008060008381526020019081526020016000208161203f9190612800565b50600060016000838152602001908152602001600020816120609190612800565b5060008090505b83518110156121825760008083815260200190815260200160002080548091906001016120949190612800565b5060405180606001604052808281526020018483815181106120b257fe5b602002602001015181526020018583815181106120cb57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16815250600080848152602001908152602001600020828154811061210957fe5b9060005260206000209060030201600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508080600101915050612067565b5060008090505b83518110156122a6576001600083815260200190815260200160002080548091906001016121b79190612800565b5060405180606001604052808281526020018483815181106121d557fe5b602002602001015181526020018583815181106121ee57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681525060016000848152602001908152602001600020828154811061222d57fe5b9060005260206000209060030201600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508080600101915050612189565b50505050565b6000808284019050838110156122c157600080fd5b8091505092915050565b6122d361288a565b600060208301905060405180604001604052808451815260200182815250915050919050565b606061230482612600565b61230d57600080fd5b60006123188361264e565b905060608160405190808252806020026020018201604052801561235657816020015b6123436128a4565b81526020019060019003908161233b5790505b509050600061236885602001516126bf565b8560200151019050600080600090505b848110156123c95761238983612748565b91506040518060400160405280838152602001848152508482815181106123ac57fe5b602002602001018190525081830192508080600101915050612378565b5082945050505050919050565b60008082600001511180156123f057506021826000015111155b6123f957600080fd5b600061240883602001516126bf565b9050600081846000015103905060008083866020015101905080519150602083101561243b57826020036101000a820491505b81945050505050919050565b6000601582600001511461245a57600080fd5b612463826123d6565b9050919050565b60608183018451101561247c57600080fd5b6060821560008114612499576040519150602082016040526124ea565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124d757805183526020830192506020810190506124ba565b50868552601f19601f8301166040525050505b50809150509392505050565b600080600080604185511461251157600093505050506125fa565b602085015192506040850151915060ff6041860151169050601b8160ff16101561253c57601b810190505b601b8160ff16141580156125545750601c8160ff1614155b1561256557600093505050506125fa565b60006001878386866040516000815260200160405260405161258a94939291906132f1565b6020604051602081039080840390855afa1580156125ac573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125f257600080fd5b809450505050505b92915050565b600080826000015114156126175760009050612649565b60008083602001519050805160001a915060c060ff168260ff16101561264257600092505050612649565b6001925050505b919050565b6000808260000151141561266557600090506126ba565b6000809050600061267984602001516126bf565b84602001510190506000846000015185602001510190505b808210156126b3576126a282612748565b820191508280600101935050612691565b8293505050505b919050565b600080825160001a9050608060ff168110156126df576000915050612743565b60b860ff16811080612704575060c060ff168110158015612703575060f860ff1681105b5b15612713576001915050612743565b60c060ff168110156127335760018060b80360ff16820301915050612743565b60018060f80360ff168203019150505b919050565b6000806000835160001a9050608060ff1681101561276957600191506127f6565b60b860ff16811015612786576001608060ff1682030191506127f5565b60c060ff168110156127b65760b78103600185019450806020036101000a855104600182018101935050506127f4565b60f860ff168110156127d357600160c060ff1682030191506127f3565b60f78103600185019450806020036101000a855104600182018101935050505b5b5b5b8192505050919050565b81548183558181111561282d5760030281600302836000526020600020918201910161282c91906128be565b5b505050565b60405180606001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60405180606001604052806000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060008152602001600081525090565b61291191905b8082111561290d5760008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506003016128c4565b5090565b90565b60008135905061292381613693565b92915050565b600081359050612938816136aa565b92915050565b60008151905061294d816136aa565b92915050565b60008083601f84011261296557600080fd5b8235905067ffffffffffffffff81111561297e57600080fd5b60208301915083600182028301111561299657600080fd5b9250929050565b600082601f8301126129ae57600080fd5b81356129c16129bc826134e2565b6134b5565b915080825260208301602083018583830111156129dd57600080fd5b6129e883828461363d565b50505092915050565b600081359050612a00816136c1565b92915050565b600060208284031215612a1857600080fd5b6000612a2684828501612914565b91505092915050565b600060208284031215612a4157600080fd5b6000612a4f84828501612929565b91505092915050565b600060208284031215612a6a57600080fd5b6000612a788482850161293e565b91505092915050565b60008060408385031215612a9457600080fd5b6000612aa285828601612929565b9250506020612ab385828601612929565b9150509250929050565b600080600060608486031215612ad257600080fd5b6000612ae086828701612929565b9350506020612af186828701612929565b925050604084013567ffffffffffffffff811115612b0e57600080fd5b612b1a8682870161299d565b9150509250925092565b600060208284031215612b3657600080fd5b6000612b44848285016129f1565b91505092915050565b60008060408385031215612b6057600080fd5b6000612b6e858286016129f1565b9250506020612b7f85828601612914565b9150509250929050565b600080600060608486031215612b9e57600080fd5b6000612bac868287016129f1565b9350506020612bbd86828701612929565b925050604084013567ffffffffffffffff811115612bda57600080fd5b612be68682870161299d565b9150509250925092565b60008060408385031215612c0357600080fd5b6000612c11858286016129f1565b9250506020612c22858286016129f1565b9150509250929050565b600080600080600080600060a0888a031215612c4757600080fd5b6000612c558a828b016129f1565b9750506020612c668a828b016129f1565b9650506040612c778a828b016129f1565b955050606088013567ffffffffffffffff811115612c9457600080fd5b612ca08a828b01612953565b9450945050608088013567ffffffffffffffff811115612cbf57600080fd5b612ccb8a828b01612953565b925092505092959891949750929550565b6000612ce88383612d0c565b60208301905092915050565b6000612d00838361317d565b60208301905092915050565b612d15816135b2565b82525050565b612d24816135b2565b82525050565b6000612d358261352e565b612d3f8185613569565b9350612d4a8361350e565b8060005b83811015612d7b578151612d628882612cdc565b9750612d6d8361354f565b925050600181019050612d4e565b5085935050505092915050565b6000612d9382613539565b612d9d818561357a565b9350612da88361351e565b8060005b83811015612dd9578151612dc08882612cf4565b9750612dcb8361355c565b925050600181019050612dac565b5085935050505092915050565b612def816135c4565b82525050565b612e06612e01826135d0565b61367f565b82525050565b612e15816135fc565b82525050565b612e2c612e27826135fc565b613689565b82525050565b6000612e3d82613544565b612e47818561358b565b9350612e5781856020860161364c565b80840191505092915050565b6000612e706004836135a7565b91507f766f7465000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b6000612eb0602d83613596565b91507f537461727420626c6f636b206d7573742062652067726561746572207468616e60008301527f2063757272656e74207370616e000000000000000000000000000000000000006020830152604082019050919050565b6000612f16600f83613596565b91507f496e76616c6964207370616e20696400000000000000000000000000000000006000830152602082019050919050565b6000612f56601383613596565b91507f5370616e20616c726561647920657869737473000000000000000000000000006000830152602082019050919050565b6000612f96604583613596565b91507f446966666572656e6365206265747765656e20737461727420616e6420656e6460008301527f20626c6f636b206d75737420626520696e206d756c7469706c6573206f66207360208301527f7072696e740000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000613022602a83613596565b91507f456e6420626c6f636b206d7573742062652067726561746572207468616e207360008301527f7461727420626c6f636b000000000000000000000000000000000000000000006020830152604082019050919050565b6000613088601283613596565b91507f4e6f742053797374656d204164646573732100000000000000000000000000006000830152602082019050919050565b60006130c86005836135a7565b91507f38303030310000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000613108600e836135a7565b91507f6865696d64616c6c2d38303030310000000000000000000000000000000000006000830152600e82019050919050565b606082016000820151613151600085018261317d565b506020820151613164602085018261317d565b5060408201516131776040850182612d0c565b50505050565b61318681613626565b82525050565b61319581613626565b82525050565b6131a481613630565b82525050565b60006131b68285612df5565b6001820191506131c68284612e1b565b6020820191508190509392505050565b60006131e28286612df5565b6001820191506131f28285612e1b565b6020820191506132028284612e1b565b602082019150819050949350505050565b600061321f8284612e32565b915081905092915050565b600061323582612e63565b9150819050919050565b600061324a826130bb565b9150819050919050565b600061325f826130fb565b9150819050919050565b600060208201905061327e6000830184612d1b565b92915050565b6000604082019050818103600083015261329e8185612d2a565b905081810360208301526132b28184612d88565b90509392505050565b60006020820190506132d06000830184612de6565b92915050565b60006020820190506132eb6000830184612e0c565b92915050565b60006080820190506133066000830187612e0c565b613313602083018661319b565b6133206040830185612e0c565b61332d6060830184612e0c565b95945050505050565b6000602082019050818103600083015261334f81612ea3565b9050919050565b6000602082019050818103600083015261336f81612f09565b9050919050565b6000602082019050818103600083015261338f81612f49565b9050919050565b600060208201905081810360008301526133af81612f89565b9050919050565b600060208201905081810360008301526133cf81613015565b9050919050565b600060208201905081810360008301526133ef8161307b565b9050919050565b600060608201905061340b600083018461313b565b92915050565b6000602082019050613426600083018461318c565b92915050565b6000606082019050613441600083018661318c565b61344e602083018561318c565b61345b6040830184612d1b565b949350505050565b6000606082019050613478600083018661318c565b613485602083018561318c565b613492604083018461318c565b949350505050565b60006020820190506134af600083018461319b565b92915050565b6000604051905081810181811067ffffffffffffffff821117156134d857600080fd5b8060405250919050565b600067ffffffffffffffff8211156134f957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006135bd82613606565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561366a57808201518184015260208101905061364f565b83811115613679576000848401525b50505050565b6000819050919050565b6000819050919050565b61369c816135b2565b81146136a757600080fd5b50565b6136b3816135fc565b81146136be57600080fd5b50565b6136ca81613626565b81146136d557600080fd5b5056fea365627a7a723158208f52ee07630ffe523cc6ad3e15f437f973dcfa36729cd697f9b0fc4a145a48f06c6578706572696d656e74616cf564736f6c634300050b0040" + }, + "0000000000000000000000000000000000001001": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806319494a17146100465780633434735f146100e15780635407ca671461012b575b600080fd5b6100c76004803603604081101561005c57600080fd5b81019080803590602001909291908035906020019064010000000081111561008357600080fd5b82018360208201111561009557600080fd5b803590602001918460018302840111640100000000831117156100b757600080fd5b9091929391929390505050610149565b604051808215151515815260200191505060405180910390f35b6100e961047a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610133610492565b6040518082815260200191505060405180910390f35b600073fffffffffffffffffffffffffffffffffffffffe73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f742053797374656d2041646465737321000000000000000000000000000081525060200191505060405180910390fd5b606061025761025285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610498565b6104c6565b905060006102788260008151811061026b57fe5b60200260200101516105a3565b905080600160005401146102f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f537461746549647320617265206e6f742073657175656e7469616c000000000081525060200191505060405180910390fd5b600080815480929190600101919050555060006103248360018151811061031757fe5b6020026020010151610614565b905060606103458460028151811061033857fe5b6020026020010151610637565b9050610350826106c3565b1561046f576000624c4b409050606084836040516024018083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103aa57808201518184015260208101905061038f565b50505050905090810190601f1680156103d75780820380516001836020036101000a031916815260200191505b5093505050506040516020818303038152906040527f26c53bea000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008082516020840160008887f1965050505b505050509392505050565b73fffffffffffffffffffffffffffffffffffffffe81565b60005481565b6104a0610943565b600060208301905060405180604001604052808451815260200182815250915050919050565b60606104d1826106dc565b6104da57600080fd5b60006104e58361072a565b905060608160405190808252806020026020018201604052801561052357816020015b61051061095d565b8152602001906001900390816105085790505b5090506000610535856020015161079b565b8560200151019050600080600090505b848110156105965761055683610824565b915060405180604001604052808381526020018481525084828151811061057957fe5b602002602001018190525081830192508080600101915050610545565b5082945050505050919050565b60008082600001511180156105bd57506021826000015111155b6105c657600080fd5b60006105d5836020015161079b565b9050600081846000015103905060008083866020015101905080519150602083101561060857826020036101000a820491505b81945050505050919050565b6000601582600001511461062757600080fd5b610630826105a3565b9050919050565b6060600082600001511161064a57600080fd5b6000610659836020015161079b565b905060008184600001510390506060816040519080825280601f01601f19166020018201604052801561069b5781602001600182028038833980820191505090505b50905060008160200190506106b78487602001510182856108dc565b81945050505050919050565b600080823b905060008163ffffffff1611915050919050565b600080826000015114156106f35760009050610725565b60008083602001519050805160001a915060c060ff168260ff16101561071e57600092505050610725565b6001925050505b919050565b600080826000015114156107415760009050610796565b60008090506000610755846020015161079b565b84602001510190506000846000015185602001510190505b8082101561078f5761077e82610824565b82019150828060010193505061076d565b8293505050505b919050565b600080825160001a9050608060ff168110156107bb57600091505061081f565b60b860ff168110806107e0575060c060ff1681101580156107df575060f860ff1681105b5b156107ef57600191505061081f565b60c060ff1681101561080f5760018060b80360ff1682030191505061081f565b60018060f80360ff168203019150505b919050565b6000806000835160001a9050608060ff1681101561084557600191506108d2565b60b860ff16811015610862576001608060ff1682030191506108d1565b60c060ff168110156108925760b78103600185019450806020036101000a855104600182018101935050506108d0565b60f860ff168110156108af57600160c060ff1682030191506108cf565b60f78103600185019450806020036101000a855104600182018101935050505b5b5b5b8192505050919050565b60008114156108ea5761093e565b5b602060ff16811061091a5782518252602060ff1683019250602060ff1682019150602060ff16810390506108eb565b6000600182602060ff16036101000a03905080198451168184511681811785525050505b505050565b604051806040016040528060008152602001600081525090565b60405180604001604052806000815260200160008152509056fea265627a7a7231582083fbdacb76f32b4112d0f7db9a596937925824798a0026ba0232322390b5263764736f6c634300050b0032" + }, + "0000000000000000000000000000000000001010": { + "balance": "0x204fcd4f31349d83b6e00000", + "code": "0x60806040526004361061019c5760003560e01c806377d32e94116100ec578063acd06cb31161008a578063e306f77911610064578063e306f77914610a7b578063e614d0d614610aa6578063f2fde38b14610ad1578063fc0c546a14610b225761019c565b8063acd06cb31461097a578063b789543c146109cd578063cc79f97b14610a505761019c565b80639025e64c116100c65780639025e64c146107c957806395d89b4114610859578063a9059cbb146108e9578063abceeba21461094f5761019c565b806377d32e94146106315780638da5cb5b146107435780638f32d59b1461079a5761019c565b806347e7ef24116101595780637019d41a116101335780637019d41a1461053357806370a082311461058a578063715018a6146105ef578063771282f6146106065761019c565b806347e7ef2414610410578063485cc9551461046b57806360f96a8f146104dc5761019c565b806306fdde03146101a15780631499c5921461023157806318160ddd1461028257806319d27d9c146102ad5780632e1a7d4d146103b1578063313ce567146103df575b600080fd5b3480156101ad57600080fd5b506101b6610b79565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f65780820151818401526020810190506101db565b50505050905090810190601f1680156102235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023d57600080fd5b506102806004803603602081101561025457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bb6565b005b34801561028e57600080fd5b50610297610c24565b6040518082815260200191505060405180910390f35b3480156102b957600080fd5b5061036f600480360360a08110156102d057600080fd5b81019080803590602001906401000000008111156102ed57600080fd5b8201836020820111156102ff57600080fd5b8035906020019184600183028401116401000000008311171561032157600080fd5b9091929391929390803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103dd600480360360208110156103c757600080fd5b8101908080359060200190929190505050610e06565b005b3480156103eb57600080fd5b506103f4610f58565b604051808260ff1660ff16815260200191505060405180910390f35b34801561041c57600080fd5b506104696004803603604081101561043357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f61565b005b34801561047757600080fd5b506104da6004803603604081101561048e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061111d565b005b3480156104e857600080fd5b506104f16111ec565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561053f57600080fd5b50610548611212565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561059657600080fd5b506105d9600480360360208110156105ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611238565b6040518082815260200191505060405180910390f35b3480156105fb57600080fd5b50610604611259565b005b34801561061257600080fd5b5061061b611329565b6040518082815260200191505060405180910390f35b34801561063d57600080fd5b506107016004803603604081101561065457600080fd5b81019080803590602001909291908035906020019064010000000081111561067b57600080fd5b82018360208201111561068d57600080fd5b803590602001918460018302840111640100000000831117156106af57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061132f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561074f57600080fd5b506107586114b4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107a657600080fd5b506107af6114dd565b604051808215151515815260200191505060405180910390f35b3480156107d557600080fd5b506107de611534565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561081e578082015181840152602081019050610803565b50505050905090810190601f16801561084b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561086557600080fd5b5061086e61156d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108ae578082015181840152602081019050610893565b50505050905090810190601f1680156108db5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610935600480360360408110156108ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115aa565b604051808215151515815260200191505060405180910390f35b34801561095b57600080fd5b506109646115d0565b6040518082815260200191505060405180910390f35b34801561098657600080fd5b506109b36004803603602081101561099d57600080fd5b810190808035906020019092919050505061165d565b604051808215151515815260200191505060405180910390f35b3480156109d957600080fd5b50610a3a600480360360808110156109f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061167d565b6040518082815260200191505060405180910390f35b348015610a5c57600080fd5b50610a6561169d565b6040518082815260200191505060405180910390f35b348015610a8757600080fd5b50610a906116a4565b6040518082815260200191505060405180910390f35b348015610ab257600080fd5b50610abb6116aa565b6040518082815260200191505060405180910390f35b348015610add57600080fd5b50610b2060048036036020811015610af457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611737565b005b348015610b2e57600080fd5b50610b37611754565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60606040518060400160405280600b81526020017f4d6174696320546f6b656e000000000000000000000000000000000000000000815250905090565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f44697361626c656420666561747572650000000000000000000000000000000081525060200191505060405180910390fd5b6000601260ff16600a0a6402540be40002905090565b6000808511610c4857600080fd5b6000831480610c575750824311155b610cc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5369676e6174757265206973206578706972656400000000000000000000000081525060200191505060405180910390fd5b6000610cd73387878761167d565b9050600015156005600083815260200190815260200160002060009054906101000a900460ff16151514610d73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f536967206465616374697661746564000000000000000000000000000000000081525060200191505060405180910390fd5b60016005600083815260200190815260200160002060006101000a81548160ff021916908315150217905550610ded8189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061132f565b9150610dfa82848861177a565b50509695505050505050565b60003390506000610e1682611238565b9050610e2d83600654611b3790919063ffffffff16565b600681905550600083118015610e4257508234145b610eb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e73756666696369656e7420616d6f756e740000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f8584610f3087611238565b60405180848152602001838152602001828152602001935050505060405180910390a3505050565b60006012905090565b610f696114dd565b610f7257600080fd5b600081118015610faf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611e636023913960400191505060405180910390fd5b600061100f83611238565b905060008390508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561105c573d6000803e3d6000fd5b5061107283600654611b5790919063ffffffff16565b6006819055508373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f685856110f489611238565b60405180848152602001838152602001828152602001935050505060405180910390a350505050565b600760009054906101000a900460ff1615611183576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611e406023913960400191505060405180910390fd5b6001600760006101000a81548160ff02191690831515021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506111e882611b76565b5050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff16319050919050565b6112616114dd565b61126a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60065481565b600080600080604185511461134a57600093505050506114ae565b602085015192506040850151915060ff6041860151169050601b8160ff16101561137557601b810190505b601b8160ff161415801561138d5750601c8160ff1614155b1561139e57600093505050506114ae565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156113fb573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4572726f7220696e2065637265636f766572000000000000000000000000000081525060200191505060405180910390fd5b5050505b92915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6040518060400160405280600381526020017f013881000000000000000000000000000000000000000000000000000000000081525081565b60606040518060400160405280600581526020017f4d41544943000000000000000000000000000000000000000000000000000000815250905090565b60008134146115bc57600090506115ca565b6115c733848461177a565b90505b92915050565b6040518060800160405280605b8152602001611ed8605b91396040516020018082805190602001908083835b6020831061161f57805182526020820191506020810190506020830392506115fc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b60056020528060005260406000206000915054906101000a900460ff1681565b600061169361168e86868686611c6e565b611d44565b9050949350505050565b6201388181565b60015481565b604051806080016040528060528152602001611e86605291396040516020018082805190602001908083835b602083106116f957805182526020820191506020810190506020830392506116d6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b61173f6114dd565b61174857600080fd5b61175181611b76565b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117fa57600080fd5b505afa15801561180e573d6000803e3d6000fd5b505050506040513d602081101561182457600080fd5b8101908080519060200190929190505050905060003073ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156118b657600080fd5b505afa1580156118ca573d6000803e3d6000fd5b505050506040513d60208110156118e057600080fd5b810190808051906020019092919050505090506118fe868686611d8e565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c48786863073ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a0657600080fd5b505afa158015611a1a573d6000803e3d6000fd5b505050506040513d6020811015611a3057600080fd5b81019080805190602001909291905050503073ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611abe57600080fd5b505afa158015611ad2573d6000803e3d6000fd5b505050506040513d6020811015611ae857600080fd5b8101908080519060200190929190505050604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a46001925050509392505050565b600082821115611b4657600080fd5b600082840390508091505092915050565b600080828401905083811015611b6c57600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb057600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806040518060800160405280605b8152602001611ed8605b91396040516020018082805190602001908083835b60208310611cc05780518252602082019150602081019050602083039250611c9d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905060405181815273ffffffffffffffffffffffffffffffffffffffff8716602082015285604082015284606082015283608082015260a0812092505081915050949350505050565b60008060015490506040517f190100000000000000000000000000000000000000000000000000000000000081528160028201528360228201526042812092505081915050919050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611dd4573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505056fe54686520636f6e747261637420697320616c726561647920696e697469616c697a6564496e73756666696369656e7420616d6f756e74206f7220696e76616c69642075736572454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429546f6b656e5472616e736665724f726465722861646472657373207370656e6465722c75696e7432353620746f6b656e49644f72416d6f756e742c6279746573333220646174612c75696e743235362065787069726174696f6e29a265627a7a723158208f81700133738d766ae3d68af591ad588b0125bd91449192179f460893f79f6b64736f6c634300050b0032" + }, + "C26880A0AF2EA0c7E8130e6EC47Af756465452E8": { + "balance": "0x3635c9adc5dea00000" + }, + "be188D6641E8b680743A4815dFA0f6208038960F": { + "balance": "0x3635c9adc5dea00000" + }, + "c275DC8bE39f50D12F66B6a63629C39dA5BAe5bd": { + "balance": "0x3635c9adc5dea00000" + }, + "F903ba9E006193c1527BfBe65fe2123704EA3F99": { + "balance": "0x3635c9adc5dea00000" + }, + "928Ed6A3e94437bbd316cCAD78479f1d163A6A8C": { + "balance": "0x3635c9adc5dea00000" + } +} diff --git a/core/genesis.go b/core/genesis.go index f90af0e661..48f38622df 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -18,6 +18,7 @@ package core import ( "bytes" + "embed" "encoding/hex" "encoding/json" "errors" @@ -42,6 +43,9 @@ import ( //go:generate gencodec -type Genesis -field-override genesisSpecMarshaling -out gen_genesis.go //go:generate gencodec -type GenesisAccount -field-override genesisAccountMarshaling -out gen_genesis_account.go +//go:embed allocs +var allocs embed.FS + var errGenesisNoConfig = errors.New("genesis has no chain configuration") // Genesis specifies the header fields, state of a genesis block. It also defines hard @@ -409,7 +413,7 @@ func DefaultMumbaiGenesisBlock() *Genesis { Difficulty: big.NewInt(1), Mixhash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), Coinbase: common.HexToAddress("0x0000000000000000000000000000000000000000"), - Alloc: decodePrealloc(mumbaiAllocData), + Alloc: readPrealloc("allocs/mumbai.json"), } } @@ -445,10 +449,7 @@ func DeveloperGenesisBlock(period uint64, faucet common.Address) *Genesis { } func decodePrealloc(data string) GenesisAlloc { - var p []struct { - Addr, Balance *big.Int - Code []byte - } + var p []struct{ Addr, Balance *big.Int } if err := rlp.NewStream(strings.NewReader(data), 0).Decode(&p); err != nil { panic(err) } @@ -458,3 +459,18 @@ func decodePrealloc(data string) GenesisAlloc { } return ga } + +func readPrealloc(filename string) GenesisAlloc { + f, err := allocs.Open(filename) + if err != nil { + panic(fmt.Sprintf("Could not open genesis preallocation for %s: %v", filename, err)) + } + defer f.Close() + decoder := json.NewDecoder(f) + ga := make(GenesisAlloc) + err = decoder.Decode(&ga) + if err != nil { + panic(fmt.Sprintf("Could not parse genesis preallocation for %s: %v", filename, err)) + } + return ga +} diff --git a/go.mod b/go.mod index 56b0a97fd6..6de674fd7f 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/ethereum/go-ethereum -go 1.15 +go 1.16 require ( github.com/Azure/azure-pipeline-go v0.2.2 // indirect diff --git a/go.sum b/go.sum index bf559c2708..9b317fdeab 100644 --- a/go.sum +++ b/go.sum @@ -33,7 +33,6 @@ github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSW github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= @@ -407,7 +406,6 @@ github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPyS github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xsleonard/go-merkle v1.1.0 h1:fHe1fuhJjGH22ZzVTAH0jqHLhTGhOq3wQjJN+8P0jQg= github.com/xsleonard/go-merkle v1.1.0/go.mod h1:cW4z+UZ/4f2n9IJgIiyDCdYguchoDyDAPmpuOWGxdGg= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= diff --git a/params/config.go b/params/config.go index 2a442e9bfb..32bd91f55a 100644 --- a/params/config.go +++ b/params/config.go @@ -41,7 +41,6 @@ var TrustedCheckpoints = map[common.Hash]*TrustedCheckpoint{ RopstenGenesisHash: RopstenTrustedCheckpoint, RinkebyGenesisHash: RinkebyTrustedCheckpoint, GoerliGenesisHash: GoerliTrustedCheckpoint, - MumbaiGenesisHash: MumbaiTrustedCheckpoint, } // CheckpointOracles associates each known checkpoint oracles with the genesis hash of @@ -51,7 +50,6 @@ var CheckpointOracles = map[common.Hash]*CheckpointOracleConfig{ RopstenGenesisHash: RopstenCheckpointOracle, RinkebyGenesisHash: RinkebyCheckpointOracle, GoerliGenesisHash: GoerliCheckpointOracle, - MumbaiGenesisHash: MumbaiCheckpointOracle, } var ( @@ -249,27 +247,6 @@ var ( }, } - // MumbaiTrustedCheckpoint contains the light client trusted checkpoint for the Mumbai test network. - MumbaiTrustedCheckpoint = &TrustedCheckpoint{ - SectionIndex: 160, - SectionHead: common.HexToHash("0xb5a666c790dc35a5613d04ebba8ba47a850b45a15d9b95ad7745c35ae034b5a5"), - CHTRoot: common.HexToHash("0x6b4e00df52bdc38fa6c26c8ef595c2ad6184963ea36ab08ee744af460aa735e1"), - BloomRoot: common.HexToHash("0x8fa88f5e50190cb25243aeee262a1a9e4434a06f8d455885dcc1b5fc48c33836"), - } - - // MumbaiCheckpointOracle contains a set of configs for the Mumbai test network oracle. - MumbaiCheckpointOracle = &CheckpointOracleConfig{ - Address: common.HexToAddress("0x18CA0E045F0D772a851BC7e48357Bcaab0a0795D"), - Signers: []common.Address{ - common.HexToAddress("0x4769bcaD07e3b938B7f43EB7D278Bc7Cb9efFb38"), // Peter - common.HexToAddress("0x78d1aD571A1A09D60D9BBf25894b44e4C8859595"), // Martin - common.HexToAddress("0x286834935f4A8Cfb4FF4C77D5770C2775aE2b0E7"), // Zsolt - common.HexToAddress("0xb86e2B0Ab5A4B1373e40c51A7C712c70Ba2f9f8E"), // Gary - common.HexToAddress("0x0DF8fa387C602AE62559cC4aFa4972A7045d6707"), // Guillaume - }, - Threshold: 2, - } - // AllEthashProtocolChanges contains every protocol change (EIPs) introduced // and accepted by the Ethereum core developers into the Ethash consensus. // From 4edbd3179c62460fea5b90384807c9cf1d8d6fbf Mon Sep 17 00:00:00 2001 From: Krishna Upadhyaya Date: Wed, 1 Sep 2021 15:09:04 +0530 Subject: [PATCH 03/13] update: go version --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a79f2e547c..b55bfbdccb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,7 @@ jobs: - name: Install Go uses: actions/setup-go@v2.1.3 with: - go-version: 1.15.5 + go-version: 1.16.7 - name: "Build binaries" run: make all - name: "Run tests" From 2f40184dd192fc1e47b14b294559fae8705e5d83 Mon Sep 17 00:00:00 2001 From: Krishna Upadhyaya Date: Wed, 1 Sep 2021 15:15:34 +0530 Subject: [PATCH 04/13] cleanup: remove unused data --- core/genesis_alloc.go | 1 - 1 file changed, 1 deletion(-) diff --git a/core/genesis_alloc.go b/core/genesis_alloc.go index 293a29ad7a..ee542334b5 100644 --- a/core/genesis_alloc.go +++ b/core/genesis_alloc.go @@ -26,4 +26,3 @@ const ropstenAllocData = "\xf9\x03\xa4\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03 const rinkebyAllocData = "\xf9\x03\xb7\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xf6\x941\xb9\x8d\x14\x00{\xde\xe67)\x80\x86\x98\x8a\v\xbd1\x18E#\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" const goerliAllocData = "\xf9\x04\x06\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xe0\x94L*\xe4\x82Y5\x05\xf0\x16<\xde\xfc\a>\x81\xc6<\xdaA\a\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe0\x94\xa8\xe8\xf1G2e\x8eKQ\xe8q\x191\x05:\x8ai\xba\xf2\xb1\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe1\x94\u0665\x17\x9f\t\x1d\x85\x05\x1d<\x98'\x85\xef\xd1E\\\uc199\x8b\bE\x95\x16\x14\x01HJ\x00\x00\x00\xe1\x94\u08bdBX\xd2v\x887\xba\xa2j(\xfeq\xdc\a\x9f\x84\u01cbJG\xe3\xc1$H\xf4\xad\x00\x00\x00" const calaverasAllocData = "\xf9\x06\x14\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xf6\x94\x0e\x89\xe2\xae\xdb\x1c\xfc\u06d4$\xd4\x1a\x1f!\x8fA2s\x81r\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\x10A\xaf\xbc\xb3Y\u0568\xdcX\xc1[/\xf5\x13T\xff\x8a!}\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94#o\xf1\xe9t\x19\xae\x93\xad\x80\xca\xfb\xaa!\"\f]x\xfb}\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94`\xad\xc0\xf8\x9aA\xaf#|\xe75T\xed\xe1p\xd73\xec\x14\xe0\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94y\x9d2\x9e_X4\x19\x16|\xd7\"\x96$\x85\x92n3\x8fJ\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94|\xf5\xb7\x9b\xfe)\x1ag\xab\x02\xb3\x93\xe4V\xcc\xc4\xc2f\xf7S\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\x8a\x8e\xaf\xb1\xcfb\xbf\xbe\xb1t\x17i\xda\xe1\xa9\xddG\x99a\x92\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\x8b\xa1\xf1\tU\x1b\xd42\x800\x12dZ\xc16\xdd\xd6M\xbar\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xb0*.\xda\x1b1\u007f\xbd\x16v\x01(\x83k\n\u015bV\x0e\x9d\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xba\xdc\r\xe9\xe0yK\x04\x9b^\xa6<>\x1ei\x8a4v\xc1r\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xf00\v\ue24a\xe2r\xeb4~\x83i\xac\fv\xdfB\xc9?\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xfe;U~\x8f\xb6+\x89\xf4\x91kr\x1b\xe5\\\ub08d\xbds\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" -const mumbaiAllocData = "\xf9`\xfd\xf97\"\x82\x10\x00\x80\xb97\x1b`\x80`@R4\x80\x15a\x00\x10W`\x00\x80\xfd[P`\x046\x10a\x01\xf0W`\x005`\xe0\x1c\x80c`\xc8aM\x11a\x01\x0fW\x80c\xaf&\xaa\x96\x11a\x00\xa2W\x80c\u0578D\xeb\x11a\x00qW\x80c\u0578D\xeb\x14a\x06fW\x80c\xdc\xf2y:\x14a\x06\x84W\x80c\xe3\xb7\xc9$\x14a\x06\xb6W\x80c\xf5\x9c\xf5e\x14a\x06\xd4Wa\x01\xf0V[\x80c\xaf&\xaa\x96\x14a\x05\xc7W\x80c\xb7\x1dzi\x14a\x05\xe7W\x80c\xb7\xabM\xb5\x14a\x06\x17W\x80c\xc1\xb3\xc9\x19\x14a\x066Wa\x01\xf0V[\x80cp\xbaW\a\x11a\x00\xdeW\x80cp\xbaW\a\x14a\x05+W\x80c\x98\xab+b\x14a\x05[W\x80c\x9d\x11\xb8\a\x14a\x05yW\x80c\xaeudQ\x14a\x05\xa9Wa\x01\xf0V[\x80c`\xc8aM\x14a\x04\x9cW\x80ce\xb3\xa1\xe2\x14a\x04\xbcW\x80cf3#T\x14a\x04\xdbW\x80chz\x9b\xd6\x14a\x04\xf9Wa\x01\xf0V[\x80c44s_\x11a\x01\x87W\x80cD\xd6R\x8f\x11a\x01VW\x80cD\xd6R\x8f\x14a\x03\xeeW\x80cM\xbc\x95\x9f\x14a\x04\x1eW\x80cUaO\xcc\x14a\x04=`\x00\xfd[PPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RPa\x12\xff\x91\x90\x81\x01\x90a*XV[\x90P\x92\x91PPV[`\x00```\x00\x80\x84\x81R` \x01\x90\x81R` \x01`\x00 \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01`\x00\x90[\x82\x82\x10\x15a\x13\xd9W\x83\x82\x90`\x00R` `\x00 \x90`\x03\x02\x01`@Q\x80``\x01`@R\x90\x81`\x00\x82\x01T\x81R` \x01`\x01\x82\x01T\x81R` \x01`\x02\x82\x01`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81RPP\x81R` \x01\x90`\x01\x01\x90a\x13=V[PPPP\x90P`\x00\x80\x90P`\x00\x80\x90P[\x82Q\x81\x10\x15a\x14,Wa\x14\x1d\x83\x82\x81Q\x81\x10a\x14\x02W\xfe[` \x02` \x01\x01Q` \x01Q\x83a\"\xac\x90\x91\x90c\xff\xff\xff\xff\x16V[\x91P\x80\x80`\x01\x01\x91PPa\x13\xeaV[P\x80\x92PPP\x91\x90PV[s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x81V[`\x00\x80`\x00\x80\x85\x90P`\x00`!\x80\x87Q\x81a\x14fW\xfe[\x04\x02\x90P`\x00\x81\x11\x15a\x14\u007fWa\x14|\x87a\x17\xabV[\x91P[`\x00`!\x90P[\x81\x81\x11a\x15\tW`\x00`\x01\x82\x03\x88\x01Q\x90P\x81\x88\x01Q\x95P\x80`\x00` \x81\x10a\x14\xabW\xfe[\x1a`\xf8\x1b\x94P`\x00`\xf8\x1b\x85~\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x16\x14\x15a\x14\xf0Wa\x14\u9185a\x12\x86V[\x93Pa\x14\xfdV[a\x14\xfa\x84\x87a\x12\x86V[\x93P[P`!\x81\x01\x90Pa\x14\x86V[P\x87\x82\x14\x94PPPPP\x93\x92PPPV[`@Qa\x15&\x90a2TV[`@Q\x80\x91\x03\x90 \x81V[`\x00\x80`\x00\x90P`\x00\x80\x90P`\x00\x80\x90P[\x84Q\x81g\xff\xff\xff\xff\xff\xff\xff\xff\x16\x10\x15a\x16\fW``a\x15n\x86\x83g\xff\xff\xff\xff\xff\xff\xff\xff\x16`Aa$jV[\x90P`\x00a\x15\x85\x82\x89a$\xf6\x90\x91\x90c\xff\xff\xff\xff\x16V[\x90Pa\x15\x8fa(2V[a\x15\x99\x8a\x83a\x16\x19V[\x90Pa\x15\xa5\x8a\x83a\x11*V[\x80\x15a\x15\xdcWP\x84s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x11[\x15a\x15\xfeW\x81\x94Pa\x15\xfb\x81` \x01Q\x87a\"\xac\x90\x91\x90c\xff\xff\xff\xff\x16V[\x95P[PPP`A\x81\x01\x90Pa\x15CV[P\x81\x92PPP\x93\x92PPPV[a\x16!a(2V[```\x00\x80\x85\x81R` \x01\x90\x81R` \x01`\x00 \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01`\x00\x90[\x82\x82\x10\x15a\x16\xf1W\x83\x82\x90`\x00R` `\x00 \x90`\x03\x02\x01`@Q\x80``\x01`@R\x90\x81`\x00\x82\x01T\x81R` \x01`\x01\x82\x01T\x81R` \x01`\x02\x82\x01`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81RPP\x81R` \x01\x90`\x01\x01\x90a\x16UV[PPPP\x90P`\x00\x80\x90P[\x81Q\x81\x10\x15a\x17yW\x83s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x82\x82\x81Q\x81\x10a\x17)W\xfe[` \x02` \x01\x01Q`@\x01Qs\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x14\x15a\x17lW\x81\x81\x81Q\x81\x10a\x17]W\xfe[` \x02` \x01\x01Q\x92Pa\x17yV[\x80\x80`\x01\x01\x91PPa\x16\xfdV[PP\x92\x91PPV[`\x00a\x17\x8cCa\x1d\xb1V[\x90P\x90V[`\x00a\x17\xa4a\x17\x9ea\x17\x81V[\x83a\x11*V[\x90P\x91\x90PV[`\x00`\x02`\x00`\xf8\x1b\x83`@Q` \x01a\x17\u0192\x91\x90a1\xaaV[`@Q` \x81\x83\x03\x03\x81R\x90`@R`@Qa\x17\u2450a2\x13V[` `@Q\x80\x83\x03\x81\x85Z\xfa\x15\x80\x15a\x17\xffW=`\x00\x80>=`\x00\xfd[PPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RPa\x18\"\x91\x90\x81\x01\x90a*XV[\x90P\x91\x90PV[`\x00\x80`\x00\x80a\x18J`\x01a\x18=`\x00\xfd[PPP` `@Q\x03Q\x90P`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x14\x15a%\xf2W`\x00\x80\xfd[\x80\x94PPPPP[\x92\x91PPV[`\x00\x80\x82`\x00\x01Q\x14\x15a&\x17W`\x00\x90Pa&IV[`\x00\x80\x83` \x01Q\x90P\x80Q`\x00\x1a\x91P`\xc0`\xff\x16\x82`\xff\x16\x10\x15a&BW`\x00\x92PPPa&IV[`\x01\x92PPP[\x91\x90PV[`\x00\x80\x82`\x00\x01Q\x14\x15a&eW`\x00\x90Pa&\xbaV[`\x00\x80\x90P`\x00a&y\x84` \x01Qa&\xbfV[\x84` \x01Q\x01\x90P`\x00\x84`\x00\x01Q\x85` \x01Q\x01\x90P[\x80\x82\x10\x15a&\xb3Wa&\xa2\x82a'HV[\x82\x01\x91P\x82\x80`\x01\x01\x93PPa&\x91V[\x82\x93PPPP[\x91\x90PV[`\x00\x80\x82Q`\x00\x1a\x90P`\x80`\xff\x16\x81\x10\x15a&\xdfW`\x00\x91PPa'CV[`\xb8`\xff\x16\x81\x10\x80a'\x04WP`\xc0`\xff\x16\x81\x10\x15\x80\x15a'\x03WP`\xf8`\xff\x16\x81\x10[[\x15a'\x13W`\x01\x91PPa'CV[`\xc0`\xff\x16\x81\x10\x15a'3W`\x01\x80`\xb8\x03`\xff\x16\x82\x03\x01\x91PPa'CV[`\x01\x80`\xf8\x03`\xff\x16\x82\x03\x01\x91PP[\x91\x90PV[`\x00\x80`\x00\x83Q`\x00\x1a\x90P`\x80`\xff\x16\x81\x10\x15a'iW`\x01\x91Pa'\xf6V[`\xb8`\xff\x16\x81\x10\x15a'\x86W`\x01`\x80`\xff\x16\x82\x03\x01\x91Pa'\xf5V[`\xc0`\xff\x16\x81\x10\x15a'\xb6W`\xb7\x81\x03`\x01\x85\x01\x94P\x80` \x03a\x01\x00\n\x85Q\x04`\x01\x82\x01\x81\x01\x93PPPa'\xf4V[`\xf8`\xff\x16\x81\x10\x15a'\xd3W`\x01`\xc0`\xff\x16\x82\x03\x01\x91Pa'\xf3V[`\xf7\x81\x03`\x01\x85\x01\x94P\x80` \x03a\x01\x00\n\x85Q\x04`\x01\x82\x01\x81\x01\x93PPP[[[[\x81\x92PPP\x91\x90PV[\x81T\x81\x83U\x81\x81\x11\x15a(-W`\x03\x02\x81`\x03\x02\x83`\x00R` `\x00 \x91\x82\x01\x91\x01a(,\x91\x90a(\xbeV[[PPPV[`@Q\x80``\x01`@R\x80`\x00\x81R` \x01`\x00\x81R` \x01`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81RP\x90V[`@Q\x80``\x01`@R\x80`\x00\x81R` \x01`\x00\x81R` \x01`\x00\x81RP\x90V[`@Q\x80`@\x01`@R\x80`\x00\x81R` \x01`\x00\x81RP\x90V[`@Q\x80`@\x01`@R\x80`\x00\x81R` \x01`\x00\x81RP\x90V[a)\x11\x91\x90[\x80\x82\x11\x15a)\rW`\x00\x80\x82\x01`\x00\x90U`\x01\x82\x01`\x00\x90U`\x02\x82\x01`\x00a\x01\x00\n\x81T\x90s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02\x19\x16\x90UP`\x03\x01a(\xc4V[P\x90V[\x90V[`\x00\x815\x90Pa)#\x81a6\x93V[\x92\x91PPV[`\x00\x815\x90Pa)8\x81a6\xaaV[\x92\x91PPV[`\x00\x81Q\x90Pa)M\x81a6\xaaV[\x92\x91PPV[`\x00\x80\x83`\x1f\x84\x01\x12a)eW`\x00\x80\xfd[\x825\x90Pg\xff\xff\xff\xff\xff\xff\xff\xff\x81\x11\x15a)~W`\x00\x80\xfd[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15a)\x96W`\x00\x80\xfd[\x92P\x92\x90PV[`\x00\x82`\x1f\x83\x01\x12a)\xaeW`\x00\x80\xfd[\x815a)\xc1a)\xbc\x82a4\xe2V[a4\xb5V[\x91P\x80\x82R` \x83\x01` \x83\x01\x85\x83\x83\x01\x11\x15a)\xddW`\x00\x80\xfd[a)\u80c2\x84a6=V[PPP\x92\x91PPV[`\x00\x815\x90Pa*\x00\x81a6\xc1V[\x92\x91PPV[`\x00` \x82\x84\x03\x12\x15a*\x18W`\x00\x80\xfd[`\x00a*&\x84\x82\x85\x01a)\x14V[\x91PP\x92\x91PPV[`\x00` \x82\x84\x03\x12\x15a*AW`\x00\x80\xfd[`\x00a*O\x84\x82\x85\x01a))V[\x91PP\x92\x91PPV[`\x00` \x82\x84\x03\x12\x15a*jW`\x00\x80\xfd[`\x00a*x\x84\x82\x85\x01a)>V[\x91PP\x92\x91PPV[`\x00\x80`@\x83\x85\x03\x12\x15a*\x94W`\x00\x80\xfd[`\x00a*\xa2\x85\x82\x86\x01a))V[\x92PP` a*\xb3\x85\x82\x86\x01a))V[\x91PP\x92P\x92\x90PV[`\x00\x80`\x00``\x84\x86\x03\x12\x15a*\xd2W`\x00\x80\xfd[`\x00a*\xe0\x86\x82\x87\x01a))V[\x93PP` a*\U00046087\x01a))V[\x92PP`@\x84\x015g\xff\xff\xff\xff\xff\xff\xff\xff\x81\x11\x15a+\x0eW`\x00\x80\xfd[a+\x1a\x86\x82\x87\x01a)\x9dV[\x91PP\x92P\x92P\x92V[`\x00` \x82\x84\x03\x12\x15a+6W`\x00\x80\xfd[`\x00a+D\x84\x82\x85\x01a)\xf1V[\x91PP\x92\x91PPV[`\x00\x80`@\x83\x85\x03\x12\x15a+`W`\x00\x80\xfd[`\x00a+n\x85\x82\x86\x01a)\xf1V[\x92PP` a+\u007f\x85\x82\x86\x01a)\x14V[\x91PP\x92P\x92\x90PV[`\x00\x80`\x00``\x84\x86\x03\x12\x15a+\x9eW`\x00\x80\xfd[`\x00a+\xac\x86\x82\x87\x01a)\xf1V[\x93PP` a+\xbd\x86\x82\x87\x01a))V[\x92PP`@\x84\x015g\xff\xff\xff\xff\xff\xff\xff\xff\x81\x11\x15a+\xdaW`\x00\x80\xfd[a+\u6182\x87\x01a)\x9dV[\x91PP\x92P\x92P\x92V[`\x00\x80`@\x83\x85\x03\x12\x15a,\x03W`\x00\x80\xfd[`\x00a,\x11\x85\x82\x86\x01a)\xf1V[\x92PP` a,\"\x85\x82\x86\x01a)\xf1V[\x91PP\x92P\x92\x90PV[`\x00\x80`\x00\x80`\x00\x80`\x00`\xa0\x88\x8a\x03\x12\x15a,GW`\x00\x80\xfd[`\x00a,U\x8a\x82\x8b\x01a)\xf1V[\x97PP` a,f\x8a\x82\x8b\x01a)\xf1V[\x96PP`@a,w\x8a\x82\x8b\x01a)\xf1V[\x95PP``\x88\x015g\xff\xff\xff\xff\xff\xff\xff\xff\x81\x11\x15a,\x94W`\x00\x80\xfd[a,\xa0\x8a\x82\x8b\x01a)SV[\x94P\x94PP`\x80\x88\x015g\xff\xff\xff\xff\xff\xff\xff\xff\x81\x11\x15a,\xbfW`\x00\x80\xfd[a,\u02ca\x82\x8b\x01a)SV[\x92P\x92PP\x92\x95\x98\x91\x94\x97P\x92\x95PV[`\x00a,\u80c3a-\fV[` \x83\x01\x90P\x92\x91PPV[`\x00a-\x00\x83\x83a1}V[` \x83\x01\x90P\x92\x91PPV[a-\x15\x81a5\xb2V[\x82RPPV[a-$\x81a5\xb2V[\x82RPPV[`\x00a-5\x82a5.V[a-?\x81\x85a5iV[\x93Pa-J\x83a5\x0eV[\x80`\x00[\x83\x81\x10\x15a-{W\x81Qa-b\x88\x82a,\xdcV[\x97Pa-m\x83a5OV[\x92PP`\x01\x81\x01\x90Pa-NV[P\x85\x93PPPP\x92\x91PPV[`\x00a-\x93\x82a59V[a-\x9d\x81\x85a5zV[\x93Pa-\xa8\x83a5\x1eV[\x80`\x00[\x83\x81\x10\x15a-\xd9W\x81Qa-\xc0\x88\x82a,\xf4V[\x97Pa-\u02c3a5\\V[\x92PP`\x01\x81\x01\x90Pa-\xacV[P\x85\x93PPPP\x92\x91PPV[a-\xef\x81a5\xc4V[\x82RPPV[a.\x06a.\x01\x82a5\xd0V[a6\u007fV[\x82RPPV[a.\x15\x81a5\xfcV[\x82RPPV[a.,a.'\x82a5\xfcV[a6\x89V[\x82RPPV[`\x00a.=\x82a5DV[a.G\x81\x85a5\x8bV[\x93Pa.W\x81\x85` \x86\x01a6LV[\x80\x84\x01\x91PP\x92\x91PPV[`\x00a.p`\x04\x83a5\xa7V[\x91P\u007fvote\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x83\x01R`\x04\x82\x01\x90P\x91\x90PV[`\x00a.\xb0`-\x83a5\x96V[\x91P\u007fStart block must be greater than`\x00\x83\x01R\u007f current span\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00` \x83\x01R`@\x82\x01\x90P\x91\x90PV[`\x00a/\x16`\x0f\x83a5\x96V[\x91P\u007fInvalid span id\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x83\x01R` \x82\x01\x90P\x91\x90PV[`\x00a/V`\x13\x83a5\x96V[\x91P\u007fSpan already exists\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x83\x01R` \x82\x01\x90P\x91\x90PV[`\x00a/\x96`E\x83a5\x96V[\x91P\u007fDifference between start and end`\x00\x83\x01R\u007f block must be in multiples of s` \x83\x01R\u007fprint\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`@\x83\x01R``\x82\x01\x90P\x91\x90PV[`\x00a0\"`*\x83a5\x96V[\x91P\u007fEnd block must be greater than s`\x00\x83\x01R\u007ftart block\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00` \x83\x01R`@\x82\x01\x90P\x91\x90PV[`\x00a0\x88`\x12\x83a5\x96V[\x91P\u007fNot System Addess!\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x83\x01R` \x82\x01\x90P\x91\x90PV[`\x00a0\xc8`\x05\x83a5\xa7V[\x91P\u007f80001\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x83\x01R`\x05\x82\x01\x90P\x91\x90PV[`\x00a1\b`\x0e\x83a5\xa7V[\x91P\u007fheimdall-80001\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x83\x01R`\x0e\x82\x01\x90P\x91\x90PV[``\x82\x01`\x00\x82\x01Qa1Q`\x00\x85\x01\x82a1}V[P` \x82\x01Qa1d` \x85\x01\x82a1}V[P`@\x82\x01Qa1w`@\x85\x01\x82a-\fV[PPPPV[a1\x86\x81a6&V[\x82RPPV[a1\x95\x81a6&V[\x82RPPV[a1\xa4\x81a60V[\x82RPPV[`\x00a1\xb6\x82\x85a-\xf5V[`\x01\x82\x01\x91Pa1\u0182\x84a.\x1bV[` \x82\x01\x91P\x81\x90P\x93\x92PPPV[`\x00a1\u2086a-\xf5V[`\x01\x82\x01\x91Pa1\xf2\x82\x85a.\x1bV[` \x82\x01\x91Pa2\x02\x82\x84a.\x1bV[` \x82\x01\x91P\x81\x90P\x94\x93PPPPV[`\x00a2\x1f\x82\x84a.2V[\x91P\x81\x90P\x92\x91PPV[`\x00a25\x82a.cV[\x91P\x81\x90P\x91\x90PV[`\x00a2J\x82a0\xbbV[\x91P\x81\x90P\x91\x90PV[`\x00a2_\x82a0\xfbV[\x91P\x81\x90P\x91\x90PV[`\x00` \x82\x01\x90Pa2~`\x00\x83\x01\x84a-\x1bV[\x92\x91PPV[`\x00`@\x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra2\x9e\x81\x85a-*V[\x90P\x81\x81\x03` \x83\x01Ra2\xb2\x81\x84a-\x88V[\x90P\x93\x92PPPV[`\x00` \x82\x01\x90Pa2\xd0`\x00\x83\x01\x84a-\xe6V[\x92\x91PPV[`\x00` \x82\x01\x90Pa2\xeb`\x00\x83\x01\x84a.\fV[\x92\x91PPV[`\x00`\x80\x82\x01\x90Pa3\x06`\x00\x83\x01\x87a.\fV[a3\x13` \x83\x01\x86a1\x9bV[a3 `@\x83\x01\x85a.\fV[a3-``\x83\x01\x84a.\fV[\x95\x94PPPPPV[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra3O\x81a.\xa3V[\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra3o\x81a/\tV[\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra3\x8f\x81a/IV[\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra3\xaf\x81a/\x89V[\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra3\u03c1a0\x15V[\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra3\xef\x81a0{V[\x90P\x91\x90PV[`\x00``\x82\x01\x90Pa4\v`\x00\x83\x01\x84a1;V[\x92\x91PPV[`\x00` \x82\x01\x90Pa4&`\x00\x83\x01\x84a1\x8cV[\x92\x91PPV[`\x00``\x82\x01\x90Pa4A`\x00\x83\x01\x86a1\x8cV[a4N` \x83\x01\x85a1\x8cV[a4[`@\x83\x01\x84a-\x1bV[\x94\x93PPPPV[`\x00``\x82\x01\x90Pa4x`\x00\x83\x01\x86a1\x8cV[a4\x85` \x83\x01\x85a1\x8cV[a4\x92`@\x83\x01\x84a1\x8cV[\x94\x93PPPPV[`\x00` \x82\x01\x90Pa4\xaf`\x00\x83\x01\x84a1\x9bV[\x92\x91PPV[`\x00`@Q\x90P\x81\x81\x01\x81\x81\x10g\xff\xff\xff\xff\xff\xff\xff\xff\x82\x11\x17\x15a4\xd8W`\x00\x80\xfd[\x80`@RP\x91\x90PV[`\x00g\xff\xff\xff\xff\xff\xff\xff\xff\x82\x11\x15a4\xf9W`\x00\x80\xfd[`\x1f\x19`\x1f\x83\x01\x16\x90P` \x81\x01\x90P\x91\x90PV[`\x00\x81\x90P` \x82\x01\x90P\x91\x90PV[`\x00\x81\x90P` \x82\x01\x90P\x91\x90PV[`\x00\x81Q\x90P\x91\x90PV[`\x00\x81Q\x90P\x91\x90PV[`\x00\x81Q\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x91\x90PV[`\x00\x82\x82R` \x82\x01\x90P\x92\x91PPV[`\x00\x82\x82R` \x82\x01\x90P\x92\x91PPV[`\x00\x81\x90P\x92\x91PPV[`\x00\x82\x82R` \x82\x01\x90P\x92\x91PPV[`\x00\x81\x90P\x92\x91PPV[`\x00a5\xbd\x82a6\x06V[\x90P\x91\x90PV[`\x00\x81\x15\x15\x90P\x91\x90PV[`\x00\u007f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x16\x90P\x91\x90PV[`\x00\x81\x90P\x91\x90PV[`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x82\x16\x90P\x91\x90PV[`\x00\x81\x90P\x91\x90PV[`\x00`\xff\x82\x16\x90P\x91\x90PV[\x82\x81\x837`\x00\x83\x83\x01RPPPV[`\x00[\x83\x81\x10\x15a6jW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa6OV[\x83\x81\x11\x15a6yW`\x00\x84\x84\x01R[PPPPV[`\x00\x81\x90P\x91\x90PV[`\x00\x81\x90P\x91\x90PV[a6\x9c\x81a5\xb2V[\x81\x14a6\xa7W`\x00\x80\xfd[PV[a6\xb3\x81a5\xfcV[\x81\x14a6\xbeW`\x00\x80\xfd[PV[a6\u0281a6&V[\x81\x14a6\xd5W`\x00\x80\xfd[PV\xfe\xa3ebzzr1X \x8fR\xee\ac\x0f\xfeR<\u01ad>\x15\xf47\xf9s\xdc\xfa6r\x9c\u0597\xf9\xb0\xfcJ\x14ZH\xf0lexperimental\xf5dsolcC\x00\x05\v\x00@\xf9\t\xb3\x82\x10\x01\x80\xb9\t\xac`\x80`@R4\x80\x15a\x00\x10W`\x00\x80\xfd[P`\x046\x10a\x00AW`\x005`\xe0\x1c\x80c\x19IJ\x17\x14a\x00FW\x80c44s_\x14a\x00\xe1W\x80cT\a\xcag\x14a\x01+W[`\x00\x80\xfd[a\x00\xc7`\x04\x806\x03`@\x81\x10\x15a\x00\\W`\x00\x80\xfd[\x81\x01\x90\x80\x805\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90d\x01\x00\x00\x00\x00\x81\x11\x15a\x00\x83W`\x00\x80\xfd[\x82\x01\x83` \x82\x01\x11\x15a\x00\x95W`\x00\x80\xfd[\x805\x90` \x01\x91\x84`\x01\x83\x02\x84\x01\x11d\x01\x00\x00\x00\x00\x83\x11\x17\x15a\x00\xb7W`\x00\x80\xfd[\x90\x91\x92\x93\x91\x92\x93\x90PPPa\x01IV[`@Q\x80\x82\x15\x15\x15\x15\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[a\x00\xe9a\x04zV[`@Q\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[a\x013a\x04\x92V[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfes\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x163s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x14a\x02\x00W`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`\x12\x81R` \x01\x80\u007fNot System Addess!\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP` \x01\x91PP`@Q\x80\x91\x03\x90\xfd[``a\x02Wa\x02R\x85\x85\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\x00\x81\x84\x01R`\x1f\x19`\x1f\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa\x04\x98V[a\x04\xc6V[\x90P`\x00a\x02x\x82`\x00\x81Q\x81\x10a\x02kW\xfe[` \x02` \x01\x01Qa\x05\xa3V[\x90P\x80`\x01`\x00T\x01\x14a\x02\xf4W`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`\x1b\x81R` \x01\x80\u007fStateIds are not sequential\x00\x00\x00\x00\x00\x81RP` \x01\x91PP`@Q\x80\x91\x03\x90\xfd[`\x00\x80\x81T\x80\x92\x91\x90`\x01\x01\x91\x90PUP`\x00a\x03$\x83`\x01\x81Q\x81\x10a\x03\x17W\xfe[` \x02` \x01\x01Qa\x06\x14V[\x90P``a\x03E\x84`\x02\x81Q\x81\x10a\x038W\xfe[` \x02` \x01\x01Qa\x067V[\x90Pa\x03P\x82a\x06\xc3V[\x15a\x04oW`\x00bLK@\x90P``\x84\x83`@Q`$\x01\x80\x83\x81R` \x01\x80` \x01\x82\x81\x03\x82R\x83\x81\x81Q\x81R` \x01\x91P\x80Q\x90` \x01\x90\x80\x83\x83`\x00[\x83\x81\x10\x15a\x03\xaaW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa\x03\x8fV[PPPP\x90P\x90\x81\x01\x90`\x1f\x16\x80\x15a\x03\xd7W\x80\x82\x03\x80Q`\x01\x83` \x03a\x01\x00\n\x03\x19\x16\x81R` \x01\x91P[P\x93PPPP`@Q` \x81\x83\x03\x03\x81R\x90`@R\u007f&\xc5;\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00{\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x16` \x82\x01\x80Q{\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x81\x83\x16\x17\x83RPPPP\x90P`\x00\x80\x82Q` \x84\x01`\x00\x88\x87\xf1\x96PPP[PPPP\x93\x92PPPV[s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x81V[`\x00T\x81V[a\x04\xa0a\tCV[`\x00` \x83\x01\x90P`@Q\x80`@\x01`@R\x80\x84Q\x81R` \x01\x82\x81RP\x91PP\x91\x90PV[``a\x04\u0442a\x06\xdcV[a\x04\xdaW`\x00\x80\xfd[`\x00a\x04\xe5\x83a\a*V[\x90P``\x81`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x05#W\x81` \x01[a\x05\x10a\t]V[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x05\bW\x90P[P\x90P`\x00a\x055\x85` \x01Qa\a\x9bV[\x85` \x01Q\x01\x90P`\x00\x80`\x00\x90P[\x84\x81\x10\x15a\x05\x96Wa\x05V\x83a\b$V[\x91P`@Q\x80`@\x01`@R\x80\x83\x81R` \x01\x84\x81RP\x84\x82\x81Q\x81\x10a\x05yW\xfe[` \x02` \x01\x01\x81\x90RP\x81\x83\x01\x92P\x80\x80`\x01\x01\x91PPa\x05EV[P\x82\x94PPPPP\x91\x90PV[`\x00\x80\x82`\x00\x01Q\x11\x80\x15a\x05\xbdWP`!\x82`\x00\x01Q\x11\x15[a\x05\xc6W`\x00\x80\xfd[`\x00a\x05\u0543` \x01Qa\a\x9bV[\x90P`\x00\x81\x84`\x00\x01Q\x03\x90P`\x00\x80\x83\x86` \x01Q\x01\x90P\x80Q\x91P` \x83\x10\x15a\x06\bW\x82` \x03a\x01\x00\n\x82\x04\x91P[\x81\x94PPPPP\x91\x90PV[`\x00`\x15\x82`\x00\x01Q\x14a\x06'W`\x00\x80\xfd[a\x060\x82a\x05\xa3V[\x90P\x91\x90PV[```\x00\x82`\x00\x01Q\x11a\x06JW`\x00\x80\xfd[`\x00a\x06Y\x83` \x01Qa\a\x9bV[\x90P`\x00\x81\x84`\x00\x01Q\x03\x90P``\x81`@Q\x90\x80\x82R\x80`\x1f\x01`\x1f\x19\x16` \x01\x82\x01`@R\x80\x15a\x06\x9bW\x81` \x01`\x01\x82\x02\x808\x839\x80\x82\x01\x91PP\x90P[P\x90P`\x00\x81` \x01\x90Pa\x06\xb7\x84\x87` \x01Q\x01\x82\x85a\b\xdcV[\x81\x94PPPPP\x91\x90PV[`\x00\x80\x82;\x90P`\x00\x81c\xff\xff\xff\xff\x16\x11\x91PP\x91\x90PV[`\x00\x80\x82`\x00\x01Q\x14\x15a\x06\xf3W`\x00\x90Pa\a%V[`\x00\x80\x83` \x01Q\x90P\x80Q`\x00\x1a\x91P`\xc0`\xff\x16\x82`\xff\x16\x10\x15a\a\x1eW`\x00\x92PPPa\a%V[`\x01\x92PPP[\x91\x90PV[`\x00\x80\x82`\x00\x01Q\x14\x15a\aAW`\x00\x90Pa\a\x96V[`\x00\x80\x90P`\x00a\aU\x84` \x01Qa\a\x9bV[\x84` \x01Q\x01\x90P`\x00\x84`\x00\x01Q\x85` \x01Q\x01\x90P[\x80\x82\x10\x15a\a\x8fWa\a~\x82a\b$V[\x82\x01\x91P\x82\x80`\x01\x01\x93PPa\amV[\x82\x93PPPP[\x91\x90PV[`\x00\x80\x82Q`\x00\x1a\x90P`\x80`\xff\x16\x81\x10\x15a\a\xbbW`\x00\x91PPa\b\x1fV[`\xb8`\xff\x16\x81\x10\x80a\a\xe0WP`\xc0`\xff\x16\x81\x10\x15\x80\x15a\a\xdfWP`\xf8`\xff\x16\x81\x10[[\x15a\a\xefW`\x01\x91PPa\b\x1fV[`\xc0`\xff\x16\x81\x10\x15a\b\x0fW`\x01\x80`\xb8\x03`\xff\x16\x82\x03\x01\x91PPa\b\x1fV[`\x01\x80`\xf8\x03`\xff\x16\x82\x03\x01\x91PP[\x91\x90PV[`\x00\x80`\x00\x83Q`\x00\x1a\x90P`\x80`\xff\x16\x81\x10\x15a\bEW`\x01\x91Pa\b\xd2V[`\xb8`\xff\x16\x81\x10\x15a\bbW`\x01`\x80`\xff\x16\x82\x03\x01\x91Pa\b\xd1V[`\xc0`\xff\x16\x81\x10\x15a\b\x92W`\xb7\x81\x03`\x01\x85\x01\x94P\x80` \x03a\x01\x00\n\x85Q\x04`\x01\x82\x01\x81\x01\x93PPPa\b\xd0V[`\xf8`\xff\x16\x81\x10\x15a\b\xafW`\x01`\xc0`\xff\x16\x82\x03\x01\x91Pa\b\xcfV[`\xf7\x81\x03`\x01\x85\x01\x94P\x80` \x03a\x01\x00\n\x85Q\x04`\x01\x82\x01\x81\x01\x93PPP[[[[\x81\x92PPP\x91\x90PV[`\x00\x81\x14\x15a\b\xeaWa\t>V[[` `\xff\x16\x81\x10a\t\x1aW\x82Q\x82R` `\xff\x16\x83\x01\x92P` `\xff\x16\x82\x01\x91P` `\xff\x16\x81\x03\x90Pa\b\xebV[`\x00`\x01\x82` `\xff\x16\x03a\x01\x00\n\x03\x90P\x80\x19\x84Q\x16\x81\x84Q\x16\x81\x81\x17\x85RPPP[PPPV[`@Q\x80`@\x01`@R\x80`\x00\x81R` \x01`\x00\x81RP\x90V[`@Q\x80`@\x01`@R\x80`\x00\x81R` \x01`\x00\x81RP\x90V\xfe\xa2ebzzr1X \x83\xfb\xda\xcbv\xf3+A\x12\xd0\xf7\u06daYi7\x92X$y\x8a\x00&\xba\x0222#\x90\xb5&7dsolcC\x00\x05\v\x002\xf9\x1fz\x82\x10\x10\x8c O\xcdO14\x9d\x83\xb6\xe0\x00\x00\xb9\x1fg`\x80`@R`\x046\x10a\x01\x9cW`\x005`\xe0\x1c\x80cw\xd3.\x94\x11a\x00\xecW\x80c\xac\xd0l\xb3\x11a\x00\x8aW\x80c\xe3\x06\xf7y\x11a\x00dW\x80c\xe3\x06\xf7y\x14a\n{W\x80c\xe6\x14\xd0\xd6\x14a\n\xa6W\x80c\xf2\xfd\xe3\x8b\x14a\n\xd1W\x80c\xfc\fTj\x14a\v\"Wa\x01\x9cV[\x80c\xac\xd0l\xb3\x14a\tzW\x80c\xb7\x89T<\x14a\t\xcdW\x80c\xccy\xf9{\x14a\nPWa\x01\x9cV[\x80c\x90%\xe6L\x11a\x00\xc6W\x80c\x90%\xe6L\x14a\a\xc9W\x80c\x95\u061bA\x14a\bYW\x80c\xa9\x05\x9c\xbb\x14a\b\xe9W\x80c\xab\xce\xeb\xa2\x14a\tOWa\x01\x9cV[\x80cw\xd3.\x94\x14a\x061W\x80c\x8d\xa5\xcb[\x14a\aCW\x80c\x8f2\u055b\x14a\a\x9aWa\x01\x9cV[\x80cG\xe7\xef$\x11a\x01YW\x80cp\x19\xd4\x1a\x11a\x013W\x80cp\x19\xd4\x1a\x14a\x053W\x80cp\xa0\x821\x14a\x05\x8aW\x80cqP\x18\xa6\x14a\x05\xefW\x80cw\x12\x82\xf6\x14a\x06\x06Wa\x01\x9cV[\x80cG\xe7\xef$\x14a\x04\x10W\x80cH\\\xc9U\x14a\x04kW\x80c`\xf9j\x8f\x14a\x04\xdcWa\x01\x9cV[\x80c\x06\xfd\xde\x03\x14a\x01\xa1W\x80c\x14\x99\u0152\x14a\x021W\x80c\x18\x16\r\xdd\x14a\x02\x82W\x80c\x19\xd2}\x9c\x14a\x02\xadW\x80c.\x1a}M\x14a\x03\xb1W\x80c1<\xe5g\x14a\x03\xdfW[`\x00\x80\xfd[4\x80\x15a\x01\xadW`\x00\x80\xfd[Pa\x01\xb6a\vyV[`@Q\x80\x80` \x01\x82\x81\x03\x82R\x83\x81\x81Q\x81R` \x01\x91P\x80Q\x90` \x01\x90\x80\x83\x83`\x00[\x83\x81\x10\x15a\x01\xf6W\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa\x01\xdbV[PPPP\x90P\x90\x81\x01\x90`\x1f\x16\x80\x15a\x02#W\x80\x82\x03\x80Q`\x01\x83` \x03a\x01\x00\n\x03\x19\x16\x81R` \x01\x91P[P\x92PPP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x02=W`\x00\x80\xfd[Pa\x02\x80`\x04\x806\x03` \x81\x10\x15a\x02TW`\x00\x80\xfd[\x81\x01\x90\x80\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90PPPa\v\xb6V[\x00[4\x80\x15a\x02\x8eW`\x00\x80\xfd[Pa\x02\x97a\f$V[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x02\xb9W`\x00\x80\xfd[Pa\x03o`\x04\x806\x03`\xa0\x81\x10\x15a\x02\xd0W`\x00\x80\xfd[\x81\x01\x90\x80\x805\x90` \x01\x90d\x01\x00\x00\x00\x00\x81\x11\x15a\x02\xedW`\x00\x80\xfd[\x82\x01\x83` \x82\x01\x11\x15a\x02\xffW`\x00\x80\xfd[\x805\x90` \x01\x91\x84`\x01\x83\x02\x84\x01\x11d\x01\x00\x00\x00\x00\x83\x11\x17\x15a\x03!W`\x00\x80\xfd[\x90\x91\x92\x93\x91\x92\x93\x90\x805\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90\x92\x91\x90\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90PPPa\f:V[`@Q\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[a\x03\xdd`\x04\x806\x03` \x81\x10\x15a\x03\xc7W`\x00\x80\xfd[\x81\x01\x90\x80\x805\x90` \x01\x90\x92\x91\x90PPPa\x0e\x06V[\x00[4\x80\x15a\x03\xebW`\x00\x80\xfd[Pa\x03\xf4a\x0fXV[`@Q\x80\x82`\xff\x16`\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x04\x1cW`\x00\x80\xfd[Pa\x04i`\x04\x806\x03`@\x81\x10\x15a\x043W`\x00\x80\xfd[\x81\x01\x90\x80\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90\x92\x91\x90PPPa\x0faV[\x00[4\x80\x15a\x04wW`\x00\x80\xfd[Pa\x04\xda`\x04\x806\x03`@\x81\x10\x15a\x04\x8eW`\x00\x80\xfd[\x81\x01\x90\x80\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90PPPa\x11\x1dV[\x00[4\x80\x15a\x04\xe8W`\x00\x80\xfd[Pa\x04\xf1a\x11\xecV[`@Q\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x05?W`\x00\x80\xfd[Pa\x05Ha\x12\x12V[`@Q\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x05\x96W`\x00\x80\xfd[Pa\x05\xd9`\x04\x806\x03` \x81\x10\x15a\x05\xadW`\x00\x80\xfd[\x81\x01\x90\x80\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90PPPa\x128V[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x05\xfbW`\x00\x80\xfd[Pa\x06\x04a\x12YV[\x00[4\x80\x15a\x06\x12W`\x00\x80\xfd[Pa\x06\x1ba\x13)V[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\x06=W`\x00\x80\xfd[Pa\a\x01`\x04\x806\x03`@\x81\x10\x15a\x06TW`\x00\x80\xfd[\x81\x01\x90\x80\x805\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90d\x01\x00\x00\x00\x00\x81\x11\x15a\x06{W`\x00\x80\xfd[\x82\x01\x83` \x82\x01\x11\x15a\x06\x8dW`\x00\x80\xfd[\x805\x90` \x01\x91\x84`\x01\x83\x02\x84\x01\x11d\x01\x00\x00\x00\x00\x83\x11\x17\x15a\x06\xafW`\x00\x80\xfd[\x91\x90\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\x00\x81\x84\x01R`\x1f\x19`\x1f\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x91\x92\x91\x92\x90PPPa\x13/V[`@Q\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\aOW`\x00\x80\xfd[Pa\aXa\x14\xb4V[`@Q\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\a\xa6W`\x00\x80\xfd[Pa\a\xafa\x14\xddV[`@Q\x80\x82\x15\x15\x15\x15\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\a\xd5W`\x00\x80\xfd[Pa\a\xdea\x154V[`@Q\x80\x80` \x01\x82\x81\x03\x82R\x83\x81\x81Q\x81R` \x01\x91P\x80Q\x90` \x01\x90\x80\x83\x83`\x00[\x83\x81\x10\x15a\b\x1eW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa\b\x03V[PPPP\x90P\x90\x81\x01\x90`\x1f\x16\x80\x15a\bKW\x80\x82\x03\x80Q`\x01\x83` \x03a\x01\x00\n\x03\x19\x16\x81R` \x01\x91P[P\x92PPP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\beW`\x00\x80\xfd[Pa\bna\x15mV[`@Q\x80\x80` \x01\x82\x81\x03\x82R\x83\x81\x81Q\x81R` \x01\x91P\x80Q\x90` \x01\x90\x80\x83\x83`\x00[\x83\x81\x10\x15a\b\xaeW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa\b\x93V[PPPP\x90P\x90\x81\x01\x90`\x1f\x16\x80\x15a\b\xdbW\x80\x82\x03\x80Q`\x01\x83` \x03a\x01\x00\n\x03\x19\x16\x81R` \x01\x91P[P\x92PPP`@Q\x80\x91\x03\x90\xf3[a\t5`\x04\x806\x03`@\x81\x10\x15a\b\xffW`\x00\x80\xfd[\x81\x01\x90\x80\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90\x92\x91\x90PPPa\x15\xaaV[`@Q\x80\x82\x15\x15\x15\x15\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\t[W`\x00\x80\xfd[Pa\tda\x15\xd0V[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\t\x86W`\x00\x80\xfd[Pa\t\xb3`\x04\x806\x03` \x81\x10\x15a\t\x9dW`\x00\x80\xfd[\x81\x01\x90\x80\x805\x90` \x01\x90\x92\x91\x90PPPa\x16]V[`@Q\x80\x82\x15\x15\x15\x15\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\t\xd9W`\x00\x80\xfd[Pa\n:`\x04\x806\x03`\x80\x81\x10\x15a\t\xf0W`\x00\x80\xfd[\x81\x01\x90\x80\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90\x92\x91\x90\x805\x90` \x01\x90\x92\x91\x90PPPa\x16}V[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\n\\W`\x00\x80\xfd[Pa\nea\x16\x9dV[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\n\x87W`\x00\x80\xfd[Pa\n\x90a\x16\xa4V[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\n\xb2W`\x00\x80\xfd[Pa\n\xbba\x16\xaaV[`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[4\x80\x15a\n\xddW`\x00\x80\xfd[Pa\v `\x04\x806\x03` \x81\x10\x15a\n\xf4W`\x00\x80\xfd[\x81\x01\x90\x80\x805s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90` \x01\x90\x92\x91\x90PPPa\x177V[\x00[4\x80\x15a\v.W`\x00\x80\xfd[Pa\v7a\x17TV[`@Q\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xf3[```@Q\x80`@\x01`@R\x80`\v\x81R` \x01\u007fMatic Token\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP\x90P\x90V[`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`\x10\x81R` \x01\x80\u007fDisabled feature\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP` \x01\x91PP`@Q\x80\x91\x03\x90\xfd[`\x00`\x12`\xff\x16`\n\nd\x02T\v\xe4\x00\x02\x90P\x90V[`\x00\x80\x85\x11a\fHW`\x00\x80\xfd[`\x00\x83\x14\x80a\fWWP\x82C\x11\x15[a\f\xc9W`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`\x14\x81R` \x01\x80\u007fSignature is expired\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP` \x01\x91PP`@Q\x80\x91\x03\x90\xfd[`\x00a\f\xd73\x87\x87\x87a\x16}V[\x90P`\x00\x15\x15`\x05`\x00\x83\x81R` \x01\x90\x81R` \x01`\x00 `\x00\x90T\x90a\x01\x00\n\x90\x04`\xff\x16\x15\x15\x14a\rsW`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`\x0f\x81R` \x01\x80\u007fSig deactivated\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP` \x01\x91PP`@Q\x80\x91\x03\x90\xfd[`\x01`\x05`\x00\x83\x81R` \x01\x90\x81R` \x01`\x00 `\x00a\x01\x00\n\x81T\x81`\xff\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPa\r\ud049\x89\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\x00\x81\x84\x01R`\x1f\x19`\x1f\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa\x13/V[\x91Pa\r\xfa\x82\x84\x88a\x17zV[PP\x96\x95PPPPPPV[`\x003\x90P`\x00a\x0e\x16\x82a\x128V[\x90Pa\x0e-\x83`\x06Ta\x1b7\x90\x91\x90c\xff\xff\xff\xff\x16V[`\x06\x81\x90UP`\x00\x83\x11\x80\x15a\x0eBWP\x824\x14[a\x0e\xb4W`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`\x13\x81R` \x01\x80\u007fInsufficient amount\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP` \x01\x91PP`@Q\x80\x91\x03\x90\xfd[\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16`\x02`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\u007f\xeb\xff&\x02\xb3\xf4h%\x9e\x1e\x99\xf6\x13\xfe\xd6i\x1f:e&\xef\xfen\xf3\xe7h\xbaz\xe7\xa3lO\x85\x84a\x0f0\x87a\x128V[`@Q\x80\x84\x81R` \x01\x83\x81R` \x01\x82\x81R` \x01\x93PPPP`@Q\x80\x91\x03\x90\xa3PPPV[`\x00`\x12\x90P\x90V[a\x0fia\x14\xddV[a\x0frW`\x00\x80\xfd[`\x00\x81\x11\x80\x15a\x0f\xafWP`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x14\x15[a\x10\x04W`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`#\x81R` \x01\x80a\x1ec`#\x919`@\x01\x91PP`@Q\x80\x91\x03\x90\xfd[`\x00a\x10\x0f\x83a\x128V[\x90P`\x00\x83\x90P\x80s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16a\b\xfc\x84\x90\x81\x15\x02\x90`@Q`\x00`@Q\x80\x83\x03\x81\x85\x88\x88\xf1\x93PPPP\x15\x80\x15a\x10\\W=`\x00\x80>=`\x00\xfd[Pa\x10r\x83`\x06Ta\x1bW\x90\x91\x90c\xff\xff\xff\xff\x16V[`\x06\x81\x90UP\x83s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16`\x02`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\u007fN,\xa0Q^\u046e\xf19_f\xb50;\xb5\xd6\xf1\xbf\x9da\xa3S\xfaS\xf7?\x8a\u0257?\xa9\xf6\x85\x85a\x10\xf4\x89a\x128V[`@Q\x80\x84\x81R` \x01\x83\x81R` \x01\x82\x81R` \x01\x93PPPP`@Q\x80\x91\x03\x90\xa3PPPPV[`\a`\x00\x90T\x90a\x01\x00\n\x90\x04`\xff\x16\x15a\x11\x83W`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`#\x81R` \x01\x80a\x1e@`#\x919`@\x01\x91PP`@Q\x80\x91\x03\x90\xfd[`\x01`\a`\x00a\x01\x00\n\x81T\x81`\xff\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x80`\x02`\x00a\x01\x00\n\x81T\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02\x19\x16\x90\x83s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x02\x17\x90UPa\x11\xe8\x82a\x1bvV[PPV[`\x03`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81V[`\x04`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81V[`\x00\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x161\x90P\x91\x90PV[a\x12aa\x14\xddV[a\x12jW`\x00\x80\xfd[`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16`\x00\x80\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\u007f\x8b\xe0\a\x9cS\x16Y\x14\x13D\xcd\x1f\u0424\xf2\x84\x19I\u007f\x97\"\xa3\u06af\xe3\xb4\x18okdW\xe0`@Q`@Q\x80\x91\x03\x90\xa3`\x00\x80`\x00a\x01\x00\n\x81T\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02\x19\x16\x90\x83s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x02\x17\x90UPV[`\x06T\x81V[`\x00\x80`\x00\x80`A\x85Q\x14a\x13JW`\x00\x93PPPPa\x14\xaeV[` \x85\x01Q\x92P`@\x85\x01Q\x91P`\xff`A\x86\x01Q\x16\x90P`\x1b\x81`\xff\x16\x10\x15a\x13uW`\x1b\x81\x01\x90P[`\x1b\x81`\xff\x16\x14\x15\x80\x15a\x13\x8dWP`\x1c\x81`\xff\x16\x14\x15[\x15a\x13\x9eW`\x00\x93PPPPa\x14\xaeV[`\x01\x86\x82\x85\x85`@Q`\x00\x81R` \x01`@R`@Q\x80\x85\x81R` \x01\x84`\xff\x16`\xff\x16\x81R` \x01\x83\x81R` \x01\x82\x81R` \x01\x94PPPPP` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xfa\x15\x80\x15a\x13\xfbW=`\x00\x80>=`\x00\xfd[PPP` `@Q\x03Q\x93P`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x84s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x14\x15a\x14\xaaW`@Q\u007f\b\xc3y\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R`\x04\x01\x80\x80` \x01\x82\x81\x03\x82R`\x12\x81R` \x01\x80\u007fError in ecrecover\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP` \x01\x91PP`@Q\x80\x91\x03\x90\xfd[PPP[\x92\x91PPV[`\x00\x80`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x90P\x90V[`\x00\x80`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x163s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x14\x90P\x90V[`@Q\x80`@\x01`@R\x80`\x03\x81R` \x01\u007f\x018\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP\x81V[```@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\u007fMATIC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81RP\x90P\x90V[`\x00\x814\x14a\x15\xbcW`\x00\x90Pa\x15\xcaV[a\x15\xc73\x84\x84a\x17zV[\x90P[\x92\x91PPV[`@Q\x80`\x80\x01`@R\x80`[\x81R` \x01a\x1e\xd8`[\x919`@Q` \x01\x80\x82\x80Q\x90` \x01\x90\x80\x83\x83[` \x83\x10a\x16\x1fW\x80Q\x82R` \x82\x01\x91P` \x81\x01\x90P` \x83\x03\x92Pa\x15\xfcV[`\x01\x83` \x03a\x01\x00\n\x03\x80\x19\x82Q\x16\x81\x84Q\x16\x80\x82\x17\x85RPPPPPP\x90P\x01\x91PP`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x81V[`\x05` R\x80`\x00R`@`\x00 `\x00\x91PT\x90a\x01\x00\n\x90\x04`\xff\x16\x81V[`\x00a\x16\x93a\x16\x8e\x86\x86\x86\x86a\x1cnV[a\x1dDV[\x90P\x94\x93PPPPV[b\x018\x81\x81V[`\x01T\x81V[`@Q\x80`\x80\x01`@R\x80`R\x81R` \x01a\x1e\x86`R\x919`@Q` \x01\x80\x82\x80Q\x90` \x01\x90\x80\x83\x83[` \x83\x10a\x16\xf9W\x80Q\x82R` \x82\x01\x91P` \x81\x01\x90P` \x83\x03\x92Pa\x16\xd6V[`\x01\x83` \x03a\x01\x00\n\x03\x80\x19\x82Q\x16\x81\x84Q\x16\x80\x82\x17\x85RPPPPPP\x90P\x01\x91PP`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x81V[a\x17?a\x14\xddV[a\x17HW`\x00\x80\xfd[a\x17Q\x81a\x1bvV[PV[`\x02`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81V[`\x00\x800s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16cp\xa0\x821\x86`@Q\x82c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP` `@Q\x80\x83\x03\x81\x86\x80;\x15\x80\x15a\x17\xfaW`\x00\x80\xfd[PZ\xfa\x15\x80\x15a\x18\x0eW=`\x00\x80>=`\x00\xfd[PPPP`@Q=` \x81\x10\x15a\x18$W`\x00\x80\xfd[\x81\x01\x90\x80\x80Q\x90` \x01\x90\x92\x91\x90PPP\x90P`\x000s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16cp\xa0\x821\x86`@Q\x82c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP` `@Q\x80\x83\x03\x81\x86\x80;\x15\x80\x15a\x18\xb6W`\x00\x80\xfd[PZ\xfa\x15\x80\x15a\x18\xcaW=`\x00\x80>=`\x00\xfd[PPPP`@Q=` \x81\x10\x15a\x18\xe0W`\x00\x80\xfd[\x81\x01\x90\x80\x80Q\x90` \x01\x90\x92\x91\x90PPP\x90Pa\x18\xfe\x86\x86\x86a\x1d\x8eV[\x84s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x86s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16`\x02`\x00\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\u007f\xe6I~>\xe5H\xa37!6\xaf/\xcb\x06\x96\xdb1\xfcl\xf2\x02`pvE\x06\x8b\xd3\xfe\x97\xf3\u0107\x86\x860s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16cp\xa0\x821\x8e`@Q\x82c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP` `@Q\x80\x83\x03\x81\x86\x80;\x15\x80\x15a\x1a\x06W`\x00\x80\xfd[PZ\xfa\x15\x80\x15a\x1a\x1aW=`\x00\x80>=`\x00\xfd[PPPP`@Q=` \x81\x10\x15a\x1a0W`\x00\x80\xfd[\x81\x01\x90\x80\x80Q\x90` \x01\x90\x92\x91\x90PPP0s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16cp\xa0\x821\x8e`@Q\x82c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01\x80\x82s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81R` \x01\x91PP` `@Q\x80\x83\x03\x81\x86\x80;\x15\x80\x15a\x1a\xbeW`\x00\x80\xfd[PZ\xfa\x15\x80\x15a\x1a\xd2W=`\x00\x80>=`\x00\xfd[PPPP`@Q=` \x81\x10\x15a\x1a\xe8W`\x00\x80\xfd[\x81\x01\x90\x80\x80Q\x90` \x01\x90\x92\x91\x90PPP`@Q\x80\x86\x81R` \x01\x85\x81R` \x01\x84\x81R` \x01\x83\x81R` \x01\x82\x81R` \x01\x95PPPPPP`@Q\x80\x91\x03\x90\xa4`\x01\x92PPP\x93\x92PPPV[`\x00\x82\x82\x11\x15a\x1bFW`\x00\x80\xfd[`\x00\x82\x84\x03\x90P\x80\x91PP\x92\x91PPV[`\x00\x80\x82\x84\x01\x90P\x83\x81\x10\x15a\x1blW`\x00\x80\xfd[\x80\x91PP\x92\x91PPV[`\x00s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x14\x15a\x1b\xb0W`\x00\x80\xfd[\x80s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16`\x00\x80\x90T\x90a\x01\x00\n\x90\x04s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\u007f\x8b\xe0\a\x9cS\x16Y\x14\x13D\xcd\x1f\u0424\xf2\x84\x19I\u007f\x97\"\xa3\u06af\xe3\xb4\x18okdW\xe0`@Q`@Q\x80\x91\x03\x90\xa3\x80`\x00\x80a\x01\x00\n\x81T\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02\x19\x16\x90\x83s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x02\x17\x90UPPV[`\x00\x80`@Q\x80`\x80\x01`@R\x80`[\x81R` \x01a\x1e\xd8`[\x919`@Q` \x01\x80\x82\x80Q\x90` \x01\x90\x80\x83\x83[` \x83\x10a\x1c\xc0W\x80Q\x82R` \x82\x01\x91P` \x81\x01\x90P` \x83\x03\x92Pa\x1c\x9dV[`\x01\x83` \x03a\x01\x00\n\x03\x80\x19\x82Q\x16\x81\x84Q\x16\x80\x82\x17\x85RPPPPPP\x90P\x01\x91PP`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P`@Q\x81\x81Rs\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x16` \x82\x01R\x85`@\x82\x01R\x84``\x82\x01R\x83`\x80\x82\x01R`\xa0\x81 \x92PP\x81\x91PP\x94\x93PPPPV[`\x00\x80`\x01T\x90P`@Q\u007f\x19\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81R\x81`\x02\x82\x01R\x83`\"\x82\x01R`B\x81 \x92PP\x81\x91PP\x91\x90PV[\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16a\b\xfc\x82\x90\x81\x15\x02\x90`@Q`\x00`@Q\x80\x83\x03\x81\x85\x88\x88\xf1\x93PPPP\x15\x80\x15a\x1d\xd4W=`\x00\x80>=`\x00\xfd[P\x81s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x83s\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\u007f\xdd\xf2R\xad\x1b\xe2\u021bi\u00b0h\xfc7\x8d\xaa\x95+\xa7\xf1c\u0121\x16(\xf5ZM\xf5#\xb3\xef\x83`@Q\x80\x82\x81R` \x01\x91PP`@Q\x80\x91\x03\x90\xa3PPPV\xfeThe contract is already initializedInsufficient amount or invalid userEIP712Domain(string name,string version,uint256 chainId,address verifyingContract)TokenTransferOrder(address spender,uint256 tokenIdOrAmount,bytes32 data,uint256 expiration)\xa2ebzzr1X \x8f\x81p\x013s\x8dvj\xe3\u058a\xf5\x91\xadX\x8b\x01%\xbd\x91D\x91\x92\x17\x9fF\b\x93\xf7\x9fkdsolcC\x00\x05\v\x002\xe0\x94\x92\x8e\u05a3\xe9D7\xbb\xd3\x16\u032dxG\x9f\x1d\x16:j\x8c\x8965\u026d\xc5\u07a0\x00\x00\x80\xe0\x94\xbe\x18\x8dfA\u8d80t:H\x15\u07e0\xf6 \x808\x96\x0f\x8965\u026d\xc5\u07a0\x00\x00\x80\xe0\x94\xc2h\x80\xa0\xaf.\xa0\xc7\xe8\x13\x0en\xc4z\xf7VFTR\xe8\x8965\u026d\xc5\u07a0\x00\x00\x80\xe0\x94\xc2u\u070b\xe3\x9fP\xd1/f\xb6\xa66)\u00dd\xa5\xba\u5f4965\u026d\xc5\u07a0\x00\x00\x80\xe0\x94\xf9\x03\xba\x9e\x00a\x93\xc1R{\xfb\xe6_\xe2\x127\x04\xea?\x99\x8965\u026d\xc5\u07a0\x00\x00\x80" From 6f54d66cacf199ab08a0d63d85cf1f84cec5f46f Mon Sep 17 00:00:00 2001 From: Krishna Upadhyaya Date: Thu, 2 Sep 2021 19:55:04 +0530 Subject: [PATCH 05/13] add: mumbai geth config updated --- cmd/geth/config.go | 29 +++++++++++++++++++++++++++++ cmd/geth/consolecmd.go | 3 ++- cmd/geth/main.go | 2 +- cmd/utils/flags.go | 6 ++++-- internal/debug/flags.go | 3 +++ params/bootnodes.go | 1 + 6 files changed, 40 insertions(+), 4 deletions(-) diff --git a/cmd/geth/config.go b/cmd/geth/config.go index 04b41b3483..bec896aa85 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -23,6 +23,7 @@ import ( "math/big" "os" "reflect" + "time" "unicode" "gopkg.in/urfave/cli.v1" @@ -33,6 +34,7 @@ import ( "github.com/ethereum/go-ethereum/accounts/usbwallet" "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/eth/catalyst" + "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/eth/ethconfig" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/log" @@ -133,6 +135,10 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) { } } + if ctx.GlobalIsSet(utils.MumbaiFlag.Name) { + setDefaultMumbaiGethConfig(ctx, &cfg) + } + // Apply flags. utils.SetNodeConfig(ctx, &cfg.Node) stack, err := node.New(&cfg.Node) @@ -328,3 +334,26 @@ func setAccountManagerBackends(stack *node.Node) error { return nil } + +func setDefaultMumbaiGethConfig(ctx *cli.Context, config *gethConfig) { + config.Node.P2P.ListenAddr = fmt.Sprintf(":%d", 30303) + config.Node.HTTPHost = "0.0.0.0" + config.Node.HTTPVirtualHosts = []string{"*"} + config.Node.HTTPCors = []string{"*"} + config.Node.HTTPPort = 8545 + config.Node.IPCPath = utils.MakeDataDir(ctx) + "/bor.ipc" + config.Node.HTTPModules = []string{"eth", "net", "web3", "txpool", "bor"} + config.Eth.SyncMode = downloader.FullSync + config.Eth.NetworkId = 80001 + config.Eth.Miner.GasCeil = 20000000 + //--miner.gastarget is depreceated, No longed used + config.Eth.TxPool.NoLocals = true + config.Eth.TxPool.AccountSlots = 16 + config.Eth.TxPool.GlobalSlots = 131072 + config.Eth.TxPool.AccountQueue = 64 + config.Eth.TxPool.GlobalQueue = 131072 + config.Eth.TxPool.Lifetime = 90 * time.Minute + config.Node.P2P.MaxPeers = 200 + config.Metrics.Enabled = true + // --pprof is enabled in 'internal/debug/flags.go' +} diff --git a/cmd/geth/consolecmd.go b/cmd/geth/consolecmd.go index e508bc0797..c719639d9a 100644 --- a/cmd/geth/consolecmd.go +++ b/cmd/geth/consolecmd.go @@ -135,7 +135,8 @@ func remoteConsole(ctx *cli.Context) error { } else if ctx.GlobalBool(utils.GoerliFlag.Name) { path = filepath.Join(path, "goerli") } else if ctx.GlobalBool(utils.MumbaiFlag.Name) { - path = filepath.Join(path, "mumbai") + homeDir, _ := os.UserHomeDir() + path = filepath.Join(homeDir, "/.bor/data") } } endpoint = fmt.Sprintf("%s/geth.ipc", path) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 4b0d8835e0..5cd21a98a8 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -284,7 +284,7 @@ func prepare(ctx *cli.Context) { log.Info("Starting Geth on Görli testnet...") case ctx.GlobalIsSet(utils.MumbaiFlag.Name): - log.Info("Starting Geth on Mumbai testnet...") + log.Info("Starting Bor on Mumbai testnet...") case ctx.GlobalIsSet(utils.DeveloperFlag.Name): log.Info("Starting Geth in ephemeral dev mode...") diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 1c19542b38..65040c0393 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -802,7 +802,8 @@ func MakeDataDir(ctx *cli.Context) string { return filepath.Join(path, "goerli") } if ctx.GlobalBool(MumbaiFlag.Name) { - return filepath.Join(path, "mumbai") + homeDir, _ := os.UserHomeDir() + return filepath.Join(homeDir, "/.bor/data") } return path } @@ -1302,7 +1303,8 @@ func setDataDir(ctx *cli.Context, cfg *node.Config) { case ctx.GlobalBool(GoerliFlag.Name) && cfg.DataDir == node.DefaultDataDir(): cfg.DataDir = filepath.Join(node.DefaultDataDir(), "goerli") case ctx.GlobalBool(MumbaiFlag.Name) && cfg.DataDir == node.DefaultDataDir(): - cfg.DataDir = filepath.Join(node.DefaultDataDir(), "mumbai") + homeDir, _ := os.UserHomeDir() + cfg.DataDir = filepath.Join(homeDir, "/.bor/data") } } diff --git a/internal/debug/flags.go b/internal/debug/flags.go index 126ee09a7c..8892701bb1 100644 --- a/internal/debug/flags.go +++ b/internal/debug/flags.go @@ -246,6 +246,9 @@ func Setup(ctx *cli.Context) error { // This context value ("metrics.addr") represents the utils.MetricsHTTPFlag.Name. // It cannot be imported because it will cause a cyclical dependency. StartPProf(address, !ctx.GlobalIsSet("metrics.addr")) + } else if ctx.GlobalIsSet("mumbai") { + address := fmt.Sprintf("%s:%d", "0.0.0.0", 7071) + StartPProf(address, !ctx.GlobalIsSet("metrics.addr")) } return nil } diff --git a/params/bootnodes.go b/params/bootnodes.go index 20136ca422..09f4a682ba 100644 --- a/params/bootnodes.go +++ b/params/bootnodes.go @@ -71,6 +71,7 @@ var GoerliBootnodes = []string{ // Mumbai test network. var MumbaiBootnodes = []string{ "enode://320553cda00dfc003f499a3ce9598029f364fbb3ed1222fdc20a94d97dcc4d8ba0cd0bfa996579dcc6d17a534741fb0a5da303a90579431259150de66b597251@54.147.31.250:30303", + "enode://f0f48a8781629f95ff02606081e6e43e4aebd503f3d07fc931fad7dd5ca1ba52bd849a6f6c3be0e375cf13c9ae04d859c4a9ae3546dc8ed4f10aa5dbb47d4998@34.226.134.117:30303", } var V5Bootnodes = []string{ From 440ffaa488f06ee8ea83813111d527af4ac93d1d Mon Sep 17 00:00:00 2001 From: Krishna Upadhyaya Date: Thu, 2 Sep 2021 21:05:13 +0530 Subject: [PATCH 06/13] revert deleted goerli flag --- 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 65040c0393..611338049a 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -1490,7 +1490,7 @@ func CheckExclusive(ctx *cli.Context, args ...interface{}) { // SetEthConfig applies eth-related command line flags to the config. func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { // Avoid conflicting network flags - CheckExclusive(ctx, MainnetFlag, DeveloperFlag, RopstenFlag, RinkebyFlag, MumbaiFlag) + CheckExclusive(ctx, MainnetFlag, DeveloperFlag, RopstenFlag, RinkebyFlag, GoerliFlag, MumbaiFlag) CheckExclusive(ctx, LightServeFlag, SyncModeFlag, "light") CheckExclusive(ctx, DeveloperFlag, ExternalSignerFlag) // Can't use both ephemeral unlocked and external signer if ctx.GlobalString(GCModeFlag.Name) == "archive" && ctx.GlobalUint64(TxLookupLimitFlag.Name) != 0 { From f088f1f24fefcf867cce0b993855548bd8834906 Mon Sep 17 00:00:00 2001 From: Uttam Singh Date: Fri, 17 Sep 2021 13:39:29 +0530 Subject: [PATCH 07/13] Added BorMainnet --- cmd/devp2p/nodesetcmd.go | 2 ++ cmd/geth/chaincmd.go | 1 + cmd/geth/config.go | 27 +++++++++++++++++++++++ cmd/geth/consolecmd.go | 3 +++ cmd/geth/dbcmd.go | 8 +++++++ cmd/geth/main.go | 6 ++++- cmd/geth/snapshot.go | 5 +++++ cmd/geth/usage.go | 1 + cmd/utils/flags.go | 19 +++++++++++++++- core/allocs/bormainnet.json | 35 +++++++++++++++++++++++++++++ core/genesis.go | 19 ++++++++++++++++ internal/debug/flags.go | 3 +++ mobile/geth.go | 7 ++++++ mobile/params.go | 9 ++++++++ params/bootnodes.go | 9 ++++++++ params/config.go | 44 ++++++++++++++++++++++++++++++++----- 16 files changed, 191 insertions(+), 7 deletions(-) create mode 100644 core/allocs/bormainnet.json diff --git a/cmd/devp2p/nodesetcmd.go b/cmd/devp2p/nodesetcmd.go index 3291171c26..3bdc052d28 100644 --- a/cmd/devp2p/nodesetcmd.go +++ b/cmd/devp2p/nodesetcmd.go @@ -237,6 +237,8 @@ func ethFilter(args []string) (nodeFilter, error) { filter = forkid.NewStaticFilter(params.RopstenChainConfig, params.RopstenGenesisHash) case "mumbai": filter = forkid.NewStaticFilter(params.MumbaiChainConfig, params.MumbaiGenesisHash) + case "bor-mainnet": + filter = forkid.NewStaticFilter(params.BorMainnetChainConfig, params.BorMainnetGenesisHash) default: return nil, fmt.Errorf("unknown network %q", args[0]) } diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go index 6643207001..84f931c233 100644 --- a/cmd/geth/chaincmd.go +++ b/cmd/geth/chaincmd.go @@ -69,6 +69,7 @@ It expects the genesis file as argument.`, utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, }, Category: "BLOCKCHAIN COMMANDS", Description: ` diff --git a/cmd/geth/config.go b/cmd/geth/config.go index bec896aa85..bb8e5688a5 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -139,6 +139,10 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) { setDefaultMumbaiGethConfig(ctx, &cfg) } + if ctx.GlobalIsSet(utils.BorMainnetFlag.Name) { + setDefaultBorMainnetGethConfig(ctx, &cfg) + } + // Apply flags. utils.SetNodeConfig(ctx, &cfg.Node) stack, err := node.New(&cfg.Node) @@ -357,3 +361,26 @@ func setDefaultMumbaiGethConfig(ctx *cli.Context, config *gethConfig) { config.Metrics.Enabled = true // --pprof is enabled in 'internal/debug/flags.go' } + +func setDefaultBorMainnetGethConfig(ctx *cli.Context, config *gethConfig) { + config.Node.P2P.ListenAddr = fmt.Sprintf(":%d", 30303) + config.Node.HTTPHost = "0.0.0.0" + config.Node.HTTPVirtualHosts = []string{"*"} + config.Node.HTTPCors = []string{"*"} + config.Node.HTTPPort = 8545 + config.Node.IPCPath = utils.MakeDataDir(ctx) + "/bor.ipc" + config.Node.HTTPModules = []string{"eth", "net", "web3", "txpool", "bor"} + config.Eth.SyncMode = downloader.FullSync + config.Eth.NetworkId = 137 + config.Eth.Miner.GasCeil = 20000000 + //--miner.gastarget is depreceated, No longed used + config.Eth.TxPool.NoLocals = true + config.Eth.TxPool.AccountSlots = 16 + config.Eth.TxPool.GlobalSlots = 131072 + config.Eth.TxPool.AccountQueue = 64 + config.Eth.TxPool.GlobalQueue = 131072 + config.Eth.TxPool.Lifetime = 90 * time.Minute + config.Node.P2P.MaxPeers = 200 + config.Metrics.Enabled = true + // --pprof is enabled in 'internal/debug/flags.go' +} diff --git a/cmd/geth/consolecmd.go b/cmd/geth/consolecmd.go index c719639d9a..c4f4ebe6b7 100644 --- a/cmd/geth/consolecmd.go +++ b/cmd/geth/consolecmd.go @@ -137,6 +137,9 @@ func remoteConsole(ctx *cli.Context) error { } else if ctx.GlobalBool(utils.MumbaiFlag.Name) { homeDir, _ := os.UserHomeDir() path = filepath.Join(homeDir, "/.bor/data") + } else if ctx.GlobalBool(utils.BorMainnetFlag.Name) { + homeDir, _ := os.UserHomeDir() + path = filepath.Join(homeDir, "/.bor/data") } } endpoint = fmt.Sprintf("%s/geth.ipc", path) diff --git a/cmd/geth/dbcmd.go b/cmd/geth/dbcmd.go index 36a9b44a9d..71ac86458b 100644 --- a/cmd/geth/dbcmd.go +++ b/cmd/geth/dbcmd.go @@ -76,6 +76,7 @@ Remove blockchain and state databases`, utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, }, Usage: "Inspect the storage size for each type of data in the database", Description: `This commands iterates the entire database. If the optional 'prefix' and 'start' arguments are provided, then the iteration is limited to the given subset of data.`, @@ -92,6 +93,7 @@ Remove blockchain and state databases`, utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, }, } dbCompactCmd = cli.Command{ @@ -106,6 +108,7 @@ Remove blockchain and state databases`, utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, utils.CacheFlag, utils.CacheDatabaseFlag, }, @@ -126,6 +129,7 @@ corruption if it is aborted during execution'!`, utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, }, Description: "This command looks up the specified database key from the database.", } @@ -142,6 +146,7 @@ corruption if it is aborted during execution'!`, utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, }, Description: `This command deletes the specified database key from the database. WARNING: This is a low-level operation which may cause database corruption!`, @@ -159,6 +164,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, }, Description: `This command sets a given database key to the given value. WARNING: This is a low-level operation which may cause database corruption!`, @@ -176,6 +182,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, }, Description: "This command looks up the specified database key from the database.", } @@ -192,6 +199,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, }, Description: "This command displays information about the freezer index.", } diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 5cd21a98a8..d827558371 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -141,6 +141,7 @@ var ( utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, utils.VMEnableDebugFlag, utils.NetworkIdFlag, utils.EthStatsURLFlag, @@ -286,6 +287,9 @@ func prepare(ctx *cli.Context) { case ctx.GlobalIsSet(utils.MumbaiFlag.Name): log.Info("Starting Bor on Mumbai testnet...") + case ctx.GlobalIsSet(utils.BorMainnetFlag.Name): + log.Info("Starting Bor on Bor mainnet...") + case ctx.GlobalIsSet(utils.DeveloperFlag.Name): log.Info("Starting Geth in ephemeral dev mode...") @@ -293,7 +297,7 @@ func prepare(ctx *cli.Context) { log.Info("Starting Geth on Ethereum mainnet...") } // If we're a full node on mainnet without --cache specified, bump default cache allowance - if ctx.GlobalString(utils.SyncModeFlag.Name) != "light" && !ctx.GlobalIsSet(utils.CacheFlag.Name) && !ctx.GlobalIsSet(utils.NetworkIdFlag.Name) { + if ctx.GlobalString(utils.SyncModeFlag.Name) != "light" && !ctx.GlobalIsSet(utils.CacheFlag.Name) && !ctx.GlobalIsSet(utils.BorMainnetFlag.Name) && !ctx.GlobalIsSet(utils.NetworkIdFlag.Name) { // Make sure we're not on any supported preconfigured testnet either if !ctx.GlobalIsSet(utils.RopstenFlag.Name) && !ctx.GlobalIsSet(utils.RinkebyFlag.Name) && !ctx.GlobalIsSet(utils.GoerliFlag.Name) && !ctx.GlobalIsSet(utils.MumbaiFlag.Name) && !ctx.GlobalIsSet(utils.DeveloperFlag.Name) { // Nope, we're really on mainnet. Bump that cache up! diff --git a/cmd/geth/snapshot.go b/cmd/geth/snapshot.go index 7d0f996936..bec62b3b19 100644 --- a/cmd/geth/snapshot.go +++ b/cmd/geth/snapshot.go @@ -64,6 +64,7 @@ var ( utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, utils.CacheTrieJournalFlag, utils.BloomFilterSizeFlag, }, @@ -95,6 +96,7 @@ the trie clean cache with default directory will be deleted. utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, }, Description: ` geth snapshot verify-state @@ -116,6 +118,7 @@ In other words, this command does the snapshot to trie conversion. utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, }, Description: ` geth snapshot traverse-state @@ -139,6 +142,7 @@ It's also usable without snapshot enabled. utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, }, Description: ` geth snapshot traverse-rawstate @@ -163,6 +167,7 @@ It's also usable without snapshot enabled. utils.RinkebyFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, utils.ExcludeCodeFlag, utils.ExcludeStorageFlag, utils.StartKeyFlag, diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go index 52c9f609a0..ce65725ced 100644 --- a/cmd/geth/usage.go +++ b/cmd/geth/usage.go @@ -44,6 +44,7 @@ var AppHelpFlagGroups = []flags.FlagGroup{ utils.MainnetFlag, utils.GoerliFlag, utils.MumbaiFlag, + utils.BorMainnetFlag, utils.RinkebyFlag, utils.RopstenFlag, utils.SyncModeFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 611338049a..bf8e3c64af 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -159,6 +159,10 @@ var ( Name: "mumbai", Usage: "Mumbai network: pre-configured proof-of-stake test network", } + BorMainnetFlag = cli.BoolFlag{ + Name: "bor-mainnet", + Usage: "Bor mainnet", + } DeveloperFlag = cli.BoolFlag{ Name: "dev", Usage: "Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled", @@ -859,6 +863,8 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) { urls = params.GoerliBootnodes case ctx.GlobalBool(MumbaiFlag.Name): urls = params.MumbaiBootnodes + case ctx.GlobalBool(BorMainnetFlag.Name): + urls = params.BorMainnetBootnodes case cfg.BootstrapNodes != nil: return // already set, don't apply defaults. } @@ -1305,6 +1311,9 @@ func setDataDir(ctx *cli.Context, cfg *node.Config) { case ctx.GlobalBool(MumbaiFlag.Name) && cfg.DataDir == node.DefaultDataDir(): homeDir, _ := os.UserHomeDir() cfg.DataDir = filepath.Join(homeDir, "/.bor/data") + case ctx.GlobalBool(BorMainnetFlag.Name) && cfg.DataDir == node.DefaultDataDir(): + homeDir, _ := os.UserHomeDir() + cfg.DataDir = filepath.Join(homeDir, "/.bor/data") } } @@ -1490,7 +1499,7 @@ func CheckExclusive(ctx *cli.Context, args ...interface{}) { // SetEthConfig applies eth-related command line flags to the config. func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { // Avoid conflicting network flags - CheckExclusive(ctx, MainnetFlag, DeveloperFlag, RopstenFlag, RinkebyFlag, GoerliFlag, MumbaiFlag) + CheckExclusive(ctx, MainnetFlag, DeveloperFlag, RopstenFlag, RinkebyFlag, GoerliFlag, MumbaiFlag, BorMainnetFlag) CheckExclusive(ctx, LightServeFlag, SyncModeFlag, "light") CheckExclusive(ctx, DeveloperFlag, ExternalSignerFlag) // Can't use both ephemeral unlocked and external signer if ctx.GlobalString(GCModeFlag.Name) == "archive" && ctx.GlobalUint64(TxLookupLimitFlag.Name) != 0 { @@ -1653,6 +1662,12 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { } cfg.Genesis = core.DefaultMumbaiGenesisBlock() SetDNSDiscoveryDefaults(cfg, params.MumbaiGenesisHash) + case ctx.GlobalBool(BorMainnetFlag.Name): + if !ctx.GlobalIsSet(BorMainnetFlag.Name) { + cfg.NetworkId = 137 + } + cfg.Genesis = core.DefaultBorMainnetGenesisBlock() + SetDNSDiscoveryDefaults(cfg, params.BorMainnetGenesisHash) case ctx.GlobalBool(DeveloperFlag.Name): if !ctx.GlobalIsSet(NetworkIdFlag.Name) { cfg.NetworkId = 1337 @@ -1875,6 +1890,8 @@ func MakeGenesis(ctx *cli.Context) *core.Genesis { genesis = core.DefaultGoerliGenesisBlock() case ctx.GlobalBool(MumbaiFlag.Name): genesis = core.DefaultMumbaiGenesisBlock() + case ctx.GlobalBool(BorMainnetFlag.Name): + genesis = core.DefaultBorMainnetGenesisBlock() case ctx.GlobalBool(DeveloperFlag.Name): Fatalf("Developer chains are ephemeral") } diff --git a/core/allocs/bormainnet.json b/core/allocs/bormainnet.json new file mode 100644 index 0000000000..eb4a17ee32 --- /dev/null +++ b/core/allocs/bormainnet.json @@ -0,0 +1,35 @@ +{ + "0000000000000000000000000000000000001000": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106101f05760003560e01c806360c8614d1161010f578063af26aa96116100a2578063d5b844eb11610071578063d5b844eb14610666578063dcf2793a14610684578063e3b7c924146106b6578063f59cf565146106d4576101f0565b8063af26aa96146105c7578063b71d7a69146105e7578063b7ab4db514610617578063c1b3c91914610636576101f0565b806370ba5707116100de57806370ba57071461052b57806398ab2b621461055b5780639d11b80714610579578063ae756451146105a9576101f0565b806360c8614d1461049c57806365b3a1e2146104bc57806366332354146104db578063687a9bd6146104f9576101f0565b80633434735f1161018757806344d6528f1161015657806344d6528f146103ee5780634dbc959f1461041e57806355614fcc1461043c578063582a8d081461046c576101f0565b80633434735f1461035257806335ddfeea1461037057806343ee8213146103a057806344c15cb1146103be576101f0565b806323f2a73f116101c357806323f2a73f146102a45780632bc06564146102d45780632de3a180146102f25780632eddf35214610322576101f0565b8063047a6c5b146101f55780630c35b1cb146102275780631270b5741461025857806323c2a2b414610288575b600080fd5b61020f600480360361020a9190810190612c14565b610706565b60405161021e93929190613553565b60405180910390f35b610241600480360361023c9190810190612c14565b61075d565b60405161024f929190613374565b60405180910390f35b610272600480360361026d9190810190612c3d565b610939565b60405161027f91906133ab565b60405180910390f35b6102a2600480360361029d9190810190612d1c565b610a91565b005b6102be60048036036102b99190810190612c3d565b61112a565b6040516102cb91906133ab565b60405180910390f35b6102dc611281565b6040516102e99190613501565b60405180910390f35b61030c60048036036103079190810190612b71565b611286565b60405161031991906133c6565b60405180910390f35b61033c60048036036103379190810190612c14565b611307565b6040516103499190613501565b60405180910390f35b61035a611437565b6040516103679190613359565b60405180910390f35b61038a60048036036103859190810190612bad565b61144f565b60405161039791906133ab565b60405180910390f35b6103a861151a565b6040516103b591906133c6565b60405180910390f35b6103d860048036036103d39190810190612c79565b611531565b6040516103e59190613501565b60405180910390f35b61040860048036036104039190810190612c3d565b611619565b60405161041591906134e6565b60405180910390f35b610426611781565b6040516104339190613501565b60405180910390f35b61045660048036036104519190810190612af6565b611791565b60405161046391906133ab565b60405180910390f35b61048660048036036104819190810190612b1f565b6117ab565b60405161049391906133c6565b60405180910390f35b6104a4611829565b6040516104b393929190613553565b60405180910390f35b6104c461189d565b6040516104d2929190613374565b60405180910390f35b6104e3611c5e565b6040516104f09190613501565b60405180910390f35b610513600480360361050e9190810190612ce0565b611c63565b6040516105229392919061351c565b60405180910390f35b61054560048036036105409190810190612af6565b611cc7565b60405161055291906133ab565b60405180910390f35b610563611ce1565b60405161057091906133c6565b60405180910390f35b610593600480360361058e9190810190612c14565b611cf8565b6040516105a09190613501565b60405180910390f35b6105b1611e29565b6040516105be91906133c6565b60405180910390f35b6105cf611e40565b6040516105de93929190613553565b60405180910390f35b61060160048036036105fc9190810190612c14565b611ea1565b60405161060e9190613501565b60405180910390f35b61061f611fa1565b60405161062d929190613374565b60405180910390f35b610650600480360361064b9190810190612c14565b611fb5565b60405161065d9190613501565b60405180910390f35b61066e611fd6565b60405161067b919061358a565b60405180910390f35b61069e60048036036106999190810190612ce0565b611fdb565b6040516106ad9392919061351c565b60405180910390f35b6106be61203f565b6040516106cb9190613501565b60405180910390f35b6106ee60048036036106e99190810190612c14565b612051565b6040516106fd93929190613553565b60405180910390f35b60008060006002600085815260200190815260200160002060000154600260008681526020019081526020016000206001015460026000878152602001908152602001600020600201549250925092509193909250565b60608060ff83116107795761077061189d565b91509150610934565b600061078484611ea1565b9050606060016000838152602001908152602001600020805490506040519080825280602002602001820160405280156107cd5781602001602082028038833980820191505090505b509050606060016000848152602001908152602001600020805490506040519080825280602002602001820160405280156108175781602001602082028038833980820191505090505b50905060008090505b60016000858152602001908152602001600020805490508110156109295760016000858152602001908152602001600020818154811061085c57fe5b906000526020600020906003020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683828151811061089a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506001600085815260200190815260200160002081815481106108f257fe5b90600052602060002090600302016001015482828151811061091057fe5b6020026020010181815250508080600101915050610820565b508181945094505050505b915091565b6000606060016000858152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610a0c578382906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190610970565b50505050905060008090505b8151811015610a84578373ffffffffffffffffffffffffffffffffffffffff16828281518110610a4457fe5b60200260200101516040015173ffffffffffffffffffffffffffffffffffffffff161415610a7757600192505050610a8b565b8080600101915050610a18565b5060009150505b92915050565b73fffffffffffffffffffffffffffffffffffffffe73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a906134c6565b60405180910390fd5b6000610b1d611781565b90506000811415610b3157610b3061207b565b5b610b4560018261239c90919063ffffffff16565b8814610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d90613446565b60405180910390fd5b868611610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf906134a6565b60405180910390fd5b6000604060018989030181610bd957fe5b0614610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1190613486565b60405180910390fd5b8660026000838152602001908152602001600020600101541115610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a90613426565b60405180910390fd5b6000600260008a81526020019081526020016000206000015414610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc390613466565b60405180910390fd5b604051806060016040528089815260200188815260200187815250600260008a8152602001908152602001600020600082015181600001556020820151816001015560408201518160020155905050600388908060018154018082558091505090600182039060005260206000200160009091929091909150555060008060008a815260200190815260200160002081610d6691906128f0565b506000600160008a815260200190815260200160002081610d8791906128f0565b506060610ddf610dda87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506123bb565b6123e9565b905060008090505b8151811015610f51576060610e0e838381518110610e0157fe5b60200260200101516123e9565b90506000808c81526020019081526020016000208054809190600101610e3491906128f0565b506040518060600160405280610e5d83600081518110610e5057fe5b60200260200101516124c6565b8152602001610e7f83600181518110610e7257fe5b60200260200101516124c6565b8152602001610ea183600281518110610e9457fe5b6020026020010151612537565b73ffffffffffffffffffffffffffffffffffffffff168152506000808d81526020019081526020016000208381548110610ed757fe5b9060005260206000209060030201600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050508080600101915050610de7565b506060610fa9610fa486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506123bb565b6123e9565b905060008090505b815181101561111d576060610fd8838381518110610fcb57fe5b60200260200101516123e9565b9050600160008d81526020019081526020016000208054809190600101610fff91906128f0565b5060405180606001604052806110288360008151811061101b57fe5b60200260200101516124c6565b815260200161104a8360018151811061103d57fe5b60200260200101516124c6565b815260200161106c8360028151811061105f57fe5b6020026020010151612537565b73ffffffffffffffffffffffffffffffffffffffff16815250600160008e815260200190815260200160002083815481106110a357fe5b9060005260206000209060030201600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050508080600101915050610fb1565b5050505050505050505050565b60006060600080858152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156111fc578382906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611160565b50505050905060008090505b8151811015611274578373ffffffffffffffffffffffffffffffffffffffff1682828151811061123457fe5b60200260200101516040015173ffffffffffffffffffffffffffffffffffffffff1614156112675760019250505061127b565b8080600101915050611208565b5060009150505b92915050565b604081565b60006002600160f81b84846040516020016112a3939291906132c6565b6040516020818303038152906040526040516112bf9190613303565b602060405180830381855afa1580156112dc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052506112ff9190810190612b48565b905092915050565b60006060600080848152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156113d9578382906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250508152602001906001019061133d565b505050509050600080905060008090505b825181101561142c5761141d83828151811061140257fe5b6020026020010151602001518361239c90919063ffffffff16565b915080806001019150506113ea565b508092505050919050565b73fffffffffffffffffffffffffffffffffffffffe81565b600080600080859050600060218087518161146657fe5b04029050600081111561147f5761147c876117ab565b91505b6000602190505b818111611509576000600182038801519050818801519550806000602081106114ab57fe5b1a60f81b9450600060f81b857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156114f0576114e98685611286565b93506114fd565b6114fa8487611286565b93505b50602181019050611486565b508782149450505050509392505050565b60405161152690613344565b604051809103902081565b60008060009050600080905060008090505b84518167ffffffffffffffff16101561160c57606061156e868367ffffffffffffffff16604161255a565b9050600061158582896125e690919063ffffffff16565b905061158f612922565b6115998a83611619565b90506115a58a8361112a565b80156115dc57508473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16115b156115fe578194506115fb81602001518761239c90919063ffffffff16565b95505b505050604181019050611543565b5081925050509392505050565b611621612922565b6060600080858152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156116f1578382906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611655565b50505050905060008090505b8151811015611779578373ffffffffffffffffffffffffffffffffffffffff1682828151811061172957fe5b60200260200101516040015173ffffffffffffffffffffffffffffffffffffffff16141561176c5781818151811061175d57fe5b60200260200101519250611779565b80806001019150506116fd565b505092915050565b600061178c43611ea1565b905090565b60006117a461179e611781565b8361112a565b9050919050565b60006002600060f81b836040516020016117c692919061329a565b6040516020818303038152906040526040516117e29190613303565b602060405180830381855afa1580156117ff573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052506118229190810190612b48565b9050919050565b60008060008061184a600161183c611781565b61239c90919063ffffffff16565b905060026000828152602001908152602001600020600001546002600083815260200190815260200160002060010154600260008481526020019081526020016000206002015493509350935050909192565b606080606060076040519080825280602002602001820160405280156118d25781602001602082028038833980820191505090505b509050735973918275c01f50555d44e92c9d9b353cadad54816000815181106118f757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073b8bb158b93c94ed35c1970d610d1e2b34e26652c8160018151811061195357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073f84c74dea96df0ec22e11e7c33996c73fcc2d822816002815181106119af57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073b702f1c9154ac9c08da247a8e30ee6f2f3373f4181600381518110611a0b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737fcd58c2d53d980b247f1612fdba93e9a76193e681600481518110611a6757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050730375b2fc7140977c9c76d45421564e354ed4227781600581518110611ac357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507342eefcda06ead475cde3731b8eb138e88cd0bac381600681518110611b1f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606007604051908082528060200260200182016040528015611b8b5781602001602082028038833980820191505090505b50905061271081600081518110611b9e57fe5b60200260200101818152505061271081600181518110611bba57fe5b60200260200101818152505061271081600281518110611bd657fe5b60200260200101818152505061271081600381518110611bf257fe5b60200260200101818152505061271081600481518110611c0e57fe5b60200260200101818152505061271081600581518110611c2a57fe5b60200260200101818152505061271081600681518110611c4657fe5b60200260200101818152505081819350935050509091565b60ff81565b60016020528160005260406000208181548110611c7c57fe5b9060005260206000209060030201600091509150508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b6000611cda611cd4611781565b83610939565b9050919050565b604051611ced9061331a565b604051809103902081565b6000606060016000848152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611dcb578382906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611d2f565b505050509050600080905060008090505b8251811015611e1e57611e0f838281518110611df457fe5b6020026020010151602001518361239c90919063ffffffff16565b91508080600101915050611ddc565b508092505050919050565b604051611e359061332f565b604051809103902081565b600080600080611e4e611781565b905060026000828152602001908152602001600020600001546002600083815260200190815260200160002060010154600260008481526020019081526020016000206002015493509350935050909192565b60008060038054905090505b6000811115611f6157611ebe612959565b6002600060036001850381548110611ed257fe5b906000526020600020015481526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050905083816020015111158015611f2f57506000816040015114155b8015611f3f575080604001518411155b15611f5257806000015192505050611f9c565b50808060019003915050611ead565b5060006003805490501115611f9757600360016003805490500381548110611f8557fe5b90600052602060002001549050611f9c565b600090505b919050565b606080611fad4361075d565b915091509091565b60038181548110611fc257fe5b906000526020600020016000915090505481565b600281565b60006020528160005260406000208181548110611ff457fe5b9060005260206000209060030201600091509150508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b60006040438161204b57fe5b04905090565b60026020528060005260406000206000915090508060000154908060010154908060020154905083565b60608061208661189d565b8092508193505050600080905060405180606001604052808281526020016000815260200160ff81525060026000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155905050600381908060018154018082558091505090600182039060005260206000200160009091929091909150555060008060008381526020019081526020016000208161212f91906128f0565b506000600160008381526020019081526020016000208161215091906128f0565b5060008090505b835181101561227257600080838152602001908152602001600020805480919060010161218491906128f0565b5060405180606001604052808281526020018483815181106121a257fe5b602002602001015181526020018583815181106121bb57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681525060008084815260200190815260200160002082815481106121f957fe5b9060005260206000209060030201600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508080600101915050612157565b5060008090505b8351811015612396576001600083815260200190815260200160002080548091906001016122a791906128f0565b5060405180606001604052808281526020018483815181106122c557fe5b602002602001015181526020018583815181106122de57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681525060016000848152602001908152602001600020828154811061231d57fe5b9060005260206000209060030201600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508080600101915050612279565b50505050565b6000808284019050838110156123b157600080fd5b8091505092915050565b6123c361297a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60606123f4826126f0565b6123fd57600080fd5b60006124088361273e565b905060608160405190808252806020026020018201604052801561244657816020015b612433612994565b81526020019060019003908161242b5790505b509050600061245885602001516127af565b8560200151019050600080600090505b848110156124b95761247983612838565b915060405180604001604052808381526020018481525084828151811061249c57fe5b602002602001018190525081830192508080600101915050612468565b5082945050505050919050565b60008082600001511180156124e057506021826000015111155b6124e957600080fd5b60006124f883602001516127af565b9050600081846000015103905060008083866020015101905080519150602083101561252b57826020036101000a820491505b81945050505050919050565b6000601582600001511461254a57600080fd5b612553826124c6565b9050919050565b60608183018451101561256c57600080fd5b6060821560008114612589576040519150602082016040526125da565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156125c757805183526020830192506020810190506125aa565b50868552601f19601f8301166040525050505b50809150509392505050565b600080600080604185511461260157600093505050506126ea565b602085015192506040850151915060ff6041860151169050601b8160ff16101561262c57601b810190505b601b8160ff16141580156126445750601c8160ff1614155b1561265557600093505050506126ea565b60006001878386866040516000815260200160405260405161267a94939291906133e1565b6020604051602081039080840390855afa15801561269c573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126e257600080fd5b809450505050505b92915050565b600080826000015114156127075760009050612739565b60008083602001519050805160001a915060c060ff168260ff16101561273257600092505050612739565b6001925050505b919050565b6000808260000151141561275557600090506127aa565b6000809050600061276984602001516127af565b84602001510190506000846000015185602001510190505b808210156127a35761279282612838565b820191508280600101935050612781565b8293505050505b919050565b600080825160001a9050608060ff168110156127cf576000915050612833565b60b860ff168110806127f4575060c060ff1681101580156127f3575060f860ff1681105b5b15612803576001915050612833565b60c060ff168110156128235760018060b80360ff16820301915050612833565b60018060f80360ff168203019150505b919050565b6000806000835160001a9050608060ff1681101561285957600191506128e6565b60b860ff16811015612876576001608060ff1682030191506128e5565b60c060ff168110156128a65760b78103600185019450806020036101000a855104600182018101935050506128e4565b60f860ff168110156128c357600160c060ff1682030191506128e3565b60f78103600185019450806020036101000a855104600182018101935050505b5b5b5b8192505050919050565b81548183558181111561291d5760030281600302836000526020600020918201910161291c91906129ae565b5b505050565b60405180606001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60405180606001604052806000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060008152602001600081525090565b612a0191905b808211156129fd5760008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506003016129b4565b5090565b90565b600081359050612a1381613783565b92915050565b600081359050612a288161379a565b92915050565b600081519050612a3d8161379a565b92915050565b60008083601f840112612a5557600080fd5b8235905067ffffffffffffffff811115612a6e57600080fd5b602083019150836001820283011115612a8657600080fd5b9250929050565b600082601f830112612a9e57600080fd5b8135612ab1612aac826135d2565b6135a5565b91508082526020830160208301858383011115612acd57600080fd5b612ad883828461372d565b50505092915050565b600081359050612af0816137b1565b92915050565b600060208284031215612b0857600080fd5b6000612b1684828501612a04565b91505092915050565b600060208284031215612b3157600080fd5b6000612b3f84828501612a19565b91505092915050565b600060208284031215612b5a57600080fd5b6000612b6884828501612a2e565b91505092915050565b60008060408385031215612b8457600080fd5b6000612b9285828601612a19565b9250506020612ba385828601612a19565b9150509250929050565b600080600060608486031215612bc257600080fd5b6000612bd086828701612a19565b9350506020612be186828701612a19565b925050604084013567ffffffffffffffff811115612bfe57600080fd5b612c0a86828701612a8d565b9150509250925092565b600060208284031215612c2657600080fd5b6000612c3484828501612ae1565b91505092915050565b60008060408385031215612c5057600080fd5b6000612c5e85828601612ae1565b9250506020612c6f85828601612a04565b9150509250929050565b600080600060608486031215612c8e57600080fd5b6000612c9c86828701612ae1565b9350506020612cad86828701612a19565b925050604084013567ffffffffffffffff811115612cca57600080fd5b612cd686828701612a8d565b9150509250925092565b60008060408385031215612cf357600080fd5b6000612d0185828601612ae1565b9250506020612d1285828601612ae1565b9150509250929050565b600080600080600080600060a0888a031215612d3757600080fd5b6000612d458a828b01612ae1565b9750506020612d568a828b01612ae1565b9650506040612d678a828b01612ae1565b955050606088013567ffffffffffffffff811115612d8457600080fd5b612d908a828b01612a43565b9450945050608088013567ffffffffffffffff811115612daf57600080fd5b612dbb8a828b01612a43565b925092505092959891949750929550565b6000612dd88383612dfc565b60208301905092915050565b6000612df0838361326d565b60208301905092915050565b612e05816136a2565b82525050565b612e14816136a2565b82525050565b6000612e258261361e565b612e2f8185613659565b9350612e3a836135fe565b8060005b83811015612e6b578151612e528882612dcc565b9750612e5d8361363f565b925050600181019050612e3e565b5085935050505092915050565b6000612e8382613629565b612e8d818561366a565b9350612e988361360e565b8060005b83811015612ec9578151612eb08882612de4565b9750612ebb8361364c565b925050600181019050612e9c565b5085935050505092915050565b612edf816136b4565b82525050565b612ef6612ef1826136c0565b61376f565b82525050565b612f05816136ec565b82525050565b612f1c612f17826136ec565b613779565b82525050565b6000612f2d82613634565b612f37818561367b565b9350612f4781856020860161373c565b80840191505092915050565b6000612f60600483613697565b91507f766f7465000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b6000612fa0602d83613686565b91507f537461727420626c6f636b206d7573742062652067726561746572207468616e60008301527f2063757272656e74207370616e000000000000000000000000000000000000006020830152604082019050919050565b6000613006600383613697565b91507f31333700000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b6000613046600f83613686565b91507f496e76616c6964207370616e20696400000000000000000000000000000000006000830152602082019050919050565b6000613086601383613686565b91507f5370616e20616c726561647920657869737473000000000000000000000000006000830152602082019050919050565b60006130c6604583613686565b91507f446966666572656e6365206265747765656e20737461727420616e6420656e6460008301527f20626c6f636b206d75737420626520696e206d756c7469706c6573206f66207360208301527f7072696e740000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000613152600c83613697565b91507f6865696d64616c6c2d31333700000000000000000000000000000000000000006000830152600c82019050919050565b6000613192602a83613686565b91507f456e6420626c6f636b206d7573742062652067726561746572207468616e207360008301527f7461727420626c6f636b000000000000000000000000000000000000000000006020830152604082019050919050565b60006131f8601283613686565b91507f4e6f742053797374656d204164646573732100000000000000000000000000006000830152602082019050919050565b606082016000820151613241600085018261326d565b506020820151613254602085018261326d565b5060408201516132676040850182612dfc565b50505050565b61327681613716565b82525050565b61328581613716565b82525050565b61329481613720565b82525050565b60006132a68285612ee5565b6001820191506132b68284612f0b565b6020820191508190509392505050565b60006132d28286612ee5565b6001820191506132e28285612f0b565b6020820191506132f28284612f0b565b602082019150819050949350505050565b600061330f8284612f22565b915081905092915050565b600061332582612f53565b9150819050919050565b600061333a82612ff9565b9150819050919050565b600061334f82613145565b9150819050919050565b600060208201905061336e6000830184612e0b565b92915050565b6000604082019050818103600083015261338e8185612e1a565b905081810360208301526133a28184612e78565b90509392505050565b60006020820190506133c06000830184612ed6565b92915050565b60006020820190506133db6000830184612efc565b92915050565b60006080820190506133f66000830187612efc565b613403602083018661328b565b6134106040830185612efc565b61341d6060830184612efc565b95945050505050565b6000602082019050818103600083015261343f81612f93565b9050919050565b6000602082019050818103600083015261345f81613039565b9050919050565b6000602082019050818103600083015261347f81613079565b9050919050565b6000602082019050818103600083015261349f816130b9565b9050919050565b600060208201905081810360008301526134bf81613185565b9050919050565b600060208201905081810360008301526134df816131eb565b9050919050565b60006060820190506134fb600083018461322b565b92915050565b6000602082019050613516600083018461327c565b92915050565b6000606082019050613531600083018661327c565b61353e602083018561327c565b61354b6040830184612e0b565b949350505050565b6000606082019050613568600083018661327c565b613575602083018561327c565b613582604083018461327c565b949350505050565b600060208201905061359f600083018461328b565b92915050565b6000604051905081810181811067ffffffffffffffff821117156135c857600080fd5b8060405250919050565b600067ffffffffffffffff8211156135e957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006136ad826136f6565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561375a57808201518184015260208101905061373f565b83811115613769576000848401525b50505050565b6000819050919050565b6000819050919050565b61378c816136a2565b811461379757600080fd5b50565b6137a3816136ec565b81146137ae57600080fd5b50565b6137ba81613716565b81146137c557600080fd5b5056fea365627a7a72315820638c74b73aaddeb2f2fb9267028e09737291458f6da93b6619d30c86432701d96c6578706572696d656e74616cf564736f6c634300050b0040" + }, + "0000000000000000000000000000000000001001": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806319494a17146100465780633434735f146100e15780635407ca671461012b575b600080fd5b6100c76004803603604081101561005c57600080fd5b81019080803590602001909291908035906020019064010000000081111561008357600080fd5b82018360208201111561009557600080fd5b803590602001918460018302840111640100000000831117156100b757600080fd5b9091929391929390505050610149565b604051808215151515815260200191505060405180910390f35b6100e961047a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610133610492565b6040518082815260200191505060405180910390f35b600073fffffffffffffffffffffffffffffffffffffffe73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f742053797374656d2041646465737321000000000000000000000000000081525060200191505060405180910390fd5b606061025761025285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610498565b6104c6565b905060006102788260008151811061026b57fe5b60200260200101516105a3565b905080600160005401146102f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f537461746549647320617265206e6f742073657175656e7469616c000000000081525060200191505060405180910390fd5b600080815480929190600101919050555060006103248360018151811061031757fe5b6020026020010151610614565b905060606103458460028151811061033857fe5b6020026020010151610637565b9050610350826106c3565b1561046f576000624c4b409050606084836040516024018083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103aa57808201518184015260208101905061038f565b50505050905090810190601f1680156103d75780820380516001836020036101000a031916815260200191505b5093505050506040516020818303038152906040527f26c53bea000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008082516020840160008887f1965050505b505050509392505050565b73fffffffffffffffffffffffffffffffffffffffe81565b60005481565b6104a0610943565b600060208301905060405180604001604052808451815260200182815250915050919050565b60606104d1826106dc565b6104da57600080fd5b60006104e58361072a565b905060608160405190808252806020026020018201604052801561052357816020015b61051061095d565b8152602001906001900390816105085790505b5090506000610535856020015161079b565b8560200151019050600080600090505b848110156105965761055683610824565b915060405180604001604052808381526020018481525084828151811061057957fe5b602002602001018190525081830192508080600101915050610545565b5082945050505050919050565b60008082600001511180156105bd57506021826000015111155b6105c657600080fd5b60006105d5836020015161079b565b9050600081846000015103905060008083866020015101905080519150602083101561060857826020036101000a820491505b81945050505050919050565b6000601582600001511461062757600080fd5b610630826105a3565b9050919050565b6060600082600001511161064a57600080fd5b6000610659836020015161079b565b905060008184600001510390506060816040519080825280601f01601f19166020018201604052801561069b5781602001600182028038833980820191505090505b50905060008160200190506106b78487602001510182856108dc565b81945050505050919050565b600080823b905060008163ffffffff1611915050919050565b600080826000015114156106f35760009050610725565b60008083602001519050805160001a915060c060ff168260ff16101561071e57600092505050610725565b6001925050505b919050565b600080826000015114156107415760009050610796565b60008090506000610755846020015161079b565b84602001510190506000846000015185602001510190505b8082101561078f5761077e82610824565b82019150828060010193505061076d565b8293505050505b919050565b600080825160001a9050608060ff168110156107bb57600091505061081f565b60b860ff168110806107e0575060c060ff1681101580156107df575060f860ff1681105b5b156107ef57600191505061081f565b60c060ff1681101561080f5760018060b80360ff1682030191505061081f565b60018060f80360ff168203019150505b919050565b6000806000835160001a9050608060ff1681101561084557600191506108d2565b60b860ff16811015610862576001608060ff1682030191506108d1565b60c060ff168110156108925760b78103600185019450806020036101000a855104600182018101935050506108d0565b60f860ff168110156108af57600160c060ff1682030191506108cf565b60f78103600185019450806020036101000a855104600182018101935050505b5b5b5b8192505050919050565b60008114156108ea5761093e565b5b602060ff16811061091a5782518252602060ff1683019250602060ff1682019150602060ff16810390506108eb565b6000600182602060ff16036101000a03905080198451168184511681811785525050505b505050565b604051806040016040528060008152602001600081525090565b60405180604001604052806000815260200160008152509056fea265627a7a7231582083fbdacb76f32b4112d0f7db9a596937925824798a0026ba0232322390b5263764736f6c634300050b0032" + }, + "0000000000000000000000000000000000001010": { + "balance": "0x204fcce2c5a141f7f9a00000", + "code": "0x60806040526004361061019c5760003560e01c806377d32e94116100ec578063acd06cb31161008a578063e306f77911610064578063e306f77914610a7b578063e614d0d614610aa6578063f2fde38b14610ad1578063fc0c546a14610b225761019c565b8063acd06cb31461097a578063b789543c146109cd578063cc79f97b14610a505761019c565b80639025e64c116100c65780639025e64c146107c957806395d89b4114610859578063a9059cbb146108e9578063abceeba21461094f5761019c565b806377d32e94146106315780638da5cb5b146107435780638f32d59b1461079a5761019c565b806347e7ef24116101595780637019d41a116101335780637019d41a1461053357806370a082311461058a578063715018a6146105ef578063771282f6146106065761019c565b806347e7ef2414610410578063485cc9551461046b57806360f96a8f146104dc5761019c565b806306fdde03146101a15780631499c5921461023157806318160ddd1461028257806319d27d9c146102ad5780632e1a7d4d146103b1578063313ce567146103df575b600080fd5b3480156101ad57600080fd5b506101b6610b79565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f65780820151818401526020810190506101db565b50505050905090810190601f1680156102235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023d57600080fd5b506102806004803603602081101561025457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bb6565b005b34801561028e57600080fd5b50610297610c24565b6040518082815260200191505060405180910390f35b3480156102b957600080fd5b5061036f600480360360a08110156102d057600080fd5b81019080803590602001906401000000008111156102ed57600080fd5b8201836020820111156102ff57600080fd5b8035906020019184600183028401116401000000008311171561032157600080fd5b9091929391929390803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103dd600480360360208110156103c757600080fd5b8101908080359060200190929190505050610e06565b005b3480156103eb57600080fd5b506103f4610f58565b604051808260ff1660ff16815260200191505060405180910390f35b34801561041c57600080fd5b506104696004803603604081101561043357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f61565b005b34801561047757600080fd5b506104da6004803603604081101561048e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061111d565b005b3480156104e857600080fd5b506104f16111ec565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561053f57600080fd5b50610548611212565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561059657600080fd5b506105d9600480360360208110156105ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611238565b6040518082815260200191505060405180910390f35b3480156105fb57600080fd5b50610604611259565b005b34801561061257600080fd5b5061061b611329565b6040518082815260200191505060405180910390f35b34801561063d57600080fd5b506107016004803603604081101561065457600080fd5b81019080803590602001909291908035906020019064010000000081111561067b57600080fd5b82018360208201111561068d57600080fd5b803590602001918460018302840111640100000000831117156106af57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061132f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561074f57600080fd5b506107586114b4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107a657600080fd5b506107af6114dd565b604051808215151515815260200191505060405180910390f35b3480156107d557600080fd5b506107de611534565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561081e578082015181840152602081019050610803565b50505050905090810190601f16801561084b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561086557600080fd5b5061086e61156d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108ae578082015181840152602081019050610893565b50505050905090810190601f1680156108db5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610935600480360360408110156108ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115aa565b604051808215151515815260200191505060405180910390f35b34801561095b57600080fd5b506109646115d0565b6040518082815260200191505060405180910390f35b34801561098657600080fd5b506109b36004803603602081101561099d57600080fd5b810190808035906020019092919050505061165d565b604051808215151515815260200191505060405180910390f35b3480156109d957600080fd5b50610a3a600480360360808110156109f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061167d565b6040518082815260200191505060405180910390f35b348015610a5c57600080fd5b50610a6561169d565b6040518082815260200191505060405180910390f35b348015610a8757600080fd5b50610a906116a2565b6040518082815260200191505060405180910390f35b348015610ab257600080fd5b50610abb6116a8565b6040518082815260200191505060405180910390f35b348015610add57600080fd5b50610b2060048036036020811015610af457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611735565b005b348015610b2e57600080fd5b50610b37611752565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60606040518060400160405280600b81526020017f4d6174696320546f6b656e000000000000000000000000000000000000000000815250905090565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f44697361626c656420666561747572650000000000000000000000000000000081525060200191505060405180910390fd5b6000601260ff16600a0a6402540be40002905090565b6000808511610c4857600080fd5b6000831480610c575750824311155b610cc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5369676e6174757265206973206578706972656400000000000000000000000081525060200191505060405180910390fd5b6000610cd73387878761167d565b9050600015156005600083815260200190815260200160002060009054906101000a900460ff16151514610d73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f536967206465616374697661746564000000000000000000000000000000000081525060200191505060405180910390fd5b60016005600083815260200190815260200160002060006101000a81548160ff021916908315150217905550610ded8189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061132f565b9150610dfa828488611778565b50509695505050505050565b60003390506000610e1682611238565b9050610e2d83600654611b3590919063ffffffff16565b600681905550600083118015610e4257508234145b610eb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e73756666696369656e7420616d6f756e740000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f8584610f3087611238565b60405180848152602001838152602001828152602001935050505060405180910390a3505050565b60006012905090565b610f696114dd565b610f7257600080fd5b600081118015610faf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611f036023913960400191505060405180910390fd5b600061100f83611238565b905060008390508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561105c573d6000803e3d6000fd5b5061107283600654611b5590919063ffffffff16565b6006819055508373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f685856110f489611238565b60405180848152602001838152602001828152602001935050505060405180910390a350505050565b600760009054906101000a900460ff1615611183576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611ee06023913960400191505060405180910390fd5b6001600760006101000a81548160ff02191690831515021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506111e882611b74565b5050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff16319050919050565b6112616114dd565b61126a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60065481565b600080600080604185511461134a57600093505050506114ae565b602085015192506040850151915060ff6041860151169050601b8160ff16101561137557601b810190505b601b8160ff161415801561138d5750601c8160ff1614155b1561139e57600093505050506114ae565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156113fb573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4572726f7220696e2065637265636f766572000000000000000000000000000081525060200191505060405180910390fd5b5050505b92915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6040518060400160405280600181526020017f890000000000000000000000000000000000000000000000000000000000000081525081565b60606040518060400160405280600581526020017f4d41544943000000000000000000000000000000000000000000000000000000815250905090565b60008134146115bc57600090506115ca565b6115c7338484611778565b90505b92915050565b6040518060800160405280605b8152602001611f78605b91396040516020018082805190602001908083835b6020831061161f57805182526020820191506020810190506020830392506115fc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b60056020528060005260406000206000915054906101000a900460ff1681565b600061169361168e86868686611c6c565b611d42565b9050949350505050565b608981565b60015481565b604051806080016040528060528152602001611f26605291396040516020018082805190602001908083835b602083106116f757805182526020820191506020810190506020830392506116d4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b61173d6114dd565b61174657600080fd5b61174f81611b74565b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117f857600080fd5b505afa15801561180c573d6000803e3d6000fd5b505050506040513d602081101561182257600080fd5b8101908080519060200190929190505050905060003073ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156118b457600080fd5b505afa1580156118c8573d6000803e3d6000fd5b505050506040513d60208110156118de57600080fd5b810190808051906020019092919050505090506118fc868686611d8c565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c48786863073ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a0457600080fd5b505afa158015611a18573d6000803e3d6000fd5b505050506040513d6020811015611a2e57600080fd5b81019080805190602001909291905050503073ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611abc57600080fd5b505afa158015611ad0573d6000803e3d6000fd5b505050506040513d6020811015611ae657600080fd5b8101908080519060200190929190505050604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a46001925050509392505050565b600082821115611b4457600080fd5b600082840390508091505092915050565b600080828401905083811015611b6a57600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bae57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806040518060800160405280605b8152602001611f78605b91396040516020018082805190602001908083835b60208310611cbe5780518252602082019150602081019050602083039250611c9b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905060405181815273ffffffffffffffffffffffffffffffffffffffff8716602082015285604082015284606082015283608082015260a0812092505081915050949350505050565b60008060015490506040517f190100000000000000000000000000000000000000000000000000000000000081528160028201528360228201526042812092505081915050919050565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f63616e27742073656e6420746f204d524332300000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611e74573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505056fe54686520636f6e747261637420697320616c726561647920696e697469616c697a6564496e73756666696369656e7420616d6f756e74206f7220696e76616c69642075736572454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429546f6b656e5472616e736665724f726465722861646472657373207370656e6465722c75696e7432353620746f6b656e49644f72416d6f756e742c6279746573333220646174612c75696e743235362065787069726174696f6e29a265627a7a7231582098247ec3c8d127ebf969c8f317e340b1cd6c481af077234c38e0c7d92aba4d6364736f6c634300050b0032" + }, + "5973918275C01F50555d44e92c9d9b353CaDAD54": { + "balance": "0x3635c9adc5dea00000" + }, + "b8bB158B93c94ed35c1970D610d1E2B34E26652c": { + "balance": "0x3635c9adc5dea00000" + }, + "F84C74dEa96DF0EC22e11e7C33996C73FCC2D822": { + "balance": "0x3635c9adc5dea00000" + }, + "b702f1C9154ac9c08Da247a8e30ee6F2F3373f41": { + "balance": "0x3635c9adc5dea00000" + }, + "7fCD58C2D53D980b247F1612FdbA93E9a76193E6": { + "balance": "0x3635c9adc5dea00000" + }, + "0375b2fc7140977c9c76D45421564e354ED42277": { + "balance": "0x3635c9adc5dea00000" + }, + "42EEfcda06eaD475cdE3731B8eb138e88CD0bAC3": { + "balance": "0x3635c9adc5dea00000" + } +} \ No newline at end of file diff --git a/core/genesis.go b/core/genesis.go index 48f38622df..1057a9b793 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -254,6 +254,8 @@ func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig { return params.GoerliChainConfig case ghash == params.MumbaiGenesisHash: return params.MumbaiChainConfig + case ghash == params.BorMainnetGenesisHash: + return params.BorMainnetChainConfig default: return params.AllEthashProtocolChanges } @@ -417,6 +419,23 @@ func DefaultMumbaiGenesisBlock() *Genesis { } } +//DefaultBorMainnet returns the Bor Mainnet network gensis block. +func DefaultBorMainnetGenesisBlock() *Genesis { + return &Genesis{ + Config: params.BorMainnetChainConfig, + Nonce: 0x0, + Timestamp: 0x5ED20F84, + GasLimit: 0x989680, + Difficulty: big.NewInt(1), + Mixhash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), + Coinbase: common.HexToAddress("0x0000000000000000000000000000000000000000"), + Alloc: readPrealloc("allocs/bormainnet.json"), + Number: 0x0, + GasUsed: 0x0, + ParentHash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), + } +} + // DeveloperGenesisBlock returns the 'geth --dev' genesis block. func DeveloperGenesisBlock(period uint64, faucet common.Address) *Genesis { // Override the default period to the user requested one diff --git a/internal/debug/flags.go b/internal/debug/flags.go index 8892701bb1..7ae662f767 100644 --- a/internal/debug/flags.go +++ b/internal/debug/flags.go @@ -249,6 +249,9 @@ func Setup(ctx *cli.Context) error { } else if ctx.GlobalIsSet("mumbai") { address := fmt.Sprintf("%s:%d", "0.0.0.0", 7071) StartPProf(address, !ctx.GlobalIsSet("metrics.addr")) + } else if ctx.GlobalIsSet("bor-mainnet") { + address := fmt.Sprintf("%s:%d", "0.0.0.0", 7071) + StartPProf(address, !ctx.GlobalIsSet("metrics.addr")) } return nil } diff --git a/mobile/geth.go b/mobile/geth.go index 3923c02a37..6a9d75c35b 100644 --- a/mobile/geth.go +++ b/mobile/geth.go @@ -179,6 +179,13 @@ func NewNode(datadir string, config *NodeConfig) (stack *Node, _ error) { config.EthereumNetworkID = 5 } } + // If we have the Bor Mainnet, hard code the chain configs too + if config.EthereumGenesis == BorMainnetGenesis() { + genesis.Config = params.BorMainnetChainConfig + if config.EthereumNetworkID == 1 { + config.EthereumNetworkID = 137 + } + } // If we have the Mumbai testnet, hard code the chain configs too if config.EthereumGenesis == MumbaiGenesis() { genesis.Config = params.MumbaiChainConfig diff --git a/mobile/params.go b/mobile/params.go index 44b348f45b..71ab014a27 100644 --- a/mobile/params.go +++ b/mobile/params.go @@ -68,6 +68,15 @@ func MumbaiGenesis() string { return string(enc) } +// BorMainnetGenesis returns the JSON spec to use for the Mumbai test network +func BorMainnetGenesis() string { + enc, err := json.Marshal(core.DefaultBorMainnetGenesisBlock()) + if err != nil { + panic(err) + } + return string(enc) +} + // FoundationBootnodes returns the enode URLs of the P2P bootstrap nodes operated // by the foundation running the V5 discovery protocol. func FoundationBootnodes() *Enodes { diff --git a/params/bootnodes.go b/params/bootnodes.go index 09f4a682ba..67adcf0464 100644 --- a/params/bootnodes.go +++ b/params/bootnodes.go @@ -74,6 +74,13 @@ var MumbaiBootnodes = []string{ "enode://f0f48a8781629f95ff02606081e6e43e4aebd503f3d07fc931fad7dd5ca1ba52bd849a6f6c3be0e375cf13c9ae04d859c4a9ae3546dc8ed4f10aa5dbb47d4998@34.226.134.117:30303", } +// BorMainnetBootnodes are the enode URLs of the P2P bootstrap nodes running on the +// main Bor network. +var BorMainnetBootnodes = []string{ + "enode://0cb82b395094ee4a2915e9714894627de9ed8498fb881cec6db7c65e8b9a5bd7f2f25cc84e71e89d0947e51c76e85d0847de848c7782b13c0255247a6758178c@44.232.55.71:30303", + "enode://88116f4295f5a31538ae409e4d44ad40d22e44ee9342869e7d68bdec55b0f83c1530355ce8b41fbec0928a7d75a5745d528450d30aec92066ab6ba1ee351d710@159.203.9.164:30303", +} + var V5Bootnodes = []string{ // Teku team's bootnode "enr:-KG4QOtcP9X1FbIMOe17QNMKqDxCpm14jcX5tiOE4_TyMrFqbmhPZHK_ZPG2Gxb1GE2xdtodOfx9-cgvNtxnRyHEmC0ghGV0aDKQ9aX9QgAAAAD__________4JpZIJ2NIJpcIQDE8KdiXNlY3AyNTZrMaEDhpehBDbZjM_L9ek699Y7vhUJ-eAdMyQW_Fil522Y0fODdGNwgiMog3VkcIIjKA", @@ -110,6 +117,8 @@ func KnownDNSNetwork(genesis common.Hash, protocol string) string { net = "goerli" case MumbaiGenesisHash: net = "mumbai" + case BorMainnetGenesisHash: + net = "bor-mainnet" default: return "" } diff --git a/params/config.go b/params/config.go index 32bd91f55a..132d7c962d 100644 --- a/params/config.go +++ b/params/config.go @@ -27,11 +27,12 @@ import ( // Genesis hashes to enforce below configs on. var ( - MainnetGenesisHash = common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") - RopstenGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") - RinkebyGenesisHash = common.HexToHash("0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177") - GoerliGenesisHash = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a") - MumbaiGenesisHash = common.HexToHash("0x7b66506a9ebdbf30d32b43c5f15a3b1216269a1ec3a75aa3182b86176a2b1ca7") + MainnetGenesisHash = common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") + RopstenGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") + RinkebyGenesisHash = common.HexToHash("0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177") + GoerliGenesisHash = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a") + MumbaiGenesisHash = common.HexToHash("0x7b66506a9ebdbf30d32b43c5f15a3b1216269a1ec3a75aa3182b86176a2b1ca7") + BorMainnetGenesisHash = common.HexToHash("0xa9c28ce2141b56c474f1dc504bee9b01eb1bd7d1a507580d5519d4437a97de1b") ) // TrustedCheckpoints associates each known checkpoint with the genesis hash of @@ -247,6 +248,39 @@ var ( }, } + BorMainnetChainConfig = &ChainConfig{ + ChainID: big.NewInt(137), + HomesteadBlock: big.NewInt(0), + EIP150Block: big.NewInt(0), + EIP150Hash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(3395000), + MuirGlacierBlock: big.NewInt(3395000), + BerlinBlock: big.NewInt(14750000), + Bor: &BorConfig{ + Period: 2, + ProducerDelay: 6, + Sprint: 64, + BackupMultiplier: 2, + ValidatorContract: "0x0000000000000000000000000000000000001000", + StateReceiverContract: "0x0000000000000000000000000000000000001001", + OverrideStateSyncRecords: map[string]int{ + "14949120": 8, + "14949184": 0, + "14953472": 0, + "14953536": 5, + "14953600": 0, + "14953664": 0, + "14953728": 0, + "14953792": 0, + "14953856": 0, + }, + }, + } // AllEthashProtocolChanges contains every protocol change (EIPs) introduced // and accepted by the Ethereum core developers into the Ethash consensus. // From da11e05e45583022e5e75a88d5107364acf461ed Mon Sep 17 00:00:00 2001 From: Uttam Singh Date: Sun, 19 Sep 2021 21:23:01 +0530 Subject: [PATCH 08/13] minor changes --- cmd/geth/consolecmd.go | 6 +----- core/allocs/{bormainnet.json => bor_mainnet.json} | 0 core/genesis.go | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) rename core/allocs/{bormainnet.json => bor_mainnet.json} (100%) diff --git a/cmd/geth/consolecmd.go b/cmd/geth/consolecmd.go index c4f4ebe6b7..f84055191b 100644 --- a/cmd/geth/consolecmd.go +++ b/cmd/geth/consolecmd.go @@ -134,13 +134,9 @@ func remoteConsole(ctx *cli.Context) error { path = filepath.Join(path, "rinkeby") } else if ctx.GlobalBool(utils.GoerliFlag.Name) { path = filepath.Join(path, "goerli") - } else if ctx.GlobalBool(utils.MumbaiFlag.Name) { + } else if (ctx.GlobalBool(utils.MumbaiFlag.Name) || ctx.GlobalBool(utils.BorMainnetFlag.Name)) { homeDir, _ := os.UserHomeDir() path = filepath.Join(homeDir, "/.bor/data") - } else if ctx.GlobalBool(utils.BorMainnetFlag.Name) { - homeDir, _ := os.UserHomeDir() - path = filepath.Join(homeDir, "/.bor/data") - } } endpoint = fmt.Sprintf("%s/geth.ipc", path) } diff --git a/core/allocs/bormainnet.json b/core/allocs/bor_mainnet.json similarity index 100% rename from core/allocs/bormainnet.json rename to core/allocs/bor_mainnet.json diff --git a/core/genesis.go b/core/genesis.go index 1057a9b793..278879777f 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -429,7 +429,7 @@ func DefaultBorMainnetGenesisBlock() *Genesis { Difficulty: big.NewInt(1), Mixhash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), Coinbase: common.HexToAddress("0x0000000000000000000000000000000000000000"), - Alloc: readPrealloc("allocs/bormainnet.json"), + Alloc: readPrealloc("allocs/bor_mainnet.json"), Number: 0x0, GasUsed: 0x0, ParentHash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), From b897d9fd64c9c58436d5e2152b91c3a0197d9387 Mon Sep 17 00:00:00 2001 From: Uttam Singh Date: Mon, 20 Sep 2021 11:26:29 +0530 Subject: [PATCH 09/13] minor changes --- cmd/geth/consolecmd.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmd/geth/consolecmd.go b/cmd/geth/consolecmd.go index f84055191b..62399fb362 100644 --- a/cmd/geth/consolecmd.go +++ b/cmd/geth/consolecmd.go @@ -134,11 +134,12 @@ func remoteConsole(ctx *cli.Context) error { path = filepath.Join(path, "rinkeby") } else if ctx.GlobalBool(utils.GoerliFlag.Name) { path = filepath.Join(path, "goerli") - } else if (ctx.GlobalBool(utils.MumbaiFlag.Name) || ctx.GlobalBool(utils.BorMainnetFlag.Name)) { + } else if ctx.GlobalBool(utils.MumbaiFlag.Name) || ctx.GlobalBool(utils.BorMainnetFlag.Name) { homeDir, _ := os.UserHomeDir() path = filepath.Join(homeDir, "/.bor/data") + } + endpoint = fmt.Sprintf("%s/geth.ipc", path) } - endpoint = fmt.Sprintf("%s/geth.ipc", path) } client, err := dialRPC(endpoint) if err != nil { From 6c7a9e1c410992486ce610ed3836cec35ba546e6 Mon Sep 17 00:00:00 2001 From: Uttam Singh Date: Mon, 20 Sep 2021 11:38:39 +0530 Subject: [PATCH 10/13] minor changes --- cmd/geth/consolecmd.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/geth/consolecmd.go b/cmd/geth/consolecmd.go index 62399fb362..75f9a82aa8 100644 --- a/cmd/geth/consolecmd.go +++ b/cmd/geth/consolecmd.go @@ -138,8 +138,8 @@ func remoteConsole(ctx *cli.Context) error { homeDir, _ := os.UserHomeDir() path = filepath.Join(homeDir, "/.bor/data") } - endpoint = fmt.Sprintf("%s/geth.ipc", path) } + endpoint = fmt.Sprintf("%s/geth.ipc", path) } client, err := dialRPC(endpoint) if err != nil { From 00b57887936433dd6b1662cc2409b05de322892f Mon Sep 17 00:00:00 2001 From: Krishna Upadhyaya Date: Tue, 21 Sep 2021 14:58:11 +0530 Subject: [PATCH 11/13] change: mumbai to bor-mumbai --- cmd/devp2p/nodesetcmd.go | 2 +- cmd/faucet/faucet.go | 2 +- cmd/geth/main.go | 2 +- cmd/utils/flags.go | 4 ++-- core/genesis.go | 9 +++------ internal/debug/flags.go | 5 +---- params/config.go | 4 +++- 7 files changed, 12 insertions(+), 16 deletions(-) diff --git a/cmd/devp2p/nodesetcmd.go b/cmd/devp2p/nodesetcmd.go index 3bdc052d28..ae636f5caa 100644 --- a/cmd/devp2p/nodesetcmd.go +++ b/cmd/devp2p/nodesetcmd.go @@ -235,7 +235,7 @@ func ethFilter(args []string) (nodeFilter, error) { filter = forkid.NewStaticFilter(params.GoerliChainConfig, params.GoerliGenesisHash) case "ropsten": filter = forkid.NewStaticFilter(params.RopstenChainConfig, params.RopstenGenesisHash) - case "mumbai": + case "bor-mumbai": filter = forkid.NewStaticFilter(params.MumbaiChainConfig, params.MumbaiGenesisHash) case "bor-mainnet": filter = forkid.NewStaticFilter(params.BorMainnetChainConfig, params.BorMainnetGenesisHash) diff --git a/cmd/faucet/faucet.go b/cmd/faucet/faucet.go index 981b7b6afc..4d0018eb2d 100644 --- a/cmd/faucet/faucet.go +++ b/cmd/faucet/faucet.go @@ -88,7 +88,7 @@ var ( goerliFlag = flag.Bool("goerli", false, "Initializes the faucet with Görli network config") rinkebyFlag = flag.Bool("rinkeby", false, "Initializes the faucet with Rinkeby network config") - mumbaiFlag = flag.Bool("mumbai", false, "Initializes the faucet with Mumbai network config") + mumbaiFlag = flag.Bool("bor-mumbai", false, "Initializes the faucet with Bor-Mumbai network config") ) var ( diff --git a/cmd/geth/main.go b/cmd/geth/main.go index d827558371..8c8aecf4d1 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -297,7 +297,7 @@ func prepare(ctx *cli.Context) { log.Info("Starting Geth on Ethereum mainnet...") } // If we're a full node on mainnet without --cache specified, bump default cache allowance - if ctx.GlobalString(utils.SyncModeFlag.Name) != "light" && !ctx.GlobalIsSet(utils.CacheFlag.Name) && !ctx.GlobalIsSet(utils.BorMainnetFlag.Name) && !ctx.GlobalIsSet(utils.NetworkIdFlag.Name) { + if ctx.GlobalString(utils.SyncModeFlag.Name) != "light" && !ctx.GlobalIsSet(utils.CacheFlag.Name) && !ctx.GlobalIsSet(utils.NetworkIdFlag.Name) { // Make sure we're not on any supported preconfigured testnet either if !ctx.GlobalIsSet(utils.RopstenFlag.Name) && !ctx.GlobalIsSet(utils.RinkebyFlag.Name) && !ctx.GlobalIsSet(utils.GoerliFlag.Name) && !ctx.GlobalIsSet(utils.MumbaiFlag.Name) && !ctx.GlobalIsSet(utils.DeveloperFlag.Name) { // Nope, we're really on mainnet. Bump that cache up! diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index bf8e3c64af..6fc76eddc3 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -156,7 +156,7 @@ var ( Usage: "Ropsten network: pre-configured proof-of-work test network", } MumbaiFlag = cli.BoolFlag{ - Name: "mumbai", + Name: "bor-mumbai", Usage: "Mumbai network: pre-configured proof-of-stake test network", } BorMainnetFlag = cli.BoolFlag{ @@ -805,7 +805,7 @@ func MakeDataDir(ctx *cli.Context) string { if ctx.GlobalBool(GoerliFlag.Name) { return filepath.Join(path, "goerli") } - if ctx.GlobalBool(MumbaiFlag.Name) { + if ctx.GlobalBool(MumbaiFlag.Name) || ctx.GlobalBool(BorMainnetFlag.Name) { homeDir, _ := os.UserHomeDir() return filepath.Join(homeDir, "/.bor/data") } diff --git a/core/genesis.go b/core/genesis.go index 278879777f..01a914ac62 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -423,16 +423,13 @@ func DefaultMumbaiGenesisBlock() *Genesis { func DefaultBorMainnetGenesisBlock() *Genesis { return &Genesis{ Config: params.BorMainnetChainConfig, - Nonce: 0x0, - Timestamp: 0x5ED20F84, - GasLimit: 0x989680, + Nonce: 0, + Timestamp: 1590824836, + GasLimit: 10000000, Difficulty: big.NewInt(1), Mixhash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), Coinbase: common.HexToAddress("0x0000000000000000000000000000000000000000"), Alloc: readPrealloc("allocs/bor_mainnet.json"), - Number: 0x0, - GasUsed: 0x0, - ParentHash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), } } diff --git a/internal/debug/flags.go b/internal/debug/flags.go index 7ae662f767..74bb9a6a7c 100644 --- a/internal/debug/flags.go +++ b/internal/debug/flags.go @@ -246,10 +246,7 @@ func Setup(ctx *cli.Context) error { // This context value ("metrics.addr") represents the utils.MetricsHTTPFlag.Name. // It cannot be imported because it will cause a cyclical dependency. StartPProf(address, !ctx.GlobalIsSet("metrics.addr")) - } else if ctx.GlobalIsSet("mumbai") { - address := fmt.Sprintf("%s:%d", "0.0.0.0", 7071) - StartPProf(address, !ctx.GlobalIsSet("metrics.addr")) - } else if ctx.GlobalIsSet("bor-mainnet") { + } else if ctx.GlobalIsSet("bor-mumbai") || ctx.GlobalIsSet("bor-mainnet") { address := fmt.Sprintf("%s:%d", "0.0.0.0", 7071) StartPProf(address, !ctx.GlobalIsSet("metrics.addr")) } diff --git a/params/config.go b/params/config.go index 132d7c962d..163f9656f8 100644 --- a/params/config.go +++ b/params/config.go @@ -251,8 +251,10 @@ var ( BorMainnetChainConfig = &ChainConfig{ ChainID: big.NewInt(137), HomesteadBlock: big.NewInt(0), - EIP150Block: big.NewInt(0), + DAOForkBlock: nil, + DAOForkSupport: true, EIP150Hash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), + EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(0), From 73af371938eab843d39dd136bc983924907eec4d Mon Sep 17 00:00:00 2001 From: Krishna Upadhyaya Date: Tue, 21 Sep 2021 16:13:49 +0530 Subject: [PATCH 12/13] update: default sync mode to snap --- cmd/geth/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/geth/config.go b/cmd/geth/config.go index bb8e5688a5..513dbc000a 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -347,7 +347,7 @@ func setDefaultMumbaiGethConfig(ctx *cli.Context, config *gethConfig) { config.Node.HTTPPort = 8545 config.Node.IPCPath = utils.MakeDataDir(ctx) + "/bor.ipc" config.Node.HTTPModules = []string{"eth", "net", "web3", "txpool", "bor"} - config.Eth.SyncMode = downloader.FullSync + config.Eth.SyncMode = downloader.SnapSync config.Eth.NetworkId = 80001 config.Eth.Miner.GasCeil = 20000000 //--miner.gastarget is depreceated, No longed used @@ -370,7 +370,7 @@ func setDefaultBorMainnetGethConfig(ctx *cli.Context, config *gethConfig) { config.Node.HTTPPort = 8545 config.Node.IPCPath = utils.MakeDataDir(ctx) + "/bor.ipc" config.Node.HTTPModules = []string{"eth", "net", "web3", "txpool", "bor"} - config.Eth.SyncMode = downloader.FullSync + config.Eth.SyncMode = downloader.SnapSync config.Eth.NetworkId = 137 config.Eth.Miner.GasCeil = 20000000 //--miner.gastarget is depreceated, No longed used From cf809b4a22c3d40f6ebc2c73de56606f25027c0b Mon Sep 17 00:00:00 2001 From: Krishna Upadhyaya Date: Thu, 23 Sep 2021 10:56:17 +0530 Subject: [PATCH 13/13] fix typo --- core/allocs/bor_mainnet.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/allocs/bor_mainnet.json b/core/allocs/bor_mainnet.json index eb4a17ee32..912ea99654 100644 --- a/core/allocs/bor_mainnet.json +++ b/core/allocs/bor_mainnet.json @@ -32,4 +32,4 @@ "42EEfcda06eaD475cdE3731B8eb138e88CD0bAC3": { "balance": "0x3635c9adc5dea00000" } -} \ No newline at end of file +}