diff --git a/package.json b/package.json index cf1aa0a6..2fdc76ff 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@0xpolygonhermez/zkevm-commonjs", "description": "Javascript library implementing common utilities for zkevm", - "version": "0.5.0.0", + "version": "0.5.0.1", "main": "index.js", "scripts": { "setup": "npm i", diff --git a/src/processor.js b/src/processor.js index 99660592..1ae8eb38 100644 --- a/src/processor.js +++ b/src/processor.js @@ -32,6 +32,8 @@ module.exports = class Processor { * @param {Number} timestamp - Timestamp of the batch * @param {Number} chainID - L2 chainID * @param {Object} vm - vm instance + * @param {Object} options - batch options + * @param {Bool} options.skipUpdateSystemStorage Skips updates on system smrt contract at the end of processable transactions */ constructor( db, @@ -45,6 +47,7 @@ module.exports = class Processor { timestamp, chainID, vm, + options, ) { this.db = db; this.newNumBatch = numBatch; @@ -76,6 +79,7 @@ module.exports = class Processor { this.evmSteps = []; this.updatedAccounts = {}; this.isLegacyTx = false; + this.options = options; } /** @@ -195,6 +199,7 @@ module.exports = class Processor { const newStorageEntry = {}; const globalExitRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [smtUtils.h4toString(this.globalExitRoot), Constants.GLOBAL_EXIT_ROOT_STORAGE_POS]); newStorageEntry[globalExitRootPos] = this.timestamp; + this.currentStateRoot = await stateUtils.setContractStorage( Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2, this.smt, @@ -470,6 +475,8 @@ module.exports = class Processor { * Updates system storage with new state root after finishing transaction */ async _updateSystemStorage() { + if (this.options.skipUpdateSystemStorage) return; + // Set system addres storage with updated values const lastTxCount = await stateUtils.getContractStorage( Constants.ADDRESS_SYSTEM, diff --git a/src/zkevm-db.js b/src/zkevm-db.js index 152e11c2..646adca5 100644 --- a/src/zkevm-db.js +++ b/src/zkevm-db.js @@ -42,8 +42,10 @@ class ZkEVMDB { * @param {String} sequencerAddress - ethereum address represented as hex * @param {Array[Field]} globalExitRoot - global exit root * @param {Scalar} maxNTx - Maximum number of transactions (optional) + * @param {Object} options - additional batch options + * @param {Bool} options.skipUpdateSystemStorage - Skips updates on system smrt contract at the end of processable transactions */ - async buildBatch(timestamp, sequencerAddress, globalExitRoot, maxNTx = Constants.DEFAULT_MAX_TX) { + async buildBatch(timestamp, sequencerAddress, globalExitRoot, maxNTx = Constants.DEFAULT_MAX_TX, options = {}) { return new Processor( this.db, this.lastBatch + 1, @@ -56,6 +58,7 @@ class ZkEVMDB { timestamp, this.chainID, clone(this.vm), + options, ); } @@ -227,9 +230,9 @@ class ZkEVMDB { dataVerify.inputSnark = `0x${Scalar.toString(await calculateSnarkInput( dataVerify.oldStateRoot, dataVerify.newStateRoot, + dataVerify.newLocalExitRoot, dataVerify.oldAccInputHash, dataVerify.newAccInputHash, - dataVerify.newLocalExitRoot, dataVerify.oldNumBatch, dataVerify.newNumBatch, dataVerify.chainID, diff --git a/test/helpers/test-vectors/zkevm-db/recursive.json b/test/helpers/test-vectors/zkevm-db/recursive.json index 92c0b9f8..00fd5836 100644 --- a/test/helpers/test-vectors/zkevm-db/recursive.json +++ b/test/helpers/test-vectors/zkevm-db/recursive.json @@ -85,6 +85,6 @@ "finalLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "finalAccInputHash": "0x87f958227c38bcf883025f5fda2dee19460cff48ca3c4d48d3a48f55c1258e60", "finalNumBatch": 2, - "inputSnark": "0x2cd31ede38a42ee7034bf454c07f843db6b20cc0bbac092f3b6a4df2ff037877" + "inputSnark": "0x0aef7431c3060a724238693fea11a846f2d71827f5f64fa24b1dd72b27f8681d" } ] \ No newline at end of file diff --git a/tools/fill-genesis/create-genesis.js b/tools/fill-genesis/create-genesis.js deleted file mode 100644 index 00532f32..00000000 --- a/tools/fill-genesis/create-genesis.js +++ /dev/null @@ -1,248 +0,0 @@ -/* eslint-disable global-require */ -/* eslint-disable import/no-dynamic-require */ -/* eslint-disable no-unused-expressions */ -/* eslint-disable no-console */ -/* eslint-disable multiline-comment-style */ -/* eslint-disable no-restricted-syntax */ -/* eslint-disable no-await-in-loop */ -/* eslint-disable guard-for-in */ -/* eslint-disable import/no-extraneous-dependencies */ - -const { Scalar } = require('ffjavascript'); -const fs = require('fs'); - -const ethers = require('ethers'); -const { - Address, -} = require('ethereumjs-util'); -const { defaultAbiCoder } = require('@ethersproject/abi'); -const path = require('path'); - -const artifactsPath = path.join(__dirname, '../../test/artifacts/contracts'); - -const { argv } = require('yargs'); -const contractsPolygonHermez = require('@0xpolygonhermez/contracts-zkevm'); -const { - MemDB, ZkEVMDB, getPoseidon, processorUtils, smtUtils, Constants, stateUtils, -} = require('../../index'); - -// Example of use: node create-genesis.js --gen genesis-gen.json --out genesis.json - -async function main() { - // load generator - const inputPath = (typeof argv.gen === 'undefined') ? undefined : argv.gen; - if (inputPath === undefined) { throw Error('Input genesis must be provided'); } - - // load output file - const outPath = (typeof argv.out === 'undefined') ? undefined : argv.out; - if (outPath === undefined) { throw Error('Output file must be specified'); } - - const genesisGenerator = require(path.join(__dirname, inputPath)); - - const genesisOutput = {}; - const poseidon = await getPoseidon(); - const { F } = poseidon; - - const genesisRoot = [F.zero, F.zero, F.zero, F.zero]; - const accHashInput = [F.zero, F.zero, F.zero, F.zero]; - const globalExitRoot = ethers.constants.HashZero; - - const { - genesis, - txs, - sequencerAddress, - timestamp, - defaultChainId, - } = genesisGenerator; - - const db = new MemDB(F); - - // create a zkEVMDB and build a batch - const zkEVMDB = await ZkEVMDB.newZkEVM( - db, - poseidon, - genesisRoot, - accHashInput, - genesis, - null, - null, - defaultChainId, - ); - - /* - * build, sign transaction and generate rawTxs - * rawTxs would be the calldata inserted in the contract - */ - const addressToContractName = {}; - const rawTxs = []; - for (let j = 0; j < txs.length; j++) { - const currentTx = txs[j]; - - const tx = { - to: currentTx.to || '0x', - nonce: currentTx.nonce, - value: processorUtils.toHexStringRlp(ethers.utils.parseUnits(currentTx.value, 'wei')), - gasLimit: currentTx.gasLimit, - gasPrice: processorUtils.toHexStringRlp(ethers.utils.parseUnits(currentTx.gasPrice, 'wei')), - chainId: currentTx.chainId, - data: currentTx.data || '0x', - }; - - // Contract deployment from tx - let bytecode; let - abi; - if (contractsPolygonHermez[currentTx.contractName]) { - ({ bytecode, abi } = contractsPolygonHermez[currentTx.contractName]); - } else { - ({ bytecode, abi } = require(`${artifactsPath}/${currentTx.contractName}.sol/${currentTx.contractName}.json`)); - } - - if (currentTx.function) { - const interfaceContract = new ethers.utils.Interface(abi); - tx.data = interfaceContract.encodeFunctionData(currentTx.function, currentTx.paramsFunction); - } else { - if (currentTx.paramsDeploy) { - const params = defaultAbiCoder.encode(currentTx.paramsDeploy.types, currentTx.paramsDeploy.values); - tx.data = bytecode + params.slice(2); - } else { - tx.data = bytecode; - } - const addressContract = await ethers.utils.getContractAddress( - { from: currentTx.from, nonce: currentTx.nonce }, - ); - addressToContractName[addressContract.toLowerCase()] = currentTx.contractName; - } - - let customRawTx; - const address = genesis.find((o) => o.address === currentTx.from); - const wallet = new ethers.Wallet(address.pvtKey); - if (tx.chainId === 0) { - const signData = ethers.utils.RLP.encode([ - processorUtils.toHexStringRlp(Scalar.e(tx.nonce)), - processorUtils.toHexStringRlp(tx.gasPrice), - processorUtils.toHexStringRlp(tx.gasLimit), - processorUtils.toHexStringRlp(tx.to), - processorUtils.toHexStringRlp(tx.value), - processorUtils.toHexStringRlp(tx.data), - processorUtils.toHexStringRlp(tx.chainId), - '0x', - '0x', - ]); - const digest = ethers.utils.keccak256(signData); - const signingKey = new ethers.utils.SigningKey(address.pvtKey); - const signature = signingKey.signDigest(digest); - const r = signature.r.slice(2).padStart(64, '0'); // 32 bytes - const s = signature.s.slice(2).padStart(64, '0'); // 32 bytes - const v = (signature.v).toString(16).padStart(2, '0'); // 1 bytes - customRawTx = signData.concat(r).concat(s).concat(v); - } else { - const rawTxEthers = await wallet.signTransaction(tx); - customRawTx = processorUtils.rawTxToCustomRawTx(rawTxEthers); - } - rawTxs.push(customRawTx); - } - const batch = await zkEVMDB.buildBatch(timestamp, sequencerAddress, smtUtils.stringToH4(globalExitRoot)); - for (let j = 0; j < rawTxs.length; j++) { - batch.addRawTx(rawTxs[j]); - } - - // execute the transactions added to the batch - await batch.executeTxs(); - // consolidate state - await zkEVMDB.consolidate(batch); - - // clean address 0 batch, clean globalExitRoot - let newRoot = batch.currentStateRoot; - - // clean address 0 state root - const batchNumber = 0; - const stateRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [batchNumber, Constants.STATE_ROOT_STORAGE_POS]); - let newStorageEntry = { [Constants.LAST_TX_STORAGE_POS]: '0x00' }; - newStorageEntry[stateRootPos] = '0x00'; - - newRoot = await stateUtils.setContractStorage( - Constants.ADDRESS_SYSTEM, - batch.smt, - newRoot, - newStorageEntry, - ); - - // cleanglobal exit root - newStorageEntry = {}; - const globalExitRootPos = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [ethers.constants.HashZero, Constants.GLOBAL_EXIT_ROOT_STORAGE_POS]); - newStorageEntry[globalExitRootPos] = 0; - newRoot = await stateUtils.setContractStorage( - Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2, - batch.smt, - newRoot, - newStorageEntry, - ); - - const updatedAccounts = batch.getUpdatedAccountsBatch(); - const currentVM = batch.vm; - const accountsOutput = []; - - for (const item in updatedAccounts) { - const address = item; - const account = updatedAccounts[address]; - const currentAccountOutput = {}; - currentAccountOutput.balance = account.balance.toString(); - currentAccountOutput.nonce = account.nonce.toString(); - currentAccountOutput.address = address; - - // If account is a contract, update storage and bytecode - if (account.isContract()) { - const addressInstance = Address.fromString(address); - const smCode = await currentVM.stateManager.getContractCode(addressInstance); - const sto = await currentVM.stateManager.dumpStorage(addressInstance); - const storage = {}; - const keys = Object.keys(sto).map((v) => `0x${v}`); - const values = Object.values(sto).map((v) => `0x${v}`); - for (let k = 0; k < keys.length; k++) { - storage[keys[k]] = ethers.utils.RLP.decode(values[k]); - } - - currentAccountOutput.bytecode = `0x${smCode.toString('hex')}`; - currentAccountOutput.storage = storage; - currentAccountOutput.contractName = addressToContractName[address]; - } else if (address !== Constants.ADDRESS_SYSTEM - && address.toLowerCase() !== Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2.toLowerCase()) { - currentAccountOutput.pvtKey = (genesis.find((o) => o.address.toLowerCase() === address.toLowerCase())).pvtKey; - } - accountsOutput.push(currentAccountOutput); - } - - // add accounts that has not been used - for (let i = 0; i < genesis.length; i++) { - const item = genesis[i]; - if (typeof updatedAccounts[item.address.toLowerCase()] === 'undefined') { - accountsOutput.push(item); - } - } - - genesisOutput.root = smtUtils.h4toString(newRoot); - genesisOutput.genesis = accountsOutput; - const genesisOutputPath = path.join(__dirname, outPath); - await fs.writeFileSync(genesisOutputPath, JSON.stringify(genesisOutput, null, 2)); - - if (argv.update) { - const updatePath = (typeof argv.update === 'undefined') ? undefined : argv.update; - - if (!fs.existsSync(updatePath)) { - throw new Error('Update file does not exist'); - } - - const testVectors = JSON.parse(fs.readFileSync(updatePath)); - testVectors[0].genesis = genesisOutput.genesis; - testVectors[0].expectedOldRoot = genesisOutput.root; - await fs.writeFileSync(updatePath, JSON.stringify(testVectors, null, 2)); - } -} -// We recommend this pattern to be able to use async/await everywhere -// and properly handle errors. -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/tools/fill-genesis/genesis-gen.json b/tools/fill-genesis/genesis-gen.json deleted file mode 100644 index 5c6d7e4b..00000000 --- a/tools/fill-genesis/genesis-gen.json +++ /dev/null @@ -1,64 +0,0 @@ - -{ - "defaultChainId": 1000, - "sequencerAddress": "0xC949254d682D8c9ad5682521675b8F43b102aec4", - "genesis": [ - { - "address": "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988", - "pvtKey": "0x00", - "balance": "100000000000000000000000", - "nonce": "0" - }, - { - "address": "0xC949254d682D8c9ad5682521675b8F43b102aec4", - "pvtKey": "0xdfd01798f92667dbf91df722434e8fbe96af0211d4d1b82bbbbc8f1def7a814f", - "balance": "0", - "nonce": "0" - } - ], - "txs": [ - { - "from": "0xC949254d682D8c9ad5682521675b8F43b102aec4", - "nonce": 0, - "value": "0", - "gasLimit": 10000000, - "gasPrice": "0", - "chainId": 1000, - "paramsDeploy": { - "types": [ - "address" - ], - "values": [ - "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988" - ] - }, - "contractName": "GlobalExitRootManagerL2", - "reason": "" - }, - { - "from": "0xC949254d682D8c9ad5682521675b8F43b102aec4", - "nonce": 1, - "value": "0", - "gasLimit": 10000000, - "gasPrice": "0", - "chainId": 1000, - "contractName": "Bridge" - }, - { - "from": "0xC949254d682D8c9ad5682521675b8F43b102aec4", - "to": "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988", - "nonce": 2, - "value": "0", - "gasLimit": 10000000, - "gasPrice": "0", - "chainId": 1000, - "function": "initialize", - "paramsFunction": [ - 1, - "0xAE4bB80bE56B819606589DE61d5ec3b522EEB032" - ], - "contractName": "Bridge" - } - ], - "timestamp": 1944498031 -} diff --git a/tools/fill-genesis/genesis.json b/tools/fill-genesis/genesis.json deleted file mode 100644 index eaa952e8..00000000 --- a/tools/fill-genesis/genesis.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "root": "0x0ff5ce7f1ce0eda793ec264b9b147fe991fbf2ef840f7249eb8de9171df16555", - "genesis": [ - { - "balance": "0", - "nonce": "1", - "address": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220b6ba072419f510d5d5b9a55d9605786898f58415125e7e2ac3f699371fda0cbc64736f6c634300080f0033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" - }, - "contractName": "GlobalExitRootManagerL2" - }, - { - "balance": "100000000000000000000000", - "nonce": "2", - "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200f33d24b40d1e879f02496512d8e703a09704c5edf7d149259a9c3cf2b64250664736f6c634300080f0033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0x0000000000000000000000000000000000000000000000000000000000000042": "0x01", - "0x0000000000000000000000000000000000000000000000000000000000000046": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "0x0000000000000000000000000000000000000000000000000000000000000047": "0x61ba0248b0986c2480181c6e76b6adeeaa962483", - "0x0000000000000000000000000000000000000000000000000000000000000022": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5", - "0x0000000000000000000000000000000000000000000000000000000000000023": "0xb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30", - "0x0000000000000000000000000000000000000000000000000000000000000024": "0x21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85", - "0x0000000000000000000000000000000000000000000000000000000000000025": "0xe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344", - "0x0000000000000000000000000000000000000000000000000000000000000026": "0x0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d", - "0x0000000000000000000000000000000000000000000000000000000000000027": "0x887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968", - "0x0000000000000000000000000000000000000000000000000000000000000028": "0xffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83", - "0x0000000000000000000000000000000000000000000000000000000000000029": "0x9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af", - "0x000000000000000000000000000000000000000000000000000000000000002a": "0xcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0", - "0x000000000000000000000000000000000000000000000000000000000000002b": "0xf9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5", - "0x000000000000000000000000000000000000000000000000000000000000002c": "0xf8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892", - "0x000000000000000000000000000000000000000000000000000000000000002d": "0x3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c", - "0x000000000000000000000000000000000000000000000000000000000000002e": "0xc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb", - "0x000000000000000000000000000000000000000000000000000000000000002f": "0x5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc", - "0x0000000000000000000000000000000000000000000000000000000000000030": "0xda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2", - "0x0000000000000000000000000000000000000000000000000000000000000031": "0x2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0xe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0", - "0x0000000000000000000000000000000000000000000000000000000000000034": "0xb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0", - "0x0000000000000000000000000000000000000000000000000000000000000035": "0xc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2", - "0x0000000000000000000000000000000000000000000000000000000000000036": "0xf4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9", - "0x0000000000000000000000000000000000000000000000000000000000000037": "0x5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377", - "0x0000000000000000000000000000000000000000000000000000000000000038": "0x4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652", - "0x0000000000000000000000000000000000000000000000000000000000000039": "0xcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef", - "0x000000000000000000000000000000000000000000000000000000000000003a": "0x0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d", - "0x000000000000000000000000000000000000000000000000000000000000003b": "0xb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0", - "0x000000000000000000000000000000000000000000000000000000000000003c": "0x838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e", - "0x000000000000000000000000000000000000000000000000000000000000003d": "0x662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e", - "0x000000000000000000000000000000000000000000000000000000000000003e": "0x388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322", - "0x000000000000000000000000000000000000000000000000000000000000003f": "0x93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735", - "0x0000000000000000000000000000000000000000000000000000000000000040": "0x8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9" - }, - "contractName": "Bridge" - }, - { - "balance": "0", - "nonce": "3", - "address": "0xc949254d682d8c9ad5682521675b8f43b102aec4", - "pvtKey": "0xdfd01798f92667dbf91df722434e8fbe96af0211d4d1b82bbbbc8f1def7a814f" - }, - { - "balance": "0", - "nonce": "0", - "address": "0x0000000000000000000000000000000000000000" - }, - { - "balance": "0", - "nonce": "1", - "address": "0x61ba0248b0986c2480181c6e76b6adeeaa962483", - "bytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01" - } - } - ] -} \ No newline at end of file diff --git a/tools/fill-genesis/generate-claim-exit-root.js b/tools/generate-claim/generate-claim-exit-root.js similarity index 100% rename from tools/fill-genesis/generate-claim-exit-root.js rename to tools/generate-claim/generate-claim-exit-root.js