From c05ac2303997df01481610a078433587b50bc47f Mon Sep 17 00:00:00 2001 From: JianGuo Date: Wed, 1 Nov 2023 12:15:04 +0800 Subject: [PATCH] fix ut and e2e test (#29) * fix ut * update image * bridgel2 * update doc --- .github/workflows/test-e2e.yml | 2 +- .github/workflows/test-from-prover.yml | 2 +- ci/e2e-group-dac-1/datacommittee_test.go | 1 + ci/e2e-group-dac/datacommittee_test.go | 1 - ci/e2e-group10/forced_batches_test.go | 5 +- cmd/run.go | 2 +- config/config_test.go | 12 +- config/default.go | 2 +- .../local/local.genesis.config.json | 6 +- .../environments/local/local.node.config.toml | 2 +- .../environments/mainnet/prover.config.json | 2 +- .../environments/testnet/prover.config.json | 2 +- config/metrics/prometheus/prometheus.yml | 4 +- db/db.go | 4 +- docker-compose.yml | 4 +- .../custom_network-config-doc.html | 2 +- docs/config-file/custom_network-config-doc.md | 18 +- .../custom_network-config-schema.json | 9 + docs/config-file/node-config-doc.html | 16 +- docs/config-file/node-config-doc.md | 371 ++- docs/config-file/node-config-schema.json | 110 +- docs/modes.md | 10 +- docs/running_local.md | 18 +- etherman/etherman_test.go | 19 +- etherman/simulated.go | 3 +- etherman/smartcontracts/abi/datacommittee.abi | 2 +- etherman/smartcontracts/abi/polygonzkevm.abi | 2 +- .../smartcontracts/abi/polygonzkevmbridge.abi | 1544 ++++++------ .../abi/polygonzkevmbridgel2.abi | 933 ++++++++ .../abi/polygonzkevmglobalexitroot.abi | 274 +-- etherman/smartcontracts/bin/polygonzkevm.bin | 2 +- .../smartcontracts/bin/polygonzkevmbridge.bin | 2 +- .../bin/polygonzkevmbridgel2.bin | 1 + .../bin/polygonzkevmglobalexitroot.bin | 2 +- .../datacommittee/datacommittee.go | 5 +- etherman/smartcontracts/matic/matic.go | 5 +- .../mockverifier/mockverifier.go | 5 +- .../polygonzkevm/polygonzkevm.go | 7 +- .../polygonzkevmbridge/polygonzkevmbridge.go | 7 +- .../polygonzkevmbridgel2.go | 2132 +++++++++++++++++ .../polygonzkevmglobalexitroot.go | 7 +- etherman/smartcontracts/script.sh | 3 +- gasprice/kafka_proc.go | 7 +- jsonrpc/config.go | 1 + jsonrpc/endpoints_debug_innertx.go | 1 + jsonrpc/endpoints_eth_innertx.go | 16 +- jsonrpc/nacos/start.go | 18 +- jsonrpc/nacos/utils.go | 4 +- jsonrpc/server.go | 5 +- sequencer/metrics/logstatistics.go | 66 +- sequencer/metrics/logstatisticsimpl.go | 29 +- sequencer/metrics/logstatisticsimpl_test.go | 12 +- sequencer/txtracker.go | 2 +- sequencer/worker.go | 4 +- sequencesender/config.go | 8 +- state/runtime/executor/client.go | 2 +- synchronizer/synchronizer_test.go | 34 +- test/Makefile | 111 +- .../sequencer/common/setup/setup.go | 3 +- test/config/debug.node.config.toml | 6 +- test/config/telegraf.conf | 2 +- test/config/test-member.keystore | 1 + test/config/test.da.toml | 34 + test/config/test.genesis.config.json | 220 +- test/config/test.node.config.toml | 5 +- .../test.permissionless.prover.config.json | 4 +- test/config/test.prover.config.json | 4 +- test/dbutils/dbutils.go | 2 +- test/docker-compose.yml | 76 +- test/e2e/datacommittee_test.go | 32 +- test/e2e/debug_shared.go | 2 +- test/e2e/ethtransfer_test.go | 3 +- test/e2e/forced_batches_test.go | 1 - test/e2e/gasless_test.go | 92 - test/e2e/state_test.go | 1 + test/e2e/uniswap_test.go | 1 + test/operations/manager.go | 32 +- test/scripts/cmd/dependencies/images_test.go | 6 +- test/scripts/cmd/main.go | 2 +- test/scripts/sendForcedBatch/README.md | 2 +- test/scripts/sequenceForcedBatch/README.md | 2 +- 81 files changed, 5010 insertions(+), 1403 deletions(-) create mode 120000 ci/e2e-group-dac-1/datacommittee_test.go delete mode 100644 ci/e2e-group-dac/datacommittee_test.go create mode 100644 etherman/smartcontracts/abi/polygonzkevmbridgel2.abi create mode 100644 etherman/smartcontracts/bin/polygonzkevmbridgel2.bin create mode 100644 etherman/smartcontracts/polygonzkevmbridgel2/polygonzkevmbridgel2.go create mode 100644 test/config/test-member.keystore create mode 100644 test/config/test.da.toml delete mode 100644 test/e2e/gasless_test.go diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml index 94159cc09e..4439845050 100644 --- a/.github/workflows/test-e2e.yml +++ b/.github/workflows/test-e2e.yml @@ -17,7 +17,7 @@ jobs: matrix: go-version: [ 1.19.x ] goarch: [ "amd64" ] - e2e-group: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ] + e2e-group: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, dac-1 ] runs-on: ubuntu-latest steps: - name: Checkout code diff --git a/.github/workflows/test-from-prover.yml b/.github/workflows/test-from-prover.yml index db94d4737f..7f7bed02af 100644 --- a/.github/workflows/test-from-prover.yml +++ b/.github/workflows/test-from-prover.yml @@ -1,4 +1,4 @@ -name: Test from zkevm-prover call +name: Test from xgon-prover call on: workflow_call: inputs: diff --git a/ci/e2e-group-dac-1/datacommittee_test.go b/ci/e2e-group-dac-1/datacommittee_test.go new file mode 120000 index 0000000000..ac030e10c3 --- /dev/null +++ b/ci/e2e-group-dac-1/datacommittee_test.go @@ -0,0 +1 @@ +../../test/e2e/datacommittee_test.go \ No newline at end of file diff --git a/ci/e2e-group-dac/datacommittee_test.go b/ci/e2e-group-dac/datacommittee_test.go deleted file mode 100644 index da9b4929e5..0000000000 --- a/ci/e2e-group-dac/datacommittee_test.go +++ /dev/null @@ -1 +0,0 @@ -package e2e_group_dac diff --git a/ci/e2e-group10/forced_batches_test.go b/ci/e2e-group10/forced_batches_test.go index d2e2efb080..be8b835406 100644 --- a/ci/e2e-group10/forced_batches_test.go +++ b/ci/e2e-group10/forced_batches_test.go @@ -23,7 +23,7 @@ import ( const ( toAddressHex = "0x4d5Cf5032B2a844602278b01199ED191A86c93ff" - gerFinalityBlocks = uint64(250) + gerFinalityBlocks = uint64(2500) forkID5 = 5 ) @@ -166,6 +166,8 @@ func sendForcedBatch(t *testing.T, txs []byte, opsman *operations.Manager) (*sta require.NoError(t, err) log.Debug("currentBlock.Time(): ", currentBlock.Time()) + temp, _, err := st.GetLatestGer(ctx, gerFinalityBlocks) + log.Infof("temp: %v", temp.GlobalExitRoot.String()) // Send forceBatch tx, err := zkEvm.ForceBatch(auth, txs, tip) @@ -226,6 +228,7 @@ func sendForcedBatch(t *testing.T, txs []byte, opsman *operations.Manager) (*sta finalGer, _, err := st.GetLatestGer(ctx, gerFinalityBlocks) require.NoError(t, err) if finalGer.GlobalExitRoot != rootInContractHash { + log.Infof("initialGer.GlobalExitRoot: %v, finalGer.GlobalExitRoot: %v, rootInContractHash: %v", initialGer.GlobalExitRoot.String(), finalGer.GlobalExitRoot.String(), rootInContractHash.String()) log.Fatal("global exit root is not updated") } } diff --git a/cmd/run.go b/cmd/run.go index 34319842ce..eaeb832628 100644 --- a/cmd/run.go +++ b/cmd/run.go @@ -5,7 +5,6 @@ import ( "crypto/ecdsa" "errors" "fmt" - "github.com/ethereum/go-ethereum/common" "net" "net/http" "net/http/pprof" @@ -37,6 +36,7 @@ import ( "github.com/0xPolygonHermez/zkevm-node/state" "github.com/0xPolygonHermez/zkevm-node/state/runtime/executor" "github.com/0xPolygonHermez/zkevm-node/synchronizer" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/jackc/pgx/v4/pgxpool" "github.com/prometheus/client_golang/prometheus/promhttp" diff --git a/config/config_test.go b/config/config_test.go index 58f0a8dfb5..5a8d18a94b 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -181,8 +181,8 @@ func Test_Defaults(t *testing.T) { expectedValue: types.NewDuration(5 * time.Second), }, { - path: "SequenceSender.MaxTxSizeForL1", - expectedValue: uint64(131072), + path: "SequenceSender.MaxBatchesForL1", + expectedValue: uint64(10), }, { path: "Etherman.URL", @@ -242,7 +242,7 @@ func Test_Defaults(t *testing.T) { }, { path: "MTClient.URI", - expectedValue: "zkevm-prover:50061", + expectedValue: "xgon-prover:50061", }, { path: "StateDB.User", @@ -258,7 +258,7 @@ func Test_Defaults(t *testing.T) { }, { path: "StateDB.Host", - expectedValue: "zkevm-state-db", + expectedValue: "xgon-state-db", }, { path: "StateDB.Port", @@ -319,7 +319,7 @@ func Test_Defaults(t *testing.T) { }, { path: "Pool.DB.Host", - expectedValue: "zkevm-pool-db", + expectedValue: "xgon-pool-db", }, { path: "Pool.DB.Port", @@ -375,7 +375,7 @@ func Test_Defaults(t *testing.T) { }, { path: "Executor.URI", - expectedValue: "zkevm-prover:50071", + expectedValue: "xgon-prover:50071", }, { path: "Executor.MaxResourceExhaustedAttempts", diff --git a/config/default.go b/config/default.go index 2080cc2a5b..168f75580c 100644 --- a/config/default.go +++ b/config/default.go @@ -116,7 +116,7 @@ MaxTxLifetime = "3h" [SequenceSender] WaitPeriodSendSequence = "5s" LastBatchVirtualizationTimeMaxWaitPeriod = "5s" -MaxTxSizeForL1 = 1000 +MaxBatchesForL1 = 10 L2Coinbase = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" PrivateKey = {Path = "/pk/sequencer.keystore", Password = "testonly"} UseValidium = true diff --git a/config/environments/local/local.genesis.config.json b/config/environments/local/local.genesis.config.json index e78f355783..9ac4f77df0 100644 --- a/config/environments/local/local.genesis.config.json +++ b/config/environments/local/local.genesis.config.json @@ -1,9 +1,9 @@ { "l1Config" : { "chainId": 1337, - "polygonZkEVMAddress": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", + "polygonZkEVMAddress": "0x0D9088C72Cd4F08e9dDe474D8F5394147f64b22C", "maticTokenAddress": "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "polygonZkEVMGlobalExitRootAddress": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6" + "polygonZkEVMGlobalExitRootAddress": "0xEd236da21Ff62bC7B62608AdB818da49E8549fa7" }, "root": "0xd88680f1b151dd67518f9aca85161424c0cac61df2f5424a3ddc04ea25adecc7", "genesisBlockNumber": 102, @@ -39,7 +39,7 @@ "contractName": "PolygonZkEVMBridge proxy", "balance": "200000000000000000000000000", "nonce": "1", - "address": "0xff0EE8ea08cEf5cb4322777F5CC3E8A584B8A4A0", + "address": "0x10B65c586f795aF3eCCEe594fE4E38E1F059F780", "bytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461088b565b610135565b61006b6100a33660046108a6565b61017f565b3480156100b457600080fd5b506100bd6101f3565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461088b565b610231565b34801561011257600080fd5b506100bd61025e565b6101236102d4565b61013361012e6103ab565b6103b5565b565b61013d6103d9565b73ffffffffffffffffffffffffffffffffffffffff1633036101775761017481604051806020016040528060008152506000610419565b50565b61017461011b565b6101876103d9565b73ffffffffffffffffffffffffffffffffffffffff1633036101eb576101e68383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610419915050565b505050565b6101e661011b565b60006101fd6103d9565b73ffffffffffffffffffffffffffffffffffffffff163303610226576102216103ab565b905090565b61022e61011b565b90565b6102396103d9565b73ffffffffffffffffffffffffffffffffffffffff1633036101775761017481610444565b60006102686103d9565b73ffffffffffffffffffffffffffffffffffffffff163303610226576102216103d9565b60606102b183836040518060600160405280602781526020016109bb602791396104a5565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6102dc6103d9565b73ffffffffffffffffffffffffffffffffffffffff163303610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600061022161052a565b3660008037600080366000845af43d6000803e8080156103d4573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b61042283610552565b60008251118061042f5750805b156101e65761043e838361028c565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61046d6103d9565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16101748161059f565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516104cf919061094d565b600060405180830381855af49150503d806000811461050a576040519150601f19603f3d011682016040523d82523d6000602084013e61050f565b606091505b5091509150610520868383876106ab565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6103fd565b61055b81610753565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff8116610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103a2565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6060831561074157825160000361073a5773ffffffffffffffffffffffffffffffffffffffff85163b61073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103a2565b508161074b565b61074b838361081e565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff81163b6107f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016103a2565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610665565b81511561082e5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a29190610969565b803573ffffffffffffffffffffffffffffffffffffffff8116811461088657600080fd5b919050565b60006020828403121561089d57600080fd5b6102b182610862565b6000806000604084860312156108bb57600080fd5b6108c484610862565b9250602084013567ffffffffffffffff808211156108e157600080fd5b818601915086601f8301126108f557600080fd5b81358181111561090457600080fd5b87602082850101111561091657600080fd5b6020830194508093505050509250925092565b60005b8381101561094457818101518382015260200161092c565b50506000910152565b6000825161095f818460208701610929565b9190910192915050565b6020815260008251806020840152610988816040850160208701610929565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a1af0d6cb4f1e31496a4c5c1448913bce4bd6ad3a39e47c6f7190c114d6f9bf464736f6c63430008110033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", diff --git a/config/environments/local/local.node.config.toml b/config/environments/local/local.node.config.toml index ed04c9b361..0b4e098834 100644 --- a/config/environments/local/local.node.config.toml +++ b/config/environments/local/local.node.config.toml @@ -104,7 +104,7 @@ MaxTxLifetime = "3h" [SequenceSender] WaitPeriodSendSequence = "5s" LastBatchVirtualizationTimeMaxWaitPeriod = "5s" -MaxTxSizeForL1 = 131072 +MaxBatchesForL1 = 10 L2Coinbase = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" PrivateKey = {Path = "/pk/sequencer.keystore", Password = "testonly"} diff --git a/config/environments/mainnet/prover.config.json b/config/environments/mainnet/prover.config.json index 58cbf1a9de..9d1d77f34d 100644 --- a/config/environments/mainnet/prover.config.json +++ b/config/environments/mainnet/prover.config.json @@ -92,7 +92,7 @@ "starkInfoFile": "zkevm.starkinfo.json", "starkInfoC12aFile": "zkevm.c12a.starkinfo.json", "starkInfoRecursive1File": "zkevm.recursive1.starkinfo.json", - "databaseURL": "postgresql://prover_user:prover_pass@zkevm-state-db:5432/prover_db", + "databaseURL": "postgresql://prover_user:prover_pass@xgon-state-db:5432/prover_db", "dbNodesTableName": "state.nodes", "dbProgramTableName": "state.program", "dbAsyncWrite": false, diff --git a/config/environments/testnet/prover.config.json b/config/environments/testnet/prover.config.json index 15c999b37b..d3ac1d7287 100644 --- a/config/environments/testnet/prover.config.json +++ b/config/environments/testnet/prover.config.json @@ -92,7 +92,7 @@ "starkInfoFile": "zkevm.starkinfo.json", "starkInfoC12aFile": "zkevm.c12a.starkinfo.json", "starkInfoRecursive1File": "zkevm.recursive1.starkinfo.json", - "databaseURL": "postgresql://prover_user:prover_pass@zkevm-state-db:5432/prover_db", + "databaseURL": "postgresql://prover_user:prover_pass@xgon-state-db:5432/prover_db", "dbNodesTableName": "state.nodes", "dbProgramTableName": "state.program", "dbAsyncWrite": false, diff --git a/config/metrics/prometheus/prometheus.yml b/config/metrics/prometheus/prometheus.yml index 583d9370ea..271046b804 100644 --- a/config/metrics/prometheus/prometheus.yml +++ b/config/metrics/prometheus/prometheus.yml @@ -10,5 +10,5 @@ scrape_configs: metrics_path: /metrics static_configs: - targets: - - zkevm-json-rpc:9091 #inside port of the zkevm-json-rpc - - zkevm-sequencer:9091 #inside port of the zkevm-sequencer \ No newline at end of file + - xgon-json-rpc:9091 #inside port of the xgon-json-rpc + - xgon-sequencer:9091 #inside port of the xgon-sequencer \ No newline at end of file diff --git a/db/db.go b/db/db.go index 1b1e1d3f7a..9f67eec8eb 100644 --- a/db/db.go +++ b/db/db.go @@ -14,9 +14,9 @@ import ( const ( // StateMigrationName is the name of the migration used by packr to pack the migration file - StateMigrationName = "zkevm-state-db" + StateMigrationName = "xgon-state-db" // PoolMigrationName is the name of the migration used by packr to pack the migration file - PoolMigrationName = "zkevm-pool-db" + PoolMigrationName = "xgon-pool-db" ) var packrMigrations = map[string]*packr.Box{ diff --git a/docker-compose.yml b/docker-compose.yml index d5babe01bc..1693b6588b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.5" networks: default: - name: Xgon + name: xgon services: xgon-rpc: container_name: xgon-rpc @@ -107,7 +107,7 @@ services: xgon-prover: container_name: xgon-prover restart: unless-stopped - image: hermeznetwork/xgon-prover:v2.2.0 + image: hermeznetwork/zkevm-prover:v2.2.0 depends_on: xgon-state-db: condition: service_healthy diff --git a/docs/config-file/custom_network-config-doc.html b/docs/config-file/custom_network-config-doc.html index 76d3a20696..b326db67c4 100644 --- a/docs/config-file/custom_network-config-doc.html +++ b/docs/config-file/custom_network-config-doc.html @@ -1 +1 @@ - Schema Docs

GenesisFromJSON is the config file for network_custom

Type: string

L1: root hash of the genesis block


Type: integer

L1: block number of the genesis block


Type: array of object

L2: List of states contracts used to populate merkle tree at initial state

Each item of this array must be:


L1: configuration of the network
Type: integer

Chain ID of the L1 network


Type: array of integer

Address of the L1 contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Type: array of integer

Address of the L1 Matic token Contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Type: array of integer

Address of the L1 GlobalExitRootManager contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


\ No newline at end of file + Schema Docs

GenesisFromJSON is the config file for network_custom

Type: string

L1: root hash of the genesis block


Type: integer

L1: block number of the genesis block


Type: array of object

L2: List of states contracts used to populate merkle tree at initial state

Each item of this array must be:


L1: configuration of the network
Type: integer

Chain ID of the L1 network


Type: array of integer

Address of the L1 contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Type: array of integer

Address of the L1 Matic token Contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Type: array of integer

Address of the L1 GlobalExitRootManager contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Type: array of integer

Address of the data availability committee contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


\ No newline at end of file diff --git a/docs/config-file/custom_network-config-doc.md b/docs/config-file/custom_network-config-doc.md index 872d8e0724..f2dd77af33 100644 --- a/docs/config-file/custom_network-config-doc.md +++ b/docs/config-file/custom_network-config-doc.md @@ -90,12 +90,13 @@ must respect the following conditions **Type:** : `object` **Description:** L1: configuration of the network -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ----------------------------------------------------------------------------------- | ------- | ---------------- | ---------- | ---------- | ------------------------------------------------ | -| - [chainId](#L1Config_chainId ) | No | integer | No | - | Chain ID of the L1 network | -| - [polygonZkEVMAddress](#L1Config_polygonZkEVMAddress ) | No | array of integer | No | - | Address of the L1 contract | -| - [maticTokenAddress](#L1Config_maticTokenAddress ) | No | array of integer | No | - | Address of the L1 Matic token Contract | -| - [polygonZkEVMGlobalExitRootAddress](#L1Config_polygonZkEVMGlobalExitRootAddress ) | No | array of integer | No | - | Address of the L1 GlobalExitRootManager contract | +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ----------------------------------------------------------------------------------- | ------- | ---------------- | ---------- | ---------- | --------------------------------------------------- | +| - [chainId](#L1Config_chainId ) | No | integer | No | - | Chain ID of the L1 network | +| - [polygonZkEVMAddress](#L1Config_polygonZkEVMAddress ) | No | array of integer | No | - | Address of the L1 contract | +| - [maticTokenAddress](#L1Config_maticTokenAddress ) | No | array of integer | No | - | Address of the L1 Matic token Contract | +| - [polygonZkEVMGlobalExitRootAddress](#L1Config_polygonZkEVMGlobalExitRootAddress ) | No | array of integer | No | - | Address of the L1 GlobalExitRootManager contract | +| - [dataCommitteeContract](#L1Config_dataCommitteeContract ) | No | array of integer | No | - | Address of the data availability committee contract | ### 4.1. `L1Config.chainId` @@ -117,5 +118,10 @@ must respect the following conditions **Type:** : `array of integer` **Description:** Address of the L1 GlobalExitRootManager contract +### 4.5. `L1Config.dataCommitteeContract` + +**Type:** : `array of integer` +**Description:** Address of the data availability committee contract + ---------------------------------------------------------------------------------------------------------------------------- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) diff --git a/docs/config-file/custom_network-config-schema.json b/docs/config-file/custom_network-config-schema.json index 4f4d5e423e..8bff4da3a8 100644 --- a/docs/config-file/custom_network-config-schema.json +++ b/docs/config-file/custom_network-config-schema.json @@ -75,6 +75,15 @@ "maxItems": 20, "minItems": 20, "description": "Address of the L1 GlobalExitRootManager contract" + }, + "dataCommitteeContract": { + "items": { + "type": "integer" + }, + "type": "array", + "maxItems": 20, + "minItems": 20, + "description": "Address of the data availability committee contract" } }, "additionalProperties": false, diff --git a/docs/config-file/node-config-doc.html b/docs/config-file/node-config-doc.html index 443a11723f..6983be2331 100644 --- a/docs/config-file/node-config-doc.html +++ b/docs/config-file/node-config-doc.html @@ -2,19 +2,19 @@
"300ms"
 

Default: "2m0s"Type: string

WaitTxToBeMined time to wait after transaction was sent to the ethereum


Examples:

"1m"
 
"300ms"
-

Type: array of object

PrivateKeys defines all the key store files that are going
to be read in order to provide the private keys to sign the L1 txs

Each item of this array must be:

Type: string

Path is the file path for the key store file


Type: string

Password is the password to decrypt the key store file



Default: 0Type: integer

ForcedGas is the amount of gas to be forced in case of gas estimation error


Default: 1Type: number

GasPriceMarginFactor is used to multiply the suggested gas price provided by the network
in order to allow a different gas price to be set for all the transactions and making it
easier to have the txs prioritized in the pool, default value is 1.

ex:
suggested gas price: 100
GasPriceMarginFactor: 1
gas price = 100

suggested gas price: 100
GasPriceMarginFactor: 1.1
gas price = 110


Default: 0Type: integer

MaxGasPriceLimit helps avoiding transactions to be sent over an specified
gas price amount, default value is 0, which means no limit.
If the gas price provided by the network and adjusted by the GasPriceMarginFactor
is greater than this configuration, transaction will have its gas price set to
the value configured in this config as the limit.

ex:

suggested gas price: 100
gas price margin factor: 20%
max gas price limit: 150
tx gas price = 120

suggested gas price: 100
gas price margin factor: 20%
max gas price limit: 110
tx gas price = 110


Pool service configuration
Default: "5m0s"Type: string

IntervalToRefreshBlockedAddresses is the time it takes to sync the
blocked address list from db to memory


Examples:

"1m"
+

Type: array of object

PrivateKeys defines all the key store files that are going
to be read in order to provide the private keys to sign the L1 txs

Each item of this array must be:

Type: string

Path is the file path for the key store file


Type: string

Password is the password to decrypt the key store file



Default: 0Type: integer

ForcedGas is the amount of gas to be forced in case of gas estimation error


Default: 1Type: number

GasPriceMarginFactor is used to multiply the suggested gas price provided by the network
in order to allow a different gas price to be set for all the transactions and making it
easier to have the txs prioritized in the pool, default value is 1.

ex:
suggested gas price: 100
GasPriceMarginFactor: 1
gas price = 100

suggested gas price: 100
GasPriceMarginFactor: 1.1
gas price = 110


Default: 0Type: integer

MaxGasPriceLimit helps avoiding transactions to be sent over an specified
gas price amount, default value is 0, which means no limit.
If the gas price provided by the network and adjusted by the GasPriceMarginFactor
is greater than this configuration, transaction will have its gas price set to
the value configured in this config as the limit.

ex:

suggested gas price: 100
gas price margin factor: 20%
max gas price limit: 150
tx gas price = 120

suggested gas price: 100
gas price margin factor: 20%
max gas price limit: 110
tx gas price = 110


Pool service configuration
Default: 150000Type: integer

FreeClaimGasLimit is the max gas allowed use to do a free claim


Default: "5m0s"Type: string

IntervalToRefreshBlockedAddresses is the time it takes to sync the
blocked address list from db to memory


Examples:

"1m"
 
"300ms"
 

Default: "5s"Type: string

IntervalToRefreshGasPrices is the time to wait to refresh the gas prices


Examples:

"1m"
 
"300ms"
-

Default: 100132Type: integer

MaxTxBytesSize is the max size of a transaction in bytes


Default: 100000Type: integer

MaxTxDataBytesSize is the max size of the data field of a transaction in bytes


DB is the database configuration
Default: "pool_db"Type: string

Database name


Default: "pool_user"Type: string

Database User name


Default: "pool_password"Type: string

Database Password of the user


Default: "zkevm-pool-db"Type: string

Host address of database


Default: "5432"Type: string

Port Number of database


Default: falseType: boolean

EnableLog


Default: 200Type: integer

MaxConns is the maximum number of connections in the pool.


Default: 1000000000Type: integer

DefaultMinGasPriceAllowed is the default min gas price to suggest


Default: "5m0s"Type: string

MinAllowedGasPriceInterval is the interval to look back of the suggested min gas price for a tx


Examples:

"1m"
+

Default: 100132Type: integer

MaxTxBytesSize is the max size of a transaction in bytes


Default: 100000Type: integer

MaxTxDataBytesSize is the max size of the data field of a transaction in bytes


DB is the database configuration
Default: "pool_db"Type: string

Database name


Default: "pool_user"Type: string

Database User name


Default: "pool_password"Type: string

Database Password of the user


Default: "xgon-pool-db"Type: string

Host address of database


Default: "5432"Type: string

Port Number of database


Default: falseType: boolean

EnableLog


Default: 200Type: integer

MaxConns is the maximum number of connections in the pool.


Default: 1000000000Type: integer

DefaultMinGasPriceAllowed is the default min gas price to suggest


Default: "5m0s"Type: string

MinAllowedGasPriceInterval is the interval to look back of the suggested min gas price for a tx


Examples:

"1m"
 
"300ms"
 

Default: "15s"Type: string

PollMinAllowedGasPriceInterval is the interval to poll the suggested min gas price for a tx


Examples:

"1m"
 
"300ms"
-

Default: 64Type: integer

AccountQueue represents the maximum number of non-executable transaction slots permitted per account


Default: 1024Type: integer

GlobalQueue represents the maximum number of non-executable transaction slots for all accounts


Configuration for RPC service. THis one offers a extended Ethereum JSON-RPC API interface to interact with the node
Default: "0.0.0.0"Type: string

Host defines the network adapter that will be used to serve the HTTP requests


Default: 8545Type: integer

Port defines the port to serve the endpoints via HTTP


Default: "1m0s"Type: string

ReadTimeout is the HTTP server read timeout
check net/http.server.ReadTimeout and net/http.server.ReadHeaderTimeout


Examples:

"1m"
+

Default: 64Type: integer

AccountQueue represents the maximum number of non-executable transaction slots permitted per account


Default: 1024Type: integer

GlobalQueue represents the maximum number of non-executable transaction slots for all accounts


Default: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"Type: string

FreeGasAddress is the default free gas address


Configuration for RPC service. THis one offers a extended Ethereum JSON-RPC API interface to interact with the node
Default: "0.0.0.0"Type: string

Host defines the network adapter that will be used to serve the HTTP requests


Default: 8545Type: integer

Port defines the port to serve the endpoints via HTTP


Default: "1m0s"Type: string

ReadTimeout is the HTTP server read timeout
check net/http.server.ReadTimeout and net/http.server.ReadHeaderTimeout


Examples:

"1m"
 
"300ms"
 

Default: "1m0s"Type: string

WriteTimeout is the HTTP server write timeout
check net/http.server.WriteTimeout


Examples:

"1m"
 
"300ms"
-

Default: 500Type: number

MaxRequestsPerIPAndSecond defines how much requests a single IP can
send within a single second


Default: ""Type: string

SequencerNodeURI is used allow Non-Sequencer nodes
to relay transactions to the Sequencer node


Default: 0Type: integer

MaxCumulativeGasUsed is the max gas allowed per batch


WebSockets configuration
Default: trueType: boolean

Enabled defines if the WebSocket requests are enabled or disabled


Default: "0.0.0.0"Type: string

Host defines the network adapter that will be used to serve the WS requests


Default: 8546Type: integer

Port defines the port to serve the endpoints via WS


Default: trueType: boolean

EnableL2SuggestedGasPricePolling enables polling of the L2 gas price to block tx in the RPC with lower gas price.


Default: trueType: boolean

TraceBatchUseHTTPS enables, in the debugtraceBatchByNum endpoint, the use of the HTTPS protocol (instead of HTTP)
to do the parallel requests to RPC.debug
traceTransaction endpoint


Configuration of service `Syncrhonizer`. For this service is also really important the value of `IsTrustedSequencer` because depending of this values is going to ask to a trusted node for trusted transactions or not
Default: "1s"Type: string

SyncInterval is the delay interval between reading new rollup information


Examples:

"1m"
+

Default: 500Type: number

MaxRequestsPerIPAndSecond defines how much requests a single IP can
send within a single second


Default: ""Type: string

SequencerNodeURI is used allow Non-Sequencer nodes
to relay transactions to the Sequencer node


Default: 0Type: integer

MaxCumulativeGasUsed is the max gas allowed per batch


WebSockets configuration
Default: trueType: boolean

Enabled defines if the WebSocket requests are enabled or disabled


Default: "0.0.0.0"Type: string

Host defines the network adapter that will be used to serve the WS requests


Default: 8546Type: integer

Port defines the port to serve the endpoints via WS


Default: trueType: boolean

EnableL2SuggestedGasPricePolling enables polling of the L2 gas price to block tx in the RPC with lower gas price.


Default: trueType: boolean

TraceBatchUseHTTPS enables, in the debugtraceBatchByNum endpoint, the use of the HTTPS protocol (instead of HTTP)
to do the parallel requests to RPC.debug
traceTransaction endpoint


Default: falseType: boolean

EnablePendingTransactionFilter enables pending transaction filter that can support query L2 pending transaction


Nacos configuration
Default: ""Type: string

URLs nacos server urls for discovery service of rest api, url is separated by ","


Default: ""Type: string

NamespaceId nacos namepace id for discovery service of rest api


Default: ""Type: string

ApplicationName rest application name in nacos


Default: ""Type: string

ExternalListenAddr Set the rest-server external ip and port, when it is launched by Docker


Configuration of service `Syncrhonizer`. For this service is also really important the value of `IsTrustedSequencer` because depending of this values is going to ask to a trusted node for trusted transactions or not
Default: "1s"Type: string

SyncInterval is the delay interval between reading new rollup information


Examples:

"1m"
 
"300ms"
 

Default: 100Type: integer

SyncChunkSize is the number of blocks to sync on each chunk


Default: ""Type: string

TrustedSequencerURL is the rpc url to connect and sync the trusted state


Configuration of the sequencer service
Default: "1s"Type: string

WaitPeriodPoolIsEmpty is the time the sequencer waits until
trying to add new txs to the state


Examples:

"1m"
 
"300ms"
@@ -46,7 +46,7 @@
 
"300ms"
 

Default: "5s"Type: string

LastBatchVirtualizationTimeMaxWaitPeriod is time since sequences should be sent


Examples:

"1m"
 
"300ms"
-

Default: 131072Type: integer

MaxTxSizeForL1 is the maximum size a single transaction can have. This field has
non-trivial consequences: larger transactions than 128KB are significantly harder and
more expensive to propagate; larger transactions also take more resources
to validate whether they fit into the pool or not.


Type: array of integer

SenderAddress defines which private key the eth tx manager needs to use
to sign the L1 txs

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Default: "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"Type: array of integer

L2Coinbase defines which addess is going to receive the fees

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


PrivateKey defines all the key store files that are going to be read in order to provide the private keys to sign the L1 txs
Default: "/pk/sequencer.keystore"Type: string

Path is the file path for the key store file


Default: "testonly"Type: string

Password is the password to decrypt the key store file


Default: 0Type: integer

Batch number where there is a forkid change (fork upgrade)


Configuration of the aggregator service
Default: "0.0.0.0"Type: string

Host for the grpc server


Default: 50081Type: integer

Port for the grpc server


Default: "5s"Type: string

RetryTime is the time the aggregator main loop sleeps if there are no proofs to aggregate
or batches to generate proofs. It is also used in the isSynced loop


Examples:

"1m"
+

Default: 0Type: integer

MaxTxSizeForL1 is the maximum size a single transaction can have. This field has
non-trivial consequences: larger transactions than 128KB are significantly harder and
more expensive to propagate; larger transactions also take more resources
to validate whether they fit into the pool or not.


Default: 10Type: integer

MaxBatchesForL1 is the maximum amount of batches to be sequenced in a single L1 tx


Type: array of integer

SenderAddress defines which private key the eth tx manager needs to use
to sign the L1 txs

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Default: "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"Type: array of integer

L2Coinbase defines which addess is going to receive the fees

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


PrivateKey defines all the key store files that are going to be read in order to provide the private keys to sign the L1 txs
Default: "/pk/sequencer.keystore"Type: string

Path is the file path for the key store file


Default: "testonly"Type: string

Password is the password to decrypt the key store file


Default: 0Type: integer

Batch number where there is a forkid change (fork upgrade)


Default: trueType: boolean

UseValidium is a flag to enable/disable the use of validium


Configuration of the aggregator service
Default: "0.0.0.0"Type: string

Host for the grpc server


Default: 50081Type: integer

Port for the grpc server


Default: "5s"Type: string

RetryTime is the time the aggregator main loop sleeps if there are no proofs to aggregate
or batches to generate proofs. It is also used in the isSynced loop


Examples:

"1m"
 
"300ms"
 

Default: "1m30s"Type: string

VerifyProofInterval is the interval of time to verify/send an proof in L1


Examples:

"1m"
 
"300ms"
@@ -56,12 +56,12 @@
 
"300ms"
 

Default: 0Type: integer

ChainID is the L2 ChainID provided by the Network Config


Default: 0Type: integer

ForkID is the L2 ForkID provided by the Network Config


Default: ""Type: string

SenderAddress defines which private key the eth tx manager needs to use
to sign the L1 txs


Default: "2m0s"Type: string

CleanupLockedProofsInterval is the interval of time to clean up locked proofs.


Examples:

"1m"
 
"300ms"
-

Default: "10m"Type: string

GeneratingProofCleanupThreshold represents the time interval after
which a proof in generating state is considered to be stuck and
allowed to be cleared.


Configuration of the genesis of the network. This is used to known the initial state of the network

L1: Configuration related to L1
Default: 0Type: integer

Chain ID of the L1 network


Type: array of integer

Address of the L1 contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Type: array of integer

Address of the L1 Matic token Contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Type: array of integer

Address of the L1 GlobalExitRootManager contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Type: array of integer

DEPRECATED L2: address of the PolygonZkEVMGlobalExitRootL2 proxy smart contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Type: array of integer

L2: address of the PolygonZkEVMBridge proxy smart contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


L1: Genesis of the rollup, first block number and root
Default: 0Type: integer

GenesisBlockNum is the block number where the polygonZKEVM smc was deployed on L1


Type: array of integer

Root hash of the genesis block

Must contain a minimum of 32 items

Must contain a maximum of 32 items

Each item of this array must be:


Type: array of object

Contracts to be deployed to L2

Each item of this array must be:


Configuration of the gas price suggester service
Default: "follower"Type: string

Default: 2000000000Type: integer

DefaultGasPriceWei is used to set the gas price to be used by the default gas pricer or as minimim gas price by the follower gas pricer.


Default: 0Type: integer

MaxGasPriceWei is used to limit the gas price returned by the follower gas pricer to a maximum value. It is ignored if 0.


Default: 0Type: integer

Default: 0Type: integer

Default: "10s"Type: string

Examples:

"1m"
+

Default: "10m"Type: string

GeneratingProofCleanupThreshold represents the time interval after
which a proof in generating state is considered to be stuck and
allowed to be cleared.


Configuration of the genesis of the network. This is used to known the initial state of the network

L1: Configuration related to L1
Default: 0Type: integer

Chain ID of the L1 network


Type: array of integer

Address of the L1 contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Type: array of integer

Address of the L1 Matic token Contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Type: array of integer

Address of the L1 GlobalExitRootManager contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Type: array of integer

Address of the data availability committee contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Type: array of integer

DEPRECATED L2: address of the PolygonZkEVMGlobalExitRootL2 proxy smart contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


Type: array of integer

L2: address of the PolygonZkEVMBridge proxy smart contract

Must contain a minimum of 20 items

Must contain a maximum of 20 items

Each item of this array must be:


L1: Genesis of the rollup, first block number and root
Default: 0Type: integer

GenesisBlockNum is the block number where the polygonZKEVM smc was deployed on L1


Type: array of integer

Root hash of the genesis block

Must contain a minimum of 32 items

Must contain a maximum of 32 items

Each item of this array must be:


Type: array of object

Contracts to be deployed to L2

Each item of this array must be:


Configuration of the gas price suggester service
Default: "follower"Type: string

Default: 2000000000Type: integer

DefaultGasPriceWei is used to set the gas price to be used by the default gas pricer or as minimim gas price by the follower gas pricer.


Default: 0Type: integer

MaxGasPriceWei is used to limit the gas price returned by the follower gas pricer to a maximum value. It is ignored if 0.


Default: 0Type: integer

Default: 0Type: integer

Default: "10s"Type: string

Examples:

"1m"
 
"300ms"
 

Default: "1h0m0s"Type: string

Examples:

"1m"
 
"300ms"
 

Default: "5m0s"Type: string

Examples:

"1m"
 
"300ms"
-

Default: 0.15Type: number

Configuration of the executor service
Default: "zkevm-prover:50071"Type: string

Default: 3Type: integer

MaxResourceExhaustedAttempts is the max number of attempts to make a transaction succeed because of resource exhaustion


Default: "1s"Type: string

WaitOnResourceExhaustion is the time to wait before retrying a transaction because of resource exhaustion


Examples:

"1m"
+

Default: ""Type: string

Default: ""Type: string

Default: ""Type: string

Default: ""Type: string

Default: ""Type: string

Default: ""Type: string

Default: 0Type: integer

Default: 0Type: number

DefaultL2CoinPrice is the native token's coin price


Default: 0Type: number

Default: 0.15Type: number

Configuration of the executor service
Default: "xgon-prover:50071"Type: string

Default: 3Type: integer

MaxResourceExhaustedAttempts is the max number of attempts to make a transaction succeed because of resource exhaustion


Default: "1s"Type: string

WaitOnResourceExhaustion is the time to wait before retrying a transaction because of resource exhaustion


Examples:

"1m"
 
"300ms"
-

Default: 100000000Type: integer

Configuration of the merkle tree client service. Not use in the node, only for testing
Default: "zkevm-prover:50061"Type: string

URI is the server URI.


Configuration of the state database connection
Default: "state_db"Type: string

Database name


Default: "state_user"Type: string

Database User name


Default: "state_password"Type: string

Database Password of the user


Default: "zkevm-state-db"Type: string

Host address of database


Default: "5432"Type: string

Port Number of database


Default: falseType: boolean

EnableLog


Default: 200Type: integer

MaxConns is the maximum number of connections in the pool.


Configuration of the metrics service, basically is where is going to publish the metrics
Default: "0.0.0.0"Type: string

Host is the address to bind the metrics server


Default: 9091Type: integer

Port is the port to bind the metrics server


Default: falseType: boolean

Enabled is the flag to enable/disable the metrics server


Default: ""Type: string

ProfilingHost is the address to bind the profiling server


Default: 0Type: integer

ProfilingPort is the port to bind the profiling server


Default: falseType: boolean

ProfilingEnabled is the flag to enable/disable the profiling server


Configuration of the event database connection

DB is the database configuration
Default: ""Type: string

Database name


Default: ""Type: string

Database User name


Default: ""Type: string

Database Password of the user


Default: ""Type: string

Host address of database


Default: ""Type: string

Port Number of database


Default: falseType: boolean

EnableLog


Default: 0Type: integer

MaxConns is the maximum number of connections in the pool.


Configuration of the hash database connection
Default: "prover_db"Type: string

Database name


Default: "prover_user"Type: string

Database User name


Default: "prover_pass"Type: string

Database Password of the user


Default: "zkevm-state-db"Type: string

Host address of database


Default: "5432"Type: string

Port Number of database


Default: falseType: boolean

EnableLog


Default: 200Type: integer

MaxConns is the maximum number of connections in the pool.


\ No newline at end of file +
Default: 100000000Type: integer

Configuration of the merkle tree client service. Not use in the node, only for testing
Default: "xgon-prover:50061"Type: string

URI is the server URI.


Configuration of the state database connection
Default: "state_db"Type: string

Database name


Default: "state_user"Type: string

Database User name


Default: "state_password"Type: string

Database Password of the user


Default: "xgon-state-db"Type: string

Host address of database


Default: "5432"Type: string

Port Number of database


Default: falseType: boolean

EnableLog


Default: 200Type: integer

MaxConns is the maximum number of connections in the pool.


Configuration of the metrics service, basically is where is going to publish the metrics
Default: "0.0.0.0"Type: string

Host is the address to bind the metrics server


Default: 9091Type: integer

Port is the port to bind the metrics server


Default: falseType: boolean

Enabled is the flag to enable/disable the metrics server


Default: ""Type: string

ProfilingHost is the address to bind the profiling server


Default: 0Type: integer

ProfilingPort is the port to bind the profiling server


Default: falseType: boolean

ProfilingEnabled is the flag to enable/disable the profiling server


Configuration of the event database connection

DB is the database configuration
Default: ""Type: string

Database name


Default: ""Type: string

Database User name


Default: ""Type: string

Database Password of the user


Default: ""Type: string

Host address of database


Default: ""Type: string

Port Number of database


Default: falseType: boolean

EnableLog


Default: 0Type: integer

MaxConns is the maximum number of connections in the pool.


Configuration of the hash database connection
Default: "prover_db"Type: string

Database name


Default: "prover_user"Type: string

Database User name


Default: "prover_pass"Type: string

Database Password of the user


Default: "xgon-state-db"Type: string

Host address of database


Default: "5432"Type: string

Port Number of database


Default: falseType: boolean

EnableLog


Default: 200Type: integer

MaxConns is the maximum number of connections in the pool.


\ No newline at end of file diff --git a/docs/config-file/node-config-doc.md b/docs/config-file/node-config-doc.md index 3743f8a1ec..f8ed88ed8b 100644 --- a/docs/config-file/node-config-doc.md +++ b/docs/config-file/node-config-doc.md @@ -314,9 +314,9 @@ to be read in order to provide the private keys to sign the L1 txs | **Additional items** | False | | **Tuple validation** | See below | -| Each item of this array must be | Description | -| ---------------------------------------------------- | ------------------------------------------------------------------------------------ | -| [PrivateKeys items](#EthTxManager_PrivateKeys_items) | KeystoreFileConfig has all the information needed to load a private key from a k ... | +| Each item of this array must be | Description | +| ---------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| [PrivateKeys items](#EthTxManager_PrivateKeys_items) | KeystoreFileConfig has all the information needed to load a private key from a key store file | #### 6.3.1. [EthTxManager.PrivateKeys.PrivateKeys items] @@ -414,6 +414,7 @@ MaxGasPriceLimit=0 | Property | Pattern | Type | Deprecated | Definition | Title/Description | | ------------------------------------------------------------------------------- | ------- | ------- | ---------- | ---------- | ---------------------------------------------------------------------------------------------------- | +| - [FreeClaimGasLimit](#Pool_FreeClaimGasLimit ) | No | integer | No | - | FreeClaimGasLimit is the max gas allowed use to do a free claim | | - [IntervalToRefreshBlockedAddresses](#Pool_IntervalToRefreshBlockedAddresses ) | No | string | No | - | Duration | | - [IntervalToRefreshGasPrices](#Pool_IntervalToRefreshGasPrices ) | No | string | No | - | Duration | | - [MaxTxBytesSize](#Pool_MaxTxBytesSize ) | No | integer | No | - | MaxTxBytesSize is the max size of a transaction in bytes | @@ -424,8 +425,23 @@ MaxGasPriceLimit=0 | - [PollMinAllowedGasPriceInterval](#Pool_PollMinAllowedGasPriceInterval ) | No | string | No | - | Duration | | - [AccountQueue](#Pool_AccountQueue ) | No | integer | No | - | AccountQueue represents the maximum number of non-executable transaction slots permitted per account | | - [GlobalQueue](#Pool_GlobalQueue ) | No | integer | No | - | GlobalQueue represents the maximum number of non-executable transaction slots for all accounts | +| - [FreeGasAddress](#Pool_FreeGasAddress ) | No | string | No | - | FreeGasAddress is the default free gas address | -### 7.1. `Pool.IntervalToRefreshBlockedAddresses` +### 7.1. `Pool.FreeClaimGasLimit` + +**Type:** : `integer` + +**Default:** `150000` + +**Description:** FreeClaimGasLimit is the max gas allowed use to do a free claim + +**Example setting the default value** (150000): +``` +[Pool] +FreeClaimGasLimit=150000 +``` + +### 7.2. `Pool.IntervalToRefreshBlockedAddresses` **Title:** Duration @@ -452,7 +468,7 @@ blocked address list from db to memory IntervalToRefreshBlockedAddresses="5m0s" ``` -### 7.2. `Pool.IntervalToRefreshGasPrices` +### 7.3. `Pool.IntervalToRefreshGasPrices` **Title:** Duration @@ -478,7 +494,7 @@ IntervalToRefreshBlockedAddresses="5m0s" IntervalToRefreshGasPrices="5s" ``` -### 7.3. `Pool.MaxTxBytesSize` +### 7.4. `Pool.MaxTxBytesSize` **Type:** : `integer` @@ -492,7 +508,7 @@ IntervalToRefreshGasPrices="5s" MaxTxBytesSize=100132 ``` -### 7.4. `Pool.MaxTxDataBytesSize` +### 7.5. `Pool.MaxTxDataBytesSize` **Type:** : `integer` @@ -506,7 +522,7 @@ MaxTxBytesSize=100132 MaxTxDataBytesSize=100000 ``` -### 7.5. `[Pool.DB]` +### 7.6. `[Pool.DB]` **Type:** : `object` **Description:** DB is the database configuration @@ -521,7 +537,7 @@ MaxTxDataBytesSize=100000 | - [EnableLog](#Pool_DB_EnableLog ) | No | boolean | No | - | EnableLog | | - [MaxConns](#Pool_DB_MaxConns ) | No | integer | No | - | MaxConns is the maximum number of connections in the pool. | -#### 7.5.1. `Pool.DB.Name` +#### 7.6.1. `Pool.DB.Name` **Type:** : `string` @@ -535,7 +551,7 @@ MaxTxDataBytesSize=100000 Name="pool_db" ``` -#### 7.5.2. `Pool.DB.User` +#### 7.6.2. `Pool.DB.User` **Type:** : `string` @@ -549,7 +565,7 @@ Name="pool_db" User="pool_user" ``` -#### 7.5.3. `Pool.DB.Password` +#### 7.6.3. `Pool.DB.Password` **Type:** : `string` @@ -563,21 +579,21 @@ User="pool_user" Password="pool_password" ``` -#### 7.5.4. `Pool.DB.Host` +#### 7.6.4. `Pool.DB.Host` **Type:** : `string` -**Default:** `"zkevm-pool-db"` +**Default:** `"xgon-pool-db"` **Description:** Host address of database -**Example setting the default value** ("zkevm-pool-db"): +**Example setting the default value** ("xgon-pool-db"): ``` [Pool.DB] -Host="zkevm-pool-db" +Host="xgon-pool-db" ``` -#### 7.5.5. `Pool.DB.Port` +#### 7.6.5. `Pool.DB.Port` **Type:** : `string` @@ -591,7 +607,7 @@ Host="zkevm-pool-db" Port="5432" ``` -#### 7.5.6. `Pool.DB.EnableLog` +#### 7.6.6. `Pool.DB.EnableLog` **Type:** : `boolean` @@ -605,7 +621,7 @@ Port="5432" EnableLog=false ``` -#### 7.5.7. `Pool.DB.MaxConns` +#### 7.6.7. `Pool.DB.MaxConns` **Type:** : `integer` @@ -619,7 +635,7 @@ EnableLog=false MaxConns=200 ``` -### 7.6. `Pool.DefaultMinGasPriceAllowed` +### 7.7. `Pool.DefaultMinGasPriceAllowed` **Type:** : `integer` @@ -633,7 +649,7 @@ MaxConns=200 DefaultMinGasPriceAllowed=1000000000 ``` -### 7.7. `Pool.MinAllowedGasPriceInterval` +### 7.8. `Pool.MinAllowedGasPriceInterval` **Title:** Duration @@ -659,7 +675,7 @@ DefaultMinGasPriceAllowed=1000000000 MinAllowedGasPriceInterval="5m0s" ``` -### 7.8. `Pool.PollMinAllowedGasPriceInterval` +### 7.9. `Pool.PollMinAllowedGasPriceInterval` **Title:** Duration @@ -685,7 +701,7 @@ MinAllowedGasPriceInterval="5m0s" PollMinAllowedGasPriceInterval="15s" ``` -### 7.9. `Pool.AccountQueue` +### 7.10. `Pool.AccountQueue` **Type:** : `integer` @@ -699,7 +715,7 @@ PollMinAllowedGasPriceInterval="15s" AccountQueue=64 ``` -### 7.10. `Pool.GlobalQueue` +### 7.11. `Pool.GlobalQueue` **Type:** : `integer` @@ -713,6 +729,20 @@ AccountQueue=64 GlobalQueue=1024 ``` +### 7.12. `Pool.FreeGasAddress` + +**Type:** : `string` + +**Default:** `"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"` + +**Description:** FreeGasAddress is the default free gas address + +**Example setting the default value** ("0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"): +``` +[Pool] +FreeGasAddress="0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" +``` + ## 8. `[RPC]` **Type:** : `object` @@ -730,6 +760,8 @@ GlobalQueue=1024 | - [WebSockets](#RPC_WebSockets ) | No | object | No | - | WebSockets configuration | | - [EnableL2SuggestedGasPricePolling](#RPC_EnableL2SuggestedGasPricePolling ) | No | boolean | No | - | EnableL2SuggestedGasPricePolling enables polling of the L2 gas price to block tx in the RPC with lower gas price. | | - [TraceBatchUseHTTPS](#RPC_TraceBatchUseHTTPS ) | No | boolean | No | - | TraceBatchUseHTTPS enables, in the debug_traceBatchByNum endpoint, the use of the HTTPS protocol (instead of HTTP)
to do the parallel requests to RPC.debug_traceTransaction endpoint | +| - [EnablePendingTransactionFilter](#RPC_EnablePendingTransactionFilter ) | No | boolean | No | - | EnablePendingTransactionFilter enables pending transaction filter that can support query L2 pending transaction | +| - [Nacos](#RPC_Nacos ) | No | object | No | - | Nacos configuration | ### 8.1. `RPC.Host` @@ -939,6 +971,88 @@ to do the parallel requests to RPC.debug_traceTransaction endpoint TraceBatchUseHTTPS=true ``` +### 8.11. `RPC.EnablePendingTransactionFilter` + +**Type:** : `boolean` + +**Default:** `false` + +**Description:** EnablePendingTransactionFilter enables pending transaction filter that can support query L2 pending transaction + +**Example setting the default value** (false): +``` +[RPC] +EnablePendingTransactionFilter=false +``` + +### 8.12. `[RPC.Nacos]` + +**Type:** : `object` +**Description:** Nacos configuration + +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ------------------------------------------------------ | ------- | ------ | ---------- | ---------- | ------------------------------------------------------------------------------------------ | +| - [URLs](#RPC_Nacos_URLs ) | No | string | No | - | URLs nacos server urls for discovery service of rest api, url is separated by "," | +| - [NamespaceId](#RPC_Nacos_NamespaceId ) | No | string | No | - | NamespaceId nacos namepace id for discovery service of rest api | +| - [ApplicationName](#RPC_Nacos_ApplicationName ) | No | string | No | - | ApplicationName rest application name in nacos | +| - [ExternalListenAddr](#RPC_Nacos_ExternalListenAddr ) | No | string | No | - | ExternalListenAddr Set the rest-server external ip and port, when it is launched by Docker | + +#### 8.12.1. `RPC.Nacos.URLs` + +**Type:** : `string` + +**Default:** `""` + +**Description:** URLs nacos server urls for discovery service of rest api, url is separated by "," + +**Example setting the default value** (""): +``` +[RPC.Nacos] +URLs="" +``` + +#### 8.12.2. `RPC.Nacos.NamespaceId` + +**Type:** : `string` + +**Default:** `""` + +**Description:** NamespaceId nacos namepace id for discovery service of rest api + +**Example setting the default value** (""): +``` +[RPC.Nacos] +NamespaceId="" +``` + +#### 8.12.3. `RPC.Nacos.ApplicationName` + +**Type:** : `string` + +**Default:** `""` + +**Description:** ApplicationName rest application name in nacos + +**Example setting the default value** (""): +``` +[RPC.Nacos] +ApplicationName="" +``` + +#### 8.12.4. `RPC.Nacos.ExternalListenAddr` + +**Type:** : `string` + +**Default:** `""` + +**Description:** ExternalListenAddr Set the rest-server external ip and port, when it is launched by Docker + +**Example setting the default value** (""): +``` +[RPC.Nacos] +ExternalListenAddr="" +``` + ## 9. `[Synchronizer]` **Type:** : `object` @@ -1731,10 +1845,12 @@ DefaultMinGasPriceAllowed=0 | - [WaitPeriodSendSequence](#SequenceSender_WaitPeriodSendSequence ) | No | string | No | - | Duration | | - [LastBatchVirtualizationTimeMaxWaitPeriod](#SequenceSender_LastBatchVirtualizationTimeMaxWaitPeriod ) | No | string | No | - | Duration | | - [MaxTxSizeForL1](#SequenceSender_MaxTxSizeForL1 ) | No | integer | No | - | MaxTxSizeForL1 is the maximum size a single transaction can have. This field has
non-trivial consequences: larger transactions than 128KB are significantly harder and
more expensive to propagate; larger transactions also take more resources
to validate whether they fit into the pool or not. | +| - [MaxBatchesForL1](#SequenceSender_MaxBatchesForL1 ) | No | integer | No | - | MaxBatchesForL1 is the maximum amount of batches to be sequenced in a single L1 tx | | - [SenderAddress](#SequenceSender_SenderAddress ) | No | array of integer | No | - | SenderAddress defines which private key the eth tx manager needs to use
to sign the L1 txs | | - [L2Coinbase](#SequenceSender_L2Coinbase ) | No | array of integer | No | - | L2Coinbase defines which addess is going to receive the fees | | - [PrivateKey](#SequenceSender_PrivateKey ) | No | object | No | - | PrivateKey defines all the key store files that are going
to be read in order to provide the private keys to sign the L1 txs | | - [ForkUpgradeBatchNumber](#SequenceSender_ForkUpgradeBatchNumber ) | No | integer | No | - | Batch number where there is a forkid change (fork upgrade) | +| - [UseValidium](#SequenceSender_UseValidium ) | No | boolean | No | - | UseValidium is a flag to enable/disable the use of validium | ### 11.1. `SequenceSender.WaitPeriodSendSequence` @@ -1793,26 +1909,40 @@ LastBatchVirtualizationTimeMaxWaitPeriod="5s" **Type:** : `integer` -**Default:** `131072` +**Default:** `0` **Description:** MaxTxSizeForL1 is the maximum size a single transaction can have. This field has non-trivial consequences: larger transactions than 128KB are significantly harder and more expensive to propagate; larger transactions also take more resources to validate whether they fit into the pool or not. -**Example setting the default value** (131072): +**Example setting the default value** (0): +``` +[SequenceSender] +MaxTxSizeForL1=0 +``` + +### 11.4. `SequenceSender.MaxBatchesForL1` + +**Type:** : `integer` + +**Default:** `10` + +**Description:** MaxBatchesForL1 is the maximum amount of batches to be sequenced in a single L1 tx + +**Example setting the default value** (10): ``` [SequenceSender] -MaxTxSizeForL1=131072 +MaxBatchesForL1=10 ``` -### 11.4. `SequenceSender.SenderAddress` +### 11.5. `SequenceSender.SenderAddress` **Type:** : `array of integer` **Description:** SenderAddress defines which private key the eth tx manager needs to use to sign the L1 txs -### 11.5. `SequenceSender.L2Coinbase` +### 11.6. `SequenceSender.L2Coinbase` **Type:** : `array of integer` @@ -1826,7 +1956,7 @@ to sign the L1 txs L2Coinbase="0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" ``` -### 11.6. `[SequenceSender.PrivateKey]` +### 11.7. `[SequenceSender.PrivateKey]` **Type:** : `object` **Description:** PrivateKey defines all the key store files that are going @@ -1837,7 +1967,7 @@ to be read in order to provide the private keys to sign the L1 txs | - [Path](#SequenceSender_PrivateKey_Path ) | No | string | No | - | Path is the file path for the key store file | | - [Password](#SequenceSender_PrivateKey_Password ) | No | string | No | - | Password is the password to decrypt the key store file | -#### 11.6.1. `SequenceSender.PrivateKey.Path` +#### 11.7.1. `SequenceSender.PrivateKey.Path` **Type:** : `string` @@ -1851,7 +1981,7 @@ to be read in order to provide the private keys to sign the L1 txs Path="/pk/sequencer.keystore" ``` -#### 11.6.2. `SequenceSender.PrivateKey.Password` +#### 11.7.2. `SequenceSender.PrivateKey.Password` **Type:** : `string` @@ -1865,7 +1995,7 @@ Path="/pk/sequencer.keystore" Password="testonly" ``` -### 11.7. `SequenceSender.ForkUpgradeBatchNumber` +### 11.8. `SequenceSender.ForkUpgradeBatchNumber` **Type:** : `integer` @@ -1879,6 +2009,20 @@ Password="testonly" ForkUpgradeBatchNumber=0 ``` +### 11.9. `SequenceSender.UseValidium` + +**Type:** : `boolean` + +**Default:** `true` + +**Description:** UseValidium is a flag to enable/disable the use of validium + +**Example setting the default value** (true): +``` +[SequenceSender] +UseValidium=true +``` + ## 12. `[Aggregator]` **Type:** : `object` @@ -2156,12 +2300,13 @@ GeneratingProofCleanupThreshold="10m" **Type:** : `object` **Description:** L1: Configuration related to L1 -| Property | Pattern | Type | Deprecated | Definition | Title/Description | -| ------------------------------------------------------------------------------------------------- | ------- | ---------------- | ---------- | ---------- | ------------------------------------------------ | -| - [chainId](#NetworkConfig_l1Config_chainId ) | No | integer | No | - | Chain ID of the L1 network | -| - [polygonZkEVMAddress](#NetworkConfig_l1Config_polygonZkEVMAddress ) | No | array of integer | No | - | Address of the L1 contract | -| - [maticTokenAddress](#NetworkConfig_l1Config_maticTokenAddress ) | No | array of integer | No | - | Address of the L1 Matic token Contract | -| - [polygonZkEVMGlobalExitRootAddress](#NetworkConfig_l1Config_polygonZkEVMGlobalExitRootAddress ) | No | array of integer | No | - | Address of the L1 GlobalExitRootManager contract | +| Property | Pattern | Type | Deprecated | Definition | Title/Description | +| ------------------------------------------------------------------------------------------------- | ------- | ---------------- | ---------- | ---------- | --------------------------------------------------- | +| - [chainId](#NetworkConfig_l1Config_chainId ) | No | integer | No | - | Chain ID of the L1 network | +| - [polygonZkEVMAddress](#NetworkConfig_l1Config_polygonZkEVMAddress ) | No | array of integer | No | - | Address of the L1 contract | +| - [maticTokenAddress](#NetworkConfig_l1Config_maticTokenAddress ) | No | array of integer | No | - | Address of the L1 Matic token Contract | +| - [polygonZkEVMGlobalExitRootAddress](#NetworkConfig_l1Config_polygonZkEVMGlobalExitRootAddress ) | No | array of integer | No | - | Address of the L1 GlobalExitRootManager contract | +| - [dataCommitteeContract](#NetworkConfig_l1Config_dataCommitteeContract ) | No | array of integer | No | - | Address of the data availability committee contract | #### 13.1.1. `NetworkConfig.l1Config.chainId` @@ -2192,6 +2337,11 @@ chainId=0 **Type:** : `array of integer` **Description:** Address of the L1 GlobalExitRootManager contract +#### 13.1.5. `NetworkConfig.l1Config.dataCommitteeContract` + +**Type:** : `array of integer` +**Description:** Address of the data availability committee contract + ### 13.2. `NetworkConfig.L2GlobalExitRootManagerAddr` **Type:** : `array of integer` @@ -2309,6 +2459,15 @@ GenesisBlockNum=0 | - [UpdatePeriod](#L2GasPriceSuggester_UpdatePeriod ) | No | string | No | - | Duration | | - [CleanHistoryPeriod](#L2GasPriceSuggester_CleanHistoryPeriod ) | No | string | No | - | Duration | | - [CleanHistoryTimeRetention](#L2GasPriceSuggester_CleanHistoryTimeRetention ) | No | string | No | - | Duration | +| - [KafkaURL](#L2GasPriceSuggester_KafkaURL ) | No | string | No | - | - | +| - [Topic](#L2GasPriceSuggester_Topic ) | No | string | No | - | - | +| - [GroupID](#L2GasPriceSuggester_GroupID ) | No | string | No | - | - | +| - [Username](#L2GasPriceSuggester_Username ) | No | string | No | - | - | +| - [Password](#L2GasPriceSuggester_Password ) | No | string | No | - | - | +| - [RootCAPath](#L2GasPriceSuggester_RootCAPath ) | No | string | No | - | - | +| - [L2CoinId](#L2GasPriceSuggester_L2CoinId ) | No | integer | No | - | - | +| - [DefaultL2CoinPrice](#L2GasPriceSuggester_DefaultL2CoinPrice ) | No | number | No | - | DefaultL2CoinPrice is the native token's coin price | +| - [GasPriceUsdt](#L2GasPriceSuggester_GasPriceUsdt ) | No | number | No | - | - | | - [Factor](#L2GasPriceSuggester_Factor ) | No | number | No | - | - | ### 14.1. `L2GasPriceSuggester.Type` @@ -2455,7 +2614,117 @@ CleanHistoryPeriod="1h0m0s" CleanHistoryTimeRetention="5m0s" ``` -### 14.11. `L2GasPriceSuggester.Factor` +### 14.11. `L2GasPriceSuggester.KafkaURL` + +**Type:** : `string` + +**Default:** `""` + +**Example setting the default value** (""): +``` +[L2GasPriceSuggester] +KafkaURL="" +``` + +### 14.12. `L2GasPriceSuggester.Topic` + +**Type:** : `string` + +**Default:** `""` + +**Example setting the default value** (""): +``` +[L2GasPriceSuggester] +Topic="" +``` + +### 14.13. `L2GasPriceSuggester.GroupID` + +**Type:** : `string` + +**Default:** `""` + +**Example setting the default value** (""): +``` +[L2GasPriceSuggester] +GroupID="" +``` + +### 14.14. `L2GasPriceSuggester.Username` + +**Type:** : `string` + +**Default:** `""` + +**Example setting the default value** (""): +``` +[L2GasPriceSuggester] +Username="" +``` + +### 14.15. `L2GasPriceSuggester.Password` + +**Type:** : `string` + +**Default:** `""` + +**Example setting the default value** (""): +``` +[L2GasPriceSuggester] +Password="" +``` + +### 14.16. `L2GasPriceSuggester.RootCAPath` + +**Type:** : `string` + +**Default:** `""` + +**Example setting the default value** (""): +``` +[L2GasPriceSuggester] +RootCAPath="" +``` + +### 14.17. `L2GasPriceSuggester.L2CoinId` + +**Type:** : `integer` + +**Default:** `0` + +**Example setting the default value** (0): +``` +[L2GasPriceSuggester] +L2CoinId=0 +``` + +### 14.18. `L2GasPriceSuggester.DefaultL2CoinPrice` + +**Type:** : `number` + +**Default:** `0` + +**Description:** DefaultL2CoinPrice is the native token's coin price + +**Example setting the default value** (0): +``` +[L2GasPriceSuggester] +DefaultL2CoinPrice=0 +``` + +### 14.19. `L2GasPriceSuggester.GasPriceUsdt` + +**Type:** : `number` + +**Default:** `0` + +**Example setting the default value** (0): +``` +[L2GasPriceSuggester] +GasPriceUsdt=0 +``` + +### 14.20. `L2GasPriceSuggester.Factor` **Type:** : `number` @@ -2483,12 +2752,12 @@ Factor=0.15 **Type:** : `string` -**Default:** `"zkevm-prover:50071"` +**Default:** `"xgon-prover:50071"` -**Example setting the default value** ("zkevm-prover:50071"): +**Example setting the default value** ("xgon-prover:50071"): ``` [Executor] -URI="zkevm-prover:50071" +URI="xgon-prover:50071" ``` ### 15.2. `Executor.MaxResourceExhaustedAttempts` @@ -2556,14 +2825,14 @@ MaxGRPCMessageSize=100000000 **Type:** : `string` -**Default:** `"zkevm-prover:50061"` +**Default:** `"xgon-prover:50061"` **Description:** URI is the server URI. -**Example setting the default value** ("zkevm-prover:50061"): +**Example setting the default value** ("xgon-prover:50061"): ``` [MTClient] -URI="zkevm-prover:50061" +URI="xgon-prover:50061" ``` ## 17. `[StateDB]` @@ -2627,14 +2896,14 @@ Password="state_password" **Type:** : `string` -**Default:** `"zkevm-state-db"` +**Default:** `"xgon-state-db"` **Description:** Host address of database -**Example setting the default value** ("zkevm-state-db"): +**Example setting the default value** ("xgon-state-db"): ``` [StateDB] -Host="zkevm-state-db" +Host="xgon-state-db" ``` ### 17.5. `StateDB.Port` @@ -2960,14 +3229,14 @@ Password="prover_pass" **Type:** : `string` -**Default:** `"zkevm-state-db"` +**Default:** `"xgon-state-db"` **Description:** Host address of database -**Example setting the default value** ("zkevm-state-db"): +**Example setting the default value** ("xgon-state-db"): ``` [HashDB] -Host="zkevm-state-db" +Host="xgon-state-db" ``` ### 20.5. `HashDB.Port` diff --git a/docs/config-file/node-config-schema.json b/docs/config-file/node-config-schema.json index 7f99c6a0f8..e84d9bb3be 100644 --- a/docs/config-file/node-config-schema.json +++ b/docs/config-file/node-config-schema.json @@ -159,6 +159,11 @@ }, "Pool": { "properties": { + "FreeClaimGasLimit": { + "type": "integer", + "description": "FreeClaimGasLimit is the max gas allowed use to do a free claim", + "default": 150000 + }, "IntervalToRefreshBlockedAddresses": { "type": "string", "title": "Duration", @@ -209,7 +214,7 @@ "Host": { "type": "string", "description": "Host address of database", - "default": "zkevm-pool-db" + "default": "xgon-pool-db" }, "Port": { "type": "string", @@ -265,6 +270,11 @@ "type": "integer", "description": "GlobalQueue represents the maximum number of non-executable transaction slots for all accounts", "default": 1024 + }, + "FreeGasAddress": { + "type": "string", + "description": "FreeGasAddress is the default free gas address", + "default": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" } }, "additionalProperties": false, @@ -349,6 +359,38 @@ "type": "boolean", "description": "TraceBatchUseHTTPS enables, in the debug_traceBatchByNum endpoint, the use of the HTTPS protocol (instead of HTTP)\nto do the parallel requests to RPC.debug_traceTransaction endpoint", "default": true + }, + "EnablePendingTransactionFilter": { + "type": "boolean", + "description": "EnablePendingTransactionFilter enables pending transaction filter that can support query L2 pending transaction", + "default": false + }, + "Nacos": { + "properties": { + "URLs": { + "type": "string", + "description": "URLs nacos server urls for discovery service of rest api, url is separated by \",\"", + "default": "" + }, + "NamespaceId": { + "type": "string", + "description": "NamespaceId nacos namepace id for discovery service of rest api", + "default": "" + }, + "ApplicationName": { + "type": "string", + "description": "ApplicationName rest application name in nacos", + "default": "" + }, + "ExternalListenAddr": { + "type": "string", + "description": "ExternalListenAddr Set the rest-server external ip and port, when it is launched by Docker", + "default": "" + } + }, + "additionalProperties": false, + "type": "object", + "description": "Nacos configuration" } }, "additionalProperties": false, @@ -673,7 +715,12 @@ "MaxTxSizeForL1": { "type": "integer", "description": "MaxTxSizeForL1 is the maximum size a single transaction can have. This field has\nnon-trivial consequences: larger transactions than 128KB are significantly harder and\nmore expensive to propagate; larger transactions also take more resources\nto validate whether they fit into the pool or not.", - "default": 131072 + "default": 0 + }, + "MaxBatchesForL1": { + "type": "integer", + "description": "MaxBatchesForL1 is the maximum amount of batches to be sequenced in a single L1 tx", + "default": 10 }, "SenderAddress": { "items": { @@ -715,6 +762,11 @@ "type": "integer", "description": "Batch number where there is a forkid change (fork upgrade)", "default": 0 + }, + "UseValidium": { + "type": "boolean", + "description": "UseValidium is a flag to enable/disable the use of validium", + "default": true } }, "additionalProperties": false, @@ -854,6 +906,15 @@ "maxItems": 20, "minItems": 20, "description": "Address of the L1 GlobalExitRootManager contract" + }, + "dataCommitteeContract": { + "items": { + "type": "integer" + }, + "type": "array", + "maxItems": 20, + "minItems": 20, + "description": "Address of the data availability committee contract" } }, "additionalProperties": false, @@ -997,6 +1058,43 @@ "300ms" ] }, + "KafkaURL": { + "type": "string", + "default": "" + }, + "Topic": { + "type": "string", + "default": "" + }, + "GroupID": { + "type": "string", + "default": "" + }, + "Username": { + "type": "string", + "default": "" + }, + "Password": { + "type": "string", + "default": "" + }, + "RootCAPath": { + "type": "string", + "default": "" + }, + "L2CoinId": { + "type": "integer", + "default": 0 + }, + "DefaultL2CoinPrice": { + "type": "number", + "description": "DefaultL2CoinPrice is the native token's coin price", + "default": 0 + }, + "GasPriceUsdt": { + "type": "number", + "default": 0 + }, "Factor": { "type": "number", "default": 0.15 @@ -1010,7 +1108,7 @@ "properties": { "URI": { "type": "string", - "default": "zkevm-prover:50071" + "default": "xgon-prover:50071" }, "MaxResourceExhaustedAttempts": { "type": "integer", @@ -1041,7 +1139,7 @@ "URI": { "type": "string", "description": "URI is the server URI.", - "default": "zkevm-prover:50061" + "default": "xgon-prover:50061" } }, "additionalProperties": false, @@ -1068,7 +1166,7 @@ "Host": { "type": "string", "description": "Host address of database", - "default": "zkevm-state-db" + "default": "xgon-state-db" }, "Port": { "type": "string", @@ -1196,7 +1294,7 @@ "Host": { "type": "string", "description": "Host address of database", - "default": "zkevm-state-db" + "default": "xgon-state-db" }, "Port": { "type": "string", diff --git a/docs/modes.md b/docs/modes.md index 3d264912c6..a8e97881cc 100644 --- a/docs/modes.md +++ b/docs/modes.md @@ -45,8 +45,8 @@ Additionally, the [`production-setup.md`](./production-setup.md) goes through th ### Docker services: -- `zkevm-sync` -- `zkevm-prover` (`Merkle Tree`, `Executor`) +- `xgon-sync` +- `xgon-prover` (`Merkle Tree`, `Executor`) - `zkevm-rpc` - Databases @@ -96,7 +96,7 @@ For *only* Prover Config (`only-prover-config.json`): ### Docker services: -- `zkevm-sync` -- `zkevm-prover` (`Prover`, `Merkle Tree`, `Executor`) -- `zkevm-aggregator` +- `xgon-sync` +- `xgon-prover` (`Prover`, `Merkle Tree`, `Executor`) +- `xgon-aggregator` - Databases \ No newline at end of file diff --git a/docs/running_local.md b/docs/running_local.md index 09b08422e5..3acd3b4a49 100644 --- a/docs/running_local.md +++ b/docs/running_local.md @@ -191,22 +191,24 @@ To configure your Metamask to use your local environment, follow these steps: | Address | Description | |---|---| -| 0x610178dA211FEF7D417bC0e6FeD39F05609AD788 | Proof of Efficiency | -| 0xff0EE8ea08cEf5cb4322777F5CC3E8A584B8A4A0 | Bridge | -| 0x5FbDB2315678afecb367f032d93F642f64180aa3 | Matic token | -| 0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6 | GlobalExitRootManager | - -## Deployer Account - +| 0x0D9088C72Cd4F08e9dDe474D8F5394147f64b22C | Proof of Efficiency | +| 0x10B65c586f795aF3eCCEe594fE4E38E1F059F780 | Bridge | +| 0xcFE6D77a653b988203BfAc9C6a69eA9D583bdC2b | Matic token | +| 0x82109a709138A2953C720D3d775168717b668ba6 | L1 OKB token | +| 0x82109a709138A2953C720D3d775168717b668ba6 | L2 WETH token | +| 0xEd236da21Ff62bC7B62608AdB818da49E8549fa7 | GlobalExitRootManager | + +## Admin Account | Address | Private Key | |---|---| -| 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 | 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 | +| 0x2ECF31eCe36ccaC2d3222A303b1409233ECBB225 | 0xde3ca643a52f5543e84ba984c4419ff40dbabd0e483c31c1d09fee8168d68e38 | ## Sequencer Account | Address | Private Key | |---|---| | 0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D | 0x28b2b0318721be8c8339199172cd7cc8f5e273800a35616ec893083a4b32c02e | +| 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 | 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 | ## Accounts diff --git a/etherman/etherman_test.go b/etherman/etherman_test.go index 09b8f132c6..6bb15dd83a 100644 --- a/etherman/etherman_test.go +++ b/etherman/etherman_test.go @@ -97,7 +97,8 @@ func TestForcedBatchEvent(t *testing.T) { initBlock, err := etherman.EthClient.BlockByNumber(ctx, nil) require.NoError(t, err) - amount, err := etherman.ZkEVM.GetForcedBatchFee(&bind.CallOpts{Pending: false}) + //amount, err := etherman.ZkEVM.GetForcedBatchFee(&bind.CallOpts{Pending: false}) + amount := big.NewInt(0) require.NoError(t, err) rawTxs := "f84901843b9aca00827b0c945fbdb2315678afecb367f032d93f642f64180aa380a46057361d00000000000000000000000000000000000000000000000000000000000000048203e9808073efe1fa2d3e27f26f32208550ea9b0274d49050b816cadab05a771f4275d0242fd5d92b3fb89575c070e6c930587c520ee65a3aa8cfe382fcad20421bf51d621c" data, err := hex.DecodeString(rawTxs) @@ -144,7 +145,8 @@ func TestSequencedBatchesEvent(t *testing.T) { ger, err := etherman.GlobalExitRootManager.GetLastGlobalExitRoot(nil) require.NoError(t, err) - amount, err := etherman.ZkEVM.GetForcedBatchFee(&bind.CallOpts{Pending: false}) + //amount, err := etherman.ZkEVM.GetForcedBatchFee(&bind.CallOpts{Pending: false}) + amount := big.NewInt(0) require.NoError(t, err) rawTxs := "f84901843b9aca00827b0c945fbdb2315678afecb367f032d93f642f64180aa380a46057361d00000000000000000000000000000000000000000000000000000000000000048203e9808073efe1fa2d3e27f26f32208550ea9b0274d49050b816cadab05a771f4275d0242fd5d92b3fb89575c070e6c930587c520ee65a3aa8cfe382fcad20421bf51d621c" data, err := hex.DecodeString(rawTxs) @@ -166,13 +168,13 @@ func TestSequencedBatchesEvent(t *testing.T) { GlobalExitRoot: ger, Timestamp: currentBlock.Time(), MinForcedTimestamp: uint64(blocks[2].ForcedBatches[0].ForcedAt.Unix()), - TransactionsHash: crypto.Keccak256Hash(common.Hex2Bytes(rawTxs)), + Transactions: common.Hex2Bytes(rawTxs), }) sequences = append(sequences, polygonzkevm.PolygonZkEVMBatchData{ GlobalExitRoot: ger, Timestamp: currentBlock.Time() + 1, MinForcedTimestamp: 0, - TransactionsHash: crypto.Keccak256Hash(common.Hex2Bytes(rawTxs)), + Transactions: common.Hex2Bytes(rawTxs), }) _, err = etherman.ZkEVM.SequenceBatches(auth, sequences, auth.From, []byte{}) require.NoError(t, err) @@ -189,7 +191,7 @@ func TestSequencedBatchesEvent(t *testing.T) { t.Log("Blocks: ", blocks) assert.Equal(t, 4, len(blocks)) assert.Equal(t, 1, len(blocks[3].SequencedBatches)) - assert.Equal(t, crypto.Keccak256Hash(common.Hex2Bytes(rawTxs)), common.Hash(blocks[3].SequencedBatches[0][1].TransactionsHash)) + assert.Equal(t, common.Hex2Bytes(rawTxs), blocks[3].SequencedBatches[0][1].Transactions) assert.Equal(t, currentBlock.Time(), blocks[3].SequencedBatches[0][0].Timestamp) assert.Equal(t, ger, blocks[3].SequencedBatches[0][0].GlobalExitRoot) assert.Equal(t, auth.From, blocks[3].SequencedBatches[0][0].Coinbase) @@ -213,7 +215,7 @@ func TestVerifyBatchEvent(t *testing.T) { GlobalExitRoot: common.Hash{}, Timestamp: initBlock.Time(), MinForcedTimestamp: 0, - TransactionsHash: crypto.Keccak256Hash(common.Hex2Bytes(rawTxs)), + Transactions: common.Hex2Bytes(rawTxs), } _, err = etherman.ZkEVM.SequenceBatches(auth, []polygonzkevm.PolygonZkEVMBatchData{tx}, auth.From, []byte{}) require.NoError(t, err) @@ -253,7 +255,8 @@ func TestSequenceForceBatchesEvent(t *testing.T) { initBlock, err := etherman.EthClient.BlockByNumber(ctx, nil) require.NoError(t, err) - amount, err := etherman.ZkEVM.GetForcedBatchFee(&bind.CallOpts{Pending: false}) + //amount, err := etherman.ZkEVM.GetForcedBatchFee(&bind.CallOpts{Pending: false}) + amount := big.NewInt(0) require.NoError(t, err) rawTxs := "f84901843b9aca00827b0c945fbdb2315678afecb367f032d93f642f64180aa380a46057361d00000000000000000000000000000000000000000000000000000000000000048203e9808073efe1fa2d3e27f26f32208550ea9b0274d49050b816cadab05a771f4275d0242fd5d92b3fb89575c070e6c930587c520ee65a3aa8cfe382fcad20421bf51d621c" data, err := hex.DecodeString(rawTxs) @@ -327,7 +330,7 @@ func TestSendSequences(t *testing.T) { Timestamp: int64(currentBlock.Time() - 1), BatchL2Data: batchL2Data, } - tx, err := etherman.sequenceBatches(*auth, []ethmanTypes.Sequence{sequence}, auth.From, nil) + tx, err := etherman.sequenceBatches(*auth, []ethmanTypes.Sequence{sequence}, auth.From, []byte{}) require.NoError(t, err) log.Debug("TX: ", tx.Hash()) ethBackend.Commit() diff --git a/etherman/simulated.go b/etherman/simulated.go index e8f101007f..2cec60abe2 100644 --- a/etherman/simulated.go +++ b/etherman/simulated.go @@ -129,6 +129,7 @@ func NewSimulatedEtherman(cfg Config, auth *bind.TransactOpts) (etherman *Client ZkEVM: poe, Matic: maticContract, GlobalExitRootManager: globalExitRoot, + DataCommittee: da, SCAddresses: []common.Address{poeAddr, exitManagerAddr, dataCommitteeAddr}, auth: map[common.Address]bind.TransactOpts{}, cfg: cfg, @@ -137,5 +138,5 @@ func NewSimulatedEtherman(cfg Config, auth *bind.TransactOpts) (etherman *Client if err != nil { return nil, nil, common.Address{}, nil, nil, err } - return c, client, maticAddr, br, nil, nil + return c, client, maticAddr, br, da, nil } diff --git a/etherman/smartcontracts/abi/datacommittee.abi b/etherman/smartcontracts/abi/datacommittee.abi index 76d893ffc9..d21b66ce38 100644 --- a/etherman/smartcontracts/abi/datacommittee.abi +++ b/etherman/smartcontracts/abi/datacommittee.abi @@ -223,4 +223,4 @@ "stateMutability": "view", "type": "function" } - ] \ No newline at end of file +] \ No newline at end of file diff --git a/etherman/smartcontracts/abi/polygonzkevm.abi b/etherman/smartcontracts/abi/polygonzkevm.abi index d39fdabb92..b9b688f09e 100644 --- a/etherman/smartcontracts/abi/polygonzkevm.abi +++ b/etherman/smartcontracts/abi/polygonzkevm.abi @@ -1747,4 +1747,4 @@ "stateMutability": "nonpayable", "type": "function" } - ] \ No newline at end of file +] \ No newline at end of file diff --git a/etherman/smartcontracts/abi/polygonzkevmbridge.abi b/etherman/smartcontracts/abi/polygonzkevmbridge.abi index f7547c006f..e419667ebb 100644 --- a/etherman/smartcontracts/abi/polygonzkevmbridge.abi +++ b/etherman/smartcontracts/abi/polygonzkevmbridge.abi @@ -1,774 +1,774 @@ [ - { - "inputs": [], - "name": "AlreadyClaimed", - "type": "error" - }, - { - "inputs": [], - "name": "AmountDoesNotMatchMsgValue", - "type": "error" - }, - { - "inputs": [], - "name": "DestinationNetworkInvalid", - "type": "error" - }, - { - "inputs": [], - "name": "EtherTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "GlobalExitRootInvalid", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidSmtProof", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeFull", - "type": "error" - }, - { - "inputs": [], - "name": "MessageFailed", - "type": "error" - }, - { - "inputs": [], - "name": "MsgValueNotZero", - "type": "error" - }, - { - "inputs": [], - "name": "NotValidAmount", - "type": "error" - }, - { - "inputs": [], - "name": "NotValidOwner", - "type": "error" - }, - { - "inputs": [], - "name": "NotValidSignature", - "type": "error" - }, - { - "inputs": [], - "name": "NotValidSpender", - "type": "error" - }, - { - "inputs": [], - "name": "OnlyEmergencyState", - "type": "error" - }, - { - "inputs": [], - "name": "OnlyNotEmergencyState", - "type": "error" - }, - { - "inputs": [], - "name": "OnlyPolygonZkEVM", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "leafType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "depositCount", - "type": "uint32" - } - ], - "name": "BridgeEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "ClaimEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateDeactivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "wrappedTokenAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "NewWrappedToken", - "type": "event" - }, - { - "inputs": [], - "name": "activateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "bool", - "name": "forceUpdateGlobalExitRoot", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "permitData", - "type": "bytes" - } - ], - "name": "bridgeAsset", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "bool", - "name": "forceUpdateGlobalExitRoot", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "bridgeMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[32]", - "name": "smtProof", - "type": "bytes32[32]" - }, - { - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "mainnetExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "rollupExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "claimAsset", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[32]", - "name": "smtProof", - "type": "bytes32[32]" - }, - { - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "mainnetExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "rollupExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "claimMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "claimedBitMap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "deactivateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "depositCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDepositRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "leafType", - "type": "uint8" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "metadataHash", - "type": "bytes32" - } - ], - "name": "getLeafValue", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - } - ], - "name": "getTokenWrappedAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "globalExitRootManager", - "outputs": [ - { - "internalType": "contract IBasePolygonZkEVMGlobalExitRoot", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_networkID", - "type": "uint32" - }, - { - "internalType": "contract IBasePolygonZkEVMGlobalExitRoot", - "name": "_globalExitRootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_polygonZkEVMaddress", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "isClaimed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isEmergencyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastUpdatedDepositCount", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "networkID", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "polygonZkEVMaddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals", - "type": "uint8" - } - ], - "name": "precalculatedWrapperAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "tokenInfoToWrappedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "updateGlobalExitRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leafHash", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "smtProof", - "type": "bytes32[32]" - }, - { - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "verifyMerkleProof", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "wrappedTokenToTokenInfo", - "outputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } + { + "inputs": [], + "name": "AlreadyClaimed", + "type": "error" + }, + { + "inputs": [], + "name": "AmountDoesNotMatchMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "DestinationNetworkInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "EtherTransferFailed", + "type": "error" + }, + { + "inputs": [], + "name": "GlobalExitRootInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSmtProof", + "type": "error" + }, + { + "inputs": [], + "name": "MerkleTreeFull", + "type": "error" + }, + { + "inputs": [], + "name": "MessageFailed", + "type": "error" + }, + { + "inputs": [], + "name": "MsgValueNotZero", + "type": "error" + }, + { + "inputs": [], + "name": "NotValidAmount", + "type": "error" + }, + { + "inputs": [], + "name": "NotValidOwner", + "type": "error" + }, + { + "inputs": [], + "name": "NotValidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "NotValidSpender", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyEmergencyState", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyNotEmergencyState", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyPolygonZkEVM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "depositCount", + "type": "uint32" + } + ], + "name": "BridgeEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ClaimEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateDeactivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "wrappedTokenAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "NewWrappedToken", + "type": "event" + }, + { + "inputs": [], + "name": "activateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "bool", + "name": "forceUpdateGlobalExitRoot", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "permitData", + "type": "bytes" + } + ], + "name": "bridgeAsset", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "forceUpdateGlobalExitRoot", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "bridgeMessage", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[32]", + "name": "smtProof", + "type": "bytes32[32]" + }, + { + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mainnetExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "rollupExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "claimAsset", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[32]", + "name": "smtProof", + "type": "bytes32[32]" + }, + { + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mainnetExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "rollupExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "claimMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "claimedBitMap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "deactivateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "depositCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDepositRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "metadataHash", + "type": "bytes32" + } + ], + "name": "getLeafValue", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + } + ], + "name": "getTokenWrappedAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalExitRootManager", + "outputs": [ + { + "internalType": "contract IBasePolygonZkEVMGlobalExitRoot", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_networkID", + "type": "uint32" + }, + { + "internalType": "contract IBasePolygonZkEVMGlobalExitRoot", + "name": "_globalExitRootManager", + "type": "address" + }, + { + "internalType": "address", + "name": "_polygonZkEVMaddress", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "isClaimed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isEmergencyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastUpdatedDepositCount", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "networkID", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "polygonZkEVMaddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ], + "name": "precalculatedWrapperAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "tokenInfoToWrappedToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "updateGlobalExitRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "leafHash", + "type": "bytes32" + }, + { + "internalType": "bytes32[32]", + "name": "smtProof", + "type": "bytes32[32]" + }, + { + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "verifyMerkleProof", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "wrappedTokenToTokenInfo", + "outputs": [ + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } ] \ No newline at end of file diff --git a/etherman/smartcontracts/abi/polygonzkevmbridgel2.abi b/etherman/smartcontracts/abi/polygonzkevmbridgel2.abi new file mode 100644 index 0000000000..a22203ff3c --- /dev/null +++ b/etherman/smartcontracts/abi/polygonzkevmbridgel2.abi @@ -0,0 +1,933 @@ +[ + { + "inputs": [], + "name": "AlreadyClaimed", + "type": "error" + }, + { + "inputs": [], + "name": "AmountDoesNotMatchMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "DestinationNetworkInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "EtherTransferFailed", + "type": "error" + }, + { + "inputs": [], + "name": "GlobalExitRootInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSmtProof", + "type": "error" + }, + { + "inputs": [], + "name": "MerkleTreeFull", + "type": "error" + }, + { + "inputs": [], + "name": "MessageFailed", + "type": "error" + }, + { + "inputs": [], + "name": "MsgValueNotZero", + "type": "error" + }, + { + "inputs": [], + "name": "NotValidAmount", + "type": "error" + }, + { + "inputs": [], + "name": "NotValidOwner", + "type": "error" + }, + { + "inputs": [], + "name": "NotValidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "NotValidSpender", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyEmergencyState", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyNotEmergencyState", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyPolygonZkEVM", + "type": "error" + }, + { + "inputs": [], + "name": "TokenNotPermitted", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "AllL2TokensPermissionSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "depositCount", + "type": "uint32" + } + ], + "name": "BridgeEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ClaimEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateDeactivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "L2TokenPermissionSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "wrappedTokenAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "NewWrappedToken", + "type": "event" + }, + { + "inputs": [], + "name": "WETHToken", + "outputs": [ + { + "internalType": "contract TokenWrapped", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "activateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "bool", + "name": "forceUpdateGlobalExitRoot", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "permitData", + "type": "bytes" + } + ], + "name": "bridgeAsset", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountWETH", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "forceUpdateGlobalExitRoot", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "bridgeMessage", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[32]", + "name": "smtProof", + "type": "bytes32[32]" + }, + { + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mainnetExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "rollupExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "claimAsset", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[32]", + "name": "smtProof", + "type": "bytes32[32]" + }, + { + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mainnetExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "rollupExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "claimMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "claimedBitMap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "deactivateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "depositCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasTokenAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasTokenNetwork", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDepositRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "metadataHash", + "type": "bytes32" + } + ], + "name": "getLeafValue", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + } + ], + "name": "getTokenWrappedAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalExitRootManager", + "outputs": [ + { + "internalType": "contract IBasePolygonZkEVMGlobalExitRoot", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_networkID", + "type": "uint32" + }, + { + "internalType": "contract IBasePolygonZkEVMGlobalExitRoot", + "name": "_globalExitRootManager", + "type": "address" + }, + { + "internalType": "address", + "name": "_polygonZkEVMaddress", + "type": "address" + }, + { + "internalType": "address", + "name": "_gasTokenAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_gasTokenNetwork", + "type": "uint32" + }, + { + "internalType": "contract TokenWrapped", + "name": "_WETHToken", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isAllL2TokensAllowed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "isClaimed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isEmergencyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isTokenAllowed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastUpdatedDepositCount", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "networkID", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "polygonZkEVMaddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ], + "name": "precalculatedWrapperAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setAllL2TokensAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setL2TokenBridgePermission", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "tokenInfoToWrappedToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "updateGlobalExitRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "leafHash", + "type": "bytes32" + }, + { + "internalType": "bytes32[32]", + "name": "smtProof", + "type": "bytes32[32]" + }, + { + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "verifyMerkleProof", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "wrappedTokenToTokenInfo", + "outputs": [ + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/etherman/smartcontracts/abi/polygonzkevmglobalexitroot.abi b/etherman/smartcontracts/abi/polygonzkevmglobalexitroot.abi index 85f181413d..eb9261f9a2 100644 --- a/etherman/smartcontracts/abi/polygonzkevmglobalexitroot.abi +++ b/etherman/smartcontracts/abi/polygonzkevmglobalexitroot.abi @@ -1,139 +1,139 @@ [ - { - "inputs": [ - { - "internalType": "address", - "name": "_rollupAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "_bridgeAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "OnlyAllowedContracts", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "mainnetExitRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "rollupExitRoot", - "type": "bytes32" - } - ], - "name": "UpdateGlobalExitRoot", - "type": "event" - }, - { - "inputs": [], - "name": "bridgeAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getLastGlobalExitRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "globalExitRootMap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastMainnetExitRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastRollupExitRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rollupAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "newRoot", - "type": "bytes32" - } - ], - "name": "updateExitRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } + { + "inputs": [ + { + "internalType": "address", + "name": "_rollupAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "_bridgeAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "OnlyAllowedContracts", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "mainnetExitRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "rollupExitRoot", + "type": "bytes32" + } + ], + "name": "UpdateGlobalExitRoot", + "type": "event" + }, + { + "inputs": [], + "name": "bridgeAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLastGlobalExitRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "globalExitRootMap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastMainnetExitRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastRollupExitRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rollupAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "newRoot", + "type": "bytes32" + } + ], + "name": "updateExitRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } ] \ No newline at end of file diff --git a/etherman/smartcontracts/bin/polygonzkevm.bin b/etherman/smartcontracts/bin/polygonzkevm.bin index a13e89e6b4..123f97d1bb 100644 --- a/etherman/smartcontracts/bin/polygonzkevm.bin +++ b/etherman/smartcontracts/bin/polygonzkevm.bin @@ -1 +1 @@ -6101606040523480156200001257600080fd5b5060405162006263380380620062638339810160408190526200003591620000ac565b6001600160a01b0396871660c05294861660805292851660a05290841660e052909216610100526001600160401b039182166101205216610140526200014f565b6001600160a01b03811681146200008c57600080fd5b50565b80516001600160401b0381168114620000a757600080fd5b919050565b600080600080600080600060e0888a031215620000c857600080fd5b8751620000d58162000076565b6020890151909750620000e88162000076565b6040890151909650620000fb8162000076565b60608901519095506200010e8162000076565b6080890151909450620001218162000076565b92506200013160a089016200008f565b91506200014160c089016200008f565b905092959891949750929550565b60805160a05160c05160e0516101005161012051610140516160346200022f600039600081816106c001528181610e3c01526129bd01526000818161082d0152610e120152600081816105cb01526136970152600081816107f301528181613056015281816138e60152614d1301526000818161099901528181610faf01528181611180015281816119b80152818161343f01528181613b0901526148d9015260008181610a4601528181614220015261468c0152600081816108e901528181611ea9015281816138b401528181613add015261432101526160346000f3fe608060405234801561001057600080fd5b50600436106103d05760003560e01c80638c3d7301116101ff578063cfa8ed471161011a578063e91cbddf116100ad578063f2fde38b1161007c578063f2fde38b14610ace578063f4d0841214610ae1578063f851a44014610af4578063f8b823e414610b1457600080fd5b8063e91cbddf14610a68578063eaeb077b14610a7b578063ed6b010414610a8e578063f14916d614610abb57600080fd5b8063d939b315116100e9578063d939b315146109e1578063dbc1697614610a09578063e7a7ed0214610a11578063e8bf92ed14610a4157600080fd5b8063cfa8ed4714610965578063d02103ca14610994578063d2e129f9146109bb578063d8d1091b146109ce57600080fd5b8063adc879e911610192578063ba58ae3911610161578063ba58ae391461090b578063c0ed84e01461091e578063c754c7ed14610926578063c89e42df1461095257600080fd5b8063adc879e914610828578063afd23cbe1461084f578063b4d63f581461087d578063b6b0b097146108e457600080fd5b80639c9f3dfe116101ce5780639c9f3dfe146107c8578063a066215c146107db578063a3c573eb146107ee578063ada8f9191461081557600080fd5b80638c3d7301146107875780638da5cb5b1461078f57806399f5634e146107ad5780639aa972a3146107b557600080fd5b80634a910e6a116102ef5780636b8616ce116102825780637fcb3653116102515780637fcb3653146106a7578063831c7ead146106bb578063837a4738146106e2578063841b24d71461075757600080fd5b80636b8616ce146106595780636ff512cc14610679578063715018a61461068c5780637215541a1461069457600080fd5b8063542028d5116102be578063542028d51461062e5780635ec9195814610636578063604691691461063e578063621dd4111461064657600080fd5b80634a910e6a146105b35780634df61d24146105c65780634e487706146105ed5780635392c5e01461060057600080fd5b80632b0006fa11610367578063423fa85611610336578063423fa856146105375780634560526714610557578063458c04771461057f5780634a1a89a71461059357600080fd5b80632b0006fa146104eb5780632c1f816a146104fe578063383b3be814610511578063394218e91461052457600080fd5b806319d8ac61116103a357806319d8ac6114610453578063220d789914610467578063267822471461047a57806329878983146104bf57600080fd5b80630a0d9fbe146103d5578063107bf28c1461040c57806315064c96146104215780631816b7e51461043e575b600080fd5b606f546103ee90610100900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b610414610b1d565b6040516104039190615421565b606f5461042e9060ff1681565b6040519015158152602001610403565b61045161044c36600461543b565b610bab565b005b6073546103ee9067ffffffffffffffff1681565b610414610475366004615477565b610cc3565b607b5461049a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610403565b60745461049a9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104516104f93660046154dc565b610e9a565b61045161050c366004615544565b61106a565b61042e61051f3660046155be565b611278565b6104516105323660046155be565b6112ce565b6073546103ee9068010000000000000000900467ffffffffffffffff1681565b6073546103ee90700100000000000000000000000000000000900467ffffffffffffffff1681565b6079546103ee9067ffffffffffffffff1681565b6079546103ee9068010000000000000000900467ffffffffffffffff1681565b6104516105c13660046155be565b611452565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b6104516105fb3660046155be565b611505565b61062061060e3660046155be565b60756020526000908152604090205481565b604051908152602001610403565b610414611689565b610451611696565b610620611796565b6104516106543660046154dc565b6117ac565b6106206106673660046155be565b60716020526000908152604090205481565b6104516106873660046155fd565b611b3c565b610451611c11565b6104516106a23660046155be565b611c25565b6074546103ee9067ffffffffffffffff1681565b6103ee7f000000000000000000000000000000000000000000000000000000000000000081565b61072b6106f0366004615618565b60786020526000908152604090208054600182015460029092015467ffffffffffffffff808316936801000000000000000090930416919084565b6040805167ffffffffffffffff9586168152949093166020850152918301526060820152608001610403565b6079546103ee907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b610451611d95565b60335473ffffffffffffffffffffffffffffffffffffffff1661049a565b610620611e61565b6104516107c3366004615544565b611fba565b6104516107d63660046155be565b61206b565b6104516107e93660046155be565b6121e7565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b6104516108233660046155fd565b6122ed565b6103ee7f000000000000000000000000000000000000000000000000000000000000000081565b606f5461086a906901000000000000000000900461ffff1681565b60405161ffff9091168152602001610403565b6108be61088b3660046155be565b6072602052600090815260409020805460019091015467ffffffffffffffff808216916801000000000000000090041683565b6040805193845267ffffffffffffffff9283166020850152911690820152606001610403565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b61042e610919366004615618565b6123b1565b6103ee61243b565b607b546103ee9074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b61045161096036600461570b565b612490565b606f5461049a906b010000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b6104516109c9366004615789565b61251d565b6104516109dc366004615881565b612a61565b6079546103ee90700100000000000000000000000000000000900467ffffffffffffffff1681565b610451613003565b6073546103ee907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b610451610a763660046158c3565b6130dc565b610451610a89366004615947565b6139a7565b607b5461042e907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610451610ac93660046155fd565b613d9d565b610451610adc3660046155fd565b613e6f565b610451610aef36600461543b565b613f23565b607a5461049a9073ffffffffffffffffffffffffffffffffffffffff1681565b61062060705481565b60778054610b2a90615993565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5690615993565b8015610ba35780601f10610b7857610100808354040283529160200191610ba3565b820191906000526020600020905b815481529060010190602001808311610b8657829003601f168201915b505050505081565b607a5473ffffffffffffffffffffffffffffffffffffffff163314610bfc576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88161ffff161080610c1557506103ff8161ffff16115b15610c4c576040517f4c2533c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff16690100000000000000000061ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b67ffffffffffffffff8086166000818152607260205260408082205493881682529020546060929115801590610cf7575081155b15610d2e576040517f6818c29e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80610d65576040517f66385b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d6e846123b1565b610da4576040517f176b913c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b166020820152603481019690965260548601929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c098891b811660748701527f0000000000000000000000000000000000000000000000000000000000000000891b8116607c8701527f0000000000000000000000000000000000000000000000000000000000000000891b81166084870152608c86019490945260ac85015260cc840194909452509290931b90911660ec830152805180830360d401815260f4909201905290565b60745468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610ef7576040517fbbcbbc0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f05868686868686613f7d565b607480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86811691821790925560009081526075602052604090208390556079541615610f8057607980547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690555b6040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b15801561100857600080fd5b505af115801561101c573d6000803e3d6000fd5b505060405184815233925067ffffffffffffffff871691507fcb339b570a7f0b25afa7333371ff11192092a0aeace12b671f4c212f2815c6fe906020015b60405180910390a3505050505050565b60745468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146110c7576040517fbbcbbc0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110d687878787878787614355565b607480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8681169182179092556000908152607560205260409020839055607954161561115157607980547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690555b6040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156111d957600080fd5b505af11580156111ed573d6000803e3d6000fd5b50506079805477ffffffffffffffffffffffffffffffffffffffffffffffff167a093a800000000000000000000000000000000000000000000000001790555050604051828152339067ffffffffffffffff8616907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a350505050505050565b60795467ffffffffffffffff828116600090815260786020526040812054909242926112bc9270010000000000000000000000000000000090920481169116615a15565b67ffffffffffffffff16111592915050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331461131f576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115611366576040517f1d06e87900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff166113d55760795467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908216106113d5576040517f401636df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6079805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610cb8565b60745468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114f957606f5460ff16156114ba576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c381611278565b6114f9576040517f0ce9e4a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115028161478f565b50565b607a5473ffffffffffffffffffffffffffffffffffffffff163314611556576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff8216111561159d576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1661160857607b5467ffffffffffffffff74010000000000000000000000000000000000000000909104811690821610611608576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b80547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b90602001610cb8565b60768054610b2a90615993565b607a5473ffffffffffffffffffffffffffffffffffffffff1633146116e7576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b547c0100000000000000000000000000000000000000000000000000000000900460ff16611743576040517ff6ba91a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b80547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690556040517f854dd6ce5a1445c4c54388b21cffd11cf5bba1b9e763aec48ce3da75d617412f90600090a1565b600060705460646117a79190615a3d565b905090565b606f5460ff16156117e9576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60795467ffffffffffffffff858116600090815260726020526040902060010154429261183692780100000000000000000000000000000000000000000000000090910481169116615a15565b67ffffffffffffffff161115611878576040517f8a0704d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86118858686615a54565b67ffffffffffffffff1611156118c7576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118d5868686868686613f7d565b607054156118e6576118e6846149a2565b607954700100000000000000000000000000000000900467ffffffffffffffff16600003611a2e57607480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8681169182179092556000908152607560205260409020839055607954161561198957607980547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690555b6040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611a1157600080fd5b505af1158015611a25573d6000803e3d6000fd5b50505050611afe565b611a36614b68565b6079805467ffffffffffffffff16906000611a5083615a75565b825467ffffffffffffffff9182166101009390930a92830292820219169190911790915560408051608081018252428316815287831660208083019182528284018981526060840189815260795487166000908152607890935294909120925183549251861668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009093169516949094171781559151600183015551600290910155505b604051828152339067ffffffffffffffff8616907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200161105a565b607a5473ffffffffffffffffffffffffffffffffffffffff163314611b8d576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fff0000000000000000000000000000000000000000ffffffffffffffffffffff166b01000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610cb8565b611c19614c19565b611c236000614c9a565b565b60335473ffffffffffffffffffffffffffffffffffffffff163314611d8d576000611c4e61243b565b90508067ffffffffffffffff168267ffffffffffffffff1611611c9d576040517f812a372d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff6801000000000000000090910481169083161180611ce3575067ffffffffffffffff80831660009081526072602052604090206001015416155b15611d1a576040517f98c5c01400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8083166000908152607260205260409020600101544291611d499162093a809116615a15565b67ffffffffffffffff161115611d8b576040517fd257555a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b611502614d11565b607b5473ffffffffffffffffffffffffffffffffffffffff163314611de6576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b54607a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f149190615a9c565b90506000611f2061243b565b60735467ffffffffffffffff680100000000000000008204811691611f789170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416615a54565b611f829190615a15565b611f8c9190615a54565b67ffffffffffffffff16905080600003611fa95760009250505090565b611fb38183615ae4565b9250505090565b606f5460ff1615611ff7576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61200687878787878787614355565b67ffffffffffffffff84166000908152607560209081526040918290205482519081529081018490527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612062614d11565b50505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff1633146120bc576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115612103576040517fcc96507000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1661216a5760795467ffffffffffffffff70010000000000000000000000000000000090910481169082161061216a576040517f48a05a9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607980547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610cb8565b607a5473ffffffffffffffffffffffffffffffffffffffff163314612238576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620151808167ffffffffffffffff16111561227f576040517fe067dfe800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff1661010067ffffffffffffffff8416908102919091179091556040519081527f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c2890602001610cb8565b607a5473ffffffffffffffffffffffffffffffffffffffff16331461233e576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610cb8565b600067ffffffff0000000167ffffffffffffffff83161080156123e9575067ffffffff00000001604083901c67ffffffffffffffff16105b801561240a575067ffffffff00000001608083901c67ffffffffffffffff16105b8015612421575067ffffffff0000000160c083901c105b1561242e57506001919050565b506000919050565b919050565b60795460009067ffffffffffffffff161561247f575060795467ffffffffffffffff9081166000908152607860205260409020546801000000000000000090041690565b5060745467ffffffffffffffff1690565b607a5473ffffffffffffffffffffffffffffffffffffffff1633146124e1576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60766124ed8282615b3e565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610cb89190615421565b600054610100900460ff161580801561253d5750600054600160ff909116105b806125575750303b158015612557575060005460ff166001145b6125e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561264657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61265360208801886155fd565b607a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556126a860408801602089016155fd565b606f805473ffffffffffffffffffffffffffffffffffffffff929092166b010000000000000000000000027fff0000000000000000000000000000000000000000ffffffffffffffffffffff90921691909117905561270d60808801606089016155fd565b6074805473ffffffffffffffffffffffffffffffffffffffff9290921668010000000000000000027fffffffff0000000000000000000000000000000000000000ffffffffffffffff9092169190911790556000805260756020527ff9e3fbf150b7a0077118526f473c53cb4734f166167e2c6213e3567dd390b4ad86905560766127988682615b3e565b5060776127a58582615b3e565b5062093a806127ba6060890160408a016155be565b67ffffffffffffffff1611156127fc576040517fcc96507000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61280c60608801604089016155be565b6079805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff90921691909117905562093a8061286e60a0890160808a016155be565b67ffffffffffffffff1611156128b0576040517f1d06e87900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c060a08801608089016155be565b6079805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff93909316929092029190911790556000607055606f80547fffffffffffffffffffffffffffffffffffffffffff00000000000000000000ff166a03ea000000000000070800179055607b80547fffffff000000000000000000ffffffffffffffffffffffffffffffffffffffff167c0100000000000697800000000000000000000000000000000000000000179055612998614d99565b7fed7be53c9f1a96a481223b15568a5b1a475e01a74b347d6ca187c8bf0c078cd660007f000000000000000000000000000000000000000000000000000000000000000085856040516129ee9493929190615ca1565b60405180910390a1801561206257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b607b547c0100000000000000000000000000000000000000000000000000000000900460ff1615612abe576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1615612afb576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000819003612b37576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612b73576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612bbe918491700100000000000000000000000000000000900416615cd9565b1115612bf6576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff680100000000000000008204811660008181526072602052604081205491937001000000000000000000000000000000009004909216915b84811015612ea0576000878783818110612c5657612c56615cec565b9050602002810190612c689190615d1b565b612c7190615d59565b905083612c7d81615a75565b82518051602091820120818501516040808701519051949950919450600093612cdf9386939101928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8916600090815260719093529120549091508114612d68576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8616600090815260716020526040812055612d8d600189615dd5565b8403612dfc5742607b60149054906101000a900467ffffffffffffffff168460400151612dba9190615a15565b67ffffffffffffffff161115612dfc576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020838101516040805192830188905282018490526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012094505050508080612e9890615de8565b915050612c3a565b50612eab8484615a15565b6073805467ffffffffffffffff4281167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009092168217808455604080516060810182528781526020808201958652680100000000000000009384900485168284019081528589166000818152607290935284832093518455965160019390930180549151871686027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921693871693909317179091558554938916700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff938602939093167fffffffffffffffff00000000000000000000000000000000ffffffffffffffff90941693909317919091179093559151929550917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a2505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff163314613054576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156130bc57600080fd5b505af11580156130d0573d6000803e3d6000fd5b50505050611c23614e39565b606f5460ff1615613119576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f546b010000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314613179576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360008190036131b5576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156131f1576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff6801000000000000000082048116600081815260726020526040812054838516949293700100000000000000000000000000000000909304909216919082905b868110156136535760008c8c8381811061325957613259615cec565b905060200281019061326b9190615e20565b61327490615e54565b905060008961328c5781518051602090910120613292565b81602001515b608083015190915067ffffffffffffffff16156133fc57856132b381615a75565b9650506000818360400151846080015160405160200161330b93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a16600090815260719093529120549091508114613394576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff80881660009081526071602052604081205560808401516060850151908216911610156133f6576040517f7f7ab87200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50613539565b6040820151158015906134c3575060408281015190517f257b363200000000000000000000000000000000000000000000000000000000815260048101919091527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063257b3632906024016020604051808303816000875af115801561349d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c19190615a9c565b155b156134fa576040517f73bd668d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151516201d4c01015613539576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8767ffffffffffffffff16826060015167ffffffffffffffff16108061356c575042826060015167ffffffffffffffff16115b156135a3576040517fea82791600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040828101516060808501518351602081018a90529384018590528382019290925260c09190911b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528d901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209450816060015197505050808061364b90615de8565b91505061323d565b508615613701576040517fc7a823e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c7a823e0906136d09085908c908c90600401615eeb565b60006040518083038186803b1580156136e857600080fd5b505afa1580156136fc573d6000803e3d6000fd5b505050505b61370b8685615a15565b60735490945067ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169084161115613774576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006137808285615a54565b6137949067ffffffffffffffff1688615dd5565b604080516060810182528581524267ffffffffffffffff908116602080840191825260738054680100000000000000009081900485168688019081528d861660008181526072909552979093209551865592516001909501805492519585167fffffffffffffffffffffffffffffffff000000000000000000000000000000009384161795851684029590951790945583548c841691161793029290921790559091508281169085161461388a57607380547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8716021790555b6138dc33308360705461389d9190615a3d565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016929190614ec8565b6138e4614b68565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561394c57600080fd5b505af1158015613960573d6000803e3d6000fd5b505060405167ffffffffffffffff881692507f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce9150600090a2505050505050505050505050565b607b547c0100000000000000000000000000000000000000000000000000000000900460ff1615613a04576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1615613a41576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613a4b611796565b905081811115613a87576040517f4732fdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388831115613ac3576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b0573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084614ec8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b969190615a9c565b60738054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613bd083615a75565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508484604051613c07929190615f0e565b60408051918290038220602083015281018290527fffffffffffffffff0000000000000000000000000000000000000000000000004260c01b166060820152606801604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206073547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526071909352912055323303613d3757607354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613d96565b607360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338888604051613d8d9493929190615f1e565b60405180910390a25b5050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff163314613dee576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610cb8565b613e77614c19565b73ffffffffffffffffffffffffffffffffffffffff8116613f1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016125df565b61150281614c9a565b607a5473ffffffffffffffffffffffffffffffffffffffff163314613f74576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff16607055565b600080613f8861243b565b905067ffffffffffffffff8816156140585760795467ffffffffffffffff9081169089161115613fe4576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8089166000908152607860205260409020600281015481549094509091898116680100000000000000009092041614614052576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506140f9565b67ffffffffffffffff87166000908152607560205260409020549150816140ab576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168767ffffffffffffffff1611156140f9576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168667ffffffffffffffff1611614146576040517fb9b18f5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141558888888689610cc3565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161418a9190615f54565b602060405180830381855afa1580156141a7573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906141ca9190615a9c565b6141d49190615f66565b6040805160208101825282815290517f9121da8a00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691639121da8a9161425691899190600401615f7a565b602060405180830381865afa158015614273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142979190615fb5565b6142cd576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6070546000036142e0575050505061434d565b614348336142ee858b615a54565b67ffffffffffffffff16614300611e61565b61430a9190615a3d565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190614faa565b505050505b505050505050565b600067ffffffffffffffff8816156144235760795467ffffffffffffffff90811690891611156143b1576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5067ffffffffffffffff808816600090815260786020526040902060028101548154909288811668010000000000000000909204161461441d576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506144bf565b5067ffffffffffffffff851660009081526075602052604090205480614475576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60745467ffffffffffffffff90811690871611156144bf576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60795467ffffffffffffffff90811690881611806144f157508767ffffffffffffffff168767ffffffffffffffff1611155b80614518575060795467ffffffffffffffff68010000000000000000909104811690881611155b1561454f576040517fbfa7079f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8781166000908152607860205260409020546801000000000000000090048116908616146145b2576040517f32a2a77f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006145c18787878588610cc3565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516145f69190615f54565b602060405180830381855afa158015614613573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146369190615a9c565b6146409190615f66565b6040805160208101825282815290517f9121da8a00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691639121da8a916146c291889190600401615f7a565b602060405180830381865afa1580156146df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147039190615fb5565b614739576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8916600090815260786020526040902060020154859003614348576040517fa47276bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60795467ffffffffffffffff6801000000000000000090910481169082161115806147c9575060795467ffffffffffffffff908116908216115b15614800576040517fd086b70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff818116600081815260786020908152604080832080546074805468010000000000000000928390049098167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090981688179055600282015487865260759094529382902092909255607980547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff169390940292909217909255600182015490517f33d6247d00000000000000000000000000000000000000000000000000000000815260048101919091529091907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b15801561493257600080fd5b505af1158015614946573d6000803e3d6000fd5b505050508267ffffffffffffffff168167ffffffffffffffff167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161499591815260200190565b60405180910390a3505050565b60006149ac61243b565b9050816000806149bc8484615a54565b606f5467ffffffffffffffff91821692506000916149e09161010090041642615dd5565b90505b8467ffffffffffffffff168467ffffffffffffffff1614614a6b5767ffffffffffffffff80851660009081526072602052604090206001810154909116821015614a4957600181015468010000000000000000900467ffffffffffffffff169450614a65565b614a538686615a54565b67ffffffffffffffff16935050614a6b565b506149e3565b6000614a778484615dd5565b905083811015614ace57808403600c8111614a925780614a95565b600c5b9050806103e80a81606f60099054906101000a900461ffff1661ffff160a6070540281614ac457614ac4615ab5565b0460705550614b3e565b838103600c8111614adf5780614ae2565b600c5b90506000816103e80a82606f60099054906101000a900461ffff1661ffff160a670de0b6b3a76400000281614b1957614b19615ab5565b04905080607054670de0b6b3a76400000281614b3757614b37615ab5565b0460705550505b683635c9adc5dea000006070541115614b6357683635c9adc5dea00000607055612062565b612062565b60795467ffffffffffffffff680100000000000000008204811691161115611c2357607954600090614bb19068010000000000000000900467ffffffffffffffff166001615a15565b9050614bbc81611278565b1561150257607954600090600290614bdf90849067ffffffffffffffff16615a54565b614be99190615fd7565b614bf39083615a15565b9050614bfe81611278565b15614c1057614c0c8161478f565b5050565b614c0c8261478f565b60335473ffffffffffffffffffffffffffffffffffffffff163314611c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016125df565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614d7957600080fd5b505af1158015614d8d573d6000803e3d6000fd5b50505050611c23615005565b600054610100900460ff16614e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016125df565b611c2333614c9a565b606f5460ff16614e75576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052614fa49085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152615098565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526150009084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401614f22565b505050565b606f5460ff1615615042576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006150fa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166151a49092919063ffffffff16565b80519091501561500057808060200190518101906151189190615fb5565b615000576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016125df565b60606151b384846000856151bb565b949350505050565b60608247101561524d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016125df565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516152769190615f54565b60006040518083038185875af1925050503d80600081146152b3576040519150601f19603f3d011682016040523d82523d6000602084013e6152b8565b606091505b50915091506152c9878383876152d4565b979650505050505050565b6060831561536a5782516000036153635773ffffffffffffffffffffffffffffffffffffffff85163b615363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016125df565b50816151b3565b6151b3838381511561537f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df9190615421565b60005b838110156153ce5781810151838201526020016153b6565b50506000910152565b600081518084526153ef8160208601602086016153b3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061543460208301846153d7565b9392505050565b60006020828403121561544d57600080fd5b813561ffff8116811461543457600080fd5b803567ffffffffffffffff8116811461243657600080fd5b600080600080600060a0868803121561548f57600080fd5b6154988661545f565b94506154a66020870161545f565b94979496505050506040830135926060810135926080909101359150565b8061030081018310156154d657600080fd5b92915050565b6000806000806000806103a087890312156154f657600080fd5b6154ff8761545f565b955061550d6020880161545f565b945061551b6040880161545f565b935060608701359250608087013591506155388860a089016154c4565b90509295509295509295565b60008060008060008060006103c0888a03121561556057600080fd5b6155698861545f565b96506155776020890161545f565b95506155856040890161545f565b94506155936060890161545f565b93506080880135925060a088013591506155b08960c08a016154c4565b905092959891949750929550565b6000602082840312156155d057600080fd5b6154348261545f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461243657600080fd5b60006020828403121561560f57600080fd5b615434826155d9565b60006020828403121561562a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261567157600080fd5b813567ffffffffffffffff8082111561568c5761568c615631565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156156d2576156d2615631565b816040528381528660208588010111156156eb57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561571d57600080fd5b813567ffffffffffffffff81111561573457600080fd5b6151b384828501615660565b60008083601f84011261575257600080fd5b50813567ffffffffffffffff81111561576a57600080fd5b60208301915083602082850101111561578257600080fd5b9250929050565b6000806000806000808688036101208112156157a457600080fd5b60a08112156157b257600080fd5b5086955060a0870135945060c087013567ffffffffffffffff808211156157d857600080fd5b6157e48a838b01615660565b955060e08901359150808211156157fa57600080fd5b6158068a838b01615660565b945061010089013591508082111561581d57600080fd5b5061582a89828a01615740565b979a9699509497509295939492505050565b60008083601f84011261584e57600080fd5b50813567ffffffffffffffff81111561586657600080fd5b6020830191508360208260051b850101111561578257600080fd5b6000806020838503121561589457600080fd5b823567ffffffffffffffff8111156158ab57600080fd5b6158b78582860161583c565b90969095509350505050565b6000806000806000606086880312156158db57600080fd5b853567ffffffffffffffff808211156158f357600080fd5b6158ff89838a0161583c565b9097509550859150615913602089016155d9565b9450604088013591508082111561592957600080fd5b5061593688828901615740565b969995985093965092949392505050565b60008060006040848603121561595c57600080fd5b833567ffffffffffffffff81111561597357600080fd5b61597f86828701615740565b909790965060209590950135949350505050565b600181811c908216806159a757607f821691505b6020821081036159e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff818116838216019080821115615a3657615a366159e6565b5092915050565b80820281158282048414176154d6576154d66159e6565b67ffffffffffffffff828116828216039080821115615a3657615a366159e6565b600067ffffffffffffffff808316818103615a9257615a926159e6565b6001019392505050565b600060208284031215615aae57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615af357615af3615ab5565b500490565b601f82111561500057600081815260208120601f850160051c81016020861015615b1f5750805b601f850160051c820191505b8181101561434d57828155600101615b2b565b815167ffffffffffffffff811115615b5857615b58615631565b615b6c81615b668454615993565b84615af8565b602080601f831160018114615bbf5760008415615b895750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561434d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015615c0c57888601518255948401946001909101908401615bed565b5085821015615c4857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600067ffffffffffffffff808716835280861660208401525060606040830152615ccf606083018486615c58565b9695505050505050565b808201808211156154d6576154d66159e6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112615d4f57600080fd5b9190910192915050565b600060608236031215615d6b57600080fd5b6040516060810167ffffffffffffffff8282108183111715615d8f57615d8f615631565b816040528435915080821115615da457600080fd5b50615db136828601615660565b82525060208301356020820152615dca6040840161545f565b604082015292915050565b818103818111156154d6576154d66159e6565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e1957615e196159e6565b5060010190565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112615d4f57600080fd5b600060a08236031215615e6657600080fd5b60405160a0810167ffffffffffffffff8282108183111715615e8a57615e8a615631565b816040528435915080821115615e9f57600080fd5b50615eac36828601615660565b8252506020830135602082015260408301356040820152615ecf6060840161545f565b6060820152615ee06080840161545f565b608082015292915050565b838152604060208201526000615f05604083018486615c58565b95945050505050565b8183823760009101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152606060408201526000615ccf606083018486615c58565b60008251615d4f8184602087016153b3565b600082615f7557615f75615ab5565b500690565b61032081016103008085843782018360005b6001811015615fab578151835260209283019290910190600101615f8c565b5050509392505050565b600060208284031215615fc757600080fd5b8151801515811461543457600080fd5b600067ffffffffffffffff80841680615ff257615ff2615ab5565b9216919091049291505056fea2646970667358221220931e3517df23b5e33f6f7298913c38b05b3748f81cc1a6936747c17f7149f97464736f6c63430008140033 \ No newline at end of file +6101606040523480156200001257600080fd5b5060405162006224380380620062248339810160408190526200003591620000ac565b6001600160a01b0396871660c05294861660805292851660a05290841660e052909216610100526001600160401b039182166101205216610140526200014f565b6001600160a01b03811681146200008c57600080fd5b50565b80516001600160401b0381168114620000a757600080fd5b919050565b600080600080600080600060e0888a031215620000c857600080fd5b8751620000d58162000076565b6020890151909750620000e88162000076565b6040890151909650620000fb8162000076565b60608901519095506200010e8162000076565b6080890151909450620001218162000076565b92506200013160a089016200008f565b91506200014160c089016200008f565b905092959891949750929550565b60805160a05160c05160e051610100516101205161014051615ff56200022f600039600081816106c001528181610e3c01526129bd01526000818161082d0152610e120152600081816105cb01526136580152600081816107f301528181613056015281816138a70152614cd401526000818161099901528181610faf01528181611180015281816119b80152818161343f01528181613aca015261489a015260008181610a46015281816141e1015261464d0152600081816108e901528181611ea90152818161387501528181613a9e01526142e20152615ff56000f3fe608060405234801561001057600080fd5b50600436106103d05760003560e01c80638c3d7301116101ff578063cfa8ed471161011a578063e91cbddf116100ad578063f2fde38b1161007c578063f2fde38b14610ace578063f4d0841214610ae1578063f851a44014610af4578063f8b823e414610b1457600080fd5b8063e91cbddf14610a68578063eaeb077b14610a7b578063ed6b010414610a8e578063f14916d614610abb57600080fd5b8063d939b315116100e9578063d939b315146109e1578063dbc1697614610a09578063e7a7ed0214610a11578063e8bf92ed14610a4157600080fd5b8063cfa8ed4714610965578063d02103ca14610994578063d2e129f9146109bb578063d8d1091b146109ce57600080fd5b8063adc879e911610192578063ba58ae3911610161578063ba58ae391461090b578063c0ed84e01461091e578063c754c7ed14610926578063c89e42df1461095257600080fd5b8063adc879e914610828578063afd23cbe1461084f578063b4d63f581461087d578063b6b0b097146108e457600080fd5b80639c9f3dfe116101ce5780639c9f3dfe146107c8578063a066215c146107db578063a3c573eb146107ee578063ada8f9191461081557600080fd5b80638c3d7301146107875780638da5cb5b1461078f57806399f5634e146107ad5780639aa972a3146107b557600080fd5b80634a910e6a116102ef5780636b8616ce116102825780637fcb3653116102515780637fcb3653146106a7578063831c7ead146106bb578063837a4738146106e2578063841b24d71461075757600080fd5b80636b8616ce146106595780636ff512cc14610679578063715018a61461068c5780637215541a1461069457600080fd5b8063542028d5116102be578063542028d51461062e5780635ec9195814610636578063604691691461063e578063621dd4111461064657600080fd5b80634a910e6a146105b35780634df61d24146105c65780634e487706146105ed5780635392c5e01461060057600080fd5b80632b0006fa11610367578063423fa85611610336578063423fa856146105375780634560526714610557578063458c04771461057f5780634a1a89a71461059357600080fd5b80632b0006fa146104eb5780632c1f816a146104fe578063383b3be814610511578063394218e91461052457600080fd5b806319d8ac61116103a357806319d8ac6114610453578063220d789914610467578063267822471461047a57806329878983146104bf57600080fd5b80630a0d9fbe146103d5578063107bf28c1461040c57806315064c96146104215780631816b7e51461043e575b600080fd5b606f546103ee90610100900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b610414610b1d565b60405161040391906153e2565b606f5461042e9060ff1681565b6040519015158152602001610403565b61045161044c3660046153fc565b610bab565b005b6073546103ee9067ffffffffffffffff1681565b610414610475366004615438565b610cc3565b607b5461049a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610403565b60745461049a9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104516104f936600461549d565b610e9a565b61045161050c366004615505565b61106a565b61042e61051f36600461557f565b611278565b61045161053236600461557f565b6112ce565b6073546103ee9068010000000000000000900467ffffffffffffffff1681565b6073546103ee90700100000000000000000000000000000000900467ffffffffffffffff1681565b6079546103ee9067ffffffffffffffff1681565b6079546103ee9068010000000000000000900467ffffffffffffffff1681565b6104516105c136600461557f565b611452565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b6104516105fb36600461557f565b611505565b61062061060e36600461557f565b60756020526000908152604090205481565b604051908152602001610403565b610414611689565b610451611696565b610620611796565b61045161065436600461549d565b6117ac565b61062061066736600461557f565b60716020526000908152604090205481565b6104516106873660046155be565b611b3c565b610451611c11565b6104516106a236600461557f565b611c25565b6074546103ee9067ffffffffffffffff1681565b6103ee7f000000000000000000000000000000000000000000000000000000000000000081565b61072b6106f03660046155d9565b60786020526000908152604090208054600182015460029092015467ffffffffffffffff808316936801000000000000000090930416919084565b6040805167ffffffffffffffff9586168152949093166020850152918301526060820152608001610403565b6079546103ee907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b610451611d95565b60335473ffffffffffffffffffffffffffffffffffffffff1661049a565b610620611e61565b6104516107c3366004615505565b611fba565b6104516107d636600461557f565b61206b565b6104516107e936600461557f565b6121e7565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b6104516108233660046155be565b6122ed565b6103ee7f000000000000000000000000000000000000000000000000000000000000000081565b606f5461086a906901000000000000000000900461ffff1681565b60405161ffff9091168152602001610403565b6108be61088b36600461557f565b6072602052600090815260409020805460019091015467ffffffffffffffff808216916801000000000000000090041683565b6040805193845267ffffffffffffffff9283166020850152911690820152606001610403565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b61042e6109193660046155d9565b6123b1565b6103ee61243b565b607b546103ee9074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b6104516109603660046156cc565b612490565b606f5461049a906b010000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b6104516109c936600461574a565b61251d565b6104516109dc366004615842565b612a61565b6079546103ee90700100000000000000000000000000000000900467ffffffffffffffff1681565b610451613003565b6073546103ee907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b610451610a76366004615884565b6130dc565b610451610a89366004615908565b613968565b607b5461042e907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610451610ac93660046155be565b613d5e565b610451610adc3660046155be565b613e30565b610451610aef3660046153fc565b613ee4565b607a5461049a9073ffffffffffffffffffffffffffffffffffffffff1681565b61062060705481565b60778054610b2a90615954565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5690615954565b8015610ba35780601f10610b7857610100808354040283529160200191610ba3565b820191906000526020600020905b815481529060010190602001808311610b8657829003601f168201915b505050505081565b607a5473ffffffffffffffffffffffffffffffffffffffff163314610bfc576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88161ffff161080610c1557506103ff8161ffff16115b15610c4c576040517f4c2533c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff16690100000000000000000061ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b67ffffffffffffffff8086166000818152607260205260408082205493881682529020546060929115801590610cf7575081155b15610d2e576040517f6818c29e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80610d65576040517f66385b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d6e846123b1565b610da4576040517f176b913c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b166020820152603481019690965260548601929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c098891b811660748701527f0000000000000000000000000000000000000000000000000000000000000000891b8116607c8701527f0000000000000000000000000000000000000000000000000000000000000000891b81166084870152608c86019490945260ac85015260cc840194909452509290931b90911660ec830152805180830360d401815260f4909201905290565b60745468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610ef7576040517fbbcbbc0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f05868686868686613f3e565b607480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86811691821790925560009081526075602052604090208390556079541615610f8057607980547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690555b6040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b15801561100857600080fd5b505af115801561101c573d6000803e3d6000fd5b505060405184815233925067ffffffffffffffff871691507fcb339b570a7f0b25afa7333371ff11192092a0aeace12b671f4c212f2815c6fe906020015b60405180910390a3505050505050565b60745468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146110c7576040517fbbcbbc0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110d687878787878787614316565b607480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8681169182179092556000908152607560205260409020839055607954161561115157607980547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690555b6040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156111d957600080fd5b505af11580156111ed573d6000803e3d6000fd5b50506079805477ffffffffffffffffffffffffffffffffffffffffffffffff167a093a800000000000000000000000000000000000000000000000001790555050604051828152339067ffffffffffffffff8616907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a350505050505050565b60795467ffffffffffffffff828116600090815260786020526040812054909242926112bc92700100000000000000000000000000000000909204811691166159d6565b67ffffffffffffffff16111592915050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331461131f576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115611366576040517f1d06e87900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff166113d55760795467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908216106113d5576040517f401636df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6079805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610cb8565b60745468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114f957606f5460ff16156114ba576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c381611278565b6114f9576040517f0ce9e4a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61150281614750565b50565b607a5473ffffffffffffffffffffffffffffffffffffffff163314611556576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff8216111561159d576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1661160857607b5467ffffffffffffffff74010000000000000000000000000000000000000000909104811690821610611608576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b80547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b90602001610cb8565b60768054610b2a90615954565b607a5473ffffffffffffffffffffffffffffffffffffffff1633146116e7576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b547c0100000000000000000000000000000000000000000000000000000000900460ff16611743576040517ff6ba91a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b80547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690556040517f854dd6ce5a1445c4c54388b21cffd11cf5bba1b9e763aec48ce3da75d617412f90600090a1565b600060705460646117a791906159fe565b905090565b606f5460ff16156117e9576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60795467ffffffffffffffff8581166000908152607260205260409020600101544292611836927801000000000000000000000000000000000000000000000000909104811691166159d6565b67ffffffffffffffff161115611878576040517f8a0704d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86118858686615a15565b67ffffffffffffffff1611156118c7576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118d5868686868686613f3e565b607054156118e6576118e684614963565b607954700100000000000000000000000000000000900467ffffffffffffffff16600003611a2e57607480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8681169182179092556000908152607560205260409020839055607954161561198957607980547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690555b6040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611a1157600080fd5b505af1158015611a25573d6000803e3d6000fd5b50505050611afe565b611a36614b29565b6079805467ffffffffffffffff16906000611a5083615a36565b825467ffffffffffffffff9182166101009390930a92830292820219169190911790915560408051608081018252428316815287831660208083019182528284018981526060840189815260795487166000908152607890935294909120925183549251861668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009093169516949094171781559151600183015551600290910155505b604051828152339067ffffffffffffffff8616907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200161105a565b607a5473ffffffffffffffffffffffffffffffffffffffff163314611b8d576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fff0000000000000000000000000000000000000000ffffffffffffffffffffff166b01000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610cb8565b611c19614bda565b611c236000614c5b565b565b60335473ffffffffffffffffffffffffffffffffffffffff163314611d8d576000611c4e61243b565b90508067ffffffffffffffff168267ffffffffffffffff1611611c9d576040517f812a372d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff6801000000000000000090910481169083161180611ce3575067ffffffffffffffff80831660009081526072602052604090206001015416155b15611d1a576040517f98c5c01400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8083166000908152607260205260409020600101544291611d499162093a8091166159d6565b67ffffffffffffffff161115611d8b576040517fd257555a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b611502614cd2565b607b5473ffffffffffffffffffffffffffffffffffffffff163314611de6576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b54607a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f149190615a5d565b90506000611f2061243b565b60735467ffffffffffffffff680100000000000000008204811691611f789170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416615a15565b611f8291906159d6565b611f8c9190615a15565b67ffffffffffffffff16905080600003611fa95760009250505090565b611fb38183615aa5565b9250505090565b606f5460ff1615611ff7576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61200687878787878787614316565b67ffffffffffffffff84166000908152607560209081526040918290205482519081529081018490527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612062614cd2565b50505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff1633146120bc576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115612103576040517fcc96507000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1661216a5760795467ffffffffffffffff70010000000000000000000000000000000090910481169082161061216a576040517f48a05a9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607980547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610cb8565b607a5473ffffffffffffffffffffffffffffffffffffffff163314612238576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620151808167ffffffffffffffff16111561227f576040517fe067dfe800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff1661010067ffffffffffffffff8416908102919091179091556040519081527f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c2890602001610cb8565b607a5473ffffffffffffffffffffffffffffffffffffffff16331461233e576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610cb8565b600067ffffffff0000000167ffffffffffffffff83161080156123e9575067ffffffff00000001604083901c67ffffffffffffffff16105b801561240a575067ffffffff00000001608083901c67ffffffffffffffff16105b8015612421575067ffffffff0000000160c083901c105b1561242e57506001919050565b506000919050565b919050565b60795460009067ffffffffffffffff161561247f575060795467ffffffffffffffff9081166000908152607860205260409020546801000000000000000090041690565b5060745467ffffffffffffffff1690565b607a5473ffffffffffffffffffffffffffffffffffffffff1633146124e1576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60766124ed8282615aff565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610cb891906153e2565b600054610100900460ff161580801561253d5750600054600160ff909116105b806125575750303b158015612557575060005460ff166001145b6125e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561264657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61265360208801886155be565b607a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556126a860408801602089016155be565b606f805473ffffffffffffffffffffffffffffffffffffffff929092166b010000000000000000000000027fff0000000000000000000000000000000000000000ffffffffffffffffffffff90921691909117905561270d60808801606089016155be565b6074805473ffffffffffffffffffffffffffffffffffffffff9290921668010000000000000000027fffffffff0000000000000000000000000000000000000000ffffffffffffffff9092169190911790556000805260756020527ff9e3fbf150b7a0077118526f473c53cb4734f166167e2c6213e3567dd390b4ad86905560766127988682615aff565b5060776127a58582615aff565b5062093a806127ba6060890160408a0161557f565b67ffffffffffffffff1611156127fc576040517fcc96507000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61280c606088016040890161557f565b6079805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff90921691909117905562093a8061286e60a0890160808a0161557f565b67ffffffffffffffff1611156128b0576040517f1d06e87900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c060a088016080890161557f565b6079805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff93909316929092029190911790556000607055606f80547fffffffffffffffffffffffffffffffffffffffffff00000000000000000000ff166a03ea000000000000070800179055607b80547fffffff000000000000000000ffffffffffffffffffffffffffffffffffffffff167c0100000000000697800000000000000000000000000000000000000000179055612998614d5a565b7fed7be53c9f1a96a481223b15568a5b1a475e01a74b347d6ca187c8bf0c078cd660007f000000000000000000000000000000000000000000000000000000000000000085856040516129ee9493929190615c62565b60405180910390a1801561206257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b607b547c0100000000000000000000000000000000000000000000000000000000900460ff1615612abe576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1615612afb576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000819003612b37576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612b73576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612bbe918491700100000000000000000000000000000000900416615c9a565b1115612bf6576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff680100000000000000008204811660008181526072602052604081205491937001000000000000000000000000000000009004909216915b84811015612ea0576000878783818110612c5657612c56615cad565b9050602002810190612c689190615cdc565b612c7190615d1a565b905083612c7d81615a36565b82518051602091820120818501516040808701519051949950919450600093612cdf9386939101928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8916600090815260719093529120549091508114612d68576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8616600090815260716020526040812055612d8d600189615d96565b8403612dfc5742607b60149054906101000a900467ffffffffffffffff168460400151612dba91906159d6565b67ffffffffffffffff161115612dfc576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020838101516040805192830188905282018490526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012094505050508080612e9890615da9565b915050612c3a565b50612eab84846159d6565b6073805467ffffffffffffffff4281167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009092168217808455604080516060810182528781526020808201958652680100000000000000009384900485168284019081528589166000818152607290935284832093518455965160019390930180549151871686027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921693871693909317179091558554938916700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff938602939093167fffffffffffffffff00000000000000000000000000000000ffffffffffffffff90941693909317919091179093559151929550917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a2505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff163314613054576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156130bc57600080fd5b505af11580156130d0573d6000803e3d6000fd5b50505050611c23614dfa565b606f5460ff1615613119576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f546b010000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314613179576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360008190036131b5576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156131f1576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff6801000000000000000082048116600081815260726020526040812054838516949293700100000000000000000000000000000000909304909216919082905b868110156136145760008c8c8381811061325957613259615cad565b905060200281019061326b9190615de1565b61327490615e15565b905060008961328c5781518051602090910120613292565b81602001515b608083015190915067ffffffffffffffff16156133fc57856132b381615a36565b9650506000818360400151846080015160405160200161330b93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a16600090815260719093529120549091508114613394576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff80881660009081526071602052604081205560808401516060850151908216911610156133f6576040517f7f7ab87200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506134fa565b6040820151158015906134c3575060408281015190517f257b363200000000000000000000000000000000000000000000000000000000815260048101919091527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063257b3632906024016020604051808303816000875af115801561349d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c19190615a5d565b155b156134fa576040517f73bd668d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8767ffffffffffffffff16826060015167ffffffffffffffff16108061352d575042826060015167ffffffffffffffff16115b15613564576040517fea82791600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040828101516060808501518351602081018a90529384018590528382019290925260c09190911b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528d901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209450816060015197505050808061360c90615da9565b91505061323d565b5086156136c2576040517fc7a823e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c7a823e0906136919085908c908c90600401615eac565b60006040518083038186803b1580156136a957600080fd5b505afa1580156136bd573d6000803e3d6000fd5b505050505b6136cc86856159d6565b60735490945067ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169084161115613735576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006137418285615a15565b6137559067ffffffffffffffff1688615d96565b604080516060810182528581524267ffffffffffffffff908116602080840191825260738054680100000000000000009081900485168688019081528d861660008181526072909552979093209551865592516001909501805492519585167fffffffffffffffffffffffffffffffff000000000000000000000000000000009384161795851684029590951790945583548c841691161793029290921790559091508281169085161461384b57607380547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8716021790555b61389d33308360705461385e91906159fe565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016929190614e89565b6138a5614b29565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561390d57600080fd5b505af1158015613921573d6000803e3d6000fd5b505060405167ffffffffffffffff881692507f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce9150600090a2505050505050505050505050565b607b547c0100000000000000000000000000000000000000000000000000000000900460ff16156139c5576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1615613a02576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613a0c611796565b905081811115613a48576040517f4732fdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388831115613a84576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613ac673ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084614e89565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b579190615a5d565b60738054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613b9183615a36565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508484604051613bc8929190615ecf565b60408051918290038220602083015281018290527fffffffffffffffff0000000000000000000000000000000000000000000000004260c01b166060820152606801604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206073547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526071909352912055323303613cf857607354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613d57565b607360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338888604051613d4e9493929190615edf565b60405180910390a25b5050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff163314613daf576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610cb8565b613e38614bda565b73ffffffffffffffffffffffffffffffffffffffff8116613edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016125df565b61150281614c5b565b607a5473ffffffffffffffffffffffffffffffffffffffff163314613f35576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff16607055565b600080613f4961243b565b905067ffffffffffffffff8816156140195760795467ffffffffffffffff9081169089161115613fa5576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8089166000908152607860205260409020600281015481549094509091898116680100000000000000009092041614614013576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506140ba565b67ffffffffffffffff871660009081526075602052604090205491508161406c576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168767ffffffffffffffff1611156140ba576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168667ffffffffffffffff1611614107576040517fb9b18f5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141168888888689610cc3565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161414b9190615f15565b602060405180830381855afa158015614168573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061418b9190615a5d565b6141959190615f27565b6040805160208101825282815290517f9121da8a00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691639121da8a9161421791899190600401615f3b565b602060405180830381865afa158015614234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142589190615f76565b61428e576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6070546000036142a1575050505061430e565b614309336142af858b615a15565b67ffffffffffffffff166142c1611e61565b6142cb91906159fe565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190614f6b565b505050505b505050505050565b600067ffffffffffffffff8816156143e45760795467ffffffffffffffff9081169089161115614372576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5067ffffffffffffffff80881660009081526078602052604090206002810154815490928881166801000000000000000090920416146143de576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614480565b5067ffffffffffffffff851660009081526075602052604090205480614436576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60745467ffffffffffffffff9081169087161115614480576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60795467ffffffffffffffff90811690881611806144b257508767ffffffffffffffff168767ffffffffffffffff1611155b806144d9575060795467ffffffffffffffff68010000000000000000909104811690881611155b15614510576040517fbfa7079f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff878116600090815260786020526040902054680100000000000000009004811690861614614573576040517f32a2a77f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006145828787878588610cc3565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516145b79190615f15565b602060405180830381855afa1580156145d4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906145f79190615a5d565b6146019190615f27565b6040805160208101825282815290517f9121da8a00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691639121da8a9161468391889190600401615f3b565b602060405180830381865afa1580156146a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146c49190615f76565b6146fa576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8916600090815260786020526040902060020154859003614309576040517fa47276bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60795467ffffffffffffffff68010000000000000000909104811690821611158061478a575060795467ffffffffffffffff908116908216115b156147c1576040517fd086b70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff818116600081815260786020908152604080832080546074805468010000000000000000928390049098167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090981688179055600282015487865260759094529382902092909255607980547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff169390940292909217909255600182015490517f33d6247d00000000000000000000000000000000000000000000000000000000815260048101919091529091907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156148f357600080fd5b505af1158015614907573d6000803e3d6000fd5b505050508267ffffffffffffffff168167ffffffffffffffff167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161495691815260200190565b60405180910390a3505050565b600061496d61243b565b90508160008061497d8484615a15565b606f5467ffffffffffffffff91821692506000916149a19161010090041642615d96565b90505b8467ffffffffffffffff168467ffffffffffffffff1614614a2c5767ffffffffffffffff80851660009081526072602052604090206001810154909116821015614a0a57600181015468010000000000000000900467ffffffffffffffff169450614a26565b614a148686615a15565b67ffffffffffffffff16935050614a2c565b506149a4565b6000614a388484615d96565b905083811015614a8f57808403600c8111614a535780614a56565b600c5b9050806103e80a81606f60099054906101000a900461ffff1661ffff160a6070540281614a8557614a85615a76565b0460705550614aff565b838103600c8111614aa05780614aa3565b600c5b90506000816103e80a82606f60099054906101000a900461ffff1661ffff160a670de0b6b3a76400000281614ada57614ada615a76565b04905080607054670de0b6b3a76400000281614af857614af8615a76565b0460705550505b683635c9adc5dea000006070541115614b2457683635c9adc5dea00000607055612062565b612062565b60795467ffffffffffffffff680100000000000000008204811691161115611c2357607954600090614b729068010000000000000000900467ffffffffffffffff1660016159d6565b9050614b7d81611278565b1561150257607954600090600290614ba090849067ffffffffffffffff16615a15565b614baa9190615f98565b614bb490836159d6565b9050614bbf81611278565b15614bd157614bcd81614750565b5050565b614bcd82614750565b60335473ffffffffffffffffffffffffffffffffffffffff163314611c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016125df565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614d3a57600080fd5b505af1158015614d4e573d6000803e3d6000fd5b50505050611c23614fc6565b600054610100900460ff16614df1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016125df565b611c2333614c5b565b606f5460ff16614e36576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052614f659085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152615059565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052614fc19084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401614ee3565b505050565b606f5460ff1615615003576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006150bb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166151659092919063ffffffff16565b805190915015614fc157808060200190518101906150d99190615f76565b614fc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016125df565b6060615174848460008561517c565b949350505050565b60608247101561520e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016125df565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516152379190615f15565b60006040518083038185875af1925050503d8060008114615274576040519150601f19603f3d011682016040523d82523d6000602084013e615279565b606091505b509150915061528a87838387615295565b979650505050505050565b6060831561532b5782516000036153245773ffffffffffffffffffffffffffffffffffffffff85163b615324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016125df565b5081615174565b61517483838151156153405781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df91906153e2565b60005b8381101561538f578181015183820152602001615377565b50506000910152565b600081518084526153b0816020860160208601615374565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006153f56020830184615398565b9392505050565b60006020828403121561540e57600080fd5b813561ffff811681146153f557600080fd5b803567ffffffffffffffff8116811461243657600080fd5b600080600080600060a0868803121561545057600080fd5b61545986615420565b945061546760208701615420565b94979496505050506040830135926060810135926080909101359150565b80610300810183101561549757600080fd5b92915050565b6000806000806000806103a087890312156154b757600080fd5b6154c087615420565b95506154ce60208801615420565b94506154dc60408801615420565b935060608701359250608087013591506154f98860a08901615485565b90509295509295509295565b60008060008060008060006103c0888a03121561552157600080fd5b61552a88615420565b965061553860208901615420565b955061554660408901615420565b945061555460608901615420565b93506080880135925060a088013591506155718960c08a01615485565b905092959891949750929550565b60006020828403121561559157600080fd5b6153f582615420565b803573ffffffffffffffffffffffffffffffffffffffff8116811461243657600080fd5b6000602082840312156155d057600080fd5b6153f58261559a565b6000602082840312156155eb57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261563257600080fd5b813567ffffffffffffffff8082111561564d5761564d6155f2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715615693576156936155f2565b816040528381528660208588010111156156ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156156de57600080fd5b813567ffffffffffffffff8111156156f557600080fd5b61517484828501615621565b60008083601f84011261571357600080fd5b50813567ffffffffffffffff81111561572b57600080fd5b60208301915083602082850101111561574357600080fd5b9250929050565b60008060008060008086880361012081121561576557600080fd5b60a081121561577357600080fd5b5086955060a0870135945060c087013567ffffffffffffffff8082111561579957600080fd5b6157a58a838b01615621565b955060e08901359150808211156157bb57600080fd5b6157c78a838b01615621565b94506101008901359150808211156157de57600080fd5b506157eb89828a01615701565b979a9699509497509295939492505050565b60008083601f84011261580f57600080fd5b50813567ffffffffffffffff81111561582757600080fd5b6020830191508360208260051b850101111561574357600080fd5b6000806020838503121561585557600080fd5b823567ffffffffffffffff81111561586c57600080fd5b615878858286016157fd565b90969095509350505050565b60008060008060006060868803121561589c57600080fd5b853567ffffffffffffffff808211156158b457600080fd5b6158c089838a016157fd565b90975095508591506158d46020890161559a565b945060408801359150808211156158ea57600080fd5b506158f788828901615701565b969995985093965092949392505050565b60008060006040848603121561591d57600080fd5b833567ffffffffffffffff81111561593457600080fd5b61594086828701615701565b909790965060209590950135949350505050565b600181811c9082168061596857607f821691505b6020821081036159a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156159f7576159f76159a7565b5092915050565b8082028115828204841417615497576154976159a7565b67ffffffffffffffff8281168282160390808211156159f7576159f76159a7565b600067ffffffffffffffff808316818103615a5357615a536159a7565b6001019392505050565b600060208284031215615a6f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615ab457615ab4615a76565b500490565b601f821115614fc157600081815260208120601f850160051c81016020861015615ae05750805b601f850160051c820191505b8181101561430e57828155600101615aec565b815167ffffffffffffffff811115615b1957615b196155f2565b615b2d81615b278454615954565b84615ab9565b602080601f831160018114615b805760008415615b4a5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561430e565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015615bcd57888601518255948401946001909101908401615bae565b5085821015615c0957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600067ffffffffffffffff808716835280861660208401525060606040830152615c90606083018486615c19565b9695505050505050565b80820180821115615497576154976159a7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112615d1057600080fd5b9190910192915050565b600060608236031215615d2c57600080fd5b6040516060810167ffffffffffffffff8282108183111715615d5057615d506155f2565b816040528435915080821115615d6557600080fd5b50615d7236828601615621565b82525060208301356020820152615d8b60408401615420565b604082015292915050565b81810381811115615497576154976159a7565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615dda57615dda6159a7565b5060010190565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112615d1057600080fd5b600060a08236031215615e2757600080fd5b60405160a0810167ffffffffffffffff8282108183111715615e4b57615e4b6155f2565b816040528435915080821115615e6057600080fd5b50615e6d36828601615621565b8252506020830135602082015260408301356040820152615e9060608401615420565b6060820152615ea160808401615420565b608082015292915050565b838152604060208201526000615ec6604083018486615c19565b95945050505050565b8183823760009101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152606060408201526000615c90606083018486615c19565b60008251615d10818460208701615374565b600082615f3657615f36615a76565b500690565b61032081016103008085843782018360005b6001811015615f6c578151835260209283019290910190600101615f4d565b5050509392505050565b600060208284031215615f8857600080fd5b815180151581146153f557600080fd5b600067ffffffffffffffff80841680615fb357615fb3615a76565b9216919091049291505056fea264697066735822122080a09e5d0db198218c3c3c7908f03387176f6d2c1846c961aeb42b80b5a41e4864736f6c63430008140033 \ No newline at end of file diff --git a/etherman/smartcontracts/bin/polygonzkevmbridge.bin b/etherman/smartcontracts/bin/polygonzkevmbridge.bin index 37426f4934..c3e0c038ac 100644 --- a/etherman/smartcontracts/bin/polygonzkevmbridge.bin +++ b/etherman/smartcontracts/bin/polygonzkevmbridge.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b50615c83806100206000396000f3fe6080604052600436106200019f5760003560e01c8063647c576c11620000e7578063be5831c71162000089578063dbc169761162000060578063dbc169761462000639578063ee25560b1462000651578063fb570834146200068257600080fd5b8063be5831c714620005ae578063cd58657914620005ea578063d02103ca146200060157600080fd5b80639e34070f11620000be5780639e34070f146200050a578063aaa13cc2146200054f578063bab161bf146200057457600080fd5b8063647c576c146200048657806379e2cf9714620004ab57806381b1c17414620004c357600080fd5b80632d2c9d94116200015157806334ac9cf2116200012857806334ac9cf2146200034b5780633ae05047146200037a5780633e197043146200039257600080fd5b80632d2c9d9414620002765780632dfdf0b5146200029b578063318aee3d14620002c257600080fd5b806322e95f2c116200018657806322e95f2c14620001ef578063240ff378146200023a5780632cffd02e146200025157600080fd5b806315064c9614620001a45780632072f6c514620001d5575b600080fd5b348015620001b157600080fd5b50606854620001c09060ff1681565b60405190151581526020015b60405180910390f35b348015620001e257600080fd5b50620001ed620006a7565b005b348015620001fc57600080fd5b50620002146200020e366004620032db565b62000705565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001cc565b620001ed6200024b36600462003372565b620007a8565b3480156200025e57600080fd5b50620001ed6200027036600462003409565b620009d0565b3480156200028357600080fd5b50620001ed6200029536600462003409565b62000f74565b348015620002a857600080fd5b50620002b360535481565b604051908152602001620001cc565b348015620002cf57600080fd5b5062000319620002e1366004620034ef565b606b6020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001cc565b3480156200035857600080fd5b50606c54620002149073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200038757600080fd5b50620002b362001178565b3480156200039f57600080fd5b50620002b3620003b136600462003526565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200049357600080fd5b50620001ed620004a5366004620035b0565b6200125e565b348015620004b857600080fd5b50620001ed620014ad565b348015620004d057600080fd5b5062000214620004e236600462003600565b606a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200051757600080fd5b50620001c06200052936600462003600565b600881901c600090815260696020526040902054600160ff9092169190911b9081161490565b3480156200055c57600080fd5b50620002146200056e3660046200361a565b620014e7565b3480156200058157600080fd5b506068546200059890610100900463ffffffff1681565b60405163ffffffff9091168152602001620001cc565b348015620005bb57600080fd5b506068546200059890790100000000000000000000000000000000000000000000000000900463ffffffff1681565b620001ed620005fb366004620036ce565b620016d3565b3480156200060e57600080fd5b50606854620002149065010000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200064657600080fd5b50620001ed62001c37565b3480156200065e57600080fd5b50620002b36200067036600462003600565b60696020526000908152604090205481565b3480156200068f57600080fd5b50620001c0620006a136600462003770565b62001c93565b606c5473ffffffffffffffffffffffffffffffffffffffff163314620006f9576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200070362001d7c565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602483015282516018818403018152603890920183528151918101919091206000908152606a909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b60685460ff1615620007e6576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff8681166101009092041614806200080c5750600263ffffffff861610155b1562000844576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001606860019054906101000a900463ffffffff163388883488886053546040516200089a9998979695949392919062003806565b60405180910390a1620009b8620009b26001606860019054906101000a900463ffffffff16338989348989604051620008d592919062003881565b60405180910390206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b62001e10565b8215620009c957620009c962001f27565b5050505050565b60685460ff161562000a0e576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000a258b8b8b8b8b8b8b8b8b8b8b600062001ffc565b73ffffffffffffffffffffffffffffffffffffffff861662000b01576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162000a7a9190620038e6565b60006040518083038185875af1925050503d806000811462000ab9576040519150601f19603f3d011682016040523d82523d6000602084013e62000abe565b606091505b505090508062000afa576040517f6747a28800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062000efc565b60685463ffffffff61010090910481169088160362000b435762000b3d73ffffffffffffffffffffffffffffffffffffffff87168585620021ed565b62000efc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152606a90935291205490915073ffffffffffffffffffffffffffffffffffffffff168062000e6e576000808062000c1886880188620039fb565b92509250925060008584848460405162000c329062003292565b62000c409392919062003abd565b8190604051809103906000f590508015801562000c61573d6000803e3d6000fd5b506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c9052919250908216906340c10f1990604401600060405180830381600087803b15801562000cd757600080fd5b505af115801562000cec573d6000803e3d6000fd5b5050505080606a600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a398d8d838b8b60405162000e5c95949392919062003afa565b60405180910390a15050505062000ef9565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f1990604401600060405180830381600087803b15801562000edf57600080fd5b505af115801562000ef4573d6000803e3d6000fd5b505050505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b60685460ff161562000fb2576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000fc98b8b8b8b8b8b8b8b8b8b8b600162001ffc565b60008473ffffffffffffffffffffffffffffffffffffffff1684888a868660405160240162000ffc949392919062003b42565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200107f9190620038e6565b60006040518083038185875af1925050503d8060008114620010be576040519150601f19603f3d011682016040523d82523d6000602084013e620010c3565b606091505b5050905080620010ff576040517f37e391c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b605354600090819081805b602081101562001255578083901c600116600103620011e65760338160208110620011b257620011b262003b8a565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062001213565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b604080516020810184905290810183905260600160405160208183030381529060405280519060200120915080806200124c9062003be8565b91505062001183565b50919392505050565b600054610100900460ff16158080156200127f5750600054600160ff909116105b806200129b5750303b1580156200129b575060005460ff166001145b6200132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200138c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606880547fffffffffffffff000000000000000000000000000000000000000000000000ff1661010063ffffffff8716027fffffffffffffff0000000000000000000000000000000000000000ffffffffff16176501000000000073ffffffffffffffffffffffffffffffffffffffff8681169190910291909117909155606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001691841691909117905562001443620022c3565b8015620014a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b605354606854790100000000000000000000000000000000000000000000000000900463ffffffff16101562000703576200070362001f27565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200157d9062003292565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f909101166040819052620015c8908d908d908d908d908d9060200162003c23565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262001606929160200162003c64565b604051602081830303815290604052805190602001206040516020016200168f94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101209a9950505050505050505050565b60685460ff161562001711576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200171b62002366565b60685463ffffffff888116610100909204161480620017415750600263ffffffff881610155b1562001779576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060608773ffffffffffffffffffffffffffffffffffffffff8816620017df57883414620017d5576040517fb89240f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000925062001ad9565b341562001818576040517f798ee6f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8089166000908152606b602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001908576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018b905273ffffffffffffffffffffffffffffffffffffffff8a1690639dc29fac90604401600060405180830381600087803b158015620018db57600080fd5b505af1158015620018f0573d6000803e3d6000fd5b50505050806020015194508060000151935062001ad7565b85156200191d576200191d898b8989620023db565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa1580156200198b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019b1919062003c97565b9050620019d773ffffffffffffffffffffffffffffffffffffffff8b1633308e620028f9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8c16906370a0823190602401602060405180830381865afa15801562001a45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a6b919062003c97565b905062001a79828262003cb1565b6068548c9850610100900463ffffffff169650935062001a998762002959565b62001aa48c62002a71565b62001aaf8d62002b7e565b60405160200162001ac39392919062003abd565b604051602081830303815290604052945050505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600084868e8e868860535460405162001b1b98979695949392919062003cc7565b60405180910390a162001c0f620009b2600085878f8f8789805190602001206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b861562001c205762001c2062001f27565b5050505062001c2e60018055565b50505050505050565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462001c89576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200070362002c80565b600084815b602081101562001d6e57600163ffffffff8616821c8116900362001d0a5785816020811062001ccb5762001ccb62003b8a565b60200201358260405160200162001cec929190918252602082015260400190565b60405160208183030381529060405280519060200120915062001d59565b8186826020811062001d205762001d2062003b8a565b602002013560405160200162001d40929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b8062001d658162003be8565b91505062001c98565b50821490505b949350505050565b60685460ff161562001dba576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b80600162001e216020600262003e79565b62001e2d919062003cb1565b6053541062001e68576040517fef5ccf6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060536000815462001e7b9062003be8565b9182905550905060005b602081101562001f17578082901c60011660010362001ebd57826033826020811062001eb55762001eb562003b8a565b015550505050565b6033816020811062001ed35762001ed362003b8a565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250808062001f0e9062003be8565b91505062001e85565b5062001f2262003e87565b505050565b6053546068805463ffffffff909216790100000000000000000000000000000000000000000000000000027fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179081905573ffffffffffffffffffffffffffffffffffffffff65010000000000909104166333d6247d62001fad62001178565b6040518263ffffffff1660e01b815260040162001fcc91815260200190565b600060405180830381600087803b15801562001fe757600080fd5b505af1158015620014a7573d6000803e3d6000fd5b6200200d8b63ffffffff1662002d10565b6068546040805160208082018e90528183018d9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915260009165010000000000900473ffffffffffffffffffffffffffffffffffffffff169063257b3632906084016020604051808303816000875af1158015620020b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020d6919062003c97565b90508060000362002112576040517e2f6fad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff88811661010090920416146200215c576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606854600090610100900463ffffffff166200217a5750896200217d565b508a5b620021a66200219d848c8c8c8c8c8c8c604051620008d592919062003881565b8f8f8462001c93565b620021dd576040517fe0417cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001f229084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002d75565b600054610100900460ff166200235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162001324565b6200070362002e88565b600260015403620023d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640162001324565b6002600155565b6000620023ec600482848662003eb6565b620023f79162003ee2565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620026765760008080808080806200245a896004818d62003eb6565b81019062002469919062003f2b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620024dd576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff861630146200252d576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8a851462002567576040517f03fffc4b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620026229190620038e6565b6000604051808303816000865af19150503d806000811462002661576040519150601f19603f3d011682016040523d82523d6000602084013e62002666565b606091505b50505050505050505050620009c9565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c0000000000000000000000000000000000000000000000000000000014620026f2576040517fe282c0ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808080808080806200270a8a6004818e62003eb6565b81019062002719919062003f86565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146200278f576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87163014620027df576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620028a39190620038e6565b6000604051808303816000865af19150503d8060008114620028e2576040519150601f19603f3d011682016040523d82523d6000602084013e620028e7565b606091505b50505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620014a79085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002240565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde03000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff861691620029dd9190620038e6565b600060405180830381855afa9150503d806000811462002a1a576040519150601f19603f3d011682016040523d82523d6000602084013e62002a1f565b606091505b50915091508162002a66576040518060400160405280600781526020017f4e4f5f4e414d450000000000000000000000000000000000000000000000000081525062001d74565b62001d748162002f21565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff86169162002af59190620038e6565b600060405180830381855afa9150503d806000811462002b32576040519150601f19603f3d011682016040523d82523d6000602084013e62002b37565b606091505b50915091508162002a66576040518060400160405280600981526020017f4e4f5f53594d424f4c000000000000000000000000000000000000000000000081525062001d74565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff86169162002c019190620038e6565b600060405180830381855afa9150503d806000811462002c3e576040519150601f19603f3d011682016040523d82523d6000602084013e62002c43565b606091505b509150915081801562002c57575080516020145b62002c6457601262001d74565b8080602001905181019062001d74919062004012565b60018055565b60685460ff1662002cbd576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600881901c60008181526069602052604081208054600160ff861690811b91821892839055929091908183169003620009c9576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600062002dd9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620031119092919063ffffffff16565b80519091501562001f22578080602001905181019062002dfa919062004032565b62001f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162001324565b600054610100900460ff1662002c7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162001324565b6060604082511062002f435781806020019051810190620007a2919062004052565b8151602003620030d35760005b60208110801562002f9b575082818151811062002f715762002f7162003b8a565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b1562002fb6578062002fad8162003be8565b91505062002f50565b8060000362002ffa57505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e4700000000000000000000000000006020820152919050565b60008167ffffffffffffffff81111562003018576200301862003891565b6040519080825280601f01601f19166020018201604052801562003043576020820181803683370190505b50905060005b82811015620030cb5784818151811062003067576200306762003b8a565b602001015160f81c60f81b82828151811062003087576200308762003b8a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080620030c28162003be8565b91505062003049565b509392505050565b505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e470000000000000000000000000000602082015290565b919050565b606062001d748484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031489190620038e6565b60006040518083038185875af1925050503d806000811462003187576040519150601f19603f3d011682016040523d82523d6000602084013e6200318c565b606091505b50915091506200319f87838387620031aa565b979650505050505050565b60608315620032455782516000036200323d5773ffffffffffffffffffffffffffffffffffffffff85163b6200323d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162001324565b508162001d74565b62001d7483838151156200325c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620013249190620040d2565b611b6680620040e883390190565b803563ffffffff811681146200310c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114620032d857600080fd5b50565b60008060408385031215620032ef57600080fd5b620032fa83620032a0565b915060208301356200330c81620032b5565b809150509250929050565b8015158114620032d857600080fd5b60008083601f8401126200333957600080fd5b50813567ffffffffffffffff8111156200335257600080fd5b6020830191508360208285010111156200336b57600080fd5b9250929050565b6000806000806000608086880312156200338b57600080fd5b6200339686620032a0565b94506020860135620033a881620032b5565b93506040860135620033ba8162003317565b9250606086013567ffffffffffffffff811115620033d757600080fd5b620033e58882890162003326565b969995985093965092949392505050565b806104008101831015620007a257600080fd5b60008060008060008060008060008060006105208c8e0312156200342c57600080fd5b620034388d8d620033f6565b9a50620034496104008d01620032a0565b99506104208c013598506104408c013597506200346a6104608d01620032a0565b96506104808c01356200347d81620032b5565b95506200348e6104a08d01620032a0565b94506104c08c0135620034a181620032b5565b93506104e08c013592506105008c013567ffffffffffffffff811115620034c757600080fd5b620034d58e828f0162003326565b915080935050809150509295989b509295989b9093969950565b6000602082840312156200350257600080fd5b81356200350f81620032b5565b9392505050565b60ff81168114620032d857600080fd5b600080600080600080600060e0888a0312156200354257600080fd5b87356200354f8162003516565b96506200355f60208901620032a0565b955060408801356200357181620032b5565b94506200358160608901620032a0565b935060808801356200359381620032b5565b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215620035c657600080fd5b620035d184620032a0565b92506020840135620035e381620032b5565b91506040840135620035f581620032b5565b809150509250925092565b6000602082840312156200361357600080fd5b5035919050565b600080600080600080600060a0888a0312156200363657600080fd5b6200364188620032a0565b965060208801356200365381620032b5565b9550604088013567ffffffffffffffff808211156200367157600080fd5b6200367f8b838c0162003326565b909750955060608a01359150808211156200369957600080fd5b50620036a88a828b0162003326565b9094509250506080880135620036be8162003516565b8091505092959891949750929550565b600080600080600080600060c0888a031215620036ea57600080fd5b620036f588620032a0565b965060208801356200370781620032b5565b95506040880135945060608801356200372081620032b5565b93506080880135620037328162003317565b925060a088013567ffffffffffffffff8111156200374f57600080fd5b6200375d8a828b0162003326565b989b979a50959850939692959293505050565b60008060008061046085870312156200378857600080fd5b843593506200379b8660208701620033f6565b9250620037ac6104208601620032a0565b939692955092936104400135925050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061010060ff8c16835263ffffffff808c16602085015273ffffffffffffffffffffffffffffffffffffffff808c166040860152818b166060860152808a166080860152508760a08501528160c0850152620038678285018789620037bd565b925080851660e085015250509a9950505050505050505050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015620038dd578181015183820152602001620038c3565b50506000910152565b60008251620038fa818460208701620038c0565b9190910192915050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200394e576200394e62003891565b604052919050565b600067ffffffffffffffff82111562003973576200397362003891565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620039b157600080fd5b8135620039c8620039c28262003956565b62003904565b818152846020838601011115620039de57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121562003a1157600080fd5b833567ffffffffffffffff8082111562003a2a57600080fd5b62003a38878388016200399f565b9450602086013591508082111562003a4f57600080fd5b5062003a5e868287016200399f565b9250506040840135620035f58162003516565b6000815180845262003a8b816020860160208601620038c0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003ad2606083018662003a71565b828103602084015262003ae6818662003a71565b91505060ff83166040830152949350505050565b63ffffffff86168152600073ffffffffffffffffffffffffffffffffffffffff8087166020840152808616604084015250608060608301526200319f608083018486620037bd565b73ffffffffffffffffffffffffffffffffffffffff8516815263ffffffff8416602082015260606040820152600062003b80606083018486620037bd565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003c1c5762003c1c62003bb9565b5060010190565b60608152600062003c39606083018789620037bd565b828103602084015262003c4e818688620037bd565b91505060ff831660408301529695505050505050565b6000835162003c78818460208801620038c0565b83519083019062003c8e818360208801620038c0565b01949350505050565b60006020828403121562003caa57600080fd5b5051919050565b81810381811115620007a257620007a262003bb9565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003d278285018762003a71565b925080851660e085015250509998505050505050505050565b600181815b8085111562003d9f57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d835762003d8362003bb9565b8085161562003d9157918102915b93841c939080029062003d45565b509250929050565b60008262003db857506001620007a2565b8162003dc757506000620007a2565b816001811462003de0576002811462003deb5762003e0b565b6001915050620007a2565b60ff84111562003dff5762003dff62003bb9565b50506001821b620007a2565b5060208310610133831016604e8410600b841016171562003e30575081810a620007a2565b62003e3c838362003d40565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e715762003e7162003bb9565b029392505050565b60006200350f838362003da7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003ec757600080fd5b8386111562003ed557600080fd5b5050820193919092039150565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101562003f235780818660040360031b1b83161692505b505092915050565b600080600080600080600060e0888a03121562003f4757600080fd5b873562003f5481620032b5565b9650602088013562003f6681620032b5565b955060408801359450606088013593506080880135620035938162003516565b600080600080600080600080610100898b03121562003fa457600080fd5b883562003fb181620032b5565b9750602089013562003fc381620032b5565b96506040890135955060608901359450608089013562003fe38162003317565b935060a089013562003ff58162003516565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200402557600080fd5b81516200350f8162003516565b6000602082840312156200404557600080fd5b81516200350f8162003317565b6000602082840312156200406557600080fd5b815167ffffffffffffffff8111156200407d57600080fd5b8201601f810184136200408f57600080fd5b8051620040a0620039c28262003956565b818152856020838501011115620040b657600080fd5b620040c9826020830160208601620038c0565b95945050505050565b6020815260006200350f602083018462003a7156fe6101006040523480156200001257600080fd5b5060405162001b6638038062001b6683398101604081905262000035916200028d565b82826003620000458382620003a1565b506004620000548282620003a1565b50503360c0525060ff811660e052466080819052620000739062000080565b60a052506200046d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000ad6200012e565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6060600380546200013f9062000312565b80601f01602080910402602001604051908101604052809291908181526020018280546200016d9062000312565b8015620001be5780601f106200019257610100808354040283529160200191620001be565b820191906000526020600020905b815481529060010190602001808311620001a057829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f057600080fd5b81516001600160401b03808211156200020d576200020d620001c8565b604051601f8301601f19908116603f01168101908282118183101715620002385762000238620001c8565b816040528381526020925086838588010111156200025557600080fd5b600091505b838210156200027957858201830151818301840152908201906200025a565b600093810190920192909252949350505050565b600080600060608486031215620002a357600080fd5b83516001600160401b0380821115620002bb57600080fd5b620002c987838801620001de565b94506020860151915080821115620002e057600080fd5b50620002ef86828701620001de565b925050604084015160ff811681146200030757600080fd5b809150509250925092565b600181811c908216806200032757607f821691505b6020821081036200034857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039c57600081815260208120601f850160051c81016020861015620003775750805b601f850160051c820191505b81811015620003985782815560010162000383565b5050505b505050565b81516001600160401b03811115620003bd57620003bd620001c8565b620003d581620003ce845462000312565b846200034e565b602080601f8311600181146200040d5760008415620003f45750858301515b600019600386901b1c1916600185901b17855562000398565b600085815260208120601f198616915b828110156200043e578886015182559484019460019091019084016200041d565b50858210156200045d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516116aa620004bc6000396000610237015260008181610307015281816105c001526106a70152600061053a015260008181610379015261050401526116aa6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf1461039b578063dd62ed3e146103ae578063ffa1ad74146103f457600080fd5b8063a457c2d71461034e578063a9059cbb14610361578063cd0d00961461037457600080fd5b806395d89b41116100bd57806395d89b41146102e75780639dc29fac146102ef578063a3c573eb1461030257600080fd5b806370a08231146102915780637ecebe00146102c757600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610261578063395093511461026957806340c10f191461027c57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610430565b60405161019191906113e4565b60405180910390f35b6101ad6101a8366004611479565b6104c2565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad6102043660046114a3565b6104dc565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610191565b6101c1610500565b6101ad610277366004611479565b61055c565b61028f61028a366004611479565b6105a8565b005b6101c161029f3660046114df565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d53660046114df565b60056020526000908152604090205481565b610184610680565b61028f6102fd366004611479565b61068f565b6103297f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad61035c366004611479565b61075e565b6101ad61036f366004611479565b61082f565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b61028f6103a9366004611501565b61083d565b6101c16103bc366004611574565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043f906115a7565b80601f016020809104026020016040519081016040528092919081815260200182805461046b906115a7565b80156104b85780601f1061048d576101008083540402835291602001916104b8565b820191906000526020600020905b81548152906001019060200180831161049b57829003601f168201915b5050505050905090565b6000336104d0818585610b73565b60019150505b92915050565b6000336104ea858285610d27565b6104f5858585610dfe565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610537576105324661106d565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104d090829086906105a3908790611629565b610b73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d4272696467650000000000000000000000000000000060648201526084015b60405180910390fd5b61067c8282611135565b5050565b60606004805461043f906115a7565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d427269646765000000000000000000000000000000006064820152608401610669565b61067c8282611228565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610669565b6104f58286868403610b73565b6000336104d0818585610dfe565b834211156108cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866109268361163c565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610991610500565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610a55573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610ad057508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610669565b610b678a8a8a610b73565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610cb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610df85781811015610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610669565b610df88484848403610b73565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610f44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610df8565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611098610430565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166111b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610669565b80600260008282546111c49190611629565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166112cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610d1a565b600060208083528351808285015260005b81811015611411578581018301518582016040015282016113f5565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461147457600080fd5b919050565b6000806040838503121561148c57600080fd5b61149583611450565b946020939093013593505050565b6000806000606084860312156114b857600080fd5b6114c184611450565b92506114cf60208501611450565b9150604084013590509250925092565b6000602082840312156114f157600080fd5b6114fa82611450565b9392505050565b600080600080600080600060e0888a03121561151c57600080fd5b61152588611450565b965061153360208901611450565b95506040880135945060608801359350608088013560ff8116811461155757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561158757600080fd5b61159083611450565b915061159e60208401611450565b90509250929050565b600181811c908216806115bb57607f821691505b6020821081036115f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156104d6576104d66115fa565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361166d5761166d6115fa565b506001019056fea26469706673582212208d88fee561cff7120d381c345cfc534cef8229a272dc5809d4bbb685ad67141164736f6c63430008110033a2646970667358221220d9b3ca7b13ec80ac58634ddf0ecebe71e209a71f532614949b9e720413f50c8364736f6c63430008110033 \ No newline at end of file +608060405234801561001057600080fd5b50615c83806100206000396000f3fe6080604052600436106200019f5760003560e01c8063647c576c11620000e7578063be5831c71162000089578063dbc169761162000060578063dbc169761462000639578063ee25560b1462000651578063fb570834146200068257600080fd5b8063be5831c714620005ae578063cd58657914620005ea578063d02103ca146200060157600080fd5b80639e34070f11620000be5780639e34070f146200050a578063aaa13cc2146200054f578063bab161bf146200057457600080fd5b8063647c576c146200048657806379e2cf9714620004ab57806381b1c17414620004c357600080fd5b80632d2c9d94116200015157806334ac9cf2116200012857806334ac9cf2146200034b5780633ae05047146200037a5780633e197043146200039257600080fd5b80632d2c9d9414620002765780632dfdf0b5146200029b578063318aee3d14620002c257600080fd5b806322e95f2c116200018657806322e95f2c14620001ef578063240ff378146200023a5780632cffd02e146200025157600080fd5b806315064c9614620001a45780632072f6c514620001d5575b600080fd5b348015620001b157600080fd5b50606854620001c09060ff1681565b60405190151581526020015b60405180910390f35b348015620001e257600080fd5b50620001ed620006a7565b005b348015620001fc57600080fd5b50620002146200020e366004620032db565b62000705565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001cc565b620001ed6200024b36600462003372565b620007a8565b3480156200025e57600080fd5b50620001ed6200027036600462003409565b620009d0565b3480156200028357600080fd5b50620001ed6200029536600462003409565b62000f74565b348015620002a857600080fd5b50620002b360535481565b604051908152602001620001cc565b348015620002cf57600080fd5b5062000319620002e1366004620034ef565b606b6020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001cc565b3480156200035857600080fd5b50606c54620002149073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200038757600080fd5b50620002b362001178565b3480156200039f57600080fd5b50620002b3620003b136600462003526565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200049357600080fd5b50620001ed620004a5366004620035b0565b6200125e565b348015620004b857600080fd5b50620001ed620014ad565b348015620004d057600080fd5b5062000214620004e236600462003600565b606a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200051757600080fd5b50620001c06200052936600462003600565b600881901c600090815260696020526040902054600160ff9092169190911b9081161490565b3480156200055c57600080fd5b50620002146200056e3660046200361a565b620014e7565b3480156200058157600080fd5b506068546200059890610100900463ffffffff1681565b60405163ffffffff9091168152602001620001cc565b348015620005bb57600080fd5b506068546200059890790100000000000000000000000000000000000000000000000000900463ffffffff1681565b620001ed620005fb366004620036ce565b620016d3565b3480156200060e57600080fd5b50606854620002149065010000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200064657600080fd5b50620001ed62001c37565b3480156200065e57600080fd5b50620002b36200067036600462003600565b60696020526000908152604090205481565b3480156200068f57600080fd5b50620001c0620006a136600462003770565b62001c93565b606c5473ffffffffffffffffffffffffffffffffffffffff163314620006f9576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200070362001d7c565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602483015282516018818403018152603890920183528151918101919091206000908152606a909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b60685460ff1615620007e6576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff8681166101009092041614806200080c5750600263ffffffff861610155b1562000844576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001606860019054906101000a900463ffffffff163388883488886053546040516200089a9998979695949392919062003806565b60405180910390a1620009b8620009b26001606860019054906101000a900463ffffffff16338989348989604051620008d592919062003881565b60405180910390206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b62001e10565b8215620009c957620009c962001f27565b5050505050565b60685460ff161562000a0e576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000a258b8b8b8b8b8b8b8b8b8b8b600062001ffc565b73ffffffffffffffffffffffffffffffffffffffff861662000b01576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162000a7a9190620038e6565b60006040518083038185875af1925050503d806000811462000ab9576040519150601f19603f3d011682016040523d82523d6000602084013e62000abe565b606091505b505090508062000afa576040517f6747a28800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062000efc565b60685463ffffffff61010090910481169088160362000b435762000b3d73ffffffffffffffffffffffffffffffffffffffff87168585620021ed565b62000efc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152606a90935291205490915073ffffffffffffffffffffffffffffffffffffffff168062000e6e576000808062000c1886880188620039fb565b92509250925060008584848460405162000c329062003292565b62000c409392919062003abd565b8190604051809103906000f590508015801562000c61573d6000803e3d6000fd5b506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c9052919250908216906340c10f1990604401600060405180830381600087803b15801562000cd757600080fd5b505af115801562000cec573d6000803e3d6000fd5b5050505080606a600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a398d8d838b8b60405162000e5c95949392919062003afa565b60405180910390a15050505062000ef9565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f1990604401600060405180830381600087803b15801562000edf57600080fd5b505af115801562000ef4573d6000803e3d6000fd5b505050505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b60685460ff161562000fb2576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000fc98b8b8b8b8b8b8b8b8b8b8b600162001ffc565b60008473ffffffffffffffffffffffffffffffffffffffff1684888a868660405160240162000ffc949392919062003b42565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200107f9190620038e6565b60006040518083038185875af1925050503d8060008114620010be576040519150601f19603f3d011682016040523d82523d6000602084013e620010c3565b606091505b5050905080620010ff576040517f37e391c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b605354600090819081805b602081101562001255578083901c600116600103620011e65760338160208110620011b257620011b262003b8a565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062001213565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b604080516020810184905290810183905260600160405160208183030381529060405280519060200120915080806200124c9062003be8565b91505062001183565b50919392505050565b600054610100900460ff16158080156200127f5750600054600160ff909116105b806200129b5750303b1580156200129b575060005460ff166001145b6200132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200138c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606880547fffffffffffffff000000000000000000000000000000000000000000000000ff1661010063ffffffff8716027fffffffffffffff0000000000000000000000000000000000000000ffffffffff16176501000000000073ffffffffffffffffffffffffffffffffffffffff8681169190910291909117909155606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001691841691909117905562001443620022c3565b8015620014a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b605354606854790100000000000000000000000000000000000000000000000000900463ffffffff16101562000703576200070362001f27565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200157d9062003292565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f909101166040819052620015c8908d908d908d908d908d9060200162003c23565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262001606929160200162003c64565b604051602081830303815290604052805190602001206040516020016200168f94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101209a9950505050505050505050565b60685460ff161562001711576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200171b62002366565b60685463ffffffff888116610100909204161480620017415750600263ffffffff881610155b1562001779576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060608773ffffffffffffffffffffffffffffffffffffffff8816620017df57883414620017d5576040517fb89240f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000925062001ad9565b341562001818576040517f798ee6f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8089166000908152606b602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001908576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018b905273ffffffffffffffffffffffffffffffffffffffff8a1690639dc29fac90604401600060405180830381600087803b158015620018db57600080fd5b505af1158015620018f0573d6000803e3d6000fd5b50505050806020015194508060000151935062001ad7565b85156200191d576200191d898b8989620023db565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa1580156200198b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019b1919062003c97565b9050620019d773ffffffffffffffffffffffffffffffffffffffff8b1633308e620028f9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8c16906370a0823190602401602060405180830381865afa15801562001a45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a6b919062003c97565b905062001a79828262003cb1565b6068548c9850610100900463ffffffff169650935062001a998762002959565b62001aa48c62002a71565b62001aaf8d62002b7e565b60405160200162001ac39392919062003abd565b604051602081830303815290604052945050505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600084868e8e868860535460405162001b1b98979695949392919062003cc7565b60405180910390a162001c0f620009b2600085878f8f8789805190602001206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b861562001c205762001c2062001f27565b5050505062001c2e60018055565b50505050505050565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462001c89576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200070362002c80565b600084815b602081101562001d6e57600163ffffffff8616821c8116900362001d0a5785816020811062001ccb5762001ccb62003b8a565b60200201358260405160200162001cec929190918252602082015260400190565b60405160208183030381529060405280519060200120915062001d59565b8186826020811062001d205762001d2062003b8a565b602002013560405160200162001d40929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b8062001d658162003be8565b91505062001c98565b50821490505b949350505050565b60685460ff161562001dba576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b80600162001e216020600262003e79565b62001e2d919062003cb1565b6053541062001e68576040517fef5ccf6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060536000815462001e7b9062003be8565b9182905550905060005b602081101562001f17578082901c60011660010362001ebd57826033826020811062001eb55762001eb562003b8a565b015550505050565b6033816020811062001ed35762001ed362003b8a565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250808062001f0e9062003be8565b91505062001e85565b5062001f2262003e87565b505050565b6053546068805463ffffffff909216790100000000000000000000000000000000000000000000000000027fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179081905573ffffffffffffffffffffffffffffffffffffffff65010000000000909104166333d6247d62001fad62001178565b6040518263ffffffff1660e01b815260040162001fcc91815260200190565b600060405180830381600087803b15801562001fe757600080fd5b505af1158015620014a7573d6000803e3d6000fd5b6200200d8b63ffffffff1662002d10565b6068546040805160208082018e90528183018d9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915260009165010000000000900473ffffffffffffffffffffffffffffffffffffffff169063257b3632906084016020604051808303816000875af1158015620020b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020d6919062003c97565b90508060000362002112576040517e2f6fad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff88811661010090920416146200215c576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606854600090610100900463ffffffff166200217a5750896200217d565b508a5b620021a66200219d848c8c8c8c8c8c8c604051620008d592919062003881565b8f8f8462001c93565b620021dd576040517fe0417cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001f229084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002d75565b600054610100900460ff166200235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162001324565b6200070362002e88565b600260015403620023d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640162001324565b6002600155565b6000620023ec600482848662003eb6565b620023f79162003ee2565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620026765760008080808080806200245a896004818d62003eb6565b81019062002469919062003f2b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620024dd576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff861630146200252d576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8a851462002567576040517f03fffc4b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620026229190620038e6565b6000604051808303816000865af19150503d806000811462002661576040519150601f19603f3d011682016040523d82523d6000602084013e62002666565b606091505b50505050505050505050620009c9565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c0000000000000000000000000000000000000000000000000000000014620026f2576040517fe282c0ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808080808080806200270a8a6004818e62003eb6565b81019062002719919062003f86565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146200278f576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87163014620027df576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620028a39190620038e6565b6000604051808303816000865af19150503d8060008114620028e2576040519150601f19603f3d011682016040523d82523d6000602084013e620028e7565b606091505b50505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620014a79085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002240565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde03000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff861691620029dd9190620038e6565b600060405180830381855afa9150503d806000811462002a1a576040519150601f19603f3d011682016040523d82523d6000602084013e62002a1f565b606091505b50915091508162002a66576040518060400160405280600781526020017f4e4f5f4e414d450000000000000000000000000000000000000000000000000081525062001d74565b62001d748162002f21565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff86169162002af59190620038e6565b600060405180830381855afa9150503d806000811462002b32576040519150601f19603f3d011682016040523d82523d6000602084013e62002b37565b606091505b50915091508162002a66576040518060400160405280600981526020017f4e4f5f53594d424f4c000000000000000000000000000000000000000000000081525062001d74565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff86169162002c019190620038e6565b600060405180830381855afa9150503d806000811462002c3e576040519150601f19603f3d011682016040523d82523d6000602084013e62002c43565b606091505b509150915081801562002c57575080516020145b62002c6457601262001d74565b8080602001905181019062001d74919062004012565b60018055565b60685460ff1662002cbd576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600881901c60008181526069602052604081208054600160ff861690811b91821892839055929091908183169003620009c9576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600062002dd9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620031119092919063ffffffff16565b80519091501562001f22578080602001905181019062002dfa919062004032565b62001f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162001324565b600054610100900460ff1662002c7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162001324565b6060604082511062002f435781806020019051810190620007a2919062004052565b8151602003620030d35760005b60208110801562002f9b575082818151811062002f715762002f7162003b8a565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b1562002fb6578062002fad8162003be8565b91505062002f50565b8060000362002ffa57505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e4700000000000000000000000000006020820152919050565b60008167ffffffffffffffff81111562003018576200301862003891565b6040519080825280601f01601f19166020018201604052801562003043576020820181803683370190505b50905060005b82811015620030cb5784818151811062003067576200306762003b8a565b602001015160f81c60f81b82828151811062003087576200308762003b8a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080620030c28162003be8565b91505062003049565b509392505050565b505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e470000000000000000000000000000602082015290565b919050565b606062001d748484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031489190620038e6565b60006040518083038185875af1925050503d806000811462003187576040519150601f19603f3d011682016040523d82523d6000602084013e6200318c565b606091505b50915091506200319f87838387620031aa565b979650505050505050565b60608315620032455782516000036200323d5773ffffffffffffffffffffffffffffffffffffffff85163b6200323d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162001324565b508162001d74565b62001d7483838151156200325c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620013249190620040d2565b611b6680620040e883390190565b803563ffffffff811681146200310c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114620032d857600080fd5b50565b60008060408385031215620032ef57600080fd5b620032fa83620032a0565b915060208301356200330c81620032b5565b809150509250929050565b8015158114620032d857600080fd5b60008083601f8401126200333957600080fd5b50813567ffffffffffffffff8111156200335257600080fd5b6020830191508360208285010111156200336b57600080fd5b9250929050565b6000806000806000608086880312156200338b57600080fd5b6200339686620032a0565b94506020860135620033a881620032b5565b93506040860135620033ba8162003317565b9250606086013567ffffffffffffffff811115620033d757600080fd5b620033e58882890162003326565b969995985093965092949392505050565b806104008101831015620007a257600080fd5b60008060008060008060008060008060006105208c8e0312156200342c57600080fd5b620034388d8d620033f6565b9a50620034496104008d01620032a0565b99506104208c013598506104408c013597506200346a6104608d01620032a0565b96506104808c01356200347d81620032b5565b95506200348e6104a08d01620032a0565b94506104c08c0135620034a181620032b5565b93506104e08c013592506105008c013567ffffffffffffffff811115620034c757600080fd5b620034d58e828f0162003326565b915080935050809150509295989b509295989b9093969950565b6000602082840312156200350257600080fd5b81356200350f81620032b5565b9392505050565b60ff81168114620032d857600080fd5b600080600080600080600060e0888a0312156200354257600080fd5b87356200354f8162003516565b96506200355f60208901620032a0565b955060408801356200357181620032b5565b94506200358160608901620032a0565b935060808801356200359381620032b5565b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215620035c657600080fd5b620035d184620032a0565b92506020840135620035e381620032b5565b91506040840135620035f581620032b5565b809150509250925092565b6000602082840312156200361357600080fd5b5035919050565b600080600080600080600060a0888a0312156200363657600080fd5b6200364188620032a0565b965060208801356200365381620032b5565b9550604088013567ffffffffffffffff808211156200367157600080fd5b6200367f8b838c0162003326565b909750955060608a01359150808211156200369957600080fd5b50620036a88a828b0162003326565b9094509250506080880135620036be8162003516565b8091505092959891949750929550565b600080600080600080600060c0888a031215620036ea57600080fd5b620036f588620032a0565b965060208801356200370781620032b5565b95506040880135945060608801356200372081620032b5565b93506080880135620037328162003317565b925060a088013567ffffffffffffffff8111156200374f57600080fd5b6200375d8a828b0162003326565b989b979a50959850939692959293505050565b60008060008061046085870312156200378857600080fd5b843593506200379b8660208701620033f6565b9250620037ac6104208601620032a0565b939692955092936104400135925050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061010060ff8c16835263ffffffff808c16602085015273ffffffffffffffffffffffffffffffffffffffff808c166040860152818b166060860152808a166080860152508760a08501528160c0850152620038678285018789620037bd565b925080851660e085015250509a9950505050505050505050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015620038dd578181015183820152602001620038c3565b50506000910152565b60008251620038fa818460208701620038c0565b9190910192915050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200394e576200394e62003891565b604052919050565b600067ffffffffffffffff82111562003973576200397362003891565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620039b157600080fd5b8135620039c8620039c28262003956565b62003904565b818152846020838601011115620039de57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121562003a1157600080fd5b833567ffffffffffffffff8082111562003a2a57600080fd5b62003a38878388016200399f565b9450602086013591508082111562003a4f57600080fd5b5062003a5e868287016200399f565b9250506040840135620035f58162003516565b6000815180845262003a8b816020860160208601620038c0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003ad2606083018662003a71565b828103602084015262003ae6818662003a71565b91505060ff83166040830152949350505050565b63ffffffff86168152600073ffffffffffffffffffffffffffffffffffffffff8087166020840152808616604084015250608060608301526200319f608083018486620037bd565b73ffffffffffffffffffffffffffffffffffffffff8516815263ffffffff8416602082015260606040820152600062003b80606083018486620037bd565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003c1c5762003c1c62003bb9565b5060010190565b60608152600062003c39606083018789620037bd565b828103602084015262003c4e818688620037bd565b91505060ff831660408301529695505050505050565b6000835162003c78818460208801620038c0565b83519083019062003c8e818360208801620038c0565b01949350505050565b60006020828403121562003caa57600080fd5b5051919050565b81810381811115620007a257620007a262003bb9565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003d278285018762003a71565b925080851660e085015250509998505050505050505050565b600181815b8085111562003d9f57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d835762003d8362003bb9565b8085161562003d9157918102915b93841c939080029062003d45565b509250929050565b60008262003db857506001620007a2565b8162003dc757506000620007a2565b816001811462003de0576002811462003deb5762003e0b565b6001915050620007a2565b60ff84111562003dff5762003dff62003bb9565b50506001821b620007a2565b5060208310610133831016604e8410600b841016171562003e30575081810a620007a2565b62003e3c838362003d40565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e715762003e7162003bb9565b029392505050565b60006200350f838362003da7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003ec757600080fd5b8386111562003ed557600080fd5b5050820193919092039150565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101562003f235780818660040360031b1b83161692505b505092915050565b600080600080600080600060e0888a03121562003f4757600080fd5b873562003f5481620032b5565b9650602088013562003f6681620032b5565b955060408801359450606088013593506080880135620035938162003516565b600080600080600080600080610100898b03121562003fa457600080fd5b883562003fb181620032b5565b9750602089013562003fc381620032b5565b96506040890135955060608901359450608089013562003fe38162003317565b935060a089013562003ff58162003516565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200402557600080fd5b81516200350f8162003516565b6000602082840312156200404557600080fd5b81516200350f8162003317565b6000602082840312156200406557600080fd5b815167ffffffffffffffff8111156200407d57600080fd5b8201601f810184136200408f57600080fd5b8051620040a0620039c28262003956565b818152856020838501011115620040b657600080fd5b620040c9826020830160208601620038c0565b95945050505050565b6020815260006200350f602083018462003a7156fe6101006040523480156200001257600080fd5b5060405162001b6638038062001b6683398101604081905262000035916200028d565b82826003620000458382620003a1565b506004620000548282620003a1565b50503360c0525060ff811660e052466080819052620000739062000080565b60a052506200046d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000ad6200012e565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6060600380546200013f9062000312565b80601f01602080910402602001604051908101604052809291908181526020018280546200016d9062000312565b8015620001be5780601f106200019257610100808354040283529160200191620001be565b820191906000526020600020905b815481529060010190602001808311620001a057829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f057600080fd5b81516001600160401b03808211156200020d576200020d620001c8565b604051601f8301601f19908116603f01168101908282118183101715620002385762000238620001c8565b816040528381526020925086838588010111156200025557600080fd5b600091505b838210156200027957858201830151818301840152908201906200025a565b600093810190920192909252949350505050565b600080600060608486031215620002a357600080fd5b83516001600160401b0380821115620002bb57600080fd5b620002c987838801620001de565b94506020860151915080821115620002e057600080fd5b50620002ef86828701620001de565b925050604084015160ff811681146200030757600080fd5b809150509250925092565b600181811c908216806200032757607f821691505b6020821081036200034857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039c57600081815260208120601f850160051c81016020861015620003775750805b601f850160051c820191505b81811015620003985782815560010162000383565b5050505b505050565b81516001600160401b03811115620003bd57620003bd620001c8565b620003d581620003ce845462000312565b846200034e565b602080601f8311600181146200040d5760008415620003f45750858301515b600019600386901b1c1916600185901b17855562000398565b600085815260208120601f198616915b828110156200043e578886015182559484019460019091019084016200041d565b50858210156200045d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516116aa620004bc6000396000610237015260008181610307015281816105c001526106a70152600061053a015260008181610379015261050401526116aa6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf1461039b578063dd62ed3e146103ae578063ffa1ad74146103f457600080fd5b8063a457c2d71461034e578063a9059cbb14610361578063cd0d00961461037457600080fd5b806395d89b41116100bd57806395d89b41146102e75780639dc29fac146102ef578063a3c573eb1461030257600080fd5b806370a08231146102915780637ecebe00146102c757600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610261578063395093511461026957806340c10f191461027c57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610430565b60405161019191906113e4565b60405180910390f35b6101ad6101a8366004611479565b6104c2565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad6102043660046114a3565b6104dc565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610191565b6101c1610500565b6101ad610277366004611479565b61055c565b61028f61028a366004611479565b6105a8565b005b6101c161029f3660046114df565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d53660046114df565b60056020526000908152604090205481565b610184610680565b61028f6102fd366004611479565b61068f565b6103297f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad61035c366004611479565b61075e565b6101ad61036f366004611479565b61082f565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b61028f6103a9366004611501565b61083d565b6101c16103bc366004611574565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043f906115a7565b80601f016020809104026020016040519081016040528092919081815260200182805461046b906115a7565b80156104b85780601f1061048d576101008083540402835291602001916104b8565b820191906000526020600020905b81548152906001019060200180831161049b57829003601f168201915b5050505050905090565b6000336104d0818585610b73565b60019150505b92915050565b6000336104ea858285610d27565b6104f5858585610dfe565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610537576105324661106d565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104d090829086906105a3908790611629565b610b73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d4272696467650000000000000000000000000000000060648201526084015b60405180910390fd5b61067c8282611135565b5050565b60606004805461043f906115a7565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d427269646765000000000000000000000000000000006064820152608401610669565b61067c8282611228565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610669565b6104f58286868403610b73565b6000336104d0818585610dfe565b834211156108cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866109268361163c565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610991610500565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610a55573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610ad057508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610669565b610b678a8a8a610b73565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610cb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610df85781811015610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610669565b610df88484848403610b73565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610f44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610df8565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611098610430565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166111b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610669565b80600260008282546111c49190611629565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166112cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610d1a565b600060208083528351808285015260005b81811015611411578581018301518582016040015282016113f5565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461147457600080fd5b919050565b6000806040838503121561148c57600080fd5b61149583611450565b946020939093013593505050565b6000806000606084860312156114b857600080fd5b6114c184611450565b92506114cf60208501611450565b9150604084013590509250925092565b6000602082840312156114f157600080fd5b6114fa82611450565b9392505050565b600080600080600080600060e0888a03121561151c57600080fd5b61152588611450565b965061153360208901611450565b95506040880135945060608801359350608088013560ff8116811461155757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561158757600080fd5b61159083611450565b915061159e60208401611450565b90509250929050565b600181811c908216806115bb57607f821691505b6020821081036115f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156104d6576104d66115fa565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361166d5761166d6115fa565b506001019056fea26469706673582212206fe049be388a1d04319b9913fe6d100c4c8e272fe0f5748eb056bd0622beabcc64736f6c63430008140033a26469706673582212204ffa5ec8cc59a75d9470fb65ee9632a49c615ff5668ca52f0569ee06e797553f64736f6c63430008140033 \ No newline at end of file diff --git a/etherman/smartcontracts/bin/polygonzkevmbridgel2.bin b/etherman/smartcontracts/bin/polygonzkevmbridgel2.bin new file mode 100644 index 0000000000..479622b91b --- /dev/null +++ b/etherman/smartcontracts/bin/polygonzkevmbridgel2.bin @@ -0,0 +1 @@ +608060405234801561001057600080fd5b50616653806100206000396000f3fe608060405260043610620001f35760003560e01c80634b2f336d116200010b578063be5831c711620000a1578063dd51f5c1116200006c578063dd51f5c11462000793578063ee25560b14620007b8578063f9eaee0d14620007e9578063fb570834146200081d57600080fd5b8063be5831c714620006f0578063cd586579146200072c578063d02103ca1462000743578063dbc16976146200077b57600080fd5b80639e34070f11620000e25780639e34070f146200064b578063aaa13cc21462000690578063b2169f2c14620006b5578063bab161bf14620006cc57600080fd5b80634b2f336d14620005bd57806379e2cf9714620005ec57806381b1c174146200060457600080fd5b80632dfdf0b5116200018d5780633ae0504711620001585780633ae0504714620004355780633c351e10146200044d5780633cbc795b146200047c5780633e19704314620004c957600080fd5b80632dfdf0b51462000331578063318aee3d146200035857806334ac9cf214620003e15780633797306a146200041057600080fd5b806322e95f2c11620001ce57806322e95f2c14620002775780632cc9f16314620002c25780632cffd02e14620002e75780632d2c9d94146200030c57600080fd5b80630ac1be4314620001f857806315064c9614620002415780632072f6c5146200025d575b600080fd5b3480156200020557600080fd5b50606e546200022c9074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b3480156200024e57600080fd5b506068546200022c9060ff1681565b3480156200026a57600080fd5b506200027562000842565b005b3480156200028457600080fd5b506200029c6200029636600462003c09565b620008a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200162000238565b348015620002cf57600080fd5b5062000275620002e136600462003c45565b62000943565b348015620002f457600080fd5b50620002756200030636600462003d2f565b62000bf6565b3480156200031957600080fd5b50620002756200032b36600462003d2f565b62001281565b3480156200033e57600080fd5b506200034960535481565b60405190815260200162000238565b3480156200036557600080fd5b50620003af6200037736600462003e15565b606b6020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000238565b348015620003ee57600080fd5b50606c546200029c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200041d57600080fd5b50620002756200042f36600462003e4b565b62001512565b3480156200044257600080fd5b50620003496200169b565b3480156200045a57600080fd5b50606d546200029c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200048957600080fd5b50606d54620004b39074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff909116815260200162000238565b348015620004d657600080fd5b5062000349620004e836600462003e7b565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620005ca57600080fd5b50606e546200029c9073ffffffffffffffffffffffffffffffffffffffff1681565b348015620005f957600080fd5b506200027562001781565b3480156200061157600080fd5b506200029c6200062336600462003f05565b606a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200065857600080fd5b506200022c6200066a36600462003f05565b600881901c600090815260696020526040902054600160ff9092169190911b9081161490565b3480156200069d57600080fd5b506200029c620006af36600462003f1f565b620017bb565b62000275620006c636600462003fd3565b620019a7565b348015620006d957600080fd5b50606854620004b390610100900463ffffffff1681565b348015620006fd57600080fd5b50606854620004b390790100000000000000000000000000000000000000000000000000900463ffffffff1681565b620002756200073d36600462004060565b62001c91565b3480156200075057600080fd5b506068546200029c9065010000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200078857600080fd5b506200027562002368565b348015620007a057600080fd5b5062000275620007b236600462004102565b620023c4565b348015620007c557600080fd5b5062000349620007d736600462003f05565b60696020526000908152604090205481565b348015620007f657600080fd5b506200022c6200080836600462003e15565b606f6020526000908152604090205460ff1681565b3480156200082a57600080fd5b506200022c6200083c36600462004135565b620025ba565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462000894576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200089e620026a3565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602483015282516018818403018152603890920183528151918101919091206000908152606a909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b600054610100900460ff1615808015620009645750600054600160ff909116105b80620009805750303b15801562000980575060005460ff166001145b62000a12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562000a7157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6068805473ffffffffffffffffffffffffffffffffffffffff80891665010000000000027fffffffffffffff0000000000000000000000000000000000000000ffffffffff63ffffffff808d1661010002919091167fffffffffffffff000000000000000000000000000000000000000000000000ff9094169390931717909255606c80548884167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155606d805492871674010000000000000000000000000000000000000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093168885161792909217909155606e80549285169290911691909117905562000b8962002737565b801562000bed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60685460ff161562000c34576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000c4b8b8b8b8b8b8b8b8b8b8b8b6000620027da565b73ffffffffffffffffffffffffffffffffffffffff861662000cfb57606e546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052909116906340c10f1990604401600060405180830381600087803b15801562000cdc57600080fd5b505af115801562000cf1573d6000803e3d6000fd5b5050505062001209565b606d5473ffffffffffffffffffffffffffffffffffffffff878116911614801562000d485750606d5463ffffffff8881167401000000000000000000000000000000000000000090920416145b1562000e0e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162000d879190620041d7565b60006040518083038185875af1925050503d806000811462000dc6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcb565b606091505b505090508062000e07576040517f6747a28800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062001209565b60685463ffffffff61010090910481169088160362000e505762000e4a73ffffffffffffffffffffffffffffffffffffffff87168585620029cb565b62001209565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152606a90935291205490915073ffffffffffffffffffffffffffffffffffffffff16806200117b576000808062000f2586880188620042ec565b92509250925060008584848460405162000f3f9062003bc0565b62000f4d93929190620043b9565b8190604051809103906000f590508015801562000f6e573d6000803e3d6000fd5b506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c9052919250908216906340c10f1990604401600060405180830381600087803b15801562000fe457600080fd5b505af115801562000ff9573d6000803e3d6000fd5b5050505080606a600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a398d8d838b8b604051620011699594939291906200443f565b60405180910390a15050505062001206565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f1990604401600060405180830381600087803b158015620011ec57600080fd5b505af115801562001201573d6000803e3d6000fd5b505050505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b60685460ff1615620012bf576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620012d68b8b8b8b8b8b8b8b8b8b8b6001620027da565b606e546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052909116906340c10f1990604401600060405180830381600087803b1580156200134b57600080fd5b505af115801562001360573d6000803e3d6000fd5b5050505060008473ffffffffffffffffffffffffffffffffffffffff168789858560405160240162001396949392919062004487565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014199190620041d7565b6000604051808303816000865af19150503d806000811462001458576040519150601f19603f3d011682016040523d82523d6000602084013e6200145d565b606091505b505090508062001499576040517f37e391c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462001564576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606e5474010000000000000000000000000000000000000000900460ff1615158115150362001616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f416c6c204c3220746f6b656e7320616c7265616479206861766520746865207060448201527f65726d697373696f6e0000000000000000000000000000000000000000000000606482015260840162000a09565b606e805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f11c1c68b4bf6f68350aa1983fe17ee1d005a7189994475ddbc4b9fc4e4ef02b8906200169090831515815260200190565b60405180910390a150565b605354600090819081805b602081101562001778578083901c600116600103620017095760338160208110620016d557620016d5620044cf565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062001736565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b604080516020810184905290810183905260600160405160208183030381529060405280519060200120915080806200176f906200452d565b915050620016a6565b50919392505050565b605354606854790100000000000000000000000000000000000000000000000000900463ffffffff1610156200089e576200089e62002aa6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620018519062003bc0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f9091011660408190526200189c908d908d908d908d908d9060200162004568565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620018da9291602001620045a9565b604051602081830303815290604052805190602001206040516020016200196394939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101209a9950505050505050505050565b60685460ff1615620019e5576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff87811661010090920416148062001a0b5750600263ffffffff871610155b1562001a43576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b341562001a7c576040517f798ee6f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606e546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810186905273ffffffffffffffffffffffffffffffffffffffff90911690639dc29fac90604401600060405180830381600087803b15801562001aef57600080fd5b505af115801562001b04573d6000803e3d6000fd5b50506068546053546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b945062001b5a9350600192610100900463ffffffff169133918c918c918c918b918b9190620045dc565b60405180910390a162001c7862001c726001606860019054906101000a900463ffffffff16338a8a8a898960405162001b9592919062004657565b60405180910390206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b62002b81565b821562001c895762001c8962002aa6565b505050505050565b60685460ff161562001ccf576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62001cd962002c93565b60685463ffffffff88811661010090920416148062001cff5750600263ffffffff881610155b1562001d37576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060608773ffffffffffffffffffffffffffffffffffffffff881662001dd55788341462001d93576040517fb89240f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606d5473ffffffffffffffffffffffffffffffffffffffff8116945074010000000000000000000000000000000000000000900463ffffffff16925062002213565b341562001e0e576040517f798ee6f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606e5473ffffffffffffffffffffffffffffffffffffffff9081169089160362001ec8576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018a905273ffffffffffffffffffffffffffffffffffffffff891690639dc29fac90604401600060405180830381600087803b15801562001ea157600080fd5b505af115801562001eb6573d6000803e3d6000fd5b50505050600092506000935062002213565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152606b602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001fb8576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018b905273ffffffffffffffffffffffffffffffffffffffff8a1690639dc29fac90604401600060405180830381600087803b15801562001f8b57600080fd5b505af115801562001fa0573d6000803e3d6000fd5b50505050806020015194508060000151935062002211565b606e5474010000000000000000000000000000000000000000900460ff161580156200200a575073ffffffffffffffffffffffffffffffffffffffff89166000908152606f602052604090205460ff16155b1562002042576040517f3759891400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515620020575762002057898b898962002d08565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa158015620020c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020eb919062004667565b90506200211173ffffffffffffffffffffffffffffffffffffffff8b1633308e62003227565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8c16906370a0823190602401602060405180830381865afa1580156200217f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021a5919062004667565b9050620021b3828262004681565b6068548c9850610100900463ffffffff1696509350620021d38762003287565b620021de8c6200339f565b620021e98d620034ac565b604051602001620021fd93929190620043b9565b604051602081830303815290604052945050505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600084868e8e86886053546040516200225598979695949392919062004697565b60405180910390a16200234962001c72600085878f8f8789805190602001206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b86156200235a576200235a62002aa6565b5050505062000bed60018055565b606c5473ffffffffffffffffffffffffffffffffffffffff163314620023ba576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200089e620035ae565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462002416576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821662002495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e76616c696420746f6b656e20616464726573730000000000000000000000604482015260640162000a09565b73ffffffffffffffffffffffffffffffffffffffff82166000908152606f602052604090205460ff161515811515036200252c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f546f6b656e20616c72656164792068617320746865207065726d697373696f6e604482015260640162000a09565b73ffffffffffffffffffffffffffffffffffffffff82166000818152606f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f6036bc45ffdc28cb8eb8a5afad20d8d1b999da9512abc39c0a9f52995a74998d910160405180910390a15050565b600084815b60208110156200269557600163ffffffff8616821c811690036200263157858160208110620025f257620025f2620044cf565b60200201358260405160200162002613929190918252602082015260400190565b60405160208183030381529060405280519060200120915062002680565b81868260208110620026475762002647620044cf565b602002013560405160200162002667929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b806200268c816200452d565b915050620025bf565b50821490505b949350505050565b60685460ff1615620026e1576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b600054610100900460ff16620027d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000a09565b6200089e6200363e565b620027eb8b63ffffffff16620036d7565b6068546040805160208082018e90528183018d9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915260009165010000000000900473ffffffffffffffffffffffffffffffffffffffff169063257b3632906084016020604051808303816000875af11580156200288e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620028b4919062004667565b905080600003620028f0576040517e2f6fad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff88811661010090920416146200293a576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606854600090610100900463ffffffff16620029585750896200295b565b508a5b620029846200297b848c8c8c8c8c8c8c60405162001b9592919062004657565b8f8f84620025ba565b620029bb576040517fe0417cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262002aa19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200373c565b505050565b6053546068805463ffffffff909216790100000000000000000000000000000000000000000000000000027fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179081905573ffffffffffffffffffffffffffffffffffffffff65010000000000909104166333d6247d62002b2c6200169b565b6040518263ffffffff1660e01b815260040162002b4b91815260200190565b600060405180830381600087803b15801562002b6657600080fd5b505af115801562002b7b573d6000803e3d6000fd5b50505050565b80600162002b926020600262004849565b62002b9e919062004681565b6053541062002bd9576040517fef5ccf6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060536000815462002bec906200452d565b9182905550905060005b602081101562002c88578082901c60011660010362002c2e57826033826020811062002c265762002c26620044cf565b015550505050565b6033816020811062002c445762002c44620044cf565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250808062002c7f906200452d565b91505062002bf6565b5062002aa162004857565b60026001540362002d01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640162000a09565b6002600155565b600062002d19600482848662004886565b62002d2491620048b2565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002fa357600080808080808062002d87896004818d62004886565b81019062002d969190620048fb565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002e0a576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8616301462002e5a576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8a851462002e94576040517f03fffc4b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002f4f9190620041d7565b6000604051808303816000865af19150503d806000811462002f8e576040519150601f19603f3d011682016040523d82523d6000602084013e62002f93565b606091505b5050505050505050505062003220565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200301f576040517fe282c0ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080808080808080620030378a6004818e62004886565b81019062003046919062004956565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614620030bc576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff871630146200310c576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620031d09190620041d7565b6000604051808303816000865af19150503d80600081146200320f576040519150601f19603f3d011682016040523d82523d6000602084013e62003214565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b7b9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002a1e565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde03000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff8616916200330b9190620041d7565b600060405180830381855afa9150503d806000811462003348576040519150601f19603f3d011682016040523d82523d6000602084013e6200334d565b606091505b50915091508162003394576040518060400160405280600781526020017f4e4f5f4e414d45000000000000000000000000000000000000000000000000008152506200269b565b6200269b816200384f565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff861691620034239190620041d7565b600060405180830381855afa9150503d806000811462003460576040519150601f19603f3d011682016040523d82523d6000602084013e62003465565b606091505b50915091508162003394576040518060400160405280600981526020017f4e4f5f53594d424f4c00000000000000000000000000000000000000000000008152506200269b565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff8616916200352f9190620041d7565b600060405180830381855afa9150503d80600081146200356c576040519150601f19603f3d011682016040523d82523d6000602084013e62003571565b606091505b509150915081801562003585575080516020145b620035925760126200269b565b808060200190518101906200269b9190620049e2565b60018055565b60685460ff16620035eb576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600054610100900460ff16620035a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000a09565b600881901c60008181526069602052604081208054600160ff861690811b9182189283905592909190818316900362003220576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000620037a0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662003a3f9092919063ffffffff16565b80519091501562002aa15780806020019051810190620037c1919062004a02565b62002aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000a09565b606060408251106200387157818060200190518101906200093d919062004a22565b815160200362003a015760005b602081108015620038c957508281815181106200389f576200389f620044cf565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b15620038e45780620038db816200452d565b9150506200387e565b806000036200392857505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e4700000000000000000000000000006020820152919050565b60008167ffffffffffffffff81111562003946576200394662004182565b6040519080825280601f01601f19166020018201604052801562003971576020820181803683370190505b50905060005b82811015620039f957848181518110620039955762003995620044cf565b602001015160f81c60f81b828281518110620039b557620039b5620044cf565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080620039f0816200452d565b91505062003977565b509392505050565b505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e470000000000000000000000000000602082015290565b919050565b60606200269b8484600085856000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003a769190620041d7565b60006040518083038185875af1925050503d806000811462003ab5576040519150601f19603f3d011682016040523d82523d6000602084013e62003aba565b606091505b509150915062003acd8783838762003ad8565b979650505050505050565b6060831562003b7357825160000362003b6b5773ffffffffffffffffffffffffffffffffffffffff85163b62003b6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000a09565b50816200269b565b6200269b838381511562003b8a5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a09919062004aa2565b611b668062004ab883390190565b803563ffffffff8116811462003a3a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811462003c0657600080fd5b50565b6000806040838503121562003c1d57600080fd5b62003c288362003bce565b9150602083013562003c3a8162003be3565b809150509250929050565b60008060008060008060c0878903121562003c5f57600080fd5b62003c6a8762003bce565b9550602087013562003c7c8162003be3565b9450604087013562003c8e8162003be3565b9350606087013562003ca08162003be3565b925062003cb06080880162003bce565b915060a087013562003cc28162003be3565b809150509295509295509295565b8061040081018310156200093d57600080fd5b60008083601f84011262003cf657600080fd5b50813567ffffffffffffffff81111562003d0f57600080fd5b60208301915083602082850101111562003d2857600080fd5b9250929050565b60008060008060008060008060008060006105208c8e03121562003d5257600080fd5b62003d5e8d8d62003cd0565b9a5062003d6f6104008d0162003bce565b99506104208c013598506104408c0135975062003d906104608d0162003bce565b96506104808c013562003da38162003be3565b955062003db46104a08d0162003bce565b94506104c08c013562003dc78162003be3565b93506104e08c013592506105008c013567ffffffffffffffff81111562003ded57600080fd5b62003dfb8e828f0162003ce3565b915080935050809150509295989b509295989b9093969950565b60006020828403121562003e2857600080fd5b813562003e358162003be3565b9392505050565b801515811462003c0657600080fd5b60006020828403121562003e5e57600080fd5b813562003e358162003e3c565b60ff8116811462003c0657600080fd5b600080600080600080600060e0888a03121562003e9757600080fd5b873562003ea48162003e6b565b965062003eb46020890162003bce565b9550604088013562003ec68162003be3565b945062003ed66060890162003bce565b9350608088013562003ee88162003be3565b9699959850939692959460a0840135945060c09093013592915050565b60006020828403121562003f1857600080fd5b5035919050565b600080600080600080600060a0888a03121562003f3b57600080fd5b62003f468862003bce565b9650602088013562003f588162003be3565b9550604088013567ffffffffffffffff8082111562003f7657600080fd5b62003f848b838c0162003ce3565b909750955060608a013591508082111562003f9e57600080fd5b5062003fad8a828b0162003ce3565b909450925050608088013562003fc38162003e6b565b8091505092959891949750929550565b60008060008060008060a0878903121562003fed57600080fd5b62003ff88762003bce565b955060208701356200400a8162003be3565b9450604087013593506060870135620040238162003e3c565b9250608087013567ffffffffffffffff8111156200404057600080fd5b6200404e89828a0162003ce3565b979a9699509497509295939492505050565b600080600080600080600060c0888a0312156200407c57600080fd5b620040878862003bce565b96506020880135620040998162003be3565b9550604088013594506060880135620040b28162003be3565b93506080880135620040c48162003e3c565b925060a088013567ffffffffffffffff811115620040e157600080fd5b620040ef8a828b0162003ce3565b989b979a50959850939692959293505050565b600080604083850312156200411657600080fd5b8235620041238162003be3565b9150602083013562003c3a8162003e3c565b60008060008061046085870312156200414d57600080fd5b8435935062004160866020870162003cd0565b925062004171610420860162003bce565b939692955092936104400135925050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015620041ce578181015183820152602001620041b4565b50506000910152565b60008251620041eb818460208701620041b1565b9190910192915050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200423f576200423f62004182565b604052919050565b600067ffffffffffffffff82111562004264576200426462004182565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620042a257600080fd5b8135620042b9620042b38262004247565b620041f5565b818152846020838601011115620042cf57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156200430257600080fd5b833567ffffffffffffffff808211156200431b57600080fd5b620043298783880162004290565b945060208601359150808211156200434057600080fd5b506200434f8682870162004290565b9250506040840135620043628162003e6b565b809150509250925092565b6000815180845262004387816020860160208601620041b1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606081526000620043ce60608301866200436d565b8281036020840152620043e281866200436d565b91505060ff83166040830152949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b63ffffffff86168152600073ffffffffffffffffffffffffffffffffffffffff80871660208401528086166040840152506080606083015262003acd608083018486620043f6565b73ffffffffffffffffffffffffffffffffffffffff8516815263ffffffff84166020820152606060408201526000620044c5606083018486620043f6565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620045615762004561620044fe565b5060010190565b6060815260006200457e606083018789620043f6565b828103602084015262004593818688620043f6565b91505060ff831660408301529695505050505050565b60008351620045bd818460208801620041b1565b835190830190620045d3818360208801620041b1565b01949350505050565b600061010060ff8c16835263ffffffff808c16602085015273ffffffffffffffffffffffffffffffffffffffff808c166040860152818b166060860152808a166080860152508760a08501528160c08501526200463d8285018789620043f6565b925080851660e085015250509a9950505050505050505050565b8183823760009101908152919050565b6000602082840312156200467a57600080fd5b5051919050565b818103818111156200093d576200093d620044fe565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620046f7828501876200436d565b925080851660e085015250509998505050505050505050565b600181815b808511156200476f57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620047535762004753620044fe565b808516156200476157918102915b93841c939080029062004715565b509250929050565b60008262004788575060016200093d565b8162004797575060006200093d565b8160018114620047b05760028114620047bb57620047db565b60019150506200093d565b60ff841115620047cf57620047cf620044fe565b50506001821b6200093d565b5060208310610133831016604e8410600b841016171562004800575081810a6200093d565b6200480c838362004710565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620048415762004841620044fe565b029392505050565b600062003e35838362004777565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200489757600080fd5b83861115620048a557600080fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015620048f35780818660040360031b1b83161692505b505092915050565b600080600080600080600060e0888a0312156200491757600080fd5b8735620049248162003be3565b96506020880135620049368162003be3565b95506040880135945060608801359350608088013562003ee88162003e6b565b600080600080600080600080610100898b0312156200497457600080fd5b8835620049818162003be3565b97506020890135620049938162003be3565b965060408901359550606089013594506080890135620049b38162003e3c565b935060a0890135620049c58162003e6b565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215620049f557600080fd5b815162003e358162003e6b565b60006020828403121562004a1557600080fd5b815162003e358162003e3c565b60006020828403121562004a3557600080fd5b815167ffffffffffffffff81111562004a4d57600080fd5b8201601f8101841362004a5f57600080fd5b805162004a70620042b38262004247565b81815285602083850101111562004a8657600080fd5b62004a99826020830160208601620041b1565b95945050505050565b60208152600062003e3560208301846200436d56fe6101006040523480156200001257600080fd5b5060405162001b6638038062001b6683398101604081905262000035916200028d565b82826003620000458382620003a1565b506004620000548282620003a1565b50503360c0525060ff811660e052466080819052620000739062000080565b60a052506200046d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000ad6200012e565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6060600380546200013f9062000312565b80601f01602080910402602001604051908101604052809291908181526020018280546200016d9062000312565b8015620001be5780601f106200019257610100808354040283529160200191620001be565b820191906000526020600020905b815481529060010190602001808311620001a057829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f057600080fd5b81516001600160401b03808211156200020d576200020d620001c8565b604051601f8301601f19908116603f01168101908282118183101715620002385762000238620001c8565b816040528381526020925086838588010111156200025557600080fd5b600091505b838210156200027957858201830151818301840152908201906200025a565b600093810190920192909252949350505050565b600080600060608486031215620002a357600080fd5b83516001600160401b0380821115620002bb57600080fd5b620002c987838801620001de565b94506020860151915080821115620002e057600080fd5b50620002ef86828701620001de565b925050604084015160ff811681146200030757600080fd5b809150509250925092565b600181811c908216806200032757607f821691505b6020821081036200034857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039c57600081815260208120601f850160051c81016020861015620003775750805b601f850160051c820191505b81811015620003985782815560010162000383565b5050505b505050565b81516001600160401b03811115620003bd57620003bd620001c8565b620003d581620003ce845462000312565b846200034e565b602080601f8311600181146200040d5760008415620003f45750858301515b600019600386901b1c1916600185901b17855562000398565b600085815260208120601f198616915b828110156200043e578886015182559484019460019091019084016200041d565b50858210156200045d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516116aa620004bc6000396000610237015260008181610307015281816105c001526106a70152600061053a015260008181610379015261050401526116aa6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf1461039b578063dd62ed3e146103ae578063ffa1ad74146103f457600080fd5b8063a457c2d71461034e578063a9059cbb14610361578063cd0d00961461037457600080fd5b806395d89b41116100bd57806395d89b41146102e75780639dc29fac146102ef578063a3c573eb1461030257600080fd5b806370a08231146102915780637ecebe00146102c757600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610261578063395093511461026957806340c10f191461027c57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610430565b60405161019191906113e4565b60405180910390f35b6101ad6101a8366004611479565b6104c2565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad6102043660046114a3565b6104dc565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610191565b6101c1610500565b6101ad610277366004611479565b61055c565b61028f61028a366004611479565b6105a8565b005b6101c161029f3660046114df565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d53660046114df565b60056020526000908152604090205481565b610184610680565b61028f6102fd366004611479565b61068f565b6103297f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad61035c366004611479565b61075e565b6101ad61036f366004611479565b61082f565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b61028f6103a9366004611501565b61083d565b6101c16103bc366004611574565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043f906115a7565b80601f016020809104026020016040519081016040528092919081815260200182805461046b906115a7565b80156104b85780601f1061048d576101008083540402835291602001916104b8565b820191906000526020600020905b81548152906001019060200180831161049b57829003601f168201915b5050505050905090565b6000336104d0818585610b73565b60019150505b92915050565b6000336104ea858285610d27565b6104f5858585610dfe565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610537576105324661106d565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104d090829086906105a3908790611629565b610b73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d4272696467650000000000000000000000000000000060648201526084015b60405180910390fd5b61067c8282611135565b5050565b60606004805461043f906115a7565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d427269646765000000000000000000000000000000006064820152608401610669565b61067c8282611228565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610669565b6104f58286868403610b73565b6000336104d0818585610dfe565b834211156108cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866109268361163c565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610991610500565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610a55573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610ad057508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610669565b610b678a8a8a610b73565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610cb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610df85781811015610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610669565b610df88484848403610b73565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610f44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610df8565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611098610430565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166111b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610669565b80600260008282546111c49190611629565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166112cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610d1a565b600060208083528351808285015260005b81811015611411578581018301518582016040015282016113f5565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461147457600080fd5b919050565b6000806040838503121561148c57600080fd5b61149583611450565b946020939093013593505050565b6000806000606084860312156114b857600080fd5b6114c184611450565b92506114cf60208501611450565b9150604084013590509250925092565b6000602082840312156114f157600080fd5b6114fa82611450565b9392505050565b600080600080600080600060e0888a03121561151c57600080fd5b61152588611450565b965061153360208901611450565b95506040880135945060608801359350608088013560ff8116811461155757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561158757600080fd5b61159083611450565b915061159e60208401611450565b90509250929050565b600181811c908216806115bb57607f821691505b6020821081036115f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156104d6576104d66115fa565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361166d5761166d6115fa565b506001019056fea26469706673582212206fe049be388a1d04319b9913fe6d100c4c8e272fe0f5748eb056bd0622beabcc64736f6c63430008140033a26469706673582212205a6863755e218a86185b7a8974ed88bf11d02370ae341214fc0245f726eb00a064736f6c63430008140033 \ No newline at end of file diff --git a/etherman/smartcontracts/bin/polygonzkevmglobalexitroot.bin b/etherman/smartcontracts/bin/polygonzkevmglobalexitroot.bin index 36c75dfc46..e5812397be 100644 --- a/etherman/smartcontracts/bin/polygonzkevmglobalexitroot.bin +++ b/etherman/smartcontracts/bin/polygonzkevmglobalexitroot.bin @@ -1 +1 @@ -60c060405234801561001057600080fd5b506040516103f83803806103f883398101604081905261002f91610062565b6001600160a01b0391821660a05216608052610095565b80516001600160a01b038116811461005d57600080fd5b919050565b6000806040838503121561007557600080fd5b61007e83610046565b915061008c60208401610046565b90509250929050565b60805160a0516103316100c76000396000818160e901526101bd015260008181610135015261017401526103316000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806333d6247d1161005b57806333d6247d146100c75780633ed691ef146100dc5780635ec6a8df146100e4578063a3c573eb1461013057600080fd5b806301fd904414610082578063257b36321461009e578063319cf735146100be575b600080fd5b61008b60005481565b6040519081526020015b60405180910390f35b61008b6100ac3660046102e2565b60026020526000908152604090205481565b61008b60015481565b6100da6100d53660046102e2565b610157565b005b61008b6102a6565b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610095565b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b60005460015473ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036101a65750600182905581610222565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036101f0576000839055829150610222565b6040517fb49365dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051602080820184905281830185905282518083038401815260609092019092528051910120600090600081815260026020526040812054919250036102a05760008181526002602052604080822042905551849184917f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce39190a35b50505050565b60006102dd600154600054604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b905090565b6000602082840312156102f457600080fd5b503591905056fea2646970667358221220bc23c6d5d3992802bdfd06ef45362230dcda7d33db81b1dc3ef40d86219e81c864736f6c63430008110033 \ No newline at end of file +60c060405234801561001057600080fd5b506040516103f83803806103f883398101604081905261002f91610062565b6001600160a01b0391821660a05216608052610095565b80516001600160a01b038116811461005d57600080fd5b919050565b6000806040838503121561007557600080fd5b61007e83610046565b915061008c60208401610046565b90509250929050565b60805160a0516103316100c76000396000818160e901526101bd015260008181610135015261017401526103316000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806333d6247d1161005b57806333d6247d146100c75780633ed691ef146100dc5780635ec6a8df146100e4578063a3c573eb1461013057600080fd5b806301fd904414610082578063257b36321461009e578063319cf735146100be575b600080fd5b61008b60005481565b6040519081526020015b60405180910390f35b61008b6100ac3660046102e2565b60026020526000908152604090205481565b61008b60015481565b6100da6100d53660046102e2565b610157565b005b61008b6102a6565b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610095565b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b60005460015473ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036101a65750600182905581610222565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036101f0576000839055829150610222565b6040517fb49365dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051602080820184905281830185905282518083038401815260609092019092528051910120600090600081815260026020526040812054919250036102a05760008181526002602052604080822042905551849184917f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce39190a35b50505050565b60006102dd600154600054604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b905090565b6000602082840312156102f457600080fd5b503591905056fea264697066735822122066368a84a416778eb0d212b7acdeed4f6b4a8b676fc470e5579fc4c25caed2f364736f6c63430008140033 \ No newline at end of file diff --git a/etherman/smartcontracts/datacommittee/datacommittee.go b/etherman/smartcontracts/datacommittee/datacommittee.go index 0edf5dc77d..34f3958bcc 100644 --- a/etherman/smartcontracts/datacommittee/datacommittee.go +++ b/etherman/smartcontracts/datacommittee/datacommittee.go @@ -26,6 +26,7 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // DatacommitteeMetaData contains all meta data concerning the Datacommittee contract. @@ -156,11 +157,11 @@ func NewDatacommitteeFilterer(address common.Address, filterer bind.ContractFilt // bindDatacommittee binds a generic wrapper to an already deployed contract. func bindDatacommittee(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(DatacommitteeABI)) + parsed, err := DatacommitteeMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and diff --git a/etherman/smartcontracts/matic/matic.go b/etherman/smartcontracts/matic/matic.go index 38836a1e7e..d721b36431 100644 --- a/etherman/smartcontracts/matic/matic.go +++ b/etherman/smartcontracts/matic/matic.go @@ -26,6 +26,7 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // MaticMetaData contains all meta data concerning the Matic contract. @@ -156,11 +157,11 @@ func NewMaticFilterer(address common.Address, filterer bind.ContractFilterer) (* // bindMatic binds a generic wrapper to an already deployed contract. func bindMatic(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(MaticABI)) + parsed, err := MaticMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and diff --git a/etherman/smartcontracts/mockverifier/mockverifier.go b/etherman/smartcontracts/mockverifier/mockverifier.go index 7438766523..fee6024cdd 100644 --- a/etherman/smartcontracts/mockverifier/mockverifier.go +++ b/etherman/smartcontracts/mockverifier/mockverifier.go @@ -26,6 +26,7 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // MockverifierMetaData contains all meta data concerning the Mockverifier contract. @@ -156,11 +157,11 @@ func NewMockverifierFilterer(address common.Address, filterer bind.ContractFilte // bindMockverifier binds a generic wrapper to an already deployed contract. func bindMockverifier(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(MockverifierABI)) + parsed, err := MockverifierMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and diff --git a/etherman/smartcontracts/polygonzkevm/polygonzkevm.go b/etherman/smartcontracts/polygonzkevm/polygonzkevm.go index a718e0395a..2ddc68add0 100644 --- a/etherman/smartcontracts/polygonzkevm/polygonzkevm.go +++ b/etherman/smartcontracts/polygonzkevm/polygonzkevm.go @@ -26,6 +26,7 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // PolygonZkEVMBatchData is an auto generated low-level Go binding around an user-defined struct. @@ -56,7 +57,7 @@ type PolygonZkEVMInitializePackedParameters struct { // PolygonzkevmMetaData contains all meta data concerning the Polygonzkevm contract. var PolygonzkevmMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIPolygonZkEVMGlobalExitRoot\",\"name\":\"_globalExitRootManager\",\"type\":\"address\"},{\"internalType\":\"contractIERC20Upgradeable\",\"name\":\"_matic\",\"type\":\"address\"},{\"internalType\":\"contractIVerifierRollup\",\"name\":\"_rollupVerifier\",\"type\":\"address\"},{\"internalType\":\"contractIPolygonZkEVMBridge\",\"name\":\"_bridgeAddress\",\"type\":\"address\"},{\"internalType\":\"contractIDataCommittee\",\"name\":\"_dataCommitteeAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_forkID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BatchAlreadyVerified\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BatchNotSequencedOrNotSequenceEnd\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExceedMaxVerifyBatches\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FinalNumBatchBelowLastVerifiedBatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FinalNumBatchDoesNotMatchPendingState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FinalPendingStateNumInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceBatchNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceBatchTimeoutNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceBatchesAlreadyActive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceBatchesOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForcedDataDoesNotMatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GlobalExitRootNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HaltTimeoutNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InitNumBatchAboveLastVerifiedBatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InitNumBatchDoesNotMatchPendingState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRangeBatchTimeTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRangeForceBatchTimeout\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRangeMultiplierBatchFee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewAccInputHashDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewPendingStateTimeoutMustBeLower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewStateRootNotInsidePrime\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewTrustedAggregatorTimeoutMustBeLower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughMaticAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OldAccInputHashDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OldStateRootDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyEmergencyState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyNotEmergencyState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyTrustedAggregator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyTrustedSequencer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PendingStateDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PendingStateInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PendingStateNotConsolidable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PendingStateTimeoutExceedHaltAggregationTimeout\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SequenceZeroBatches\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SequencedTimestampBelowForcedTimestamp\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SequencedTimestampInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StoredRootMustBeDifferentThanNewRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransactionsLengthAboveMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TrustedAggregatorTimeoutExceedHaltAggregationTimeout\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TrustedAggregatorTimeoutNotExpired\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AcceptAdminRole\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ActivateForceBatches\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"numBatch\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"pendingStateNum\",\"type\":\"uint64\"}],\"name\":\"ConsolidatePendingState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EmergencyStateActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EmergencyStateDeactivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"forceBatchNum\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"lastGlobalExitRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sequencer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"transactions\",\"type\":\"bytes\"}],\"name\":\"ForceBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"numBatch\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aggregator\",\"type\":\"address\"}],\"name\":\"OverridePendingState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"storedStateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"provedStateRoot\",\"type\":\"bytes32\"}],\"name\":\"ProveNonDeterministicPendingState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"numBatch\",\"type\":\"uint64\"}],\"name\":\"SequenceBatches\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"numBatch\",\"type\":\"uint64\"}],\"name\":\"SequenceForceBatches\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newforceBatchTimeout\",\"type\":\"uint64\"}],\"name\":\"SetForceBatchTimeout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newMultiplierBatchFee\",\"type\":\"uint16\"}],\"name\":\"SetMultiplierBatchFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newPendingStateTimeout\",\"type\":\"uint64\"}],\"name\":\"SetPendingStateTimeout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newTrustedAggregator\",\"type\":\"address\"}],\"name\":\"SetTrustedAggregator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newTrustedAggregatorTimeout\",\"type\":\"uint64\"}],\"name\":\"SetTrustedAggregatorTimeout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newTrustedSequencer\",\"type\":\"address\"}],\"name\":\"SetTrustedSequencer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newTrustedSequencerURL\",\"type\":\"string\"}],\"name\":\"SetTrustedSequencerURL\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newVerifyBatchTimeTarget\",\"type\":\"uint64\"}],\"name\":\"SetVerifyBatchTimeTarget\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newPendingAdmin\",\"type\":\"address\"}],\"name\":\"TransferAdminRole\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"numBatch\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"forkID\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"UpdateZkEVMVersion\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"numBatch\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aggregator\",\"type\":\"address\"}],\"name\":\"VerifyBatches\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"numBatch\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aggregator\",\"type\":\"address\"}],\"name\":\"VerifyBatchesTrustedAggregator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptAdminRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequencedBatchNum\",\"type\":\"uint64\"}],\"name\":\"activateEmergencyState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activateForceBatches\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"batchNumToStateRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridgeAddress\",\"outputs\":[{\"internalType\":\"contractIPolygonZkEVMBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"calculateRewardPerBatch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newStateRoot\",\"type\":\"uint256\"}],\"name\":\"checkStateRootInsidePrime\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"pendingStateNum\",\"type\":\"uint64\"}],\"name\":\"consolidatePendingState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dataCommitteeAddress\",\"outputs\":[{\"internalType\":\"contractIDataCommittee\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deactivateEmergencyState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"transactions\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"maticAmount\",\"type\":\"uint256\"}],\"name\":\"forceBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forceBatchTimeout\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"forcedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forkID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getForcedBatchFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"initNumBatch\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"finalNewBatch\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"newLocalExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"oldStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"newStateRoot\",\"type\":\"bytes32\"}],\"name\":\"getInputSnarkBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastVerifiedBatch\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalExitRootManager\",\"outputs\":[{\"internalType\":\"contractIPolygonZkEVMGlobalExitRoot\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"trustedSequencer\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"pendingStateTimeout\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"trustedAggregator\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"trustedAggregatorTimeout\",\"type\":\"uint64\"}],\"internalType\":\"structPolygonZkEVM.InitializePackedParameters\",\"name\":\"initializePackedParameters\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"genesisRoot\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"_trustedSequencerURL\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_networkName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_version\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isEmergencyState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isForcedBatchDisallowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"pendingStateNum\",\"type\":\"uint64\"}],\"name\":\"isPendingStateConsolidable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchSequenced\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastForceBatch\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastForceBatchSequenced\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPendingState\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPendingStateConsolidated\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastTimestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastVerifiedBatch\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"matic\",\"outputs\":[{\"internalType\":\"contractIERC20Upgradeable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplierBatchFee\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"networkName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"initPendingStateNum\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"finalPendingStateNum\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"initNumBatch\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"finalNewBatch\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"newLocalExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"newStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[24]\",\"name\":\"proof\",\"type\":\"bytes32[24]\"}],\"name\":\"overridePendingState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingStateTimeout\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"pendingStateTransitions\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBatch\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"exitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"initPendingStateNum\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"finalPendingStateNum\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"initNumBatch\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"finalNewBatch\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"newLocalExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"newStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[24]\",\"name\":\"proof\",\"type\":\"bytes32[24]\"}],\"name\":\"proveNonDeterministicPendingState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupVerifier\",\"outputs\":[{\"internalType\":\"contractIVerifierRollup\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"transactions\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"transactionsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"globalExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minForcedTimestamp\",\"type\":\"uint64\"}],\"internalType\":\"structPolygonZkEVM.BatchData[]\",\"name\":\"batches\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"l2Coinbase\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signaturesAndAddrs\",\"type\":\"bytes\"}],\"name\":\"sequenceBatches\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"transactions\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"globalExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"minForcedTimestamp\",\"type\":\"uint64\"}],\"internalType\":\"structPolygonZkEVM.ForcedBatchData[]\",\"name\":\"batches\",\"type\":\"tuple[]\"}],\"name\":\"sequenceForceBatches\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"sequencedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"accInputHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequencedTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"previousLastBatchSequenced\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newBatchFee\",\"type\":\"uint16\"}],\"name\":\"setBatchFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newforceBatchTimeout\",\"type\":\"uint64\"}],\"name\":\"setForceBatchTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newMultiplierBatchFee\",\"type\":\"uint16\"}],\"name\":\"setMultiplierBatchFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newPendingStateTimeout\",\"type\":\"uint64\"}],\"name\":\"setPendingStateTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newTrustedAggregator\",\"type\":\"address\"}],\"name\":\"setTrustedAggregator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newTrustedAggregatorTimeout\",\"type\":\"uint64\"}],\"name\":\"setTrustedAggregatorTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newTrustedSequencer\",\"type\":\"address\"}],\"name\":\"setTrustedSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newTrustedSequencerURL\",\"type\":\"string\"}],\"name\":\"setTrustedSequencerURL\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newVerifyBatchTimeTarget\",\"type\":\"uint64\"}],\"name\":\"setVerifyBatchTimeTarget\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPendingAdmin\",\"type\":\"address\"}],\"name\":\"transferAdminRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trustedAggregator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trustedAggregatorTimeout\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trustedSequencer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trustedSequencerURL\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifyBatchTimeTarget\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"pendingStateNum\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"initNumBatch\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"finalNewBatch\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"newLocalExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"newStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[24]\",\"name\":\"proof\",\"type\":\"bytes32[24]\"}],\"name\":\"verifyBatches\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"pendingStateNum\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"initNumBatch\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"finalNewBatch\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"newLocalExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"newStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[24]\",\"name\":\"proof\",\"type\":\"bytes32[24]\"}],\"name\":\"verifyBatchesTrustedAggregator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101606040523480156200001257600080fd5b5060405162006263380380620062638339810160408190526200003591620000ac565b6001600160a01b0396871660c05294861660805292851660a05290841660e052909216610100526001600160401b039182166101205216610140526200014f565b6001600160a01b03811681146200008c57600080fd5b50565b80516001600160401b0381168114620000a757600080fd5b919050565b600080600080600080600060e0888a031215620000c857600080fd5b8751620000d58162000076565b6020890151909750620000e88162000076565b6040890151909650620000fb8162000076565b60608901519095506200010e8162000076565b6080890151909450620001218162000076565b92506200013160a089016200008f565b91506200014160c089016200008f565b905092959891949750929550565b60805160a05160c05160e0516101005161012051610140516160346200022f600039600081816106c001528181610e3c01526129bd01526000818161082d0152610e120152600081816105cb01526136970152600081816107f301528181613056015281816138e60152614d1301526000818161099901528181610faf01528181611180015281816119b80152818161343f01528181613b0901526148d9015260008181610a4601528181614220015261468c0152600081816108e901528181611ea9015281816138b401528181613add015261432101526160346000f3fe608060405234801561001057600080fd5b50600436106103d05760003560e01c80638c3d7301116101ff578063cfa8ed471161011a578063e91cbddf116100ad578063f2fde38b1161007c578063f2fde38b14610ace578063f4d0841214610ae1578063f851a44014610af4578063f8b823e414610b1457600080fd5b8063e91cbddf14610a68578063eaeb077b14610a7b578063ed6b010414610a8e578063f14916d614610abb57600080fd5b8063d939b315116100e9578063d939b315146109e1578063dbc1697614610a09578063e7a7ed0214610a11578063e8bf92ed14610a4157600080fd5b8063cfa8ed4714610965578063d02103ca14610994578063d2e129f9146109bb578063d8d1091b146109ce57600080fd5b8063adc879e911610192578063ba58ae3911610161578063ba58ae391461090b578063c0ed84e01461091e578063c754c7ed14610926578063c89e42df1461095257600080fd5b8063adc879e914610828578063afd23cbe1461084f578063b4d63f581461087d578063b6b0b097146108e457600080fd5b80639c9f3dfe116101ce5780639c9f3dfe146107c8578063a066215c146107db578063a3c573eb146107ee578063ada8f9191461081557600080fd5b80638c3d7301146107875780638da5cb5b1461078f57806399f5634e146107ad5780639aa972a3146107b557600080fd5b80634a910e6a116102ef5780636b8616ce116102825780637fcb3653116102515780637fcb3653146106a7578063831c7ead146106bb578063837a4738146106e2578063841b24d71461075757600080fd5b80636b8616ce146106595780636ff512cc14610679578063715018a61461068c5780637215541a1461069457600080fd5b8063542028d5116102be578063542028d51461062e5780635ec9195814610636578063604691691461063e578063621dd4111461064657600080fd5b80634a910e6a146105b35780634df61d24146105c65780634e487706146105ed5780635392c5e01461060057600080fd5b80632b0006fa11610367578063423fa85611610336578063423fa856146105375780634560526714610557578063458c04771461057f5780634a1a89a71461059357600080fd5b80632b0006fa146104eb5780632c1f816a146104fe578063383b3be814610511578063394218e91461052457600080fd5b806319d8ac61116103a357806319d8ac6114610453578063220d789914610467578063267822471461047a57806329878983146104bf57600080fd5b80630a0d9fbe146103d5578063107bf28c1461040c57806315064c96146104215780631816b7e51461043e575b600080fd5b606f546103ee90610100900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b610414610b1d565b6040516104039190615421565b606f5461042e9060ff1681565b6040519015158152602001610403565b61045161044c36600461543b565b610bab565b005b6073546103ee9067ffffffffffffffff1681565b610414610475366004615477565b610cc3565b607b5461049a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610403565b60745461049a9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104516104f93660046154dc565b610e9a565b61045161050c366004615544565b61106a565b61042e61051f3660046155be565b611278565b6104516105323660046155be565b6112ce565b6073546103ee9068010000000000000000900467ffffffffffffffff1681565b6073546103ee90700100000000000000000000000000000000900467ffffffffffffffff1681565b6079546103ee9067ffffffffffffffff1681565b6079546103ee9068010000000000000000900467ffffffffffffffff1681565b6104516105c13660046155be565b611452565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b6104516105fb3660046155be565b611505565b61062061060e3660046155be565b60756020526000908152604090205481565b604051908152602001610403565b610414611689565b610451611696565b610620611796565b6104516106543660046154dc565b6117ac565b6106206106673660046155be565b60716020526000908152604090205481565b6104516106873660046155fd565b611b3c565b610451611c11565b6104516106a23660046155be565b611c25565b6074546103ee9067ffffffffffffffff1681565b6103ee7f000000000000000000000000000000000000000000000000000000000000000081565b61072b6106f0366004615618565b60786020526000908152604090208054600182015460029092015467ffffffffffffffff808316936801000000000000000090930416919084565b6040805167ffffffffffffffff9586168152949093166020850152918301526060820152608001610403565b6079546103ee907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b610451611d95565b60335473ffffffffffffffffffffffffffffffffffffffff1661049a565b610620611e61565b6104516107c3366004615544565b611fba565b6104516107d63660046155be565b61206b565b6104516107e93660046155be565b6121e7565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b6104516108233660046155fd565b6122ed565b6103ee7f000000000000000000000000000000000000000000000000000000000000000081565b606f5461086a906901000000000000000000900461ffff1681565b60405161ffff9091168152602001610403565b6108be61088b3660046155be565b6072602052600090815260409020805460019091015467ffffffffffffffff808216916801000000000000000090041683565b6040805193845267ffffffffffffffff9283166020850152911690820152606001610403565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b61042e610919366004615618565b6123b1565b6103ee61243b565b607b546103ee9074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b61045161096036600461570b565b612490565b606f5461049a906b010000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b6104516109c9366004615789565b61251d565b6104516109dc366004615881565b612a61565b6079546103ee90700100000000000000000000000000000000900467ffffffffffffffff1681565b610451613003565b6073546103ee907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b610451610a763660046158c3565b6130dc565b610451610a89366004615947565b6139a7565b607b5461042e907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610451610ac93660046155fd565b613d9d565b610451610adc3660046155fd565b613e6f565b610451610aef36600461543b565b613f23565b607a5461049a9073ffffffffffffffffffffffffffffffffffffffff1681565b61062060705481565b60778054610b2a90615993565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5690615993565b8015610ba35780601f10610b7857610100808354040283529160200191610ba3565b820191906000526020600020905b815481529060010190602001808311610b8657829003601f168201915b505050505081565b607a5473ffffffffffffffffffffffffffffffffffffffff163314610bfc576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88161ffff161080610c1557506103ff8161ffff16115b15610c4c576040517f4c2533c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff16690100000000000000000061ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b67ffffffffffffffff8086166000818152607260205260408082205493881682529020546060929115801590610cf7575081155b15610d2e576040517f6818c29e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80610d65576040517f66385b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d6e846123b1565b610da4576040517f176b913c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b166020820152603481019690965260548601929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c098891b811660748701527f0000000000000000000000000000000000000000000000000000000000000000891b8116607c8701527f0000000000000000000000000000000000000000000000000000000000000000891b81166084870152608c86019490945260ac85015260cc840194909452509290931b90911660ec830152805180830360d401815260f4909201905290565b60745468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610ef7576040517fbbcbbc0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f05868686868686613f7d565b607480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86811691821790925560009081526075602052604090208390556079541615610f8057607980547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690555b6040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b15801561100857600080fd5b505af115801561101c573d6000803e3d6000fd5b505060405184815233925067ffffffffffffffff871691507fcb339b570a7f0b25afa7333371ff11192092a0aeace12b671f4c212f2815c6fe906020015b60405180910390a3505050505050565b60745468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146110c7576040517fbbcbbc0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110d687878787878787614355565b607480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8681169182179092556000908152607560205260409020839055607954161561115157607980547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690555b6040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156111d957600080fd5b505af11580156111ed573d6000803e3d6000fd5b50506079805477ffffffffffffffffffffffffffffffffffffffffffffffff167a093a800000000000000000000000000000000000000000000000001790555050604051828152339067ffffffffffffffff8616907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a350505050505050565b60795467ffffffffffffffff828116600090815260786020526040812054909242926112bc9270010000000000000000000000000000000090920481169116615a15565b67ffffffffffffffff16111592915050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331461131f576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115611366576040517f1d06e87900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff166113d55760795467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908216106113d5576040517f401636df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6079805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610cb8565b60745468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114f957606f5460ff16156114ba576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c381611278565b6114f9576040517f0ce9e4a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115028161478f565b50565b607a5473ffffffffffffffffffffffffffffffffffffffff163314611556576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff8216111561159d576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1661160857607b5467ffffffffffffffff74010000000000000000000000000000000000000000909104811690821610611608576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b80547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b90602001610cb8565b60768054610b2a90615993565b607a5473ffffffffffffffffffffffffffffffffffffffff1633146116e7576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b547c0100000000000000000000000000000000000000000000000000000000900460ff16611743576040517ff6ba91a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b80547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690556040517f854dd6ce5a1445c4c54388b21cffd11cf5bba1b9e763aec48ce3da75d617412f90600090a1565b600060705460646117a79190615a3d565b905090565b606f5460ff16156117e9576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60795467ffffffffffffffff858116600090815260726020526040902060010154429261183692780100000000000000000000000000000000000000000000000090910481169116615a15565b67ffffffffffffffff161115611878576040517f8a0704d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86118858686615a54565b67ffffffffffffffff1611156118c7576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118d5868686868686613f7d565b607054156118e6576118e6846149a2565b607954700100000000000000000000000000000000900467ffffffffffffffff16600003611a2e57607480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8681169182179092556000908152607560205260409020839055607954161561198957607980547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690555b6040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611a1157600080fd5b505af1158015611a25573d6000803e3d6000fd5b50505050611afe565b611a36614b68565b6079805467ffffffffffffffff16906000611a5083615a75565b825467ffffffffffffffff9182166101009390930a92830292820219169190911790915560408051608081018252428316815287831660208083019182528284018981526060840189815260795487166000908152607890935294909120925183549251861668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009093169516949094171781559151600183015551600290910155505b604051828152339067ffffffffffffffff8616907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200161105a565b607a5473ffffffffffffffffffffffffffffffffffffffff163314611b8d576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fff0000000000000000000000000000000000000000ffffffffffffffffffffff166b01000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610cb8565b611c19614c19565b611c236000614c9a565b565b60335473ffffffffffffffffffffffffffffffffffffffff163314611d8d576000611c4e61243b565b90508067ffffffffffffffff168267ffffffffffffffff1611611c9d576040517f812a372d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff6801000000000000000090910481169083161180611ce3575067ffffffffffffffff80831660009081526072602052604090206001015416155b15611d1a576040517f98c5c01400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8083166000908152607260205260409020600101544291611d499162093a809116615a15565b67ffffffffffffffff161115611d8b576040517fd257555a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b611502614d11565b607b5473ffffffffffffffffffffffffffffffffffffffff163314611de6576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b54607a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f149190615a9c565b90506000611f2061243b565b60735467ffffffffffffffff680100000000000000008204811691611f789170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416615a54565b611f829190615a15565b611f8c9190615a54565b67ffffffffffffffff16905080600003611fa95760009250505090565b611fb38183615ae4565b9250505090565b606f5460ff1615611ff7576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61200687878787878787614355565b67ffffffffffffffff84166000908152607560209081526040918290205482519081529081018490527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612062614d11565b50505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff1633146120bc576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115612103576040517fcc96507000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1661216a5760795467ffffffffffffffff70010000000000000000000000000000000090910481169082161061216a576040517f48a05a9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607980547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610cb8565b607a5473ffffffffffffffffffffffffffffffffffffffff163314612238576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620151808167ffffffffffffffff16111561227f576040517fe067dfe800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff1661010067ffffffffffffffff8416908102919091179091556040519081527f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c2890602001610cb8565b607a5473ffffffffffffffffffffffffffffffffffffffff16331461233e576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610cb8565b600067ffffffff0000000167ffffffffffffffff83161080156123e9575067ffffffff00000001604083901c67ffffffffffffffff16105b801561240a575067ffffffff00000001608083901c67ffffffffffffffff16105b8015612421575067ffffffff0000000160c083901c105b1561242e57506001919050565b506000919050565b919050565b60795460009067ffffffffffffffff161561247f575060795467ffffffffffffffff9081166000908152607860205260409020546801000000000000000090041690565b5060745467ffffffffffffffff1690565b607a5473ffffffffffffffffffffffffffffffffffffffff1633146124e1576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60766124ed8282615b3e565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610cb89190615421565b600054610100900460ff161580801561253d5750600054600160ff909116105b806125575750303b158015612557575060005460ff166001145b6125e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561264657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61265360208801886155fd565b607a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556126a860408801602089016155fd565b606f805473ffffffffffffffffffffffffffffffffffffffff929092166b010000000000000000000000027fff0000000000000000000000000000000000000000ffffffffffffffffffffff90921691909117905561270d60808801606089016155fd565b6074805473ffffffffffffffffffffffffffffffffffffffff9290921668010000000000000000027fffffffff0000000000000000000000000000000000000000ffffffffffffffff9092169190911790556000805260756020527ff9e3fbf150b7a0077118526f473c53cb4734f166167e2c6213e3567dd390b4ad86905560766127988682615b3e565b5060776127a58582615b3e565b5062093a806127ba6060890160408a016155be565b67ffffffffffffffff1611156127fc576040517fcc96507000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61280c60608801604089016155be565b6079805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff90921691909117905562093a8061286e60a0890160808a016155be565b67ffffffffffffffff1611156128b0576040517f1d06e87900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c060a08801608089016155be565b6079805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff93909316929092029190911790556000607055606f80547fffffffffffffffffffffffffffffffffffffffffff00000000000000000000ff166a03ea000000000000070800179055607b80547fffffff000000000000000000ffffffffffffffffffffffffffffffffffffffff167c0100000000000697800000000000000000000000000000000000000000179055612998614d99565b7fed7be53c9f1a96a481223b15568a5b1a475e01a74b347d6ca187c8bf0c078cd660007f000000000000000000000000000000000000000000000000000000000000000085856040516129ee9493929190615ca1565b60405180910390a1801561206257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b607b547c0100000000000000000000000000000000000000000000000000000000900460ff1615612abe576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1615612afb576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000819003612b37576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612b73576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612bbe918491700100000000000000000000000000000000900416615cd9565b1115612bf6576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff680100000000000000008204811660008181526072602052604081205491937001000000000000000000000000000000009004909216915b84811015612ea0576000878783818110612c5657612c56615cec565b9050602002810190612c689190615d1b565b612c7190615d59565b905083612c7d81615a75565b82518051602091820120818501516040808701519051949950919450600093612cdf9386939101928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8916600090815260719093529120549091508114612d68576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8616600090815260716020526040812055612d8d600189615dd5565b8403612dfc5742607b60149054906101000a900467ffffffffffffffff168460400151612dba9190615a15565b67ffffffffffffffff161115612dfc576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020838101516040805192830188905282018490526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012094505050508080612e9890615de8565b915050612c3a565b50612eab8484615a15565b6073805467ffffffffffffffff4281167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009092168217808455604080516060810182528781526020808201958652680100000000000000009384900485168284019081528589166000818152607290935284832093518455965160019390930180549151871686027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921693871693909317179091558554938916700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff938602939093167fffffffffffffffff00000000000000000000000000000000ffffffffffffffff90941693909317919091179093559151929550917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a2505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff163314613054576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156130bc57600080fd5b505af11580156130d0573d6000803e3d6000fd5b50505050611c23614e39565b606f5460ff1615613119576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f546b010000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314613179576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360008190036131b5576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156131f1576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff6801000000000000000082048116600081815260726020526040812054838516949293700100000000000000000000000000000000909304909216919082905b868110156136535760008c8c8381811061325957613259615cec565b905060200281019061326b9190615e20565b61327490615e54565b905060008961328c5781518051602090910120613292565b81602001515b608083015190915067ffffffffffffffff16156133fc57856132b381615a75565b9650506000818360400151846080015160405160200161330b93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a16600090815260719093529120549091508114613394576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff80881660009081526071602052604081205560808401516060850151908216911610156133f6576040517f7f7ab87200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50613539565b6040820151158015906134c3575060408281015190517f257b363200000000000000000000000000000000000000000000000000000000815260048101919091527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063257b3632906024016020604051808303816000875af115801561349d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c19190615a9c565b155b156134fa576040517f73bd668d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151516201d4c01015613539576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8767ffffffffffffffff16826060015167ffffffffffffffff16108061356c575042826060015167ffffffffffffffff16115b156135a3576040517fea82791600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040828101516060808501518351602081018a90529384018590528382019290925260c09190911b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528d901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209450816060015197505050808061364b90615de8565b91505061323d565b508615613701576040517fc7a823e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c7a823e0906136d09085908c908c90600401615eeb565b60006040518083038186803b1580156136e857600080fd5b505afa1580156136fc573d6000803e3d6000fd5b505050505b61370b8685615a15565b60735490945067ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169084161115613774576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006137808285615a54565b6137949067ffffffffffffffff1688615dd5565b604080516060810182528581524267ffffffffffffffff908116602080840191825260738054680100000000000000009081900485168688019081528d861660008181526072909552979093209551865592516001909501805492519585167fffffffffffffffffffffffffffffffff000000000000000000000000000000009384161795851684029590951790945583548c841691161793029290921790559091508281169085161461388a57607380547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8716021790555b6138dc33308360705461389d9190615a3d565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016929190614ec8565b6138e4614b68565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561394c57600080fd5b505af1158015613960573d6000803e3d6000fd5b505060405167ffffffffffffffff881692507f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce9150600090a2505050505050505050505050565b607b547c0100000000000000000000000000000000000000000000000000000000900460ff1615613a04576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1615613a41576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613a4b611796565b905081811115613a87576040517f4732fdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388831115613ac3576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b0573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084614ec8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b969190615a9c565b60738054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613bd083615a75565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508484604051613c07929190615f0e565b60408051918290038220602083015281018290527fffffffffffffffff0000000000000000000000000000000000000000000000004260c01b166060820152606801604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206073547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526071909352912055323303613d3757607354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613d96565b607360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338888604051613d8d9493929190615f1e565b60405180910390a25b5050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff163314613dee576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610cb8565b613e77614c19565b73ffffffffffffffffffffffffffffffffffffffff8116613f1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016125df565b61150281614c9a565b607a5473ffffffffffffffffffffffffffffffffffffffff163314613f74576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff16607055565b600080613f8861243b565b905067ffffffffffffffff8816156140585760795467ffffffffffffffff9081169089161115613fe4576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8089166000908152607860205260409020600281015481549094509091898116680100000000000000009092041614614052576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506140f9565b67ffffffffffffffff87166000908152607560205260409020549150816140ab576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168767ffffffffffffffff1611156140f9576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168667ffffffffffffffff1611614146576040517fb9b18f5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141558888888689610cc3565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161418a9190615f54565b602060405180830381855afa1580156141a7573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906141ca9190615a9c565b6141d49190615f66565b6040805160208101825282815290517f9121da8a00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691639121da8a9161425691899190600401615f7a565b602060405180830381865afa158015614273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142979190615fb5565b6142cd576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6070546000036142e0575050505061434d565b614348336142ee858b615a54565b67ffffffffffffffff16614300611e61565b61430a9190615a3d565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190614faa565b505050505b505050505050565b600067ffffffffffffffff8816156144235760795467ffffffffffffffff90811690891611156143b1576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5067ffffffffffffffff808816600090815260786020526040902060028101548154909288811668010000000000000000909204161461441d576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506144bf565b5067ffffffffffffffff851660009081526075602052604090205480614475576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60745467ffffffffffffffff90811690871611156144bf576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60795467ffffffffffffffff90811690881611806144f157508767ffffffffffffffff168767ffffffffffffffff1611155b80614518575060795467ffffffffffffffff68010000000000000000909104811690881611155b1561454f576040517fbfa7079f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8781166000908152607860205260409020546801000000000000000090048116908616146145b2576040517f32a2a77f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006145c18787878588610cc3565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516145f69190615f54565b602060405180830381855afa158015614613573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146369190615a9c565b6146409190615f66565b6040805160208101825282815290517f9121da8a00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691639121da8a916146c291889190600401615f7a565b602060405180830381865afa1580156146df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147039190615fb5565b614739576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8916600090815260786020526040902060020154859003614348576040517fa47276bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60795467ffffffffffffffff6801000000000000000090910481169082161115806147c9575060795467ffffffffffffffff908116908216115b15614800576040517fd086b70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff818116600081815260786020908152604080832080546074805468010000000000000000928390049098167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090981688179055600282015487865260759094529382902092909255607980547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff169390940292909217909255600182015490517f33d6247d00000000000000000000000000000000000000000000000000000000815260048101919091529091907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b15801561493257600080fd5b505af1158015614946573d6000803e3d6000fd5b505050508267ffffffffffffffff168167ffffffffffffffff167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161499591815260200190565b60405180910390a3505050565b60006149ac61243b565b9050816000806149bc8484615a54565b606f5467ffffffffffffffff91821692506000916149e09161010090041642615dd5565b90505b8467ffffffffffffffff168467ffffffffffffffff1614614a6b5767ffffffffffffffff80851660009081526072602052604090206001810154909116821015614a4957600181015468010000000000000000900467ffffffffffffffff169450614a65565b614a538686615a54565b67ffffffffffffffff16935050614a6b565b506149e3565b6000614a778484615dd5565b905083811015614ace57808403600c8111614a925780614a95565b600c5b9050806103e80a81606f60099054906101000a900461ffff1661ffff160a6070540281614ac457614ac4615ab5565b0460705550614b3e565b838103600c8111614adf5780614ae2565b600c5b90506000816103e80a82606f60099054906101000a900461ffff1661ffff160a670de0b6b3a76400000281614b1957614b19615ab5565b04905080607054670de0b6b3a76400000281614b3757614b37615ab5565b0460705550505b683635c9adc5dea000006070541115614b6357683635c9adc5dea00000607055612062565b612062565b60795467ffffffffffffffff680100000000000000008204811691161115611c2357607954600090614bb19068010000000000000000900467ffffffffffffffff166001615a15565b9050614bbc81611278565b1561150257607954600090600290614bdf90849067ffffffffffffffff16615a54565b614be99190615fd7565b614bf39083615a15565b9050614bfe81611278565b15614c1057614c0c8161478f565b5050565b614c0c8261478f565b60335473ffffffffffffffffffffffffffffffffffffffff163314611c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016125df565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614d7957600080fd5b505af1158015614d8d573d6000803e3d6000fd5b50505050611c23615005565b600054610100900460ff16614e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016125df565b611c2333614c9a565b606f5460ff16614e75576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052614fa49085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152615098565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526150009084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401614f22565b505050565b606f5460ff1615615042576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006150fa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166151a49092919063ffffffff16565b80519091501561500057808060200190518101906151189190615fb5565b615000576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016125df565b60606151b384846000856151bb565b949350505050565b60608247101561524d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016125df565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516152769190615f54565b60006040518083038185875af1925050503d80600081146152b3576040519150601f19603f3d011682016040523d82523d6000602084013e6152b8565b606091505b50915091506152c9878383876152d4565b979650505050505050565b6060831561536a5782516000036153635773ffffffffffffffffffffffffffffffffffffffff85163b615363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016125df565b50816151b3565b6151b3838381511561537f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df9190615421565b60005b838110156153ce5781810151838201526020016153b6565b50506000910152565b600081518084526153ef8160208601602086016153b3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061543460208301846153d7565b9392505050565b60006020828403121561544d57600080fd5b813561ffff8116811461543457600080fd5b803567ffffffffffffffff8116811461243657600080fd5b600080600080600060a0868803121561548f57600080fd5b6154988661545f565b94506154a66020870161545f565b94979496505050506040830135926060810135926080909101359150565b8061030081018310156154d657600080fd5b92915050565b6000806000806000806103a087890312156154f657600080fd5b6154ff8761545f565b955061550d6020880161545f565b945061551b6040880161545f565b935060608701359250608087013591506155388860a089016154c4565b90509295509295509295565b60008060008060008060006103c0888a03121561556057600080fd5b6155698861545f565b96506155776020890161545f565b95506155856040890161545f565b94506155936060890161545f565b93506080880135925060a088013591506155b08960c08a016154c4565b905092959891949750929550565b6000602082840312156155d057600080fd5b6154348261545f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461243657600080fd5b60006020828403121561560f57600080fd5b615434826155d9565b60006020828403121561562a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261567157600080fd5b813567ffffffffffffffff8082111561568c5761568c615631565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156156d2576156d2615631565b816040528381528660208588010111156156eb57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561571d57600080fd5b813567ffffffffffffffff81111561573457600080fd5b6151b384828501615660565b60008083601f84011261575257600080fd5b50813567ffffffffffffffff81111561576a57600080fd5b60208301915083602082850101111561578257600080fd5b9250929050565b6000806000806000808688036101208112156157a457600080fd5b60a08112156157b257600080fd5b5086955060a0870135945060c087013567ffffffffffffffff808211156157d857600080fd5b6157e48a838b01615660565b955060e08901359150808211156157fa57600080fd5b6158068a838b01615660565b945061010089013591508082111561581d57600080fd5b5061582a89828a01615740565b979a9699509497509295939492505050565b60008083601f84011261584e57600080fd5b50813567ffffffffffffffff81111561586657600080fd5b6020830191508360208260051b850101111561578257600080fd5b6000806020838503121561589457600080fd5b823567ffffffffffffffff8111156158ab57600080fd5b6158b78582860161583c565b90969095509350505050565b6000806000806000606086880312156158db57600080fd5b853567ffffffffffffffff808211156158f357600080fd5b6158ff89838a0161583c565b9097509550859150615913602089016155d9565b9450604088013591508082111561592957600080fd5b5061593688828901615740565b969995985093965092949392505050565b60008060006040848603121561595c57600080fd5b833567ffffffffffffffff81111561597357600080fd5b61597f86828701615740565b909790965060209590950135949350505050565b600181811c908216806159a757607f821691505b6020821081036159e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff818116838216019080821115615a3657615a366159e6565b5092915050565b80820281158282048414176154d6576154d66159e6565b67ffffffffffffffff828116828216039080821115615a3657615a366159e6565b600067ffffffffffffffff808316818103615a9257615a926159e6565b6001019392505050565b600060208284031215615aae57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615af357615af3615ab5565b500490565b601f82111561500057600081815260208120601f850160051c81016020861015615b1f5750805b601f850160051c820191505b8181101561434d57828155600101615b2b565b815167ffffffffffffffff811115615b5857615b58615631565b615b6c81615b668454615993565b84615af8565b602080601f831160018114615bbf5760008415615b895750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561434d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015615c0c57888601518255948401946001909101908401615bed565b5085821015615c4857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600067ffffffffffffffff808716835280861660208401525060606040830152615ccf606083018486615c58565b9695505050505050565b808201808211156154d6576154d66159e6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112615d4f57600080fd5b9190910192915050565b600060608236031215615d6b57600080fd5b6040516060810167ffffffffffffffff8282108183111715615d8f57615d8f615631565b816040528435915080821115615da457600080fd5b50615db136828601615660565b82525060208301356020820152615dca6040840161545f565b604082015292915050565b818103818111156154d6576154d66159e6565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e1957615e196159e6565b5060010190565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112615d4f57600080fd5b600060a08236031215615e6657600080fd5b60405160a0810167ffffffffffffffff8282108183111715615e8a57615e8a615631565b816040528435915080821115615e9f57600080fd5b50615eac36828601615660565b8252506020830135602082015260408301356040820152615ecf6060840161545f565b6060820152615ee06080840161545f565b608082015292915050565b838152604060208201526000615f05604083018486615c58565b95945050505050565b8183823760009101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152606060408201526000615ccf606083018486615c58565b60008251615d4f8184602087016153b3565b600082615f7557615f75615ab5565b500690565b61032081016103008085843782018360005b6001811015615fab578151835260209283019290910190600101615f8c565b5050509392505050565b600060208284031215615fc757600080fd5b8151801515811461543457600080fd5b600067ffffffffffffffff80841680615ff257615ff2615ab5565b9216919091049291505056fea2646970667358221220931e3517df23b5e33f6f7298913c38b05b3748f81cc1a6936747c17f7149f97464736f6c63430008140033", + Bin: "0x6101606040523480156200001257600080fd5b5060405162006224380380620062248339810160408190526200003591620000ac565b6001600160a01b0396871660c05294861660805292851660a05290841660e052909216610100526001600160401b039182166101205216610140526200014f565b6001600160a01b03811681146200008c57600080fd5b50565b80516001600160401b0381168114620000a757600080fd5b919050565b600080600080600080600060e0888a031215620000c857600080fd5b8751620000d58162000076565b6020890151909750620000e88162000076565b6040890151909650620000fb8162000076565b60608901519095506200010e8162000076565b6080890151909450620001218162000076565b92506200013160a089016200008f565b91506200014160c089016200008f565b905092959891949750929550565b60805160a05160c05160e051610100516101205161014051615ff56200022f600039600081816106c001528181610e3c01526129bd01526000818161082d0152610e120152600081816105cb01526136580152600081816107f301528181613056015281816138a70152614cd401526000818161099901528181610faf01528181611180015281816119b80152818161343f01528181613aca015261489a015260008181610a46015281816141e1015261464d0152600081816108e901528181611ea90152818161387501528181613a9e01526142e20152615ff56000f3fe608060405234801561001057600080fd5b50600436106103d05760003560e01c80638c3d7301116101ff578063cfa8ed471161011a578063e91cbddf116100ad578063f2fde38b1161007c578063f2fde38b14610ace578063f4d0841214610ae1578063f851a44014610af4578063f8b823e414610b1457600080fd5b8063e91cbddf14610a68578063eaeb077b14610a7b578063ed6b010414610a8e578063f14916d614610abb57600080fd5b8063d939b315116100e9578063d939b315146109e1578063dbc1697614610a09578063e7a7ed0214610a11578063e8bf92ed14610a4157600080fd5b8063cfa8ed4714610965578063d02103ca14610994578063d2e129f9146109bb578063d8d1091b146109ce57600080fd5b8063adc879e911610192578063ba58ae3911610161578063ba58ae391461090b578063c0ed84e01461091e578063c754c7ed14610926578063c89e42df1461095257600080fd5b8063adc879e914610828578063afd23cbe1461084f578063b4d63f581461087d578063b6b0b097146108e457600080fd5b80639c9f3dfe116101ce5780639c9f3dfe146107c8578063a066215c146107db578063a3c573eb146107ee578063ada8f9191461081557600080fd5b80638c3d7301146107875780638da5cb5b1461078f57806399f5634e146107ad5780639aa972a3146107b557600080fd5b80634a910e6a116102ef5780636b8616ce116102825780637fcb3653116102515780637fcb3653146106a7578063831c7ead146106bb578063837a4738146106e2578063841b24d71461075757600080fd5b80636b8616ce146106595780636ff512cc14610679578063715018a61461068c5780637215541a1461069457600080fd5b8063542028d5116102be578063542028d51461062e5780635ec9195814610636578063604691691461063e578063621dd4111461064657600080fd5b80634a910e6a146105b35780634df61d24146105c65780634e487706146105ed5780635392c5e01461060057600080fd5b80632b0006fa11610367578063423fa85611610336578063423fa856146105375780634560526714610557578063458c04771461057f5780634a1a89a71461059357600080fd5b80632b0006fa146104eb5780632c1f816a146104fe578063383b3be814610511578063394218e91461052457600080fd5b806319d8ac61116103a357806319d8ac6114610453578063220d789914610467578063267822471461047a57806329878983146104bf57600080fd5b80630a0d9fbe146103d5578063107bf28c1461040c57806315064c96146104215780631816b7e51461043e575b600080fd5b606f546103ee90610100900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b610414610b1d565b60405161040391906153e2565b606f5461042e9060ff1681565b6040519015158152602001610403565b61045161044c3660046153fc565b610bab565b005b6073546103ee9067ffffffffffffffff1681565b610414610475366004615438565b610cc3565b607b5461049a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610403565b60745461049a9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104516104f936600461549d565b610e9a565b61045161050c366004615505565b61106a565b61042e61051f36600461557f565b611278565b61045161053236600461557f565b6112ce565b6073546103ee9068010000000000000000900467ffffffffffffffff1681565b6073546103ee90700100000000000000000000000000000000900467ffffffffffffffff1681565b6079546103ee9067ffffffffffffffff1681565b6079546103ee9068010000000000000000900467ffffffffffffffff1681565b6104516105c136600461557f565b611452565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b6104516105fb36600461557f565b611505565b61062061060e36600461557f565b60756020526000908152604090205481565b604051908152602001610403565b610414611689565b610451611696565b610620611796565b61045161065436600461549d565b6117ac565b61062061066736600461557f565b60716020526000908152604090205481565b6104516106873660046155be565b611b3c565b610451611c11565b6104516106a236600461557f565b611c25565b6074546103ee9067ffffffffffffffff1681565b6103ee7f000000000000000000000000000000000000000000000000000000000000000081565b61072b6106f03660046155d9565b60786020526000908152604090208054600182015460029092015467ffffffffffffffff808316936801000000000000000090930416919084565b6040805167ffffffffffffffff9586168152949093166020850152918301526060820152608001610403565b6079546103ee907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b610451611d95565b60335473ffffffffffffffffffffffffffffffffffffffff1661049a565b610620611e61565b6104516107c3366004615505565b611fba565b6104516107d636600461557f565b61206b565b6104516107e936600461557f565b6121e7565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b6104516108233660046155be565b6122ed565b6103ee7f000000000000000000000000000000000000000000000000000000000000000081565b606f5461086a906901000000000000000000900461ffff1681565b60405161ffff9091168152602001610403565b6108be61088b36600461557f565b6072602052600090815260409020805460019091015467ffffffffffffffff808216916801000000000000000090041683565b6040805193845267ffffffffffffffff9283166020850152911690820152606001610403565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b61042e6109193660046155d9565b6123b1565b6103ee61243b565b607b546103ee9074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b6104516109603660046156cc565b612490565b606f5461049a906b010000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b6104516109c936600461574a565b61251d565b6104516109dc366004615842565b612a61565b6079546103ee90700100000000000000000000000000000000900467ffffffffffffffff1681565b610451613003565b6073546103ee907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b61049a7f000000000000000000000000000000000000000000000000000000000000000081565b610451610a76366004615884565b6130dc565b610451610a89366004615908565b613968565b607b5461042e907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610451610ac93660046155be565b613d5e565b610451610adc3660046155be565b613e30565b610451610aef3660046153fc565b613ee4565b607a5461049a9073ffffffffffffffffffffffffffffffffffffffff1681565b61062060705481565b60778054610b2a90615954565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5690615954565b8015610ba35780601f10610b7857610100808354040283529160200191610ba3565b820191906000526020600020905b815481529060010190602001808311610b8657829003601f168201915b505050505081565b607a5473ffffffffffffffffffffffffffffffffffffffff163314610bfc576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88161ffff161080610c1557506103ff8161ffff16115b15610c4c576040517f4c2533c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff16690100000000000000000061ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b67ffffffffffffffff8086166000818152607260205260408082205493881682529020546060929115801590610cf7575081155b15610d2e576040517f6818c29e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80610d65576040517f66385b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d6e846123b1565b610da4576040517f176b913c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b166020820152603481019690965260548601929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c098891b811660748701527f0000000000000000000000000000000000000000000000000000000000000000891b8116607c8701527f0000000000000000000000000000000000000000000000000000000000000000891b81166084870152608c86019490945260ac85015260cc840194909452509290931b90911660ec830152805180830360d401815260f4909201905290565b60745468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610ef7576040517fbbcbbc0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f05868686868686613f3e565b607480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86811691821790925560009081526075602052604090208390556079541615610f8057607980547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690555b6040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b15801561100857600080fd5b505af115801561101c573d6000803e3d6000fd5b505060405184815233925067ffffffffffffffff871691507fcb339b570a7f0b25afa7333371ff11192092a0aeace12b671f4c212f2815c6fe906020015b60405180910390a3505050505050565b60745468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146110c7576040517fbbcbbc0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110d687878787878787614316565b607480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8681169182179092556000908152607560205260409020839055607954161561115157607980547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690555b6040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156111d957600080fd5b505af11580156111ed573d6000803e3d6000fd5b50506079805477ffffffffffffffffffffffffffffffffffffffffffffffff167a093a800000000000000000000000000000000000000000000000001790555050604051828152339067ffffffffffffffff8616907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a350505050505050565b60795467ffffffffffffffff828116600090815260786020526040812054909242926112bc92700100000000000000000000000000000000909204811691166159d6565b67ffffffffffffffff16111592915050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331461131f576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115611366576040517f1d06e87900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff166113d55760795467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908216106113d5576040517f401636df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6079805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610cb8565b60745468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114f957606f5460ff16156114ba576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c381611278565b6114f9576040517f0ce9e4a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61150281614750565b50565b607a5473ffffffffffffffffffffffffffffffffffffffff163314611556576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff8216111561159d576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1661160857607b5467ffffffffffffffff74010000000000000000000000000000000000000000909104811690821610611608576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b80547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b90602001610cb8565b60768054610b2a90615954565b607a5473ffffffffffffffffffffffffffffffffffffffff1633146116e7576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b547c0100000000000000000000000000000000000000000000000000000000900460ff16611743576040517ff6ba91a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b80547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690556040517f854dd6ce5a1445c4c54388b21cffd11cf5bba1b9e763aec48ce3da75d617412f90600090a1565b600060705460646117a791906159fe565b905090565b606f5460ff16156117e9576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60795467ffffffffffffffff8581166000908152607260205260409020600101544292611836927801000000000000000000000000000000000000000000000000909104811691166159d6565b67ffffffffffffffff161115611878576040517f8a0704d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86118858686615a15565b67ffffffffffffffff1611156118c7576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118d5868686868686613f3e565b607054156118e6576118e684614963565b607954700100000000000000000000000000000000900467ffffffffffffffff16600003611a2e57607480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8681169182179092556000908152607560205260409020839055607954161561198957607980547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690555b6040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611a1157600080fd5b505af1158015611a25573d6000803e3d6000fd5b50505050611afe565b611a36614b29565b6079805467ffffffffffffffff16906000611a5083615a36565b825467ffffffffffffffff9182166101009390930a92830292820219169190911790915560408051608081018252428316815287831660208083019182528284018981526060840189815260795487166000908152607890935294909120925183549251861668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009093169516949094171781559151600183015551600290910155505b604051828152339067ffffffffffffffff8616907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200161105a565b607a5473ffffffffffffffffffffffffffffffffffffffff163314611b8d576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fff0000000000000000000000000000000000000000ffffffffffffffffffffff166b01000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610cb8565b611c19614bda565b611c236000614c5b565b565b60335473ffffffffffffffffffffffffffffffffffffffff163314611d8d576000611c4e61243b565b90508067ffffffffffffffff168267ffffffffffffffff1611611c9d576040517f812a372d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff6801000000000000000090910481169083161180611ce3575067ffffffffffffffff80831660009081526072602052604090206001015416155b15611d1a576040517f98c5c01400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8083166000908152607260205260409020600101544291611d499162093a8091166159d6565b67ffffffffffffffff161115611d8b576040517fd257555a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b611502614cd2565b607b5473ffffffffffffffffffffffffffffffffffffffff163314611de6576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b54607a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f149190615a5d565b90506000611f2061243b565b60735467ffffffffffffffff680100000000000000008204811691611f789170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416615a15565b611f8291906159d6565b611f8c9190615a15565b67ffffffffffffffff16905080600003611fa95760009250505090565b611fb38183615aa5565b9250505090565b606f5460ff1615611ff7576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61200687878787878787614316565b67ffffffffffffffff84166000908152607560209081526040918290205482519081529081018490527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612062614cd2565b50505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff1633146120bc576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115612103576040517fcc96507000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1661216a5760795467ffffffffffffffff70010000000000000000000000000000000090910481169082161061216a576040517f48a05a9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607980547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610cb8565b607a5473ffffffffffffffffffffffffffffffffffffffff163314612238576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620151808167ffffffffffffffff16111561227f576040517fe067dfe800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff1661010067ffffffffffffffff8416908102919091179091556040519081527f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c2890602001610cb8565b607a5473ffffffffffffffffffffffffffffffffffffffff16331461233e576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610cb8565b600067ffffffff0000000167ffffffffffffffff83161080156123e9575067ffffffff00000001604083901c67ffffffffffffffff16105b801561240a575067ffffffff00000001608083901c67ffffffffffffffff16105b8015612421575067ffffffff0000000160c083901c105b1561242e57506001919050565b506000919050565b919050565b60795460009067ffffffffffffffff161561247f575060795467ffffffffffffffff9081166000908152607860205260409020546801000000000000000090041690565b5060745467ffffffffffffffff1690565b607a5473ffffffffffffffffffffffffffffffffffffffff1633146124e1576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60766124ed8282615aff565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610cb891906153e2565b600054610100900460ff161580801561253d5750600054600160ff909116105b806125575750303b158015612557575060005460ff166001145b6125e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561264657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61265360208801886155be565b607a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556126a860408801602089016155be565b606f805473ffffffffffffffffffffffffffffffffffffffff929092166b010000000000000000000000027fff0000000000000000000000000000000000000000ffffffffffffffffffffff90921691909117905561270d60808801606089016155be565b6074805473ffffffffffffffffffffffffffffffffffffffff9290921668010000000000000000027fffffffff0000000000000000000000000000000000000000ffffffffffffffff9092169190911790556000805260756020527ff9e3fbf150b7a0077118526f473c53cb4734f166167e2c6213e3567dd390b4ad86905560766127988682615aff565b5060776127a58582615aff565b5062093a806127ba6060890160408a0161557f565b67ffffffffffffffff1611156127fc576040517fcc96507000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61280c606088016040890161557f565b6079805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff90921691909117905562093a8061286e60a0890160808a0161557f565b67ffffffffffffffff1611156128b0576040517f1d06e87900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c060a088016080890161557f565b6079805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff93909316929092029190911790556000607055606f80547fffffffffffffffffffffffffffffffffffffffffff00000000000000000000ff166a03ea000000000000070800179055607b80547fffffff000000000000000000ffffffffffffffffffffffffffffffffffffffff167c0100000000000697800000000000000000000000000000000000000000179055612998614d5a565b7fed7be53c9f1a96a481223b15568a5b1a475e01a74b347d6ca187c8bf0c078cd660007f000000000000000000000000000000000000000000000000000000000000000085856040516129ee9493929190615c62565b60405180910390a1801561206257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b607b547c0100000000000000000000000000000000000000000000000000000000900460ff1615612abe576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1615612afb576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000819003612b37576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612b73576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612bbe918491700100000000000000000000000000000000900416615c9a565b1115612bf6576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff680100000000000000008204811660008181526072602052604081205491937001000000000000000000000000000000009004909216915b84811015612ea0576000878783818110612c5657612c56615cad565b9050602002810190612c689190615cdc565b612c7190615d1a565b905083612c7d81615a36565b82518051602091820120818501516040808701519051949950919450600093612cdf9386939101928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8916600090815260719093529120549091508114612d68576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8616600090815260716020526040812055612d8d600189615d96565b8403612dfc5742607b60149054906101000a900467ffffffffffffffff168460400151612dba91906159d6565b67ffffffffffffffff161115612dfc576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020838101516040805192830188905282018490526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012094505050508080612e9890615da9565b915050612c3a565b50612eab84846159d6565b6073805467ffffffffffffffff4281167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009092168217808455604080516060810182528781526020808201958652680100000000000000009384900485168284019081528589166000818152607290935284832093518455965160019390930180549151871686027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921693871693909317179091558554938916700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff938602939093167fffffffffffffffff00000000000000000000000000000000ffffffffffffffff90941693909317919091179093559151929550917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a2505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff163314613054576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156130bc57600080fd5b505af11580156130d0573d6000803e3d6000fd5b50505050611c23614dfa565b606f5460ff1615613119576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f546b010000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314613179576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360008190036131b5576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156131f1576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60735467ffffffffffffffff6801000000000000000082048116600081815260726020526040812054838516949293700100000000000000000000000000000000909304909216919082905b868110156136145760008c8c8381811061325957613259615cad565b905060200281019061326b9190615de1565b61327490615e15565b905060008961328c5781518051602090910120613292565b81602001515b608083015190915067ffffffffffffffff16156133fc57856132b381615a36565b9650506000818360400151846080015160405160200161330b93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a16600090815260719093529120549091508114613394576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff80881660009081526071602052604081205560808401516060850151908216911610156133f6576040517f7f7ab87200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506134fa565b6040820151158015906134c3575060408281015190517f257b363200000000000000000000000000000000000000000000000000000000815260048101919091527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063257b3632906024016020604051808303816000875af115801561349d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c19190615a5d565b155b156134fa576040517f73bd668d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8767ffffffffffffffff16826060015167ffffffffffffffff16108061352d575042826060015167ffffffffffffffff16115b15613564576040517fea82791600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040828101516060808501518351602081018a90529384018590528382019290925260c09190911b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528d901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209450816060015197505050808061360c90615da9565b91505061323d565b5086156136c2576040517fc7a823e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c7a823e0906136919085908c908c90600401615eac565b60006040518083038186803b1580156136a957600080fd5b505afa1580156136bd573d6000803e3d6000fd5b505050505b6136cc86856159d6565b60735490945067ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169084161115613735576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006137418285615a15565b6137559067ffffffffffffffff1688615d96565b604080516060810182528581524267ffffffffffffffff908116602080840191825260738054680100000000000000009081900485168688019081528d861660008181526072909552979093209551865592516001909501805492519585167fffffffffffffffffffffffffffffffff000000000000000000000000000000009384161795851684029590951790945583548c841691161793029290921790559091508281169085161461384b57607380547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8716021790555b61389d33308360705461385e91906159fe565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016929190614e89565b6138a5614b29565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561390d57600080fd5b505af1158015613921573d6000803e3d6000fd5b505060405167ffffffffffffffff881692507f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce9150600090a2505050505050505050505050565b607b547c0100000000000000000000000000000000000000000000000000000000900460ff16156139c5576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f5460ff1615613a02576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613a0c611796565b905081811115613a48576040517f4732fdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388831115613a84576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613ac673ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084614e89565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b579190615a5d565b60738054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613b9183615a36565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508484604051613bc8929190615ecf565b60408051918290038220602083015281018290527fffffffffffffffff0000000000000000000000000000000000000000000000004260c01b166060820152606801604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206073547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526071909352912055323303613cf857607354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613d57565b607360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338888604051613d4e9493929190615edf565b60405180910390a25b5050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff163314613daf576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b607480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610cb8565b613e38614bda565b73ffffffffffffffffffffffffffffffffffffffff8116613edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016125df565b61150281614c5b565b607a5473ffffffffffffffffffffffffffffffffffffffff163314613f35576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff16607055565b600080613f4961243b565b905067ffffffffffffffff8816156140195760795467ffffffffffffffff9081169089161115613fa5576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8089166000908152607860205260409020600281015481549094509091898116680100000000000000009092041614614013576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506140ba565b67ffffffffffffffff871660009081526075602052604090205491508161406c576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168767ffffffffffffffff1611156140ba576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff168667ffffffffffffffff1611614107576040517fb9b18f5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141168888888689610cc3565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161414b9190615f15565b602060405180830381855afa158015614168573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061418b9190615a5d565b6141959190615f27565b6040805160208101825282815290517f9121da8a00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691639121da8a9161421791899190600401615f3b565b602060405180830381865afa158015614234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142589190615f76565b61428e576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6070546000036142a1575050505061430e565b614309336142af858b615a15565b67ffffffffffffffff166142c1611e61565b6142cb91906159fe565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190614f6b565b505050505b505050505050565b600067ffffffffffffffff8816156143e45760795467ffffffffffffffff9081169089161115614372576040517fbb14c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5067ffffffffffffffff80881660009081526078602052604090206002810154815490928881166801000000000000000090920416146143de576040517f2bd2e3e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614480565b5067ffffffffffffffff851660009081526075602052604090205480614436576040517f4997b98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60745467ffffffffffffffff9081169087161115614480576040517f1e56e9e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60795467ffffffffffffffff90811690881611806144b257508767ffffffffffffffff168767ffffffffffffffff1611155b806144d9575060795467ffffffffffffffff68010000000000000000909104811690881611155b15614510576040517fbfa7079f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff878116600090815260786020526040902054680100000000000000009004811690861614614573576040517f32a2a77f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006145828787878588610cc3565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516145b79190615f15565b602060405180830381855afa1580156145d4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906145f79190615a5d565b6146019190615f27565b6040805160208101825282815290517f9121da8a00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691639121da8a9161468391889190600401615f3b565b602060405180830381865afa1580156146a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146c49190615f76565b6146fa576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8916600090815260786020526040902060020154859003614309576040517fa47276bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60795467ffffffffffffffff68010000000000000000909104811690821611158061478a575060795467ffffffffffffffff908116908216115b156147c1576040517fd086b70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff818116600081815260786020908152604080832080546074805468010000000000000000928390049098167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090981688179055600282015487865260759094529382902092909255607980547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff169390940292909217909255600182015490517f33d6247d00000000000000000000000000000000000000000000000000000000815260048101919091529091907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156148f357600080fd5b505af1158015614907573d6000803e3d6000fd5b505050508267ffffffffffffffff168167ffffffffffffffff167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161495691815260200190565b60405180910390a3505050565b600061496d61243b565b90508160008061497d8484615a15565b606f5467ffffffffffffffff91821692506000916149a19161010090041642615d96565b90505b8467ffffffffffffffff168467ffffffffffffffff1614614a2c5767ffffffffffffffff80851660009081526072602052604090206001810154909116821015614a0a57600181015468010000000000000000900467ffffffffffffffff169450614a26565b614a148686615a15565b67ffffffffffffffff16935050614a2c565b506149a4565b6000614a388484615d96565b905083811015614a8f57808403600c8111614a535780614a56565b600c5b9050806103e80a81606f60099054906101000a900461ffff1661ffff160a6070540281614a8557614a85615a76565b0460705550614aff565b838103600c8111614aa05780614aa3565b600c5b90506000816103e80a82606f60099054906101000a900461ffff1661ffff160a670de0b6b3a76400000281614ada57614ada615a76565b04905080607054670de0b6b3a76400000281614af857614af8615a76565b0460705550505b683635c9adc5dea000006070541115614b2457683635c9adc5dea00000607055612062565b612062565b60795467ffffffffffffffff680100000000000000008204811691161115611c2357607954600090614b729068010000000000000000900467ffffffffffffffff1660016159d6565b9050614b7d81611278565b1561150257607954600090600290614ba090849067ffffffffffffffff16615a15565b614baa9190615f98565b614bb490836159d6565b9050614bbf81611278565b15614bd157614bcd81614750565b5050565b614bcd82614750565b60335473ffffffffffffffffffffffffffffffffffffffff163314611c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016125df565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614d3a57600080fd5b505af1158015614d4e573d6000803e3d6000fd5b50505050611c23614fc6565b600054610100900460ff16614df1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016125df565b611c2333614c5b565b606f5460ff16614e36576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052614f659085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152615059565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052614fc19084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401614ee3565b505050565b606f5460ff1615615003576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006150bb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166151659092919063ffffffff16565b805190915015614fc157808060200190518101906150d99190615f76565b614fc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016125df565b6060615174848460008561517c565b949350505050565b60608247101561520e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016125df565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516152379190615f15565b60006040518083038185875af1925050503d8060008114615274576040519150601f19603f3d011682016040523d82523d6000602084013e615279565b606091505b509150915061528a87838387615295565b979650505050505050565b6060831561532b5782516000036153245773ffffffffffffffffffffffffffffffffffffffff85163b615324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016125df565b5081615174565b61517483838151156153405781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df91906153e2565b60005b8381101561538f578181015183820152602001615377565b50506000910152565b600081518084526153b0816020860160208601615374565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006153f56020830184615398565b9392505050565b60006020828403121561540e57600080fd5b813561ffff811681146153f557600080fd5b803567ffffffffffffffff8116811461243657600080fd5b600080600080600060a0868803121561545057600080fd5b61545986615420565b945061546760208701615420565b94979496505050506040830135926060810135926080909101359150565b80610300810183101561549757600080fd5b92915050565b6000806000806000806103a087890312156154b757600080fd5b6154c087615420565b95506154ce60208801615420565b94506154dc60408801615420565b935060608701359250608087013591506154f98860a08901615485565b90509295509295509295565b60008060008060008060006103c0888a03121561552157600080fd5b61552a88615420565b965061553860208901615420565b955061554660408901615420565b945061555460608901615420565b93506080880135925060a088013591506155718960c08a01615485565b905092959891949750929550565b60006020828403121561559157600080fd5b6153f582615420565b803573ffffffffffffffffffffffffffffffffffffffff8116811461243657600080fd5b6000602082840312156155d057600080fd5b6153f58261559a565b6000602082840312156155eb57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261563257600080fd5b813567ffffffffffffffff8082111561564d5761564d6155f2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715615693576156936155f2565b816040528381528660208588010111156156ac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156156de57600080fd5b813567ffffffffffffffff8111156156f557600080fd5b61517484828501615621565b60008083601f84011261571357600080fd5b50813567ffffffffffffffff81111561572b57600080fd5b60208301915083602082850101111561574357600080fd5b9250929050565b60008060008060008086880361012081121561576557600080fd5b60a081121561577357600080fd5b5086955060a0870135945060c087013567ffffffffffffffff8082111561579957600080fd5b6157a58a838b01615621565b955060e08901359150808211156157bb57600080fd5b6157c78a838b01615621565b94506101008901359150808211156157de57600080fd5b506157eb89828a01615701565b979a9699509497509295939492505050565b60008083601f84011261580f57600080fd5b50813567ffffffffffffffff81111561582757600080fd5b6020830191508360208260051b850101111561574357600080fd5b6000806020838503121561585557600080fd5b823567ffffffffffffffff81111561586c57600080fd5b615878858286016157fd565b90969095509350505050565b60008060008060006060868803121561589c57600080fd5b853567ffffffffffffffff808211156158b457600080fd5b6158c089838a016157fd565b90975095508591506158d46020890161559a565b945060408801359150808211156158ea57600080fd5b506158f788828901615701565b969995985093965092949392505050565b60008060006040848603121561591d57600080fd5b833567ffffffffffffffff81111561593457600080fd5b61594086828701615701565b909790965060209590950135949350505050565b600181811c9082168061596857607f821691505b6020821081036159a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156159f7576159f76159a7565b5092915050565b8082028115828204841417615497576154976159a7565b67ffffffffffffffff8281168282160390808211156159f7576159f76159a7565b600067ffffffffffffffff808316818103615a5357615a536159a7565b6001019392505050565b600060208284031215615a6f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615ab457615ab4615a76565b500490565b601f821115614fc157600081815260208120601f850160051c81016020861015615ae05750805b601f850160051c820191505b8181101561430e57828155600101615aec565b815167ffffffffffffffff811115615b1957615b196155f2565b615b2d81615b278454615954565b84615ab9565b602080601f831160018114615b805760008415615b4a5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561430e565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015615bcd57888601518255948401946001909101908401615bae565b5085821015615c0957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600067ffffffffffffffff808716835280861660208401525060606040830152615c90606083018486615c19565b9695505050505050565b80820180821115615497576154976159a7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112615d1057600080fd5b9190910192915050565b600060608236031215615d2c57600080fd5b6040516060810167ffffffffffffffff8282108183111715615d5057615d506155f2565b816040528435915080821115615d6557600080fd5b50615d7236828601615621565b82525060208301356020820152615d8b60408401615420565b604082015292915050565b81810381811115615497576154976159a7565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615dda57615dda6159a7565b5060010190565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112615d1057600080fd5b600060a08236031215615e2757600080fd5b60405160a0810167ffffffffffffffff8282108183111715615e4b57615e4b6155f2565b816040528435915080821115615e6057600080fd5b50615e6d36828601615621565b8252506020830135602082015260408301356040820152615e9060608401615420565b6060820152615ea160808401615420565b608082015292915050565b838152604060208201526000615ec6604083018486615c19565b95945050505050565b8183823760009101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152606060408201526000615c90606083018486615c19565b60008251615d10818460208701615374565b600082615f3657615f36615a76565b500690565b61032081016103008085843782018360005b6001811015615f6c578151835260209283019290910190600101615f4d565b5050509392505050565b600060208284031215615f8857600080fd5b815180151581146153f557600080fd5b600067ffffffffffffffff80841680615fb357615fb3615a76565b9216919091049291505056fea264697066735822122080a09e5d0db198218c3c3c7908f03387176f6d2c1846c961aeb42b80b5a41e4864736f6c63430008140033", } // PolygonzkevmABI is the input ABI used to generate the binding from. @@ -181,11 +182,11 @@ func NewPolygonzkevmFilterer(address common.Address, filterer bind.ContractFilte // bindPolygonzkevm binds a generic wrapper to an already deployed contract. func bindPolygonzkevm(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(PolygonzkevmABI)) + parsed, err := PolygonzkevmMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and diff --git a/etherman/smartcontracts/polygonzkevmbridge/polygonzkevmbridge.go b/etherman/smartcontracts/polygonzkevmbridge/polygonzkevmbridge.go index 9cab47e237..fe6539ee39 100644 --- a/etherman/smartcontracts/polygonzkevmbridge/polygonzkevmbridge.go +++ b/etherman/smartcontracts/polygonzkevmbridge/polygonzkevmbridge.go @@ -26,12 +26,13 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // PolygonzkevmbridgeMetaData contains all meta data concerning the Polygonzkevmbridge contract. var PolygonzkevmbridgeMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"AlreadyClaimed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountDoesNotMatchMsgValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DestinationNetworkInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EtherTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GlobalExitRootInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSmtProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MerkleTreeFull\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MessageFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MsgValueNotZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotValidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotValidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotValidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotValidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyEmergencyState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyNotEmergencyState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPolygonZkEVM\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"leafType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"originAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"depositCount\",\"type\":\"uint32\"}],\"name\":\"BridgeEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"originAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ClaimEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EmergencyStateActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EmergencyStateDeactivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"wrappedTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"name\":\"NewWrappedToken\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"activateEmergencyState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"forceUpdateGlobalExitRoot\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"permitData\",\"type\":\"bytes\"}],\"name\":\"bridgeAsset\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"forceUpdateGlobalExitRoot\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"name\":\"bridgeMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[32]\",\"name\":\"smtProof\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"mainnetExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"rollupExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"name\":\"claimAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[32]\",\"name\":\"smtProof\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"mainnetExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"rollupExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"name\":\"claimMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimedBitMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deactivateEmergencyState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDepositRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"leafType\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"metadataHash\",\"type\":\"bytes32\"}],\"name\":\"getLeafValue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"}],\"name\":\"getTokenWrappedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalExitRootManager\",\"outputs\":[{\"internalType\":\"contractIBasePolygonZkEVMGlobalExitRoot\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_networkID\",\"type\":\"uint32\"},{\"internalType\":\"contractIBasePolygonZkEVMGlobalExitRoot\",\"name\":\"_globalExitRootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_polygonZkEVMaddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"isClaimed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isEmergencyState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastUpdatedDepositCount\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"networkID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"polygonZkEVMaddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"precalculatedWrapperAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"tokenInfoToWrappedToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateGlobalExitRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"leafHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"smtProof\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyMerkleProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"wrappedTokenToTokenInfo\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50615c83806100206000396000f3fe6080604052600436106200019f5760003560e01c8063647c576c11620000e7578063be5831c71162000089578063dbc169761162000060578063dbc169761462000639578063ee25560b1462000651578063fb570834146200068257600080fd5b8063be5831c714620005ae578063cd58657914620005ea578063d02103ca146200060157600080fd5b80639e34070f11620000be5780639e34070f146200050a578063aaa13cc2146200054f578063bab161bf146200057457600080fd5b8063647c576c146200048657806379e2cf9714620004ab57806381b1c17414620004c357600080fd5b80632d2c9d94116200015157806334ac9cf2116200012857806334ac9cf2146200034b5780633ae05047146200037a5780633e197043146200039257600080fd5b80632d2c9d9414620002765780632dfdf0b5146200029b578063318aee3d14620002c257600080fd5b806322e95f2c116200018657806322e95f2c14620001ef578063240ff378146200023a5780632cffd02e146200025157600080fd5b806315064c9614620001a45780632072f6c514620001d5575b600080fd5b348015620001b157600080fd5b50606854620001c09060ff1681565b60405190151581526020015b60405180910390f35b348015620001e257600080fd5b50620001ed620006a7565b005b348015620001fc57600080fd5b50620002146200020e366004620032db565b62000705565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001cc565b620001ed6200024b36600462003372565b620007a8565b3480156200025e57600080fd5b50620001ed6200027036600462003409565b620009d0565b3480156200028357600080fd5b50620001ed6200029536600462003409565b62000f74565b348015620002a857600080fd5b50620002b360535481565b604051908152602001620001cc565b348015620002cf57600080fd5b5062000319620002e1366004620034ef565b606b6020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001cc565b3480156200035857600080fd5b50606c54620002149073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200038757600080fd5b50620002b362001178565b3480156200039f57600080fd5b50620002b3620003b136600462003526565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200049357600080fd5b50620001ed620004a5366004620035b0565b6200125e565b348015620004b857600080fd5b50620001ed620014ad565b348015620004d057600080fd5b5062000214620004e236600462003600565b606a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200051757600080fd5b50620001c06200052936600462003600565b600881901c600090815260696020526040902054600160ff9092169190911b9081161490565b3480156200055c57600080fd5b50620002146200056e3660046200361a565b620014e7565b3480156200058157600080fd5b506068546200059890610100900463ffffffff1681565b60405163ffffffff9091168152602001620001cc565b348015620005bb57600080fd5b506068546200059890790100000000000000000000000000000000000000000000000000900463ffffffff1681565b620001ed620005fb366004620036ce565b620016d3565b3480156200060e57600080fd5b50606854620002149065010000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200064657600080fd5b50620001ed62001c37565b3480156200065e57600080fd5b50620002b36200067036600462003600565b60696020526000908152604090205481565b3480156200068f57600080fd5b50620001c0620006a136600462003770565b62001c93565b606c5473ffffffffffffffffffffffffffffffffffffffff163314620006f9576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200070362001d7c565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602483015282516018818403018152603890920183528151918101919091206000908152606a909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b60685460ff1615620007e6576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff8681166101009092041614806200080c5750600263ffffffff861610155b1562000844576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001606860019054906101000a900463ffffffff163388883488886053546040516200089a9998979695949392919062003806565b60405180910390a1620009b8620009b26001606860019054906101000a900463ffffffff16338989348989604051620008d592919062003881565b60405180910390206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b62001e10565b8215620009c957620009c962001f27565b5050505050565b60685460ff161562000a0e576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000a258b8b8b8b8b8b8b8b8b8b8b600062001ffc565b73ffffffffffffffffffffffffffffffffffffffff861662000b01576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162000a7a9190620038e6565b60006040518083038185875af1925050503d806000811462000ab9576040519150601f19603f3d011682016040523d82523d6000602084013e62000abe565b606091505b505090508062000afa576040517f6747a28800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062000efc565b60685463ffffffff61010090910481169088160362000b435762000b3d73ffffffffffffffffffffffffffffffffffffffff87168585620021ed565b62000efc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152606a90935291205490915073ffffffffffffffffffffffffffffffffffffffff168062000e6e576000808062000c1886880188620039fb565b92509250925060008584848460405162000c329062003292565b62000c409392919062003abd565b8190604051809103906000f590508015801562000c61573d6000803e3d6000fd5b506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c9052919250908216906340c10f1990604401600060405180830381600087803b15801562000cd757600080fd5b505af115801562000cec573d6000803e3d6000fd5b5050505080606a600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a398d8d838b8b60405162000e5c95949392919062003afa565b60405180910390a15050505062000ef9565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f1990604401600060405180830381600087803b15801562000edf57600080fd5b505af115801562000ef4573d6000803e3d6000fd5b505050505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b60685460ff161562000fb2576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000fc98b8b8b8b8b8b8b8b8b8b8b600162001ffc565b60008473ffffffffffffffffffffffffffffffffffffffff1684888a868660405160240162000ffc949392919062003b42565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200107f9190620038e6565b60006040518083038185875af1925050503d8060008114620010be576040519150601f19603f3d011682016040523d82523d6000602084013e620010c3565b606091505b5050905080620010ff576040517f37e391c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b605354600090819081805b602081101562001255578083901c600116600103620011e65760338160208110620011b257620011b262003b8a565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062001213565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b604080516020810184905290810183905260600160405160208183030381529060405280519060200120915080806200124c9062003be8565b91505062001183565b50919392505050565b600054610100900460ff16158080156200127f5750600054600160ff909116105b806200129b5750303b1580156200129b575060005460ff166001145b6200132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200138c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606880547fffffffffffffff000000000000000000000000000000000000000000000000ff1661010063ffffffff8716027fffffffffffffff0000000000000000000000000000000000000000ffffffffff16176501000000000073ffffffffffffffffffffffffffffffffffffffff8681169190910291909117909155606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001691841691909117905562001443620022c3565b8015620014a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b605354606854790100000000000000000000000000000000000000000000000000900463ffffffff16101562000703576200070362001f27565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200157d9062003292565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f909101166040819052620015c8908d908d908d908d908d9060200162003c23565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262001606929160200162003c64565b604051602081830303815290604052805190602001206040516020016200168f94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101209a9950505050505050505050565b60685460ff161562001711576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200171b62002366565b60685463ffffffff888116610100909204161480620017415750600263ffffffff881610155b1562001779576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060608773ffffffffffffffffffffffffffffffffffffffff8816620017df57883414620017d5576040517fb89240f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000925062001ad9565b341562001818576040517f798ee6f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8089166000908152606b602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001908576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018b905273ffffffffffffffffffffffffffffffffffffffff8a1690639dc29fac90604401600060405180830381600087803b158015620018db57600080fd5b505af1158015620018f0573d6000803e3d6000fd5b50505050806020015194508060000151935062001ad7565b85156200191d576200191d898b8989620023db565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa1580156200198b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019b1919062003c97565b9050620019d773ffffffffffffffffffffffffffffffffffffffff8b1633308e620028f9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8c16906370a0823190602401602060405180830381865afa15801562001a45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a6b919062003c97565b905062001a79828262003cb1565b6068548c9850610100900463ffffffff169650935062001a998762002959565b62001aa48c62002a71565b62001aaf8d62002b7e565b60405160200162001ac39392919062003abd565b604051602081830303815290604052945050505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600084868e8e868860535460405162001b1b98979695949392919062003cc7565b60405180910390a162001c0f620009b2600085878f8f8789805190602001206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b861562001c205762001c2062001f27565b5050505062001c2e60018055565b50505050505050565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462001c89576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200070362002c80565b600084815b602081101562001d6e57600163ffffffff8616821c8116900362001d0a5785816020811062001ccb5762001ccb62003b8a565b60200201358260405160200162001cec929190918252602082015260400190565b60405160208183030381529060405280519060200120915062001d59565b8186826020811062001d205762001d2062003b8a565b602002013560405160200162001d40929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b8062001d658162003be8565b91505062001c98565b50821490505b949350505050565b60685460ff161562001dba576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b80600162001e216020600262003e79565b62001e2d919062003cb1565b6053541062001e68576040517fef5ccf6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060536000815462001e7b9062003be8565b9182905550905060005b602081101562001f17578082901c60011660010362001ebd57826033826020811062001eb55762001eb562003b8a565b015550505050565b6033816020811062001ed35762001ed362003b8a565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250808062001f0e9062003be8565b91505062001e85565b5062001f2262003e87565b505050565b6053546068805463ffffffff909216790100000000000000000000000000000000000000000000000000027fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179081905573ffffffffffffffffffffffffffffffffffffffff65010000000000909104166333d6247d62001fad62001178565b6040518263ffffffff1660e01b815260040162001fcc91815260200190565b600060405180830381600087803b15801562001fe757600080fd5b505af1158015620014a7573d6000803e3d6000fd5b6200200d8b63ffffffff1662002d10565b6068546040805160208082018e90528183018d9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915260009165010000000000900473ffffffffffffffffffffffffffffffffffffffff169063257b3632906084016020604051808303816000875af1158015620020b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020d6919062003c97565b90508060000362002112576040517e2f6fad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff88811661010090920416146200215c576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606854600090610100900463ffffffff166200217a5750896200217d565b508a5b620021a66200219d848c8c8c8c8c8c8c604051620008d592919062003881565b8f8f8462001c93565b620021dd576040517fe0417cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001f229084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002d75565b600054610100900460ff166200235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162001324565b6200070362002e88565b600260015403620023d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640162001324565b6002600155565b6000620023ec600482848662003eb6565b620023f79162003ee2565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620026765760008080808080806200245a896004818d62003eb6565b81019062002469919062003f2b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620024dd576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff861630146200252d576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8a851462002567576040517f03fffc4b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620026229190620038e6565b6000604051808303816000865af19150503d806000811462002661576040519150601f19603f3d011682016040523d82523d6000602084013e62002666565b606091505b50505050505050505050620009c9565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c0000000000000000000000000000000000000000000000000000000014620026f2576040517fe282c0ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808080808080806200270a8a6004818e62003eb6565b81019062002719919062003f86565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146200278f576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87163014620027df576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620028a39190620038e6565b6000604051808303816000865af19150503d8060008114620028e2576040519150601f19603f3d011682016040523d82523d6000602084013e620028e7565b606091505b50505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620014a79085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002240565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde03000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff861691620029dd9190620038e6565b600060405180830381855afa9150503d806000811462002a1a576040519150601f19603f3d011682016040523d82523d6000602084013e62002a1f565b606091505b50915091508162002a66576040518060400160405280600781526020017f4e4f5f4e414d450000000000000000000000000000000000000000000000000081525062001d74565b62001d748162002f21565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff86169162002af59190620038e6565b600060405180830381855afa9150503d806000811462002b32576040519150601f19603f3d011682016040523d82523d6000602084013e62002b37565b606091505b50915091508162002a66576040518060400160405280600981526020017f4e4f5f53594d424f4c000000000000000000000000000000000000000000000081525062001d74565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff86169162002c019190620038e6565b600060405180830381855afa9150503d806000811462002c3e576040519150601f19603f3d011682016040523d82523d6000602084013e62002c43565b606091505b509150915081801562002c57575080516020145b62002c6457601262001d74565b8080602001905181019062001d74919062004012565b60018055565b60685460ff1662002cbd576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600881901c60008181526069602052604081208054600160ff861690811b91821892839055929091908183169003620009c9576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600062002dd9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620031119092919063ffffffff16565b80519091501562001f22578080602001905181019062002dfa919062004032565b62001f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162001324565b600054610100900460ff1662002c7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162001324565b6060604082511062002f435781806020019051810190620007a2919062004052565b8151602003620030d35760005b60208110801562002f9b575082818151811062002f715762002f7162003b8a565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b1562002fb6578062002fad8162003be8565b91505062002f50565b8060000362002ffa57505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e4700000000000000000000000000006020820152919050565b60008167ffffffffffffffff81111562003018576200301862003891565b6040519080825280601f01601f19166020018201604052801562003043576020820181803683370190505b50905060005b82811015620030cb5784818151811062003067576200306762003b8a565b602001015160f81c60f81b82828151811062003087576200308762003b8a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080620030c28162003be8565b91505062003049565b509392505050565b505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e470000000000000000000000000000602082015290565b919050565b606062001d748484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031489190620038e6565b60006040518083038185875af1925050503d806000811462003187576040519150601f19603f3d011682016040523d82523d6000602084013e6200318c565b606091505b50915091506200319f87838387620031aa565b979650505050505050565b60608315620032455782516000036200323d5773ffffffffffffffffffffffffffffffffffffffff85163b6200323d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162001324565b508162001d74565b62001d7483838151156200325c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620013249190620040d2565b611b6680620040e883390190565b803563ffffffff811681146200310c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114620032d857600080fd5b50565b60008060408385031215620032ef57600080fd5b620032fa83620032a0565b915060208301356200330c81620032b5565b809150509250929050565b8015158114620032d857600080fd5b60008083601f8401126200333957600080fd5b50813567ffffffffffffffff8111156200335257600080fd5b6020830191508360208285010111156200336b57600080fd5b9250929050565b6000806000806000608086880312156200338b57600080fd5b6200339686620032a0565b94506020860135620033a881620032b5565b93506040860135620033ba8162003317565b9250606086013567ffffffffffffffff811115620033d757600080fd5b620033e58882890162003326565b969995985093965092949392505050565b806104008101831015620007a257600080fd5b60008060008060008060008060008060006105208c8e0312156200342c57600080fd5b620034388d8d620033f6565b9a50620034496104008d01620032a0565b99506104208c013598506104408c013597506200346a6104608d01620032a0565b96506104808c01356200347d81620032b5565b95506200348e6104a08d01620032a0565b94506104c08c0135620034a181620032b5565b93506104e08c013592506105008c013567ffffffffffffffff811115620034c757600080fd5b620034d58e828f0162003326565b915080935050809150509295989b509295989b9093969950565b6000602082840312156200350257600080fd5b81356200350f81620032b5565b9392505050565b60ff81168114620032d857600080fd5b600080600080600080600060e0888a0312156200354257600080fd5b87356200354f8162003516565b96506200355f60208901620032a0565b955060408801356200357181620032b5565b94506200358160608901620032a0565b935060808801356200359381620032b5565b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215620035c657600080fd5b620035d184620032a0565b92506020840135620035e381620032b5565b91506040840135620035f581620032b5565b809150509250925092565b6000602082840312156200361357600080fd5b5035919050565b600080600080600080600060a0888a0312156200363657600080fd5b6200364188620032a0565b965060208801356200365381620032b5565b9550604088013567ffffffffffffffff808211156200367157600080fd5b6200367f8b838c0162003326565b909750955060608a01359150808211156200369957600080fd5b50620036a88a828b0162003326565b9094509250506080880135620036be8162003516565b8091505092959891949750929550565b600080600080600080600060c0888a031215620036ea57600080fd5b620036f588620032a0565b965060208801356200370781620032b5565b95506040880135945060608801356200372081620032b5565b93506080880135620037328162003317565b925060a088013567ffffffffffffffff8111156200374f57600080fd5b6200375d8a828b0162003326565b989b979a50959850939692959293505050565b60008060008061046085870312156200378857600080fd5b843593506200379b8660208701620033f6565b9250620037ac6104208601620032a0565b939692955092936104400135925050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061010060ff8c16835263ffffffff808c16602085015273ffffffffffffffffffffffffffffffffffffffff808c166040860152818b166060860152808a166080860152508760a08501528160c0850152620038678285018789620037bd565b925080851660e085015250509a9950505050505050505050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015620038dd578181015183820152602001620038c3565b50506000910152565b60008251620038fa818460208701620038c0565b9190910192915050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200394e576200394e62003891565b604052919050565b600067ffffffffffffffff82111562003973576200397362003891565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620039b157600080fd5b8135620039c8620039c28262003956565b62003904565b818152846020838601011115620039de57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121562003a1157600080fd5b833567ffffffffffffffff8082111562003a2a57600080fd5b62003a38878388016200399f565b9450602086013591508082111562003a4f57600080fd5b5062003a5e868287016200399f565b9250506040840135620035f58162003516565b6000815180845262003a8b816020860160208601620038c0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003ad2606083018662003a71565b828103602084015262003ae6818662003a71565b91505060ff83166040830152949350505050565b63ffffffff86168152600073ffffffffffffffffffffffffffffffffffffffff8087166020840152808616604084015250608060608301526200319f608083018486620037bd565b73ffffffffffffffffffffffffffffffffffffffff8516815263ffffffff8416602082015260606040820152600062003b80606083018486620037bd565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003c1c5762003c1c62003bb9565b5060010190565b60608152600062003c39606083018789620037bd565b828103602084015262003c4e818688620037bd565b91505060ff831660408301529695505050505050565b6000835162003c78818460208801620038c0565b83519083019062003c8e818360208801620038c0565b01949350505050565b60006020828403121562003caa57600080fd5b5051919050565b81810381811115620007a257620007a262003bb9565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003d278285018762003a71565b925080851660e085015250509998505050505050505050565b600181815b8085111562003d9f57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d835762003d8362003bb9565b8085161562003d9157918102915b93841c939080029062003d45565b509250929050565b60008262003db857506001620007a2565b8162003dc757506000620007a2565b816001811462003de0576002811462003deb5762003e0b565b6001915050620007a2565b60ff84111562003dff5762003dff62003bb9565b50506001821b620007a2565b5060208310610133831016604e8410600b841016171562003e30575081810a620007a2565b62003e3c838362003d40565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e715762003e7162003bb9565b029392505050565b60006200350f838362003da7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003ec757600080fd5b8386111562003ed557600080fd5b5050820193919092039150565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101562003f235780818660040360031b1b83161692505b505092915050565b600080600080600080600060e0888a03121562003f4757600080fd5b873562003f5481620032b5565b9650602088013562003f6681620032b5565b955060408801359450606088013593506080880135620035938162003516565b600080600080600080600080610100898b03121562003fa457600080fd5b883562003fb181620032b5565b9750602089013562003fc381620032b5565b96506040890135955060608901359450608089013562003fe38162003317565b935060a089013562003ff58162003516565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200402557600080fd5b81516200350f8162003516565b6000602082840312156200404557600080fd5b81516200350f8162003317565b6000602082840312156200406557600080fd5b815167ffffffffffffffff8111156200407d57600080fd5b8201601f810184136200408f57600080fd5b8051620040a0620039c28262003956565b818152856020838501011115620040b657600080fd5b620040c9826020830160208601620038c0565b95945050505050565b6020815260006200350f602083018462003a7156fe6101006040523480156200001257600080fd5b5060405162001b6638038062001b6683398101604081905262000035916200028d565b82826003620000458382620003a1565b506004620000548282620003a1565b50503360c0525060ff811660e052466080819052620000739062000080565b60a052506200046d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000ad6200012e565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6060600380546200013f9062000312565b80601f01602080910402602001604051908101604052809291908181526020018280546200016d9062000312565b8015620001be5780601f106200019257610100808354040283529160200191620001be565b820191906000526020600020905b815481529060010190602001808311620001a057829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f057600080fd5b81516001600160401b03808211156200020d576200020d620001c8565b604051601f8301601f19908116603f01168101908282118183101715620002385762000238620001c8565b816040528381526020925086838588010111156200025557600080fd5b600091505b838210156200027957858201830151818301840152908201906200025a565b600093810190920192909252949350505050565b600080600060608486031215620002a357600080fd5b83516001600160401b0380821115620002bb57600080fd5b620002c987838801620001de565b94506020860151915080821115620002e057600080fd5b50620002ef86828701620001de565b925050604084015160ff811681146200030757600080fd5b809150509250925092565b600181811c908216806200032757607f821691505b6020821081036200034857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039c57600081815260208120601f850160051c81016020861015620003775750805b601f850160051c820191505b81811015620003985782815560010162000383565b5050505b505050565b81516001600160401b03811115620003bd57620003bd620001c8565b620003d581620003ce845462000312565b846200034e565b602080601f8311600181146200040d5760008415620003f45750858301515b600019600386901b1c1916600185901b17855562000398565b600085815260208120601f198616915b828110156200043e578886015182559484019460019091019084016200041d565b50858210156200045d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516116aa620004bc6000396000610237015260008181610307015281816105c001526106a70152600061053a015260008181610379015261050401526116aa6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf1461039b578063dd62ed3e146103ae578063ffa1ad74146103f457600080fd5b8063a457c2d71461034e578063a9059cbb14610361578063cd0d00961461037457600080fd5b806395d89b41116100bd57806395d89b41146102e75780639dc29fac146102ef578063a3c573eb1461030257600080fd5b806370a08231146102915780637ecebe00146102c757600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610261578063395093511461026957806340c10f191461027c57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610430565b60405161019191906113e4565b60405180910390f35b6101ad6101a8366004611479565b6104c2565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad6102043660046114a3565b6104dc565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610191565b6101c1610500565b6101ad610277366004611479565b61055c565b61028f61028a366004611479565b6105a8565b005b6101c161029f3660046114df565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d53660046114df565b60056020526000908152604090205481565b610184610680565b61028f6102fd366004611479565b61068f565b6103297f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad61035c366004611479565b61075e565b6101ad61036f366004611479565b61082f565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b61028f6103a9366004611501565b61083d565b6101c16103bc366004611574565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043f906115a7565b80601f016020809104026020016040519081016040528092919081815260200182805461046b906115a7565b80156104b85780601f1061048d576101008083540402835291602001916104b8565b820191906000526020600020905b81548152906001019060200180831161049b57829003601f168201915b5050505050905090565b6000336104d0818585610b73565b60019150505b92915050565b6000336104ea858285610d27565b6104f5858585610dfe565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610537576105324661106d565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104d090829086906105a3908790611629565b610b73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d4272696467650000000000000000000000000000000060648201526084015b60405180910390fd5b61067c8282611135565b5050565b60606004805461043f906115a7565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d427269646765000000000000000000000000000000006064820152608401610669565b61067c8282611228565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610669565b6104f58286868403610b73565b6000336104d0818585610dfe565b834211156108cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866109268361163c565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610991610500565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610a55573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610ad057508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610669565b610b678a8a8a610b73565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610cb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610df85781811015610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610669565b610df88484848403610b73565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610f44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610df8565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611098610430565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166111b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610669565b80600260008282546111c49190611629565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166112cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610d1a565b600060208083528351808285015260005b81811015611411578581018301518582016040015282016113f5565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461147457600080fd5b919050565b6000806040838503121561148c57600080fd5b61149583611450565b946020939093013593505050565b6000806000606084860312156114b857600080fd5b6114c184611450565b92506114cf60208501611450565b9150604084013590509250925092565b6000602082840312156114f157600080fd5b6114fa82611450565b9392505050565b600080600080600080600060e0888a03121561151c57600080fd5b61152588611450565b965061153360208901611450565b95506040880135945060608801359350608088013560ff8116811461155757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561158757600080fd5b61159083611450565b915061159e60208401611450565b90509250929050565b600181811c908216806115bb57607f821691505b6020821081036115f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156104d6576104d66115fa565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361166d5761166d6115fa565b506001019056fea26469706673582212208d88fee561cff7120d381c345cfc534cef8229a272dc5809d4bbb685ad67141164736f6c63430008110033a2646970667358221220d9b3ca7b13ec80ac58634ddf0ecebe71e209a71f532614949b9e720413f50c8364736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b50615c83806100206000396000f3fe6080604052600436106200019f5760003560e01c8063647c576c11620000e7578063be5831c71162000089578063dbc169761162000060578063dbc169761462000639578063ee25560b1462000651578063fb570834146200068257600080fd5b8063be5831c714620005ae578063cd58657914620005ea578063d02103ca146200060157600080fd5b80639e34070f11620000be5780639e34070f146200050a578063aaa13cc2146200054f578063bab161bf146200057457600080fd5b8063647c576c146200048657806379e2cf9714620004ab57806381b1c17414620004c357600080fd5b80632d2c9d94116200015157806334ac9cf2116200012857806334ac9cf2146200034b5780633ae05047146200037a5780633e197043146200039257600080fd5b80632d2c9d9414620002765780632dfdf0b5146200029b578063318aee3d14620002c257600080fd5b806322e95f2c116200018657806322e95f2c14620001ef578063240ff378146200023a5780632cffd02e146200025157600080fd5b806315064c9614620001a45780632072f6c514620001d5575b600080fd5b348015620001b157600080fd5b50606854620001c09060ff1681565b60405190151581526020015b60405180910390f35b348015620001e257600080fd5b50620001ed620006a7565b005b348015620001fc57600080fd5b50620002146200020e366004620032db565b62000705565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001cc565b620001ed6200024b36600462003372565b620007a8565b3480156200025e57600080fd5b50620001ed6200027036600462003409565b620009d0565b3480156200028357600080fd5b50620001ed6200029536600462003409565b62000f74565b348015620002a857600080fd5b50620002b360535481565b604051908152602001620001cc565b348015620002cf57600080fd5b5062000319620002e1366004620034ef565b606b6020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001cc565b3480156200035857600080fd5b50606c54620002149073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200038757600080fd5b50620002b362001178565b3480156200039f57600080fd5b50620002b3620003b136600462003526565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200049357600080fd5b50620001ed620004a5366004620035b0565b6200125e565b348015620004b857600080fd5b50620001ed620014ad565b348015620004d057600080fd5b5062000214620004e236600462003600565b606a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200051757600080fd5b50620001c06200052936600462003600565b600881901c600090815260696020526040902054600160ff9092169190911b9081161490565b3480156200055c57600080fd5b50620002146200056e3660046200361a565b620014e7565b3480156200058157600080fd5b506068546200059890610100900463ffffffff1681565b60405163ffffffff9091168152602001620001cc565b348015620005bb57600080fd5b506068546200059890790100000000000000000000000000000000000000000000000000900463ffffffff1681565b620001ed620005fb366004620036ce565b620016d3565b3480156200060e57600080fd5b50606854620002149065010000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200064657600080fd5b50620001ed62001c37565b3480156200065e57600080fd5b50620002b36200067036600462003600565b60696020526000908152604090205481565b3480156200068f57600080fd5b50620001c0620006a136600462003770565b62001c93565b606c5473ffffffffffffffffffffffffffffffffffffffff163314620006f9576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200070362001d7c565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602483015282516018818403018152603890920183528151918101919091206000908152606a909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b60685460ff1615620007e6576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff8681166101009092041614806200080c5750600263ffffffff861610155b1562000844576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001606860019054906101000a900463ffffffff163388883488886053546040516200089a9998979695949392919062003806565b60405180910390a1620009b8620009b26001606860019054906101000a900463ffffffff16338989348989604051620008d592919062003881565b60405180910390206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b62001e10565b8215620009c957620009c962001f27565b5050505050565b60685460ff161562000a0e576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000a258b8b8b8b8b8b8b8b8b8b8b600062001ffc565b73ffffffffffffffffffffffffffffffffffffffff861662000b01576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162000a7a9190620038e6565b60006040518083038185875af1925050503d806000811462000ab9576040519150601f19603f3d011682016040523d82523d6000602084013e62000abe565b606091505b505090508062000afa576040517f6747a28800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062000efc565b60685463ffffffff61010090910481169088160362000b435762000b3d73ffffffffffffffffffffffffffffffffffffffff87168585620021ed565b62000efc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152606a90935291205490915073ffffffffffffffffffffffffffffffffffffffff168062000e6e576000808062000c1886880188620039fb565b92509250925060008584848460405162000c329062003292565b62000c409392919062003abd565b8190604051809103906000f590508015801562000c61573d6000803e3d6000fd5b506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c9052919250908216906340c10f1990604401600060405180830381600087803b15801562000cd757600080fd5b505af115801562000cec573d6000803e3d6000fd5b5050505080606a600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a398d8d838b8b60405162000e5c95949392919062003afa565b60405180910390a15050505062000ef9565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f1990604401600060405180830381600087803b15801562000edf57600080fd5b505af115801562000ef4573d6000803e3d6000fd5b505050505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b60685460ff161562000fb2576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000fc98b8b8b8b8b8b8b8b8b8b8b600162001ffc565b60008473ffffffffffffffffffffffffffffffffffffffff1684888a868660405160240162000ffc949392919062003b42565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200107f9190620038e6565b60006040518083038185875af1925050503d8060008114620010be576040519150601f19603f3d011682016040523d82523d6000602084013e620010c3565b606091505b5050905080620010ff576040517f37e391c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b605354600090819081805b602081101562001255578083901c600116600103620011e65760338160208110620011b257620011b262003b8a565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062001213565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b604080516020810184905290810183905260600160405160208183030381529060405280519060200120915080806200124c9062003be8565b91505062001183565b50919392505050565b600054610100900460ff16158080156200127f5750600054600160ff909116105b806200129b5750303b1580156200129b575060005460ff166001145b6200132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200138c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606880547fffffffffffffff000000000000000000000000000000000000000000000000ff1661010063ffffffff8716027fffffffffffffff0000000000000000000000000000000000000000ffffffffff16176501000000000073ffffffffffffffffffffffffffffffffffffffff8681169190910291909117909155606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001691841691909117905562001443620022c3565b8015620014a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b605354606854790100000000000000000000000000000000000000000000000000900463ffffffff16101562000703576200070362001f27565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200157d9062003292565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f909101166040819052620015c8908d908d908d908d908d9060200162003c23565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262001606929160200162003c64565b604051602081830303815290604052805190602001206040516020016200168f94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101209a9950505050505050505050565b60685460ff161562001711576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200171b62002366565b60685463ffffffff888116610100909204161480620017415750600263ffffffff881610155b1562001779576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060608773ffffffffffffffffffffffffffffffffffffffff8816620017df57883414620017d5576040517fb89240f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000925062001ad9565b341562001818576040517f798ee6f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8089166000908152606b602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001908576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018b905273ffffffffffffffffffffffffffffffffffffffff8a1690639dc29fac90604401600060405180830381600087803b158015620018db57600080fd5b505af1158015620018f0573d6000803e3d6000fd5b50505050806020015194508060000151935062001ad7565b85156200191d576200191d898b8989620023db565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa1580156200198b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019b1919062003c97565b9050620019d773ffffffffffffffffffffffffffffffffffffffff8b1633308e620028f9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8c16906370a0823190602401602060405180830381865afa15801562001a45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a6b919062003c97565b905062001a79828262003cb1565b6068548c9850610100900463ffffffff169650935062001a998762002959565b62001aa48c62002a71565b62001aaf8d62002b7e565b60405160200162001ac39392919062003abd565b604051602081830303815290604052945050505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600084868e8e868860535460405162001b1b98979695949392919062003cc7565b60405180910390a162001c0f620009b2600085878f8f8789805190602001206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b861562001c205762001c2062001f27565b5050505062001c2e60018055565b50505050505050565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462001c89576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200070362002c80565b600084815b602081101562001d6e57600163ffffffff8616821c8116900362001d0a5785816020811062001ccb5762001ccb62003b8a565b60200201358260405160200162001cec929190918252602082015260400190565b60405160208183030381529060405280519060200120915062001d59565b8186826020811062001d205762001d2062003b8a565b602002013560405160200162001d40929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b8062001d658162003be8565b91505062001c98565b50821490505b949350505050565b60685460ff161562001dba576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b80600162001e216020600262003e79565b62001e2d919062003cb1565b6053541062001e68576040517fef5ccf6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060536000815462001e7b9062003be8565b9182905550905060005b602081101562001f17578082901c60011660010362001ebd57826033826020811062001eb55762001eb562003b8a565b015550505050565b6033816020811062001ed35762001ed362003b8a565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250808062001f0e9062003be8565b91505062001e85565b5062001f2262003e87565b505050565b6053546068805463ffffffff909216790100000000000000000000000000000000000000000000000000027fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179081905573ffffffffffffffffffffffffffffffffffffffff65010000000000909104166333d6247d62001fad62001178565b6040518263ffffffff1660e01b815260040162001fcc91815260200190565b600060405180830381600087803b15801562001fe757600080fd5b505af1158015620014a7573d6000803e3d6000fd5b6200200d8b63ffffffff1662002d10565b6068546040805160208082018e90528183018d9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915260009165010000000000900473ffffffffffffffffffffffffffffffffffffffff169063257b3632906084016020604051808303816000875af1158015620020b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020d6919062003c97565b90508060000362002112576040517e2f6fad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff88811661010090920416146200215c576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606854600090610100900463ffffffff166200217a5750896200217d565b508a5b620021a66200219d848c8c8c8c8c8c8c604051620008d592919062003881565b8f8f8462001c93565b620021dd576040517fe0417cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001f229084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002d75565b600054610100900460ff166200235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162001324565b6200070362002e88565b600260015403620023d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640162001324565b6002600155565b6000620023ec600482848662003eb6565b620023f79162003ee2565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620026765760008080808080806200245a896004818d62003eb6565b81019062002469919062003f2b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620024dd576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff861630146200252d576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8a851462002567576040517f03fffc4b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620026229190620038e6565b6000604051808303816000865af19150503d806000811462002661576040519150601f19603f3d011682016040523d82523d6000602084013e62002666565b606091505b50505050505050505050620009c9565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c0000000000000000000000000000000000000000000000000000000014620026f2576040517fe282c0ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808080808080806200270a8a6004818e62003eb6565b81019062002719919062003f86565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146200278f576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87163014620027df576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620028a39190620038e6565b6000604051808303816000865af19150503d8060008114620028e2576040519150601f19603f3d011682016040523d82523d6000602084013e620028e7565b606091505b50505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620014a79085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002240565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde03000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff861691620029dd9190620038e6565b600060405180830381855afa9150503d806000811462002a1a576040519150601f19603f3d011682016040523d82523d6000602084013e62002a1f565b606091505b50915091508162002a66576040518060400160405280600781526020017f4e4f5f4e414d450000000000000000000000000000000000000000000000000081525062001d74565b62001d748162002f21565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff86169162002af59190620038e6565b600060405180830381855afa9150503d806000811462002b32576040519150601f19603f3d011682016040523d82523d6000602084013e62002b37565b606091505b50915091508162002a66576040518060400160405280600981526020017f4e4f5f53594d424f4c000000000000000000000000000000000000000000000081525062001d74565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff86169162002c019190620038e6565b600060405180830381855afa9150503d806000811462002c3e576040519150601f19603f3d011682016040523d82523d6000602084013e62002c43565b606091505b509150915081801562002c57575080516020145b62002c6457601262001d74565b8080602001905181019062001d74919062004012565b60018055565b60685460ff1662002cbd576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600881901c60008181526069602052604081208054600160ff861690811b91821892839055929091908183169003620009c9576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600062002dd9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620031119092919063ffffffff16565b80519091501562001f22578080602001905181019062002dfa919062004032565b62001f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162001324565b600054610100900460ff1662002c7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162001324565b6060604082511062002f435781806020019051810190620007a2919062004052565b8151602003620030d35760005b60208110801562002f9b575082818151811062002f715762002f7162003b8a565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b1562002fb6578062002fad8162003be8565b91505062002f50565b8060000362002ffa57505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e4700000000000000000000000000006020820152919050565b60008167ffffffffffffffff81111562003018576200301862003891565b6040519080825280601f01601f19166020018201604052801562003043576020820181803683370190505b50905060005b82811015620030cb5784818151811062003067576200306762003b8a565b602001015160f81c60f81b82828151811062003087576200308762003b8a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080620030c28162003be8565b91505062003049565b509392505050565b505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e470000000000000000000000000000602082015290565b919050565b606062001d748484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031489190620038e6565b60006040518083038185875af1925050503d806000811462003187576040519150601f19603f3d011682016040523d82523d6000602084013e6200318c565b606091505b50915091506200319f87838387620031aa565b979650505050505050565b60608315620032455782516000036200323d5773ffffffffffffffffffffffffffffffffffffffff85163b6200323d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162001324565b508162001d74565b62001d7483838151156200325c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620013249190620040d2565b611b6680620040e883390190565b803563ffffffff811681146200310c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114620032d857600080fd5b50565b60008060408385031215620032ef57600080fd5b620032fa83620032a0565b915060208301356200330c81620032b5565b809150509250929050565b8015158114620032d857600080fd5b60008083601f8401126200333957600080fd5b50813567ffffffffffffffff8111156200335257600080fd5b6020830191508360208285010111156200336b57600080fd5b9250929050565b6000806000806000608086880312156200338b57600080fd5b6200339686620032a0565b94506020860135620033a881620032b5565b93506040860135620033ba8162003317565b9250606086013567ffffffffffffffff811115620033d757600080fd5b620033e58882890162003326565b969995985093965092949392505050565b806104008101831015620007a257600080fd5b60008060008060008060008060008060006105208c8e0312156200342c57600080fd5b620034388d8d620033f6565b9a50620034496104008d01620032a0565b99506104208c013598506104408c013597506200346a6104608d01620032a0565b96506104808c01356200347d81620032b5565b95506200348e6104a08d01620032a0565b94506104c08c0135620034a181620032b5565b93506104e08c013592506105008c013567ffffffffffffffff811115620034c757600080fd5b620034d58e828f0162003326565b915080935050809150509295989b509295989b9093969950565b6000602082840312156200350257600080fd5b81356200350f81620032b5565b9392505050565b60ff81168114620032d857600080fd5b600080600080600080600060e0888a0312156200354257600080fd5b87356200354f8162003516565b96506200355f60208901620032a0565b955060408801356200357181620032b5565b94506200358160608901620032a0565b935060808801356200359381620032b5565b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215620035c657600080fd5b620035d184620032a0565b92506020840135620035e381620032b5565b91506040840135620035f581620032b5565b809150509250925092565b6000602082840312156200361357600080fd5b5035919050565b600080600080600080600060a0888a0312156200363657600080fd5b6200364188620032a0565b965060208801356200365381620032b5565b9550604088013567ffffffffffffffff808211156200367157600080fd5b6200367f8b838c0162003326565b909750955060608a01359150808211156200369957600080fd5b50620036a88a828b0162003326565b9094509250506080880135620036be8162003516565b8091505092959891949750929550565b600080600080600080600060c0888a031215620036ea57600080fd5b620036f588620032a0565b965060208801356200370781620032b5565b95506040880135945060608801356200372081620032b5565b93506080880135620037328162003317565b925060a088013567ffffffffffffffff8111156200374f57600080fd5b6200375d8a828b0162003326565b989b979a50959850939692959293505050565b60008060008061046085870312156200378857600080fd5b843593506200379b8660208701620033f6565b9250620037ac6104208601620032a0565b939692955092936104400135925050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061010060ff8c16835263ffffffff808c16602085015273ffffffffffffffffffffffffffffffffffffffff808c166040860152818b166060860152808a166080860152508760a08501528160c0850152620038678285018789620037bd565b925080851660e085015250509a9950505050505050505050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015620038dd578181015183820152602001620038c3565b50506000910152565b60008251620038fa818460208701620038c0565b9190910192915050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200394e576200394e62003891565b604052919050565b600067ffffffffffffffff82111562003973576200397362003891565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620039b157600080fd5b8135620039c8620039c28262003956565b62003904565b818152846020838601011115620039de57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121562003a1157600080fd5b833567ffffffffffffffff8082111562003a2a57600080fd5b62003a38878388016200399f565b9450602086013591508082111562003a4f57600080fd5b5062003a5e868287016200399f565b9250506040840135620035f58162003516565b6000815180845262003a8b816020860160208601620038c0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003ad2606083018662003a71565b828103602084015262003ae6818662003a71565b91505060ff83166040830152949350505050565b63ffffffff86168152600073ffffffffffffffffffffffffffffffffffffffff8087166020840152808616604084015250608060608301526200319f608083018486620037bd565b73ffffffffffffffffffffffffffffffffffffffff8516815263ffffffff8416602082015260606040820152600062003b80606083018486620037bd565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003c1c5762003c1c62003bb9565b5060010190565b60608152600062003c39606083018789620037bd565b828103602084015262003c4e818688620037bd565b91505060ff831660408301529695505050505050565b6000835162003c78818460208801620038c0565b83519083019062003c8e818360208801620038c0565b01949350505050565b60006020828403121562003caa57600080fd5b5051919050565b81810381811115620007a257620007a262003bb9565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003d278285018762003a71565b925080851660e085015250509998505050505050505050565b600181815b8085111562003d9f57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d835762003d8362003bb9565b8085161562003d9157918102915b93841c939080029062003d45565b509250929050565b60008262003db857506001620007a2565b8162003dc757506000620007a2565b816001811462003de0576002811462003deb5762003e0b565b6001915050620007a2565b60ff84111562003dff5762003dff62003bb9565b50506001821b620007a2565b5060208310610133831016604e8410600b841016171562003e30575081810a620007a2565b62003e3c838362003d40565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e715762003e7162003bb9565b029392505050565b60006200350f838362003da7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003ec757600080fd5b8386111562003ed557600080fd5b5050820193919092039150565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101562003f235780818660040360031b1b83161692505b505092915050565b600080600080600080600060e0888a03121562003f4757600080fd5b873562003f5481620032b5565b9650602088013562003f6681620032b5565b955060408801359450606088013593506080880135620035938162003516565b600080600080600080600080610100898b03121562003fa457600080fd5b883562003fb181620032b5565b9750602089013562003fc381620032b5565b96506040890135955060608901359450608089013562003fe38162003317565b935060a089013562003ff58162003516565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200402557600080fd5b81516200350f8162003516565b6000602082840312156200404557600080fd5b81516200350f8162003317565b6000602082840312156200406557600080fd5b815167ffffffffffffffff8111156200407d57600080fd5b8201601f810184136200408f57600080fd5b8051620040a0620039c28262003956565b818152856020838501011115620040b657600080fd5b620040c9826020830160208601620038c0565b95945050505050565b6020815260006200350f602083018462003a7156fe6101006040523480156200001257600080fd5b5060405162001b6638038062001b6683398101604081905262000035916200028d565b82826003620000458382620003a1565b506004620000548282620003a1565b50503360c0525060ff811660e052466080819052620000739062000080565b60a052506200046d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000ad6200012e565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6060600380546200013f9062000312565b80601f01602080910402602001604051908101604052809291908181526020018280546200016d9062000312565b8015620001be5780601f106200019257610100808354040283529160200191620001be565b820191906000526020600020905b815481529060010190602001808311620001a057829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f057600080fd5b81516001600160401b03808211156200020d576200020d620001c8565b604051601f8301601f19908116603f01168101908282118183101715620002385762000238620001c8565b816040528381526020925086838588010111156200025557600080fd5b600091505b838210156200027957858201830151818301840152908201906200025a565b600093810190920192909252949350505050565b600080600060608486031215620002a357600080fd5b83516001600160401b0380821115620002bb57600080fd5b620002c987838801620001de565b94506020860151915080821115620002e057600080fd5b50620002ef86828701620001de565b925050604084015160ff811681146200030757600080fd5b809150509250925092565b600181811c908216806200032757607f821691505b6020821081036200034857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039c57600081815260208120601f850160051c81016020861015620003775750805b601f850160051c820191505b81811015620003985782815560010162000383565b5050505b505050565b81516001600160401b03811115620003bd57620003bd620001c8565b620003d581620003ce845462000312565b846200034e565b602080601f8311600181146200040d5760008415620003f45750858301515b600019600386901b1c1916600185901b17855562000398565b600085815260208120601f198616915b828110156200043e578886015182559484019460019091019084016200041d565b50858210156200045d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516116aa620004bc6000396000610237015260008181610307015281816105c001526106a70152600061053a015260008181610379015261050401526116aa6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf1461039b578063dd62ed3e146103ae578063ffa1ad74146103f457600080fd5b8063a457c2d71461034e578063a9059cbb14610361578063cd0d00961461037457600080fd5b806395d89b41116100bd57806395d89b41146102e75780639dc29fac146102ef578063a3c573eb1461030257600080fd5b806370a08231146102915780637ecebe00146102c757600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610261578063395093511461026957806340c10f191461027c57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610430565b60405161019191906113e4565b60405180910390f35b6101ad6101a8366004611479565b6104c2565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad6102043660046114a3565b6104dc565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610191565b6101c1610500565b6101ad610277366004611479565b61055c565b61028f61028a366004611479565b6105a8565b005b6101c161029f3660046114df565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d53660046114df565b60056020526000908152604090205481565b610184610680565b61028f6102fd366004611479565b61068f565b6103297f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad61035c366004611479565b61075e565b6101ad61036f366004611479565b61082f565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b61028f6103a9366004611501565b61083d565b6101c16103bc366004611574565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043f906115a7565b80601f016020809104026020016040519081016040528092919081815260200182805461046b906115a7565b80156104b85780601f1061048d576101008083540402835291602001916104b8565b820191906000526020600020905b81548152906001019060200180831161049b57829003601f168201915b5050505050905090565b6000336104d0818585610b73565b60019150505b92915050565b6000336104ea858285610d27565b6104f5858585610dfe565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610537576105324661106d565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104d090829086906105a3908790611629565b610b73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d4272696467650000000000000000000000000000000060648201526084015b60405180910390fd5b61067c8282611135565b5050565b60606004805461043f906115a7565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d427269646765000000000000000000000000000000006064820152608401610669565b61067c8282611228565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610669565b6104f58286868403610b73565b6000336104d0818585610dfe565b834211156108cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866109268361163c565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610991610500565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610a55573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610ad057508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610669565b610b678a8a8a610b73565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610cb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610df85781811015610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610669565b610df88484848403610b73565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610f44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610df8565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611098610430565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166111b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610669565b80600260008282546111c49190611629565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166112cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610d1a565b600060208083528351808285015260005b81811015611411578581018301518582016040015282016113f5565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461147457600080fd5b919050565b6000806040838503121561148c57600080fd5b61149583611450565b946020939093013593505050565b6000806000606084860312156114b857600080fd5b6114c184611450565b92506114cf60208501611450565b9150604084013590509250925092565b6000602082840312156114f157600080fd5b6114fa82611450565b9392505050565b600080600080600080600060e0888a03121561151c57600080fd5b61152588611450565b965061153360208901611450565b95506040880135945060608801359350608088013560ff8116811461155757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561158757600080fd5b61159083611450565b915061159e60208401611450565b90509250929050565b600181811c908216806115bb57607f821691505b6020821081036115f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156104d6576104d66115fa565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361166d5761166d6115fa565b506001019056fea26469706673582212206fe049be388a1d04319b9913fe6d100c4c8e272fe0f5748eb056bd0622beabcc64736f6c63430008140033a26469706673582212204ffa5ec8cc59a75d9470fb65ee9632a49c615ff5668ca52f0569ee06e797553f64736f6c63430008140033", } // PolygonzkevmbridgeABI is the input ABI used to generate the binding from. @@ -156,11 +157,11 @@ func NewPolygonzkevmbridgeFilterer(address common.Address, filterer bind.Contrac // bindPolygonzkevmbridge binds a generic wrapper to an already deployed contract. func bindPolygonzkevmbridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(PolygonzkevmbridgeABI)) + parsed, err := PolygonzkevmbridgeMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and diff --git a/etherman/smartcontracts/polygonzkevmbridgel2/polygonzkevmbridgel2.go b/etherman/smartcontracts/polygonzkevmbridgel2/polygonzkevmbridgel2.go new file mode 100644 index 0000000000..d988f771aa --- /dev/null +++ b/etherman/smartcontracts/polygonzkevmbridgel2/polygonzkevmbridgel2.go @@ -0,0 +1,2132 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package polygonzkevmbridgel2 + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// Polygonzkevmbridgel2MetaData contains all meta data concerning the Polygonzkevmbridgel2 contract. +var Polygonzkevmbridgel2MetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"AlreadyClaimed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountDoesNotMatchMsgValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DestinationNetworkInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EtherTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GlobalExitRootInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSmtProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MerkleTreeFull\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MessageFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MsgValueNotZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotValidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotValidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotValidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotValidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyEmergencyState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyNotEmergencyState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPolygonZkEVM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotPermitted\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"AllL2TokensPermissionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"leafType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"originAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"depositCount\",\"type\":\"uint32\"}],\"name\":\"BridgeEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"originAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ClaimEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EmergencyStateActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EmergencyStateDeactivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"L2TokenPermissionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"wrappedTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"name\":\"NewWrappedToken\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WETHToken\",\"outputs\":[{\"internalType\":\"contractTokenWrapped\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activateEmergencyState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"forceUpdateGlobalExitRoot\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"permitData\",\"type\":\"bytes\"}],\"name\":\"bridgeAsset\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountWETH\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"forceUpdateGlobalExitRoot\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"name\":\"bridgeMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[32]\",\"name\":\"smtProof\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"mainnetExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"rollupExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"name\":\"claimAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[32]\",\"name\":\"smtProof\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"mainnetExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"rollupExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"name\":\"claimMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimedBitMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deactivateEmergencyState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasTokenNetwork\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDepositRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"leafType\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destinationNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"metadataHash\",\"type\":\"bytes32\"}],\"name\":\"getLeafValue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"}],\"name\":\"getTokenWrappedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalExitRootManager\",\"outputs\":[{\"internalType\":\"contractIBasePolygonZkEVMGlobalExitRoot\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_networkID\",\"type\":\"uint32\"},{\"internalType\":\"contractIBasePolygonZkEVMGlobalExitRoot\",\"name\":\"_globalExitRootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_polygonZkEVMaddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_gasTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_gasTokenNetwork\",\"type\":\"uint32\"},{\"internalType\":\"contractTokenWrapped\",\"name\":\"_WETHToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isAllL2TokensAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"isClaimed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isEmergencyState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isTokenAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastUpdatedDepositCount\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"networkID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"polygonZkEVMaddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"precalculatedWrapperAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setAllL2TokensAllowed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setL2TokenBridgePermission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"tokenInfoToWrappedToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateGlobalExitRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"leafHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"smtProof\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyMerkleProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"wrappedTokenToTokenInfo\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"originNetwork\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"originTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50616653806100206000396000f3fe608060405260043610620001f35760003560e01c80634b2f336d116200010b578063be5831c711620000a1578063dd51f5c1116200006c578063dd51f5c11462000793578063ee25560b14620007b8578063f9eaee0d14620007e9578063fb570834146200081d57600080fd5b8063be5831c714620006f0578063cd586579146200072c578063d02103ca1462000743578063dbc16976146200077b57600080fd5b80639e34070f11620000e25780639e34070f146200064b578063aaa13cc21462000690578063b2169f2c14620006b5578063bab161bf14620006cc57600080fd5b80634b2f336d14620005bd57806379e2cf9714620005ec57806381b1c174146200060457600080fd5b80632dfdf0b5116200018d5780633ae0504711620001585780633ae0504714620004355780633c351e10146200044d5780633cbc795b146200047c5780633e19704314620004c957600080fd5b80632dfdf0b51462000331578063318aee3d146200035857806334ac9cf214620003e15780633797306a146200041057600080fd5b806322e95f2c11620001ce57806322e95f2c14620002775780632cc9f16314620002c25780632cffd02e14620002e75780632d2c9d94146200030c57600080fd5b80630ac1be4314620001f857806315064c9614620002415780632072f6c5146200025d575b600080fd5b3480156200020557600080fd5b50606e546200022c9074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b3480156200024e57600080fd5b506068546200022c9060ff1681565b3480156200026a57600080fd5b506200027562000842565b005b3480156200028457600080fd5b506200029c6200029636600462003c09565b620008a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200162000238565b348015620002cf57600080fd5b5062000275620002e136600462003c45565b62000943565b348015620002f457600080fd5b50620002756200030636600462003d2f565b62000bf6565b3480156200031957600080fd5b50620002756200032b36600462003d2f565b62001281565b3480156200033e57600080fd5b506200034960535481565b60405190815260200162000238565b3480156200036557600080fd5b50620003af6200037736600462003e15565b606b6020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000238565b348015620003ee57600080fd5b50606c546200029c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200041d57600080fd5b50620002756200042f36600462003e4b565b62001512565b3480156200044257600080fd5b50620003496200169b565b3480156200045a57600080fd5b50606d546200029c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200048957600080fd5b50606d54620004b39074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff909116815260200162000238565b348015620004d657600080fd5b5062000349620004e836600462003e7b565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620005ca57600080fd5b50606e546200029c9073ffffffffffffffffffffffffffffffffffffffff1681565b348015620005f957600080fd5b506200027562001781565b3480156200061157600080fd5b506200029c6200062336600462003f05565b606a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200065857600080fd5b506200022c6200066a36600462003f05565b600881901c600090815260696020526040902054600160ff9092169190911b9081161490565b3480156200069d57600080fd5b506200029c620006af36600462003f1f565b620017bb565b62000275620006c636600462003fd3565b620019a7565b348015620006d957600080fd5b50606854620004b390610100900463ffffffff1681565b348015620006fd57600080fd5b50606854620004b390790100000000000000000000000000000000000000000000000000900463ffffffff1681565b620002756200073d36600462004060565b62001c91565b3480156200075057600080fd5b506068546200029c9065010000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200078857600080fd5b506200027562002368565b348015620007a057600080fd5b5062000275620007b236600462004102565b620023c4565b348015620007c557600080fd5b5062000349620007d736600462003f05565b60696020526000908152604090205481565b348015620007f657600080fd5b506200022c6200080836600462003e15565b606f6020526000908152604090205460ff1681565b3480156200082a57600080fd5b506200022c6200083c36600462004135565b620025ba565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462000894576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200089e620026a3565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602483015282516018818403018152603890920183528151918101919091206000908152606a909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b600054610100900460ff1615808015620009645750600054600160ff909116105b80620009805750303b15801562000980575060005460ff166001145b62000a12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562000a7157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6068805473ffffffffffffffffffffffffffffffffffffffff80891665010000000000027fffffffffffffff0000000000000000000000000000000000000000ffffffffff63ffffffff808d1661010002919091167fffffffffffffff000000000000000000000000000000000000000000000000ff9094169390931717909255606c80548884167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155606d805492871674010000000000000000000000000000000000000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093168885161792909217909155606e80549285169290911691909117905562000b8962002737565b801562000bed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60685460ff161562000c34576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000c4b8b8b8b8b8b8b8b8b8b8b8b6000620027da565b73ffffffffffffffffffffffffffffffffffffffff861662000cfb57606e546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052909116906340c10f1990604401600060405180830381600087803b15801562000cdc57600080fd5b505af115801562000cf1573d6000803e3d6000fd5b5050505062001209565b606d5473ffffffffffffffffffffffffffffffffffffffff878116911614801562000d485750606d5463ffffffff8881167401000000000000000000000000000000000000000090920416145b1562000e0e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162000d879190620041d7565b60006040518083038185875af1925050503d806000811462000dc6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcb565b606091505b505090508062000e07576040517f6747a28800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062001209565b60685463ffffffff61010090910481169088160362000e505762000e4a73ffffffffffffffffffffffffffffffffffffffff87168585620029cb565b62001209565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152606a90935291205490915073ffffffffffffffffffffffffffffffffffffffff16806200117b576000808062000f2586880188620042ec565b92509250925060008584848460405162000f3f9062003bc0565b62000f4d93929190620043b9565b8190604051809103906000f590508015801562000f6e573d6000803e3d6000fd5b506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c9052919250908216906340c10f1990604401600060405180830381600087803b15801562000fe457600080fd5b505af115801562000ff9573d6000803e3d6000fd5b5050505080606a600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a398d8d838b8b604051620011699594939291906200443f565b60405180910390a15050505062001206565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f1990604401600060405180830381600087803b158015620011ec57600080fd5b505af115801562001201573d6000803e3d6000fd5b505050505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b60685460ff1615620012bf576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620012d68b8b8b8b8b8b8b8b8b8b8b6001620027da565b606e546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052909116906340c10f1990604401600060405180830381600087803b1580156200134b57600080fd5b505af115801562001360573d6000803e3d6000fd5b5050505060008473ffffffffffffffffffffffffffffffffffffffff168789858560405160240162001396949392919062004487565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014199190620041d7565b6000604051808303816000865af19150503d806000811462001458576040519150601f19603f3d011682016040523d82523d6000602084013e6200145d565b606091505b505090508062001499576040517f37e391c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462001564576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606e5474010000000000000000000000000000000000000000900460ff1615158115150362001616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f416c6c204c3220746f6b656e7320616c7265616479206861766520746865207060448201527f65726d697373696f6e0000000000000000000000000000000000000000000000606482015260840162000a09565b606e805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f11c1c68b4bf6f68350aa1983fe17ee1d005a7189994475ddbc4b9fc4e4ef02b8906200169090831515815260200190565b60405180910390a150565b605354600090819081805b602081101562001778578083901c600116600103620017095760338160208110620016d557620016d5620044cf565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062001736565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b604080516020810184905290810183905260600160405160208183030381529060405280519060200120915080806200176f906200452d565b915050620016a6565b50919392505050565b605354606854790100000000000000000000000000000000000000000000000000900463ffffffff1610156200089e576200089e62002aa6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620018519062003bc0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f9091011660408190526200189c908d908d908d908d908d9060200162004568565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620018da9291602001620045a9565b604051602081830303815290604052805190602001206040516020016200196394939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101209a9950505050505050505050565b60685460ff1615620019e5576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff87811661010090920416148062001a0b5750600263ffffffff871610155b1562001a43576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b341562001a7c576040517f798ee6f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606e546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810186905273ffffffffffffffffffffffffffffffffffffffff90911690639dc29fac90604401600060405180830381600087803b15801562001aef57600080fd5b505af115801562001b04573d6000803e3d6000fd5b50506068546053546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b945062001b5a9350600192610100900463ffffffff169133918c918c918c918b918b9190620045dc565b60405180910390a162001c7862001c726001606860019054906101000a900463ffffffff16338a8a8a898960405162001b9592919062004657565b60405180910390206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b62002b81565b821562001c895762001c8962002aa6565b505050505050565b60685460ff161562001ccf576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62001cd962002c93565b60685463ffffffff88811661010090920416148062001cff5750600263ffffffff881610155b1562001d37576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060608773ffffffffffffffffffffffffffffffffffffffff881662001dd55788341462001d93576040517fb89240f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606d5473ffffffffffffffffffffffffffffffffffffffff8116945074010000000000000000000000000000000000000000900463ffffffff16925062002213565b341562001e0e576040517f798ee6f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606e5473ffffffffffffffffffffffffffffffffffffffff9081169089160362001ec8576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018a905273ffffffffffffffffffffffffffffffffffffffff891690639dc29fac90604401600060405180830381600087803b15801562001ea157600080fd5b505af115801562001eb6573d6000803e3d6000fd5b50505050600092506000935062002213565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152606b602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001fb8576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018b905273ffffffffffffffffffffffffffffffffffffffff8a1690639dc29fac90604401600060405180830381600087803b15801562001f8b57600080fd5b505af115801562001fa0573d6000803e3d6000fd5b50505050806020015194508060000151935062002211565b606e5474010000000000000000000000000000000000000000900460ff161580156200200a575073ffffffffffffffffffffffffffffffffffffffff89166000908152606f602052604090205460ff16155b1562002042576040517f3759891400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515620020575762002057898b898962002d08565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa158015620020c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020eb919062004667565b90506200211173ffffffffffffffffffffffffffffffffffffffff8b1633308e62003227565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8c16906370a0823190602401602060405180830381865afa1580156200217f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021a5919062004667565b9050620021b3828262004681565b6068548c9850610100900463ffffffff1696509350620021d38762003287565b620021de8c6200339f565b620021e98d620034ac565b604051602001620021fd93929190620043b9565b604051602081830303815290604052945050505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600084868e8e86886053546040516200225598979695949392919062004697565b60405180910390a16200234962001c72600085878f8f8789805190602001206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b86156200235a576200235a62002aa6565b5050505062000bed60018055565b606c5473ffffffffffffffffffffffffffffffffffffffff163314620023ba576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200089e620035ae565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462002416576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821662002495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e76616c696420746f6b656e20616464726573730000000000000000000000604482015260640162000a09565b73ffffffffffffffffffffffffffffffffffffffff82166000908152606f602052604090205460ff161515811515036200252c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f546f6b656e20616c72656164792068617320746865207065726d697373696f6e604482015260640162000a09565b73ffffffffffffffffffffffffffffffffffffffff82166000818152606f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f6036bc45ffdc28cb8eb8a5afad20d8d1b999da9512abc39c0a9f52995a74998d910160405180910390a15050565b600084815b60208110156200269557600163ffffffff8616821c811690036200263157858160208110620025f257620025f2620044cf565b60200201358260405160200162002613929190918252602082015260400190565b60405160208183030381529060405280519060200120915062002680565b81868260208110620026475762002647620044cf565b602002013560405160200162002667929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b806200268c816200452d565b915050620025bf565b50821490505b949350505050565b60685460ff1615620026e1576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b600054610100900460ff16620027d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000a09565b6200089e6200363e565b620027eb8b63ffffffff16620036d7565b6068546040805160208082018e90528183018d9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915260009165010000000000900473ffffffffffffffffffffffffffffffffffffffff169063257b3632906084016020604051808303816000875af11580156200288e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620028b4919062004667565b905080600003620028f0576040517e2f6fad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff88811661010090920416146200293a576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606854600090610100900463ffffffff16620029585750896200295b565b508a5b620029846200297b848c8c8c8c8c8c8c60405162001b9592919062004657565b8f8f84620025ba565b620029bb576040517fe0417cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262002aa19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200373c565b505050565b6053546068805463ffffffff909216790100000000000000000000000000000000000000000000000000027fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179081905573ffffffffffffffffffffffffffffffffffffffff65010000000000909104166333d6247d62002b2c6200169b565b6040518263ffffffff1660e01b815260040162002b4b91815260200190565b600060405180830381600087803b15801562002b6657600080fd5b505af115801562002b7b573d6000803e3d6000fd5b50505050565b80600162002b926020600262004849565b62002b9e919062004681565b6053541062002bd9576040517fef5ccf6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060536000815462002bec906200452d565b9182905550905060005b602081101562002c88578082901c60011660010362002c2e57826033826020811062002c265762002c26620044cf565b015550505050565b6033816020811062002c445762002c44620044cf565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250808062002c7f906200452d565b91505062002bf6565b5062002aa162004857565b60026001540362002d01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640162000a09565b6002600155565b600062002d19600482848662004886565b62002d2491620048b2565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002fa357600080808080808062002d87896004818d62004886565b81019062002d969190620048fb565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002e0a576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8616301462002e5a576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8a851462002e94576040517f03fffc4b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002f4f9190620041d7565b6000604051808303816000865af19150503d806000811462002f8e576040519150601f19603f3d011682016040523d82523d6000602084013e62002f93565b606091505b5050505050505050505062003220565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200301f576040517fe282c0ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080808080808080620030378a6004818e62004886565b81019062003046919062004956565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614620030bc576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff871630146200310c576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620031d09190620041d7565b6000604051808303816000865af19150503d80600081146200320f576040519150601f19603f3d011682016040523d82523d6000602084013e62003214565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b7b9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002a1e565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde03000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff8616916200330b9190620041d7565b600060405180830381855afa9150503d806000811462003348576040519150601f19603f3d011682016040523d82523d6000602084013e6200334d565b606091505b50915091508162003394576040518060400160405280600781526020017f4e4f5f4e414d45000000000000000000000000000000000000000000000000008152506200269b565b6200269b816200384f565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff861691620034239190620041d7565b600060405180830381855afa9150503d806000811462003460576040519150601f19603f3d011682016040523d82523d6000602084013e62003465565b606091505b50915091508162003394576040518060400160405280600981526020017f4e4f5f53594d424f4c00000000000000000000000000000000000000000000008152506200269b565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff8616916200352f9190620041d7565b600060405180830381855afa9150503d80600081146200356c576040519150601f19603f3d011682016040523d82523d6000602084013e62003571565b606091505b509150915081801562003585575080516020145b620035925760126200269b565b808060200190518101906200269b9190620049e2565b60018055565b60685460ff16620035eb576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600054610100900460ff16620035a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000a09565b600881901c60008181526069602052604081208054600160ff861690811b9182189283905592909190818316900362003220576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000620037a0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662003a3f9092919063ffffffff16565b80519091501562002aa15780806020019051810190620037c1919062004a02565b62002aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000a09565b606060408251106200387157818060200190518101906200093d919062004a22565b815160200362003a015760005b602081108015620038c957508281815181106200389f576200389f620044cf565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b15620038e45780620038db816200452d565b9150506200387e565b806000036200392857505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e4700000000000000000000000000006020820152919050565b60008167ffffffffffffffff81111562003946576200394662004182565b6040519080825280601f01601f19166020018201604052801562003971576020820181803683370190505b50905060005b82811015620039f957848181518110620039955762003995620044cf565b602001015160f81c60f81b828281518110620039b557620039b5620044cf565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080620039f0816200452d565b91505062003977565b509392505050565b505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e470000000000000000000000000000602082015290565b919050565b60606200269b8484600085856000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003a769190620041d7565b60006040518083038185875af1925050503d806000811462003ab5576040519150601f19603f3d011682016040523d82523d6000602084013e62003aba565b606091505b509150915062003acd8783838762003ad8565b979650505050505050565b6060831562003b7357825160000362003b6b5773ffffffffffffffffffffffffffffffffffffffff85163b62003b6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000a09565b50816200269b565b6200269b838381511562003b8a5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a09919062004aa2565b611b668062004ab883390190565b803563ffffffff8116811462003a3a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811462003c0657600080fd5b50565b6000806040838503121562003c1d57600080fd5b62003c288362003bce565b9150602083013562003c3a8162003be3565b809150509250929050565b60008060008060008060c0878903121562003c5f57600080fd5b62003c6a8762003bce565b9550602087013562003c7c8162003be3565b9450604087013562003c8e8162003be3565b9350606087013562003ca08162003be3565b925062003cb06080880162003bce565b915060a087013562003cc28162003be3565b809150509295509295509295565b8061040081018310156200093d57600080fd5b60008083601f84011262003cf657600080fd5b50813567ffffffffffffffff81111562003d0f57600080fd5b60208301915083602082850101111562003d2857600080fd5b9250929050565b60008060008060008060008060008060006105208c8e03121562003d5257600080fd5b62003d5e8d8d62003cd0565b9a5062003d6f6104008d0162003bce565b99506104208c013598506104408c0135975062003d906104608d0162003bce565b96506104808c013562003da38162003be3565b955062003db46104a08d0162003bce565b94506104c08c013562003dc78162003be3565b93506104e08c013592506105008c013567ffffffffffffffff81111562003ded57600080fd5b62003dfb8e828f0162003ce3565b915080935050809150509295989b509295989b9093969950565b60006020828403121562003e2857600080fd5b813562003e358162003be3565b9392505050565b801515811462003c0657600080fd5b60006020828403121562003e5e57600080fd5b813562003e358162003e3c565b60ff8116811462003c0657600080fd5b600080600080600080600060e0888a03121562003e9757600080fd5b873562003ea48162003e6b565b965062003eb46020890162003bce565b9550604088013562003ec68162003be3565b945062003ed66060890162003bce565b9350608088013562003ee88162003be3565b9699959850939692959460a0840135945060c09093013592915050565b60006020828403121562003f1857600080fd5b5035919050565b600080600080600080600060a0888a03121562003f3b57600080fd5b62003f468862003bce565b9650602088013562003f588162003be3565b9550604088013567ffffffffffffffff8082111562003f7657600080fd5b62003f848b838c0162003ce3565b909750955060608a013591508082111562003f9e57600080fd5b5062003fad8a828b0162003ce3565b909450925050608088013562003fc38162003e6b565b8091505092959891949750929550565b60008060008060008060a0878903121562003fed57600080fd5b62003ff88762003bce565b955060208701356200400a8162003be3565b9450604087013593506060870135620040238162003e3c565b9250608087013567ffffffffffffffff8111156200404057600080fd5b6200404e89828a0162003ce3565b979a9699509497509295939492505050565b600080600080600080600060c0888a0312156200407c57600080fd5b620040878862003bce565b96506020880135620040998162003be3565b9550604088013594506060880135620040b28162003be3565b93506080880135620040c48162003e3c565b925060a088013567ffffffffffffffff811115620040e157600080fd5b620040ef8a828b0162003ce3565b989b979a50959850939692959293505050565b600080604083850312156200411657600080fd5b8235620041238162003be3565b9150602083013562003c3a8162003e3c565b60008060008061046085870312156200414d57600080fd5b8435935062004160866020870162003cd0565b925062004171610420860162003bce565b939692955092936104400135925050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015620041ce578181015183820152602001620041b4565b50506000910152565b60008251620041eb818460208701620041b1565b9190910192915050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200423f576200423f62004182565b604052919050565b600067ffffffffffffffff82111562004264576200426462004182565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620042a257600080fd5b8135620042b9620042b38262004247565b620041f5565b818152846020838601011115620042cf57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156200430257600080fd5b833567ffffffffffffffff808211156200431b57600080fd5b620043298783880162004290565b945060208601359150808211156200434057600080fd5b506200434f8682870162004290565b9250506040840135620043628162003e6b565b809150509250925092565b6000815180845262004387816020860160208601620041b1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606081526000620043ce60608301866200436d565b8281036020840152620043e281866200436d565b91505060ff83166040830152949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b63ffffffff86168152600073ffffffffffffffffffffffffffffffffffffffff80871660208401528086166040840152506080606083015262003acd608083018486620043f6565b73ffffffffffffffffffffffffffffffffffffffff8516815263ffffffff84166020820152606060408201526000620044c5606083018486620043f6565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620045615762004561620044fe565b5060010190565b6060815260006200457e606083018789620043f6565b828103602084015262004593818688620043f6565b91505060ff831660408301529695505050505050565b60008351620045bd818460208801620041b1565b835190830190620045d3818360208801620041b1565b01949350505050565b600061010060ff8c16835263ffffffff808c16602085015273ffffffffffffffffffffffffffffffffffffffff808c166040860152818b166060860152808a166080860152508760a08501528160c08501526200463d8285018789620043f6565b925080851660e085015250509a9950505050505050505050565b8183823760009101908152919050565b6000602082840312156200467a57600080fd5b5051919050565b818103818111156200093d576200093d620044fe565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620046f7828501876200436d565b925080851660e085015250509998505050505050505050565b600181815b808511156200476f57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620047535762004753620044fe565b808516156200476157918102915b93841c939080029062004715565b509250929050565b60008262004788575060016200093d565b8162004797575060006200093d565b8160018114620047b05760028114620047bb57620047db565b60019150506200093d565b60ff841115620047cf57620047cf620044fe565b50506001821b6200093d565b5060208310610133831016604e8410600b841016171562004800575081810a6200093d565b6200480c838362004710565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620048415762004841620044fe565b029392505050565b600062003e35838362004777565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200489757600080fd5b83861115620048a557600080fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015620048f35780818660040360031b1b83161692505b505092915050565b600080600080600080600060e0888a0312156200491757600080fd5b8735620049248162003be3565b96506020880135620049368162003be3565b95506040880135945060608801359350608088013562003ee88162003e6b565b600080600080600080600080610100898b0312156200497457600080fd5b8835620049818162003be3565b97506020890135620049938162003be3565b965060408901359550606089013594506080890135620049b38162003e3c565b935060a0890135620049c58162003e6b565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215620049f557600080fd5b815162003e358162003e6b565b60006020828403121562004a1557600080fd5b815162003e358162003e3c565b60006020828403121562004a3557600080fd5b815167ffffffffffffffff81111562004a4d57600080fd5b8201601f8101841362004a5f57600080fd5b805162004a70620042b38262004247565b81815285602083850101111562004a8657600080fd5b62004a99826020830160208601620041b1565b95945050505050565b60208152600062003e3560208301846200436d56fe6101006040523480156200001257600080fd5b5060405162001b6638038062001b6683398101604081905262000035916200028d565b82826003620000458382620003a1565b506004620000548282620003a1565b50503360c0525060ff811660e052466080819052620000739062000080565b60a052506200046d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000ad6200012e565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6060600380546200013f9062000312565b80601f01602080910402602001604051908101604052809291908181526020018280546200016d9062000312565b8015620001be5780601f106200019257610100808354040283529160200191620001be565b820191906000526020600020905b815481529060010190602001808311620001a057829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f057600080fd5b81516001600160401b03808211156200020d576200020d620001c8565b604051601f8301601f19908116603f01168101908282118183101715620002385762000238620001c8565b816040528381526020925086838588010111156200025557600080fd5b600091505b838210156200027957858201830151818301840152908201906200025a565b600093810190920192909252949350505050565b600080600060608486031215620002a357600080fd5b83516001600160401b0380821115620002bb57600080fd5b620002c987838801620001de565b94506020860151915080821115620002e057600080fd5b50620002ef86828701620001de565b925050604084015160ff811681146200030757600080fd5b809150509250925092565b600181811c908216806200032757607f821691505b6020821081036200034857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039c57600081815260208120601f850160051c81016020861015620003775750805b601f850160051c820191505b81811015620003985782815560010162000383565b5050505b505050565b81516001600160401b03811115620003bd57620003bd620001c8565b620003d581620003ce845462000312565b846200034e565b602080601f8311600181146200040d5760008415620003f45750858301515b600019600386901b1c1916600185901b17855562000398565b600085815260208120601f198616915b828110156200043e578886015182559484019460019091019084016200041d565b50858210156200045d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516116aa620004bc6000396000610237015260008181610307015281816105c001526106a70152600061053a015260008181610379015261050401526116aa6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf1461039b578063dd62ed3e146103ae578063ffa1ad74146103f457600080fd5b8063a457c2d71461034e578063a9059cbb14610361578063cd0d00961461037457600080fd5b806395d89b41116100bd57806395d89b41146102e75780639dc29fac146102ef578063a3c573eb1461030257600080fd5b806370a08231146102915780637ecebe00146102c757600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610261578063395093511461026957806340c10f191461027c57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610430565b60405161019191906113e4565b60405180910390f35b6101ad6101a8366004611479565b6104c2565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad6102043660046114a3565b6104dc565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610191565b6101c1610500565b6101ad610277366004611479565b61055c565b61028f61028a366004611479565b6105a8565b005b6101c161029f3660046114df565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d53660046114df565b60056020526000908152604090205481565b610184610680565b61028f6102fd366004611479565b61068f565b6103297f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad61035c366004611479565b61075e565b6101ad61036f366004611479565b61082f565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b61028f6103a9366004611501565b61083d565b6101c16103bc366004611574565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043f906115a7565b80601f016020809104026020016040519081016040528092919081815260200182805461046b906115a7565b80156104b85780601f1061048d576101008083540402835291602001916104b8565b820191906000526020600020905b81548152906001019060200180831161049b57829003601f168201915b5050505050905090565b6000336104d0818585610b73565b60019150505b92915050565b6000336104ea858285610d27565b6104f5858585610dfe565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610537576105324661106d565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104d090829086906105a3908790611629565b610b73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d4272696467650000000000000000000000000000000060648201526084015b60405180910390fd5b61067c8282611135565b5050565b60606004805461043f906115a7565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d427269646765000000000000000000000000000000006064820152608401610669565b61067c8282611228565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610669565b6104f58286868403610b73565b6000336104d0818585610dfe565b834211156108cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866109268361163c565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610991610500565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610a55573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610ad057508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610669565b610b678a8a8a610b73565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610cb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610df85781811015610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610669565b610df88484848403610b73565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610f44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610df8565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611098610430565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166111b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610669565b80600260008282546111c49190611629565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166112cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610d1a565b600060208083528351808285015260005b81811015611411578581018301518582016040015282016113f5565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461147457600080fd5b919050565b6000806040838503121561148c57600080fd5b61149583611450565b946020939093013593505050565b6000806000606084860312156114b857600080fd5b6114c184611450565b92506114cf60208501611450565b9150604084013590509250925092565b6000602082840312156114f157600080fd5b6114fa82611450565b9392505050565b600080600080600080600060e0888a03121561151c57600080fd5b61152588611450565b965061153360208901611450565b95506040880135945060608801359350608088013560ff8116811461155757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561158757600080fd5b61159083611450565b915061159e60208401611450565b90509250929050565b600181811c908216806115bb57607f821691505b6020821081036115f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156104d6576104d66115fa565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361166d5761166d6115fa565b506001019056fea26469706673582212206fe049be388a1d04319b9913fe6d100c4c8e272fe0f5748eb056bd0622beabcc64736f6c63430008140033a26469706673582212205a6863755e218a86185b7a8974ed88bf11d02370ae341214fc0245f726eb00a064736f6c63430008140033", +} + +// Polygonzkevmbridgel2ABI is the input ABI used to generate the binding from. +// Deprecated: Use Polygonzkevmbridgel2MetaData.ABI instead. +var Polygonzkevmbridgel2ABI = Polygonzkevmbridgel2MetaData.ABI + +// Polygonzkevmbridgel2Bin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use Polygonzkevmbridgel2MetaData.Bin instead. +var Polygonzkevmbridgel2Bin = Polygonzkevmbridgel2MetaData.Bin + +// DeployPolygonzkevmbridgel2 deploys a new Ethereum contract, binding an instance of Polygonzkevmbridgel2 to it. +func DeployPolygonzkevmbridgel2(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Polygonzkevmbridgel2, error) { + parsed, err := Polygonzkevmbridgel2MetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(Polygonzkevmbridgel2Bin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Polygonzkevmbridgel2{Polygonzkevmbridgel2Caller: Polygonzkevmbridgel2Caller{contract: contract}, Polygonzkevmbridgel2Transactor: Polygonzkevmbridgel2Transactor{contract: contract}, Polygonzkevmbridgel2Filterer: Polygonzkevmbridgel2Filterer{contract: contract}}, nil +} + +// Polygonzkevmbridgel2 is an auto generated Go binding around an Ethereum contract. +type Polygonzkevmbridgel2 struct { + Polygonzkevmbridgel2Caller // Read-only binding to the contract + Polygonzkevmbridgel2Transactor // Write-only binding to the contract + Polygonzkevmbridgel2Filterer // Log filterer for contract events +} + +// Polygonzkevmbridgel2Caller is an auto generated read-only Go binding around an Ethereum contract. +type Polygonzkevmbridgel2Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// Polygonzkevmbridgel2Transactor is an auto generated write-only Go binding around an Ethereum contract. +type Polygonzkevmbridgel2Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// Polygonzkevmbridgel2Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type Polygonzkevmbridgel2Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// Polygonzkevmbridgel2Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type Polygonzkevmbridgel2Session struct { + Contract *Polygonzkevmbridgel2 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// Polygonzkevmbridgel2CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type Polygonzkevmbridgel2CallerSession struct { + Contract *Polygonzkevmbridgel2Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// Polygonzkevmbridgel2TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type Polygonzkevmbridgel2TransactorSession struct { + Contract *Polygonzkevmbridgel2Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// Polygonzkevmbridgel2Raw is an auto generated low-level Go binding around an Ethereum contract. +type Polygonzkevmbridgel2Raw struct { + Contract *Polygonzkevmbridgel2 // Generic contract binding to access the raw methods on +} + +// Polygonzkevmbridgel2CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type Polygonzkevmbridgel2CallerRaw struct { + Contract *Polygonzkevmbridgel2Caller // Generic read-only contract binding to access the raw methods on +} + +// Polygonzkevmbridgel2TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type Polygonzkevmbridgel2TransactorRaw struct { + Contract *Polygonzkevmbridgel2Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewPolygonzkevmbridgel2 creates a new instance of Polygonzkevmbridgel2, bound to a specific deployed contract. +func NewPolygonzkevmbridgel2(address common.Address, backend bind.ContractBackend) (*Polygonzkevmbridgel2, error) { + contract, err := bindPolygonzkevmbridgel2(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Polygonzkevmbridgel2{Polygonzkevmbridgel2Caller: Polygonzkevmbridgel2Caller{contract: contract}, Polygonzkevmbridgel2Transactor: Polygonzkevmbridgel2Transactor{contract: contract}, Polygonzkevmbridgel2Filterer: Polygonzkevmbridgel2Filterer{contract: contract}}, nil +} + +// NewPolygonzkevmbridgel2Caller creates a new read-only instance of Polygonzkevmbridgel2, bound to a specific deployed contract. +func NewPolygonzkevmbridgel2Caller(address common.Address, caller bind.ContractCaller) (*Polygonzkevmbridgel2Caller, error) { + contract, err := bindPolygonzkevmbridgel2(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &Polygonzkevmbridgel2Caller{contract: contract}, nil +} + +// NewPolygonzkevmbridgel2Transactor creates a new write-only instance of Polygonzkevmbridgel2, bound to a specific deployed contract. +func NewPolygonzkevmbridgel2Transactor(address common.Address, transactor bind.ContractTransactor) (*Polygonzkevmbridgel2Transactor, error) { + contract, err := bindPolygonzkevmbridgel2(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &Polygonzkevmbridgel2Transactor{contract: contract}, nil +} + +// NewPolygonzkevmbridgel2Filterer creates a new log filterer instance of Polygonzkevmbridgel2, bound to a specific deployed contract. +func NewPolygonzkevmbridgel2Filterer(address common.Address, filterer bind.ContractFilterer) (*Polygonzkevmbridgel2Filterer, error) { + contract, err := bindPolygonzkevmbridgel2(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &Polygonzkevmbridgel2Filterer{contract: contract}, nil +} + +// bindPolygonzkevmbridgel2 binds a generic wrapper to an already deployed contract. +func bindPolygonzkevmbridgel2(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := Polygonzkevmbridgel2MetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Polygonzkevmbridgel2.Contract.Polygonzkevmbridgel2Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.Polygonzkevmbridgel2Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.Polygonzkevmbridgel2Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Polygonzkevmbridgel2.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.contract.Transact(opts, method, params...) +} + +// WETHToken is a free data retrieval call binding the contract method 0x4b2f336d. +// +// Solidity: function WETHToken() view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) WETHToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "WETHToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// WETHToken is a free data retrieval call binding the contract method 0x4b2f336d. +// +// Solidity: function WETHToken() view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) WETHToken() (common.Address, error) { + return _Polygonzkevmbridgel2.Contract.WETHToken(&_Polygonzkevmbridgel2.CallOpts) +} + +// WETHToken is a free data retrieval call binding the contract method 0x4b2f336d. +// +// Solidity: function WETHToken() view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) WETHToken() (common.Address, error) { + return _Polygonzkevmbridgel2.Contract.WETHToken(&_Polygonzkevmbridgel2.CallOpts) +} + +// ClaimedBitMap is a free data retrieval call binding the contract method 0xee25560b. +// +// Solidity: function claimedBitMap(uint256 ) view returns(uint256) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) ClaimedBitMap(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "claimedBitMap", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ClaimedBitMap is a free data retrieval call binding the contract method 0xee25560b. +// +// Solidity: function claimedBitMap(uint256 ) view returns(uint256) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) ClaimedBitMap(arg0 *big.Int) (*big.Int, error) { + return _Polygonzkevmbridgel2.Contract.ClaimedBitMap(&_Polygonzkevmbridgel2.CallOpts, arg0) +} + +// ClaimedBitMap is a free data retrieval call binding the contract method 0xee25560b. +// +// Solidity: function claimedBitMap(uint256 ) view returns(uint256) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) ClaimedBitMap(arg0 *big.Int) (*big.Int, error) { + return _Polygonzkevmbridgel2.Contract.ClaimedBitMap(&_Polygonzkevmbridgel2.CallOpts, arg0) +} + +// DepositCount is a free data retrieval call binding the contract method 0x2dfdf0b5. +// +// Solidity: function depositCount() view returns(uint256) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) DepositCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "depositCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// DepositCount is a free data retrieval call binding the contract method 0x2dfdf0b5. +// +// Solidity: function depositCount() view returns(uint256) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) DepositCount() (*big.Int, error) { + return _Polygonzkevmbridgel2.Contract.DepositCount(&_Polygonzkevmbridgel2.CallOpts) +} + +// DepositCount is a free data retrieval call binding the contract method 0x2dfdf0b5. +// +// Solidity: function depositCount() view returns(uint256) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) DepositCount() (*big.Int, error) { + return _Polygonzkevmbridgel2.Contract.DepositCount(&_Polygonzkevmbridgel2.CallOpts) +} + +// GasTokenAddress is a free data retrieval call binding the contract method 0x3c351e10. +// +// Solidity: function gasTokenAddress() view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) GasTokenAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "gasTokenAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GasTokenAddress is a free data retrieval call binding the contract method 0x3c351e10. +// +// Solidity: function gasTokenAddress() view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) GasTokenAddress() (common.Address, error) { + return _Polygonzkevmbridgel2.Contract.GasTokenAddress(&_Polygonzkevmbridgel2.CallOpts) +} + +// GasTokenAddress is a free data retrieval call binding the contract method 0x3c351e10. +// +// Solidity: function gasTokenAddress() view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) GasTokenAddress() (common.Address, error) { + return _Polygonzkevmbridgel2.Contract.GasTokenAddress(&_Polygonzkevmbridgel2.CallOpts) +} + +// GasTokenNetwork is a free data retrieval call binding the contract method 0x3cbc795b. +// +// Solidity: function gasTokenNetwork() view returns(uint32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) GasTokenNetwork(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "gasTokenNetwork") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GasTokenNetwork is a free data retrieval call binding the contract method 0x3cbc795b. +// +// Solidity: function gasTokenNetwork() view returns(uint32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) GasTokenNetwork() (uint32, error) { + return _Polygonzkevmbridgel2.Contract.GasTokenNetwork(&_Polygonzkevmbridgel2.CallOpts) +} + +// GasTokenNetwork is a free data retrieval call binding the contract method 0x3cbc795b. +// +// Solidity: function gasTokenNetwork() view returns(uint32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) GasTokenNetwork() (uint32, error) { + return _Polygonzkevmbridgel2.Contract.GasTokenNetwork(&_Polygonzkevmbridgel2.CallOpts) +} + +// GetDepositRoot is a free data retrieval call binding the contract method 0x3ae05047. +// +// Solidity: function getDepositRoot() view returns(bytes32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) GetDepositRoot(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "getDepositRoot") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetDepositRoot is a free data retrieval call binding the contract method 0x3ae05047. +// +// Solidity: function getDepositRoot() view returns(bytes32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) GetDepositRoot() ([32]byte, error) { + return _Polygonzkevmbridgel2.Contract.GetDepositRoot(&_Polygonzkevmbridgel2.CallOpts) +} + +// GetDepositRoot is a free data retrieval call binding the contract method 0x3ae05047. +// +// Solidity: function getDepositRoot() view returns(bytes32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) GetDepositRoot() ([32]byte, error) { + return _Polygonzkevmbridgel2.Contract.GetDepositRoot(&_Polygonzkevmbridgel2.CallOpts) +} + +// GetLeafValue is a free data retrieval call binding the contract method 0x3e197043. +// +// Solidity: function getLeafValue(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes32 metadataHash) pure returns(bytes32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) GetLeafValue(opts *bind.CallOpts, leafType uint8, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadataHash [32]byte) ([32]byte, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "getLeafValue", leafType, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadataHash) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetLeafValue is a free data retrieval call binding the contract method 0x3e197043. +// +// Solidity: function getLeafValue(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes32 metadataHash) pure returns(bytes32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) GetLeafValue(leafType uint8, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadataHash [32]byte) ([32]byte, error) { + return _Polygonzkevmbridgel2.Contract.GetLeafValue(&_Polygonzkevmbridgel2.CallOpts, leafType, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadataHash) +} + +// GetLeafValue is a free data retrieval call binding the contract method 0x3e197043. +// +// Solidity: function getLeafValue(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes32 metadataHash) pure returns(bytes32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) GetLeafValue(leafType uint8, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadataHash [32]byte) ([32]byte, error) { + return _Polygonzkevmbridgel2.Contract.GetLeafValue(&_Polygonzkevmbridgel2.CallOpts, leafType, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadataHash) +} + +// GetTokenWrappedAddress is a free data retrieval call binding the contract method 0x22e95f2c. +// +// Solidity: function getTokenWrappedAddress(uint32 originNetwork, address originTokenAddress) view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) GetTokenWrappedAddress(opts *bind.CallOpts, originNetwork uint32, originTokenAddress common.Address) (common.Address, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "getTokenWrappedAddress", originNetwork, originTokenAddress) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetTokenWrappedAddress is a free data retrieval call binding the contract method 0x22e95f2c. +// +// Solidity: function getTokenWrappedAddress(uint32 originNetwork, address originTokenAddress) view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) GetTokenWrappedAddress(originNetwork uint32, originTokenAddress common.Address) (common.Address, error) { + return _Polygonzkevmbridgel2.Contract.GetTokenWrappedAddress(&_Polygonzkevmbridgel2.CallOpts, originNetwork, originTokenAddress) +} + +// GetTokenWrappedAddress is a free data retrieval call binding the contract method 0x22e95f2c. +// +// Solidity: function getTokenWrappedAddress(uint32 originNetwork, address originTokenAddress) view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) GetTokenWrappedAddress(originNetwork uint32, originTokenAddress common.Address) (common.Address, error) { + return _Polygonzkevmbridgel2.Contract.GetTokenWrappedAddress(&_Polygonzkevmbridgel2.CallOpts, originNetwork, originTokenAddress) +} + +// GlobalExitRootManager is a free data retrieval call binding the contract method 0xd02103ca. +// +// Solidity: function globalExitRootManager() view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) GlobalExitRootManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "globalExitRootManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GlobalExitRootManager is a free data retrieval call binding the contract method 0xd02103ca. +// +// Solidity: function globalExitRootManager() view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) GlobalExitRootManager() (common.Address, error) { + return _Polygonzkevmbridgel2.Contract.GlobalExitRootManager(&_Polygonzkevmbridgel2.CallOpts) +} + +// GlobalExitRootManager is a free data retrieval call binding the contract method 0xd02103ca. +// +// Solidity: function globalExitRootManager() view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) GlobalExitRootManager() (common.Address, error) { + return _Polygonzkevmbridgel2.Contract.GlobalExitRootManager(&_Polygonzkevmbridgel2.CallOpts) +} + +// IsAllL2TokensAllowed is a free data retrieval call binding the contract method 0x0ac1be43. +// +// Solidity: function isAllL2TokensAllowed() view returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) IsAllL2TokensAllowed(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "isAllL2TokensAllowed") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsAllL2TokensAllowed is a free data retrieval call binding the contract method 0x0ac1be43. +// +// Solidity: function isAllL2TokensAllowed() view returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) IsAllL2TokensAllowed() (bool, error) { + return _Polygonzkevmbridgel2.Contract.IsAllL2TokensAllowed(&_Polygonzkevmbridgel2.CallOpts) +} + +// IsAllL2TokensAllowed is a free data retrieval call binding the contract method 0x0ac1be43. +// +// Solidity: function isAllL2TokensAllowed() view returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) IsAllL2TokensAllowed() (bool, error) { + return _Polygonzkevmbridgel2.Contract.IsAllL2TokensAllowed(&_Polygonzkevmbridgel2.CallOpts) +} + +// IsClaimed is a free data retrieval call binding the contract method 0x9e34070f. +// +// Solidity: function isClaimed(uint256 index) view returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) IsClaimed(opts *bind.CallOpts, index *big.Int) (bool, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "isClaimed", index) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsClaimed is a free data retrieval call binding the contract method 0x9e34070f. +// +// Solidity: function isClaimed(uint256 index) view returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) IsClaimed(index *big.Int) (bool, error) { + return _Polygonzkevmbridgel2.Contract.IsClaimed(&_Polygonzkevmbridgel2.CallOpts, index) +} + +// IsClaimed is a free data retrieval call binding the contract method 0x9e34070f. +// +// Solidity: function isClaimed(uint256 index) view returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) IsClaimed(index *big.Int) (bool, error) { + return _Polygonzkevmbridgel2.Contract.IsClaimed(&_Polygonzkevmbridgel2.CallOpts, index) +} + +// IsEmergencyState is a free data retrieval call binding the contract method 0x15064c96. +// +// Solidity: function isEmergencyState() view returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) IsEmergencyState(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "isEmergencyState") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsEmergencyState is a free data retrieval call binding the contract method 0x15064c96. +// +// Solidity: function isEmergencyState() view returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) IsEmergencyState() (bool, error) { + return _Polygonzkevmbridgel2.Contract.IsEmergencyState(&_Polygonzkevmbridgel2.CallOpts) +} + +// IsEmergencyState is a free data retrieval call binding the contract method 0x15064c96. +// +// Solidity: function isEmergencyState() view returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) IsEmergencyState() (bool, error) { + return _Polygonzkevmbridgel2.Contract.IsEmergencyState(&_Polygonzkevmbridgel2.CallOpts) +} + +// IsTokenAllowed is a free data retrieval call binding the contract method 0xf9eaee0d. +// +// Solidity: function isTokenAllowed(address ) view returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) IsTokenAllowed(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "isTokenAllowed", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsTokenAllowed is a free data retrieval call binding the contract method 0xf9eaee0d. +// +// Solidity: function isTokenAllowed(address ) view returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) IsTokenAllowed(arg0 common.Address) (bool, error) { + return _Polygonzkevmbridgel2.Contract.IsTokenAllowed(&_Polygonzkevmbridgel2.CallOpts, arg0) +} + +// IsTokenAllowed is a free data retrieval call binding the contract method 0xf9eaee0d. +// +// Solidity: function isTokenAllowed(address ) view returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) IsTokenAllowed(arg0 common.Address) (bool, error) { + return _Polygonzkevmbridgel2.Contract.IsTokenAllowed(&_Polygonzkevmbridgel2.CallOpts, arg0) +} + +// LastUpdatedDepositCount is a free data retrieval call binding the contract method 0xbe5831c7. +// +// Solidity: function lastUpdatedDepositCount() view returns(uint32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) LastUpdatedDepositCount(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "lastUpdatedDepositCount") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// LastUpdatedDepositCount is a free data retrieval call binding the contract method 0xbe5831c7. +// +// Solidity: function lastUpdatedDepositCount() view returns(uint32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) LastUpdatedDepositCount() (uint32, error) { + return _Polygonzkevmbridgel2.Contract.LastUpdatedDepositCount(&_Polygonzkevmbridgel2.CallOpts) +} + +// LastUpdatedDepositCount is a free data retrieval call binding the contract method 0xbe5831c7. +// +// Solidity: function lastUpdatedDepositCount() view returns(uint32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) LastUpdatedDepositCount() (uint32, error) { + return _Polygonzkevmbridgel2.Contract.LastUpdatedDepositCount(&_Polygonzkevmbridgel2.CallOpts) +} + +// NetworkID is a free data retrieval call binding the contract method 0xbab161bf. +// +// Solidity: function networkID() view returns(uint32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) NetworkID(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "networkID") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// NetworkID is a free data retrieval call binding the contract method 0xbab161bf. +// +// Solidity: function networkID() view returns(uint32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) NetworkID() (uint32, error) { + return _Polygonzkevmbridgel2.Contract.NetworkID(&_Polygonzkevmbridgel2.CallOpts) +} + +// NetworkID is a free data retrieval call binding the contract method 0xbab161bf. +// +// Solidity: function networkID() view returns(uint32) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) NetworkID() (uint32, error) { + return _Polygonzkevmbridgel2.Contract.NetworkID(&_Polygonzkevmbridgel2.CallOpts) +} + +// PolygonZkEVMaddress is a free data retrieval call binding the contract method 0x34ac9cf2. +// +// Solidity: function polygonZkEVMaddress() view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) PolygonZkEVMaddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "polygonZkEVMaddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PolygonZkEVMaddress is a free data retrieval call binding the contract method 0x34ac9cf2. +// +// Solidity: function polygonZkEVMaddress() view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) PolygonZkEVMaddress() (common.Address, error) { + return _Polygonzkevmbridgel2.Contract.PolygonZkEVMaddress(&_Polygonzkevmbridgel2.CallOpts) +} + +// PolygonZkEVMaddress is a free data retrieval call binding the contract method 0x34ac9cf2. +// +// Solidity: function polygonZkEVMaddress() view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) PolygonZkEVMaddress() (common.Address, error) { + return _Polygonzkevmbridgel2.Contract.PolygonZkEVMaddress(&_Polygonzkevmbridgel2.CallOpts) +} + +// PrecalculatedWrapperAddress is a free data retrieval call binding the contract method 0xaaa13cc2. +// +// Solidity: function precalculatedWrapperAddress(uint32 originNetwork, address originTokenAddress, string name, string symbol, uint8 decimals) view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) PrecalculatedWrapperAddress(opts *bind.CallOpts, originNetwork uint32, originTokenAddress common.Address, name string, symbol string, decimals uint8) (common.Address, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "precalculatedWrapperAddress", originNetwork, originTokenAddress, name, symbol, decimals) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PrecalculatedWrapperAddress is a free data retrieval call binding the contract method 0xaaa13cc2. +// +// Solidity: function precalculatedWrapperAddress(uint32 originNetwork, address originTokenAddress, string name, string symbol, uint8 decimals) view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) PrecalculatedWrapperAddress(originNetwork uint32, originTokenAddress common.Address, name string, symbol string, decimals uint8) (common.Address, error) { + return _Polygonzkevmbridgel2.Contract.PrecalculatedWrapperAddress(&_Polygonzkevmbridgel2.CallOpts, originNetwork, originTokenAddress, name, symbol, decimals) +} + +// PrecalculatedWrapperAddress is a free data retrieval call binding the contract method 0xaaa13cc2. +// +// Solidity: function precalculatedWrapperAddress(uint32 originNetwork, address originTokenAddress, string name, string symbol, uint8 decimals) view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) PrecalculatedWrapperAddress(originNetwork uint32, originTokenAddress common.Address, name string, symbol string, decimals uint8) (common.Address, error) { + return _Polygonzkevmbridgel2.Contract.PrecalculatedWrapperAddress(&_Polygonzkevmbridgel2.CallOpts, originNetwork, originTokenAddress, name, symbol, decimals) +} + +// TokenInfoToWrappedToken is a free data retrieval call binding the contract method 0x81b1c174. +// +// Solidity: function tokenInfoToWrappedToken(bytes32 ) view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) TokenInfoToWrappedToken(opts *bind.CallOpts, arg0 [32]byte) (common.Address, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "tokenInfoToWrappedToken", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// TokenInfoToWrappedToken is a free data retrieval call binding the contract method 0x81b1c174. +// +// Solidity: function tokenInfoToWrappedToken(bytes32 ) view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) TokenInfoToWrappedToken(arg0 [32]byte) (common.Address, error) { + return _Polygonzkevmbridgel2.Contract.TokenInfoToWrappedToken(&_Polygonzkevmbridgel2.CallOpts, arg0) +} + +// TokenInfoToWrappedToken is a free data retrieval call binding the contract method 0x81b1c174. +// +// Solidity: function tokenInfoToWrappedToken(bytes32 ) view returns(address) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) TokenInfoToWrappedToken(arg0 [32]byte) (common.Address, error) { + return _Polygonzkevmbridgel2.Contract.TokenInfoToWrappedToken(&_Polygonzkevmbridgel2.CallOpts, arg0) +} + +// VerifyMerkleProof is a free data retrieval call binding the contract method 0xfb570834. +// +// Solidity: function verifyMerkleProof(bytes32 leafHash, bytes32[32] smtProof, uint32 index, bytes32 root) pure returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) VerifyMerkleProof(opts *bind.CallOpts, leafHash [32]byte, smtProof [32][32]byte, index uint32, root [32]byte) (bool, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "verifyMerkleProof", leafHash, smtProof, index, root) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// VerifyMerkleProof is a free data retrieval call binding the contract method 0xfb570834. +// +// Solidity: function verifyMerkleProof(bytes32 leafHash, bytes32[32] smtProof, uint32 index, bytes32 root) pure returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) VerifyMerkleProof(leafHash [32]byte, smtProof [32][32]byte, index uint32, root [32]byte) (bool, error) { + return _Polygonzkevmbridgel2.Contract.VerifyMerkleProof(&_Polygonzkevmbridgel2.CallOpts, leafHash, smtProof, index, root) +} + +// VerifyMerkleProof is a free data retrieval call binding the contract method 0xfb570834. +// +// Solidity: function verifyMerkleProof(bytes32 leafHash, bytes32[32] smtProof, uint32 index, bytes32 root) pure returns(bool) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) VerifyMerkleProof(leafHash [32]byte, smtProof [32][32]byte, index uint32, root [32]byte) (bool, error) { + return _Polygonzkevmbridgel2.Contract.VerifyMerkleProof(&_Polygonzkevmbridgel2.CallOpts, leafHash, smtProof, index, root) +} + +// WrappedTokenToTokenInfo is a free data retrieval call binding the contract method 0x318aee3d. +// +// Solidity: function wrappedTokenToTokenInfo(address ) view returns(uint32 originNetwork, address originTokenAddress) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Caller) WrappedTokenToTokenInfo(opts *bind.CallOpts, arg0 common.Address) (struct { + OriginNetwork uint32 + OriginTokenAddress common.Address +}, error) { + var out []interface{} + err := _Polygonzkevmbridgel2.contract.Call(opts, &out, "wrappedTokenToTokenInfo", arg0) + + outstruct := new(struct { + OriginNetwork uint32 + OriginTokenAddress common.Address + }) + if err != nil { + return *outstruct, err + } + + outstruct.OriginNetwork = *abi.ConvertType(out[0], new(uint32)).(*uint32) + outstruct.OriginTokenAddress = *abi.ConvertType(out[1], new(common.Address)).(*common.Address) + + return *outstruct, err + +} + +// WrappedTokenToTokenInfo is a free data retrieval call binding the contract method 0x318aee3d. +// +// Solidity: function wrappedTokenToTokenInfo(address ) view returns(uint32 originNetwork, address originTokenAddress) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) WrappedTokenToTokenInfo(arg0 common.Address) (struct { + OriginNetwork uint32 + OriginTokenAddress common.Address +}, error) { + return _Polygonzkevmbridgel2.Contract.WrappedTokenToTokenInfo(&_Polygonzkevmbridgel2.CallOpts, arg0) +} + +// WrappedTokenToTokenInfo is a free data retrieval call binding the contract method 0x318aee3d. +// +// Solidity: function wrappedTokenToTokenInfo(address ) view returns(uint32 originNetwork, address originTokenAddress) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2CallerSession) WrappedTokenToTokenInfo(arg0 common.Address) (struct { + OriginNetwork uint32 + OriginTokenAddress common.Address +}, error) { + return _Polygonzkevmbridgel2.Contract.WrappedTokenToTokenInfo(&_Polygonzkevmbridgel2.CallOpts, arg0) +} + +// ActivateEmergencyState is a paid mutator transaction binding the contract method 0x2072f6c5. +// +// Solidity: function activateEmergencyState() returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Transactor) ActivateEmergencyState(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.contract.Transact(opts, "activateEmergencyState") +} + +// ActivateEmergencyState is a paid mutator transaction binding the contract method 0x2072f6c5. +// +// Solidity: function activateEmergencyState() returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) ActivateEmergencyState() (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.ActivateEmergencyState(&_Polygonzkevmbridgel2.TransactOpts) +} + +// ActivateEmergencyState is a paid mutator transaction binding the contract method 0x2072f6c5. +// +// Solidity: function activateEmergencyState() returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2TransactorSession) ActivateEmergencyState() (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.ActivateEmergencyState(&_Polygonzkevmbridgel2.TransactOpts) +} + +// BridgeAsset is a paid mutator transaction binding the contract method 0xcd586579. +// +// Solidity: function bridgeAsset(uint32 destinationNetwork, address destinationAddress, uint256 amount, address token, bool forceUpdateGlobalExitRoot, bytes permitData) payable returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Transactor) BridgeAsset(opts *bind.TransactOpts, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, token common.Address, forceUpdateGlobalExitRoot bool, permitData []byte) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.contract.Transact(opts, "bridgeAsset", destinationNetwork, destinationAddress, amount, token, forceUpdateGlobalExitRoot, permitData) +} + +// BridgeAsset is a paid mutator transaction binding the contract method 0xcd586579. +// +// Solidity: function bridgeAsset(uint32 destinationNetwork, address destinationAddress, uint256 amount, address token, bool forceUpdateGlobalExitRoot, bytes permitData) payable returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) BridgeAsset(destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, token common.Address, forceUpdateGlobalExitRoot bool, permitData []byte) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.BridgeAsset(&_Polygonzkevmbridgel2.TransactOpts, destinationNetwork, destinationAddress, amount, token, forceUpdateGlobalExitRoot, permitData) +} + +// BridgeAsset is a paid mutator transaction binding the contract method 0xcd586579. +// +// Solidity: function bridgeAsset(uint32 destinationNetwork, address destinationAddress, uint256 amount, address token, bool forceUpdateGlobalExitRoot, bytes permitData) payable returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2TransactorSession) BridgeAsset(destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, token common.Address, forceUpdateGlobalExitRoot bool, permitData []byte) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.BridgeAsset(&_Polygonzkevmbridgel2.TransactOpts, destinationNetwork, destinationAddress, amount, token, forceUpdateGlobalExitRoot, permitData) +} + +// BridgeMessage is a paid mutator transaction binding the contract method 0xb2169f2c. +// +// Solidity: function bridgeMessage(uint32 destinationNetwork, address destinationAddress, uint256 amountWETH, bool forceUpdateGlobalExitRoot, bytes metadata) payable returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Transactor) BridgeMessage(opts *bind.TransactOpts, destinationNetwork uint32, destinationAddress common.Address, amountWETH *big.Int, forceUpdateGlobalExitRoot bool, metadata []byte) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.contract.Transact(opts, "bridgeMessage", destinationNetwork, destinationAddress, amountWETH, forceUpdateGlobalExitRoot, metadata) +} + +// BridgeMessage is a paid mutator transaction binding the contract method 0xb2169f2c. +// +// Solidity: function bridgeMessage(uint32 destinationNetwork, address destinationAddress, uint256 amountWETH, bool forceUpdateGlobalExitRoot, bytes metadata) payable returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) BridgeMessage(destinationNetwork uint32, destinationAddress common.Address, amountWETH *big.Int, forceUpdateGlobalExitRoot bool, metadata []byte) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.BridgeMessage(&_Polygonzkevmbridgel2.TransactOpts, destinationNetwork, destinationAddress, amountWETH, forceUpdateGlobalExitRoot, metadata) +} + +// BridgeMessage is a paid mutator transaction binding the contract method 0xb2169f2c. +// +// Solidity: function bridgeMessage(uint32 destinationNetwork, address destinationAddress, uint256 amountWETH, bool forceUpdateGlobalExitRoot, bytes metadata) payable returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2TransactorSession) BridgeMessage(destinationNetwork uint32, destinationAddress common.Address, amountWETH *big.Int, forceUpdateGlobalExitRoot bool, metadata []byte) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.BridgeMessage(&_Polygonzkevmbridgel2.TransactOpts, destinationNetwork, destinationAddress, amountWETH, forceUpdateGlobalExitRoot, metadata) +} + +// ClaimAsset is a paid mutator transaction binding the contract method 0x2cffd02e. +// +// Solidity: function claimAsset(bytes32[32] smtProof, uint32 index, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originTokenAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Transactor) ClaimAsset(opts *bind.TransactOpts, smtProof [32][32]byte, index uint32, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originTokenAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.contract.Transact(opts, "claimAsset", smtProof, index, mainnetExitRoot, rollupExitRoot, originNetwork, originTokenAddress, destinationNetwork, destinationAddress, amount, metadata) +} + +// ClaimAsset is a paid mutator transaction binding the contract method 0x2cffd02e. +// +// Solidity: function claimAsset(bytes32[32] smtProof, uint32 index, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originTokenAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) ClaimAsset(smtProof [32][32]byte, index uint32, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originTokenAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.ClaimAsset(&_Polygonzkevmbridgel2.TransactOpts, smtProof, index, mainnetExitRoot, rollupExitRoot, originNetwork, originTokenAddress, destinationNetwork, destinationAddress, amount, metadata) +} + +// ClaimAsset is a paid mutator transaction binding the contract method 0x2cffd02e. +// +// Solidity: function claimAsset(bytes32[32] smtProof, uint32 index, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originTokenAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2TransactorSession) ClaimAsset(smtProof [32][32]byte, index uint32, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originTokenAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.ClaimAsset(&_Polygonzkevmbridgel2.TransactOpts, smtProof, index, mainnetExitRoot, rollupExitRoot, originNetwork, originTokenAddress, destinationNetwork, destinationAddress, amount, metadata) +} + +// ClaimMessage is a paid mutator transaction binding the contract method 0x2d2c9d94. +// +// Solidity: function claimMessage(bytes32[32] smtProof, uint32 index, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Transactor) ClaimMessage(opts *bind.TransactOpts, smtProof [32][32]byte, index uint32, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.contract.Transact(opts, "claimMessage", smtProof, index, mainnetExitRoot, rollupExitRoot, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadata) +} + +// ClaimMessage is a paid mutator transaction binding the contract method 0x2d2c9d94. +// +// Solidity: function claimMessage(bytes32[32] smtProof, uint32 index, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) ClaimMessage(smtProof [32][32]byte, index uint32, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.ClaimMessage(&_Polygonzkevmbridgel2.TransactOpts, smtProof, index, mainnetExitRoot, rollupExitRoot, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadata) +} + +// ClaimMessage is a paid mutator transaction binding the contract method 0x2d2c9d94. +// +// Solidity: function claimMessage(bytes32[32] smtProof, uint32 index, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2TransactorSession) ClaimMessage(smtProof [32][32]byte, index uint32, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.ClaimMessage(&_Polygonzkevmbridgel2.TransactOpts, smtProof, index, mainnetExitRoot, rollupExitRoot, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadata) +} + +// DeactivateEmergencyState is a paid mutator transaction binding the contract method 0xdbc16976. +// +// Solidity: function deactivateEmergencyState() returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Transactor) DeactivateEmergencyState(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.contract.Transact(opts, "deactivateEmergencyState") +} + +// DeactivateEmergencyState is a paid mutator transaction binding the contract method 0xdbc16976. +// +// Solidity: function deactivateEmergencyState() returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) DeactivateEmergencyState() (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.DeactivateEmergencyState(&_Polygonzkevmbridgel2.TransactOpts) +} + +// DeactivateEmergencyState is a paid mutator transaction binding the contract method 0xdbc16976. +// +// Solidity: function deactivateEmergencyState() returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2TransactorSession) DeactivateEmergencyState() (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.DeactivateEmergencyState(&_Polygonzkevmbridgel2.TransactOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0x2cc9f163. +// +// Solidity: function initialize(uint32 _networkID, address _globalExitRootManager, address _polygonZkEVMaddress, address _gasTokenAddress, uint32 _gasTokenNetwork, address _WETHToken) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Transactor) Initialize(opts *bind.TransactOpts, _networkID uint32, _globalExitRootManager common.Address, _polygonZkEVMaddress common.Address, _gasTokenAddress common.Address, _gasTokenNetwork uint32, _WETHToken common.Address) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.contract.Transact(opts, "initialize", _networkID, _globalExitRootManager, _polygonZkEVMaddress, _gasTokenAddress, _gasTokenNetwork, _WETHToken) +} + +// Initialize is a paid mutator transaction binding the contract method 0x2cc9f163. +// +// Solidity: function initialize(uint32 _networkID, address _globalExitRootManager, address _polygonZkEVMaddress, address _gasTokenAddress, uint32 _gasTokenNetwork, address _WETHToken) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) Initialize(_networkID uint32, _globalExitRootManager common.Address, _polygonZkEVMaddress common.Address, _gasTokenAddress common.Address, _gasTokenNetwork uint32, _WETHToken common.Address) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.Initialize(&_Polygonzkevmbridgel2.TransactOpts, _networkID, _globalExitRootManager, _polygonZkEVMaddress, _gasTokenAddress, _gasTokenNetwork, _WETHToken) +} + +// Initialize is a paid mutator transaction binding the contract method 0x2cc9f163. +// +// Solidity: function initialize(uint32 _networkID, address _globalExitRootManager, address _polygonZkEVMaddress, address _gasTokenAddress, uint32 _gasTokenNetwork, address _WETHToken) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2TransactorSession) Initialize(_networkID uint32, _globalExitRootManager common.Address, _polygonZkEVMaddress common.Address, _gasTokenAddress common.Address, _gasTokenNetwork uint32, _WETHToken common.Address) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.Initialize(&_Polygonzkevmbridgel2.TransactOpts, _networkID, _globalExitRootManager, _polygonZkEVMaddress, _gasTokenAddress, _gasTokenNetwork, _WETHToken) +} + +// SetAllL2TokensAllowed is a paid mutator transaction binding the contract method 0x3797306a. +// +// Solidity: function setAllL2TokensAllowed(bool allowed) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Transactor) SetAllL2TokensAllowed(opts *bind.TransactOpts, allowed bool) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.contract.Transact(opts, "setAllL2TokensAllowed", allowed) +} + +// SetAllL2TokensAllowed is a paid mutator transaction binding the contract method 0x3797306a. +// +// Solidity: function setAllL2TokensAllowed(bool allowed) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) SetAllL2TokensAllowed(allowed bool) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.SetAllL2TokensAllowed(&_Polygonzkevmbridgel2.TransactOpts, allowed) +} + +// SetAllL2TokensAllowed is a paid mutator transaction binding the contract method 0x3797306a. +// +// Solidity: function setAllL2TokensAllowed(bool allowed) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2TransactorSession) SetAllL2TokensAllowed(allowed bool) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.SetAllL2TokensAllowed(&_Polygonzkevmbridgel2.TransactOpts, allowed) +} + +// SetL2TokenBridgePermission is a paid mutator transaction binding the contract method 0xdd51f5c1. +// +// Solidity: function setL2TokenBridgePermission(address token, bool allowed) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Transactor) SetL2TokenBridgePermission(opts *bind.TransactOpts, token common.Address, allowed bool) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.contract.Transact(opts, "setL2TokenBridgePermission", token, allowed) +} + +// SetL2TokenBridgePermission is a paid mutator transaction binding the contract method 0xdd51f5c1. +// +// Solidity: function setL2TokenBridgePermission(address token, bool allowed) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) SetL2TokenBridgePermission(token common.Address, allowed bool) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.SetL2TokenBridgePermission(&_Polygonzkevmbridgel2.TransactOpts, token, allowed) +} + +// SetL2TokenBridgePermission is a paid mutator transaction binding the contract method 0xdd51f5c1. +// +// Solidity: function setL2TokenBridgePermission(address token, bool allowed) returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2TransactorSession) SetL2TokenBridgePermission(token common.Address, allowed bool) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.SetL2TokenBridgePermission(&_Polygonzkevmbridgel2.TransactOpts, token, allowed) +} + +// UpdateGlobalExitRoot is a paid mutator transaction binding the contract method 0x79e2cf97. +// +// Solidity: function updateGlobalExitRoot() returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Transactor) UpdateGlobalExitRoot(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Polygonzkevmbridgel2.contract.Transact(opts, "updateGlobalExitRoot") +} + +// UpdateGlobalExitRoot is a paid mutator transaction binding the contract method 0x79e2cf97. +// +// Solidity: function updateGlobalExitRoot() returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Session) UpdateGlobalExitRoot() (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.UpdateGlobalExitRoot(&_Polygonzkevmbridgel2.TransactOpts) +} + +// UpdateGlobalExitRoot is a paid mutator transaction binding the contract method 0x79e2cf97. +// +// Solidity: function updateGlobalExitRoot() returns() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2TransactorSession) UpdateGlobalExitRoot() (*types.Transaction, error) { + return _Polygonzkevmbridgel2.Contract.UpdateGlobalExitRoot(&_Polygonzkevmbridgel2.TransactOpts) +} + +// Polygonzkevmbridgel2AllL2TokensPermissionSetIterator is returned from FilterAllL2TokensPermissionSet and is used to iterate over the raw logs and unpacked data for AllL2TokensPermissionSet events raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2AllL2TokensPermissionSetIterator struct { + Event *Polygonzkevmbridgel2AllL2TokensPermissionSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *Polygonzkevmbridgel2AllL2TokensPermissionSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2AllL2TokensPermissionSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2AllL2TokensPermissionSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *Polygonzkevmbridgel2AllL2TokensPermissionSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *Polygonzkevmbridgel2AllL2TokensPermissionSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// Polygonzkevmbridgel2AllL2TokensPermissionSet represents a AllL2TokensPermissionSet event raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2AllL2TokensPermissionSet struct { + Allowed bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAllL2TokensPermissionSet is a free log retrieval operation binding the contract event 0x11c1c68b4bf6f68350aa1983fe17ee1d005a7189994475ddbc4b9fc4e4ef02b8. +// +// Solidity: event AllL2TokensPermissionSet(bool allowed) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) FilterAllL2TokensPermissionSet(opts *bind.FilterOpts) (*Polygonzkevmbridgel2AllL2TokensPermissionSetIterator, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.FilterLogs(opts, "AllL2TokensPermissionSet") + if err != nil { + return nil, err + } + return &Polygonzkevmbridgel2AllL2TokensPermissionSetIterator{contract: _Polygonzkevmbridgel2.contract, event: "AllL2TokensPermissionSet", logs: logs, sub: sub}, nil +} + +// WatchAllL2TokensPermissionSet is a free log subscription operation binding the contract event 0x11c1c68b4bf6f68350aa1983fe17ee1d005a7189994475ddbc4b9fc4e4ef02b8. +// +// Solidity: event AllL2TokensPermissionSet(bool allowed) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) WatchAllL2TokensPermissionSet(opts *bind.WatchOpts, sink chan<- *Polygonzkevmbridgel2AllL2TokensPermissionSet) (event.Subscription, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.WatchLogs(opts, "AllL2TokensPermissionSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(Polygonzkevmbridgel2AllL2TokensPermissionSet) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "AllL2TokensPermissionSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAllL2TokensPermissionSet is a log parse operation binding the contract event 0x11c1c68b4bf6f68350aa1983fe17ee1d005a7189994475ddbc4b9fc4e4ef02b8. +// +// Solidity: event AllL2TokensPermissionSet(bool allowed) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) ParseAllL2TokensPermissionSet(log types.Log) (*Polygonzkevmbridgel2AllL2TokensPermissionSet, error) { + event := new(Polygonzkevmbridgel2AllL2TokensPermissionSet) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "AllL2TokensPermissionSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// Polygonzkevmbridgel2BridgeEventIterator is returned from FilterBridgeEvent and is used to iterate over the raw logs and unpacked data for BridgeEvent events raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2BridgeEventIterator struct { + Event *Polygonzkevmbridgel2BridgeEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *Polygonzkevmbridgel2BridgeEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2BridgeEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2BridgeEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *Polygonzkevmbridgel2BridgeEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *Polygonzkevmbridgel2BridgeEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// Polygonzkevmbridgel2BridgeEvent represents a BridgeEvent event raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2BridgeEvent struct { + LeafType uint8 + OriginNetwork uint32 + OriginAddress common.Address + DestinationNetwork uint32 + DestinationAddress common.Address + Amount *big.Int + Metadata []byte + DepositCount uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBridgeEvent is a free log retrieval operation binding the contract event 0x501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b. +// +// Solidity: event BridgeEvent(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata, uint32 depositCount) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) FilterBridgeEvent(opts *bind.FilterOpts) (*Polygonzkevmbridgel2BridgeEventIterator, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.FilterLogs(opts, "BridgeEvent") + if err != nil { + return nil, err + } + return &Polygonzkevmbridgel2BridgeEventIterator{contract: _Polygonzkevmbridgel2.contract, event: "BridgeEvent", logs: logs, sub: sub}, nil +} + +// WatchBridgeEvent is a free log subscription operation binding the contract event 0x501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b. +// +// Solidity: event BridgeEvent(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata, uint32 depositCount) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) WatchBridgeEvent(opts *bind.WatchOpts, sink chan<- *Polygonzkevmbridgel2BridgeEvent) (event.Subscription, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.WatchLogs(opts, "BridgeEvent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(Polygonzkevmbridgel2BridgeEvent) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "BridgeEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseBridgeEvent is a log parse operation binding the contract event 0x501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b. +// +// Solidity: event BridgeEvent(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata, uint32 depositCount) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) ParseBridgeEvent(log types.Log) (*Polygonzkevmbridgel2BridgeEvent, error) { + event := new(Polygonzkevmbridgel2BridgeEvent) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "BridgeEvent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// Polygonzkevmbridgel2ClaimEventIterator is returned from FilterClaimEvent and is used to iterate over the raw logs and unpacked data for ClaimEvent events raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2ClaimEventIterator struct { + Event *Polygonzkevmbridgel2ClaimEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *Polygonzkevmbridgel2ClaimEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2ClaimEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2ClaimEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *Polygonzkevmbridgel2ClaimEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *Polygonzkevmbridgel2ClaimEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// Polygonzkevmbridgel2ClaimEvent represents a ClaimEvent event raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2ClaimEvent struct { + Index uint32 + OriginNetwork uint32 + OriginAddress common.Address + DestinationAddress common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterClaimEvent is a free log retrieval operation binding the contract event 0x25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe27545983. +// +// Solidity: event ClaimEvent(uint32 index, uint32 originNetwork, address originAddress, address destinationAddress, uint256 amount) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) FilterClaimEvent(opts *bind.FilterOpts) (*Polygonzkevmbridgel2ClaimEventIterator, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.FilterLogs(opts, "ClaimEvent") + if err != nil { + return nil, err + } + return &Polygonzkevmbridgel2ClaimEventIterator{contract: _Polygonzkevmbridgel2.contract, event: "ClaimEvent", logs: logs, sub: sub}, nil +} + +// WatchClaimEvent is a free log subscription operation binding the contract event 0x25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe27545983. +// +// Solidity: event ClaimEvent(uint32 index, uint32 originNetwork, address originAddress, address destinationAddress, uint256 amount) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) WatchClaimEvent(opts *bind.WatchOpts, sink chan<- *Polygonzkevmbridgel2ClaimEvent) (event.Subscription, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.WatchLogs(opts, "ClaimEvent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(Polygonzkevmbridgel2ClaimEvent) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "ClaimEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseClaimEvent is a log parse operation binding the contract event 0x25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe27545983. +// +// Solidity: event ClaimEvent(uint32 index, uint32 originNetwork, address originAddress, address destinationAddress, uint256 amount) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) ParseClaimEvent(log types.Log) (*Polygonzkevmbridgel2ClaimEvent, error) { + event := new(Polygonzkevmbridgel2ClaimEvent) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "ClaimEvent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// Polygonzkevmbridgel2EmergencyStateActivatedIterator is returned from FilterEmergencyStateActivated and is used to iterate over the raw logs and unpacked data for EmergencyStateActivated events raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2EmergencyStateActivatedIterator struct { + Event *Polygonzkevmbridgel2EmergencyStateActivated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *Polygonzkevmbridgel2EmergencyStateActivatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2EmergencyStateActivated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2EmergencyStateActivated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *Polygonzkevmbridgel2EmergencyStateActivatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *Polygonzkevmbridgel2EmergencyStateActivatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// Polygonzkevmbridgel2EmergencyStateActivated represents a EmergencyStateActivated event raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2EmergencyStateActivated struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterEmergencyStateActivated is a free log retrieval operation binding the contract event 0x2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497. +// +// Solidity: event EmergencyStateActivated() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) FilterEmergencyStateActivated(opts *bind.FilterOpts) (*Polygonzkevmbridgel2EmergencyStateActivatedIterator, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.FilterLogs(opts, "EmergencyStateActivated") + if err != nil { + return nil, err + } + return &Polygonzkevmbridgel2EmergencyStateActivatedIterator{contract: _Polygonzkevmbridgel2.contract, event: "EmergencyStateActivated", logs: logs, sub: sub}, nil +} + +// WatchEmergencyStateActivated is a free log subscription operation binding the contract event 0x2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497. +// +// Solidity: event EmergencyStateActivated() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) WatchEmergencyStateActivated(opts *bind.WatchOpts, sink chan<- *Polygonzkevmbridgel2EmergencyStateActivated) (event.Subscription, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.WatchLogs(opts, "EmergencyStateActivated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(Polygonzkevmbridgel2EmergencyStateActivated) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "EmergencyStateActivated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseEmergencyStateActivated is a log parse operation binding the contract event 0x2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497. +// +// Solidity: event EmergencyStateActivated() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) ParseEmergencyStateActivated(log types.Log) (*Polygonzkevmbridgel2EmergencyStateActivated, error) { + event := new(Polygonzkevmbridgel2EmergencyStateActivated) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "EmergencyStateActivated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// Polygonzkevmbridgel2EmergencyStateDeactivatedIterator is returned from FilterEmergencyStateDeactivated and is used to iterate over the raw logs and unpacked data for EmergencyStateDeactivated events raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2EmergencyStateDeactivatedIterator struct { + Event *Polygonzkevmbridgel2EmergencyStateDeactivated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *Polygonzkevmbridgel2EmergencyStateDeactivatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2EmergencyStateDeactivated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2EmergencyStateDeactivated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *Polygonzkevmbridgel2EmergencyStateDeactivatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *Polygonzkevmbridgel2EmergencyStateDeactivatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// Polygonzkevmbridgel2EmergencyStateDeactivated represents a EmergencyStateDeactivated event raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2EmergencyStateDeactivated struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterEmergencyStateDeactivated is a free log retrieval operation binding the contract event 0x1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3. +// +// Solidity: event EmergencyStateDeactivated() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) FilterEmergencyStateDeactivated(opts *bind.FilterOpts) (*Polygonzkevmbridgel2EmergencyStateDeactivatedIterator, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.FilterLogs(opts, "EmergencyStateDeactivated") + if err != nil { + return nil, err + } + return &Polygonzkevmbridgel2EmergencyStateDeactivatedIterator{contract: _Polygonzkevmbridgel2.contract, event: "EmergencyStateDeactivated", logs: logs, sub: sub}, nil +} + +// WatchEmergencyStateDeactivated is a free log subscription operation binding the contract event 0x1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3. +// +// Solidity: event EmergencyStateDeactivated() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) WatchEmergencyStateDeactivated(opts *bind.WatchOpts, sink chan<- *Polygonzkevmbridgel2EmergencyStateDeactivated) (event.Subscription, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.WatchLogs(opts, "EmergencyStateDeactivated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(Polygonzkevmbridgel2EmergencyStateDeactivated) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "EmergencyStateDeactivated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseEmergencyStateDeactivated is a log parse operation binding the contract event 0x1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3. +// +// Solidity: event EmergencyStateDeactivated() +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) ParseEmergencyStateDeactivated(log types.Log) (*Polygonzkevmbridgel2EmergencyStateDeactivated, error) { + event := new(Polygonzkevmbridgel2EmergencyStateDeactivated) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "EmergencyStateDeactivated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// Polygonzkevmbridgel2InitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2InitializedIterator struct { + Event *Polygonzkevmbridgel2Initialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *Polygonzkevmbridgel2InitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2Initialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2Initialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *Polygonzkevmbridgel2InitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *Polygonzkevmbridgel2InitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// Polygonzkevmbridgel2Initialized represents a Initialized event raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2Initialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) FilterInitialized(opts *bind.FilterOpts) (*Polygonzkevmbridgel2InitializedIterator, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &Polygonzkevmbridgel2InitializedIterator{contract: _Polygonzkevmbridgel2.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *Polygonzkevmbridgel2Initialized) (event.Subscription, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(Polygonzkevmbridgel2Initialized) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) ParseInitialized(log types.Log) (*Polygonzkevmbridgel2Initialized, error) { + event := new(Polygonzkevmbridgel2Initialized) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// Polygonzkevmbridgel2L2TokenPermissionSetIterator is returned from FilterL2TokenPermissionSet and is used to iterate over the raw logs and unpacked data for L2TokenPermissionSet events raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2L2TokenPermissionSetIterator struct { + Event *Polygonzkevmbridgel2L2TokenPermissionSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *Polygonzkevmbridgel2L2TokenPermissionSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2L2TokenPermissionSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2L2TokenPermissionSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *Polygonzkevmbridgel2L2TokenPermissionSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *Polygonzkevmbridgel2L2TokenPermissionSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// Polygonzkevmbridgel2L2TokenPermissionSet represents a L2TokenPermissionSet event raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2L2TokenPermissionSet struct { + Token common.Address + Allowed bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterL2TokenPermissionSet is a free log retrieval operation binding the contract event 0x6036bc45ffdc28cb8eb8a5afad20d8d1b999da9512abc39c0a9f52995a74998d. +// +// Solidity: event L2TokenPermissionSet(address token, bool allowed) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) FilterL2TokenPermissionSet(opts *bind.FilterOpts) (*Polygonzkevmbridgel2L2TokenPermissionSetIterator, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.FilterLogs(opts, "L2TokenPermissionSet") + if err != nil { + return nil, err + } + return &Polygonzkevmbridgel2L2TokenPermissionSetIterator{contract: _Polygonzkevmbridgel2.contract, event: "L2TokenPermissionSet", logs: logs, sub: sub}, nil +} + +// WatchL2TokenPermissionSet is a free log subscription operation binding the contract event 0x6036bc45ffdc28cb8eb8a5afad20d8d1b999da9512abc39c0a9f52995a74998d. +// +// Solidity: event L2TokenPermissionSet(address token, bool allowed) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) WatchL2TokenPermissionSet(opts *bind.WatchOpts, sink chan<- *Polygonzkevmbridgel2L2TokenPermissionSet) (event.Subscription, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.WatchLogs(opts, "L2TokenPermissionSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(Polygonzkevmbridgel2L2TokenPermissionSet) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "L2TokenPermissionSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseL2TokenPermissionSet is a log parse operation binding the contract event 0x6036bc45ffdc28cb8eb8a5afad20d8d1b999da9512abc39c0a9f52995a74998d. +// +// Solidity: event L2TokenPermissionSet(address token, bool allowed) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) ParseL2TokenPermissionSet(log types.Log) (*Polygonzkevmbridgel2L2TokenPermissionSet, error) { + event := new(Polygonzkevmbridgel2L2TokenPermissionSet) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "L2TokenPermissionSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// Polygonzkevmbridgel2NewWrappedTokenIterator is returned from FilterNewWrappedToken and is used to iterate over the raw logs and unpacked data for NewWrappedToken events raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2NewWrappedTokenIterator struct { + Event *Polygonzkevmbridgel2NewWrappedToken // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *Polygonzkevmbridgel2NewWrappedTokenIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2NewWrappedToken) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(Polygonzkevmbridgel2NewWrappedToken) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *Polygonzkevmbridgel2NewWrappedTokenIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *Polygonzkevmbridgel2NewWrappedTokenIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// Polygonzkevmbridgel2NewWrappedToken represents a NewWrappedToken event raised by the Polygonzkevmbridgel2 contract. +type Polygonzkevmbridgel2NewWrappedToken struct { + OriginNetwork uint32 + OriginTokenAddress common.Address + WrappedTokenAddress common.Address + Metadata []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNewWrappedToken is a free log retrieval operation binding the contract event 0x490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a39. +// +// Solidity: event NewWrappedToken(uint32 originNetwork, address originTokenAddress, address wrappedTokenAddress, bytes metadata) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) FilterNewWrappedToken(opts *bind.FilterOpts) (*Polygonzkevmbridgel2NewWrappedTokenIterator, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.FilterLogs(opts, "NewWrappedToken") + if err != nil { + return nil, err + } + return &Polygonzkevmbridgel2NewWrappedTokenIterator{contract: _Polygonzkevmbridgel2.contract, event: "NewWrappedToken", logs: logs, sub: sub}, nil +} + +// WatchNewWrappedToken is a free log subscription operation binding the contract event 0x490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a39. +// +// Solidity: event NewWrappedToken(uint32 originNetwork, address originTokenAddress, address wrappedTokenAddress, bytes metadata) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) WatchNewWrappedToken(opts *bind.WatchOpts, sink chan<- *Polygonzkevmbridgel2NewWrappedToken) (event.Subscription, error) { + + logs, sub, err := _Polygonzkevmbridgel2.contract.WatchLogs(opts, "NewWrappedToken") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(Polygonzkevmbridgel2NewWrappedToken) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "NewWrappedToken", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNewWrappedToken is a log parse operation binding the contract event 0x490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a39. +// +// Solidity: event NewWrappedToken(uint32 originNetwork, address originTokenAddress, address wrappedTokenAddress, bytes metadata) +func (_Polygonzkevmbridgel2 *Polygonzkevmbridgel2Filterer) ParseNewWrappedToken(log types.Log) (*Polygonzkevmbridgel2NewWrappedToken, error) { + event := new(Polygonzkevmbridgel2NewWrappedToken) + if err := _Polygonzkevmbridgel2.contract.UnpackLog(event, "NewWrappedToken", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/etherman/smartcontracts/polygonzkevmglobalexitroot/polygonzkevmglobalexitroot.go b/etherman/smartcontracts/polygonzkevmglobalexitroot/polygonzkevmglobalexitroot.go index c53e6a8253..089a9317e2 100644 --- a/etherman/smartcontracts/polygonzkevmglobalexitroot/polygonzkevmglobalexitroot.go +++ b/etherman/smartcontracts/polygonzkevmglobalexitroot/polygonzkevmglobalexitroot.go @@ -26,12 +26,13 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // PolygonzkevmglobalexitrootMetaData contains all meta data concerning the Polygonzkevmglobalexitroot contract. var PolygonzkevmglobalexitrootMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rollupAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bridgeAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"OnlyAllowedContracts\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"mainnetExitRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"rollupExitRoot\",\"type\":\"bytes32\"}],\"name\":\"UpdateGlobalExitRoot\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridgeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastGlobalExitRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"globalExitRootMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastMainnetExitRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastRollupExitRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newRoot\",\"type\":\"bytes32\"}],\"name\":\"updateExitRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60c060405234801561001057600080fd5b506040516103f83803806103f883398101604081905261002f91610062565b6001600160a01b0391821660a05216608052610095565b80516001600160a01b038116811461005d57600080fd5b919050565b6000806040838503121561007557600080fd5b61007e83610046565b915061008c60208401610046565b90509250929050565b60805160a0516103316100c76000396000818160e901526101bd015260008181610135015261017401526103316000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806333d6247d1161005b57806333d6247d146100c75780633ed691ef146100dc5780635ec6a8df146100e4578063a3c573eb1461013057600080fd5b806301fd904414610082578063257b36321461009e578063319cf735146100be575b600080fd5b61008b60005481565b6040519081526020015b60405180910390f35b61008b6100ac3660046102e2565b60026020526000908152604090205481565b61008b60015481565b6100da6100d53660046102e2565b610157565b005b61008b6102a6565b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610095565b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b60005460015473ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036101a65750600182905581610222565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036101f0576000839055829150610222565b6040517fb49365dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051602080820184905281830185905282518083038401815260609092019092528051910120600090600081815260026020526040812054919250036102a05760008181526002602052604080822042905551849184917f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce39190a35b50505050565b60006102dd600154600054604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b905090565b6000602082840312156102f457600080fd5b503591905056fea2646970667358221220bc23c6d5d3992802bdfd06ef45362230dcda7d33db81b1dc3ef40d86219e81c864736f6c63430008110033", + Bin: "0x60c060405234801561001057600080fd5b506040516103f83803806103f883398101604081905261002f91610062565b6001600160a01b0391821660a05216608052610095565b80516001600160a01b038116811461005d57600080fd5b919050565b6000806040838503121561007557600080fd5b61007e83610046565b915061008c60208401610046565b90509250929050565b60805160a0516103316100c76000396000818160e901526101bd015260008181610135015261017401526103316000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806333d6247d1161005b57806333d6247d146100c75780633ed691ef146100dc5780635ec6a8df146100e4578063a3c573eb1461013057600080fd5b806301fd904414610082578063257b36321461009e578063319cf735146100be575b600080fd5b61008b60005481565b6040519081526020015b60405180910390f35b61008b6100ac3660046102e2565b60026020526000908152604090205481565b61008b60015481565b6100da6100d53660046102e2565b610157565b005b61008b6102a6565b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610095565b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b60005460015473ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036101a65750600182905581610222565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036101f0576000839055829150610222565b6040517fb49365dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051602080820184905281830185905282518083038401815260609092019092528051910120600090600081815260026020526040812054919250036102a05760008181526002602052604080822042905551849184917f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce39190a35b50505050565b60006102dd600154600054604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b905090565b6000602082840312156102f457600080fd5b503591905056fea264697066735822122066368a84a416778eb0d212b7acdeed4f6b4a8b676fc470e5579fc4c25caed2f364736f6c63430008140033", } // PolygonzkevmglobalexitrootABI is the input ABI used to generate the binding from. @@ -156,11 +157,11 @@ func NewPolygonzkevmglobalexitrootFilterer(address common.Address, filterer bind // bindPolygonzkevmglobalexitroot binds a generic wrapper to an already deployed contract. func bindPolygonzkevmglobalexitroot(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(PolygonzkevmglobalexitrootABI)) + parsed, err := PolygonzkevmglobalexitrootMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and diff --git a/etherman/smartcontracts/script.sh b/etherman/smartcontracts/script.sh index 3221be5a68..3d1199f3e7 100755 --- a/etherman/smartcontracts/script.sh +++ b/etherman/smartcontracts/script.sh @@ -13,4 +13,5 @@ gen polygonzkevmbridge gen matic gen polygonzkevmglobalexitroot gen mockverifier -gen datacommittee \ No newline at end of file +gen datacommittee +gen polygonzkevmbridgel2 \ No newline at end of file diff --git a/gasprice/kafka_proc.go b/gasprice/kafka_proc.go index f99577bb36..830e80a408 100644 --- a/gasprice/kafka_proc.go +++ b/gasprice/kafka_proc.go @@ -6,13 +6,14 @@ import ( "crypto/x509" "encoding/json" "fmt" - "github.com/0xPolygonHermez/zkevm-node/log" - kafka "github.com/segmentio/kafka-go" - "github.com/segmentio/kafka-go/sasl/plain" "os" "strings" "sync" "time" + + "github.com/0xPolygonHermez/zkevm-node/log" + kafka "github.com/segmentio/kafka-go" + "github.com/segmentio/kafka-go/sasl/plain" ) const ( diff --git a/jsonrpc/config.go b/jsonrpc/config.go index 2a1c6acb1e..39ffe10d68 100644 --- a/jsonrpc/config.go +++ b/jsonrpc/config.go @@ -58,6 +58,7 @@ type WebSocketsConfig struct { Port int `mapstructure:"Port"` } +// NacosConfig has parameters to config the nacos client type NacosConfig struct { // URLs nacos server urls for discovery service of rest api, url is separated by "," URLs string `mapstructure:"URLs"` diff --git a/jsonrpc/endpoints_debug_innertx.go b/jsonrpc/endpoints_debug_innertx.go index 17de168f3f..87bb7edc61 100644 --- a/jsonrpc/endpoints_debug_innertx.go +++ b/jsonrpc/endpoints_debug_innertx.go @@ -3,6 +3,7 @@ package jsonrpc import ( "context" "errors" + "github.com/0xPolygonHermez/zkevm-node/jsonrpc/types" "github.com/0xPolygonHermez/zkevm-node/log" "github.com/0xPolygonHermez/zkevm-node/state" diff --git a/jsonrpc/endpoints_eth_innertx.go b/jsonrpc/endpoints_eth_innertx.go index a5d66b6a5f..a3c0cce57b 100644 --- a/jsonrpc/endpoints_eth_innertx.go +++ b/jsonrpc/endpoints_eth_innertx.go @@ -3,14 +3,15 @@ package jsonrpc import ( "context" "encoding/json" - "github.com/0xPolygonHermez/zkevm-node/jsonrpc/types" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/jackc/pgx/v4" "math/big" "strconv" "strings" "sync" + + "github.com/0xPolygonHermez/zkevm-node/jsonrpc/types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/jackc/pgx/v4" ) var debugEndPoints *DebugEndpoints @@ -72,7 +73,7 @@ type okFrame struct { } func internalTxTraceToInnerTxs(tx okFrame) []*InnerTx { - dfs := Dfs{} + dfs := dfs{} indexMap := make(map[int]int) indexMap[0] = 1 var level = 0 @@ -82,7 +83,7 @@ func internalTxTraceToInnerTxs(tx okFrame) []*InnerTx { return dfs.innerTxs } -type Dfs struct { +type dfs struct { innerTxs []*InnerTx } @@ -95,7 +96,7 @@ func inArray(dst string, src []string) bool { return false } -func (d *Dfs) dfs(tx okFrame, level int, index int, indexMap map[int]int, isError bool) { +func (d *dfs) dfs(tx okFrame, level int, index int, indexMap map[int]int, isError bool) { if !inArray(strings.ToLower(tx.Type), []string{"call", "create", "create2", "callcode", "delegatecall", "staticcall", "selfdestruct"}) { return @@ -125,6 +126,7 @@ func (d *Dfs) dfs(tx okFrame, level int, index int, indexMap map[int]int, isErro } } +// InnerTx represents a struct type for internal transactions. type InnerTx struct { Dept big.Int `json:"dept"` InternalIndex big.Int `json:"internal_index"` diff --git a/jsonrpc/nacos/start.go b/jsonrpc/nacos/start.go index 252defdce7..0bfee1d5c0 100644 --- a/jsonrpc/nacos/start.go +++ b/jsonrpc/nacos/start.go @@ -7,11 +7,10 @@ import ( "strings" "time" + "github.com/0xPolygonHermez/zkevm-node/log" "github.com/nacos-group/nacos-sdk-go/clients" "github.com/nacos-group/nacos-sdk-go/common/constant" "github.com/nacos-group/nacos-sdk-go/vo" - - "github.com/0xPolygonHermez/zkevm-node/log" ) // StartNacosClient start nacos client and register rest service in nacos @@ -27,11 +26,15 @@ func StartNacosClient(urls string, namespace string, name string, externalAddr s log.Error(fmt.Sprintf("failed to resolve nacos server url %s: %s", urls, err.Error())) return } + + const timeoutMs = 5000 + const listenInterval = 10000 + client, err := clients.CreateNamingClient(map[string]interface{}{ "serverConfigs": serverConfigs, "clientConfig": constant.ClientConfig{ - TimeoutMs: 5000, - ListenInterval: 10000, + TimeoutMs: timeoutMs, + ListenInterval: listenInterval, NotLoadCacheAtStart: true, NamespaceId: namespace, LogDir: "/dev/null", @@ -43,11 +46,12 @@ func StartNacosClient(urls string, namespace string, name string, externalAddr s return } + const weight = 10 _, err = client.RegisterInstance(vo.RegisterInstanceParam{ Ip: ip, Port: uint64(port), ServiceName: name, - Weight: 10, + Weight: weight, ClusterName: "DEFAULT", Enable: true, Healthy: true, @@ -64,11 +68,13 @@ func StartNacosClient(urls string, namespace string, name string, externalAddr s log.Info("register application instance in nacos successfully") } +// ResolveIPAndPort resolve ip and port from addr func ResolveIPAndPort(addr string) (string, int, error) { laddr := strings.Split(addr, ":") ip := laddr[0] if ip == "127.0.0.1" { - return GetLocalIP(), 26659, nil + const port = 26659 + return GetLocalIP(), port, nil } port, err := strconv.Atoi(laddr[1]) if err != nil { diff --git a/jsonrpc/nacos/utils.go b/jsonrpc/nacos/utils.go index 6474232a7f..10e3d7ceb0 100644 --- a/jsonrpc/nacos/utils.go +++ b/jsonrpc/nacos/utils.go @@ -11,17 +11,19 @@ import ( "github.com/nacos-group/nacos-sdk-go/vo" ) +// GetOneInstance is get the instance func GetOneInstance(urls string, nameSpace string, param vo.SelectOneHealthInstanceParam) (instance *model.Instance, err error) { serverConfigs, err := getServerConfigs(urls) if err != nil { return nil, fmt.Errorf("failed to resolve nacos server url %s: %s", urls, err.Error()) } + const timeoutMs = 5000 namingClient, err := clients.CreateNamingClient(map[string]interface{}{ "serverConfigs": serverConfigs, "clientConfig": constant.ClientConfig{ NamespaceId: nameSpace, - TimeoutMs: 5000, + TimeoutMs: timeoutMs, NotLoadCacheAtStart: true, LogDir: "/dev/null", }, diff --git a/jsonrpc/server.go b/jsonrpc/server.go index 7e5f807b4f..b49c7f36e2 100644 --- a/jsonrpc/server.go +++ b/jsonrpc/server.go @@ -12,13 +12,12 @@ import ( "sync" "time" - "github.com/didip/tollbooth/v6" - "github.com/gorilla/websocket" - "github.com/0xPolygonHermez/zkevm-node/jsonrpc/metrics" "github.com/0xPolygonHermez/zkevm-node/jsonrpc/nacos" "github.com/0xPolygonHermez/zkevm-node/jsonrpc/types" "github.com/0xPolygonHermez/zkevm-node/log" + "github.com/didip/tollbooth/v6" + "github.com/gorilla/websocket" ) const ( diff --git a/sequencer/metrics/logstatistics.go b/sequencer/metrics/logstatistics.go index 141649d523..977a13c045 100644 --- a/sequencer/metrics/logstatistics.go +++ b/sequencer/metrics/logstatistics.go @@ -4,37 +4,55 @@ import ( "time" ) -type LogTag string +// LogTag is a type used for logging tags. +type logTag string -type LogStatistics interface { - CumulativeCounting(tag LogTag) - CumulativeValue(tag LogTag, value int64) - CumulativeTiming(tag LogTag, duration time.Duration) - SetTag(tag LogTag, value string) +type logStatistics interface { + CumulativeCounting(tag logTag) + CumulativeValue(tag logTag, value int64) + CumulativeTiming(tag logTag, duration time.Duration) + SetTag(tag logTag, value string) Summary() string ResetStatistics() - UpdateTimestamp(tag LogTag, tm time.Time) + UpdateTimestamp(tag logTag, tm time.Time) } const ( - TxCounter LogTag = "TxCounter" - GetTx LogTag = "GetTx" - GetTxPauseCounter LogTag = "GetTxPauseCounter" - BatchCloseReason LogTag = "BatchCloseReason" - ReprocessingTxCounter LogTag = "ReProcessingTxCounter" - FailTxCounter LogTag = "FailTxCounter" - NewRound LogTag = "NewRound" - BatchGas LogTag = "BatchGas" + // TxCounter is a constant for logging transaction counts. + TxCounter logTag = "TxCounter" + // GetTx is a constant for logging tx. + GetTx logTag = "GetTx" + // GetTxPauseCounter is used to log the transaction pause counter. + GetTxPauseCounter logTag = "GetTxPauseCounter" + // BatchCloseReason is used to log the batch close reason. + BatchCloseReason logTag = "BatchCloseReason" + // ReprocessingTxCounter is used to log the reprocessing transaction counter. + ReprocessingTxCounter logTag = "ReProcessingTxCounter" + // FailTxCounter is used to log the failed transaction counter. + FailTxCounter logTag = "FailTxCounter" + // NewRound is used to log new round events. + NewRound logTag = "NewRound" + // BatchGas is used to log batch gas-related information. + BatchGas logTag = "BatchGas" - ProcessingTxTiming LogTag = "ProcessingTxTiming" - ProcessingInvalidTxCounter LogTag = "ProcessingInvalidTxCounter" - ProcessingTxCommit LogTag = "ProcessingTxCommit" - ProcessingTxResponse LogTag = "ProcessingTxResponse" + // ProcessingTxTiming is used to log transaction processing time. + ProcessingTxTiming logTag = "ProcessingTxTiming" + // ProcessingInvalidTxCounter is used to log the processing of invalid transactions counter. + ProcessingInvalidTxCounter logTag = "ProcessingInvalidTxCounter" + // ProcessingTxCommit is used to log transaction commit events. + ProcessingTxCommit logTag = "ProcessingTxCommit" + // ProcessingTxResponse is used to log transaction response events. + ProcessingTxResponse logTag = "ProcessingTxResponse" - FinalizeBatchTiming LogTag = "FinalizeBatchTiming" - FinalizeBatchNumber LogTag = "FinalizeBatchNumber" - FinalizeBatchReprocessFullBatch LogTag = "FinalizeBatchReprocessFullBatch" - FinalizeBatchCloseBatch LogTag = "FinalizeBatchCloseBatch" - FinalizeBatchOpenBatch LogTag = "FinalizeBatchOpenBatch" + // FinalizeBatchTiming is used to log batch finalization time. + FinalizeBatchTiming logTag = "FinalizeBatchTiming" + // FinalizeBatchNumber is used to log batch numbers. + FinalizeBatchNumber logTag = "FinalizeBatchNumber" + // FinalizeBatchReprocessFullBatch is used to log reprocess full batch events. + FinalizeBatchReprocessFullBatch logTag = "FinalizeBatchReprocessFullBatch" + // FinalizeBatchCloseBatch is used to log batch close events. + FinalizeBatchCloseBatch logTag = "FinalizeBatchCloseBatch" + // FinalizeBatchOpenBatch is used to log batch open events. + FinalizeBatchOpenBatch logTag = "FinalizeBatchOpenBatch" ) diff --git a/sequencer/metrics/logstatisticsimpl.go b/sequencer/metrics/logstatisticsimpl.go index d74dd87596..8777f61e41 100644 --- a/sequencer/metrics/logstatisticsimpl.go +++ b/sequencer/metrics/logstatisticsimpl.go @@ -9,7 +9,8 @@ import ( var instance *logStatisticsInstance var once sync.Once -func GetLogStatistics() LogStatistics { +// GetLogStatistics is get log instance for statistic +func GetLogStatistics() logStatistics { once.Do(func() { instance = &logStatisticsInstance{} instance.init() @@ -18,40 +19,40 @@ func GetLogStatistics() LogStatistics { } type logStatisticsInstance struct { - timestamp map[LogTag]time.Time - statistics map[LogTag]int64 // value maybe the counter or time.Duration(ms) - tags map[LogTag]string + timestamp map[logTag]time.Time + statistics map[logTag]int64 // value maybe the counter or time.Duration(ms) + tags map[logTag]string } func (l *logStatisticsInstance) init() { - l.timestamp = make(map[LogTag]time.Time) - l.statistics = make(map[LogTag]int64) - l.tags = make(map[LogTag]string) + l.timestamp = make(map[logTag]time.Time) + l.statistics = make(map[logTag]int64) + l.tags = make(map[logTag]string) } -func (l *logStatisticsInstance) CumulativeCounting(tag LogTag) { +func (l *logStatisticsInstance) CumulativeCounting(tag logTag) { l.statistics[tag]++ } -func (l *logStatisticsInstance) CumulativeValue(tag LogTag, value int64) { +func (l *logStatisticsInstance) CumulativeValue(tag logTag, value int64) { l.statistics[tag] += value } -func (l *logStatisticsInstance) CumulativeTiming(tag LogTag, duration time.Duration) { +func (l *logStatisticsInstance) CumulativeTiming(tag logTag, duration time.Duration) { l.statistics[tag] += duration.Milliseconds() } -func (l *logStatisticsInstance) SetTag(tag LogTag, value string) { +func (l *logStatisticsInstance) SetTag(tag logTag, value string) { l.tags[tag] = value } -func (l *logStatisticsInstance) UpdateTimestamp(tag LogTag, tm time.Time) { +func (l *logStatisticsInstance) UpdateTimestamp(tag logTag, tm time.Time) { l.timestamp[tag] = tm } func (l *logStatisticsInstance) ResetStatistics() { - l.statistics = make(map[LogTag]int64) - l.tags = make(map[LogTag]string) + l.statistics = make(map[logTag]int64) + l.tags = make(map[logTag]string) } func (l *logStatisticsInstance) Summary() string { diff --git a/sequencer/metrics/logstatisticsimpl_test.go b/sequencer/metrics/logstatisticsimpl_test.go index c2ec294811..4e661ccf85 100644 --- a/sequencer/metrics/logstatisticsimpl_test.go +++ b/sequencer/metrics/logstatisticsimpl_test.go @@ -7,9 +7,9 @@ import ( func Test_logStatisticsInstance_Summary(t *testing.T) { type fields struct { - timestamp map[LogTag]time.Time - statistics map[LogTag]int64 - tags map[LogTag]string + timestamp map[logTag]time.Time + statistics map[logTag]int64 + tags map[logTag]string } tests := []struct { name string @@ -18,8 +18,8 @@ func Test_logStatisticsInstance_Summary(t *testing.T) { }{ // TODO: Add test cases. {"1", fields{ - timestamp: map[LogTag]time.Time{NewRound: time.Now().Add(-time.Second)}, - statistics: map[LogTag]int64{ + timestamp: map[logTag]time.Time{NewRound: time.Now().Add(-time.Second)}, + statistics: map[logTag]int64{ BatchGas: 111111, TxCounter: 10, GetTx: time.Second.Milliseconds(), @@ -35,7 +35,7 @@ func Test_logStatisticsInstance_Summary(t *testing.T) { FinalizeBatchCloseBatch: time.Second.Milliseconds() * 10, FinalizeBatchOpenBatch: time.Second.Milliseconds() * 10, }, - tags: map[LogTag]string{BatchCloseReason: "deadline", FinalizeBatchNumber: "123"}, + tags: map[logTag]string{BatchCloseReason: "deadline", FinalizeBatchNumber: "123"}, }, "test"}, } for _, tt := range tests { diff --git a/sequencer/txtracker.go b/sequencer/txtracker.go index 025fb1ddf6..2bcc5b8f55 100644 --- a/sequencer/txtracker.go +++ b/sequencer/txtracker.go @@ -1,10 +1,10 @@ package sequencer import ( - "github.com/0xPolygonHermez/zkevm-node/pool" "math/big" "time" + "github.com/0xPolygonHermez/zkevm-node/pool" "github.com/0xPolygonHermez/zkevm-node/state" "github.com/ethereum/go-ethereum/common" ) diff --git a/sequencer/worker.go b/sequencer/worker.go index a9345b7f80..99ef3992c4 100644 --- a/sequencer/worker.go +++ b/sequencer/worker.go @@ -3,13 +3,13 @@ package sequencer import ( "context" "fmt" - "github.com/0xPolygonHermez/zkevm-node/pool" "math/big" "runtime" "sync" "time" "github.com/0xPolygonHermez/zkevm-node/log" + "github.com/0xPolygonHermez/zkevm-node/pool" "github.com/0xPolygonHermez/zkevm-node/state" "github.com/ethereum/go-ethereum/common" ) @@ -319,8 +319,6 @@ func (w *Worker) GetBestFittingTx(resources state.BatchResources) *TxTracker { if foundAt != -1 { log.Infof("GetBestFittingTx found tx(%s) at index(%d) with gasPrice(%d)", tx.Hash.String(), foundAt, tx.GasPrice) - } else { - // log.Debugf("GetBestFittingTx no tx found") } return tx diff --git a/sequencesender/config.go b/sequencesender/config.go index 6b75bcc4d6..57107a33dc 100644 --- a/sequencesender/config.go +++ b/sequencesender/config.go @@ -12,10 +12,10 @@ type Config struct { WaitPeriodSendSequence types.Duration `mapstructure:"WaitPeriodSendSequence"` // LastBatchVirtualizationTimeMaxWaitPeriod is time since sequences should be sent LastBatchVirtualizationTimeMaxWaitPeriod types.Duration `mapstructure:"LastBatchVirtualizationTimeMaxWaitPeriod"` - // // MaxTxSizeForL1 is the maximum size a single transaction can have. This field has - // // non-trivial consequences: larger transactions than 128KB are significantly harder and - // // more expensive to propagate; larger transactions also take more resources - // // to validate whether they fit into the pool or not. + // MaxTxSizeForL1 is the maximum size a single transaction can have. This field has + // non-trivial consequences: larger transactions than 128KB are significantly harder and + // more expensive to propagate; larger transactions also take more resources + // to validate whether they fit into the pool or not. MaxTxSizeForL1 uint64 `mapstructure:"MaxTxSizeForL1"` // MaxBatchesForL1 is the maximum amount of batches to be sequenced in a single L1 tx diff --git a/state/runtime/executor/client.go b/state/runtime/executor/client.go index b386d4320f..b6df28f425 100644 --- a/state/runtime/executor/client.go +++ b/state/runtime/executor/client.go @@ -33,7 +33,7 @@ func NewExecutorClient(ctx context.Context, c Config) (ExecutorServiceClient, *g log.Infof("Retrying connection to executor #%d", connectionRetries) time.Sleep(time.Duration(delay) * time.Second) connectionRetries = connectionRetries + 1 - out, err := exec.Command("docker", []string{"logs", "zkevm-prover"}...).Output() + out, err := exec.Command("docker", []string{"logs", "xgon-prover"}...).Output() if err == nil { log.Infof("Prover logs:\n%s\n", out) } diff --git a/synchronizer/synchronizer_test.go b/synchronizer/synchronizer_test.go index b7b1d433fa..8aabeb24b1 100644 --- a/synchronizer/synchronizer_test.go +++ b/synchronizer/synchronizer_test.go @@ -15,6 +15,7 @@ import ( "github.com/0xPolygonHermez/zkevm-node/state/runtime/executor" "github.com/ethereum/go-ethereum/common" ethTypes "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" "github.com/jackc/pgx/v4" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -44,6 +45,9 @@ type mocks struct { // this Check partially point 2: Use previous batch stored in memory to avoid getting from database func Test_Given_PermissionlessNode_When_SyncronizeAgainSameBatch_Then_UseTheOneInMemoryInstaeadOfGettingFromDb(t *testing.T) { genesis, cfg, m := setupGenericTest(t) + m.Etherman. + On("GetCurrentDataCommittee"). + Return(ðerman.DataCommittee{}, nil) sync_interface, err := NewSynchronizer(false, m.Etherman, m.State, m.Pool, m.EthTxManager, m.ZKEVMClient, nil, *genesis, *cfg, nil) require.NoError(t, err) sync, ok := sync_interface.(*ClientSynchronizer) @@ -67,6 +71,9 @@ func Test_Given_PermissionlessNode_When_SyncronizeAgainSameBatch_Then_UseTheOneI // this Check partially point 2: Store last batch in memory (CurrentTrustedBatch) func Test_Given_PermissionlessNode_When_SyncronizeFirstTimeABatch_Then_StoreItInALocalVar(t *testing.T) { genesis, cfg, m := setupGenericTest(t) + m.Etherman. + On("GetCurrentDataCommittee"). + Return(ðerman.DataCommittee{}, nil) sync_interface, err := NewSynchronizer(false, m.Etherman, m.State, m.Pool, m.EthTxManager, m.ZKEVMClient, nil, *genesis, *cfg, nil) require.NoError(t, err) sync, ok := sync_interface.(*ClientSynchronizer) @@ -99,8 +106,11 @@ func TestForcedBatch(t *testing.T) { DbTx: newDbTxMock(t), ZKEVMClient: newZkEVMClientMock(t), } + m.Etherman. + On("GetCurrentDataCommittee"). + Return(nil, nil) - sync, err := NewSynchronizer(false, m.Etherman, m.State, m.Pool, m.EthTxManager, m.ZKEVMClient, nil, genesis, cfg, nil) + sync, err := NewSynchronizer(false, m.Etherman, m.State, m.Pool, m.EthTxManager, m.ZKEVMClient, nil, genesis, cfg, m.DataCommitteeClientFactory) require.NoError(t, err) // state preparation @@ -167,13 +177,14 @@ func TestForcedBatch(t *testing.T) { Once() t := time.Now() + txs := []byte{} sequencedBatch := etherman.SequencedBatch{ BatchNumber: uint64(2), Coinbase: common.HexToAddress("0x222"), SequencerAddr: common.HexToAddress("0x00"), TxHash: common.HexToHash("0x333"), PolygonZkEVMBatchData: polygonzkevm.PolygonZkEVMBatchData{ - Transactions: []byte{}, + TransactionsHash: crypto.Keccak256Hash(txs), GlobalExitRoot: [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}, Timestamp: uint64(t.Unix()), MinForcedTimestamp: 1000, //ForcedBatch @@ -185,7 +196,7 @@ func TestForcedBatch(t *testing.T) { ForcedBatchNumber: 1, Sequencer: sequencedBatch.Coinbase, GlobalExitRoot: sequencedBatch.GlobalExitRoot, - RawTxsData: sequencedBatch.Transactions, + RawTxsData: txs, ForcedAt: time.Unix(int64(sequencedBatch.MinForcedTimestamp), 0), }} @@ -238,12 +249,17 @@ func TestForcedBatch(t *testing.T) { Return(nil). Once() + m.State. + On("GetBatchL2DataByNumber", ctx, uint64(2), nil). + Return(txs, nil). + Once() + fb := []state.ForcedBatch{{ BlockNumber: lastBlock.BlockNumber, ForcedBatchNumber: 1, Sequencer: sequencedBatch.Coinbase, GlobalExitRoot: sequencedBatch.GlobalExitRoot, - RawTxsData: sequencedBatch.Transactions, + RawTxsData: []byte{}, ForcedAt: time.Unix(int64(sequencedBatch.MinForcedTimestamp), 0), }} @@ -258,7 +274,7 @@ func TestForcedBatch(t *testing.T) { Once() trustedBatch := &state.Batch{ - BatchL2Data: sequencedBatch.Transactions, + BatchL2Data: txs, GlobalExitRoot: sequencedBatch.GlobalExitRoot, Timestamp: time.Unix(int64(sequencedBatch.Timestamp), 0), Coinbase: sequencedBatch.Coinbase, @@ -343,8 +359,11 @@ func TestSequenceForcedBatch(t *testing.T) { DbTx: newDbTxMock(t), ZKEVMClient: newZkEVMClientMock(t), } + m.Etherman. + On("GetCurrentDataCommittee"). + Return(nil, nil) - sync, err := NewSynchronizer(true, m.Etherman, m.State, m.Pool, m.EthTxManager, m.ZKEVMClient, nil, genesis, cfg, nil) + sync, err := NewSynchronizer(true, m.Etherman, m.State, m.Pool, m.EthTxManager, m.ZKEVMClient, nil, genesis, cfg, m.DataCommitteeClientFactory) require.NoError(t, err) // state preparation @@ -741,7 +760,6 @@ func TestSsZeroByteArray(t *testing.T) { var hash1 [32]byte assert.Equal(t, isZeroByteArray(hash1), true) - var hash2 [32]byte - hash2 = [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32} + hash2 := [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32} assert.Equal(t, isZeroByteArray(hash2), false) } diff --git a/test/Makefile b/test/Makefile index c7acdae5a1..0f191708df 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,31 +1,36 @@ DOCKERCOMPOSE := docker-compose -f docker-compose.yml -DOCKERCOMPOSEAPPSEQ := zkevm-sequencer -DOCKERCOMPOSEAPPSEQSENDER := zkevm-sequence-sender -DOCKERCOMPOSEAPPL2GASP := zkevm-l2gaspricer -DOCKERCOMPOSEAPPAGG := zkevm-aggregator -DOCKERCOMPOSEAPPRPC := zkevm-json-rpc -DOCKERCOMPOSEAPPSYNC := zkevm-sync -DOCKERCOMPOSEAPPETHTXMANAGER := zkevm-eth-tx-manager -DOCKERCOMPOSESTATEDB := zkevm-state-db -DOCKERCOMPOSEPOOLDB := zkevm-pool-db -DOCKERCOMPOSEEVENTDB := zkevm-event-db -DOCKERCOMPOSENETWORK := zkevm-mock-l1-network -DOCKERCOMPOSEEXPLORERL1 := zkevm-explorer-l1 -DOCKERCOMPOSEEXPLORERL1DB := zkevm-explorer-l1-db -DOCKERCOMPOSEEXPLORERL2 := zkevm-explorer-l2 -DOCKERCOMPOSEEXPLORERL2DB := zkevm-explorer-l2-db -DOCKERCOMPOSEEXPLORERRPC := zkevm-explorer-json-rpc -DOCKERCOMPOSEZKPROVER := zkevm-prover -DOCKERCOMPOSEPERMISSIONLESSDB := zkevm-permissionless-db -DOCKERCOMPOSEPERMISSIONLESSNODE := zkevm-permissionless-node -DOCKERCOMPOSEPERMISSIONLESSZKPROVER := zkevm-permissionless-prover -DOCKERCOMPOSENODEAPPROVE := zkevm-approve -DOCKERCOMPOSEMETRICS := zkevm-metrics +DOCKERCOMPOSEAPPSEQ := xgon-sequencer +DOCKERCOMPOSEAPPSEQSENDER := xgon-sequence-sender +DOCKERCOMPOSEAPPL2GASP := xgon-l2gaspricer +DOCKERCOMPOSEAPPAGG := xgon-aggregator +DOCKERCOMPOSEAPPRPC := xgon-json-rpc +DOCKERCOMPOSEAPPSYNC := xgon-sync +DOCKERCOMPOSEAPPETHTXMANAGER := xgon-eth-tx-manager +DOCKERCOMPOSESTATEDB := xgon-state-db +DOCKERCOMPOSEPOOLDB := xgon-pool-db +DOCKERCOMPOSEEVENTDB := xgon-event-db +DOCKERCOMPOSEDACDB := xgon-data-availability-db +DOCKERCOMPOSENETWORK := xgon-mock-l1-network +DOCKERCOMPOSEEXPLORERL1 := xgon-explorer-l1 +DOCKERCOMPOSEEXPLORERL1DB := xgon-explorer-l1-db +DOCKERCOMPOSEEXPLORERL2 := xgon-explorer-l2 +DOCKERCOMPOSEEXPLORERL2DB := xgon-explorer-l2-db +DOCKERCOMPOSEEXPLORERRPC := xgon-explorer-json-rpc +DOCKERCOMPOSEDACNODE := xgon-data-availability +DOCKERCOMPOSEZKPROVER := xgon-prover +DOCKERCOMPOSEPERMISSIONLESSDB := xgon-permissionless-db +DOCKERCOMPOSEPERMISSIONLESSNODE := xgon-permissionless-node +DOCKERCOMPOSEPERMISSIONLESSNODEDAC := xgon-permissionless-node-forced-DAC +DOCKERCOMPOSEPERMISSIONLESSZKPROVER := xgon-permissionless-prover +DOCKERCOMPOSENODEAPPROVE := xgon-approve +DOCKERCOMPOSEMETRICS := xgon-metrics DOCKERCOMPOSEGRAFANA := grafana RUNSTATEDB := $(DOCKERCOMPOSE) up -d $(DOCKERCOMPOSESTATEDB) RUNPOOLDB := $(DOCKERCOMPOSE) up -d $(DOCKERCOMPOSEPOOLDB) RUNEVENTDB := $(DOCKERCOMPOSE) up -d $(DOCKERCOMPOSEEVENTDB) +RUNDACDB := $(DOCKERCOMPOSE) up -d $(DOCKERCOMPOSEDACDB) +RUNDACNODE := $(DOCKERCOMPOSE) up -d $(DOCKERCOMPOSEDACNODE) RUNSEQUENCER := $(DOCKERCOMPOSE) up -d $(DOCKERCOMPOSEAPPSEQ) RUNSEQUENCESENDER := $(DOCKERCOMPOSE) up -d $(DOCKERCOMPOSEAPPSEQSENDER) RUNL2GASPRICER := $(DOCKERCOMPOSE) up -d $(DOCKERCOMPOSEAPPL2GASP) @@ -45,6 +50,7 @@ RUNZKPROVER := $(DOCKERCOMPOSE) up -d $(DOCKERCOMPOSEZKPROVER) RUNPERMISSIONLESSDB := $(DOCKERCOMPOSE) up -d $(DOCKERCOMPOSEPERMISSIONLESSDB) RUNPERMISSIONLESSNODE := $(DOCKERCOMPOSE) up -d $(DOCKERCOMPOSEPERMISSIONLESSNODE) +RUNPERMISSIONLESSNODEDAC := $(DOCKERCOMPOSE) up -d $(DOCKERCOMPOSEPERMISSIONLESSNODEDAC) RUNPERMISSIONLESSZKPROVER := $(DOCKERCOMPOSE) up -d $(DOCKERCOMPOSEPERMISSIONLESSZKPROVER) RUNAPPROVE := $(DOCKERCOMPOSE) up -d $(DOCKERCOMPOSENODEAPPROVE) @@ -56,6 +62,8 @@ RUN := $(DOCKERCOMPOSE) up -d STOPSTATEDB := $(DOCKERCOMPOSE) stop $(DOCKERCOMPOSESTATEDB) && $(DOCKERCOMPOSE) rm -f $(DOCKERCOMPOSESTATEDB) STOPPOOLDB := $(DOCKERCOMPOSE) stop $(DOCKERCOMPOSEPOOLDB) && $(DOCKERCOMPOSE) rm -f $(DOCKERCOMPOSEPOOLDB) STOPEVENTDB := $(DOCKERCOMPOSE) stop $(DOCKERCOMPOSEEVENTDB) && $(DOCKERCOMPOSE) rm -f $(DOCKERCOMPOSEEVENTDB) +STOPDACDB := $(DOCKERCOMPOSE) stop $(DOCKERCOMPOSEDACDB) && $(DOCKERCOMPOSE) rm -f $(DOCKERCOMPOSEDACDB) +STOPDACNODE := $(DOCKERCOMPOSE) stop $(DOCKERCOMPOSEDACNODE) && $(DOCKERCOMPOSE) rm -f $(DOCKERCOMPOSEDACNODE) STOPSEQUENCER := $(DOCKERCOMPOSE) stop $(DOCKERCOMPOSEAPPSEQ) && $(DOCKERCOMPOSE) rm -f $(DOCKERCOMPOSEAPPSEQ) STOPSEQUENCESENDER := $(DOCKERCOMPOSE) stop $(DOCKERCOMPOSEAPPSEQSENDER) && $(DOCKERCOMPOSE) rm -f $(DOCKERCOMPOSEAPPSEQSENDER) STOPL2GASPRICER := $(DOCKERCOMPOSE) stop $(DOCKERCOMPOSEAPPL2GASP) && $(DOCKERCOMPOSE) rm -f $(DOCKERCOMPOSEAPPL2GASP) @@ -75,6 +83,7 @@ STOPZKPROVER := $(DOCKERCOMPOSE) stop $(DOCKERCOMPOSEZKPROVER) && $(DOCKERCOMPOS STOPPERMISSIONLESSDB := $(DOCKERCOMPOSE) stop $(DOCKERCOMPOSEPERMISSIONLESSDB) && $(DOCKERCOMPOSE) rm -f $(DOCKERCOMPOSEPERMISSIONLESSDB) STOPPERMISSIONLESSNODE := $(DOCKERCOMPOSE) stop $(DOCKERCOMPOSEPERMISSIONLESSNODE) && $(DOCKERCOMPOSE) rm -f $(DOCKERCOMPOSEPERMISSIONLESSNODE) +STOPPERMISSIONLESSNODEDAC := $(DOCKERCOMPOSE) stop $(DOCKERCOMPOSEPERMISSIONLESSNODEDAC) && $(DOCKERCOMPOSE) rm -f $(DOCKERCOMPOSEPERMISSIONLESSNODEDAC) STOPPERMISSIONLESSZKPROVER := $(DOCKERCOMPOSE) stop $(DOCKERCOMPOSEPERMISSIONLESSZKPROVER) && $(DOCKERCOMPOSE) rm -f $(DOCKERCOMPOSEPERMISSIONLESSZKPROVER) STOPAPPROVE := $(DOCKERCOMPOSE) stop $(DOCKERCOMPOSENODEAPPROVE) && $(DOCKERCOMPOSE) rm -f $(DOCKERCOMPOSENODEAPPROVE) @@ -88,6 +97,7 @@ test-full-non-e2e: stop ## Runs non-e2e tests checking race conditions $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) sleep 2 $(RUNZKPROVER) sleep 7 @@ -101,6 +111,7 @@ test-e2e-group-1: stop ## Runs group 1 e2e tests checking race conditions $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) sleep 5 $(RUNZKPROVER) docker ps -a @@ -112,6 +123,7 @@ test-e2e-group-2: stop ## Runs group 2 e2e tests checking race conditions $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) sleep 5 $(RUNZKPROVER) docker ps -a @@ -123,6 +135,7 @@ test-e2e-group-3: stop ## Runs group 3 e2e tests checking race conditions $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) sleep 5 $(RUNZKPROVER) docker ps -a @@ -134,6 +147,7 @@ test-e2e-group-4: stop ## Runs group 4 e2e tests checking race conditions $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) sleep 5 $(RUNZKPROVER) docker ps -a @@ -145,6 +159,7 @@ test-e2e-group-5: stop ## Runs group 5 e2e tests checking race conditions $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) sleep 5 $(RUNZKPROVER) docker ps -a @@ -156,6 +171,7 @@ test-e2e-group-6: stop ## Runs group 6 e2e tests checking race conditions $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) sleep 5 $(RUNZKPROVER) docker ps -a @@ -167,6 +183,7 @@ test-e2e-group-7: stop ## Runs group 7 e2e tests checking race conditions $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) sleep 5 $(RUNZKPROVER) docker ps -a @@ -178,6 +195,7 @@ test-e2e-group-8: stop ## Runs group 8 e2e tests checking race conditions $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) sleep 5 $(RUNZKPROVER) docker ps -a @@ -190,6 +208,7 @@ test-e2e-group-9: stop ## Runs group 9 e2e tests checking race conditions $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) sleep 5 $(RUNZKPROVER) docker ps -a @@ -202,6 +221,7 @@ test-e2e-group-10: stop ## Runs group 10 e2e tests checking race conditions $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) sleep 5 $(RUNZKPROVER) docker ps -a @@ -214,18 +234,32 @@ test-e2e-group-11: stop ## Runs group 11 e2e tests checking race conditions $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) sleep 5 $(RUNZKPROVER) docker ps -a docker logs $(DOCKERCOMPOSEZKPROVER) trap '$(STOP)' EXIT; MallocNanoZone=0 go test -count=1 -race -v -p 1 -timeout 2000s ../ci/e2e-group11/... + +.PHONY: test-e2e-e2e-group-dac-1 +test-e2e-group-dac-1: stop ## Runs xgon-validium-1 e2e tests checking race conditions + $(RUNSTATEDB) + $(RUNPOOLDB) + $(RUNEVENTDB) + sleep 5 + $(RUNZKPROVER) + docker ps -a + docker logs $(DOCKERCOMPOSEZKPROVER) + trap '$(STOP)' EXIT; MallocNanoZone=0 go test -count=1 -race -v -p 1 -timeout 2000s ../ci/e2e-group-dac-1/... + .PHONY: benchmark-sequencer-eth-transfers benchmark-sequencer-eth-transfers: stop $(RUNL1NETWORK) $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) sleep 5 $(RUNZKPROVER) $(RUNSYNC) @@ -245,6 +279,7 @@ benchmark-sequencer-erc20-transfers: stop $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) sleep 5 $(RUNZKPROVER) $(RUNSYNC) @@ -263,18 +298,21 @@ run-db: ## Runs the node database $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) .PHONY: stop-db stop-db: ## Stops the node database $(STOPEVENTDB) $(STOPPOOLDB) $(STOPSTATEDB) + $(STOPDACDB) .PHONY: run-node run-node: ## Runs the node $(RUNETHTXMANAGER) $(RUNSYNC) sleep 2 + $(RUNDACNODE) $(RUNSEQUENCER) $(RUNSEQUENCESENDER) $(RUNL2GASPRICER) @@ -283,6 +321,7 @@ run-node: ## Runs the node .PHONY: stop-node stop-node: ## Stops the node + $(STOPDACNODE) $(STOPSEQUENCER) $(STOPSEQUENCESENDER) $(STOPJSONRPC) @@ -419,11 +458,24 @@ run-permissionless: run-node ## Runs the trusted and permissionless node $(RUNPERMISSIONLESSNODE) .PHONY: stop-permissionless -stop-permissionless: stop-node## Stops the permissionless node +stop-permissionless: stop-node## Stops the trusted and permissionless node $(STOPPERMISSIONLESSNODE) $(STOPPERMISSIONLESSZKPROVER) $(STOPPERMISSIONLESSDB) +.PHONY: run-permissionless-dac +run-permissionless-dac: ## Runs a permissionless node that is forced to sync through DAC + $(RUNPERMISSIONLESSDB) + sleep 1 + $(RUNPERMISSIONLESSZKPROVER) + $(RUNPERMISSIONLESSNODEDAC) + +.PHONY: stop-permissionless-dac +stop-permissionless-dac: ## Stops the permissionless node that is forced to sync through DAC + $(STOPPERMISSIONLESSNODEDAC) + $(STOPPERMISSIONLESSZKPROVER) + $(STOPPERMISSIONLESSDB) + .PHONY: run-approve-matic run-approve-matic: ## Runs approve in node container $(RUNAPPROVE) @@ -437,6 +489,7 @@ run: ## Runs a full node $(RUNSTATEDB) $(RUNPOOLDB) $(RUNEVENTDB) + $(RUNDACDB) $(RUNL1NETWORK) sleep 1 $(RUNZKPROVER) @@ -444,6 +497,7 @@ run: ## Runs a full node sleep 3 $(RUNSYNC) sleep 2 + $(RUNDACNODE) $(RUNETHTXMANAGER) $(RUNSEQUENCER) $(RUNSEQUENCESENDER) @@ -473,6 +527,15 @@ run-metrics: ## Runs the metrics container stop-metrics: ## Stops the metrics container $(STOPMETRICS) +.PHONY: run-dac-db +run-dac-db: ## Suns the DAC DB + $(RUNDACDB) + +.PHONY: stop-dac-db +stop-dac-db: ## Stops the DAC DB + $(STOPDACDB) + + .PHONY: init-network init-network: ## Initializes the network go run ./scripts/init_network/main.go . @@ -518,6 +581,8 @@ generate-mocks: ## Generates mocks for the tests, using mockery tool export "GOROOT=$$(go env GOROOT)" && $$(go env GOPATH)/bin/mockery --name=poolInterface --dir=../synchronizer --output=../synchronizer --outpkg=synchronizer --structname=poolMock --filename=mock_pool.go export "GOROOT=$$(go env GOROOT)" && $$(go env GOPATH)/bin/mockery --name=zkEVMClientInterface --dir=../synchronizer --output=../synchronizer --outpkg=synchronizer --structname=zkEVMClientMock --filename=mock_zkevmclient.go export "GOROOT=$$(go env GOROOT)" && $$(go env GOPATH)/bin/mockery --name=Tx --srcpkg=github.com/jackc/pgx/v4 --output=../synchronizer --outpkg=synchronizer --structname=dbTxMock --filename=mock_dbtx.go + export "GOROOT=$$(go env GOROOT)" && $$(go env GOPATH)/bin/mockery --name=ClientFactoryInterface --srcpkg=github.com/okx/Xgon-data-availability/client --output=../synchronizer --outpkg=synchronizer --structname=dataCommitteeClientFactoryMock --filename=mock_datacommitteeclientfactory.go + export "GOROOT=$$(go env GOROOT)" && $$(go env GOPATH)/bin/mockery --name=ClientInterface --srcpkg=github.com/okx/Xgon-data-availability/client --output=../synchronizer --outpkg=synchronizer --structname=dataCommitteeClientMock --filename=mock_datacommitteeclient.go export "GOROOT=$$(go env GOROOT)" && $$(go env GOPATH)/bin/mockery --name=GasPricer --srcpkg=github.com/ethereum/go-ethereum --output=../etherman --outpkg=etherman --structname=etherscanMock --filename=mock_etherscan.go export "GOROOT=$$(go env GOROOT)" && $$(go env GOPATH)/bin/mockery --name=GasPricer --srcpkg=github.com/ethereum/go-ethereum --output=../etherman --outpkg=etherman --structname=ethGasStationMock --filename=mock_ethgasstation.go diff --git a/test/benchmarks/sequencer/common/setup/setup.go b/test/benchmarks/sequencer/common/setup/setup.go index 066514996b..0c192b745f 100644 --- a/test/benchmarks/sequencer/common/setup/setup.go +++ b/test/benchmarks/sequencer/common/setup/setup.go @@ -15,6 +15,7 @@ import ( "github.com/0xPolygonHermez/zkevm-node/test/benchmarks/sequencer/common/params" "github.com/0xPolygonHermez/zkevm-node/test/operations" "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" "github.com/stretchr/testify/require" ) @@ -64,7 +65,7 @@ func Environment(ctx context.Context, b *testing.B) (*operations.Manager, *ethcl require.NoError(b, err) eventLog := event.NewEventLog(event.Config{}, eventStorage) - pl := pool.NewPool(config, s, st, params.ChainID, eventLog) + pl := pool.NewPool(config, s, st, common.HexToAddress("0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"), params.ChainID, eventLog) // Print Info before send senderBalance, err := client.BalanceAt(ctx, auth.From, nil) diff --git a/test/config/debug.node.config.toml b/test/config/debug.node.config.toml index d60e0727ad..6f6b7f8219 100644 --- a/test/config/debug.node.config.toml +++ b/test/config/debug.node.config.toml @@ -97,7 +97,7 @@ MaxTxLifetime = "3h" [SequenceSender] WaitPeriodSendSequence = "15s" LastBatchVirtualizationTimeMaxWaitPeriod = "10s" -MaxTxSizeForL1 = 131072 +MaxBatchesForL1 = 10 L2Coinbase = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" PrivateKey = {Path = "./test/sequencer.keystore", Password = "testonly"} @@ -126,10 +126,10 @@ DefaultGasPriceWei = 1000000000 MaxGasPriceWei = 0 [MTClient] -URI = "127.0.0.1:50061" +URI = "xgon-prover:50061" [Executor] -URI = "127.0.0.1:50071" +URI = "xgon-prover:50071" MaxGRPCMessageSize = 100000000 [Metrics] diff --git a/test/config/telegraf.conf b/test/config/telegraf.conf index 5b620f5697..cf47adc940 100644 --- a/test/config/telegraf.conf +++ b/test/config/telegraf.conf @@ -9,7 +9,7 @@ [[inputs.prometheus]] ## An array of urls to scrape metrics from. - urls = ["http://zkevm-json-rpc:9091/metrics"] + urls = ["http://xgon-json-rpc:9091/metrics"] [[outputs.postgresql]] connection = "postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST/$POSTGRES_DB" diff --git a/test/config/test-member.keystore b/test/config/test-member.keystore new file mode 100644 index 0000000000..96b662b7eb --- /dev/null +++ b/test/config/test-member.keystore @@ -0,0 +1 @@ +{"address":"f39fd6e51aad88f6f4ce6ab8827279cfffb92266","crypto":{"cipher":"aes-128-ctr","ciphertext":"d005030a7684f3adad2447cbb27f63039eec2224c451eaa445de0d90502b9f3d","cipherparams":{"iv":"dc07a54bc7e388efa89c34d42f2ebdb4"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"cf2ec55ecae11171de575112cfb16963570533a9c46fb774473ceb11519eb24a"},"mac":"3eb180d405a5da6e462b2adc00091c14856c91d574bf27348714506357d6e177"},"id":"035454db-6b6d-477f-8a79-ce24c10b185f","version":3} \ No newline at end of file diff --git a/test/config/test.da.toml b/test/config/test.da.toml new file mode 100644 index 0000000000..0181d85659 --- /dev/null +++ b/test/config/test.da.toml @@ -0,0 +1,34 @@ +PrivateKey = {Path = "/pk/test-member.keystore", Password = "testonly"} + +[L1] +WsURL = "ws://xgon-mock-l1-network:8546" +RpcURL = "http://xgon-mock-l1-network:8545" +ZkEVMAddress = "0x0D9088C72Cd4F08e9dDe474D8F5394147f64b22C" +DataCommitteeAddress = "0x6Ae5b0863dBF3477335c0102DBF432aFf04ceb22" +Timeout = "3m" +RetryPeriod = "5s" + +[Log] +Environment = "development" # "production" or "development" +Level = "debug" +Outputs = ["stderr"] + +[DB] +User = "committee_user" +Password = "committee_password" +Name = "committee_db" +Host = "xgon-data-availability-db" +Port = "5432" +EnableLog = false +MaxConns = 200 + +[RPC] +Host = "0.0.0.0" +Port = 8444 +ReadTimeout = "60s" +WriteTimeout = "60s" +MaxRequestsPerIPAndSecond = 500 +SequencerNodeURI = "" +EnableL2SuggestedGasPricePolling = false + [RPC.WebSockets] + Enabled = false diff --git a/test/config/test.genesis.config.json b/test/config/test.genesis.config.json index e78f355783..e4177fc182 100644 --- a/test/config/test.genesis.config.json +++ b/test/config/test.genesis.config.json @@ -1,102 +1,122 @@ { - "l1Config" : { - "chainId": 1337, - "polygonZkEVMAddress": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", - "maticTokenAddress": "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "polygonZkEVMGlobalExitRootAddress": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6" - }, - "root": "0xd88680f1b151dd67518f9aca85161424c0cac61df2f5424a3ddc04ea25adecc7", - "genesisBlockNumber": 102, - "genesis": [ - { - "contractName": "PolygonZkEVMDeployer", - "balance": "0", - "nonce": "4", - "address": "0x4b2700570f8426A24EA85e0324611E527BdD55B8", - "bytecode": "0x6080604052600436106100705760003560e01c8063715018a61161004e578063715018a6146100e65780638da5cb5b146100fb578063e11ae6cb14610126578063f2fde38b1461013957600080fd5b80632b79805a146100755780634a94d4871461008a5780636d07dbf81461009d575b600080fd5b610088610083366004610927565b610159565b005b6100886100983660046109c7565b6101cb565b3480156100a957600080fd5b506100bd6100b8366004610a1e565b61020d565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b50610088610220565b34801561010757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100bd565b610088610134366004610a40565b610234565b34801561014557600080fd5b50610088610154366004610a90565b61029b565b610161610357565b600061016e8585856103d8565b905061017a8183610537565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527fba82f25fed02cd2a23d9f5d11c2ef588d22af5437cbf23bfe61d87257c480e4c9060200160405180910390a15050505050565b6101d3610357565b6101de83838361057b565b506040517f25adb19089b6a549831a273acdf7908cff8b7ee5f551f8d1d37996cf01c5df5b90600090a1505050565b600061021983836105a9565b9392505050565b610228610357565b61023260006105b6565b565b61023c610357565b60006102498484846103d8565b60405173ffffffffffffffffffffffffffffffffffffffff821681529091507fba82f25fed02cd2a23d9f5d11c2ef588d22af5437cbf23bfe61d87257c480e4c9060200160405180910390a150505050565b6102a3610357565b73ffffffffffffffffffffffffffffffffffffffff811661034b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610354816105b6565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610342565b600083471015610444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610342565b81516000036104af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610342565b8282516020840186f5905073ffffffffffffffffffffffffffffffffffffffff8116610219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610342565b6060610219838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564000081525061062b565b60606105a1848484604051806060016040528060298152602001610b3d6029913961062b565b949350505050565b6000610219838330610744565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060824710156106bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610342565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516106e69190610acf565b60006040518083038185875af1925050503d8060008114610723576040519150601f19603f3d011682016040523d82523d6000602084013e610728565b606091505b50915091506107398783838761076e565b979650505050505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b606083156108045782516000036107fd5773ffffffffffffffffffffffffffffffffffffffff85163b6107fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610342565b50816105a1565b6105a183838151156108195781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103429190610aeb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261088d57600080fd5b813567ffffffffffffffff808211156108a8576108a861084d565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156108ee576108ee61084d565b8160405283815286602085880101111561090757600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561093d57600080fd5b8435935060208501359250604085013567ffffffffffffffff8082111561096357600080fd5b61096f8883890161087c565b9350606087013591508082111561098557600080fd5b506109928782880161087c565b91505092959194509250565b803573ffffffffffffffffffffffffffffffffffffffff811681146109c257600080fd5b919050565b6000806000606084860312156109dc57600080fd5b6109e58461099e565b9250602084013567ffffffffffffffff811115610a0157600080fd5b610a0d8682870161087c565b925050604084013590509250925092565b60008060408385031215610a3157600080fd5b50508035926020909101359150565b600080600060608486031215610a5557600080fd5b8335925060208401359150604084013567ffffffffffffffff811115610a7a57600080fd5b610a868682870161087c565b9150509250925092565b600060208284031215610aa257600080fd5b6102198261099e565b60005b83811015610ac6578181015183820152602001610aae565b50506000910152565b60008251610ae1818460208701610aab565b9190910192915050565b6020815260008251806020840152610b0a816040850160208701610aab565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564a26469706673582212203e70ce334e8ec9d8d03e87415afd36dce4e82633bd277b08937095a6bd66367764736f6c63430008110033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266" - } - }, - { - "contractName": "ProxyAdmin", - "balance": "0", - "nonce": "1", - "address": "0xf065BaE7C019ff5627E09ed48D4EeA317D211956", - "bytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b366004610608565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb36600461062c565b610269565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610694565b6102f7565b34801561014a57600080fd5b506100de61015936600461062c565b61038c565b34801561016a57600080fd5b506100de610179366004610608565b6103e8565b34801561018a57600080fd5b506100a0610199366004610608565b6104a4565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610788565b949350505050565b61025d6104f0565b6102676000610571565b565b6102716104f0565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156102db57600080fd5b505af11580156102ef573d6000803e3d6000fd5b505050505050565b6102ff6104f0565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef28690349061035590869086906004016107a5565b6000604051808303818588803b15801561036e57600080fd5b505af1158015610382573d6000803e3d6000fd5b5050505050505050565b6103946104f0565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016102c1565b6103f06104f0565b73ffffffffffffffffffffffffffffffffffffffff8116610498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6104a181610571565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b60005473ffffffffffffffffffffffffffffffffffffffff163314610267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048f565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146104a157600080fd5b60006020828403121561061a57600080fd5b8135610625816105e6565b9392505050565b6000806040838503121561063f57600080fd5b823561064a816105e6565b9150602083013561065a816105e6565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156106a957600080fd5b83356106b4816105e6565b925060208401356106c4816105e6565b9150604084013567ffffffffffffffff808211156106e157600080fd5b818601915086601f8301126106f557600080fd5b81358181111561070757610707610665565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561074d5761074d610665565b8160405282815289602084870101111561076657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561079a57600080fd5b8151610625816105e6565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156107ef578581018301518582016060015282016107d3565b5060006060828601015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010192505050939250505056fea2646970667358221220372a0e10eebea1b7fa43ae4c976994e6ed01d85eedc3637b83f01d3f06be442064736f6c63430008110033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f" - } - }, - { - "contractName": "PolygonZkEVMBridge implementation", - "balance": "0", - "nonce": "1", - "address": "0xf23919bb44BCa81aeAb4586BE71Ee3fd4E99B951", - "bytecode": "0x6080604052600436106200019f5760003560e01c8063647c576c11620000e7578063be5831c71162000089578063dbc169761162000060578063dbc169761462000639578063ee25560b1462000651578063fb570834146200068257600080fd5b8063be5831c714620005ae578063cd58657914620005ea578063d02103ca146200060157600080fd5b80639e34070f11620000be5780639e34070f146200050a578063aaa13cc2146200054f578063bab161bf146200057457600080fd5b8063647c576c146200048657806379e2cf9714620004ab57806381b1c17414620004c357600080fd5b80632d2c9d94116200015157806334ac9cf2116200012857806334ac9cf2146200034b5780633ae05047146200037a5780633e197043146200039257600080fd5b80632d2c9d9414620002765780632dfdf0b5146200029b578063318aee3d14620002c257600080fd5b806322e95f2c116200018657806322e95f2c14620001ef578063240ff378146200023a5780632cffd02e146200025157600080fd5b806315064c9614620001a45780632072f6c514620001d5575b600080fd5b348015620001b157600080fd5b50606854620001c09060ff1681565b60405190151581526020015b60405180910390f35b348015620001e257600080fd5b50620001ed620006a7565b005b348015620001fc57600080fd5b50620002146200020e366004620032db565b62000705565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001cc565b620001ed6200024b36600462003372565b620007a8565b3480156200025e57600080fd5b50620001ed6200027036600462003409565b620009d0565b3480156200028357600080fd5b50620001ed6200029536600462003409565b62000f74565b348015620002a857600080fd5b50620002b360535481565b604051908152602001620001cc565b348015620002cf57600080fd5b5062000319620002e1366004620034ef565b606b6020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001cc565b3480156200035857600080fd5b50606c54620002149073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200038757600080fd5b50620002b362001178565b3480156200039f57600080fd5b50620002b3620003b136600462003526565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200049357600080fd5b50620001ed620004a5366004620035b0565b6200125e565b348015620004b857600080fd5b50620001ed620014ad565b348015620004d057600080fd5b5062000214620004e236600462003600565b606a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200051757600080fd5b50620001c06200052936600462003600565b600881901c600090815260696020526040902054600160ff9092169190911b9081161490565b3480156200055c57600080fd5b50620002146200056e3660046200361a565b620014e7565b3480156200058157600080fd5b506068546200059890610100900463ffffffff1681565b60405163ffffffff9091168152602001620001cc565b348015620005bb57600080fd5b506068546200059890790100000000000000000000000000000000000000000000000000900463ffffffff1681565b620001ed620005fb366004620036ce565b620016d3565b3480156200060e57600080fd5b50606854620002149065010000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200064657600080fd5b50620001ed62001c37565b3480156200065e57600080fd5b50620002b36200067036600462003600565b60696020526000908152604090205481565b3480156200068f57600080fd5b50620001c0620006a136600462003770565b62001c93565b606c5473ffffffffffffffffffffffffffffffffffffffff163314620006f9576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200070362001d7c565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602483015282516018818403018152603890920183528151918101919091206000908152606a909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b60685460ff1615620007e6576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff8681166101009092041614806200080c5750600263ffffffff861610155b1562000844576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001606860019054906101000a900463ffffffff163388883488886053546040516200089a9998979695949392919062003806565b60405180910390a1620009b8620009b26001606860019054906101000a900463ffffffff16338989348989604051620008d592919062003881565b60405180910390206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b62001e10565b8215620009c957620009c962001f27565b5050505050565b60685460ff161562000a0e576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000a258b8b8b8b8b8b8b8b8b8b8b600062001ffc565b73ffffffffffffffffffffffffffffffffffffffff861662000b01576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162000a7a9190620038e6565b60006040518083038185875af1925050503d806000811462000ab9576040519150601f19603f3d011682016040523d82523d6000602084013e62000abe565b606091505b505090508062000afa576040517f6747a28800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062000efc565b60685463ffffffff61010090910481169088160362000b435762000b3d73ffffffffffffffffffffffffffffffffffffffff87168585620021ed565b62000efc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152606a90935291205490915073ffffffffffffffffffffffffffffffffffffffff168062000e6e576000808062000c1886880188620039fb565b92509250925060008584848460405162000c329062003292565b62000c409392919062003abd565b8190604051809103906000f590508015801562000c61573d6000803e3d6000fd5b506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c9052919250908216906340c10f1990604401600060405180830381600087803b15801562000cd757600080fd5b505af115801562000cec573d6000803e3d6000fd5b5050505080606a600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a398d8d838b8b60405162000e5c95949392919062003afa565b60405180910390a15050505062000ef9565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f1990604401600060405180830381600087803b15801562000edf57600080fd5b505af115801562000ef4573d6000803e3d6000fd5b505050505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b60685460ff161562000fb2576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000fc98b8b8b8b8b8b8b8b8b8b8b600162001ffc565b60008473ffffffffffffffffffffffffffffffffffffffff1684888a868660405160240162000ffc949392919062003b42565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200107f9190620038e6565b60006040518083038185875af1925050503d8060008114620010be576040519150601f19603f3d011682016040523d82523d6000602084013e620010c3565b606091505b5050905080620010ff576040517f37e391c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b605354600090819081805b602081101562001255578083901c600116600103620011e65760338160208110620011b257620011b262003b8a565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062001213565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b604080516020810184905290810183905260600160405160208183030381529060405280519060200120915080806200124c9062003be8565b91505062001183565b50919392505050565b600054610100900460ff16158080156200127f5750600054600160ff909116105b806200129b5750303b1580156200129b575060005460ff166001145b6200132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200138c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606880547fffffffffffffff000000000000000000000000000000000000000000000000ff1661010063ffffffff8716027fffffffffffffff0000000000000000000000000000000000000000ffffffffff16176501000000000073ffffffffffffffffffffffffffffffffffffffff8681169190910291909117909155606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001691841691909117905562001443620022c3565b8015620014a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b605354606854790100000000000000000000000000000000000000000000000000900463ffffffff16101562000703576200070362001f27565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200157d9062003292565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f909101166040819052620015c8908d908d908d908d908d9060200162003c23565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262001606929160200162003c64565b604051602081830303815290604052805190602001206040516020016200168f94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101209a9950505050505050505050565b60685460ff161562001711576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200171b62002366565b60685463ffffffff888116610100909204161480620017415750600263ffffffff881610155b1562001779576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060608773ffffffffffffffffffffffffffffffffffffffff8816620017df57883414620017d5576040517fb89240f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000925062001ad9565b341562001818576040517f798ee6f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8089166000908152606b602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001908576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018b905273ffffffffffffffffffffffffffffffffffffffff8a1690639dc29fac90604401600060405180830381600087803b158015620018db57600080fd5b505af1158015620018f0573d6000803e3d6000fd5b50505050806020015194508060000151935062001ad7565b85156200191d576200191d898b8989620023db565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa1580156200198b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019b1919062003c97565b9050620019d773ffffffffffffffffffffffffffffffffffffffff8b1633308e620028f9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8c16906370a0823190602401602060405180830381865afa15801562001a45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a6b919062003c97565b905062001a79828262003cb1565b6068548c9850610100900463ffffffff169650935062001a998762002959565b62001aa48c62002a71565b62001aaf8d62002b7e565b60405160200162001ac39392919062003abd565b604051602081830303815290604052945050505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600084868e8e868860535460405162001b1b98979695949392919062003cc7565b60405180910390a162001c0f620009b2600085878f8f8789805190602001206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b861562001c205762001c2062001f27565b5050505062001c2e60018055565b50505050505050565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462001c89576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200070362002c80565b600084815b602081101562001d6e57600163ffffffff8616821c8116900362001d0a5785816020811062001ccb5762001ccb62003b8a565b60200201358260405160200162001cec929190918252602082015260400190565b60405160208183030381529060405280519060200120915062001d59565b8186826020811062001d205762001d2062003b8a565b602002013560405160200162001d40929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b8062001d658162003be8565b91505062001c98565b50821490505b949350505050565b60685460ff161562001dba576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b80600162001e216020600262003e79565b62001e2d919062003cb1565b6053541062001e68576040517fef5ccf6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060536000815462001e7b9062003be8565b9182905550905060005b602081101562001f17578082901c60011660010362001ebd57826033826020811062001eb55762001eb562003b8a565b015550505050565b6033816020811062001ed35762001ed362003b8a565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250808062001f0e9062003be8565b91505062001e85565b5062001f2262003e87565b505050565b6053546068805463ffffffff909216790100000000000000000000000000000000000000000000000000027fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179081905573ffffffffffffffffffffffffffffffffffffffff65010000000000909104166333d6247d62001fad62001178565b6040518263ffffffff1660e01b815260040162001fcc91815260200190565b600060405180830381600087803b15801562001fe757600080fd5b505af1158015620014a7573d6000803e3d6000fd5b6200200d8b63ffffffff1662002d10565b6068546040805160208082018e90528183018d9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915260009165010000000000900473ffffffffffffffffffffffffffffffffffffffff169063257b3632906084016020604051808303816000875af1158015620020b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020d6919062003c97565b90508060000362002112576040517e2f6fad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff88811661010090920416146200215c576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606854600090610100900463ffffffff166200217a5750896200217d565b508a5b620021a66200219d848c8c8c8c8c8c8c604051620008d592919062003881565b8f8f8462001c93565b620021dd576040517fe0417cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001f229084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002d75565b600054610100900460ff166200235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162001324565b6200070362002e88565b600260015403620023d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640162001324565b6002600155565b6000620023ec600482848662003eb6565b620023f79162003ee2565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620026765760008080808080806200245a896004818d62003eb6565b81019062002469919062003f2b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620024dd576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff861630146200252d576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8a851462002567576040517f03fffc4b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620026229190620038e6565b6000604051808303816000865af19150503d806000811462002661576040519150601f19603f3d011682016040523d82523d6000602084013e62002666565b606091505b50505050505050505050620009c9565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c0000000000000000000000000000000000000000000000000000000014620026f2576040517fe282c0ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808080808080806200270a8a6004818e62003eb6565b81019062002719919062003f86565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146200278f576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87163014620027df576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620028a39190620038e6565b6000604051808303816000865af19150503d8060008114620028e2576040519150601f19603f3d011682016040523d82523d6000602084013e620028e7565b606091505b50505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620014a79085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002240565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde03000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff861691620029dd9190620038e6565b600060405180830381855afa9150503d806000811462002a1a576040519150601f19603f3d011682016040523d82523d6000602084013e62002a1f565b606091505b50915091508162002a66576040518060400160405280600781526020017f4e4f5f4e414d450000000000000000000000000000000000000000000000000081525062001d74565b62001d748162002f21565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff86169162002af59190620038e6565b600060405180830381855afa9150503d806000811462002b32576040519150601f19603f3d011682016040523d82523d6000602084013e62002b37565b606091505b50915091508162002a66576040518060400160405280600981526020017f4e4f5f53594d424f4c000000000000000000000000000000000000000000000081525062001d74565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff86169162002c019190620038e6565b600060405180830381855afa9150503d806000811462002c3e576040519150601f19603f3d011682016040523d82523d6000602084013e62002c43565b606091505b509150915081801562002c57575080516020145b62002c6457601262001d74565b8080602001905181019062001d74919062004012565b60018055565b60685460ff1662002cbd576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600881901c60008181526069602052604081208054600160ff861690811b91821892839055929091908183169003620009c9576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600062002dd9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620031119092919063ffffffff16565b80519091501562001f22578080602001905181019062002dfa919062004032565b62001f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162001324565b600054610100900460ff1662002c7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162001324565b6060604082511062002f435781806020019051810190620007a2919062004052565b8151602003620030d35760005b60208110801562002f9b575082818151811062002f715762002f7162003b8a565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b1562002fb6578062002fad8162003be8565b91505062002f50565b8060000362002ffa57505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e4700000000000000000000000000006020820152919050565b60008167ffffffffffffffff81111562003018576200301862003891565b6040519080825280601f01601f19166020018201604052801562003043576020820181803683370190505b50905060005b82811015620030cb5784818151811062003067576200306762003b8a565b602001015160f81c60f81b82828151811062003087576200308762003b8a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080620030c28162003be8565b91505062003049565b509392505050565b505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e470000000000000000000000000000602082015290565b919050565b606062001d748484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031489190620038e6565b60006040518083038185875af1925050503d806000811462003187576040519150601f19603f3d011682016040523d82523d6000602084013e6200318c565b606091505b50915091506200319f87838387620031aa565b979650505050505050565b60608315620032455782516000036200323d5773ffffffffffffffffffffffffffffffffffffffff85163b6200323d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162001324565b508162001d74565b62001d7483838151156200325c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620013249190620040d2565b611b6680620040e883390190565b803563ffffffff811681146200310c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114620032d857600080fd5b50565b60008060408385031215620032ef57600080fd5b620032fa83620032a0565b915060208301356200330c81620032b5565b809150509250929050565b8015158114620032d857600080fd5b60008083601f8401126200333957600080fd5b50813567ffffffffffffffff8111156200335257600080fd5b6020830191508360208285010111156200336b57600080fd5b9250929050565b6000806000806000608086880312156200338b57600080fd5b6200339686620032a0565b94506020860135620033a881620032b5565b93506040860135620033ba8162003317565b9250606086013567ffffffffffffffff811115620033d757600080fd5b620033e58882890162003326565b969995985093965092949392505050565b806104008101831015620007a257600080fd5b60008060008060008060008060008060006105208c8e0312156200342c57600080fd5b620034388d8d620033f6565b9a50620034496104008d01620032a0565b99506104208c013598506104408c013597506200346a6104608d01620032a0565b96506104808c01356200347d81620032b5565b95506200348e6104a08d01620032a0565b94506104c08c0135620034a181620032b5565b93506104e08c013592506105008c013567ffffffffffffffff811115620034c757600080fd5b620034d58e828f0162003326565b915080935050809150509295989b509295989b9093969950565b6000602082840312156200350257600080fd5b81356200350f81620032b5565b9392505050565b60ff81168114620032d857600080fd5b600080600080600080600060e0888a0312156200354257600080fd5b87356200354f8162003516565b96506200355f60208901620032a0565b955060408801356200357181620032b5565b94506200358160608901620032a0565b935060808801356200359381620032b5565b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215620035c657600080fd5b620035d184620032a0565b92506020840135620035e381620032b5565b91506040840135620035f581620032b5565b809150509250925092565b6000602082840312156200361357600080fd5b5035919050565b600080600080600080600060a0888a0312156200363657600080fd5b6200364188620032a0565b965060208801356200365381620032b5565b9550604088013567ffffffffffffffff808211156200367157600080fd5b6200367f8b838c0162003326565b909750955060608a01359150808211156200369957600080fd5b50620036a88a828b0162003326565b9094509250506080880135620036be8162003516565b8091505092959891949750929550565b600080600080600080600060c0888a031215620036ea57600080fd5b620036f588620032a0565b965060208801356200370781620032b5565b95506040880135945060608801356200372081620032b5565b93506080880135620037328162003317565b925060a088013567ffffffffffffffff8111156200374f57600080fd5b6200375d8a828b0162003326565b989b979a50959850939692959293505050565b60008060008061046085870312156200378857600080fd5b843593506200379b8660208701620033f6565b9250620037ac6104208601620032a0565b939692955092936104400135925050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061010060ff8c16835263ffffffff808c16602085015273ffffffffffffffffffffffffffffffffffffffff808c166040860152818b166060860152808a166080860152508760a08501528160c0850152620038678285018789620037bd565b925080851660e085015250509a9950505050505050505050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015620038dd578181015183820152602001620038c3565b50506000910152565b60008251620038fa818460208701620038c0565b9190910192915050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200394e576200394e62003891565b604052919050565b600067ffffffffffffffff82111562003973576200397362003891565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620039b157600080fd5b8135620039c8620039c28262003956565b62003904565b818152846020838601011115620039de57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121562003a1157600080fd5b833567ffffffffffffffff8082111562003a2a57600080fd5b62003a38878388016200399f565b9450602086013591508082111562003a4f57600080fd5b5062003a5e868287016200399f565b9250506040840135620035f58162003516565b6000815180845262003a8b816020860160208601620038c0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003ad2606083018662003a71565b828103602084015262003ae6818662003a71565b91505060ff83166040830152949350505050565b63ffffffff86168152600073ffffffffffffffffffffffffffffffffffffffff8087166020840152808616604084015250608060608301526200319f608083018486620037bd565b73ffffffffffffffffffffffffffffffffffffffff8516815263ffffffff8416602082015260606040820152600062003b80606083018486620037bd565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003c1c5762003c1c62003bb9565b5060010190565b60608152600062003c39606083018789620037bd565b828103602084015262003c4e818688620037bd565b91505060ff831660408301529695505050505050565b6000835162003c78818460208801620038c0565b83519083019062003c8e818360208801620038c0565b01949350505050565b60006020828403121562003caa57600080fd5b5051919050565b81810381811115620007a257620007a262003bb9565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003d278285018762003a71565b925080851660e085015250509998505050505050505050565b600181815b8085111562003d9f57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d835762003d8362003bb9565b8085161562003d9157918102915b93841c939080029062003d45565b509250929050565b60008262003db857506001620007a2565b8162003dc757506000620007a2565b816001811462003de0576002811462003deb5762003e0b565b6001915050620007a2565b60ff84111562003dff5762003dff62003bb9565b50506001821b620007a2565b5060208310610133831016604e8410600b841016171562003e30575081810a620007a2565b62003e3c838362003d40565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e715762003e7162003bb9565b029392505050565b60006200350f838362003da7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003ec757600080fd5b8386111562003ed557600080fd5b5050820193919092039150565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101562003f235780818660040360031b1b83161692505b505092915050565b600080600080600080600060e0888a03121562003f4757600080fd5b873562003f5481620032b5565b9650602088013562003f6681620032b5565b955060408801359450606088013593506080880135620035938162003516565b600080600080600080600080610100898b03121562003fa457600080fd5b883562003fb181620032b5565b9750602089013562003fc381620032b5565b96506040890135955060608901359450608089013562003fe38162003317565b935060a089013562003ff58162003516565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200402557600080fd5b81516200350f8162003516565b6000602082840312156200404557600080fd5b81516200350f8162003317565b6000602082840312156200406557600080fd5b815167ffffffffffffffff8111156200407d57600080fd5b8201601f810184136200408f57600080fd5b8051620040a0620039c28262003956565b818152856020838501011115620040b657600080fd5b620040c9826020830160208601620038c0565b95945050505050565b6020815260006200350f602083018462003a7156fe6101006040523480156200001257600080fd5b5060405162001b6638038062001b6683398101604081905262000035916200028d565b82826003620000458382620003a1565b506004620000548282620003a1565b50503360c0525060ff811660e052466080819052620000739062000080565b60a052506200046d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000ad6200012e565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6060600380546200013f9062000312565b80601f01602080910402602001604051908101604052809291908181526020018280546200016d9062000312565b8015620001be5780601f106200019257610100808354040283529160200191620001be565b820191906000526020600020905b815481529060010190602001808311620001a057829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f057600080fd5b81516001600160401b03808211156200020d576200020d620001c8565b604051601f8301601f19908116603f01168101908282118183101715620002385762000238620001c8565b816040528381526020925086838588010111156200025557600080fd5b600091505b838210156200027957858201830151818301840152908201906200025a565b600093810190920192909252949350505050565b600080600060608486031215620002a357600080fd5b83516001600160401b0380821115620002bb57600080fd5b620002c987838801620001de565b94506020860151915080821115620002e057600080fd5b50620002ef86828701620001de565b925050604084015160ff811681146200030757600080fd5b809150509250925092565b600181811c908216806200032757607f821691505b6020821081036200034857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039c57600081815260208120601f850160051c81016020861015620003775750805b601f850160051c820191505b81811015620003985782815560010162000383565b5050505b505050565b81516001600160401b03811115620003bd57620003bd620001c8565b620003d581620003ce845462000312565b846200034e565b602080601f8311600181146200040d5760008415620003f45750858301515b600019600386901b1c1916600185901b17855562000398565b600085815260208120601f198616915b828110156200043e578886015182559484019460019091019084016200041d565b50858210156200045d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516116aa620004bc6000396000610237015260008181610307015281816105c001526106a70152600061053a015260008181610379015261050401526116aa6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf1461039b578063dd62ed3e146103ae578063ffa1ad74146103f457600080fd5b8063a457c2d71461034e578063a9059cbb14610361578063cd0d00961461037457600080fd5b806395d89b41116100bd57806395d89b41146102e75780639dc29fac146102ef578063a3c573eb1461030257600080fd5b806370a08231146102915780637ecebe00146102c757600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610261578063395093511461026957806340c10f191461027c57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610430565b60405161019191906113e4565b60405180910390f35b6101ad6101a8366004611479565b6104c2565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad6102043660046114a3565b6104dc565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610191565b6101c1610500565b6101ad610277366004611479565b61055c565b61028f61028a366004611479565b6105a8565b005b6101c161029f3660046114df565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d53660046114df565b60056020526000908152604090205481565b610184610680565b61028f6102fd366004611479565b61068f565b6103297f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad61035c366004611479565b61075e565b6101ad61036f366004611479565b61082f565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b61028f6103a9366004611501565b61083d565b6101c16103bc366004611574565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043f906115a7565b80601f016020809104026020016040519081016040528092919081815260200182805461046b906115a7565b80156104b85780601f1061048d576101008083540402835291602001916104b8565b820191906000526020600020905b81548152906001019060200180831161049b57829003601f168201915b5050505050905090565b6000336104d0818585610b73565b60019150505b92915050565b6000336104ea858285610d27565b6104f5858585610dfe565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610537576105324661106d565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104d090829086906105a3908790611629565b610b73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d4272696467650000000000000000000000000000000060648201526084015b60405180910390fd5b61067c8282611135565b5050565b60606004805461043f906115a7565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d427269646765000000000000000000000000000000006064820152608401610669565b61067c8282611228565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610669565b6104f58286868403610b73565b6000336104d0818585610dfe565b834211156108cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866109268361163c565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610991610500565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610a55573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610ad057508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610669565b610b678a8a8a610b73565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610cb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610df85781811015610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610669565b610df88484848403610b73565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610f44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610df8565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611098610430565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166111b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610669565b80600260008282546111c49190611629565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166112cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610d1a565b600060208083528351808285015260005b81811015611411578581018301518582016040015282016113f5565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461147457600080fd5b919050565b6000806040838503121561148c57600080fd5b61149583611450565b946020939093013593505050565b6000806000606084860312156114b857600080fd5b6114c184611450565b92506114cf60208501611450565b9150604084013590509250925092565b6000602082840312156114f157600080fd5b6114fa82611450565b9392505050565b600080600080600080600060e0888a03121561151c57600080fd5b61152588611450565b965061153360208901611450565b95506040880135945060608801359350608088013560ff8116811461155757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561158757600080fd5b61159083611450565b915061159e60208401611450565b90509250929050565b600181811c908216806115bb57607f821691505b6020821081036115f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156104d6576104d66115fa565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361166d5761166d6115fa565b506001019056fea26469706673582212208d88fee561cff7120d381c345cfc534cef8229a272dc5809d4bbb685ad67141164736f6c63430008110033a2646970667358221220d9b3ca7b13ec80ac58634ddf0ecebe71e209a71f532614949b9e720413f50c8364736f6c63430008110033" - }, - { - "contractName": "PolygonZkEVMBridge proxy", - "balance": "200000000000000000000000000", - "nonce": "1", - "address": "0xff0EE8ea08cEf5cb4322777F5CC3E8A584B8A4A0", - "bytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461088b565b610135565b61006b6100a33660046108a6565b61017f565b3480156100b457600080fd5b506100bd6101f3565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461088b565b610231565b34801561011257600080fd5b506100bd61025e565b6101236102d4565b61013361012e6103ab565b6103b5565b565b61013d6103d9565b73ffffffffffffffffffffffffffffffffffffffff1633036101775761017481604051806020016040528060008152506000610419565b50565b61017461011b565b6101876103d9565b73ffffffffffffffffffffffffffffffffffffffff1633036101eb576101e68383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610419915050565b505050565b6101e661011b565b60006101fd6103d9565b73ffffffffffffffffffffffffffffffffffffffff163303610226576102216103ab565b905090565b61022e61011b565b90565b6102396103d9565b73ffffffffffffffffffffffffffffffffffffffff1633036101775761017481610444565b60006102686103d9565b73ffffffffffffffffffffffffffffffffffffffff163303610226576102216103d9565b60606102b183836040518060600160405280602781526020016109bb602791396104a5565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6102dc6103d9565b73ffffffffffffffffffffffffffffffffffffffff163303610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600061022161052a565b3660008037600080366000845af43d6000803e8080156103d4573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b61042283610552565b60008251118061042f5750805b156101e65761043e838361028c565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61046d6103d9565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16101748161059f565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516104cf919061094d565b600060405180830381855af49150503d806000811461050a576040519150601f19603f3d011682016040523d82523d6000602084013e61050f565b606091505b5091509150610520868383876106ab565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6103fd565b61055b81610753565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff8116610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103a2565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6060831561074157825160000361073a5773ffffffffffffffffffffffffffffffffffffffff85163b61073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103a2565b508161074b565b61074b838361081e565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff81163b6107f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016103a2565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610665565b81511561082e5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a29190610969565b803573ffffffffffffffffffffffffffffffffffffffff8116811461088657600080fd5b919050565b60006020828403121561089d57600080fd5b6102b182610862565b6000806000604084860312156108bb57600080fd5b6108c484610862565b9250602084013567ffffffffffffffff808211156108e157600080fd5b818601915086601f8301126108f557600080fd5b81358181111561090457600080fd5b87602082850101111561091657600080fd5b6020830194508093505050509250925092565b60005b8381101561094457818101518382015260200161092c565b50506000910152565b6000825161095f818460208701610929565b9190910192915050565b6020815260008251806020840152610988816040850160208701610929565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a1af0d6cb4f1e31496a4c5c1448913bce4bd6ad3a39e47c6f7190c114d6f9bf464736f6c63430008110033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000068": "0x00000000000000a40d5f56745a118d0906a34e69aec8c0db1cb8fa0000000100", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000f065bae7c019ff5627e09ed48d4eea317d211956", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000f23919bb44bca81aeab4586be71ee3fd4e99b951" - } - }, - { - "contractName": "PolygonZkEVMGlobalExitRootL2 implementation", - "balance": "0", - "nonce": "1", - "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", - "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610162565b60006020819052908152604090205481565b6100a061009b366004610162565b6100ee565b005b6100c97f000000000000000000000000ff0ee8ea08cef5cb4322777f5cc3e8a584b8a4a081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ff0ee8ea08cef5cb4322777f5cc3e8a584b8a4a0161461015d576040517fb49365dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600155565b60006020828403121561017457600080fd5b503591905056fea2646970667358221220a187fc278346c1b61c449ea3641002b6eac2bda3351a122a12c35099f933696864736f6c63430008110033" - }, - { - "contractName": "PolygonZkEVMGlobalExitRootL2 proxy", - "balance": "0", - "nonce": "1", - "address": "0xa40d5f56745a118d0906a34e69aec8c0db1cb8fa", - "bytecode": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ca565b610118565b61005b6100933660046106e5565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ca565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610292565b610116610111610331565b61033b565b565b61012061035f565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610392565b50565b6101546100fe565b61016761035f565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610392915050565b505050565b6101c36100fe565b60006101da61035f565b6001600160a01b0316336001600160a01b03161415610200576101fb610331565b905090565b6102086100fe565b90565b61021361035f565b6001600160a01b0316336001600160a01b0316141561015757610154816103f1565b600061023f61035f565b6001600160a01b0316336001600160a01b03161415610200576101fb61035f565b606061028583836040518060600160405280602781526020016107e460279139610445565b9392505050565b3b151590565b61029a61035f565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610519565b3660008037600080366000845af43d6000803e80801561035a573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039b83610541565b6040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a26000825111806103dc5750805b156101c3576103eb8383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61041a61035f565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816105e9565b6060833b6104a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610328565b600080856001600160a01b0316856040516104bf9190610794565b600060405180830381855af49150503d80600081146104fa576040519150601f19603f3d011682016040523d82523d6000602084013e6104ff565b606091505b509150915061050f828286610675565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610383565b803b6105a55760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610328565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b03811661064e5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610328565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036105c8565b60608315610684575081610285565b8251156106945782518084602001fd5b8160405162461bcd60e51b815260040161032891906107b0565b80356001600160a01b03811681146106c557600080fd5b919050565b6000602082840312156106dc57600080fd5b610285826106ae565b6000806000604084860312156106fa57600080fd5b610703846106ae565b9250602084013567ffffffffffffffff8082111561072057600080fd5b818601915086601f83011261073457600080fd5b81358181111561074357600080fd5b87602082850101111561075557600080fd5b6020830194508093505050509250925092565b60005b8381101561078357818101518382015260200161076b565b838111156103eb5750506000910152565b600082516107a6818460208701610768565b9190910192915050565b60208152600082518060208401526107cf816040850160208701610768565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212204675187caf3a43285d9a2c1844a981e977bd52a85ff073e7fc649f73847d70a464736f6c63430008090033", - "storage": { - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000f065bae7c019ff5627e09ed48d4eea317d211956", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9" - } - }, - { - "contractName": "PolygonZkEVMTimelock", - "balance": "0", - "nonce": "1", - "address": "0x0165878A594ca255338adfa4d48449f69242Eb8F", - "bytecode": "0x6080604052600436106101c65760003560e01c806364d62353116100f7578063b1c5f42711610095578063d547741f11610064578063d547741f14610661578063e38335e514610681578063f23a6e6114610694578063f27a0c92146106d957600080fd5b8063b1c5f427146105af578063bc197c81146105cf578063c4d252f514610614578063d45c44351461063457600080fd5b80638f61f4f5116100d15780638f61f4f5146104e157806391d1485414610515578063a217fddf14610566578063b08e51c01461057b57600080fd5b806364d62353146104815780638065657f146104a15780638f2a0bb0146104c157600080fd5b8063248a9ca31161016457806331d507501161013e57806331d50750146103c857806336568abe146103e85780633a6aae7214610408578063584b153e1461046157600080fd5b8063248a9ca3146103475780632ab0f529146103775780632f2ff15d146103a857600080fd5b80630d3cf6fc116101a05780630d3cf6fc1461026b578063134008d31461029f57806313bc9f20146102b2578063150b7a02146102d257600080fd5b806301d5062a146101d257806301ffc9a7146101f457806307bd02651461022957600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101f26101ed366004611c52565b6106ee565b005b34801561020057600080fd5b5061021461020f366004611cc7565b610783565b60405190151581526020015b60405180910390f35b34801561023557600080fd5b5061025d7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610220565b34801561027757600080fd5b5061025d7f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b6101f26102ad366004611d09565b6107df565b3480156102be57600080fd5b506102146102cd366004611d75565b6108d7565b3480156102de57600080fd5b506103166102ed366004611e9a565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610220565b34801561035357600080fd5b5061025d610362366004611d75565b60009081526020819052604090206001015490565b34801561038357600080fd5b50610214610392366004611d75565b6000908152600160208190526040909120541490565b3480156103b457600080fd5b506101f26103c3366004611f02565b6108fd565b3480156103d457600080fd5b506102146103e3366004611d75565b610927565b3480156103f457600080fd5b506101f2610403366004611f02565b610940565b34801561041457600080fd5b5061043c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610220565b34801561046d57600080fd5b5061021461047c366004611d75565b6109f8565b34801561048d57600080fd5b506101f261049c366004611d75565b610a0e565b3480156104ad57600080fd5b5061025d6104bc366004611d09565b610ade565b3480156104cd57600080fd5b506101f26104dc366004611f73565b610b1d565b3480156104ed57600080fd5b5061025d7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b34801561052157600080fd5b50610214610530366004611f02565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561057257600080fd5b5061025d600081565b34801561058757600080fd5b5061025d7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b3480156105bb57600080fd5b5061025d6105ca366004612025565b610d4f565b3480156105db57600080fd5b506103166105ea36600461214e565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b34801561062057600080fd5b506101f261062f366004611d75565b610d94565b34801561064057600080fd5b5061025d61064f366004611d75565b60009081526001602052604090205490565b34801561066d57600080fd5b506101f261067c366004611f02565b610e8f565b6101f261068f366004612025565b610eb4565b3480156106a057600080fd5b506103166106af3660046121f8565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b3480156106e557600080fd5b5061025d611161565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161071881611244565b6000610728898989898989610ade565b90506107348184611251565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a604051610770969594939291906122a6565b60405180910390a3505050505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e00000000000000000000000000000000000000000000000000000000014806107d957506107d98261139e565b92915050565b600080527fdae2aa361dfd1ca020a396615627d436107c35eff9fe7738a3512819782d70696020527f5ba6852781629bcdcd4bdaa6de76d786f1c64b16acdac474e55bebc0ea157951547fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e639060ff1661085c5761085c8133611435565b600061086c888888888888610ade565b905061087881856114ed565b6108848888888861162a565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a6040516108bc94939291906122f1565b60405180910390a36108cd8161172e565b5050505050505050565b6000818152600160205260408120546001811180156108f65750428111155b9392505050565b60008281526020819052604090206001015461091881611244565b61092283836117d7565b505050565b60008181526001602052604081205481905b1192915050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6109f482826118c7565b5050565b6000818152600160208190526040822054610939565b333014610a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201527f62652074696d656c6f636b00000000000000000000000000000000000000000060648201526084016109e1565b60025460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1600255565b6000868686868686604051602001610afb969594939291906122a6565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610b4781611244565b888714610bd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109e1565b888514610c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109e1565b6000610c778b8b8b8b8b8b8b8b610d4f565b9050610c838184611251565b60005b8a811015610d415780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610cc357610cc3612331565b9050602002016020810190610cd89190612360565b8d8d86818110610cea57610cea612331565b905060200201358c8c87818110610d0357610d03612331565b9050602002810190610d15919061237b565b8c8b604051610d29969594939291906122a6565b60405180910390a3610d3a8161240f565b9050610c86565b505050505050505050505050565b60008888888888888888604051602001610d709897969594939291906124f7565b60405160208183030381529060405280519060200120905098975050505050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610dbe81611244565b610dc7826109f8565b610e53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20636160448201527f6e6e6f742062652063616e63656c6c656400000000000000000000000000000060648201526084016109e1565b6000828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b600082815260208190526040902060010154610eaa81611244565b61092283836118c7565b600080527fdae2aa361dfd1ca020a396615627d436107c35eff9fe7738a3512819782d70696020527f5ba6852781629bcdcd4bdaa6de76d786f1c64b16acdac474e55bebc0ea157951547fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e639060ff16610f3157610f318133611435565b878614610fc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109e1565b87841461104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109e1565b60006110618a8a8a8a8a8a8a8a610d4f565b905061106d81856114ed565b60005b8981101561114b5760008b8b8381811061108c5761108c612331565b90506020020160208101906110a19190612360565b905060008a8a848181106110b7576110b7612331565b9050602002013590503660008a8a868181106110d5576110d5612331565b90506020028101906110e7919061237b565b915091506110f78484848461162a565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588686868660405161112e94939291906122f1565b60405180910390a350505050806111449061240f565b9050611070565b506111558161172e565b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161580159061123257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123291906125be565b1561123d5750600090565b5060025490565b61124e8133611435565b50565b61125a82610927565b156112e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201527f7265616479207363686564756c6564000000000000000000000000000000000060648201526084016109e1565b6112ef611161565b81101561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e7460448201527f2064656c6179000000000000000000000000000000000000000000000000000060648201526084016109e1565b61138881426125e0565b6000928352600160205260409092209190915550565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107d957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146107d9565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166109f4576114738161197e565b61147e83602061199d565b60405160200161148f929190612617565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526109e191600401612698565b6114f6826108d7565b611582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20697360448201527f206e6f742072656164790000000000000000000000000000000000000000000060648201526084016109e1565b80158061159e5750600081815260016020819052604090912054145b6109f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e67206465706560448201527f6e64656e6379000000000000000000000000000000000000000000000000000060648201526084016109e1565b60008473ffffffffffffffffffffffffffffffffffffffff168484846040516116549291906126e9565b60006040518083038185875af1925050503d8060008114611691576040519150601f19603f3d011682016040523d82523d6000602084013e611696565b606091505b5050905080611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e67207460448201527f72616e73616374696f6e2072657665727465640000000000000000000000000060648201526084016109e1565b5050505050565b611737816108d7565b6117c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20697360448201527f206e6f742072656164790000000000000000000000000000000000000000000060648201526084016109e1565b600090815260016020819052604090912055565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166109f45760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118693390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156109f45760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606107d973ffffffffffffffffffffffffffffffffffffffff831660145b606060006119ac8360026126f9565b6119b79060026125e0565b67ffffffffffffffff8111156119cf576119cf611d8e565b6040519080825280601f01601f1916602001820160405280156119f9576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611a3057611a30612331565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611a9357611a93612331565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611acf8460026126f9565b611ada9060016125e0565b90505b6001811115611b77577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611b1b57611b1b612331565b1a60f81b828281518110611b3157611b31612331565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611b7081612710565b9050611add565b5083156108f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109e1565b803573ffffffffffffffffffffffffffffffffffffffff81168114611c0457600080fd5b919050565b60008083601f840112611c1b57600080fd5b50813567ffffffffffffffff811115611c3357600080fd5b602083019150836020828501011115611c4b57600080fd5b9250929050565b600080600080600080600060c0888a031215611c6d57600080fd5b611c7688611be0565b965060208801359550604088013567ffffffffffffffff811115611c9957600080fd5b611ca58a828b01611c09565b989b979a50986060810135976080820135975060a09091013595509350505050565b600060208284031215611cd957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146108f657600080fd5b60008060008060008060a08789031215611d2257600080fd5b611d2b87611be0565b955060208701359450604087013567ffffffffffffffff811115611d4e57600080fd5b611d5a89828a01611c09565b979a9699509760608101359660809091013595509350505050565b600060208284031215611d8757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611e0457611e04611d8e565b604052919050565b600082601f830112611e1d57600080fd5b813567ffffffffffffffff811115611e3757611e37611d8e565b611e6860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611dbd565b818152846020838601011115611e7d57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215611eb057600080fd5b611eb985611be0565b9350611ec760208601611be0565b925060408501359150606085013567ffffffffffffffff811115611eea57600080fd5b611ef687828801611e0c565b91505092959194509250565b60008060408385031215611f1557600080fd5b82359150611f2560208401611be0565b90509250929050565b60008083601f840112611f4057600080fd5b50813567ffffffffffffffff811115611f5857600080fd5b6020830191508360208260051b8501011115611c4b57600080fd5b600080600080600080600080600060c08a8c031215611f9157600080fd5b893567ffffffffffffffff80821115611fa957600080fd5b611fb58d838e01611f2e565b909b50995060208c0135915080821115611fce57600080fd5b611fda8d838e01611f2e565b909950975060408c0135915080821115611ff357600080fd5b506120008c828d01611f2e565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60008060008060008060008060a0898b03121561204157600080fd5b883567ffffffffffffffff8082111561205957600080fd5b6120658c838d01611f2e565b909a50985060208b013591508082111561207e57600080fd5b61208a8c838d01611f2e565b909850965060408b01359150808211156120a357600080fd5b506120b08b828c01611f2e565b999c989b509699959896976060870135966080013595509350505050565b600082601f8301126120df57600080fd5b8135602067ffffffffffffffff8211156120fb576120fb611d8e565b8160051b61210a828201611dbd565b928352848101820192828101908785111561212457600080fd5b83870192505b848310156121435782358252918301919083019061212a565b979650505050505050565b600080600080600060a0868803121561216657600080fd5b61216f86611be0565b945061217d60208701611be0565b9350604086013567ffffffffffffffff8082111561219a57600080fd5b6121a689838a016120ce565b945060608801359150808211156121bc57600080fd5b6121c889838a016120ce565b935060808801359150808211156121de57600080fd5b506121eb88828901611e0c565b9150509295509295909350565b600080600080600060a0868803121561221057600080fd5b61221986611be0565b945061222760208701611be0565b93506040860135925060608601359150608086013567ffffffffffffffff81111561225157600080fd5b6121eb88828901611e0c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8716815285602082015260a0604082015260006122dc60a08301868861225d565b60608301949094525060800152949350505050565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152600061232760608301848661225d565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561237257600080fd5b6108f682611be0565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126123b057600080fd5b83018035915067ffffffffffffffff8211156123cb57600080fd5b602001915036819003821315611c4b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612440576124406123e0565b5060010190565b81835260006020808501808196508560051b810191508460005b878110156124ea57828403895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126124a057600080fd5b8701858101903567ffffffffffffffff8111156124bc57600080fd5b8036038213156124cb57600080fd5b6124d686828461225d565b9a87019a9550505090840190600101612461565b5091979650505050505050565b60a0808252810188905260008960c08301825b8b8110156125455773ffffffffffffffffffffffffffffffffffffffff61253084611be0565b1682526020928301929091019060010161250a565b5083810360208501528881527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff89111561257e57600080fd5b8860051b9150818a602083013701828103602090810160408501526125a69082018789612447565b60608401959095525050608001529695505050505050565b6000602082840312156125d057600080fd5b815180151581146108f657600080fd5b808201808211156107d9576107d96123e0565b60005b8381101561260e5781810151838201526020016125f6565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161264f8160178501602088016125f3565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161268c8160288401602088016125f3565b01602801949350505050565b60208152600082518060208401526126b78160408501602087016125f3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b8183823760009101908152919050565b80820281158282048414176107d9576107d96123e0565b60008161271f5761271f6123e0565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea26469706673582212206416c4e08f97752b4bb06159524dac058d3dccd8775e57ef1b01505751ebf7af64736f6c63430008110033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x000000000000000000000000000000000000000000000000000000000000000a", - "0xaedcc9e7897c0d335bdc5d92fe3a8b4f23727fe558cd1c19f332b28716a30559": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xf5e61edb9c9cc6bfbae4463e9a2b1dd6ac3b44ddef38f18016e56ba0363910d9": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x64494413541ff93b31aa309254e3fed72a7456e9845988b915b4c7a7ceba8814": "0x5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5", - "0x60b9d94c75b7b3f721925089391e4644cd890cb5e6466f9596dfbd2c54e0b280": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x3412d5605ac6cd444957cedb533e5dacad6378b4bc819ebe3652188a665066d6": "0x5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5", - "0x4b63b79f1e338a49559dcd3193ac9eecc50d0f275d24e97cc8c319e5a31a8bd0": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xdae2aa361dfd1ca020a396615627d436107c35eff9fe7738a3512819782d706a": "0x5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5", - "0x800d5dfe4bba53eedee06cd4546a27da8de00f12db83f56062976d4493fda899": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xc3ad33e20b0c56a223ad5104fff154aa010f8715b9c981fd38fdc60a4d1a52fc": "0x5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5" - } - }, - { - "accountName": "keyless Deployer", - "balance": "0", - "nonce": "1", - "address": "0x20E7077d25fe79C5F6c2D3ae4905E96aA7C89c13" - }, - { - "accountName": "deployer", - "balance": "100000000000000000000000", - "nonce": "8", - "address": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + "l1Config": { + "chainId": 1337, + "polygonZkEVMAddress": "0x0D9088C72Cd4F08e9dDe474D8F5394147f64b22C", + "maticTokenAddress": "0xcFE6D77a653b988203BfAc9C6a69eA9D583bdC2b", + "polygonZkEVMGlobalExitRootAddress": "0xEd236da21Ff62bC7B62608AdB818da49E8549fa7", + "dataCommitteeContract": "0x6Ae5b0863dBF3477335c0102DBF432aFf04ceb22" + }, + "genesisBlockNumber": 231, + "root": "0x7ab548b2cc16b985d55800b5855394f6387b2bb0b5d6aa852378c1562ec64232", + "genesis": [ + { + "contractName": "WETHzkEVM", + "balance": "0", + "nonce": "1", + "address": "0x82109a709138A2953C720D3d775168717b668ba6", + "bytecode": "0x608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610379578063dd62ed3e1461038c578063ffa1ad74146103d257600080fd5b8063a457c2d71461032c578063a9059cbb1461033f578063cd0d00961461035257600080fd5b806395d89b41116100bd57806395d89b41146102c55780639dc29fac146102cd578063a3c573eb146102e057600080fd5b806370a082311461026f5780637ecebe00146102a557600080fd5b806330adf81f1161012f5780633644e515116101145780633644e5151461023f578063395093511461024757806340c10f191461025a57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b61018461040e565b60405161019191906113c2565b60405180910390f35b6101ad6101a8366004611457565b6104a0565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611481565b6104ba565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160128152602001610191565b6101c16104de565b6101ad610255366004611457565b61053a565b61026d610268366004611457565b610586565b005b6101c161027d3660046114bd565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102b33660046114bd565b60056020526000908152604090205481565b61018461065e565b61026d6102db366004611457565b61066d565b6103077f00000000000000000000000010b65c586f795af3eccee594fe4e38e1f059f78081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad61033a366004611457565b61073c565b6101ad61034d366004611457565b61080d565b6101c17f0000000000000000000000000000000000000000000000000000000000007a6981565b61026d6103873660046114df565b61081b565b6101c161039a366004611552565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461041d90611585565b80601f016020809104026020016040519081016040528092919081815260200182805461044990611585565b80156104965780601f1061046b57610100808354040283529160200191610496565b820191906000526020600020905b81548152906001019060200180831161047957829003601f168201915b5050505050905090565b6000336104ae818585610b51565b60019150505b92915050565b6000336104c8858285610d05565b6104d3858585610ddc565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000007a694614610515576105104661104b565b905090565b507f24ef62eb3c0f520fee02b5f635cc2a78ff79af541e9a7cc5239a62d7f80e9e7a90565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104ae9082908690610581908790611607565b610b51565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000010b65c586f795af3eccee594fe4e38e1f059f7801614610650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d4272696467650000000000000000000000000000000060648201526084015b60405180910390fd5b61065a8282611113565b5050565b60606004805461041d90611585565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000010b65c586f795af3eccee594fe4e38e1f059f7801614610732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d427269646765000000000000000000000000000000006064820152608401610647565b61065a8282611206565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610800576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610647565b6104d38286868403610b51565b6000336104ae818585610ddc565b834211156108aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610647565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866109048361161a565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096f6104de565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610a33573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610aae57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610b3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610647565b610b458a8a8a610b51565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610647565b73ffffffffffffffffffffffffffffffffffffffff8216610c96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610647565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610dd65781811015610dc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610647565b610dd68484848403610b51565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610647565b73ffffffffffffffffffffffffffffffffffffffff8216610f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610647565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610647565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610dd6565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61107661040e565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff8216611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610647565b80600260008282546111a29190611607565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166112a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610647565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610647565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610cf8565b600060208083528351808285015260005b818110156113ef578581018301518582016040015282016113d3565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461145257600080fd5b919050565b6000806040838503121561146a57600080fd5b6114738361142e565b946020939093013593505050565b60008060006060848603121561149657600080fd5b61149f8461142e565b92506114ad6020850161142e565b9150604084013590509250925092565b6000602082840312156114cf57600080fd5b6114d88261142e565b9392505050565b600080600080600080600060e0888a0312156114fa57600080fd5b6115038861142e565b96506115116020890161142e565b95506040880135945060608801359350608088013560ff8116811461153557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561156557600080fd5b61156e8361142e565b915061157c6020840161142e565b90509250929050565b600181811c9082168061159957607f821691505b6020821081036115d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156104b4576104b46115d8565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361164b5761164b6115d8565b506001019056fea2646970667358221220d16e68f0bedbd2415d7cd129360764fdbe70ca133f4a3e128a22d3fdfa85164264736f6c63430008140033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x577261707065642045746865720000000000000000000000000000000000001a", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x5745544800000000000000000000000000000000000000000000000000000008" } - ] - } \ No newline at end of file + }, + { + "contractName": "PolygonZkEVMDeployer", + "balance": "0", + "nonce": "4", + "address": "0xb169BC523B5399B94c7BDe7108fc543004F09aad", + "bytecode": "0x6080604052600436106100705760003560e01c8063715018a61161004e578063715018a6146100e65780638da5cb5b146100fb578063e11ae6cb14610126578063f2fde38b1461013957600080fd5b80632b79805a146100755780634a94d4871461008a5780636d07dbf81461009d575b600080fd5b610088610083366004610927565b610159565b005b6100886100983660046109c7565b6101cb565b3480156100a957600080fd5b506100bd6100b8366004610a1e565b61020d565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b50610088610220565b34801561010757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100bd565b610088610134366004610a40565b610234565b34801561014557600080fd5b50610088610154366004610a90565b61029b565b610161610357565b600061016e8585856103d8565b905061017a8183610537565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527fba82f25fed02cd2a23d9f5d11c2ef588d22af5437cbf23bfe61d87257c480e4c9060200160405180910390a15050505050565b6101d3610357565b6101de83838361057b565b506040517f25adb19089b6a549831a273acdf7908cff8b7ee5f551f8d1d37996cf01c5df5b90600090a1505050565b600061021983836105a9565b9392505050565b610228610357565b61023260006105b6565b565b61023c610357565b60006102498484846103d8565b60405173ffffffffffffffffffffffffffffffffffffffff821681529091507fba82f25fed02cd2a23d9f5d11c2ef588d22af5437cbf23bfe61d87257c480e4c9060200160405180910390a150505050565b6102a3610357565b73ffffffffffffffffffffffffffffffffffffffff811661034b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610354816105b6565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610342565b600083471015610444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610342565b81516000036104af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610342565b8282516020840186f5905073ffffffffffffffffffffffffffffffffffffffff8116610219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610342565b6060610219838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564000081525061062b565b60606105a1848484604051806060016040528060298152602001610b3d6029913961062b565b949350505050565b6000610219838330610744565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060824710156106bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610342565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516106e69190610acf565b60006040518083038185875af1925050503d8060008114610723576040519150601f19603f3d011682016040523d82523d6000602084013e610728565b606091505b50915091506107398783838761076e565b979650505050505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b606083156108045782516000036107fd5773ffffffffffffffffffffffffffffffffffffffff85163b6107fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610342565b50816105a1565b6105a183838151156108195781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103429190610aeb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261088d57600080fd5b813567ffffffffffffffff808211156108a8576108a861084d565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156108ee576108ee61084d565b8160405283815286602085880101111561090757600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561093d57600080fd5b8435935060208501359250604085013567ffffffffffffffff8082111561096357600080fd5b61096f8883890161087c565b9350606087013591508082111561098557600080fd5b506109928782880161087c565b91505092959194509250565b803573ffffffffffffffffffffffffffffffffffffffff811681146109c257600080fd5b919050565b6000806000606084860312156109dc57600080fd5b6109e58461099e565b9250602084013567ffffffffffffffff811115610a0157600080fd5b610a0d8682870161087c565b925050604084013590509250925092565b60008060408385031215610a3157600080fd5b50508035926020909101359150565b600080600060608486031215610a5557600080fd5b8335925060208401359150604084013567ffffffffffffffff811115610a7a57600080fd5b610a868682870161087c565b9150509250925092565b600060208284031215610aa257600080fd5b6102198261099e565b60005b83811015610ac6578181015183820152602001610aae565b50506000910152565b60008251610ae1818460208701610aab565b9190910192915050565b6020815260008251806020840152610b0a816040850160208701610aab565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564a2646970667358221220964619cee0e0baf94c6f8763f013be157da5d54c89e5cff4a8caf4266e13f13a64736f6c63430008140033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000002ecf31ece36ccac2d3222a303b1409233ecbb225" + } + }, + { + "contractName": "ProxyAdmin", + "balance": "0", + "nonce": "1", + "address": "0xa6791C91168866769273e6AFFe603e00269b16ae", + "bytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b366004610608565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb36600461062c565b610269565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610694565b6102f7565b34801561014a57600080fd5b506100de61015936600461062c565b61038c565b34801561016a57600080fd5b506100de610179366004610608565b6103e8565b34801561018a57600080fd5b506100a0610199366004610608565b6104a4565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610788565b949350505050565b61025d6104f0565b6102676000610571565b565b6102716104f0565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156102db57600080fd5b505af11580156102ef573d6000803e3d6000fd5b505050505050565b6102ff6104f0565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef28690349061035590869086906004016107a5565b6000604051808303818588803b15801561036e57600080fd5b505af1158015610382573d6000803e3d6000fd5b5050505050505050565b6103946104f0565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016102c1565b6103f06104f0565b73ffffffffffffffffffffffffffffffffffffffff8116610498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6104a181610571565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b60005473ffffffffffffffffffffffffffffffffffffffff163314610267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048f565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146104a157600080fd5b60006020828403121561061a57600080fd5b8135610625816105e6565b9392505050565b6000806040838503121561063f57600080fd5b823561064a816105e6565b9150602083013561065a816105e6565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156106a957600080fd5b83356106b4816105e6565b925060208401356106c4816105e6565b9150604084013567ffffffffffffffff808211156106e157600080fd5b818601915086601f8301126106f557600080fd5b81358181111561070757610707610665565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561074d5761074d610665565b8160405282815289602084870101111561076657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561079a57600080fd5b8151610625816105e6565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156107ef578581018301518582016060015282016107d3565b5060006060828601015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010192505050939250505056fea2646970667358221220c9867ffac53151bdb1305d8f5e3e883cd83e5270c7ec09cdc24e837b2e65239064736f6c63430008140033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000026a093198fa2a20c3508679197f5ae1c9323772a" + } + }, + { + "contractName": "PolygonZkEVMBridge implementation", + "balance": "0", + "nonce": "1", + "address": "0x2F1008CB69C24f06D089ECEA5a51791A6FB74b04", + "bytecode": "0x608060405260043610620001f35760003560e01c80634b2f336d116200010b578063be5831c711620000a1578063dd51f5c1116200006c578063dd51f5c11462000793578063ee25560b14620007b8578063f9eaee0d14620007e9578063fb570834146200081d57600080fd5b8063be5831c714620006f0578063cd586579146200072c578063d02103ca1462000743578063dbc16976146200077b57600080fd5b80639e34070f11620000e25780639e34070f146200064b578063aaa13cc21462000690578063b2169f2c14620006b5578063bab161bf14620006cc57600080fd5b80634b2f336d14620005bd57806379e2cf9714620005ec57806381b1c174146200060457600080fd5b80632dfdf0b5116200018d5780633ae0504711620001585780633ae0504714620004355780633c351e10146200044d5780633cbc795b146200047c5780633e19704314620004c957600080fd5b80632dfdf0b51462000331578063318aee3d146200035857806334ac9cf214620003e15780633797306a146200041057600080fd5b806322e95f2c11620001ce57806322e95f2c14620002775780632cc9f16314620002c25780632cffd02e14620002e75780632d2c9d94146200030c57600080fd5b80630ac1be4314620001f857806315064c9614620002415780632072f6c5146200025d575b600080fd5b3480156200020557600080fd5b50606e546200022c9074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b3480156200024e57600080fd5b506068546200022c9060ff1681565b3480156200026a57600080fd5b506200027562000842565b005b3480156200028457600080fd5b506200029c6200029636600462003c09565b620008a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200162000238565b348015620002cf57600080fd5b5062000275620002e136600462003c45565b62000943565b348015620002f457600080fd5b50620002756200030636600462003d2f565b62000bf6565b3480156200031957600080fd5b50620002756200032b36600462003d2f565b62001281565b3480156200033e57600080fd5b506200034960535481565b60405190815260200162000238565b3480156200036557600080fd5b50620003af6200037736600462003e15565b606b6020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000238565b348015620003ee57600080fd5b50606c546200029c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200041d57600080fd5b50620002756200042f36600462003e4b565b62001512565b3480156200044257600080fd5b50620003496200169b565b3480156200045a57600080fd5b50606d546200029c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200048957600080fd5b50606d54620004b39074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff909116815260200162000238565b348015620004d657600080fd5b5062000349620004e836600462003e7b565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620005ca57600080fd5b50606e546200029c9073ffffffffffffffffffffffffffffffffffffffff1681565b348015620005f957600080fd5b506200027562001781565b3480156200061157600080fd5b506200029c6200062336600462003f05565b606a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200065857600080fd5b506200022c6200066a36600462003f05565b600881901c600090815260696020526040902054600160ff9092169190911b9081161490565b3480156200069d57600080fd5b506200029c620006af36600462003f1f565b620017bb565b62000275620006c636600462003fd3565b620019a7565b348015620006d957600080fd5b50606854620004b390610100900463ffffffff1681565b348015620006fd57600080fd5b50606854620004b390790100000000000000000000000000000000000000000000000000900463ffffffff1681565b620002756200073d36600462004060565b62001c91565b3480156200075057600080fd5b506068546200029c9065010000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200078857600080fd5b506200027562002368565b348015620007a057600080fd5b5062000275620007b236600462004102565b620023c4565b348015620007c557600080fd5b5062000349620007d736600462003f05565b60696020526000908152604090205481565b348015620007f657600080fd5b506200022c6200080836600462003e15565b606f6020526000908152604090205460ff1681565b3480156200082a57600080fd5b506200022c6200083c36600462004135565b620025ba565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462000894576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200089e620026a3565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602483015282516018818403018152603890920183528151918101919091206000908152606a909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b600054610100900460ff1615808015620009645750600054600160ff909116105b80620009805750303b15801562000980575060005460ff166001145b62000a12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562000a7157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6068805473ffffffffffffffffffffffffffffffffffffffff80891665010000000000027fffffffffffffff0000000000000000000000000000000000000000ffffffffff63ffffffff808d1661010002919091167fffffffffffffff000000000000000000000000000000000000000000000000ff9094169390931717909255606c80548884167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155606d805492871674010000000000000000000000000000000000000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093168885161792909217909155606e80549285169290911691909117905562000b8962002737565b801562000bed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60685460ff161562000c34576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000c4b8b8b8b8b8b8b8b8b8b8b8b6000620027da565b73ffffffffffffffffffffffffffffffffffffffff861662000cfb57606e546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052909116906340c10f1990604401600060405180830381600087803b15801562000cdc57600080fd5b505af115801562000cf1573d6000803e3d6000fd5b5050505062001209565b606d5473ffffffffffffffffffffffffffffffffffffffff878116911614801562000d485750606d5463ffffffff8881167401000000000000000000000000000000000000000090920416145b1562000e0e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162000d879190620041d7565b60006040518083038185875af1925050503d806000811462000dc6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcb565b606091505b505090508062000e07576040517f6747a28800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062001209565b60685463ffffffff61010090910481169088160362000e505762000e4a73ffffffffffffffffffffffffffffffffffffffff87168585620029cb565b62001209565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152606a90935291205490915073ffffffffffffffffffffffffffffffffffffffff16806200117b576000808062000f2586880188620042ec565b92509250925060008584848460405162000f3f9062003bc0565b62000f4d93929190620043b9565b8190604051809103906000f590508015801562000f6e573d6000803e3d6000fd5b506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c9052919250908216906340c10f1990604401600060405180830381600087803b15801562000fe457600080fd5b505af115801562000ff9573d6000803e3d6000fd5b5050505080606a600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a398d8d838b8b604051620011699594939291906200443f565b60405180910390a15050505062001206565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f1990604401600060405180830381600087803b158015620011ec57600080fd5b505af115801562001201573d6000803e3d6000fd5b505050505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b60685460ff1615620012bf576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620012d68b8b8b8b8b8b8b8b8b8b8b6001620027da565b606e546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052909116906340c10f1990604401600060405180830381600087803b1580156200134b57600080fd5b505af115801562001360573d6000803e3d6000fd5b5050505060008473ffffffffffffffffffffffffffffffffffffffff168789858560405160240162001396949392919062004487565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014199190620041d7565b6000604051808303816000865af19150503d806000811462001458576040519150601f19603f3d011682016040523d82523d6000602084013e6200145d565b606091505b505090508062001499576040517f37e391c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462001564576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606e5474010000000000000000000000000000000000000000900460ff1615158115150362001616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f416c6c204c3220746f6b656e7320616c7265616479206861766520746865207060448201527f65726d697373696f6e0000000000000000000000000000000000000000000000606482015260840162000a09565b606e805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f11c1c68b4bf6f68350aa1983fe17ee1d005a7189994475ddbc4b9fc4e4ef02b8906200169090831515815260200190565b60405180910390a150565b605354600090819081805b602081101562001778578083901c600116600103620017095760338160208110620016d557620016d5620044cf565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062001736565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b604080516020810184905290810183905260600160405160208183030381529060405280519060200120915080806200176f906200452d565b915050620016a6565b50919392505050565b605354606854790100000000000000000000000000000000000000000000000000900463ffffffff1610156200089e576200089e62002aa6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620018519062003bc0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f9091011660408190526200189c908d908d908d908d908d9060200162004568565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620018da9291602001620045a9565b604051602081830303815290604052805190602001206040516020016200196394939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101209a9950505050505050505050565b60685460ff1615620019e5576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff87811661010090920416148062001a0b5750600263ffffffff871610155b1562001a43576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b341562001a7c576040517f798ee6f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606e546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810186905273ffffffffffffffffffffffffffffffffffffffff90911690639dc29fac90604401600060405180830381600087803b15801562001aef57600080fd5b505af115801562001b04573d6000803e3d6000fd5b50506068546053546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b945062001b5a9350600192610100900463ffffffff169133918c918c918c918b918b9190620045dc565b60405180910390a162001c7862001c726001606860019054906101000a900463ffffffff16338a8a8a898960405162001b9592919062004657565b60405180910390206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b62002b81565b821562001c895762001c8962002aa6565b505050505050565b60685460ff161562001ccf576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62001cd962002c93565b60685463ffffffff88811661010090920416148062001cff5750600263ffffffff881610155b1562001d37576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060608773ffffffffffffffffffffffffffffffffffffffff881662001dd55788341462001d93576040517fb89240f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606d5473ffffffffffffffffffffffffffffffffffffffff8116945074010000000000000000000000000000000000000000900463ffffffff16925062002213565b341562001e0e576040517f798ee6f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606e5473ffffffffffffffffffffffffffffffffffffffff9081169089160362001ec8576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018a905273ffffffffffffffffffffffffffffffffffffffff891690639dc29fac90604401600060405180830381600087803b15801562001ea157600080fd5b505af115801562001eb6573d6000803e3d6000fd5b50505050600092506000935062002213565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152606b602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001fb8576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018b905273ffffffffffffffffffffffffffffffffffffffff8a1690639dc29fac90604401600060405180830381600087803b15801562001f8b57600080fd5b505af115801562001fa0573d6000803e3d6000fd5b50505050806020015194508060000151935062002211565b606e5474010000000000000000000000000000000000000000900460ff161580156200200a575073ffffffffffffffffffffffffffffffffffffffff89166000908152606f602052604090205460ff16155b1562002042576040517f3759891400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515620020575762002057898b898962002d08565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa158015620020c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020eb919062004667565b90506200211173ffffffffffffffffffffffffffffffffffffffff8b1633308e62003227565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8c16906370a0823190602401602060405180830381865afa1580156200217f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021a5919062004667565b9050620021b3828262004681565b6068548c9850610100900463ffffffff1696509350620021d38762003287565b620021de8c6200339f565b620021e98d620034ac565b604051602001620021fd93929190620043b9565b604051602081830303815290604052945050505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600084868e8e86886053546040516200225598979695949392919062004697565b60405180910390a16200234962001c72600085878f8f8789805190602001206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b86156200235a576200235a62002aa6565b5050505062000bed60018055565b606c5473ffffffffffffffffffffffffffffffffffffffff163314620023ba576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200089e620035ae565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462002416576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821662002495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e76616c696420746f6b656e20616464726573730000000000000000000000604482015260640162000a09565b73ffffffffffffffffffffffffffffffffffffffff82166000908152606f602052604090205460ff161515811515036200252c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f546f6b656e20616c72656164792068617320746865207065726d697373696f6e604482015260640162000a09565b73ffffffffffffffffffffffffffffffffffffffff82166000818152606f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f6036bc45ffdc28cb8eb8a5afad20d8d1b999da9512abc39c0a9f52995a74998d910160405180910390a15050565b600084815b60208110156200269557600163ffffffff8616821c811690036200263157858160208110620025f257620025f2620044cf565b60200201358260405160200162002613929190918252602082015260400190565b60405160208183030381529060405280519060200120915062002680565b81868260208110620026475762002647620044cf565b602002013560405160200162002667929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b806200268c816200452d565b915050620025bf565b50821490505b949350505050565b60685460ff1615620026e1576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b600054610100900460ff16620027d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000a09565b6200089e6200363e565b620027eb8b63ffffffff16620036d7565b6068546040805160208082018e90528183018d9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915260009165010000000000900473ffffffffffffffffffffffffffffffffffffffff169063257b3632906084016020604051808303816000875af11580156200288e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620028b4919062004667565b905080600003620028f0576040517e2f6fad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff88811661010090920416146200293a576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606854600090610100900463ffffffff16620029585750896200295b565b508a5b620029846200297b848c8c8c8c8c8c8c60405162001b9592919062004657565b8f8f84620025ba565b620029bb576040517fe0417cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262002aa19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200373c565b505050565b6053546068805463ffffffff909216790100000000000000000000000000000000000000000000000000027fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179081905573ffffffffffffffffffffffffffffffffffffffff65010000000000909104166333d6247d62002b2c6200169b565b6040518263ffffffff1660e01b815260040162002b4b91815260200190565b600060405180830381600087803b15801562002b6657600080fd5b505af115801562002b7b573d6000803e3d6000fd5b50505050565b80600162002b926020600262004849565b62002b9e919062004681565b6053541062002bd9576040517fef5ccf6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060536000815462002bec906200452d565b9182905550905060005b602081101562002c88578082901c60011660010362002c2e57826033826020811062002c265762002c26620044cf565b015550505050565b6033816020811062002c445762002c44620044cf565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250808062002c7f906200452d565b91505062002bf6565b5062002aa162004857565b60026001540362002d01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640162000a09565b6002600155565b600062002d19600482848662004886565b62002d2491620048b2565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002fa357600080808080808062002d87896004818d62004886565b81019062002d969190620048fb565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002e0a576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8616301462002e5a576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8a851462002e94576040517f03fffc4b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002f4f9190620041d7565b6000604051808303816000865af19150503d806000811462002f8e576040519150601f19603f3d011682016040523d82523d6000602084013e62002f93565b606091505b5050505050505050505062003220565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200301f576040517fe282c0ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080808080808080620030378a6004818e62004886565b81019062003046919062004956565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614620030bc576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff871630146200310c576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620031d09190620041d7565b6000604051808303816000865af19150503d80600081146200320f576040519150601f19603f3d011682016040523d82523d6000602084013e62003214565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b7b9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002a1e565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde03000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff8616916200330b9190620041d7565b600060405180830381855afa9150503d806000811462003348576040519150601f19603f3d011682016040523d82523d6000602084013e6200334d565b606091505b50915091508162003394576040518060400160405280600781526020017f4e4f5f4e414d45000000000000000000000000000000000000000000000000008152506200269b565b6200269b816200384f565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff861691620034239190620041d7565b600060405180830381855afa9150503d806000811462003460576040519150601f19603f3d011682016040523d82523d6000602084013e62003465565b606091505b50915091508162003394576040518060400160405280600981526020017f4e4f5f53594d424f4c00000000000000000000000000000000000000000000008152506200269b565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff8616916200352f9190620041d7565b600060405180830381855afa9150503d80600081146200356c576040519150601f19603f3d011682016040523d82523d6000602084013e62003571565b606091505b509150915081801562003585575080516020145b620035925760126200269b565b808060200190518101906200269b9190620049e2565b60018055565b60685460ff16620035eb576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600054610100900460ff16620035a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000a09565b600881901c60008181526069602052604081208054600160ff861690811b9182189283905592909190818316900362003220576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000620037a0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662003a3f9092919063ffffffff16565b80519091501562002aa15780806020019051810190620037c1919062004a02565b62002aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000a09565b606060408251106200387157818060200190518101906200093d919062004a22565b815160200362003a015760005b602081108015620038c957508281815181106200389f576200389f620044cf565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b15620038e45780620038db816200452d565b9150506200387e565b806000036200392857505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e4700000000000000000000000000006020820152919050565b60008167ffffffffffffffff81111562003946576200394662004182565b6040519080825280601f01601f19166020018201604052801562003971576020820181803683370190505b50905060005b82811015620039f957848181518110620039955762003995620044cf565b602001015160f81c60f81b828281518110620039b557620039b5620044cf565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080620039f0816200452d565b91505062003977565b509392505050565b505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e470000000000000000000000000000602082015290565b919050565b60606200269b8484600085856000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003a769190620041d7565b60006040518083038185875af1925050503d806000811462003ab5576040519150601f19603f3d011682016040523d82523d6000602084013e62003aba565b606091505b509150915062003acd8783838762003ad8565b979650505050505050565b6060831562003b7357825160000362003b6b5773ffffffffffffffffffffffffffffffffffffffff85163b62003b6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000a09565b50816200269b565b6200269b838381511562003b8a5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a09919062004aa2565b611b668062004ab883390190565b803563ffffffff8116811462003a3a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811462003c0657600080fd5b50565b6000806040838503121562003c1d57600080fd5b62003c288362003bce565b9150602083013562003c3a8162003be3565b809150509250929050565b60008060008060008060c0878903121562003c5f57600080fd5b62003c6a8762003bce565b9550602087013562003c7c8162003be3565b9450604087013562003c8e8162003be3565b9350606087013562003ca08162003be3565b925062003cb06080880162003bce565b915060a087013562003cc28162003be3565b809150509295509295509295565b8061040081018310156200093d57600080fd5b60008083601f84011262003cf657600080fd5b50813567ffffffffffffffff81111562003d0f57600080fd5b60208301915083602082850101111562003d2857600080fd5b9250929050565b60008060008060008060008060008060006105208c8e03121562003d5257600080fd5b62003d5e8d8d62003cd0565b9a5062003d6f6104008d0162003bce565b99506104208c013598506104408c0135975062003d906104608d0162003bce565b96506104808c013562003da38162003be3565b955062003db46104a08d0162003bce565b94506104c08c013562003dc78162003be3565b93506104e08c013592506105008c013567ffffffffffffffff81111562003ded57600080fd5b62003dfb8e828f0162003ce3565b915080935050809150509295989b509295989b9093969950565b60006020828403121562003e2857600080fd5b813562003e358162003be3565b9392505050565b801515811462003c0657600080fd5b60006020828403121562003e5e57600080fd5b813562003e358162003e3c565b60ff8116811462003c0657600080fd5b600080600080600080600060e0888a03121562003e9757600080fd5b873562003ea48162003e6b565b965062003eb46020890162003bce565b9550604088013562003ec68162003be3565b945062003ed66060890162003bce565b9350608088013562003ee88162003be3565b9699959850939692959460a0840135945060c09093013592915050565b60006020828403121562003f1857600080fd5b5035919050565b600080600080600080600060a0888a03121562003f3b57600080fd5b62003f468862003bce565b9650602088013562003f588162003be3565b9550604088013567ffffffffffffffff8082111562003f7657600080fd5b62003f848b838c0162003ce3565b909750955060608a013591508082111562003f9e57600080fd5b5062003fad8a828b0162003ce3565b909450925050608088013562003fc38162003e6b565b8091505092959891949750929550565b60008060008060008060a0878903121562003fed57600080fd5b62003ff88762003bce565b955060208701356200400a8162003be3565b9450604087013593506060870135620040238162003e3c565b9250608087013567ffffffffffffffff8111156200404057600080fd5b6200404e89828a0162003ce3565b979a9699509497509295939492505050565b600080600080600080600060c0888a0312156200407c57600080fd5b620040878862003bce565b96506020880135620040998162003be3565b9550604088013594506060880135620040b28162003be3565b93506080880135620040c48162003e3c565b925060a088013567ffffffffffffffff811115620040e157600080fd5b620040ef8a828b0162003ce3565b989b979a50959850939692959293505050565b600080604083850312156200411657600080fd5b8235620041238162003be3565b9150602083013562003c3a8162003e3c565b60008060008061046085870312156200414d57600080fd5b8435935062004160866020870162003cd0565b925062004171610420860162003bce565b939692955092936104400135925050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015620041ce578181015183820152602001620041b4565b50506000910152565b60008251620041eb818460208701620041b1565b9190910192915050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200423f576200423f62004182565b604052919050565b600067ffffffffffffffff82111562004264576200426462004182565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620042a257600080fd5b8135620042b9620042b38262004247565b620041f5565b818152846020838601011115620042cf57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156200430257600080fd5b833567ffffffffffffffff808211156200431b57600080fd5b620043298783880162004290565b945060208601359150808211156200434057600080fd5b506200434f8682870162004290565b9250506040840135620043628162003e6b565b809150509250925092565b6000815180845262004387816020860160208601620041b1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606081526000620043ce60608301866200436d565b8281036020840152620043e281866200436d565b91505060ff83166040830152949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b63ffffffff86168152600073ffffffffffffffffffffffffffffffffffffffff80871660208401528086166040840152506080606083015262003acd608083018486620043f6565b73ffffffffffffffffffffffffffffffffffffffff8516815263ffffffff84166020820152606060408201526000620044c5606083018486620043f6565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620045615762004561620044fe565b5060010190565b6060815260006200457e606083018789620043f6565b828103602084015262004593818688620043f6565b91505060ff831660408301529695505050505050565b60008351620045bd818460208801620041b1565b835190830190620045d3818360208801620041b1565b01949350505050565b600061010060ff8c16835263ffffffff808c16602085015273ffffffffffffffffffffffffffffffffffffffff808c166040860152818b166060860152808a166080860152508760a08501528160c08501526200463d8285018789620043f6565b925080851660e085015250509a9950505050505050505050565b8183823760009101908152919050565b6000602082840312156200467a57600080fd5b5051919050565b818103818111156200093d576200093d620044fe565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620046f7828501876200436d565b925080851660e085015250509998505050505050505050565b600181815b808511156200476f57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620047535762004753620044fe565b808516156200476157918102915b93841c939080029062004715565b509250929050565b60008262004788575060016200093d565b8162004797575060006200093d565b8160018114620047b05760028114620047bb57620047db565b60019150506200093d565b60ff841115620047cf57620047cf620044fe565b50506001821b6200093d565b5060208310610133831016604e8410600b841016171562004800575081810a6200093d565b6200480c838362004710565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620048415762004841620044fe565b029392505050565b600062003e35838362004777565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200489757600080fd5b83861115620048a557600080fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015620048f35780818660040360031b1b83161692505b505092915050565b600080600080600080600060e0888a0312156200491757600080fd5b8735620049248162003be3565b96506020880135620049368162003be3565b95506040880135945060608801359350608088013562003ee88162003e6b565b600080600080600080600080610100898b0312156200497457600080fd5b8835620049818162003be3565b97506020890135620049938162003be3565b965060408901359550606089013594506080890135620049b38162003e3c565b935060a0890135620049c58162003e6b565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215620049f557600080fd5b815162003e358162003e6b565b60006020828403121562004a1557600080fd5b815162003e358162003e3c565b60006020828403121562004a3557600080fd5b815167ffffffffffffffff81111562004a4d57600080fd5b8201601f8101841362004a5f57600080fd5b805162004a70620042b38262004247565b81815285602083850101111562004a8657600080fd5b62004a99826020830160208601620041b1565b95945050505050565b60208152600062003e3560208301846200436d56fe6101006040523480156200001257600080fd5b5060405162001b6638038062001b6683398101604081905262000035916200028d565b82826003620000458382620003a1565b506004620000548282620003a1565b50503360c0525060ff811660e052466080819052620000739062000080565b60a052506200046d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000ad6200012e565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6060600380546200013f9062000312565b80601f01602080910402602001604051908101604052809291908181526020018280546200016d9062000312565b8015620001be5780601f106200019257610100808354040283529160200191620001be565b820191906000526020600020905b815481529060010190602001808311620001a057829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f057600080fd5b81516001600160401b03808211156200020d576200020d620001c8565b604051601f8301601f19908116603f01168101908282118183101715620002385762000238620001c8565b816040528381526020925086838588010111156200025557600080fd5b600091505b838210156200027957858201830151818301840152908201906200025a565b600093810190920192909252949350505050565b600080600060608486031215620002a357600080fd5b83516001600160401b0380821115620002bb57600080fd5b620002c987838801620001de565b94506020860151915080821115620002e057600080fd5b50620002ef86828701620001de565b925050604084015160ff811681146200030757600080fd5b809150509250925092565b600181811c908216806200032757607f821691505b6020821081036200034857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039c57600081815260208120601f850160051c81016020861015620003775750805b601f850160051c820191505b81811015620003985782815560010162000383565b5050505b505050565b81516001600160401b03811115620003bd57620003bd620001c8565b620003d581620003ce845462000312565b846200034e565b602080601f8311600181146200040d5760008415620003f45750858301515b600019600386901b1c1916600185901b17855562000398565b600085815260208120601f198616915b828110156200043e578886015182559484019460019091019084016200041d565b50858210156200045d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516116aa620004bc6000396000610237015260008181610307015281816105c001526106a70152600061053a015260008181610379015261050401526116aa6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf1461039b578063dd62ed3e146103ae578063ffa1ad74146103f457600080fd5b8063a457c2d71461034e578063a9059cbb14610361578063cd0d00961461037457600080fd5b806395d89b41116100bd57806395d89b41146102e75780639dc29fac146102ef578063a3c573eb1461030257600080fd5b806370a08231146102915780637ecebe00146102c757600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610261578063395093511461026957806340c10f191461027c57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610430565b60405161019191906113e4565b60405180910390f35b6101ad6101a8366004611479565b6104c2565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad6102043660046114a3565b6104dc565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610191565b6101c1610500565b6101ad610277366004611479565b61055c565b61028f61028a366004611479565b6105a8565b005b6101c161029f3660046114df565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d53660046114df565b60056020526000908152604090205481565b610184610680565b61028f6102fd366004611479565b61068f565b6103297f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad61035c366004611479565b61075e565b6101ad61036f366004611479565b61082f565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b61028f6103a9366004611501565b61083d565b6101c16103bc366004611574565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043f906115a7565b80601f016020809104026020016040519081016040528092919081815260200182805461046b906115a7565b80156104b85780601f1061048d576101008083540402835291602001916104b8565b820191906000526020600020905b81548152906001019060200180831161049b57829003601f168201915b5050505050905090565b6000336104d0818585610b73565b60019150505b92915050565b6000336104ea858285610d27565b6104f5858585610dfe565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610537576105324661106d565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104d090829086906105a3908790611629565b610b73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d4272696467650000000000000000000000000000000060648201526084015b60405180910390fd5b61067c8282611135565b5050565b60606004805461043f906115a7565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d427269646765000000000000000000000000000000006064820152608401610669565b61067c8282611228565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610669565b6104f58286868403610b73565b6000336104d0818585610dfe565b834211156108cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866109268361163c565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610991610500565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610a55573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610ad057508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610669565b610b678a8a8a610b73565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610cb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610df85781811015610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610669565b610df88484848403610b73565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610f44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610df8565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611098610430565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166111b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610669565b80600260008282546111c49190611629565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166112cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610d1a565b600060208083528351808285015260005b81811015611411578581018301518582016040015282016113f5565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461147457600080fd5b919050565b6000806040838503121561148c57600080fd5b61149583611450565b946020939093013593505050565b6000806000606084860312156114b857600080fd5b6114c184611450565b92506114cf60208501611450565b9150604084013590509250925092565b6000602082840312156114f157600080fd5b6114fa82611450565b9392505050565b600080600080600080600060e0888a03121561151c57600080fd5b61152588611450565b965061153360208901611450565b95506040880135945060608801359350608088013560ff8116811461155757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561158757600080fd5b61159083611450565b915061159e60208401611450565b90509250929050565b600181811c908216806115bb57607f821691505b6020821081036115f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156104d6576104d66115fa565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361166d5761166d6115fa565b506001019056fea26469706673582212206fe049be388a1d04319b9913fe6d100c4c8e272fe0f5748eb056bd0622beabcc64736f6c63430008140033a26469706673582212205a6863755e218a86185b7a8974ed88bf11d02370ae341214fc0245f726eb00a064736f6c63430008140033" + }, + { + "contractName": "PolygonZkEVMBridge proxy", + "balance": "115792089237316195423570985008687907853269984665640564039457584007913129639935", + "nonce": "1", + "address": "0x10B65c586f795aF3eCCEe594fE4E38E1F059F780", + "bytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461086f565b610135565b61006b6100a336600461088a565b61017f565b3480156100b457600080fd5b506100bd6101f3565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461086f565b610231565b34801561011257600080fd5b506100bd61025e565b61012361028c565b61013361012e610363565b61036d565b565b61013d610391565b73ffffffffffffffffffffffffffffffffffffffff16330361017757610174816040518060200160405280600081525060006103d1565b50565b61017461011b565b610187610391565b73ffffffffffffffffffffffffffffffffffffffff1633036101eb576101e68383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506103d1915050565b505050565b6101e661011b565b60006101fd610391565b73ffffffffffffffffffffffffffffffffffffffff16330361022657610221610363565b905090565b61022e61011b565b90565b610239610391565b73ffffffffffffffffffffffffffffffffffffffff16330361017757610174816103fc565b6000610268610391565b73ffffffffffffffffffffffffffffffffffffffff16330361022657610221610391565b610294610391565b73ffffffffffffffffffffffffffffffffffffffff163303610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600061022161045d565b3660008037600080366000845af43d6000803e80801561038c573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6103da83610485565b6000825111806103e75750805b156101e6576103f683836104d2565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610425610391565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a1610174816104fe565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6103b5565b61048e8161060a565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606104f7838360405180606001604052806027815260200161099f602791396106d5565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81166105a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161035a565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b73ffffffffffffffffffffffffffffffffffffffff81163b6106ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161035a565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105c4565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516106ff9190610931565b600060405180830381855af49150503d806000811461073a576040519150601f19603f3d011682016040523d82523d6000602084013e61073f565b606091505b50915091506107508683838761075a565b9695505050505050565b606083156107f05782516000036107e95773ffffffffffffffffffffffffffffffffffffffff85163b6107e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161035a565b50816107fa565b6107fa8383610802565b949350505050565b8151156108125781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035a919061094d565b803573ffffffffffffffffffffffffffffffffffffffff8116811461086a57600080fd5b919050565b60006020828403121561088157600080fd5b6104f782610846565b60008060006040848603121561089f57600080fd5b6108a884610846565b9250602084013567ffffffffffffffff808211156108c557600080fd5b818601915086601f8301126108d957600080fd5b8135818111156108e857600080fd5b8760208285010111156108fa57600080fd5b6020830194508093505050509250925092565b60005b83811015610928578181015183820152602001610910565b50506000910152565b6000825161094381846020870161090d565b9190910192915050565b602081526000825180602084015261096c81604085016020870161090d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220701a0c26bdd76686e63fc3c65e4f28a20ba3ecc8a60246733c0627e679c9804e64736f6c63430008140033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000068": "0x00000000000000a40d5f56745a118d0906a34e69aec8c0db1cb8fa0000000100", + "0x000000000000000000000000000000000000000000000000000000000000006d": "0x00000000000000000000000082109a709138a2953c720d3d775168717b668ba6", + "0x000000000000000000000000000000000000000000000000000000000000006e": "0x00000000000000000000000082109a709138a2953c720d3d775168717b668ba6", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000a6791C91168866769273e6AFFe603e00269b16ae", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000002F1008CB69C24f06D089ECEA5a51791A6FB74b04" + } + }, + { + "contractName": "PolygonZkEVMGlobalExitRootL2 implementation", + "balance": "0", + "nonce": "1", + "address": "0x5D6c503E69326Ab691b71E1223908e49988c5AEc", + "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610162565b60006020819052908152604090205481565b6100a061009b366004610162565b6100ee565b005b6100c97f00000000000000000000000010b65c586f795af3eccee594fe4e38e1f059f78081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000010b65c586f795af3eccee594fe4e38e1f059f780161461015d576040517fb49365dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600155565b60006020828403121561017457600080fd5b503591905056fea2646970667358221220ea2171e2c85c8bff947affc409ef6fc6a8fe82fb8c174ddeda988651e595d66564736f6c63430008140033" + }, + { + "contractName": "PolygonZkEVMGlobalExitRootL2 proxy", + "balance": "0", + "nonce": "1", + "address": "0xa40d5f56745a118d0906a34e69aec8c0db1cb8fa", + "bytecode": "0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033", + "storage": { + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000a6791c91168866769273e6affe603e00269b16ae", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000005d6c503e69326ab691b71e1223908e49988c5aec" + } + }, + { + "contractName": "PolygonZkEVMTimelock", + "balance": "0", + "nonce": "1", + "address": "0x26a093198fA2a20C3508679197F5aE1c9323772A", + "bytecode": "0x6080604052600436106101c65760003560e01c806364d62353116100f7578063b1c5f42711610095578063d547741f11610064578063d547741f14610661578063e38335e514610681578063f23a6e6114610694578063f27a0c92146106d957600080fd5b8063b1c5f427146105af578063bc197c81146105cf578063c4d252f514610614578063d45c44351461063457600080fd5b80638f61f4f5116100d15780638f61f4f5146104e157806391d1485414610515578063a217fddf14610566578063b08e51c01461057b57600080fd5b806364d62353146104815780638065657f146104a15780638f2a0bb0146104c157600080fd5b8063248a9ca31161016457806331d507501161013e57806331d50750146103c857806336568abe146103e85780633a6aae7214610408578063584b153e1461046157600080fd5b8063248a9ca3146103475780632ab0f529146103775780632f2ff15d146103a857600080fd5b80630d3cf6fc116101a05780630d3cf6fc1461026b578063134008d31461029f57806313bc9f20146102b2578063150b7a02146102d257600080fd5b806301d5062a146101d257806301ffc9a7146101f457806307bd02651461022957600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101f26101ed366004611c52565b6106ee565b005b34801561020057600080fd5b5061021461020f366004611cc7565b610783565b60405190151581526020015b60405180910390f35b34801561023557600080fd5b5061025d7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610220565b34801561027757600080fd5b5061025d7f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b6101f26102ad366004611d09565b6107df565b3480156102be57600080fd5b506102146102cd366004611d75565b6108d7565b3480156102de57600080fd5b506103166102ed366004611e9a565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610220565b34801561035357600080fd5b5061025d610362366004611d75565b60009081526020819052604090206001015490565b34801561038357600080fd5b50610214610392366004611d75565b6000908152600160208190526040909120541490565b3480156103b457600080fd5b506101f26103c3366004611f02565b6108fd565b3480156103d457600080fd5b506102146103e3366004611d75565b610927565b3480156103f457600080fd5b506101f2610403366004611f02565b610940565b34801561041457600080fd5b5061043c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610220565b34801561046d57600080fd5b5061021461047c366004611d75565b6109f8565b34801561048d57600080fd5b506101f261049c366004611d75565b610a0e565b3480156104ad57600080fd5b5061025d6104bc366004611d09565b610ade565b3480156104cd57600080fd5b506101f26104dc366004611f73565b610b1d565b3480156104ed57600080fd5b5061025d7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b34801561052157600080fd5b50610214610530366004611f02565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561057257600080fd5b5061025d600081565b34801561058757600080fd5b5061025d7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b3480156105bb57600080fd5b5061025d6105ca366004612025565b610d4f565b3480156105db57600080fd5b506103166105ea36600461214e565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b34801561062057600080fd5b506101f261062f366004611d75565b610d94565b34801561064057600080fd5b5061025d61064f366004611d75565b60009081526001602052604090205490565b34801561066d57600080fd5b506101f261067c366004611f02565b610e8f565b6101f261068f366004612025565b610eb4565b3480156106a057600080fd5b506103166106af3660046121f8565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b3480156106e557600080fd5b5061025d611161565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161071881611244565b6000610728898989898989610ade565b90506107348184611251565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a604051610770969594939291906122a6565b60405180910390a3505050505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e00000000000000000000000000000000000000000000000000000000014806107d957506107d98261139e565b92915050565b600080527fdae2aa361dfd1ca020a396615627d436107c35eff9fe7738a3512819782d70696020527f5ba6852781629bcdcd4bdaa6de76d786f1c64b16acdac474e55bebc0ea157951547fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e639060ff1661085c5761085c8133611435565b600061086c888888888888610ade565b905061087881856114ed565b6108848888888861162a565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a6040516108bc94939291906122f1565b60405180910390a36108cd8161172e565b5050505050505050565b6000818152600160205260408120546001811180156108f65750428111155b9392505050565b60008281526020819052604090206001015461091881611244565b61092283836117d7565b505050565b60008181526001602052604081205481905b1192915050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6109f482826118c7565b5050565b6000818152600160208190526040822054610939565b333014610a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201527f62652074696d656c6f636b00000000000000000000000000000000000000000060648201526084016109e1565b60025460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1600255565b6000868686868686604051602001610afb969594939291906122a6565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610b4781611244565b888714610bd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109e1565b888514610c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109e1565b6000610c778b8b8b8b8b8b8b8b610d4f565b9050610c838184611251565b60005b8a811015610d415780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610cc357610cc3612331565b9050602002016020810190610cd89190612360565b8d8d86818110610cea57610cea612331565b905060200201358c8c87818110610d0357610d03612331565b9050602002810190610d15919061237b565b8c8b604051610d29969594939291906122a6565b60405180910390a3610d3a8161240f565b9050610c86565b505050505050505050505050565b60008888888888888888604051602001610d709897969594939291906124f7565b60405160208183030381529060405280519060200120905098975050505050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610dbe81611244565b610dc7826109f8565b610e53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20636160448201527f6e6e6f742062652063616e63656c6c656400000000000000000000000000000060648201526084016109e1565b6000828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b600082815260208190526040902060010154610eaa81611244565b61092283836118c7565b600080527fdae2aa361dfd1ca020a396615627d436107c35eff9fe7738a3512819782d70696020527f5ba6852781629bcdcd4bdaa6de76d786f1c64b16acdac474e55bebc0ea157951547fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e639060ff16610f3157610f318133611435565b878614610fc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109e1565b87841461104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109e1565b60006110618a8a8a8a8a8a8a8a610d4f565b905061106d81856114ed565b60005b8981101561114b5760008b8b8381811061108c5761108c612331565b90506020020160208101906110a19190612360565b905060008a8a848181106110b7576110b7612331565b9050602002013590503660008a8a868181106110d5576110d5612331565b90506020028101906110e7919061237b565b915091506110f78484848461162a565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588686868660405161112e94939291906122f1565b60405180910390a350505050806111449061240f565b9050611070565b506111558161172e565b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161580159061123257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123291906125be565b1561123d5750600090565b5060025490565b61124e8133611435565b50565b61125a82610927565b156112e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201527f7265616479207363686564756c6564000000000000000000000000000000000060648201526084016109e1565b6112ef611161565b81101561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e7460448201527f2064656c6179000000000000000000000000000000000000000000000000000060648201526084016109e1565b61138881426125e0565b6000928352600160205260409092209190915550565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107d957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146107d9565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166109f4576114738161197e565b61147e83602061199d565b60405160200161148f929190612617565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526109e191600401612698565b6114f6826108d7565b611582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20697360448201527f206e6f742072656164790000000000000000000000000000000000000000000060648201526084016109e1565b80158061159e5750600081815260016020819052604090912054145b6109f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e67206465706560448201527f6e64656e6379000000000000000000000000000000000000000000000000000060648201526084016109e1565b60008473ffffffffffffffffffffffffffffffffffffffff168484846040516116549291906126e9565b60006040518083038185875af1925050503d8060008114611691576040519150601f19603f3d011682016040523d82523d6000602084013e611696565b606091505b5050905080611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e67207460448201527f72616e73616374696f6e2072657665727465640000000000000000000000000060648201526084016109e1565b5050505050565b611737816108d7565b6117c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20697360448201527f206e6f742072656164790000000000000000000000000000000000000000000060648201526084016109e1565b600090815260016020819052604090912055565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166109f45760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118693390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156109f45760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606107d973ffffffffffffffffffffffffffffffffffffffff831660145b606060006119ac8360026126f9565b6119b79060026125e0565b67ffffffffffffffff8111156119cf576119cf611d8e565b6040519080825280601f01601f1916602001820160405280156119f9576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611a3057611a30612331565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611a9357611a93612331565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611acf8460026126f9565b611ada9060016125e0565b90505b6001811115611b77577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611b1b57611b1b612331565b1a60f81b828281518110611b3157611b31612331565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611b7081612710565b9050611add565b5083156108f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109e1565b803573ffffffffffffffffffffffffffffffffffffffff81168114611c0457600080fd5b919050565b60008083601f840112611c1b57600080fd5b50813567ffffffffffffffff811115611c3357600080fd5b602083019150836020828501011115611c4b57600080fd5b9250929050565b600080600080600080600060c0888a031215611c6d57600080fd5b611c7688611be0565b965060208801359550604088013567ffffffffffffffff811115611c9957600080fd5b611ca58a828b01611c09565b989b979a50986060810135976080820135975060a09091013595509350505050565b600060208284031215611cd957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146108f657600080fd5b60008060008060008060a08789031215611d2257600080fd5b611d2b87611be0565b955060208701359450604087013567ffffffffffffffff811115611d4e57600080fd5b611d5a89828a01611c09565b979a9699509760608101359660809091013595509350505050565b600060208284031215611d8757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611e0457611e04611d8e565b604052919050565b600082601f830112611e1d57600080fd5b813567ffffffffffffffff811115611e3757611e37611d8e565b611e6860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611dbd565b818152846020838601011115611e7d57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215611eb057600080fd5b611eb985611be0565b9350611ec760208601611be0565b925060408501359150606085013567ffffffffffffffff811115611eea57600080fd5b611ef687828801611e0c565b91505092959194509250565b60008060408385031215611f1557600080fd5b82359150611f2560208401611be0565b90509250929050565b60008083601f840112611f4057600080fd5b50813567ffffffffffffffff811115611f5857600080fd5b6020830191508360208260051b8501011115611c4b57600080fd5b600080600080600080600080600060c08a8c031215611f9157600080fd5b893567ffffffffffffffff80821115611fa957600080fd5b611fb58d838e01611f2e565b909b50995060208c0135915080821115611fce57600080fd5b611fda8d838e01611f2e565b909950975060408c0135915080821115611ff357600080fd5b506120008c828d01611f2e565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60008060008060008060008060a0898b03121561204157600080fd5b883567ffffffffffffffff8082111561205957600080fd5b6120658c838d01611f2e565b909a50985060208b013591508082111561207e57600080fd5b61208a8c838d01611f2e565b909850965060408b01359150808211156120a357600080fd5b506120b08b828c01611f2e565b999c989b509699959896976060870135966080013595509350505050565b600082601f8301126120df57600080fd5b8135602067ffffffffffffffff8211156120fb576120fb611d8e565b8160051b61210a828201611dbd565b928352848101820192828101908785111561212457600080fd5b83870192505b848310156121435782358252918301919083019061212a565b979650505050505050565b600080600080600060a0868803121561216657600080fd5b61216f86611be0565b945061217d60208701611be0565b9350604086013567ffffffffffffffff8082111561219a57600080fd5b6121a689838a016120ce565b945060608801359150808211156121bc57600080fd5b6121c889838a016120ce565b935060808801359150808211156121de57600080fd5b506121eb88828901611e0c565b9150509295509295909350565b600080600080600060a0868803121561221057600080fd5b61221986611be0565b945061222760208701611be0565b93506040860135925060608601359150608086013567ffffffffffffffff81111561225157600080fd5b6121eb88828901611e0c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8716815285602082015260a0604082015260006122dc60a08301868861225d565b60608301949094525060800152949350505050565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152600061232760608301848661225d565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561237257600080fd5b6108f682611be0565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126123b057600080fd5b83018035915067ffffffffffffffff8211156123cb57600080fd5b602001915036819003821315611c4b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612440576124406123e0565b5060010190565b81835260006020808501808196508560051b810191508460005b878110156124ea57828403895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126124a057600080fd5b8701858101903567ffffffffffffffff8111156124bc57600080fd5b8036038213156124cb57600080fd5b6124d686828461225d565b9a87019a9550505090840190600101612461565b5091979650505050505050565b60a0808252810188905260008960c08301825b8b8110156125455773ffffffffffffffffffffffffffffffffffffffff61253084611be0565b1682526020928301929091019060010161250a565b5083810360208501528881527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff89111561257e57600080fd5b8860051b9150818a602083013701828103602090810160408501526125a69082018789612447565b60608401959095525050608001529695505050505050565b6000602082840312156125d057600080fd5b815180151581146108f657600080fd5b808201808211156107d9576107d96123e0565b60005b8381101561260e5781810151838201526020016125f6565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161264f8160178501602088016125f3565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161268c8160288401602088016125f3565b01602801949350505050565b60208152600082518060208401526126b78160408501602087016125f3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b8183823760009101908152919050565b80820281158282048414176107d9576107d96123e0565b60008161271f5761271f6123e0565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea2646970667358221220ff13bccf45bfce11c5e0c402588f07aa3b7a164566579dec9498445d67bc916164736f6c63430008140033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000e10", + "0xd52c425d569449de3ea8e96b6f4f0056c8b90231a08ce274f929eac5ca5b70c5": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x05ff7937f06c2996e8480305be52289ca3766048749e7cbb61d45fd5705375bb": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x64494413541ff93b31aa309254e3fed72a7456e9845988b915b4c7a7ceba8814": "0x5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5", + "0x0dbd82eed89d73822865d402eb9d73d4609cb01c0aa3d785a17d7a9d0cb5ee06": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x3412d5605ac6cd444957cedb533e5dacad6378b4bc819ebe3652188a665066d6": "0x5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5", + "0x9d38bd476745c975feef1b204358c9d3e7719e09369f43fb65a1097848fb43d1": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xdae2aa361dfd1ca020a396615627d436107c35eff9fe7738a3512819782d706a": "0x5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5", + "0x89eab0dbc58be726d54f3116480f80e75a19870aa9750471514a47a86f365aef": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xc3ad33e20b0c56a223ad5104fff154aa010f8715b9c981fd38fdc60a4d1a52fc": "0x5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5" + } + }, + { + "accountName": "keyless Deployer", + "balance": "0", + "nonce": "1", + "address": "0xc0124DeE8494E155eFf900100D2AF4CC0BC9a76e" + }, + { + "accountName": "deployer", + "balance": "100000000000000000000000", + "nonce": "9", + "address": "0x2ECF31eCe36ccaC2d3222A303b1409233ECBB225" + }, + { + "accountName": "deployer", + "balance": "100000000000000000000000", + "nonce": "8", + "address": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + } + ] +} diff --git a/test/config/test.node.config.toml b/test/config/test.node.config.toml index 4b18d633ee..8494b65d1f 100644 --- a/test/config/test.node.config.toml +++ b/test/config/test.node.config.toml @@ -54,7 +54,7 @@ EnableL2SuggestedGasPricePolling = true [Synchronizer] SyncInterval = "1s" SyncChunkSize = 100 -TrustedSequencerURL = "" # If it is empty or not specified, then the value is read from the smc. +TrustedSequencerURL = "http://xgon-json-rpc:8123" # If it is empty or not specified, then the value is read from the smc. [Sequencer] WaitPeriodPoolIsEmpty = "1s" @@ -98,7 +98,8 @@ MaxTxLifetime = "3h" [SequenceSender] WaitPeriodSendSequence = "15s" LastBatchVirtualizationTimeMaxWaitPeriod = "10s" -MaxTxSizeForL1 = 131072 +MaxBatchesForL1 = 10 +SenderAddress = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" L2Coinbase = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" PrivateKey = {Path = "/pk/sequencer.keystore", Password = "testonly"} diff --git a/test/config/test.permissionless.prover.config.json b/test/config/test.permissionless.prover.config.json index 499b6ba808..ac7f24188e 100644 --- a/test/config/test.permissionless.prover.config.json +++ b/test/config/test.permissionless.prover.config.json @@ -56,7 +56,7 @@ "aggregatorServerPort": 50081, "aggregatorClientPort": 50081, - "aggregatorClientHost": "zkevm-aggregator", + "aggregatorClientHost": "xgon-aggregator", "mapConstPolsFile": false, "mapConstantsTreeFile": false, @@ -69,7 +69,7 @@ "outputPath": "output", - "databaseURL": "postgresql://prover_user:prover_pass@zkevm-permissionless-db:5432/prover_db", + "databaseURL": "postgresql://prover_user:prover_pass@xgon-permissionless-db:5432/prover_db", "dbNodesTableName": "state.nodes", "dbProgramTableName": "state.program", "dbMultiWrite": true, diff --git a/test/config/test.prover.config.json b/test/config/test.prover.config.json index 91685ace2f..20b7e5770a 100644 --- a/test/config/test.prover.config.json +++ b/test/config/test.prover.config.json @@ -56,7 +56,7 @@ "aggregatorServerPort": 50081, "aggregatorClientPort": 50081, - "aggregatorClientHost": "zkevm-aggregator", + "aggregatorClientHost": "xgon-aggregator", "mapConstPolsFile": false, "mapConstantsTreeFile": false, @@ -69,7 +69,7 @@ "outputPath": "output", - "databaseURL": "postgresql://prover_user:prover_pass@zkevm-state-db:5432/prover_db", + "databaseURL": "postgresql://prover_user:prover_pass@xgon-state-db:5432/prover_db", "dbNodesTableName": "state.nodes", "dbProgramTableName": "state.program", "dbMultiWrite": true, diff --git a/test/dbutils/dbutils.go b/test/dbutils/dbutils.go index 9c42b6e1eb..2541b8a98c 100644 --- a/test/dbutils/dbutils.go +++ b/test/dbutils/dbutils.go @@ -17,7 +17,7 @@ func InitOrResetState(cfg db.Config) error { // InitOrResetPool will initializes the Pool db running the migrations or // will reset all the known data and rerun the migrations func InitOrResetPool(cfg db.Config) error { - return initOrReset(cfg, "zkevm-pool-db") + return initOrReset(cfg, "xgon-pool-db") } // initOrReset will initializes the db running the migrations or diff --git a/test/docker-compose.yml b/test/docker-compose.yml index 6131e6c892..feef26e8ab 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.5" networks: default: - name: Xgon + name: xgon services: grafana: @@ -13,8 +13,8 @@ services: - ./config/grafana/dashboard-dockers.json:/etc/grafana/provisioning/dashboards/dashboard-dockers.json:ro - ./config/grafana/dashboard-node.json:/etc/grafana/provisioning/dashboards/dashboard-node.json:ro environment: - - GF_SECURITY_ADMIN_USER=Xgon - - GF_SECURITY_ADMIN_PASSWORD=Xgon + - GF_SECURITY_ADMIN_USER=xgon + - GF_SECURITY_ADMIN_PASSWORD=xgon ports: - 3000:3000 depends_on: @@ -67,8 +67,8 @@ services: container_name: xgon-sequence-sender image: xgon-node environment: - - ZKEVM_NODE_STATEDB_HOST=zkevm-state-db - - ZKEVM_NODE_POOL_DB_HOST=zkevm-pool-db + - ZKEVM_NODE_STATEDB_HOST=xgon-state-db + - ZKEVM_NODE_POOL_DB_HOST=xgon-pool-db - ZKEVM_NODE_SEQUENCER_SENDER_ADDRESS=0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 volumes: - ./sequencer.keystore:/pk/sequencer.keystore @@ -226,7 +226,7 @@ services: xgon-explorer-l1: container_name: xgon-explorer-l1 - image: hermeznetwork/xgon-explorer:latest + image: hermeznetwork/zkevm-explorer:latest ports: - 4000:4000 environment: @@ -259,7 +259,7 @@ services: xgon-explorer-l2: container_name: xgon-explorer-l2 - image: hermeznetwork/xgon-explorer:latest + image: hermeznetwork/zkevm-explorer:latest ports: - 4001:4000 environment: @@ -310,7 +310,7 @@ services: xgon-mock-l1-network: container_name: xgon-mock-l1-network - image: hermeznetwork/geth-xgon-contracts:v2.0.0-RC1-fork.5-geth1.12.0 + image: okexchain/xgon-geth:e2e_v0.1.0_20231030 ports: - 8545:8545 - 8546:8546 @@ -330,6 +330,8 @@ services: - "--ws.addr" - "0.0.0.0" - "--dev" + - "--dev.period" + - "1" - "--datadir" - "/geth_data" - "--syncmode" @@ -338,7 +340,7 @@ services: xgon-prover: container_name: xgon-prover - image: hermeznetwork/xgon-prover:v2.2.0 + image: hermeznetwork/zkevm-prover:v2.2.0 ports: # - 50051:50051 # Prover - 50052:50052 # Mock prover @@ -396,6 +398,33 @@ services: - "-N" - "500" + xgon-permissionless-node-forced-DAC: + container_name: xgon-permissionless-node-forced-DAC + image: xgon-node + ports: + - 8125:8125 + environment: + - ZKEVM_NODE_ISTRUSTEDSEQUENCER=false + - ZKEVM_NODE_STATEDB_USER=test_user + - ZKEVM_NODE_STATEDB_PASSWORD=test_password + - ZKEVM_NODE_STATEDB_NAME=state_db + - ZKEVM_NODE_STATEDB_HOST=xgon-permissionless-db + - ZKEVM_NODE_POOL_DB_USER=test_user + - ZKEVM_NODE_POOL_DB_PASSWORD=test_password + - ZKEVM_NODE_POOL_DB_NAME=pool_db + - ZKEVM_NODE_POOL_DB_HOST=xgon-permissionless-db + - ZKEVM_NODE_RPC_PORT=8125 + - ZKEVM_NODE_RPC_SEQUENCERNODEURI=http://xgon-json-rpc:8123 + - ZKEVM_NODE_SYNCHRONIZER_TRUSTEDSEQUENCERURL=http://you-cant-touch-this:8123 + - ZKEVM_NODE_MTCLIENT_URI=xgon-permissionless-prover:50061 + - ZKEVM_NODE_EXECUTOR_URI=xgon-permissionless-prover:50071 + volumes: + - ./config/test.node.config.toml:/app/config.toml + - ./config/test.genesis.config.json:/app/genesis.json + command: + - "/bin/sh" + - "-c" + - "/app/xgon-node run --network custom --custom-network-file /app/genesis.json --cfg /app/config.toml --components \"rpc,synchronizer\"" xgon-permissionless-node: container_name: xgon-permissionless-node image: xgon-node @@ -425,7 +454,7 @@ services: xgon-permissionless-prover: container_name: xgon-permissionless-prover - image: hermeznetwork/xgon-prover:v2.2.0 + image: hermeznetwork/zkevm-prover:v2.2.0 ports: # - 50058:50058 # Prover - 50059:50052 # Mock prover @@ -461,3 +490,30 @@ services: - ./config/test.genesis.config.json:/app/genesis.json command: - "/bin/sh" + + xgon-data-availability: + container_name: xgon-data-availability + image: okexchain/xgon-data-availability:e2e_v0.1.0_20231030 + ports: + - 8444:8444 + volumes: + - ./config/test.da.toml:/app/config.toml + - ./config/test-member.keystore:/pk/test-member.keystore + command: + - "/bin/sh" + - "-c" + - "/app/xgon-data-availability run --cfg /app/config.toml" + + xgon-data-availability-db: + container_name: xgon-data-availability-db + image: postgres + ports: + - 5438:5432 + environment: + - POSTGRES_USER=committee_user + - POSTGRES_PASSWORD=committee_password + - POSTGRES_DB=committee_db + command: + - "postgres" + - "-N" + - "500" diff --git a/test/e2e/datacommittee_test.go b/test/e2e/datacommittee_test.go index 62bbb38783..e1eb4fb0d2 100644 --- a/test/e2e/datacommittee_test.go +++ b/test/e2e/datacommittee_test.go @@ -39,7 +39,7 @@ func TestDataCommittee(t *testing.T) { ksFile = "/tmp/pkey" cfgFile = "/tmp/dacnodeconfigfile.json" ksPass = "pass" - dacNodeContainer = "hermeznetwork/supernets2-data-availability:v0.0.1" + dacNodeContainer = "okexchain/xgon-data-availability:origin_release_v0.1.0_20231017143653" ) // Setup @@ -66,7 +66,7 @@ func TestDataCommittee(t *testing.T) { time.Sleep(5 * time.Second) authL2, err := operations.GetAuth(operations.DefaultSequencerPrivateKey, operations.DefaultL2ChainID) require.NoError(t, err) - authL1, err := operations.GetAuth(operations.DefaultSequencerPrivateKey, operations.DefaultL1ChainID) + authL1, err := operations.GetAuth(operations.DefaultL1AdminPrivateKey, operations.DefaultL1ChainID) require.NoError(t, err) clientL2, err := ethclient.Dial(operations.DefaultL2NetworkURL) require.NoError(t, err) @@ -88,7 +88,7 @@ func TestDataCommittee(t *testing.T) { membs = append(membs, member{ addr: crypto.PubkeyToAddress(pk.PublicKey), pk: pk, - url: fmt.Sprintf("http://supernets2-data-availability-%d:420%d", i, i), + url: fmt.Sprintf("http://xgon-data-availability-%d:420%d", i, i), i: i, }) } @@ -110,10 +110,12 @@ func TestDataCommittee(t *testing.T) { // Spin up M DAC nodes dacNodeConfig := config.Config{ L1: config.L1Config{ - WsURL: "ws://supernets2-mock-l1-network:8546", - CDKValidiumAddress: "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82", - Timeout: cTypes.NewDuration(time.Minute * 3), - RetryPeriod: cTypes.NewDuration(time.Second * 5), + RpcURL: "http://xgon-mock-l1-network:8545", + WsURL: "ws://xgon-mock-l1-network:8546", + CDKValidiumAddress: "0x0D9088C72Cd4F08e9dDe474D8F5394147f64b22C", + DataCommitteeAddress: "0x6Ae5b0863dBF3477335c0102DBF432aFf04ceb22", + Timeout: cTypes.NewDuration(time.Minute * 3), + RetryPeriod: cTypes.NewDuration(time.Second * 5), }, PrivateKey: cTypes.KeystoreFileConfig{ Path: ksFile, @@ -123,7 +125,7 @@ func TestDataCommittee(t *testing.T) { Name: "committee_db", User: "committee_user", Password: "committee_password", - Host: "supernets2-data-node-db", + Host: "xgon-data-availability-db", Port: "5432", EnableLog: false, MaxConns: 10, @@ -148,10 +150,10 @@ func TestDataCommittee(t *testing.T) { // Stop DAC nodes for i := 0; i < mMembers; i++ { assert.NoError(t, exec.Command( - "docker", "kill", "supernets2-data-availability-"+strconv.Itoa(i), + "docker", "kill", "xgon-data-availability-"+strconv.Itoa(i), ).Run()) assert.NoError(t, exec.Command( - "docker", "rm", "supernets2-data-availability-"+strconv.Itoa(i), + "docker", "rm", "xgon-data-availability-"+strconv.Itoa(i), ).Run()) } // Stop permissionless node @@ -170,20 +172,22 @@ func TestDataCommittee(t *testing.T) { err = os.WriteFile(cfgFile, file, 0644) require.NoError(t, err) // Write private key keystore file - require.NoError(t, createKeyStore(m.pk, ksFile, ksPass)) + err = createKeyStore(m.pk, ksFile, ksPass) + require.NoError(t, err) // Run DAC node cmd := exec.Command( "docker", "run", "-d", - "--name", "supernets2-data-availability-"+strconv.Itoa(m.i), + "--name", "xgon-data-availability-"+strconv.Itoa(m.i), "-v", cfgFile+":/app/config.json", "-v", ksFile+":"+ksFile, - "--network", "supernets2", + "--network", "xgon", dacNodeContainer, "/bin/sh", "-c", - "/app/supernets2-data-availability run --cfg /app/config.json", + "/app/xgon-data-availability run --cfg /app/config.json", ) out, err := cmd.CombinedOutput() require.NoError(t, err, string(out)) + log.Infof("DAC node %d started", m.i) time.Sleep(time.Second * 5) } diff --git a/test/e2e/debug_shared.go b/test/e2e/debug_shared.go index d93da37765..e086994df2 100644 --- a/test/e2e/debug_shared.go +++ b/test/e2e/debug_shared.go @@ -555,7 +555,7 @@ func saveTraceResultToFile(t *testing.T, name, network string, signedTx *ethType if skip { return } - const path = "/Users/thiago/github.com/0xPolygonHermez/zkevm-node/dist/%v.json" + const path = "/Users/thiago/github.com/okx/xgon-node/dist/%v.json" sanitizedFileName := strings.ReplaceAll(name+"_"+network, " ", "_") filePath := fmt.Sprintf(path, sanitizedFileName) b, _ := signedTx.MarshalBinary() diff --git a/test/e2e/ethtransfer_test.go b/test/e2e/ethtransfer_test.go index f30f49c18b..582b1102b0 100644 --- a/test/e2e/ethtransfer_test.go +++ b/test/e2e/ethtransfer_test.go @@ -21,7 +21,7 @@ func TestEthTransfer(t *testing.T) { } ctx := context.Background() - //defer func() { require.NoError(t, operations.Teardown()) }() + defer func() { require.NoError(t, operations.Teardown()) }() err := operations.Teardown() require.NoError(t, err) @@ -38,6 +38,7 @@ func TestEthTransfer(t *testing.T) { // Load eth client client, err := ethclient.Dial(operations.DefaultL2NetworkURL) require.NoError(t, err) + // Send txs nTxs := 10 amount := big.NewInt(10000) diff --git a/test/e2e/forced_batches_test.go b/test/e2e/forced_batches_test.go index 88808db20c..2d6324e3fd 100644 --- a/test/e2e/forced_batches_test.go +++ b/test/e2e/forced_batches_test.go @@ -126,7 +126,6 @@ func sendForcedBatch(t *testing.T, txs []byte, opsman *operations.Manager) (*sta auth, err := operations.GetAuth(operations.DefaultSequencerPrivateKey, operations.DefaultL1ChainID) require.NoError(t, err) - log.Info("Using address: ", auth.From) num, err := zkEvm.LastForceBatch(&bind.CallOpts{Pending: false}) diff --git a/test/e2e/gasless_test.go b/test/e2e/gasless_test.go deleted file mode 100644 index b2eea24ee0..0000000000 --- a/test/e2e/gasless_test.go +++ /dev/null @@ -1,92 +0,0 @@ -package e2e - -import ( - "context" - "math/big" - "os/exec" - "testing" - "time" - - "github.com/0xPolygonHermez/zkevm-node/log" - "github.com/0xPolygonHermez/zkevm-node/test/operations" - "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/stretchr/testify/require" -) - -func TestEthTransferGasless(t *testing.T) { - if testing.Short() { - t.Skip() - } - // Edit config - const path = "../../test/config/test.node.config.toml" - require.NoError(t, - exec.Command("sed", "-i", "s/DefaultMinGasPriceAllowed = 1000000000/DefaultMinGasPriceAllowed = 0/g", path).Run(), - ) - require.NoError(t, - exec.Command("sed", "-i", "s/EnableL2SuggestedGasPricePolling = true/EnableL2SuggestedGasPricePolling = false/g", path).Run(), - ) - // Undo edit config - defer func() { - require.NoError(t, - exec.Command("sed", "-i", "s/DefaultMinGasPriceAllowed = 0/DefaultMinGasPriceAllowed = 1000000000/g", path).Run(), - ) - require.NoError(t, - exec.Command("sed", "-i", "s/EnableL2SuggestedGasPricePolling = false/EnableL2SuggestedGasPricePolling = true/g", path).Run(), - ) - }() - - ctx := context.Background() - defer func() { require.NoError(t, operations.Teardown()) }() - - err := operations.Teardown() - require.NoError(t, err) - opsCfg := operations.GetDefaultOperationsConfig() - opsCfg.State.MaxCumulativeGasUsed = 80000000000 - opsman, err := operations.NewManager(ctx, opsCfg) - require.NoError(t, err) - err = opsman.Setup() - require.NoError(t, err) - time.Sleep(5 * time.Second) - // Load account with balance on local genesis - pk, err := crypto.GenerateKey() - require.NoError(t, err) - auth, err := bind.NewKeyedTransactorWithChainID(pk, big.NewInt(0).SetUint64(operations.DefaultL2ChainID)) - require.NoError(t, err) - // Load eth client - client, err := ethclient.Dial(operations.DefaultL2NetworkURL) - require.NoError(t, err) - // Send txs - nTxs := 10 - amount := big.NewInt(0) - toAddress := common.HexToAddress("0x70997970C51812dc3A010C7d01b50e0d17dc79C8") - senderBalance, err := client.BalanceAt(ctx, auth.From, nil) - require.NoError(t, err) - senderNonce, err := client.PendingNonceAt(ctx, auth.From) - require.NoError(t, err) - - log.Infof("Receiver Addr: %v", toAddress.String()) - log.Infof("Sender Addr: %v", auth.From.String()) - log.Infof("Sender Balance: %v", senderBalance.String()) - log.Infof("Sender Nonce: %v", senderNonce) - - gasLimit, err := client.EstimateGas(ctx, ethereum.CallMsg{From: auth.From, To: &toAddress, Value: amount}) - require.NoError(t, err) - - gasPrice := big.NewInt(0) - nonce, err := client.PendingNonceAt(ctx, auth.From) - require.NoError(t, err) - - txs := make([]*types.Transaction, 0, nTxs) - for i := 0; i < nTxs; i++ { - tx := types.NewTransaction(nonce+uint64(i), toAddress, amount, gasLimit, gasPrice, nil) - txs = append(txs, tx) - } - - _, err = operations.ApplyL2Txs(ctx, txs, auth, client, operations.VerifiedConfirmationLevel) - require.NoError(t, err) -} diff --git a/test/e2e/state_test.go b/test/e2e/state_test.go index 38dabedb34..c5771d979d 100644 --- a/test/e2e/state_test.go +++ b/test/e2e/state_test.go @@ -43,6 +43,7 @@ func TestStateTransition(t *testing.T) { SenderAddress: testCase.SequencerAddress, LastBatchVirtualizationTimeMaxWaitPeriod: "5s", WaitPeriodSendSequence: "5s", + MaxBatchesForL1: 10, MaxTxSizeForL1: 131072, PrivateKey: testCase.SequencerPrivateKey, }, diff --git a/test/e2e/uniswap_test.go b/test/e2e/uniswap_test.go index 73e69c4b6c..cfb58d7fca 100644 --- a/test/e2e/uniswap_test.go +++ b/test/e2e/uniswap_test.go @@ -42,6 +42,7 @@ func TestUniswap(t *testing.T) { SenderAddress: "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", LastBatchVirtualizationTimeMaxWaitPeriod: "5s", WaitPeriodSendSequence: "5s", + MaxBatchesForL1: 10, MaxTxSizeForL1: 131072, PrivateKey: "0x28b2b0318721be8c8339199172cd7cc8f5e273800a35616ec893083a4b32c02e", }, diff --git a/test/operations/manager.go b/test/operations/manager.go index 5f197f27e7..961f5585b1 100644 --- a/test/operations/manager.go +++ b/test/operations/manager.go @@ -33,16 +33,17 @@ const ( // Public shared const ( - DefaultSequencerAddress = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" - DefaultSequencerPrivateKey = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" - DefaultSequencerBalance = 400000 - DefaultMaxCumulativeGasUsed = 800000 - DefaultL1ZkEVMSmartContract = "0x610178dA211FEF7D417bC0e6FeD39F05609AD788" - DefaultL1NetworkURL = "http://localhost:8545" - DefaultL1NetworkWebSocketURL = "ws://localhost:8546" - DefaultL1ChainID uint64 = 1337 - - DefaultL1DataCommitteeContract = "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6" + DefaultSequencerAddress = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + DefaultSequencerPrivateKey = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + DefaultSequencerBalance = 400000 + DefaultMaxCumulativeGasUsed = 800000 + DefaultL1DataCommitteeContract = "0x6Ae5b0863dBF3477335c0102DBF432aFf04ceb22" + DefaultL1ZkEVMSmartContract = "0x0D9088C72Cd4F08e9dDe474D8F5394147f64b22C" + DefaultL1NetworkURL = "http://localhost:8545" + DefaultL1NetworkWebSocketURL = "ws://localhost:8546" + DefaultL1ChainID uint64 = 1337 + DefaultL1AdminAddress = "0x2ecf31ece36ccac2d3222a303b1409233ecbb225" + DefaultL1AdminPrivateKey = "0xde3ca643a52f5543e84ba984c4419ff40dbabd0e483c31c1d09fee8168d68e38" DefaultL2NetworkURL = "http://localhost:8123" PermissionlessL2NetworkURL = "http://localhost:8125" @@ -53,7 +54,8 @@ const ( DefaultWaitPeriodSendSequence = "15s" DefaultLastBatchVirtualizationTimeMaxWaitPeriod = "10s" - MaxBatchesForL1 uint64 = 131072 + MaxBatchesForL1 uint64 = 10 + MaxTxSizeForL1 uint64 = 131072 ) var ( @@ -70,6 +72,7 @@ var ( type SequenceSenderConfig struct { WaitPeriodSendSequence string LastBatchVirtualizationTimeMaxWaitPeriod string + MaxBatchesForL1 uint64 MaxTxSizeForL1 uint64 SenderAddress string PrivateKey string @@ -155,7 +158,7 @@ func (m *Manager) SetGenesisAccountsBalance(genesisAccounts map[string]big.Int) func (m *Manager) SetGenesis(genesisActions []*state.GenesisAction) error { genesisBlock := state.Block{ - BlockNumber: 102, + BlockNumber: 231, BlockHash: state.ZeroHash, ParentHash: state.ZeroHash, ReceivedAt: time.Now(), @@ -192,7 +195,7 @@ func (m *Manager) SetForkID(forkID uint64) error { ToBatchNumber: math.MaxUint64, ForkId: forkID, Version: "forkID", - BlockNumber: 102, + BlockNumber: 231, } err = m.st.AddForkIDInterval(m.ctx, fID, dbTx) @@ -624,7 +627,8 @@ func GetDefaultOperationsConfig() *Config { SequenceSender: &SequenceSenderConfig{ WaitPeriodSendSequence: DefaultWaitPeriodSendSequence, LastBatchVirtualizationTimeMaxWaitPeriod: DefaultWaitPeriodSendSequence, - MaxTxSizeForL1: MaxBatchesForL1, + MaxBatchesForL1: MaxBatchesForL1, + MaxTxSizeForL1: MaxTxSizeForL1, SenderAddress: DefaultSequencerAddress, PrivateKey: DefaultSequencerPrivateKey}, } diff --git a/test/scripts/cmd/dependencies/images_test.go b/test/scripts/cmd/dependencies/images_test.go index 71e42a03b9..6599e1295b 100644 --- a/test/scripts/cmd/dependencies/images_test.go +++ b/test/scripts/cmd/dependencies/images_test.go @@ -36,7 +36,7 @@ services: zkevm-node: image: zkevm-node - zkevm-mock-l1-network: + xgon-mock-l1-network: image: imageorg/imagerepo@sha256:f7bc95017b64a6dee98dd2e3a98cbea8c715de137d0f599b1b16f683c2dae955 zkevm-mock-prover: image: hezprover @@ -153,7 +153,7 @@ services: description: "multiple container with matching image and existing digest", initialFileContents: `version: '3' services: - zkevm-mock-l1-network: + xgon-mock-l1-network: image: imageorg/networkImagerepo@sha256:oldDigest zkevm-node: image: imageorg/imagerepo@sha256:oldDigest @@ -164,7 +164,7 @@ services: newDigest: "sha256:newDigest", expectedFinalFileContents: `version: '3' services: - zkevm-mock-l1-network: + xgon-mock-l1-network: image: imageorg/networkImagerepo@sha256:oldDigest zkevm-node: image: imageorg/imagerepo@sha256:newDigest diff --git a/test/scripts/cmd/main.go b/test/scripts/cmd/main.go index 4e5477d45e..5c67293c50 100644 --- a/test/scripts/cmd/main.go +++ b/test/scripts/cmd/main.go @@ -13,7 +13,7 @@ const ( func main() { app := cli.NewApp() - app.Name = "zkevm-node-scripts" + app.Name = "xgon-node-scripts" app.Commands = []*cli.Command{ { Name: "updatedeps", diff --git a/test/scripts/sendForcedBatch/README.md b/test/scripts/sendForcedBatch/README.md index c12d1eaca4..be54a2530d 100644 --- a/test/scripts/sendForcedBatch/README.md +++ b/test/scripts/sendForcedBatch/README.md @@ -1,5 +1,5 @@ Command: ``` -go run main.go send --url http://localhost:8545 --smc 0x610178dA211FEF7D417bC0e6FeD39F05609AD788 +go run main.go send --url http://localhost:8545 --smc 0x0D9088C72Cd4F08e9dDe474D8F5394147f64b22C ``` \ No newline at end of file diff --git a/test/scripts/sequenceForcedBatch/README.md b/test/scripts/sequenceForcedBatch/README.md index 816317a7b2..924c270106 100644 --- a/test/scripts/sequenceForcedBatch/README.md +++ b/test/scripts/sequenceForcedBatch/README.md @@ -1,5 +1,5 @@ Command: ``` -go run ./scripts/sequenceForcedBatch/main.go send --url http://localhost:8545 --smc 0x610178dA211FEF7D417bC0e6FeD39F05609AD788 --ger 0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5 -tx 0x -t 1674730229 +go run ./scripts/sequenceForcedBatch/main.go send --url http://localhost:8545 --smc 0x0D9088C72Cd4F08e9dDe474D8F5394147f64b22C --ger 0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5 -tx 0x -t 1674730229 ``` \ No newline at end of file