diff --git a/README.md b/README.md index 63d1415..72eceb2 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,18 @@ yarn install yarn test:e2e ``` +### Running Example Scripts on Testnet +1. Rename .env.example to .env and fill in the required environment variables. +2. Run the example script for Base/EVM -> Aptos +```sh +yarn receive-message-example +``` +3. Run the example script for Aptos -> Base/EVM +```sh +yarn deposit-for-burn-example +``` + + ## Deployment 1. Create a deployer keypair and fund it with APT diff --git a/cspell.json b/cspell.json index e084de5..ee39e34 100644 --- a/cspell.json +++ b/cspell.json @@ -28,5 +28,5 @@ "ignoreRegExpList": [ "error_codes" ], - "ignorePaths": ["aptos-core", "stablecoin-aptos", "evm-cctp-contracts"] + "ignorePaths": ["aptos-core", "stablecoin-aptos", "evm-cctp-contracts", "typescript/example/abi"] } diff --git a/package.json b/package.json index db70117..bf36f50 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,9 @@ "calculate-deployment-addresses": "yarn ts-node typescript/aptos/deploy/index.ts calculate-deployment-addresses", "deploy": "yarn ts-node typescript/aptos/deploy/index.ts deploy", "upgrade-pkg": "yarn ts-node typescript/aptos/deploy/index.ts upgrade", - "verify-pkg": "yarn ts-node typescript/aptos/deploy/index.ts verify-pkg" + "verify-pkg": "yarn ts-node typescript/aptos/deploy/index.ts verify-pkg", + "deposit-for-burn-example": "node --env-file=typescript/.env -r ts-node/register typescript/example/depositForBurn.ts", + "receive-message-example": "node --env-file=typescript/.env -r ts-node/register typescript/example/receiveMessage.ts" }, "dependencies": { "@aptos-labs/ts-sdk": "^1.28.0", @@ -49,4 +51,4 @@ "node": "20.14.0", "yarn": "1.22.22" } -} \ No newline at end of file +} diff --git a/typescript/.env.example b/typescript/.env.example new file mode 100644 index 0000000..fd945f9 --- /dev/null +++ b/typescript/.env.example @@ -0,0 +1,30 @@ +# Copyright 2024 Circle Internet Financial, LTD. All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +################################## +# Key & Address Configurations # +################################## + +EVM_PRIVATE_KEY= +APTOS_PRIVATE_KEY= + +################################## +# EVM Contract Configurations # +################################## + +EVM_RPC_URL=https://base-sepolia.gateway.tenderly.co + + diff --git a/typescript/example/abi/FiatTokenV2_1.json b/typescript/example/abi/FiatTokenV2_1.json new file mode 100644 index 0000000..dc19aee --- /dev/null +++ b/typescript/example/abi/FiatTokenV2_1.json @@ -0,0 +1,3893 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "authorizer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + } + ], + "name": "AuthorizationCanceled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "authorizer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + } + ], + "name": "AuthorizationUsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "Blacklisted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newBlacklister", + "type": "address" + } + ], + "name": "BlacklisterChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "burner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Burn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newMasterMinter", + "type": "address" + } + ], + "name": "MasterMinterChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "minterAllowedAmount", + "type": "uint256" + } + ], + "name": "MinterConfigured", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldMinter", + "type": "address" + } + ], + "name": "MinterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Pause", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "PauserChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newRescuer", + "type": "address" + } + ], + "name": "RescuerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "UnBlacklisted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Unpause", + "type": "event" + }, + { + "inputs": [], + "name": "CANCEL_AUTHORIZATION_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PERMIT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RECEIVE_WITH_AUTHORIZATION_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TRANSFER_WITH_AUTHORIZATION_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "authorizer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + } + ], + "name": "authorizationState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "blacklist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "blacklister", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "authorizer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "cancelAuthorization", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minterAllowedAmount", + "type": "uint256" + } + ], + "name": "configureMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "currency", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "decrement", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "increment", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "tokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "tokenSymbol", + "type": "string" + }, + { + "internalType": "string", + "name": "tokenCurrency", + "type": "string" + }, + { + "internalType": "uint8", + "name": "tokenDecimals", + "type": "uint8" + }, + { + "internalType": "address", + "name": "newMasterMinter", + "type": "address" + }, + { + "internalType": "address", + "name": "newPauser", + "type": "address" + }, + { + "internalType": "address", + "name": "newBlacklister", + "type": "address" + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newName", + "type": "string" + } + ], + "name": "initializeV2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "lostAndFound", + "type": "address" + } + ], + "name": "initializeV2_1", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "isBlacklisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "masterMinter", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "minterAllowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauser", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validBefore", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "receiveWithAuthorization", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "rescueERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rescuer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validBefore", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "transferWithAuthorization", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "unBlacklist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newBlacklister", + "type": "address" + } + ], + "name": "updateBlacklister", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newMasterMinter", + "type": "address" + } + ], + "name": "updateMasterMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauser", + "type": "address" + } + ], + "name": "updatePauser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newRescuer", + "type": "address" + } + ], + "name": "updateRescuer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": { + "object": "0x60806040526001805460ff60a01b191690556000600b553480156200002357600080fd5b506200002f3362000035565b62000057565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b61548280620000676000396000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c80637f2eecc3116101b2578063b2118a8d116100f9578063e3ee160e116100a2578063ef55bec61161007c578063ef55bec614610cc1578063f2fde38b14610d2d578063f9f92be414610d60578063fe575a8714610d9357610336565b8063e3ee160e14610c14578063e5a6b10f14610c80578063e94a010214610c8857610336565b8063d608ea64116100d3578063d608ea6414610b61578063d916948714610bd1578063dd62ed3e14610bd957610336565b8063b2118a8d14610ab8578063bd10243014610afb578063d505accf14610b0357610336565b8063a0cc6a681161015b578063aa20e1e411610135578063aa20e1e414610a1f578063aa271e1a14610a52578063ad38bf2214610a8557610336565b8063a0cc6a68146109a5578063a457c2d7146109ad578063a9059cbb146109e657610336565b80638da5cb5b1161018c5780638da5cb5b1461098d57806395d89b41146109955780639fd0506d1461099d57610336565b80637f2eecc31461094a5780638456cb59146109525780638a6db9c31461095a57610336565b80633644e515116102815780634e44d9561161022a5780635a049a70116102045780635a049a701461088e5780635c975abb146108dc57806370a08231146108e45780637ecebe001461091757610336565b80634e44d9561461081a57806354fd4d5014610853578063554bab3c1461085b57610336565b80633f4ba83a1161025b5780633f4ba83a146107bc57806340c10f19146107c457806342966c68146107fd57610336565b80633644e5151461077357806338a631831461077b578063395093511461078357610336565b80632fc81e09116102e3578063313ce567116102bd578063313ce567146105385780633357162b1461055657806335d99f351461074257610336565b80632fc81e09146104ca5780633092afd5146104fd57806330adf81f1461053057610336565b80631a895266116103145780631a8952661461041f57806323b872dd146104545780632ab600451461049757610336565b806306fdde031461033b578063095ea7b3146103b857806318160ddd14610405575b600080fd5b610343610dc6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561037d578181015183820152602001610365565b50505050905090810190601f1680156103aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103f1600480360360408110156103ce57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e72565b604080519115158252519081900360200190f35b61040d610fff565b60408051918252519081900360200190f35b6104526004803603602081101561043557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611005565b005b6103f16004803603606081101561046a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356110e9565b610452600480360360208110156104ad57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113ef565b610452600480360360208110156104e057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611550565b6103f16004803603602081101561051357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115ce565b61040d6116c7565b6105406116eb565b6040805160ff9092168252519081900360200190f35b610452600480360361010081101561056d57600080fd5b81019060208101813564010000000081111561058857600080fd5b82018360208201111561059a57600080fd5b803590602001918460018302840111640100000000831117156105bc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561060f57600080fd5b82018360208201111561062157600080fd5b8035906020019184600183028401116401000000008311171561064357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561069657600080fd5b8201836020820111156106a857600080fd5b803590602001918460018302840111640100000000831117156106ca57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050813560ff16925050602081013573ffffffffffffffffffffffffffffffffffffffff908116916040810135821691606082013581169160800135166116f4565b61074a611a36565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61040d611a52565b61074a611a58565b6103f16004803603604081101561079957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611a74565b610452611bf6565b6103f1600480360360408110156107da57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611cb9565b6104526004803603602081101561081357600080fd5b50356120ee565b6103f16004803603604081101561083057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356123a8565b61034361253b565b6104526004803603602081101561087157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612572565b610452600480360360a08110156108a457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060ff60408201351690606081013590608001356126d9565b6103f1612777565b61040d600480360360208110156108fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612798565b61040d6004803603602081101561092d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166127c0565b61040d6127e8565b61045261280c565b61040d6004803603602081101561097057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166128e6565b61074a61290e565b61034361292a565b61074a6129a3565b61040d6129bf565b6103f1600480360360408110156109c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356129e3565b6103f1600480360360408110156109fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612b65565b61045260048036036020811015610a3557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612ce7565b6103f160048036036020811015610a6857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612e4e565b61045260048036036020811015610a9b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612e79565b61045260048036036060811015610ace57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135612fe0565b61074a613076565b610452600480360360e0811015610b1957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135613092565b61045260048036036020811015610b7757600080fd5b810190602081018135640100000000811115610b9257600080fd5b820183602082011115610ba457600080fd5b80359060200191846001830284011164010000000083111715610bc657600080fd5b509092509050613238565b61040d613321565b61040d60048036036040811015610bef57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516613345565b6104526004803603610120811015610c2b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060808101359060a08101359060ff60c0820135169060e081013590610100013561337d565b610343613527565b6103f160048036036040811015610c9e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356135a0565b6104526004803603610120811015610cd857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060808101359060a08101359060ff60c0820135169060e08101359061010001356135d8565b61045260048036036020811015610d4357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16613775565b61045260048036036020811015610d7657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166138c8565b6103f160048036036020811015610da957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166139af565b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b820191906000526020600020905b815481529060010190602001808311610e4d57829003601f168201915b505050505081565b60015460009074010000000000000000000000000000000000000000900460ff1615610eff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615610f68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615610fe9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b610ff43386866139da565b506001949350505050565b600b5490565b60025473ffffffffffffffffffffffffffffffffffffffff163314611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806150dc602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f117e3210bb9aa7d9baff172026820255c6f6c30ba8999d1c2fd88e2848137c4e9190a250565b60015460009074010000000000000000000000000000000000000000900460ff161561117657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff16156111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859060ff1615611260576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859060ff16156112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152600a6020908152604080832033845290915290205485111561136a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151c86028913960400191505060405180910390fd5b611375878787613b21565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600a602090815260408083203384529091529020546113b09086613d4c565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600a60209081526040808320338452909152902055600193505050509392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461147557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061503a602a913960400191505060405180910390fd5b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe475e580d85111348e40d8ca33cfdd74c30fe1655c2d8537a13abc10065ffa5a90600090a250565b60125460ff1660011461156257600080fd5b30600090815260096020526040902054801561158357611583308383613b21565b505030600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00908116600117909155601280549091166002179055565b60085460009073ffffffffffffffffffffffffffffffffffffffff163314611641576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150b36029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000818152600c6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600d909152808220829055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a2506001919050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60065460ff1681565b60085474010000000000000000000000000000000000000000900460ff1615611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615243602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166117d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180615175602f913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316611840576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150116029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166118ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806151f0602e913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116611918576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806153566028913960400191505060405180910390fd5b875161192b9060049060208b0190614dc1565b50865161193f9060059060208a0190614dc1565b508551611953906007906020890190614dc1565b50600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8716179055600880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff87811691909117909255600180548216868416179055600280549091169184169190911790556119ed81613dc3565b5050600880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b600e5473ffffffffffffffffffffffffffffffffffffffff1690565b60015460009074010000000000000000000000000000000000000000900460ff1615611b0157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615611b6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615611beb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b610ff4338686613e0a565b60015473ffffffffffffffffffffffffffffffffffffffff163314611c66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806152e46022913960400191505060405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60015460009074010000000000000000000000000000000000000000900460ff1615611d4657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b336000908152600c602052604090205460ff16611dae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806151546021913960400191505060405180910390fd5b3360008181526003602052604090205460ff1615611e17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615611e98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614f806023913960400191505060405180910390fd5b60008411611f5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150646029913960400191505060405180910390fd5b336000908152600d602052604090205480851115611fc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806152b6602e913960400191505060405180910390fd5b600b54611fd39086613e54565b600b5573ffffffffffffffffffffffffffffffffffffffff86166000908152600960205260409020546120069086613e54565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600960205260409020556120368186613d4c565b336000818152600d6020908152604091829020939093558051888152905173ffffffffffffffffffffffffffffffffffffffff8a16937fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8928290030190a360408051868152905173ffffffffffffffffffffffffffffffffffffffff8816916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350600195945050505050565b60015474010000000000000000000000000000000000000000900460ff161561217857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b336000908152600c602052604090205460ff166121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806151546021913960400191505060405180910390fd5b3360008181526003602052604090205460ff1615612249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b33600090815260096020526040902054826122af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614f576029913960400191505060405180910390fd5b82811015612308576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061512e6026913960400191505060405180910390fd5b600b546123159084613d4c565b600b556123228184613d4c565b33600081815260096020908152604091829020939093558051868152905191927fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca592918290030190a260408051848152905160009133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050565b60015460009074010000000000000000000000000000000000000000900460ff161561243557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b60085473ffffffffffffffffffffffffffffffffffffffff1633146124a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150b36029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000818152600c6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055600d825291829020859055815185815291517f46980fca912ef9bcdbd36877427b6b90e860769f604e89c0e67720cece530d209281900390910190a250600192915050565b60408051808201909152600181527f3200000000000000000000000000000000000000000000000000000000000000602082015290565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125f857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612664576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614f046028913960400191505060405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fb80482a293ca2e013eda8683c9bd7fc8347cfdaeea5ede58cba46df502c2a60490600090a250565b60015474010000000000000000000000000000000000000000900460ff161561276357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6127708585858585613ecf565b5050505050565b60015474010000000000000000000000000000000000000000900460ff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526009602052604090205490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526011602052604090205490565b7fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de881565b60015473ffffffffffffffffffffffffffffffffffffffff16331461287c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806152e46022913960400191505060405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b73ffffffffffffffffffffffffffffffffffffffff166000908152600d602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b7f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226781565b60015460009074010000000000000000000000000000000000000000900460ff1615612a7057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615612ad9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615612b5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b610ff4338686614058565b60015460009074010000000000000000000000000000000000000000900460ff1615612bf257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615612c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615612cdc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b610ff4338686613b21565b60005473ffffffffffffffffffffffffffffffffffffffff163314612d6d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180615175602f913960400191505060405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fdb66dfa9c6b8f5226fe9aac7e51897ae8ee94ac31dc70bb6c9900b2574b707e690600090a250565b73ffffffffffffffffffffffffffffffffffffffff166000908152600c602052604090205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314612eff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612f6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806153ac6032913960400191505060405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fc67398012c111ce95ecb7429b933096c977380ee6c421175a71a4a4c6c88c06e90600090a250565b600e5473ffffffffffffffffffffffffffffffffffffffff163314613050576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806151a46024913960400191505060405180910390fd5b61307173ffffffffffffffffffffffffffffffffffffffff841683836140b4565b505050565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff161561311c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8716600090815260036020526040902054879060ff161561319d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716600090815260036020526040902054879060ff161561321e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b61322d89898989898989614141565b505050505050505050565b60085474010000000000000000000000000000000000000000900460ff168015613265575060125460ff16155b61326e57600080fd5b61327a60048383614e3f565b506132ef82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600181527f3200000000000000000000000000000000000000000000000000000000000000602082015291506142ea9050565b600f555050601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b7f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a159742981565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600a6020908152604080832093909416825291909152205490565b60015474010000000000000000000000000000000000000000900460ff161561340757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613488576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b61351a8b8b8b8b8b8b8b8b8b61435c565b5050505050505050505050565b6007805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152601060209081526040808320938352929052205460ff1690565b60015474010000000000000000000000000000000000000000900460ff161561366257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff16156136e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613764576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b61351a8b8b8b8b8b8b8b8b8b61449e565b60005473ffffffffffffffffffffffffffffffffffffffff1633146137fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116613867576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614fc96026913960400191505060405180910390fd5b6000546040805173ffffffffffffffffffffffffffffffffffffffff9283168152918316602083015280517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09281900390910190a16138c581613dc3565b50565b60025473ffffffffffffffffffffffffffffffffffffffff163314613938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806150dc602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b8559190a250565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff8316613a46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806152926024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614fef6022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8084166000818152600a6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316613b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061526d6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614ee16023913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260096020526040902054811115613c77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061508d6026913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260096020526040902054613ca79082613d4c565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600960205260408082209390935590841681522054613ce39082613e54565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526009602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082821115613dbd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600a60209081526040808320938616835292905220546130719084908490613e4f9085613e54565b6139da565b600082820183811015613ec857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b613ed985856145ab565b604080517f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a1597429602082015273ffffffffffffffffffffffffffffffffffffffff87168183018190526060828101889052835180840390910181526080909201909252600f54909190613f4d9086868686614639565b73ffffffffffffffffffffffffffffffffffffffff1614613fcf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8616600081815260106020908152604080832089845290915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055518792917f1cdd46ff242716cdaa72d159d339a485b3438398348d68f09d7c8c0a59353d8191a3505050505050565b6130718383613e4f846040518060600160405280602581526020016154286025913973ffffffffffffffffffffffffffffffffffffffff808a166000908152600a60209081526040808320938c168352929052205491906146ab565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261307190849061475c565b428410156141b057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a207065726d697420697320657870697265640000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff80881660008181526011602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c992810192909252818301849052938a1660608201526080810189905260a081019390935260c08084018890528151808503909101815260e09093019052600f546142539086868686614639565b73ffffffffffffffffffffffffffffffffffffffff16146142d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f454950323631323a20696e76616c6964207369676e6174757265000000000000604482015290519081900360640190fd5b6142e08888886139da565b5050505050505050565b8151602092830120815191830191909120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818601528082019390935260608301919091524660808301523060a0808401919091528151808403909101815260c09092019052805191012090565b61436889858888614834565b604080517f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a2267602082015273ffffffffffffffffffffffffffffffffffffffff808c16828401819052908b166060830152608082018a905260a0820189905260c0820188905260e080830188905283518084039091018152610100909201909252600f549091906143fb9086868686614639565b73ffffffffffffffffffffffffffffffffffffffff161461447d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6144878a866148f4565b6144928a8a8a613b21565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8816331461450c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061521e6025913960400191505060405180910390fd5b61451889858888614834565b604080517fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de8602082015273ffffffffffffffffffffffffffffffffffffffff808c16828401819052908b166060830152608082018a905260a0820189905260c0820188905260e080830188905283518084039091018152610100909201909252600f549091906143fb9086868686614639565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260106020908152604080832084845290915290205460ff1615614635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061537e602e913960400191505060405180910390fd5b5050565b8051602080830191909120604080517f1901000000000000000000000000000000000000000000000000000000000000818501526022810189905260428082019390935281518082039093018352606201905280519101206000906146a081878787614979565b979650505050505050565b60008184841115614754576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614719578181015183820152602001614701565b50505050905090810190601f1680156147465780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60606147be826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614b749092919063ffffffff16565b805190915015613071578080602001905160208110156147dd57600080fd5b5051613071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061532c602a913960400191505060405180910390fd5b81421161488c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614f2c602b913960400191505060405180910390fd5b8042106148e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154036025913960400191505060405180910390fd5b6148ee84846145ab565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260106020908152604080832085845290915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055518392917f98de503528ee59b575ef0c0a2576a82497bfc029a5685b209e9ec333479b10a591a35050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156149f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806153066026913960400191505060405180910390fd5b8360ff16601b14158015614a0c57508360ff16601c14155b15614a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614fa36026913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614abe573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116614b6b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45435265636f7665723a20696e76616c6964207369676e617475726500000000604482015290519081900360640190fd5b95945050505050565b6060614b838484600085614b8b565b949350505050565b606082471015614be6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806151086026913960400191505060405180910390fd5b614bef85614d3b565b614c5a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310614cc457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614c87565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614d26576040519150601f19603f3d011682016040523d82523d6000602084013e614d2b565b606091505b50915091506146a0828286614d41565b3b151590565b60608315614d50575081613ec8565b825115614d605782518084602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152845160248401528451859391928392604401919085019080838360008315614719578181015183820152602001614701565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614e0257805160ff1916838001178555614e2f565b82800160010185558215614e2f579182015b82811115614e2f578251825591602001919060010190614e14565b50614e3b929150614ecb565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614e9e578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555614e2f565b82800160010185558215614e2f579182015b82811115614e2f578235825591602001919060010190614eb0565b5b80821115614e3b5760008155600101614ecc56fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735061757361626c653a206e65772070617573657220697320746865207a65726f206164647265737346696174546f6b656e56323a20617574686f72697a6174696f6e206973206e6f74207965742076616c696446696174546f6b656e3a206275726e20616d6f756e74206e6f742067726561746572207468616e203046696174546f6b656e3a206d696e7420746f20746865207a65726f206164647265737345435265636f7665723a20696e76616c6964207369676e6174757265202776272076616c75654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737346696174546f6b656e3a206e65772070617573657220697320746865207a65726f2061646472657373526573637561626c653a206e6577207265736375657220697320746865207a65726f206164647265737346696174546f6b656e3a206d696e7420616d6f756e74206e6f742067726561746572207468616e203045524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636546696174546f6b656e3a2063616c6c6572206973206e6f7420746865206d61737465724d696e746572426c61636b6c69737461626c653a2063616c6c6572206973206e6f742074686520626c61636b6c6973746572416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c46696174546f6b656e3a206275726e20616d6f756e7420657863656564732062616c616e636546696174546f6b656e3a2063616c6c6572206973206e6f742061206d696e74657246696174546f6b656e3a206e6577206d61737465724d696e74657220697320746865207a65726f2061646472657373526573637561626c653a2063616c6c6572206973206e6f7420746865207265736375657245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636546696174546f6b656e3a206e657720626c61636b6c697374657220697320746865207a65726f206164647265737346696174546f6b656e56323a2063616c6c6572206d7573742062652074686520706179656546696174546f6b656e3a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737346696174546f6b656e3a206d696e7420616d6f756e742065786365656473206d696e746572416c6c6f77616e63655061757361626c653a2063616c6c6572206973206e6f74207468652070617573657245435265636f7665723a20696e76616c6964207369676e6174757265202773272076616c75655361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656446696174546f6b656e3a206e6577206f776e657220697320746865207a65726f206164647265737346696174546f6b656e56323a20617574686f72697a6174696f6e2069732075736564206f722063616e63656c6564426c61636b6c69737461626c653a206e657720626c61636b6c697374657220697320746865207a65726f2061646472657373426c61636b6c69737461626c653a206163636f756e7420697320626c61636b6c697374656446696174546f6b656e56323a20617574686f72697a6174696f6e206973206578706972656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ede6f670396d31636ff630735cf21ca2748aa20b529c1c926b1e2ed2d2406e9364736f6c634300060c0033", + "sourceMap": "1362:764:15:-:0;;;2106:26:9;;;-1:-1:-1;2106:26:9;;;-1:-1:-1;1932:33:7;;1362:764:15;;;;;;;;;-1:-1:-1;2223:20:8;2232:10;2223:8;:20::i;:::-;1362:764:15;;2493:79:8;2548:6;:17;;-1:-1:-1;2548:17:8;-1:-1:-1;2548:17:8;;;;;;;;;;2493:79::o;1362:764:15:-;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106103365760003560e01c80637f2eecc3116101b2578063b2118a8d116100f9578063e3ee160e116100a2578063ef55bec61161007c578063ef55bec614610cc1578063f2fde38b14610d2d578063f9f92be414610d60578063fe575a8714610d9357610336565b8063e3ee160e14610c14578063e5a6b10f14610c80578063e94a010214610c8857610336565b8063d608ea64116100d3578063d608ea6414610b61578063d916948714610bd1578063dd62ed3e14610bd957610336565b8063b2118a8d14610ab8578063bd10243014610afb578063d505accf14610b0357610336565b8063a0cc6a681161015b578063aa20e1e411610135578063aa20e1e414610a1f578063aa271e1a14610a52578063ad38bf2214610a8557610336565b8063a0cc6a68146109a5578063a457c2d7146109ad578063a9059cbb146109e657610336565b80638da5cb5b1161018c5780638da5cb5b1461098d57806395d89b41146109955780639fd0506d1461099d57610336565b80637f2eecc31461094a5780638456cb59146109525780638a6db9c31461095a57610336565b80633644e515116102815780634e44d9561161022a5780635a049a70116102045780635a049a701461088e5780635c975abb146108dc57806370a08231146108e45780637ecebe001461091757610336565b80634e44d9561461081a57806354fd4d5014610853578063554bab3c1461085b57610336565b80633f4ba83a1161025b5780633f4ba83a146107bc57806340c10f19146107c457806342966c68146107fd57610336565b80633644e5151461077357806338a631831461077b578063395093511461078357610336565b80632fc81e09116102e3578063313ce567116102bd578063313ce567146105385780633357162b1461055657806335d99f351461074257610336565b80632fc81e09146104ca5780633092afd5146104fd57806330adf81f1461053057610336565b80631a895266116103145780631a8952661461041f57806323b872dd146104545780632ab600451461049757610336565b806306fdde031461033b578063095ea7b3146103b857806318160ddd14610405575b600080fd5b610343610dc6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561037d578181015183820152602001610365565b50505050905090810190601f1680156103aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103f1600480360360408110156103ce57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e72565b604080519115158252519081900360200190f35b61040d610fff565b60408051918252519081900360200190f35b6104526004803603602081101561043557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611005565b005b6103f16004803603606081101561046a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356110e9565b610452600480360360208110156104ad57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113ef565b610452600480360360208110156104e057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611550565b6103f16004803603602081101561051357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115ce565b61040d6116c7565b6105406116eb565b6040805160ff9092168252519081900360200190f35b610452600480360361010081101561056d57600080fd5b81019060208101813564010000000081111561058857600080fd5b82018360208201111561059a57600080fd5b803590602001918460018302840111640100000000831117156105bc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561060f57600080fd5b82018360208201111561062157600080fd5b8035906020019184600183028401116401000000008311171561064357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561069657600080fd5b8201836020820111156106a857600080fd5b803590602001918460018302840111640100000000831117156106ca57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050813560ff16925050602081013573ffffffffffffffffffffffffffffffffffffffff908116916040810135821691606082013581169160800135166116f4565b61074a611a36565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61040d611a52565b61074a611a58565b6103f16004803603604081101561079957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611a74565b610452611bf6565b6103f1600480360360408110156107da57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611cb9565b6104526004803603602081101561081357600080fd5b50356120ee565b6103f16004803603604081101561083057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356123a8565b61034361253b565b6104526004803603602081101561087157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612572565b610452600480360360a08110156108a457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060ff60408201351690606081013590608001356126d9565b6103f1612777565b61040d600480360360208110156108fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612798565b61040d6004803603602081101561092d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166127c0565b61040d6127e8565b61045261280c565b61040d6004803603602081101561097057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166128e6565b61074a61290e565b61034361292a565b61074a6129a3565b61040d6129bf565b6103f1600480360360408110156109c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356129e3565b6103f1600480360360408110156109fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612b65565b61045260048036036020811015610a3557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612ce7565b6103f160048036036020811015610a6857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612e4e565b61045260048036036020811015610a9b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612e79565b61045260048036036060811015610ace57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135612fe0565b61074a613076565b610452600480360360e0811015610b1957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135613092565b61045260048036036020811015610b7757600080fd5b810190602081018135640100000000811115610b9257600080fd5b820183602082011115610ba457600080fd5b80359060200191846001830284011164010000000083111715610bc657600080fd5b509092509050613238565b61040d613321565b61040d60048036036040811015610bef57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516613345565b6104526004803603610120811015610c2b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060808101359060a08101359060ff60c0820135169060e081013590610100013561337d565b610343613527565b6103f160048036036040811015610c9e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356135a0565b6104526004803603610120811015610cd857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060808101359060a08101359060ff60c0820135169060e08101359061010001356135d8565b61045260048036036020811015610d4357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16613775565b61045260048036036020811015610d7657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166138c8565b6103f160048036036020811015610da957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166139af565b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b820191906000526020600020905b815481529060010190602001808311610e4d57829003601f168201915b505050505081565b60015460009074010000000000000000000000000000000000000000900460ff1615610eff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615610f68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615610fe9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b610ff43386866139da565b506001949350505050565b600b5490565b60025473ffffffffffffffffffffffffffffffffffffffff163314611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806150dc602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f117e3210bb9aa7d9baff172026820255c6f6c30ba8999d1c2fd88e2848137c4e9190a250565b60015460009074010000000000000000000000000000000000000000900460ff161561117657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff16156111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859060ff1615611260576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859060ff16156112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152600a6020908152604080832033845290915290205485111561136a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151c86028913960400191505060405180910390fd5b611375878787613b21565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600a602090815260408083203384529091529020546113b09086613d4c565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600a60209081526040808320338452909152902055600193505050509392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461147557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061503a602a913960400191505060405180910390fd5b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe475e580d85111348e40d8ca33cfdd74c30fe1655c2d8537a13abc10065ffa5a90600090a250565b60125460ff1660011461156257600080fd5b30600090815260096020526040902054801561158357611583308383613b21565b505030600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00908116600117909155601280549091166002179055565b60085460009073ffffffffffffffffffffffffffffffffffffffff163314611641576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150b36029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000818152600c6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600d909152808220829055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a2506001919050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60065460ff1681565b60085474010000000000000000000000000000000000000000900460ff1615611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615243602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166117d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180615175602f913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316611840576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150116029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166118ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806151f0602e913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116611918576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806153566028913960400191505060405180910390fd5b875161192b9060049060208b0190614dc1565b50865161193f9060059060208a0190614dc1565b508551611953906007906020890190614dc1565b50600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8716179055600880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff87811691909117909255600180548216868416179055600280549091169184169190911790556119ed81613dc3565b5050600880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b600e5473ffffffffffffffffffffffffffffffffffffffff1690565b60015460009074010000000000000000000000000000000000000000900460ff1615611b0157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615611b6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615611beb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b610ff4338686613e0a565b60015473ffffffffffffffffffffffffffffffffffffffff163314611c66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806152e46022913960400191505060405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60015460009074010000000000000000000000000000000000000000900460ff1615611d4657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b336000908152600c602052604090205460ff16611dae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806151546021913960400191505060405180910390fd5b3360008181526003602052604090205460ff1615611e17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615611e98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614f806023913960400191505060405180910390fd5b60008411611f5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150646029913960400191505060405180910390fd5b336000908152600d602052604090205480851115611fc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806152b6602e913960400191505060405180910390fd5b600b54611fd39086613e54565b600b5573ffffffffffffffffffffffffffffffffffffffff86166000908152600960205260409020546120069086613e54565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600960205260409020556120368186613d4c565b336000818152600d6020908152604091829020939093558051888152905173ffffffffffffffffffffffffffffffffffffffff8a16937fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8928290030190a360408051868152905173ffffffffffffffffffffffffffffffffffffffff8816916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350600195945050505050565b60015474010000000000000000000000000000000000000000900460ff161561217857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b336000908152600c602052604090205460ff166121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806151546021913960400191505060405180910390fd5b3360008181526003602052604090205460ff1615612249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b33600090815260096020526040902054826122af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614f576029913960400191505060405180910390fd5b82811015612308576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061512e6026913960400191505060405180910390fd5b600b546123159084613d4c565b600b556123228184613d4c565b33600081815260096020908152604091829020939093558051868152905191927fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca592918290030190a260408051848152905160009133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050565b60015460009074010000000000000000000000000000000000000000900460ff161561243557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b60085473ffffffffffffffffffffffffffffffffffffffff1633146124a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150b36029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000818152600c6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055600d825291829020859055815185815291517f46980fca912ef9bcdbd36877427b6b90e860769f604e89c0e67720cece530d209281900390910190a250600192915050565b60408051808201909152600181527f3200000000000000000000000000000000000000000000000000000000000000602082015290565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125f857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612664576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614f046028913960400191505060405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fb80482a293ca2e013eda8683c9bd7fc8347cfdaeea5ede58cba46df502c2a60490600090a250565b60015474010000000000000000000000000000000000000000900460ff161561276357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6127708585858585613ecf565b5050505050565b60015474010000000000000000000000000000000000000000900460ff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526009602052604090205490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526011602052604090205490565b7fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de881565b60015473ffffffffffffffffffffffffffffffffffffffff16331461287c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806152e46022913960400191505060405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b73ffffffffffffffffffffffffffffffffffffffff166000908152600d602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b7f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226781565b60015460009074010000000000000000000000000000000000000000900460ff1615612a7057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615612ad9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615612b5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b610ff4338686614058565b60015460009074010000000000000000000000000000000000000000900460ff1615612bf257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615612c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615612cdc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b610ff4338686613b21565b60005473ffffffffffffffffffffffffffffffffffffffff163314612d6d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180615175602f913960400191505060405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fdb66dfa9c6b8f5226fe9aac7e51897ae8ee94ac31dc70bb6c9900b2574b707e690600090a250565b73ffffffffffffffffffffffffffffffffffffffff166000908152600c602052604090205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314612eff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612f6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806153ac6032913960400191505060405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fc67398012c111ce95ecb7429b933096c977380ee6c421175a71a4a4c6c88c06e90600090a250565b600e5473ffffffffffffffffffffffffffffffffffffffff163314613050576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806151a46024913960400191505060405180910390fd5b61307173ffffffffffffffffffffffffffffffffffffffff841683836140b4565b505050565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff161561311c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8716600090815260036020526040902054879060ff161561319d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716600090815260036020526040902054879060ff161561321e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b61322d89898989898989614141565b505050505050505050565b60085474010000000000000000000000000000000000000000900460ff168015613265575060125460ff16155b61326e57600080fd5b61327a60048383614e3f565b506132ef82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600181527f3200000000000000000000000000000000000000000000000000000000000000602082015291506142ea9050565b600f555050601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b7f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a159742981565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600a6020908152604080832093909416825291909152205490565b60015474010000000000000000000000000000000000000000900460ff161561340757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613488576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b61351a8b8b8b8b8b8b8b8b8b61435c565b5050505050505050505050565b6007805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152601060209081526040808320938352929052205460ff1690565b60015474010000000000000000000000000000000000000000900460ff161561366257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff16156136e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613764576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153de6025913960400191505060405180910390fd5b61351a8b8b8b8b8b8b8b8b8b61449e565b60005473ffffffffffffffffffffffffffffffffffffffff1633146137fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116613867576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614fc96026913960400191505060405180910390fd5b6000546040805173ffffffffffffffffffffffffffffffffffffffff9283168152918316602083015280517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09281900390910190a16138c581613dc3565b50565b60025473ffffffffffffffffffffffffffffffffffffffff163314613938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806150dc602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b8559190a250565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff8316613a46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806152926024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614fef6022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8084166000818152600a6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316613b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061526d6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614ee16023913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260096020526040902054811115613c77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061508d6026913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260096020526040902054613ca79082613d4c565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600960205260408082209390935590841681522054613ce39082613e54565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526009602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082821115613dbd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600a60209081526040808320938616835292905220546130719084908490613e4f9085613e54565b6139da565b600082820183811015613ec857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b613ed985856145ab565b604080517f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a1597429602082015273ffffffffffffffffffffffffffffffffffffffff87168183018190526060828101889052835180840390910181526080909201909252600f54909190613f4d9086868686614639565b73ffffffffffffffffffffffffffffffffffffffff1614613fcf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8616600081815260106020908152604080832089845290915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055518792917f1cdd46ff242716cdaa72d159d339a485b3438398348d68f09d7c8c0a59353d8191a3505050505050565b6130718383613e4f846040518060600160405280602581526020016154286025913973ffffffffffffffffffffffffffffffffffffffff808a166000908152600a60209081526040808320938c168352929052205491906146ab565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261307190849061475c565b428410156141b057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a207065726d697420697320657870697265640000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff80881660008181526011602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c992810192909252818301849052938a1660608201526080810189905260a081019390935260c08084018890528151808503909101815260e09093019052600f546142539086868686614639565b73ffffffffffffffffffffffffffffffffffffffff16146142d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f454950323631323a20696e76616c6964207369676e6174757265000000000000604482015290519081900360640190fd5b6142e08888886139da565b5050505050505050565b8151602092830120815191830191909120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818601528082019390935260608301919091524660808301523060a0808401919091528151808403909101815260c09092019052805191012090565b61436889858888614834565b604080517f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a2267602082015273ffffffffffffffffffffffffffffffffffffffff808c16828401819052908b166060830152608082018a905260a0820189905260c0820188905260e080830188905283518084039091018152610100909201909252600f549091906143fb9086868686614639565b73ffffffffffffffffffffffffffffffffffffffff161461447d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6144878a866148f4565b6144928a8a8a613b21565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8816331461450c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061521e6025913960400191505060405180910390fd5b61451889858888614834565b604080517fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de8602082015273ffffffffffffffffffffffffffffffffffffffff808c16828401819052908b166060830152608082018a905260a0820189905260c0820188905260e080830188905283518084039091018152610100909201909252600f549091906143fb9086868686614639565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260106020908152604080832084845290915290205460ff1615614635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061537e602e913960400191505060405180910390fd5b5050565b8051602080830191909120604080517f1901000000000000000000000000000000000000000000000000000000000000818501526022810189905260428082019390935281518082039093018352606201905280519101206000906146a081878787614979565b979650505050505050565b60008184841115614754576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614719578181015183820152602001614701565b50505050905090810190601f1680156147465780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60606147be826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614b749092919063ffffffff16565b805190915015613071578080602001905160208110156147dd57600080fd5b5051613071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061532c602a913960400191505060405180910390fd5b81421161488c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614f2c602b913960400191505060405180910390fd5b8042106148e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154036025913960400191505060405180910390fd5b6148ee84846145ab565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260106020908152604080832085845290915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055518392917f98de503528ee59b575ef0c0a2576a82497bfc029a5685b209e9ec333479b10a591a35050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156149f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806153066026913960400191505060405180910390fd5b8360ff16601b14158015614a0c57508360ff16601c14155b15614a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614fa36026913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614abe573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116614b6b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45435265636f7665723a20696e76616c6964207369676e617475726500000000604482015290519081900360640190fd5b95945050505050565b6060614b838484600085614b8b565b949350505050565b606082471015614be6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806151086026913960400191505060405180910390fd5b614bef85614d3b565b614c5a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310614cc457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614c87565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614d26576040519150601f19603f3d011682016040523d82523d6000602084013e614d2b565b606091505b50915091506146a0828286614d41565b3b151590565b60608315614d50575081613ec8565b825115614d605782518084602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152845160248401528451859391928392604401919085019080838360008315614719578181015183820152602001614701565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614e0257805160ff1916838001178555614e2f565b82800160010185558215614e2f579182015b82811115614e2f578251825591602001919060010190614e14565b50614e3b929150614ecb565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614e9e578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555614e2f565b82800160010185558215614e2f579182015b82811115614e2f578235825591602001919060010190614eb0565b5b80821115614e3b5760008155600101614ecc56fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735061757361626c653a206e65772070617573657220697320746865207a65726f206164647265737346696174546f6b656e56323a20617574686f72697a6174696f6e206973206e6f74207965742076616c696446696174546f6b656e3a206275726e20616d6f756e74206e6f742067726561746572207468616e203046696174546f6b656e3a206d696e7420746f20746865207a65726f206164647265737345435265636f7665723a20696e76616c6964207369676e6174757265202776272076616c75654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737346696174546f6b656e3a206e65772070617573657220697320746865207a65726f2061646472657373526573637561626c653a206e6577207265736375657220697320746865207a65726f206164647265737346696174546f6b656e3a206d696e7420616d6f756e74206e6f742067726561746572207468616e203045524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636546696174546f6b656e3a2063616c6c6572206973206e6f7420746865206d61737465724d696e746572426c61636b6c69737461626c653a2063616c6c6572206973206e6f742074686520626c61636b6c6973746572416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c46696174546f6b656e3a206275726e20616d6f756e7420657863656564732062616c616e636546696174546f6b656e3a2063616c6c6572206973206e6f742061206d696e74657246696174546f6b656e3a206e6577206d61737465724d696e74657220697320746865207a65726f2061646472657373526573637561626c653a2063616c6c6572206973206e6f7420746865207265736375657245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636546696174546f6b656e3a206e657720626c61636b6c697374657220697320746865207a65726f206164647265737346696174546f6b656e56323a2063616c6c6572206d7573742062652074686520706179656546696174546f6b656e3a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737346696174546f6b656e3a206d696e7420616d6f756e742065786365656473206d696e746572416c6c6f77616e63655061757361626c653a2063616c6c6572206973206e6f74207468652070617573657245435265636f7665723a20696e76616c6964207369676e6174757265202773272076616c75655361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656446696174546f6b656e3a206e6577206f776e657220697320746865207a65726f206164647265737346696174546f6b656e56323a20617574686f72697a6174696f6e2069732075736564206f722063616e63656c6564426c61636b6c69737461626c653a206e657720626c61636b6c697374657220697320746865207a65726f2061646472657373426c61636b6c69737461626c653a206163636f756e7420697320626c61636b6c697374656446696174546f6b656e56323a20617574686f72697a6174696f6e206973206578706972656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ede6f670396d31636ff630735cf21ca2748aa20b529c1c926b1e2ed2d2406e9364736f6c634300060c0033", + "sourceMap": "1362:764:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1641:18:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6717:273;;;;;;;;;;;;;;;;-1:-1:-1;6717:273:7;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6124:100;;;:::i;:::-;;;;;;;;;;;;;;;;2772:148:6;;;;;;;;;;;;;;;;-1:-1:-1;2772:148:6;;;;:::i;:::-;;7768:536:7;;;;;;;;;;;;;;;;-1:-1:-1;7768:536:7;;;;;;;;;;;;;;;;;;:::i;2450:264:4:-;;;;;;;;;;;;;;;;-1:-1:-1;2450:264:4;;;;:::i;1528:398:15:-;;;;;;;;;;;;;;;;-1:-1:-1;1528:398:15;;;;:::i;10201:239:7:-;;;;;;;;;;;;;;;;-1:-1:-1;10201:239:7;;;;:::i;1612:116:11:-;;;:::i;1691:21:7:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2405:1160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2405:1160:7;;;;;;;;-1:-1:-1;2405:1160:7;;-1:-1:-1;;2405:1160:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2405:1160:7;;;;;;;;-1:-1:-1;2405:1160:7;;-1:-1:-1;;2405:1160:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2405:1160:7;;-1:-1:-1;;;2405:1160:7;;;;;-1:-1:-1;;2405:1160:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1746:27::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1291:31:13;;;:::i;1620:83:4:-;;;:::i;2269:284:14:-;;;;;;;;;;;;;;;;-1:-1:-1;2269:284:14;;;;;;;;;:::i;2802:94:9:-;;;:::i;4089:840:7:-;;;;;;;;;;;;;;;;-1:-1:-1;4089:840:7;;;;;;;;;:::i;10729:538::-;;;;;;;;;;;;;;;;-1:-1:-1;10729:538:7;;:::i;9695:334::-;;;;;;;;;;;;;;;;-1:-1:-1;9695:334:7;;;;;;;;;:::i;2040:84:15:-;;;:::i;2953:254:9:-;;;;;;;;;;;;;;;;-1:-1:-1;2953:254:9;;;;:::i;5782:229:14:-;;;;;;;;;;;;;;;;-1:-1:-1;5782:229:14;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2106:26:9:-;;;:::i;6332:154:7:-;;;;;;;;;;;;;;;;-1:-1:-1;6332:154:7;;;;:::i;1921:107:11:-;;;;;;;;;;;;;;;;-1:-1:-1;1921:107:11;;;;:::i;2068:136:12:-;;;:::i;2623:89:9:-;;;:::i;5310:118:7:-;;;;;;;;;;;;;;;;-1:-1:-1;5310:118:7;;;;:::i;2355:79:8:-;;;:::i;1665:20:7:-;;;:::i;2079:21:9:-;;;:::i;1787:137:12:-;;;:::i;2766:284:14:-;;;;;;;;;;;;;;;;-1:-1:-1;2766:284:14;;;;;;;;;:::i;8479:260:7:-;;;;;;;;;;;;;;;;-1:-1:-1;8479:260:7;;;;;;;;;:::i;11273:303::-;;;;;;;;;;;;;;;;-1:-1:-1;11273:303:7;;;;:::i;5535:104::-;;;;;;;;;;;;;;;;-1:-1:-1;5535:104:7;;;;:::i;2926:299:6:-;;;;;;;;;;;;;;;;-1:-1:-1;2926:299:6;;;;:::i;2145:177:4:-;;;;;;;;;;;;;;;;-1:-1:-1;2145:177:4;;;;;;;;;;;;;;;;;;:::i;1365:26:6:-;;;:::i;6439:309:14:-;;;;;;;;;;;;;;;;-1:-1:-1;6439:309:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1758:298::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1758:298:14;;-1:-1:-1;1758:298:14;-1:-1:-1;1758:298:14;:::i;2285:130:12:-;;;:::i;5890:175:7:-;;;;;;;;;;;;;;;;-1:-1:-1;5890:175:7;;;;;;;;;;;:::i;3621:523:14:-;;;;;;;;;;;;;;;;-1:-1:-1;3621:523:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1718:22:7:-;;;:::i;3088:183:12:-;;;;;;;;;;;;;;;;-1:-1:-1;3088:183:12;;;;;;;;;:::i;4883:521:14:-;;;;;;;;;;;;;;;;-1:-1:-1;4883:521:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2945:269:8:-;;;;;;;;;;;;;;;;-1:-1:-1;2945:269:8;;;;:::i;2500:143:6:-;;;;;;;;;;;;;;;;-1:-1:-1;2500:143:6;;;;:::i;2277:115::-;;;;;;;;;;;;;;;;-1:-1:-1;2277:115:6;;;;:::i;1641:18:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6717:273::-;2286:6:9;;6906:4:7;;2286:6:9;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6845:10:7::1;2064:21:6;::::0;;;:11:::1;:21;::::0;;;;;::::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;6880:7:7;;2064:21:6::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6926:36:7::3;6935:10;6947:7;6956:5;6926:8;:36::i;:::-;-1:-1:-1::0;6979:4:7::3;::::0;6717:273;-1:-1:-1;;;;6717:273:7:o;6124:100::-;6205:12;;6124:100;:::o;2772:148:6:-;1771:11;;;;1757:10;:25;1736:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2846:21:::1;::::0;::::1;2870:5;2846:21:::0;;;:11:::1;:21;::::0;;;;;:29;;;::::1;::::0;;2890:23;::::1;::::0;2870:5;2890:23:::1;2772:148:::0;:::o;7768:536:7:-;2286:6:9;;8025:4:7;;2286:6:9;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7940:10:7::1;2064:21:6;::::0;;;:11:::1;:21;::::0;;;;;::::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;7975:4:7;;2064:21:6::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::3;::::0;::::3;;::::0;;;:11:::3;:21;::::0;;;;;8004:2:7;;2064:21:6::3;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8075:13:7::4;::::0;::::4;;::::0;;;:7:::4;:13;::::0;;;;;;;8089:10:::4;8075:25:::0;;;;;;;;8066:34;::::4;;8045:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8176:26;8186:4;8192:2;8196:5;8176:9;:26::i;:::-;8240:13;::::0;::::4;;::::0;;;:7:::4;:13;::::0;;;;;;;8254:10:::4;8240:25:::0;;;;;;;;:36:::4;::::0;8270:5;8240:29:::4;:36::i;:::-;8212:13;::::0;::::4;;::::0;;;:7:::4;:13;::::0;;;;;;;8226:10:::4;8212:25:::0;;;;;;;:64;8293:4:::4;::::0;-1:-1:-1;2158:1:6::3;::::2;2323::9::1;7768:536:7::0;;;;;:::o;2450:264:4:-;2713:6:8;;;;2699:10;:20;2691:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2543:24:4::1;::::0;::::1;2522:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2645:8;:21:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;2681:26:::1;::::0;::::1;::::0;-1:-1:-1;;2681:26:4::1;2450:264:::0;:::o;1528:398:15:-;1652:19;;;;;:24;1644:33;;;;;;1728:4;1688:20;1711:23;;;:8;:23;;;;;;1748:16;;1744:99;;1780:52;1798:4;1805:12;1819;1780:9;:52::i;:::-;-1:-1:-1;;1872:4:15;1852:26;;;;:11;:26;;;;;:33;;;;;;1881:4;1852:33;;;;1896:19;:23;;;;;1918:1;1896:23;;;1528:398::o;10201:239:7:-;5096:12;;10298:4;;5096:12;;5082:10;:26;5061:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10318:15:::1;::::0;::::1;10336:5;10318:15:::0;;;:7:::1;:15;::::0;;;;;;;:23;;;::::1;::::0;;10351:13:::1;:21:::0;;;;;;:25;;;10391:21;::::1;::::0;10336:5;10391:21:::1;-1:-1:-1::0;10429:4:7::1;10201:239:::0;;;:::o;1612:116:11:-;1662:66;1612:116;:::o;1691:21:7:-;;;;;;:::o;2405:1160::-;2709:11;;;;;;;2708:12;2700:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2798:29;;;2777:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2931:23;;;2910:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3052:28;;;3031:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3183:22;;;3162:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3282:16;;;;:4;;:16;;;;;:::i;:::-;-1:-1:-1;3308:20:7;;;;:6;;:20;;;;;:::i;:::-;-1:-1:-1;3338:24:7;;;;:8;;:24;;;;;:::i;:::-;-1:-1:-1;3372:8:7;:24;;;;;;;;;;3406:12;:30;;;;;;;;;;;;;;;;;-1:-1:-1;3446:18:7;;;;;;;;;;3474:11;:28;;;;;;;;;;;;;;3512:18;3521:8;3512;:18::i;:::-;-1:-1:-1;;3540:11:7;:18;;;;;;;;-1:-1:-1;;;;;;2405:1160:7:o;1746:27::-;;;;;;:::o;1291:31:13:-;;;;:::o;1620:83:4:-;1688:8;;;;1620:83;:::o;2269:284:14:-;2286:6:9;;2455:4:14;;2286:6:9;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2394:10:14::1;2064:21:6;::::0;;;:11:::1;:21;::::0;;;;;::::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;2429:7:14;;2064:21:6::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2475:50:14::3;2494:10;2506:7;2515:9;2475:18;:50::i;2802:94:9:-:0;2473:6;;;;2459:10;:20;2451:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2851:6:::1;:14:::0;;;::::1;::::0;;2880:9:::1;::::0;::::1;::::0;2860:5:::1;::::0;2880:9:::1;2802:94::o:0;4089:840:7:-;2286:6:9;;4272:4:7;;2286:6:9;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3700:10:7::1;3692:19;::::0;;;:7:::1;:19;::::0;;;;;::::1;;3684:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4215:10:::2;2064:21:6;::::0;;;:11:::2;:21;::::0;;;;;::::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::3;::::0;::::3;;::::0;;;:11:::3;:21;::::0;;;;;4250:3:7;;2064:21:6::3;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4300:17:7::4;::::0;::::4;4292:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4385:1;4375:7;:11;4367:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4488:10;4443:28;4474:25:::0;;;:13:::4;:25;::::0;;;;;4530:31;;::::4;;4509:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4659:12;::::0;:25:::4;::::0;4676:7;4659:16:::4;:25::i;:::-;4644:12;:40:::0;4710:13:::4;::::0;::::4;;::::0;;;:8:::4;:13;::::0;;;;;:26:::4;::::0;4728:7;4710:17:::4;:26::i;:::-;4694:13;::::0;::::4;;::::0;;;:8:::4;:13;::::0;;;;:42;4774:33:::4;:20:::0;4799:7;4774:24:::4;:33::i;:::-;4760:10;4746:25;::::0;;;:13:::4;:25;::::0;;;;;;;;:61;;;;4822:30;;;;;;;4746:25:::4;4822:30:::0;::::4;::::0;::::4;::::0;;;;;;::::4;4867:34;::::0;;;;;;;::::4;::::0;::::4;::::0;4884:1:::4;::::0;4867:34:::4;::::0;;;;::::4;::::0;;::::4;-1:-1:-1::0;4918:4:7::4;::::0;4089:840;-1:-1:-1;;;;;4089:840:7:o;10729:538::-;2286:6:9;;;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3700:10:7::1;3692:19;::::0;;;:7:::1;:19;::::0;;;;;::::1;;3684:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10842:10:::2;2064:21:6;::::0;;;:11:::2;:21;::::0;;;;;::::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10895:10:7::3;10868:15;10886:20:::0;;;:8:::3;:20;::::0;;;;;10924:11;10916:65:::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11010:7;10999;:18;;10991:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11086:12;::::0;:25:::3;::::0;11103:7;11086:16:::3;:25::i;:::-;11071:12;:40:::0;11144:20:::3;:7:::0;11156;11144:11:::3;:20::i;:::-;11130:10;11121:20;::::0;;;:8:::3;:20;::::0;;;;;;;;:43;;;;11179:25;;;;;;;11130:10;;11179:25:::3;::::0;;;;;;;::::3;11219:41;::::0;;;;;;;11248:1:::3;::::0;11228:10:::3;::::0;11219:41:::3;::::0;;;;::::3;::::0;;::::3;2158:1:6;3759::7::2;10729:538:::0;:::o;9695:334::-;2286:6:9;;9846:4:7;;2286:6:9;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5096:12:7::1;::::0;::::1;;5082:10;:26;5061:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9866:15:::2;::::0;::::2;;::::0;;;:7:::2;:15;::::0;;;;;;;:22;;;::::2;9884:4;9866:22;::::0;;9898:13:::2;:21:::0;;;;;;:43;;;9956:45;;;;;;;::::2;::::0;;;;;;;;::::2;-1:-1:-1::0;10018:4:7::2;9695:334:::0;;;;:::o;2040:84:15:-;2107:10;;;;;;;;;;;;;;;;;2040:84;:::o;2953:254:9:-;2713:6:8;;;;2699:10;:20;2691:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3045:24:9::1;::::0;::::1;3024:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3145:6;:19:::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;;3179:21:::1;::::0;3193:6;::::1;::::0;3179:21:::1;::::0;-1:-1:-1;;3179:21:9::1;2953:254:::0;:::o;5782:229:14:-;2286:6:9;;;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5956:48:14::1;5977:10;5989:5;5996:1;5999;6002;5956:20;:48::i;:::-;5782:229:::0;;;;;:::o;2106:26:9:-;;;;;;;;;:::o;6332:154:7:-;6462:17;;6432:7;6462:17;;;:8;:17;;;;;;;6332:154::o;1921:107:11:-;2001:20;;1975:7;2001:20;;;:13;:20;;;;;;;1921:107::o;2068:136:12:-;2138:66;2068:136;:::o;2623:89:9:-;2473:6;;;;2459:10;:20;2451:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2679:4:::1;2670:13:::0;;;::::1;::::0;::::1;::::0;;2698:7:::1;::::0;::::1;::::0;2670:13;;2698:7:::1;2623:89::o:0;5310:118:7:-;5400:21;;5374:7;5400:21;;;:13;:21;;;;;;;5310:118::o;2355:79:8:-;2395:7;2421:6;;;2355:79;:::o;1665:20:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2079:21:9;;;;;;:::o;1787:137:12:-;1858:66;1787:137;:::o;2766:284:14:-;2286:6:9;;2952:4:14;;2286:6:9;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2891:10:14::1;2064:21:6;::::0;;;:11:::1;:21;::::0;;;;;::::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;2926:7:14;;2064:21:6::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2972:50:14::3;2991:10;3003:7;3012:9;2972:18;:50::i;8479:260:7:-:0;2286:6:9;;8659:4:7;;2286:6:9;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8603:10:7::1;2064:21:6;::::0;;;:11:::1;:21;::::0;;;;;::::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;8638:2:7;;2064:21:6::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8679:32:7::3;8689:10;8701:2;8705:5;8679:9;:32::i;11273:303::-:0;2713:6:8;;;;2699:10;:20;2691:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11377:30:7::1;::::0;::::1;11356:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11490:12;:31:::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;;11536:33:::1;::::0;11556:12;::::1;::::0;11536:33:::1;::::0;-1:-1:-1;;11536:33:7::1;11273:303:::0;:::o;5535:104::-;5616:16;;5593:4;5616:16;;;:7;:16;;;;;;;;;5535:104::o;2926:299:6:-;2713:6:8;;;;2699:10;:20;2691:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3028:29:6::1;::::0;::::1;3007:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3143:11;:29:::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;;3187:31:::1;::::0;3206:11;::::1;::::0;3187:31:::1;::::0;-1:-1:-1;;3187:31:6::1;2926:299:::0;:::o;2145:177:4:-;1851:8;;;;1837:10;:22;1829:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2277:38:::1;:26;::::0;::::1;2304:2:::0;2308:6;2277:26:::1;:38::i;:::-;2145:177:::0;;;:::o;1365:26:6:-;;;;;;:::o;6439:309:14:-;2286:6:9;;;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:6::1;::::0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;6651:5:14;;2064:21:6::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;6673:7:14;;2064:21:6::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6692:49:14::3;6700:5;6707:7;6716:5;6723:8;6733:1;6736;6739;6692:7;:49::i;:::-;2158:1:6::2;2323::9::1;6439:309:14::0;;;;;;;:::o;1758:298::-;1883:11;;;;;;;:39;;;;-1:-1:-1;1898:19:14;;;;:24;1883:39;1875:48;;;;;;1933:14;:4;1940:7;;1933:14;:::i;:::-;;1976:40;2003:7;;1976:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1976:40:14;;;;;;;;;;;;;;;;;;-1:-1:-1;1976:26:14;;-1:-1:-1;1976:40:14:i;:::-;1957:16;:59;-1:-1:-1;;2026:19:14;:23;;;;2048:1;2026:23;;;1758:298::o;2285:130:12:-;2349:66;2285:130;:::o;5890:175:7:-;6035:14;;;;6005:7;6035:14;;;:7;:14;;;;;;;;:23;;;;;;;;;;;;;5890:175::o;3621:523:14:-;2286:6:9;;;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:6::1;::::0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;3900:4:14;;2064:21:6::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;3921:2:14;;2064:21:6::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3935:202:14::3;3975:4;3993:2;4009:5;4028:10;4052:11;4077:5;4096:1;4111;4126;3935:26;:202::i;:::-;2158:1:6::2;2323::9::1;3621:523:14::0;;;;;;;;;:::o;1718:22:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3088:183:12;3225:32;;;;;3198:4;3225:32;;;:20;:32;;;;;;;;:39;;;;;;;;;;;3088:183::o;4883:521:14:-;2286:6:9;;;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:6::1;::::0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;5161:4:14;;2064:21:6::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;5182:2:14;;2064:21:6::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5196:201:14::3;5235:4;5253:2;5269:5;5288:10;5312:11;5337:5;5356:1;5371;5386;5196:25;:201::i;2945:269:8:-:0;2713:6;;;;2699:10;:20;2691:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3040:22:::1;::::0;::::1;3019:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:6;::::0;3141:38:::1;::::0;;3162:6:::1;::::0;;::::1;3141:38:::0;;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;3189:18;3198:8;3189;:18::i;:::-;2945:269:::0;:::o;2500:143:6:-;1771:11;;;;1757:10;:25;1736:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2572:21:::1;::::0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;:28;;;::::1;2596:4;2572:28;::::0;;2615:21;::::1;::::0;2572;2615::::1;2500:143:::0;:::o;2277:115::-;2364:21;;2341:4;2364:21;;;:11;:21;;;;;;;;;2277:115::o;7188:363:7:-;7319:19;;;7311:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7397:21;;;7389:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7467:14;;;;;;;;:7;:14;;;;;;;;:23;;;;;;;;;;;;;:31;;;7513;;;;;;;;;;;;;;;;;7188:363;;;:::o;8923:526::-;9049:18;;;9041:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9127:16;;;9119:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9223:14;;;;;;;:8;:14;;;;;;9214:23;;;9193:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9329:14;;;;;;;:8;:14;;;;;;:25;;9348:5;9329:18;:25::i;:::-;9312:14;;;;;;;;:8;:14;;;;;;:42;;;;9379:12;;;;;;;:23;;9396:5;9379:16;:23::i;:::-;9364:12;;;;;;;;:8;:12;;;;;;;;;:38;;;;9417:25;;;;;;;9364:12;;9417:25;;;;;;;;;;;;;8923:526;;;:::o;3136:155:21:-;3194:7;3226:1;3221;:6;;3213:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:21;;;3136:155::o;2493:79:8:-;2548:6;:17;;;;;;;;;;;;;;;2493:79::o;6981:208:14:-;7143:14;;;;;;;;:7;:14;;;;;;;;:23;;;;;;;;;;7118:64;;7127:5;;7134:7;;7143:38;;7171:9;7143:27;:38::i;:::-;7118:8;:64::i;2690:175:21:-;2748:7;2779:5;;;2802:6;;;;2794:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2857:1;2690:175;-1:-1:-1;;;2690:175:21:o;6532:611:12:-;6693:46;6721:10;6733:5;6693:27;:46::i;:::-;6770:106;;;2349:66;6770:106;;;;;;;;;;;;;6750:17;6770:106;;;;;;;;;;;;;;;;;;;;;;;6922:16;;6770:106;;;6907:47;;6940:1;6943;6946;6770:106;6907:14;:47::i;:::-;:61;;;6886:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7035:32;;;;;;;:20;:32;;;;;;;;:39;;;;;;;;;:46;;;;7077:4;7035:46;;;7096:40;7068:5;;7035:32;7096:40;;;6532:611;;;;;;:::o;7422:341:14:-;7559:197;7581:5;7600:7;7621:125;7666:9;7621:125;;;;;;;;;;;;;;;;;:14;;;;;;;;:7;:14;;;;;;;;:23;;;;;;;;;;;:125;:27;:125::i;704:175:23:-;813:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;836:23;813:58;;;786:86;;806:5;;786:19;:86::i;2459:637:11:-;2673:3;2661:8;:15;;2653:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2854:20;;;;2766:15;2854:20;;;:13;:20;;;;;;;;;:22;;;;;;;;2742:166;;1662:66;2742:166;;;;;;;;;;;;;;;;2722:17;2742:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2954:16;;2939:47;;2972:1;2975;2978;2742:166;2939:14;:47::i;:::-;:56;;;2918:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3058:31;3067:5;3074:7;3083:5;3058:8;:31::i;:::-;2459:637;;;;;;;;:::o;1501:686:2:-;2015:22;;;;;;;2059:25;;;;;;;;;1776:390;;;1927:66;1776:390;;;;;;;;;;;;;;;;;;1702:9;1776:390;;;;2143:4;1776:390;;;;;;;;;;;;;;;;;;;;;;;;1749:431;;;;;;1501:686::o;3842:780:12:-;4103:64;4130:4;4136:5;4143:10;4155:11;4103:26;:64::i;:::-;4198:191;;;1858:66;4198:191;;;;;;;;;;;;;;;;;4178:17;4198:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4435:16;;4198:191;;;4420:47;;4453:1;4456;4459;4198:191;4420:14;:47::i;:::-;:55;;;4399:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4542:37;4567:4;4573:5;4542:24;:37::i;:::-;4589:26;4599:4;4605:2;4609:5;4589:9;:26::i;:::-;3842:780;;;;;;;;;;:::o;5361:854::-;5629:16;;;5635:10;5629:16;5621:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5697:64;5724:4;5730:5;5737:10;5749:11;5697:26;:64::i;:::-;5792:190;;;2138:66;5792:190;;;;;;;;;;;;;;;;;5772:17;5792:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6028:16;;5792:190;;;6013:47;;6046:1;6049;6052;5792:190;6013:14;:47::i;7322:255::-;7459:32;;;;;;;:20;:32;;;;;;;;:39;;;;;;;;;;;7458:40;7437:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7322:255;;:::o;2572:434:2:-;2898:26;;;;;;;;;;2803:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2780:168;;;;;2744:7;;2965:34;2780:168;2991:1;2994;2997;2965:17;:34::i;:::-;2958:41;2572:434;-1:-1:-1;;;;;;;2572:434:2:o;5432:163:21:-;5518:7;5553:12;5545:6;;;;5537:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5583:5:21;;;5432:163::o;2967:751:23:-;3386:23;3412:69;3440:4;3412:69;;;;;;;;;;;;;;;;;3420:5;3412:27;;;;:69;;;;;:::i;:::-;3495:17;;3386:95;;-1:-1:-1;3495:21:23;3491:221;;3635:10;3624:30;;;;;;;;;;;;;;;-1:-1:-1;3624:30:23;3616:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7903:419:12;8103:10;8097:3;:16;8076:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8206:11;8200:3;:17;8192:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8269:46;8297:10;8309:5;8269:27;:46::i;:::-;7903:419;;;;:::o;8493:203::-;8592:32;;;;;;;:20;:32;;;;;;;;:39;;;;;;;;;:46;;;;8634:4;8592:46;;;8653:36;8625:5;;8592:32;8653:36;;;8493:203;;:::o;1872:1556:1:-;1997:7;2932:66;2907:91;;2890:192;;;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2890:192;3096:1;:7;;3101:2;3096:7;;:18;;;;;3107:1;:7;;3112:2;3107:7;;3096:18;3092:97;;;3130:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3092:97;3283:14;3300:26;3310:6;3318:1;3321;3324;3300:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3300:26:1;;;;;;-1:-1:-1;;3344:20:1;;;3336:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3415:6;1872:1556;-1:-1:-1;;;;;1872:1556:1:o;3581:193:24:-;3684:12;3715:52;3737:6;3745:4;3751:1;3754:12;3715:21;:52::i;:::-;3708:59;3581:193;-1:-1:-1;;;;3581:193:24:o;4608:523::-;4735:12;4792:5;4767:21;:30;;4759:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:18;4869:6;4858:10;:18::i;:::-;4850:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4981:12;4995:23;5022:6;:11;;5042:5;5050:4;5022:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4980:75;;;;5072:52;5090:7;5099:10;5111:12;5072:17;:52::i;726:413::-;1086:20;1124:8;;;726:413::o;7091:725::-;7206:12;7234:7;7230:580;;;-1:-1:-1;7264:10:24;7257:17;;7230:580;7375:17;;:21;7371:429;;7633:10;7627:17;7693:15;7680:10;7676:2;7672:19;7665:44;7582:145;7765:20;;;;;;;;;;;;;;;;;;;;7772:12;;7765:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "methodIdentifiers": { + "CANCEL_AUTHORIZATION_TYPEHASH()": "d9169487", + "DOMAIN_SEPARATOR()": "3644e515", + "PERMIT_TYPEHASH()": "30adf81f", + "RECEIVE_WITH_AUTHORIZATION_TYPEHASH()": "7f2eecc3", + "TRANSFER_WITH_AUTHORIZATION_TYPEHASH()": "a0cc6a68", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "authorizationState(address,bytes32)": "e94a0102", + "balanceOf(address)": "70a08231", + "blacklist(address)": "f9f92be4", + "blacklister()": "bd102430", + "burn(uint256)": "42966c68", + "cancelAuthorization(address,bytes32,uint8,bytes32,bytes32)": "5a049a70", + "configureMinter(address,uint256)": "4e44d956", + "currency()": "e5a6b10f", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "increaseAllowance(address,uint256)": "39509351", + "initialize(string,string,string,uint8,address,address,address,address)": "3357162b", + "initializeV2(string)": "d608ea64", + "initializeV2_1(address)": "2fc81e09", + "isBlacklisted(address)": "fe575a87", + "isMinter(address)": "aa271e1a", + "masterMinter()": "35d99f35", + "mint(address,uint256)": "40c10f19", + "minterAllowance(address)": "8a6db9c3", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "owner()": "8da5cb5b", + "pause()": "8456cb59", + "paused()": "5c975abb", + "pauser()": "9fd0506d", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "receiveWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)": "ef55bec6", + "removeMinter(address)": "3092afd5", + "rescueERC20(address,address,uint256)": "b2118a8d", + "rescuer()": "38a63183", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "transferOwnership(address)": "f2fde38b", + "transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)": "e3ee160e", + "unBlacklist(address)": "1a895266", + "unpause()": "3f4ba83a", + "updateBlacklister(address)": "ad38bf22", + "updateMasterMinter(address)": "aa20e1e4", + "updatePauser(address)": "554bab3c", + "updateRescuer(address)": "2ab60045", + "version()": "54fd4d50" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"nonce\",\"type\":\"bytes32\"}],\"name\":\"AuthorizationCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"nonce\",\"type\":\"bytes32\"}],\"name\":\"AuthorizationUsed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"Blacklisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newBlacklister\",\"type\":\"address\"}],\"name\":\"BlacklisterChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"burner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newMasterMinter\",\"type\":\"address\"}],\"name\":\"MasterMinterChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minterAllowedAmount\",\"type\":\"uint256\"}],\"name\":\"MinterConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldMinter\",\"type\":\"address\"}],\"name\":\"MinterRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Pause\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PauserChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRescuer\",\"type\":\"address\"}],\"name\":\"RescuerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"UnBlacklisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unpause\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CANCEL_AUTHORIZATION_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RECEIVE_WITH_AUTHORIZATION_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_WITH_AUTHORIZATION_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"nonce\",\"type\":\"bytes32\"}],\"name\":\"authorizationState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"blacklist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blacklister\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"nonce\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"cancelAuthorization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minterAllowedAmount\",\"type\":\"uint256\"}],\"name\":\"configureMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currency\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"decrement\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"increment\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenCurrency\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"newMasterMinter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newPauser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newBlacklister\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newName\",\"type\":\"string\"}],\"name\":\"initializeV2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lostAndFound\",\"type\":\"address\"}],\"name\":\"initializeV2_1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"isBlacklisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"masterMinter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"minterAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauser\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validBefore\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"nonce\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"receiveWithAuthorization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rescuer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validBefore\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"nonce\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"transferWithAuthorization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"unBlacklist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newBlacklister\",\"type\":\"address\"}],\"name\":\"updateBlacklister\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newMasterMinter\",\"type\":\"address\"}],\"name\":\"updateMasterMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newPauser\",\"type\":\"address\"}],\"name\":\"updatePauser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRescuer\",\"type\":\"address\"}],\"name\":\"updateRescuer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"params\":{\"owner\":\"Token owner's address\",\"spender\":\"Spender's address\"},\"returns\":{\"_0\":\"Allowance amount\"}},\"approve(address,uint256)\":{\"params\":{\"spender\":\"Spender's address\",\"value\":\"Allowance amount\"},\"returns\":{\"_0\":\"True if successful\"}},\"authorizationState(address,bytes32)\":{\"details\":\"Nonces are randomly generated 32-byte data unique to the authorizer's address\",\"params\":{\"authorizer\":\"Authorizer's address\",\"nonce\":\"Nonce of the authorization\"},\"returns\":{\"_0\":\"True if the nonce is used\"}},\"balanceOf(address)\":{\"details\":\"Get token balance of an account\",\"params\":{\"account\":\"address The account\"}},\"blacklist(address)\":{\"details\":\"Adds account to blacklist\",\"params\":{\"_account\":\"The address to blacklist\"}},\"burn(uint256)\":{\"details\":\"allows a minter to burn some of its own tokens Validates that caller is a minter and that sender is not blacklisted amount is less than or equal to the minter's account balance\",\"params\":{\"_amount\":\"uint256 the amount of tokens to be burned\"}},\"cancelAuthorization(address,bytes32,uint8,bytes32,bytes32)\":{\"details\":\"Works only if the authorization is not yet used.\",\"params\":{\"authorizer\":\"Authorizer's address\",\"nonce\":\"Nonce of the authorization\",\"r\":\"r of the signature\",\"s\":\"s of the signature\",\"v\":\"v of the signature\"}},\"configureMinter(address,uint256)\":{\"details\":\"Function to add/update a new minter\",\"params\":{\"minter\":\"The address of the minter\",\"minterAllowedAmount\":\"The minting amount allowed for the minter\"},\"returns\":{\"_0\":\"True if the operation was successful.\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"decrement\":\"Amount of decrease in allowance\",\"spender\":\"Spender's address\"},\"returns\":{\"_0\":\"True if successful\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"increment\":\"Amount of increase in allowance\",\"spender\":\"Spender's address\"},\"returns\":{\"_0\":\"True if successful\"}},\"initializeV2(string)\":{\"params\":{\"newName\":\"New token name\"}},\"initializeV2_1(address)\":{\"params\":{\"lostAndFound\":\"The address to which the locked funds are sent\"}},\"isBlacklisted(address)\":{\"details\":\"Checks if account is blacklisted\",\"params\":{\"_account\":\"The address to check\"}},\"isMinter(address)\":{\"details\":\"Checks if account is a minter\",\"params\":{\"account\":\"The address to check\"}},\"mint(address,uint256)\":{\"details\":\"Function to mint tokens\",\"params\":{\"_amount\":\"The amount of tokens to mint. Must be less than or equal to the minterAllowance of the caller.\",\"_to\":\"The address that will receive the minted tokens.\"},\"returns\":{\"_0\":\"A boolean that indicates if the operation was successful.\"}},\"minterAllowance(address)\":{\"details\":\"Get minter allowance for an account\",\"params\":{\"minter\":\"The address of the minter\"}},\"nonces(address)\":{\"params\":{\"owner\":\"Token owner's address (Authorizer)\"},\"returns\":{\"_0\":\"Next nonce\"}},\"owner()\":{\"details\":\"Tells the address of the owner\",\"returns\":{\"_0\":\"the address of the owner\"}},\"pause()\":{\"details\":\"called by the owner to pause, triggers stopped state\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"Expiration time, seconds since the epoch\",\"owner\":\"Token owner's address (Authorizer)\",\"r\":\"r of the signature\",\"s\":\"s of the signature\",\"spender\":\"Spender's address\",\"v\":\"v of the signature\",\"value\":\"Amount of allowance\"}},\"receiveWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)\":{\"details\":\"This has an additional check to ensure that the payee's address matches the caller of this function to prevent front-running attacks.\",\"params\":{\"from\":\"Payer's address (Authorizer)\",\"nonce\":\"Unique nonce\",\"r\":\"r of the signature\",\"s\":\"s of the signature\",\"to\":\"Payee's address\",\"v\":\"v of the signature\",\"validAfter\":\"The time after which this is valid (unix time)\",\"validBefore\":\"The time before which this is valid (unix time)\",\"value\":\"Amount to be transferred\"}},\"removeMinter(address)\":{\"details\":\"Function to remove a minter\",\"params\":{\"minter\":\"The address of the minter to remove\"},\"returns\":{\"_0\":\"True if the operation was successful.\"}},\"rescueERC20(address,address,uint256)\":{\"params\":{\"amount\":\"Amount to withdraw\",\"to\":\"Recipient address\",\"tokenContract\":\"ERC20 token contract address\"}},\"rescuer()\":{\"returns\":{\"_0\":\"Rescuer's address\"}},\"totalSupply()\":{\"details\":\"Get totalSupply of token\"},\"transfer(address,uint256)\":{\"params\":{\"to\":\"Payee's address\",\"value\":\"Transfer amount\"},\"returns\":{\"_0\":\"True if successful\"}},\"transferFrom(address,address,uint256)\":{\"params\":{\"from\":\"Payer's address\",\"to\":\"Payee's address\",\"value\":\"Transfer amount\"},\"returns\":{\"_0\":\"True if successful\"}},\"transferOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"newOwner\":\"The address to transfer ownership to.\"}},\"transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)\":{\"params\":{\"from\":\"Payer's address (Authorizer)\",\"nonce\":\"Unique nonce\",\"r\":\"r of the signature\",\"s\":\"s of the signature\",\"to\":\"Payee's address\",\"v\":\"v of the signature\",\"validAfter\":\"The time after which this is valid (unix time)\",\"validBefore\":\"The time before which this is valid (unix time)\",\"value\":\"Amount to be transferred\"}},\"unBlacklist(address)\":{\"details\":\"Removes account from blacklist\",\"params\":{\"_account\":\"The address to remove from the blacklist\"}},\"unpause()\":{\"details\":\"called by the owner to unpause, returns to normal state\"},\"updatePauser(address)\":{\"details\":\"update the pauser role\"},\"updateRescuer(address)\":{\"params\":{\"newRescuer\":\"New rescuer's address\"}},\"version()\":{\"returns\":{\"_0\":\"Version string\"}}},\"title\":\"FiatToken V2.1\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address)\":{\"notice\":\"Amount of remaining tokens spender is allowed to transfer on behalf of the token owner\"},\"approve(address,uint256)\":{\"notice\":\"Set spender's allowance over the caller's tokens to be a given value.\"},\"authorizationState(address,bytes32)\":{\"notice\":\"Returns the state of an authorization\"},\"cancelAuthorization(address,bytes32,uint8,bytes32,bytes32)\":{\"notice\":\"Attempt to cancel an authorization\"},\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decrease the allowance by a given decrement\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increase the allowance by a given increment\"},\"initializeV2(string)\":{\"notice\":\"Initialize v2\"},\"initializeV2_1(address)\":{\"notice\":\"Initialize v2.1\"},\"nonces(address)\":{\"notice\":\"Nonces for permit\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Update allowance with a signed permit\"},\"receiveWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)\":{\"notice\":\"Receive a transfer with a signed authorization from the payer\"},\"rescueERC20(address,address,uint256)\":{\"notice\":\"Rescue ERC20 tokens locked up in this contract.\"},\"rescuer()\":{\"notice\":\"Returns current rescuer\"},\"transfer(address,uint256)\":{\"notice\":\"Transfer tokens from the caller\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Transfer tokens by spending allowance\"},\"transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)\":{\"notice\":\"Execute a transfer with a signed authorization\"},\"updateRescuer(address)\":{\"notice\":\"Assign the rescuer role to a given address.\"},\"version()\":{\"notice\":\"Version string for the EIP712 domain separator\"}},\"notice\":\"ERC20 Token backed by fiat reserves, version 2.1\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/centre-tokens.git/contracts/v2/FiatTokenV2_1.sol\":\"FiatTokenV2_1\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[\":@memview-sol/=lib/memview-sol/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":centre-tokens.git/=lib/centre-tokens.git/\",\":ds-test/=lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":memview-sol/=lib/memview-sol/contracts/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/centre-tokens.git/contracts/util/ECRecover.sol\":{\"keccak256\":\"0xb4e623304daaf25e40292e60a814ae60a60745d10003f1881a36be763dbc09aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6ef83bd777bfb13b0968b9cadd971216a95150427fa5d6b50f984e4b7268d31\",\"dweb:/ipfs/QmZS5TeT6n7tM36PBdYZNJW3wgYgAZE9zMcouNs4FuEDKj\"]},\"lib/centre-tokens.git/contracts/util/EIP712.sol\":{\"keccak256\":\"0x39319612a776e16f355d5ab71575b68c427a058839544f032733df228b5debd1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d5ac6450e881a4275f4b5baf7b5d6e15c0a0c7c2039edf39f106e0b821c9829d\",\"dweb:/ipfs/QmShHneDasAXQzjA8iKWXk3sbZgxbQGPiMQ1MUpJGF64N8\"]},\"lib/centre-tokens.git/contracts/v1.1/FiatTokenV1_1.sol\":{\"keccak256\":\"0xa5f8fc4b5e739ddcafe52dd76ebb7605e09eb9d52a5c1d77e48dd88e83106308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24543f05d3eb4768ee9798768cb6c9ce8b88d30606a5def83118ad1ba9382ac8\",\"dweb:/ipfs/QmYREtrAvoxn6DKXehJPP1pbs8vciqMvRHVk2eFKLtmKVT\"]},\"lib/centre-tokens.git/contracts/v1.1/Rescuable.sol\":{\"keccak256\":\"0x57b703f318d500976571eea0a3f9e220842b64b3ddd3e16d895947b88a7851bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5cd801c89f182fa554ea5aae42aa047099c0640c21a766b4cb88c5e8ba4c1de\",\"dweb:/ipfs/QmaH8gLUnknTnNTrjT22Q5kzCGvrUJHRBG9j3tSQbJFB3M\"]},\"lib/centre-tokens.git/contracts/v1/AbstractFiatTokenV1.sol\":{\"keccak256\":\"0x40be3ca7ed54e13ad0476a99ddea8ad4e08bcb4c4b43aac067d6b6ffd3d48680\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3264a34582797e8edb492202070020cf64543988467bca6a0af1be60e0da2df\",\"dweb:/ipfs/QmZkQ7pqBn2459BiXbWC3yu3jvv7ps3Zy56u6rAi1fPHV4\"]},\"lib/centre-tokens.git/contracts/v1/Blacklistable.sol\":{\"keccak256\":\"0xc4ff3bfe34c8ecf9f2c333f8373c111fdd4640ed15677c4891bb9cf3cbff9554\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91cfc583d47eda58f356783698a130c1c6adf797c4ba55461598c0bac8159f33\",\"dweb:/ipfs/QmeWfmhcwUE7H5Ge8TVhWkJ4kDwDY8a4kExMaufukLqsh1\"]},\"lib/centre-tokens.git/contracts/v1/FiatTokenV1.sol\":{\"keccak256\":\"0x2778a1232f403718a084302e5d94a88ac336c3e47117a465d4055920c7d4f764\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66d9cbc9507829c085a370906678b597f98665e079658051b608e98f228f4821\",\"dweb:/ipfs/QmWC6XJDzmaLLamTHJJHJ1uVsfv3RtffXUCA7w5EnegAxW\"]},\"lib/centre-tokens.git/contracts/v1/Ownable.sol\":{\"keccak256\":\"0x654e645d6d09616fde908eba4d29abf318fede7e8cc3e31705203fc1d2599217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fce1ff1458e817aaa5f87d3ef4207fbbdeb25e548d460f47d9cca4fb80175390\",\"dweb:/ipfs/QmfY7E5xfTyeiuU2nDXEdYfy5LKjGRh69fuKK4HV6YTv9v\"]},\"lib/centre-tokens.git/contracts/v1/Pausable.sol\":{\"keccak256\":\"0x873ce4f17eb8694cd0420ef6682c2da54290fe6e243f21ead37e90f211ac91b6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7df712210c8bb5fc08e0ff7b684ee4035530cd67b21f20d81766a17407606a3c\",\"dweb:/ipfs/QmYPFYAw4W8VdcBdknLhqfNfiUuGhGJD3ZZ7rAjrKjhtXd\"]},\"lib/centre-tokens.git/contracts/v2/AbstractFiatTokenV2.sol\":{\"keccak256\":\"0x5d393663d48e4bbb730630c117c2b703dd3c9968833e66dbbb18c92eab207afe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b0ce642b7ab095d970e3e5d031e5de6b2a98a7ddd20fd94123a42ed81e21757e\",\"dweb:/ipfs/QmbPixwbbpHS7zBRcJV1idzhaSd1SPRm3LjpywxFnXxR8A\"]},\"lib/centre-tokens.git/contracts/v2/EIP2612.sol\":{\"keccak256\":\"0x8ed169be2f6423b8e7002241857d719e9eb9545f5dbad5209a8f6445132bdbe0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0646f70d57d072c0569ccbd9b02c922bbb183e6052f94c241c4fef9a267e73bc\",\"dweb:/ipfs/QmZK3D3qqTMenkdc5EpZSiyxETMpTVpRke61uuRH75ctVk\"]},\"lib/centre-tokens.git/contracts/v2/EIP3009.sol\":{\"keccak256\":\"0x74a81d5b1682cb6716f60c27254e8a15463797e1772b37c884390eb9c7985070\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1d3a6e220c2b8aab8c5070312cc9320ce2b79955b0bddafd99e5feec13851016\",\"dweb:/ipfs/QmQwc2nZtMKyDcGT8Scnv1R4ThP2Va9trUHnRiqMz4G2WN\"]},\"lib/centre-tokens.git/contracts/v2/EIP712Domain.sol\":{\"keccak256\":\"0x56d8c0259e7f0baa5bb0d0d94810f25d001fb2dbe4eaf54dbe369ba0f1b8fd2b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9356cfa1d42bfb8c4f84a3db535ab75b2088975bfbda30834d79c3eb678047ea\",\"dweb:/ipfs/QmSBeiLwNGEC4vnr82EWQinGZFZemxKwxvwLZ9bu48FWF2\"]},\"lib/centre-tokens.git/contracts/v2/FiatTokenV2.sol\":{\"keccak256\":\"0x59654e02023dd9d712bb160545854eae6cba80d707a547f6abfaadcd830af2e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e22c43b71ea393e9910bd91a355f711803d6971be25e9dabc702aaefac2a597f\",\"dweb:/ipfs/QmRjopnHgyKh1mXBDETBaXaom3NJSaacGEJweB5b28BdSE\"]},\"lib/centre-tokens.git/contracts/v2/FiatTokenV2_1.sol\":{\"keccak256\":\"0x6328091a86a3ab02471fba7ff3bf44200f6daf9f0ff3b61fe4043ee14cc1a4f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4fed880853c249f6f812ddfa37bf99633b688f0bfd734e03372e4523f6cd2af9\",\"dweb:/ipfs/QmUMD1SvykvTJ8jmAjnsW13Yo3Wt6KH5dfKRPKCRogLki8\"]},\"lib/openzeppelin-contracts/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5f02220344881ce43204ae4a6281145a67bc52c2bb1290a791857df3d19d78f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24427744bd3e6cb73c17010119af12a318289c0253a4d9acb8576c9fb3797b08\",\"dweb:/ipfs/QmTLDqpKRBuxGxRAmjgXt9AkXyACW3MtKzi7PYjm5iMfGC\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0xf12dfbe97e6276980b83d2830bb0eb75e0cf4f3e626c2471137f82158ae6a0fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a849c2d95e85463909e5b5c920b13e7a11216ca14127085e16d22b9379d52a\",\"dweb:/ipfs/QmUg3CZDbCCcQdroEpexBy5ZFd5vD1UWijWQq9qHZjtJNQ\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://256c8c8af5eb072bc473226ab2b2187149b8fc04f5f4a4820db22527f5ce8e3c\",\"dweb:/ipfs/QmRvi5BhnL7Rxf85KrJhwM6RRhukm4tzoctRdgQEheNyiN\"]}},\"version\":1}", + "metadata": { + "compiler": { + "version": "0.6.12+commit.27d51765" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "spender", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Approval", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "authorizer", + "type": "address", + "indexed": true + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32", + "indexed": true + } + ], + "type": "event", + "name": "AuthorizationCanceled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "authorizer", + "type": "address", + "indexed": true + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32", + "indexed": true + } + ], + "type": "event", + "name": "AuthorizationUsed", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "Blacklisted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newBlacklister", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "BlacklisterChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "burner", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Burn", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newMasterMinter", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "MasterMinterChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Mint", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "minterAllowedAmount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "MinterConfigured", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldMinter", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "MinterRemoved", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "type": "event", + "name": "Pause", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAddress", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "PauserChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newRescuer", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "RescuerChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Transfer", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "UnBlacklisted", + "anonymous": false + }, + { + "inputs": [], + "type": "event", + "name": "Unpause", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "CANCEL_AUTHORIZATION_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "PERMIT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "RECEIVE_WITH_AUTHORIZATION_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "TRANSFER_WITH_AUTHORIZATION_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "authorizer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "authorizationState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "blacklist" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "blacklister", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "burn" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "authorizer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "cancelAuthorization" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minterAllowedAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "configureMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "currency", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "decrement", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "increment", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "tokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "tokenSymbol", + "type": "string" + }, + { + "internalType": "string", + "name": "tokenCurrency", + "type": "string" + }, + { + "internalType": "uint8", + "name": "tokenDecimals", + "type": "uint8" + }, + { + "internalType": "address", + "name": "newMasterMinter", + "type": "address" + }, + { + "internalType": "address", + "name": "newPauser", + "type": "address" + }, + { + "internalType": "address", + "name": "newBlacklister", + "type": "address" + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newName", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initializeV2" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "lostAndFound", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initializeV2_1" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isBlacklisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "masterMinter", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "minterAllowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "pause" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pauser", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "permit" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validBefore", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "receiveWithAuthorization" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "removeMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "rescueERC20" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "rescuer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validBefore", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferWithAuthorization" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "unBlacklist" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "unpause" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newBlacklister", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updateBlacklister" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newMasterMinter", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updateMasterMinter" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauser", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updatePauser" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newRescuer", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updateRescuer" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "allowance(address,address)": { + "params": { + "owner": "Token owner's address", + "spender": "Spender's address" + }, + "returns": { + "_0": "Allowance amount" + } + }, + "approve(address,uint256)": { + "params": { + "spender": "Spender's address", + "value": "Allowance amount" + }, + "returns": { + "_0": "True if successful" + } + }, + "authorizationState(address,bytes32)": { + "details": "Nonces are randomly generated 32-byte data unique to the authorizer's address", + "params": { + "authorizer": "Authorizer's address", + "nonce": "Nonce of the authorization" + }, + "returns": { + "_0": "True if the nonce is used" + } + }, + "balanceOf(address)": { + "details": "Get token balance of an account", + "params": { + "account": "address The account" + } + }, + "blacklist(address)": { + "details": "Adds account to blacklist", + "params": { + "_account": "The address to blacklist" + } + }, + "burn(uint256)": { + "details": "allows a minter to burn some of its own tokens Validates that caller is a minter and that sender is not blacklisted amount is less than or equal to the minter's account balance", + "params": { + "_amount": "uint256 the amount of tokens to be burned" + } + }, + "cancelAuthorization(address,bytes32,uint8,bytes32,bytes32)": { + "details": "Works only if the authorization is not yet used.", + "params": { + "authorizer": "Authorizer's address", + "nonce": "Nonce of the authorization", + "r": "r of the signature", + "s": "s of the signature", + "v": "v of the signature" + } + }, + "configureMinter(address,uint256)": { + "details": "Function to add/update a new minter", + "params": { + "minter": "The address of the minter", + "minterAllowedAmount": "The minting amount allowed for the minter" + }, + "returns": { + "_0": "True if the operation was successful." + } + }, + "decreaseAllowance(address,uint256)": { + "params": { + "decrement": "Amount of decrease in allowance", + "spender": "Spender's address" + }, + "returns": { + "_0": "True if successful" + } + }, + "increaseAllowance(address,uint256)": { + "params": { + "increment": "Amount of increase in allowance", + "spender": "Spender's address" + }, + "returns": { + "_0": "True if successful" + } + }, + "initializeV2(string)": { + "params": { + "newName": "New token name" + } + }, + "initializeV2_1(address)": { + "params": { + "lostAndFound": "The address to which the locked funds are sent" + } + }, + "isBlacklisted(address)": { + "details": "Checks if account is blacklisted", + "params": { + "_account": "The address to check" + } + }, + "isMinter(address)": { + "details": "Checks if account is a minter", + "params": { + "account": "The address to check" + } + }, + "mint(address,uint256)": { + "details": "Function to mint tokens", + "params": { + "_amount": "The amount of tokens to mint. Must be less than or equal to the minterAllowance of the caller.", + "_to": "The address that will receive the minted tokens." + }, + "returns": { + "_0": "A boolean that indicates if the operation was successful." + } + }, + "minterAllowance(address)": { + "details": "Get minter allowance for an account", + "params": { + "minter": "The address of the minter" + } + }, + "nonces(address)": { + "params": { + "owner": "Token owner's address (Authorizer)" + }, + "returns": { + "_0": "Next nonce" + } + }, + "owner()": { + "details": "Tells the address of the owner", + "returns": { + "_0": "the address of the owner" + } + }, + "pause()": { + "details": "called by the owner to pause, triggers stopped state" + }, + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "params": { + "deadline": "Expiration time, seconds since the epoch", + "owner": "Token owner's address (Authorizer)", + "r": "r of the signature", + "s": "s of the signature", + "spender": "Spender's address", + "v": "v of the signature", + "value": "Amount of allowance" + } + }, + "receiveWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)": { + "details": "This has an additional check to ensure that the payee's address matches the caller of this function to prevent front-running attacks.", + "params": { + "from": "Payer's address (Authorizer)", + "nonce": "Unique nonce", + "r": "r of the signature", + "s": "s of the signature", + "to": "Payee's address", + "v": "v of the signature", + "validAfter": "The time after which this is valid (unix time)", + "validBefore": "The time before which this is valid (unix time)", + "value": "Amount to be transferred" + } + }, + "removeMinter(address)": { + "details": "Function to remove a minter", + "params": { + "minter": "The address of the minter to remove" + }, + "returns": { + "_0": "True if the operation was successful." + } + }, + "rescueERC20(address,address,uint256)": { + "params": { + "amount": "Amount to withdraw", + "to": "Recipient address", + "tokenContract": "ERC20 token contract address" + } + }, + "rescuer()": { + "returns": { + "_0": "Rescuer's address" + } + }, + "totalSupply()": { + "details": "Get totalSupply of token" + }, + "transfer(address,uint256)": { + "params": { + "to": "Payee's address", + "value": "Transfer amount" + }, + "returns": { + "_0": "True if successful" + } + }, + "transferFrom(address,address,uint256)": { + "params": { + "from": "Payer's address", + "to": "Payee's address", + "value": "Transfer amount" + }, + "returns": { + "_0": "True if successful" + } + }, + "transferOwnership(address)": { + "details": "Allows the current owner to transfer control of the contract to a newOwner.", + "params": { + "newOwner": "The address to transfer ownership to." + } + }, + "transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)": { + "params": { + "from": "Payer's address (Authorizer)", + "nonce": "Unique nonce", + "r": "r of the signature", + "s": "s of the signature", + "to": "Payee's address", + "v": "v of the signature", + "validAfter": "The time after which this is valid (unix time)", + "validBefore": "The time before which this is valid (unix time)", + "value": "Amount to be transferred" + } + }, + "unBlacklist(address)": { + "details": "Removes account from blacklist", + "params": { + "_account": "The address to remove from the blacklist" + } + }, + "unpause()": { + "details": "called by the owner to unpause, returns to normal state" + }, + "updatePauser(address)": { + "details": "update the pauser role" + }, + "updateRescuer(address)": { + "params": { + "newRescuer": "New rescuer's address" + } + }, + "version()": { + "returns": { + "_0": "Version string" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "allowance(address,address)": { + "notice": "Amount of remaining tokens spender is allowed to transfer on behalf of the token owner" + }, + "approve(address,uint256)": { + "notice": "Set spender's allowance over the caller's tokens to be a given value." + }, + "authorizationState(address,bytes32)": { + "notice": "Returns the state of an authorization" + }, + "cancelAuthorization(address,bytes32,uint8,bytes32,bytes32)": { + "notice": "Attempt to cancel an authorization" + }, + "decreaseAllowance(address,uint256)": { + "notice": "Decrease the allowance by a given decrement" + }, + "increaseAllowance(address,uint256)": { + "notice": "Increase the allowance by a given increment" + }, + "initializeV2(string)": { + "notice": "Initialize v2" + }, + "initializeV2_1(address)": { + "notice": "Initialize v2.1" + }, + "nonces(address)": { + "notice": "Nonces for permit" + }, + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "notice": "Update allowance with a signed permit" + }, + "receiveWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)": { + "notice": "Receive a transfer with a signed authorization from the payer" + }, + "rescueERC20(address,address,uint256)": { + "notice": "Rescue ERC20 tokens locked up in this contract." + }, + "rescuer()": { + "notice": "Returns current rescuer" + }, + "transfer(address,uint256)": { + "notice": "Transfer tokens from the caller" + }, + "transferFrom(address,address,uint256)": { + "notice": "Transfer tokens by spending allowance" + }, + "transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)": { + "notice": "Execute a transfer with a signed authorization" + }, + "updateRescuer(address)": { + "notice": "Assign the rescuer role to a given address." + }, + "version()": { + "notice": "Version string for the EIP712 domain separator" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + ":@memview-sol/=lib/memview-sol/", + ":@openzeppelin/=lib/openzeppelin-contracts/", + ":centre-tokens.git/=lib/centre-tokens.git/", + ":ds-test/=lib/ds-test/src/", + ":forge-std/=lib/forge-std/src/", + ":memview-sol/=lib/memview-sol/contracts/", + ":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/" + ], + "optimizer": { + "enabled": true, + "runs": 100000 + }, + "metadata": { + "bytecodeHash": "ipfs" + }, + "compilationTarget": { + "lib/centre-tokens.git/contracts/v2/FiatTokenV2_1.sol": "FiatTokenV2_1" + }, + "libraries": {} + }, + "sources": { + "lib/centre-tokens.git/contracts/util/ECRecover.sol": { + "keccak256": "0xb4e623304daaf25e40292e60a814ae60a60745d10003f1881a36be763dbc09aa", + "urls": [ + "bzz-raw://d6ef83bd777bfb13b0968b9cadd971216a95150427fa5d6b50f984e4b7268d31", + "dweb:/ipfs/QmZS5TeT6n7tM36PBdYZNJW3wgYgAZE9zMcouNs4FuEDKj" + ], + "license": "MIT" + }, + "lib/centre-tokens.git/contracts/util/EIP712.sol": { + "keccak256": "0x39319612a776e16f355d5ab71575b68c427a058839544f032733df228b5debd1", + "urls": [ + "bzz-raw://d5ac6450e881a4275f4b5baf7b5d6e15c0a0c7c2039edf39f106e0b821c9829d", + "dweb:/ipfs/QmShHneDasAXQzjA8iKWXk3sbZgxbQGPiMQ1MUpJGF64N8" + ], + "license": "MIT" + }, + "lib/centre-tokens.git/contracts/v1.1/FiatTokenV1_1.sol": { + "keccak256": "0xa5f8fc4b5e739ddcafe52dd76ebb7605e09eb9d52a5c1d77e48dd88e83106308", + "urls": [ + "bzz-raw://24543f05d3eb4768ee9798768cb6c9ce8b88d30606a5def83118ad1ba9382ac8", + "dweb:/ipfs/QmYREtrAvoxn6DKXehJPP1pbs8vciqMvRHVk2eFKLtmKVT" + ], + "license": "MIT" + }, + "lib/centre-tokens.git/contracts/v1.1/Rescuable.sol": { + "keccak256": "0x57b703f318d500976571eea0a3f9e220842b64b3ddd3e16d895947b88a7851bc", + "urls": [ + "bzz-raw://f5cd801c89f182fa554ea5aae42aa047099c0640c21a766b4cb88c5e8ba4c1de", + "dweb:/ipfs/QmaH8gLUnknTnNTrjT22Q5kzCGvrUJHRBG9j3tSQbJFB3M" + ], + "license": "MIT" + }, + "lib/centre-tokens.git/contracts/v1/AbstractFiatTokenV1.sol": { + "keccak256": "0x40be3ca7ed54e13ad0476a99ddea8ad4e08bcb4c4b43aac067d6b6ffd3d48680", + "urls": [ + "bzz-raw://e3264a34582797e8edb492202070020cf64543988467bca6a0af1be60e0da2df", + "dweb:/ipfs/QmZkQ7pqBn2459BiXbWC3yu3jvv7ps3Zy56u6rAi1fPHV4" + ], + "license": "MIT" + }, + "lib/centre-tokens.git/contracts/v1/Blacklistable.sol": { + "keccak256": "0xc4ff3bfe34c8ecf9f2c333f8373c111fdd4640ed15677c4891bb9cf3cbff9554", + "urls": [ + "bzz-raw://91cfc583d47eda58f356783698a130c1c6adf797c4ba55461598c0bac8159f33", + "dweb:/ipfs/QmeWfmhcwUE7H5Ge8TVhWkJ4kDwDY8a4kExMaufukLqsh1" + ], + "license": "MIT" + }, + "lib/centre-tokens.git/contracts/v1/FiatTokenV1.sol": { + "keccak256": "0x2778a1232f403718a084302e5d94a88ac336c3e47117a465d4055920c7d4f764", + "urls": [ + "bzz-raw://66d9cbc9507829c085a370906678b597f98665e079658051b608e98f228f4821", + "dweb:/ipfs/QmWC6XJDzmaLLamTHJJHJ1uVsfv3RtffXUCA7w5EnegAxW" + ], + "license": "MIT" + }, + "lib/centre-tokens.git/contracts/v1/Ownable.sol": { + "keccak256": "0x654e645d6d09616fde908eba4d29abf318fede7e8cc3e31705203fc1d2599217", + "urls": [ + "bzz-raw://fce1ff1458e817aaa5f87d3ef4207fbbdeb25e548d460f47d9cca4fb80175390", + "dweb:/ipfs/QmfY7E5xfTyeiuU2nDXEdYfy5LKjGRh69fuKK4HV6YTv9v" + ], + "license": "MIT" + }, + "lib/centre-tokens.git/contracts/v1/Pausable.sol": { + "keccak256": "0x873ce4f17eb8694cd0420ef6682c2da54290fe6e243f21ead37e90f211ac91b6", + "urls": [ + "bzz-raw://7df712210c8bb5fc08e0ff7b684ee4035530cd67b21f20d81766a17407606a3c", + "dweb:/ipfs/QmYPFYAw4W8VdcBdknLhqfNfiUuGhGJD3ZZ7rAjrKjhtXd" + ], + "license": "MIT" + }, + "lib/centre-tokens.git/contracts/v2/AbstractFiatTokenV2.sol": { + "keccak256": "0x5d393663d48e4bbb730630c117c2b703dd3c9968833e66dbbb18c92eab207afe", + "urls": [ + "bzz-raw://b0ce642b7ab095d970e3e5d031e5de6b2a98a7ddd20fd94123a42ed81e21757e", + "dweb:/ipfs/QmbPixwbbpHS7zBRcJV1idzhaSd1SPRm3LjpywxFnXxR8A" + ], + "license": "MIT" + }, + "lib/centre-tokens.git/contracts/v2/EIP2612.sol": { + "keccak256": "0x8ed169be2f6423b8e7002241857d719e9eb9545f5dbad5209a8f6445132bdbe0", + "urls": [ + "bzz-raw://0646f70d57d072c0569ccbd9b02c922bbb183e6052f94c241c4fef9a267e73bc", + "dweb:/ipfs/QmZK3D3qqTMenkdc5EpZSiyxETMpTVpRke61uuRH75ctVk" + ], + "license": "MIT" + }, + "lib/centre-tokens.git/contracts/v2/EIP3009.sol": { + "keccak256": "0x74a81d5b1682cb6716f60c27254e8a15463797e1772b37c884390eb9c7985070", + "urls": [ + "bzz-raw://1d3a6e220c2b8aab8c5070312cc9320ce2b79955b0bddafd99e5feec13851016", + "dweb:/ipfs/QmQwc2nZtMKyDcGT8Scnv1R4ThP2Va9trUHnRiqMz4G2WN" + ], + "license": "MIT" + }, + "lib/centre-tokens.git/contracts/v2/EIP712Domain.sol": { + "keccak256": "0x56d8c0259e7f0baa5bb0d0d94810f25d001fb2dbe4eaf54dbe369ba0f1b8fd2b", + "urls": [ + "bzz-raw://9356cfa1d42bfb8c4f84a3db535ab75b2088975bfbda30834d79c3eb678047ea", + "dweb:/ipfs/QmSBeiLwNGEC4vnr82EWQinGZFZemxKwxvwLZ9bu48FWF2" + ], + "license": "MIT" + }, + "lib/centre-tokens.git/contracts/v2/FiatTokenV2.sol": { + "keccak256": "0x59654e02023dd9d712bb160545854eae6cba80d707a547f6abfaadcd830af2e7", + "urls": [ + "bzz-raw://e22c43b71ea393e9910bd91a355f711803d6971be25e9dabc702aaefac2a597f", + "dweb:/ipfs/QmRjopnHgyKh1mXBDETBaXaom3NJSaacGEJweB5b28BdSE" + ], + "license": "MIT" + }, + "lib/centre-tokens.git/contracts/v2/FiatTokenV2_1.sol": { + "keccak256": "0x6328091a86a3ab02471fba7ff3bf44200f6daf9f0ff3b61fe4043ee14cc1a4f0", + "urls": [ + "bzz-raw://4fed880853c249f6f812ddfa37bf99633b688f0bfd734e03372e4523f6cd2af9", + "dweb:/ipfs/QmUMD1SvykvTJ8jmAjnsW13Yo3Wt6KH5dfKRPKCRogLki8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/math/SafeMath.sol": { + "keccak256": "0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52", + "urls": [ + "bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c", + "dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": { + "keccak256": "0x5f02220344881ce43204ae4a6281145a67bc52c2bb1290a791857df3d19d78f5", + "urls": [ + "bzz-raw://24427744bd3e6cb73c17010119af12a318289c0253a4d9acb8576c9fb3797b08", + "dweb:/ipfs/QmTLDqpKRBuxGxRAmjgXt9AkXyACW3MtKzi7PYjm5iMfGC" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol": { + "keccak256": "0xf12dfbe97e6276980b83d2830bb0eb75e0cf4f3e626c2471137f82158ae6a0fc", + "urls": [ + "bzz-raw://b3a849c2d95e85463909e5b5c920b13e7a11216ca14127085e16d22b9379d52a", + "dweb:/ipfs/QmUg3CZDbCCcQdroEpexBy5ZFd5vD1UWijWQq9qHZjtJNQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea", + "urls": [ + "bzz-raw://256c8c8af5eb072bc473226ab2b2187149b8fc04f5f4a4820db22527f5ce8e3c", + "dweb:/ipfs/QmRvi5BhnL7Rxf85KrJhwM6RRhukm4tzoctRdgQEheNyiN" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "ast": { + "absolutePath": "lib/centre-tokens.git/contracts/v2/FiatTokenV2_1.sol", + "id": 2371, + "exportedSymbols": { + "FiatTokenV2_1": [ + 2370 + ] + }, + "nodeType": "SourceUnit", + "src": "1154:973:15", + "nodes": [ + { + "id": 2306, + "nodeType": "PragmaDirective", + "src": "1154:23:15", + "nodes": [], + "literals": [ + "solidity", + "0.6", + ".12" + ] + }, + { + "id": 2308, + "nodeType": "ImportDirective", + "src": "1179:48:15", + "nodes": [], + "absolutePath": "lib/centre-tokens.git/contracts/v2/FiatTokenV2.sol", + "file": "./FiatTokenV2.sol", + "scope": 2371, + "sourceUnit": 2305, + "symbolAliases": [ + { + "foreign": { + "argumentTypes": null, + "id": 2307, + "name": "FiatTokenV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": null, + "src": "1188:11:15", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + }, + "local": null + } + ], + "unitAlias": "" + }, + { + "id": 2370, + "nodeType": "ContractDefinition", + "src": "1362:764:15", + "nodes": [ + { + "id": 2360, + "nodeType": "FunctionDefinition", + "src": "1528:398:15", + "nodes": [], + "body": { + "id": 2359, + "nodeType": "Block", + "src": "1583:343:15", + "nodes": [], + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "id": 2320, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2318, + "name": "_initializedVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2015, + "src": "1652:19:15", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "31", + "id": 2319, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1675:1:15", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "1652:24:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 2317, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1644:7:15", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 2321, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1644:33:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2322, + "nodeType": "ExpressionStatement", + "src": "1644:33:15" + }, + { + "assignments": [ + 2324 + ], + "declarations": [ + { + "constant": false, + "id": 2324, + "mutability": "mutable", + "name": "lockedAmount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2359, + "src": "1688:20:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2323, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1688:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2331, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2325, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 612, + "src": "1711:8:15", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2330, + "indexExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2328, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1728:4:15", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FiatTokenV2_1_$2370", + "typeString": "contract FiatTokenV2_1" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_FiatTokenV2_1_$2370", + "typeString": "contract FiatTokenV2_1" + } + ], + "id": 2327, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1720:7:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2326, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1720:7:15", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2329, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1720:13:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1711:23:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1688:46:15" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2332, + "name": "lockedAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2324, + "src": "1748:12:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2333, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1763:1:15", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1748:16:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 2345, + "nodeType": "IfStatement", + "src": "1744:99:15", + "trueBody": { + "id": 2344, + "nodeType": "Block", + "src": "1766:77:15", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2338, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1798:4:15", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FiatTokenV2_1_$2370", + "typeString": "contract FiatTokenV2_1" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_FiatTokenV2_1_$2370", + "typeString": "contract FiatTokenV2_1" + } + ], + "id": 2337, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1790:7:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2336, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1790:7:15", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1790:13:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2340, + "name": "lostAndFound", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2314, + "src": "1805:12:15", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2341, + "name": "lockedAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2324, + "src": "1819:12:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2335, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1190 + ], + "referencedDeclaration": 1190, + "src": "1780:9:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2342, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1780:52:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2343, + "nodeType": "ExpressionStatement", + "src": "1780:52:15" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "id": 2353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2346, + "name": "blacklisted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 454, + "src": "1852:11:15", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 2351, + "indexExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2349, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1872:4:15", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FiatTokenV2_1_$2370", + "typeString": "contract FiatTokenV2_1" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_FiatTokenV2_1_$2370", + "typeString": "contract FiatTokenV2_1" + } + ], + "id": 2348, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1864:7:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2347, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1864:7:15", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2350, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1864:13:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1852:26:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 2352, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1881:4:15", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1852:33:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 2354, + "nodeType": "ExpressionStatement", + "src": "1852:33:15" + }, + { + "expression": { + "argumentTypes": null, + "id": 2357, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 2355, + "name": "_initializedVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2015, + "src": "1896:19:15", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "32", + "id": 2356, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1918:1:15", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "1896:23:15", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "id": 2358, + "nodeType": "ExpressionStatement", + "src": "1896:23:15" + } + ] + }, + "documentation": { + "id": 2312, + "nodeType": "StructuredDocumentation", + "src": "1406:117:15", + "text": " @notice Initialize v2.1\n @param lostAndFound The address to which the locked funds are sent" + }, + "functionSelector": "2fc81e09", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "initializeV2_1", + "overrides": null, + "parameters": { + "id": 2315, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2314, + "mutability": "mutable", + "name": "lostAndFound", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2360, + "src": "1552:20:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2313, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1552:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1551:22:15" + }, + "returnParameters": { + "id": 2316, + "nodeType": "ParameterList", + "parameters": [], + "src": "1583:0:15" + }, + "scope": 2370, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 2369, + "nodeType": "FunctionDefinition", + "src": "2040:84:15", + "nodes": [], + "body": { + "id": 2368, + "nodeType": "Block", + "src": "2097:27:15", + "nodes": [], + "statements": [ + { + "expression": { + "argumentTypes": null, + "hexValue": "32", + "id": 2366, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2114:3:15", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5", + "typeString": "literal_string \"2\"" + }, + "value": "2" + }, + "functionReturnParameters": 2365, + "id": 2367, + "nodeType": "Return", + "src": "2107:10:15" + } + ] + }, + "documentation": { + "id": 2361, + "nodeType": "StructuredDocumentation", + "src": "1932:103:15", + "text": " @notice Version string for the EIP712 domain separator\n @return Version string" + }, + "functionSelector": "54fd4d50", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "version", + "overrides": null, + "parameters": { + "id": 2362, + "nodeType": "ParameterList", + "parameters": [], + "src": "2056:2:15" + }, + "returnParameters": { + "id": 2365, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2364, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2369, + "src": "2082:13:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 2363, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2082:6:15", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2081:15:15" + }, + "scope": 2370, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "abstract": false, + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 2310, + "name": "FiatTokenV2", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2304, + "src": "1388:11:15", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FiatTokenV2_$2304", + "typeString": "contract FiatTokenV2" + } + }, + "id": 2311, + "nodeType": "InheritanceSpecifier", + "src": "1388:11:15" + } + ], + "contractDependencies": [ + 327, + 416, + 441, + 572, + 1349, + 1433, + 1533, + 1558, + 1653, + 1985, + 1992, + 2304, + 20331 + ], + "contractKind": "contract", + "documentation": { + "id": 2309, + "nodeType": "StructuredDocumentation", + "src": "1269:92:15", + "text": " @title FiatToken V2.1\n @notice ERC20 Token backed by fiat reserves, version 2.1" + }, + "fullyImplemented": true, + "linearizedBaseContracts": [ + 2370, + 2304, + 1653, + 1985, + 1992, + 1558, + 327, + 416, + 1349, + 572, + 1533, + 1433, + 441, + 20331 + ], + "name": "FiatTokenV2_1", + "scope": 2371 + } + ], + "license": "MIT" + }, + "id": 15 +} \ No newline at end of file diff --git a/typescript/example/abi/MessageTransmitter.json b/typescript/example/abi/MessageTransmitter.json new file mode 100644 index 0000000..abf776a --- /dev/null +++ b/typescript/example/abi/MessageTransmitter.json @@ -0,0 +1,8928 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "uint32", + "name": "_localDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_attester", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_maxMessageBodySize", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_version", + "type": "uint32" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "name": "AttesterDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "name": "AttesterEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousAttesterManager", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAttesterManager", + "type": "address" + } + ], + "name": "AttesterManagerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxMessageBodySize", + "type": "uint256" + } + ], + "name": "MaxMessageBodySizeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "sourceDomain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "uint64", + "name": "nonce", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "sender", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "messageBody", + "type": "bytes" + } + ], + "name": "MessageReceived", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "message", + "type": "bytes" + } + ], + "name": "MessageSent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "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": [], + "name": "Pause", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "PauserChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newRescuer", + "type": "address" + } + ], + "name": "RescuerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldSignatureThreshold", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newSignatureThreshold", + "type": "uint256" + } + ], + "name": "SignatureThresholdUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Unpause", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "attesterManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "name": "disableAttester", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAttester", + "type": "address" + } + ], + "name": "enableAttester", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getEnabledAttester", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNumEnabledAttesters", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "name": "isEnabledAttester", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "localDomain", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxMessageBodySize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nextAvailableNonce", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauser", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestation", + "type": "bytes" + } + ], + "name": "receiveMessage", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "originalMessage", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "originalAttestation", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "newMessageBody", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "newDestinationCaller", + "type": "bytes32" + } + ], + "name": "replaceMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "rescueERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rescuer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "recipient", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "messageBody", + "type": "bytes" + } + ], + "name": "sendMessage", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "recipient", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "destinationCaller", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "messageBody", + "type": "bytes" + } + ], + "name": "sendMessageWithCaller", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newMaxMessageBodySize", + "type": "uint256" + } + ], + "name": "setMaxMessageBodySize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newSignatureThreshold", + "type": "uint256" + } + ], + "name": "setSignatureThreshold", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "signatureThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAttesterManager", + "type": "address" + } + ], + "name": "updateAttesterManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauser", + "type": "address" + } + ], + "name": "updatePauser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newRescuer", + "type": "address" + } + ], + "name": "updateRescuer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "usedNonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": { + "object": "0x60c06040526002805460ff60a01b191690553480156200001e57600080fd5b506040516200481f3803806200481f833981810160405260808110156200004457600080fd5b508051602082015160408301516060909301519192909182620000706200006a620000bb565b620000bf565b6200007b33620000e9565b60016004556200008b816200010b565b506001600160e01b031960e094851b811660805263ffffffff9290921660085590921b90911660a0525062000342565b3390565b600180546001600160a01b0319169055620000e6816200026b602090811b620024b817901c565b50565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031633146200016b576040805162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206e6f74206174746573746572206d616e616765720000000000604482015290519081900360640190fd5b6001600160a01b038116620001c7576040805162461bcd60e51b815260206004820152601c60248201527f4e6577206174746573746572206d757374206265206e6f6e7a65726f00000000604482015290519081900360640190fd5b620001e2816005620002bb60201b6200252d1790919060201c565b62000234576040805162461bcd60e51b815260206004820152601860248201527f417474657374657220616c726561647920656e61626c65640000000000000000604482015290519081900360640190fd5b6040516001600160a01b038216907f5b99bab45c72ce67e89466dbc47480b9c1fde1400e7268bbf463b8354ee4653f90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000620002d2836001600160a01b038416620002db565b90505b92915050565b6000620002e983836200032a565b6200032157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620002d5565b506000620002d5565b60009081526001919091016020526040902054151590565b60805160e01c60a05160e01c61449a6200038560003980610d325280611173528061267e525080610f5052806118805280611c2c528061269f525061449a6000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638da5cb5b1161010f578063bbde5374116100a2578063f2fde38b11610071578063f2fde38b146106da578063f7259a751461070d578063fae3687914610796578063feb61724146107c9576101e5565b8063bbde537414610665578063beb673d814610682578063de7769d41461069f578063e30c3978146106d2576101e5565b8063a82f2e26116100de578063a82f2e26146104fe578063af47b9bb14610506578063b2118a8d1461050e578063b857b77414610551576101e5565b80638da5cb5b146104c957806392492c68146104d15780639b0d94b7146104ee5780639fd0506d146104f6576101e5565b8063554bab3c116101875780637af82f60116101565780637af82f601461047e5780638371744e146104b15780638456cb59146104b95780638d3638f4146104c1576101e5565b8063554bab3c1461036557806357ecfd28146103985780635c975abb1461046e57806379ba509714610476576101e5565b806338a63183116101c357806338a63183146102f15780633f4ba83a1461032257806351079a531461032a57806354fd4d5014610344576101e5565b80630ba469bc146101ea5780632ab60045146102895780632d025080146102be575b600080fd5b61026c6004803603606081101561020057600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561022d57600080fd5b82018360208201111561023f57600080fd5b8035906020019184600183028401116401000000008311171561026157600080fd5b5090925090506107e6565b6040805167ffffffffffffffff9092168252519081900360200190f35b6102bc6004803603602081101561029f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610931565b005b6102bc600480360360208110156102d457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a14565b6102f9610c40565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102bc610c5c565b610332610d1f565b60408051918252519081900360200190f35b61034c610d30565b6040805163ffffffff9092168252519081900360200190f35b6102bc6004803603602081101561037b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d54565b61045a600480360360408110156103ae57600080fd5b8101906020810181356401000000008111156103c957600080fd5b8201836020820111156103db57600080fd5b803590602001918460018302840111640100000000831117156103fd57600080fd5b91939092909160208101903564010000000081111561041b57600080fd5b82018360208201111561042d57600080fd5b8035906020019184600183028401116401000000008311171561044f57600080fd5b509092509050610e3d565b604080519115158252519081900360200190f35b61045a6116bb565b6102bc6116dc565b61045a6004803603602081101561049457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661177f565b61026c611794565b6102bc6117a4565b61034c61187e565b6102f96118a2565b6102bc600480360360208110156104e757600080fd5b50356118be565b6102f9611901565b6102f961191d565b610332611939565b61033261193f565b6102bc6004803603606081101561052457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611945565b6102bc6004803603608081101561056757600080fd5b81019060208101813564010000000081111561058257600080fd5b82018360208201111561059457600080fd5b803590602001918460018302840111640100000000831117156105b657600080fd5b9193909290916020810190356401000000008111156105d457600080fd5b8201836020820111156105e657600080fd5b8035906020019184600183028401116401000000008311171561060857600080fd5b91939092909160208101903564010000000081111561062657600080fd5b82018360208201111561063857600080fd5b8035906020019184600183028401116401000000008311171561065a57600080fd5b9193509150356119db565b6102bc6004803603602081101561067b57600080fd5b5035611d59565b6102f96004803603602081101561069857600080fd5b5035611f7b565b6102bc600480360360208110156106b557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611f88565b6102f9612092565b6102bc600480360360208110156106f057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166120ae565b61026c6004803603608081101561072357600080fd5b63ffffffff823516916020810135916040820135919081019060808101606082013564010000000081111561075757600080fd5b82018360208201111561076957600080fd5b8035906020019184600183028401116401000000008311171561078b57600080fd5b509092509050612146565b6102bc600480360360208110156107ac57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166122e4565b610332600480360360208110156107df57600080fd5b50356124a6565b60025460009074010000000000000000000000000000000000000000900460ff161561087357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b60008061087e612558565b9050600073__$8c977731748aa4504deed57239565df533$__6382c947b7336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156108e757600080fd5b505af41580156108fb573d6000803e3d6000fd5b505050506040513d602081101561091157600080fd5b5051905061092488888584868b8b61259a565b509150505b949350505050565b6109396127a4565b73ffffffffffffffffffffffffffffffffffffffff81166109a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614231602a913960400191505060405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe475e580d85111348e40d8ca33cfdd74c30fe1655c2d8537a13abc10065ffa5a90600090a250565b60075473ffffffffffffffffffffffffffffffffffffffff163314610a9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616c6c6572206e6f74206174746573746572206d616e616765720000000000604482015290519081900360640190fd5b6000610aa4610d1f565b905060018111610b1557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f546f6f2066657720656e61626c65642061747465737465727300000000000000604482015290519081900360640190fd5b6004548111610b8557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5369676e6174757265207468726573686f6c6420697320746f6f206c6f770000604482015290519081900360640190fd5b610b9060058361284e565b610bfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f417474657374657220616c72656164792064697361626c656400000000000000604482015290519081900360640190fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316907f78e573a18c75957b7cadaab01511aa1c19a659f06ecf53e01de37ed92d3261fc90600090a25050565b60035473ffffffffffffffffffffffffffffffffffffffff1690565b60025473ffffffffffffffffffffffffffffffffffffffff163314610ccc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806143916022913960400191505060405180910390fd5b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b6000610d2b6005612870565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610d5c6127a4565b73ffffffffffffffffffffffffffffffffffffffff8116610dc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806141be6028913960400191505060405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fb80482a293ca2e013eda8683c9bd7fc8347cfdaeea5ede58cba46df502c2a60490600090a250565b60025460009074010000000000000000000000000000000000000000900460ff1615610eca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b610ed68585858561287b565b6000610f1c600087878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050612a989050565b9050610f497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612abc565b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f9b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612bfa565b63ffffffff161461100d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c69642064657374696e6174696f6e20646f6d61696e000000000000604482015290519081900360640190fd5b600061103a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612c2b565b1461116c57604080517f82c947b7000000000000000000000000000000000000000000000000000000008152336004820152905173__$8c977731748aa4504deed57239565df533$__916382c947b7916024808301926020929190829003018186803b1580156110a957600080fd5b505af41580156110bd573d6000803e3d6000fd5b505050506040513d60208110156110d357600080fd5b50516111007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612c2b565b1461116c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c69642063616c6c657220666f72206d657373616765000000000000604482015290519081900360640190fd5b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166111be7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612c5c565b63ffffffff161461123057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964206d6573736167652076657273696f6e000000000000000000604482015290519081900360640190fd5b600061125d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612c8c565b9050600061128c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416612cbc565b9050600061129a8383612ced565b6000818152600a60205260409020549091501561131857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f6e636520616c726561647920757365640000000000000000000000000000604482015290519081900360640190fd5b6000818152600a60205260408120600190556113557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008616612d68565b905060006113ae6113877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816612d99565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016612e08565b905073__$8c977731748aa4504deed57239565df533$__635ced058e6113f57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008916612e4c565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561142957600080fd5b505af415801561143d573d6000803e3d6000fd5b505050506040513d602081101561145357600080fd5b50516040517f96abeb7000000000000000000000000000000000000000000000000000000000815263ffffffff8716600482019081526024820185905260606044830190815284516064840152845173ffffffffffffffffffffffffffffffffffffffff909416936396abeb70938a938893889391929091608490910190602085019080838360005b838110156114f45781810151838201526020016114dc565b50505050905090810190601f1680156115215780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561154257600080fd5b505af1158015611556573d6000803e3d6000fd5b505050506040513d602081101561156c57600080fd5b50516115d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f68616e646c65526563656976654d6573736167652829206661696c6564000000604482015290519081900360640190fd5b8367ffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f58200b4c34ae05ee816d710053fff3fb75af4395915d3d2a771b24aa10e3cc5d878585604051808463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561166e578181015183820152602001611656565b50505050905090810190601f16801561169b5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35060019a9950505050505050505050565b60025474010000000000000000000000000000000000000000900460ff1681565b60006116e6612e7d565b90508073ffffffffffffffffffffffffffffffffffffffff16611707612092565b73ffffffffffffffffffffffffffffffffffffffff1614611773576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806142086029913960400191505060405180910390fd5b61177c81612e81565b50565b600061178c600583612eb2565b90505b919050565b60095467ffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff163314611814576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806143916022913960400191505060405180910390fd5b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6118c66127a4565b60088190556040805182815290517fb13bf6bebed03d1b318e3ea32e4b2a3ad9f5e2312cdf340a2f4bbfaee39f928d9181900360200190a150565b60075473ffffffffffffffffffffffffffffffffffffffff1690565b60025473ffffffffffffffffffffffffffffffffffffffff1690565b60045481565b60085481565b60035473ffffffffffffffffffffffffffffffffffffffff1633146119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806143336024913960400191505060405180910390fd5b6119d673ffffffffffffffffffffffffffffffffffffffff84168383612ed4565b505050565b60025474010000000000000000000000000000000000000000900460ff1615611a6557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b611a718787878761287b565b6000611ab7600089898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050612a989050565b9050611ae47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612abc565b6000611b117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612d68565b905073__$8c977731748aa4504deed57239565df533$__635ced058e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611b6257600080fd5b505af4158015611b76573d6000803e3d6000fd5b505050506040513d6020811015611b8c57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff163314611bfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806142cf6021913960400191505060405180910390fd5b6000611c287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416612c8c565b90507f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff1614611cae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806142a3602c913960400191505060405180910390fd5b6000611cdb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516612bfa565b90506000611d0a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008616612e4c565b90506000611d397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716612cbc565b9050611d4a83838988858e8e61259a565b50505050505050505050505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314611ddf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616c6c6572206e6f74206174746573746572206d616e616765720000000000604482015290519081900360640190fd5b80611e4b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e76616c6964207369676e6174757265207468726573686f6c640000000000604482015290519081900360640190fd5b611e556005612870565b811115611ec357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4e6577207369676e6174757265207468726573686f6c6420746f6f2068696768604482015290519081900360640190fd5b600454811415611f3457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5369676e6174757265207468726573686f6c6420616c72656164792073657400604482015290519081900360640190fd5b6004805490829055604080518281526020810184905281517f149153f58b4da003a8cfd4523709a202402182cb5aa335046911277a1be6eede929181900390910190a15050565b600061178c600583612f61565b611f906127a4565b73ffffffffffffffffffffffffffffffffffffffff811661201257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e76616c6964206174746573746572206d616e616765722061646472657373604482015290519081900360640190fd5b60075473ffffffffffffffffffffffffffffffffffffffff1661203482612f6d565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0cee1b7ae04f3c788dd3a46c6fa677eb95b913611ef7ab59524fdc09d346021960405160405180910390a35050565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b6120b66127a4565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556121016118a2565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60025460009074010000000000000000000000000000000000000000900460ff16156121d357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b83612229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806141e66022913960400191505060405180910390fd5b6000612233612558565b9050600073__$8c977731748aa4504deed57239565df533$__6382c947b7336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561229c57600080fd5b505af41580156122b0573d6000803e3d6000fd5b505050506040513d60208110156122c657600080fd5b505190506122d988888884868a8a61259a565b509695505050505050565b60075473ffffffffffffffffffffffffffffffffffffffff16331461236a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616c6c6572206e6f74206174746573746572206d616e616765720000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166123ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4e6577206174746573746572206d757374206265206e6f6e7a65726f00000000604482015290519081900360640190fd5b6123f760058261252d565b61246257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f417474657374657220616c726561647920656e61626c65640000000000000000604482015290519081900360640190fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907f5b99bab45c72ce67e89466dbc47480b9c1fde1400e7268bbf463b8354ee4653f90600090a250565b600a6020526000908152604090205481565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061254f8373ffffffffffffffffffffffffffffffffffffffff8416612fb4565b90505b92915050565b600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff9283169081019092161790915590565b60085481111561260b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65737361676520626f64792065786365656473206d61782073697a65000000604482015290519081900360640190fd5b8561267757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f526563697069656e74206d757374206265206e6f6e7a65726f00000000000000604482015290519081900360640190fd5b60006126ff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008a87898c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ffe92505050565b90507f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036816040518080602001828103825283818151815260200191508051906020019080838360005b83811015612760578181015183820152602001612748565b50505050905090810190601f16801561278d5780820380516001836020036101000a031916815260200191505b509250505060405180910390a15050505050505050565b6127ac612e7d565b73ffffffffffffffffffffffffffffffffffffffff166127ca6118a2565b73ffffffffffffffffffffffffffffffffffffffff161461284c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b600061254f8373ffffffffffffffffffffffffffffffffffffffff84166130f3565b600061178c826131d7565b60045460410281146128ee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c6964206174746573746174696f6e206c656e677468000000000000604482015290519081900360640190fd5b60008085856040518083838082843760405192018290039091209450600093505050505b600454811015612a8f5760006129316041838102908101908789614173565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093945061297492508691508490506131db565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611612a1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e76616c6964207369676e6174757265206f72646572206f72206475706500604482015290519081900360640190fd5b612a198161177f565b612a8457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e76616c6964207369676e61747572653a206e6f7420617474657374657200604482015290519081900360640190fd5b935050600101612912565b50505050505050565b815160009060208401612ab364ffffffffff851682846131e7565b95945050505050565b612ae77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216613248565b612b5257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d616c666f726d6564206d657373616765000000000000000000000000000000604482015290519081900360640190fd5b6074612b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613285565b6bffffffffffffffffffffffff16101561177c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c6964206d6573736167653a20746f6f2073686f7274000000000000604482015290519081900360640190fd5b600061178c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660086004613299565b600061178c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316605460206132ba565b600061178c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826004613299565b600061178c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316600480613299565b600061178c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316600c6008613299565b6040805160e09390931b7fffffffff000000000000000000000000000000000000000000000000000000001660208085019190915260c09290921b7fffffffffffffffff0000000000000000000000000000000000000000000000001660248401528051808403600c018152602c9093019052815191012090565b600061178c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316601460206132ba565b600061178c607480612dcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008616613285565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000861692916bffffffffffffffffffffffff9103166000613465565b6060600080612e1684613285565b6bffffffffffffffffffffffff1690506040519150819250612e3b84836020016134f5565b508181016020016040529052919050565b600061178c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316603460206132ba565b3390565b600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561177c816124b8565b600061254f8373ffffffffffffffffffffffffffffffffffffffff8416613621565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526119d6908490613639565b600061254f8383613711565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000612fc08383613621565b612ff657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612552565b506000612552565b60608888888888888888604051602001808963ffffffff1660e01b81526004018863ffffffff1660e01b81526004018763ffffffff1660e01b81526004018667ffffffffffffffff1660c01b815260080185815260200184815260200183815260200182805190602001908083835b602083106130aa57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161306d565b6001836020036101000a03801982511681845116808217855250505050505090500198505050505050505050604051602081830303815290604052905098975050505050505050565b600081815260018301602052604081205480156131cd5783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301919081019060009087908390811061314457fe5b906000526020600020015490508087600001848154811061316157fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061319157fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050612552565b6000915050612552565b5490565b600061254f838361378f565b6000806131f4848461381f565b9050604051811115613204575060005b80613232577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050613241565b61323d858585613891565b9150505b9392505050565b6000613253826138a4565b64ffffffffff1664ffffffffff141561326e5750600061178f565b6000613279836138aa565b60405110199392505050565b60181c6bffffffffffffffffffffffff1690565b60008160200360080260ff166132b08585856132ba565b901c949350505050565b600060ff82166132cc57506000613241565b6132d584613285565b6bffffffffffffffffffffffff166132f08460ff851661381f565b11156133cf57613331613302856138d4565b6bffffffffffffffffffffffff1661331986613285565b6bffffffffffffffffffffffff16858560ff166138e8565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561339457818101518382015260200161337c565b50505050905090810190601f1680156133c15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60208260ff16111561342c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614357603a913960400191505060405180910390fd5b60088202600061343b866138d4565b6bffffffffffffffffffffffff169050600061345683613a43565b91909501511695945050505050565b600080613471866138d4565b6bffffffffffffffffffffffff16905061348a866138aa565b61349e85613498848961381f565b9061381f565b11156134cd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050610929565b6134d7818661381f565b90506134eb8364ffffffffff1682866131e7565b9695505050505050565b600061350083613a8c565b613555576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806143dd6028913960400191505060405180910390fd5b61355e83613248565b6135b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614405602b913960400191505060405180910390fd5b60006135be84613285565b6bffffffffffffffffffffffff16905060006135d9856138d4565b6bffffffffffffffffffffffff16905060006040519050848111156135fe5760206060fd5b8285848460045afa506134eb613613876138a4565b64ffffffffff168685613891565b60009081526001919091016020526040902054151590565b600061369b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613a9e9092919063ffffffff16565b8051909150156119d6578080602001905160208110156136ba57600080fd5b50516119d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806143b3602a913960400191505060405180910390fd5b8154600090821061376d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061419c6022913960400191505060405180910390fd5b82600001828154811061377c57fe5b9060005260206000200154905092915050565b6000815160411461380157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6134eb86828585613aad565b8181018281101561255257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b60d81c90565b60006138b582613285565b6138be836138d4565b016bffffffffffffffffffffffff169050919050565b60781c6bffffffffffffffffffffffff1690565b606060006138f586613c9b565b915050600061390386613c9b565b915050600061391186613c9b565b915050600061391f86613c9b565b915050838383836040516020018080614430603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a82015260500160216142f082397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b6000613a9782613d6f565b1592915050565b60606109298484600085613d97565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613b28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061425b6022913960400191505060405180910390fd5b8360ff16601b1480613b3d57508360ff16601c145b613b92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806143116022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613bee573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612ab357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b600080601f5b600f8160ff161115613d035760ff600882021684901c613cc081613f51565b61ffff16841793508160ff16601014613cdb57601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ca1565b50600f5b60ff8160ff161015613d695760ff600882021684901c613d2681613f51565b61ffff16831792508160ff16600014613d4157601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613d07565b50915091565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b606082471015613df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061427d6026913960400191505060405180910390fd5b613dfb85613f81565b613e6657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310613ecf57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613e92565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613f31576040519150601f19603f3d011682016040523d82523d6000602084013e613f36565b606091505b5091509150613f46828286613f87565b979650505050505050565b6000613f6360048360ff16901c614007565b60ff161760081b62ffff0016613f7882614007565b60ff1617919050565b3b151590565b60608315613f96575081613241565b825115613fa65782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561339457818101518382015260200161337c565b600060f08083179060ff8216141561402357603091505061178f565b8060ff1660f1141561403957603191505061178f565b8060ff1660f2141561404f57603291505061178f565b8060ff1660f3141561406557603391505061178f565b8060ff1660f4141561407b57603491505061178f565b8060ff1660f5141561409157603591505061178f565b8060ff1660f614156140a757603691505061178f565b8060ff1660f714156140bd57603791505061178f565b8060ff1660f814156140d357603891505061178f565b8060ff1660f914156140e957603991505061178f565b8060ff1660fa14156140ff57606191505061178f565b8060ff1660fb141561411557606291505061178f565b8060ff1660fc141561412b57606391505061178f565b8060ff1660fd141561414157606491505061178f565b8060ff1660fe141561415757606591505061178f565b8060ff1660ff141561416d57606691505061178f565b50919050565b60008085851115614182578182fd5b8386111561418e578182fd5b505082019391909203915056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64735061757361626c653a206e65772070617573657220697320746865207a65726f206164647265737344657374696e6174696f6e2063616c6c6572206d757374206265206e6f6e7a65726f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206e6577206f776e6572526573637561626c653a206e6577207265736375657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c7565416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4d657373616765206e6f74206f726967696e616c6c792073656e742066726f6d207468697320646f6d61696e53656e646572206e6f74207065726d697474656420746f20757365206e6f6e63652e20417474656d7074656420746f20696e646578206174206f666673657420307845434453413a20696e76616c6964207369676e6174757265202776272076616c7565526573637561626c653a2063616c6c6572206973206e6f7420746865207265736375657254797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735061757361626c653a2063616c6c6572206973206e6f7420746865207061757365725361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a2646970667358221220e2eab27571cb9d2ecf49a592b1b78e24c28061c662fef829a376f797fcfcd15864736f6c63430007060033", + "sourceMap": "1032:13053:15:-:0;;;1228:26:29;;;-1:-1:-1;1228:26:29;;;2842:278:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2842:278:15;;;;;;;;;;;;;;;;;;;;1860:32:27;1879:12;:10;:12::i;:::-;1860:18;:32::i;:::-;3130:31:26;3150:10;3130:19;:31::i;:::-;3285:1;3264:18;:22;3296:24;3311:8;3296:14;:24::i;:::-;-1:-1:-1;;;3009:26:15;;;;;::::1;::::0;::::1;3045:40:::0;;;::::1;:18;:40:::0;3095:18;;;;;;::::1;::::0;-1:-1:-1;1032:13053:15;;598:104:13;685:10;598:104;:::o;2390:153:28:-;2479:13;2472:20;;-1:-1:-1;2472:20:28;;;2502:34;2527:8;2502:24;;;;;;;:34;;:::i;:::-;2390:153;:::o;7894:122:26:-;7971:16;:38;;-1:-1:-1;7971:38:26;-1:-1:-1;7971:38:26;;;;;;;;;;7894:122::o;3589:278::-;2809:16;;-1:-1:-1;2809:16:26;2795:10;:30;2787:70;;;;;-1:-1:-1;;;2787:70:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3679:25:26;::::1;3671:66;;;::::0;;-1:-1:-1;;;3671:66:26;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3755:33;3776:11;3755:16;:20;;;;;;:33;;;;:::i;:::-;3747:70;;;::::0;;-1:-1:-1;;;3747:70:26;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3832:28;::::0;-1:-1:-1;3832:28:26;::::1;::::0;::::1;::::0;;;::::1;3589:278:::0;:::o;2948:187:27:-;3021:16;3040:6;;-1:-1:-1;3056:17:27;;-1:-1:-1;3056:17:27;;;;;;;;3088:40;;3040:6;;;3056:17;;3040:6;;3088:40;;;2948:187;;:::o;6429:150:14:-;6499:4;6522:50;6527:3;-1:-1:-1;6547:23:14;;6522:4;:50::i;:::-;6515:57;;6429:150;;;;;:::o;1640:404::-;1703:4;1724:21;1734:3;1739:5;1724:9;:21::i;:::-;1719:319;;-1:-1:-1;1761:23:14;;;;;;;;:11;:23;;;;;;;;;;;;;1941:18;;1919:19;;;:12;;;:19;;;;;;:40;;;;1973:11;;1719:319;-1:-1:-1;2022:5:14;2015:12;;3805:127;3878:4;3901:19;;;:12;;;;;:19;;;;;;:24;;;3805:127::o;1032:13053:15:-;;;;;;;;;;;;;;;;;", + "linkReferences": { + "src/messages/Message.sol": { + "Message": [ + { + "start": 3081, + "length": 20 + }, + { + "start": 5109, + "length": 20 + }, + { + "start": 5943, + "length": 20 + }, + { + "start": 7834, + "length": 20 + }, + { + "start": 9662, + "length": 20 + } + ] + } + } + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80638da5cb5b1161010f578063bbde5374116100a2578063f2fde38b11610071578063f2fde38b146106da578063f7259a751461070d578063fae3687914610796578063feb61724146107c9576101e5565b8063bbde537414610665578063beb673d814610682578063de7769d41461069f578063e30c3978146106d2576101e5565b8063a82f2e26116100de578063a82f2e26146104fe578063af47b9bb14610506578063b2118a8d1461050e578063b857b77414610551576101e5565b80638da5cb5b146104c957806392492c68146104d15780639b0d94b7146104ee5780639fd0506d146104f6576101e5565b8063554bab3c116101875780637af82f60116101565780637af82f601461047e5780638371744e146104b15780638456cb59146104b95780638d3638f4146104c1576101e5565b8063554bab3c1461036557806357ecfd28146103985780635c975abb1461046e57806379ba509714610476576101e5565b806338a63183116101c357806338a63183146102f15780633f4ba83a1461032257806351079a531461032a57806354fd4d5014610344576101e5565b80630ba469bc146101ea5780632ab60045146102895780632d025080146102be575b600080fd5b61026c6004803603606081101561020057600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561022d57600080fd5b82018360208201111561023f57600080fd5b8035906020019184600183028401116401000000008311171561026157600080fd5b5090925090506107e6565b6040805167ffffffffffffffff9092168252519081900360200190f35b6102bc6004803603602081101561029f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610931565b005b6102bc600480360360208110156102d457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a14565b6102f9610c40565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102bc610c5c565b610332610d1f565b60408051918252519081900360200190f35b61034c610d30565b6040805163ffffffff9092168252519081900360200190f35b6102bc6004803603602081101561037b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d54565b61045a600480360360408110156103ae57600080fd5b8101906020810181356401000000008111156103c957600080fd5b8201836020820111156103db57600080fd5b803590602001918460018302840111640100000000831117156103fd57600080fd5b91939092909160208101903564010000000081111561041b57600080fd5b82018360208201111561042d57600080fd5b8035906020019184600183028401116401000000008311171561044f57600080fd5b509092509050610e3d565b604080519115158252519081900360200190f35b61045a6116bb565b6102bc6116dc565b61045a6004803603602081101561049457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661177f565b61026c611794565b6102bc6117a4565b61034c61187e565b6102f96118a2565b6102bc600480360360208110156104e757600080fd5b50356118be565b6102f9611901565b6102f961191d565b610332611939565b61033261193f565b6102bc6004803603606081101561052457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611945565b6102bc6004803603608081101561056757600080fd5b81019060208101813564010000000081111561058257600080fd5b82018360208201111561059457600080fd5b803590602001918460018302840111640100000000831117156105b657600080fd5b9193909290916020810190356401000000008111156105d457600080fd5b8201836020820111156105e657600080fd5b8035906020019184600183028401116401000000008311171561060857600080fd5b91939092909160208101903564010000000081111561062657600080fd5b82018360208201111561063857600080fd5b8035906020019184600183028401116401000000008311171561065a57600080fd5b9193509150356119db565b6102bc6004803603602081101561067b57600080fd5b5035611d59565b6102f96004803603602081101561069857600080fd5b5035611f7b565b6102bc600480360360208110156106b557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611f88565b6102f9612092565b6102bc600480360360208110156106f057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166120ae565b61026c6004803603608081101561072357600080fd5b63ffffffff823516916020810135916040820135919081019060808101606082013564010000000081111561075757600080fd5b82018360208201111561076957600080fd5b8035906020019184600183028401116401000000008311171561078b57600080fd5b509092509050612146565b6102bc600480360360208110156107ac57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166122e4565b610332600480360360208110156107df57600080fd5b50356124a6565b60025460009074010000000000000000000000000000000000000000900460ff161561087357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b60008061087e612558565b9050600073__$8c977731748aa4504deed57239565df533$__6382c947b7336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156108e757600080fd5b505af41580156108fb573d6000803e3d6000fd5b505050506040513d602081101561091157600080fd5b5051905061092488888584868b8b61259a565b509150505b949350505050565b6109396127a4565b73ffffffffffffffffffffffffffffffffffffffff81166109a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614231602a913960400191505060405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe475e580d85111348e40d8ca33cfdd74c30fe1655c2d8537a13abc10065ffa5a90600090a250565b60075473ffffffffffffffffffffffffffffffffffffffff163314610a9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616c6c6572206e6f74206174746573746572206d616e616765720000000000604482015290519081900360640190fd5b6000610aa4610d1f565b905060018111610b1557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f546f6f2066657720656e61626c65642061747465737465727300000000000000604482015290519081900360640190fd5b6004548111610b8557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5369676e6174757265207468726573686f6c6420697320746f6f206c6f770000604482015290519081900360640190fd5b610b9060058361284e565b610bfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f417474657374657220616c72656164792064697361626c656400000000000000604482015290519081900360640190fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316907f78e573a18c75957b7cadaab01511aa1c19a659f06ecf53e01de37ed92d3261fc90600090a25050565b60035473ffffffffffffffffffffffffffffffffffffffff1690565b60025473ffffffffffffffffffffffffffffffffffffffff163314610ccc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806143916022913960400191505060405180910390fd5b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b6000610d2b6005612870565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610d5c6127a4565b73ffffffffffffffffffffffffffffffffffffffff8116610dc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806141be6028913960400191505060405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fb80482a293ca2e013eda8683c9bd7fc8347cfdaeea5ede58cba46df502c2a60490600090a250565b60025460009074010000000000000000000000000000000000000000900460ff1615610eca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b610ed68585858561287b565b6000610f1c600087878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050612a989050565b9050610f497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612abc565b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f9b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612bfa565b63ffffffff161461100d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c69642064657374696e6174696f6e20646f6d61696e000000000000604482015290519081900360640190fd5b600061103a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612c2b565b1461116c57604080517f82c947b7000000000000000000000000000000000000000000000000000000008152336004820152905173__$8c977731748aa4504deed57239565df533$__916382c947b7916024808301926020929190829003018186803b1580156110a957600080fd5b505af41580156110bd573d6000803e3d6000fd5b505050506040513d60208110156110d357600080fd5b50516111007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612c2b565b1461116c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c69642063616c6c657220666f72206d657373616765000000000000604482015290519081900360640190fd5b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166111be7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612c5c565b63ffffffff161461123057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964206d6573736167652076657273696f6e000000000000000000604482015290519081900360640190fd5b600061125d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612c8c565b9050600061128c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416612cbc565b9050600061129a8383612ced565b6000818152600a60205260409020549091501561131857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f6e636520616c726561647920757365640000000000000000000000000000604482015290519081900360640190fd5b6000818152600a60205260408120600190556113557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008616612d68565b905060006113ae6113877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816612d99565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016612e08565b905073__$8c977731748aa4504deed57239565df533$__635ced058e6113f57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008916612e4c565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561142957600080fd5b505af415801561143d573d6000803e3d6000fd5b505050506040513d602081101561145357600080fd5b50516040517f96abeb7000000000000000000000000000000000000000000000000000000000815263ffffffff8716600482019081526024820185905260606044830190815284516064840152845173ffffffffffffffffffffffffffffffffffffffff909416936396abeb70938a938893889391929091608490910190602085019080838360005b838110156114f45781810151838201526020016114dc565b50505050905090810190601f1680156115215780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561154257600080fd5b505af1158015611556573d6000803e3d6000fd5b505050506040513d602081101561156c57600080fd5b50516115d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f68616e646c65526563656976654d6573736167652829206661696c6564000000604482015290519081900360640190fd5b8367ffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f58200b4c34ae05ee816d710053fff3fb75af4395915d3d2a771b24aa10e3cc5d878585604051808463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561166e578181015183820152602001611656565b50505050905090810190601f16801561169b5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35060019a9950505050505050505050565b60025474010000000000000000000000000000000000000000900460ff1681565b60006116e6612e7d565b90508073ffffffffffffffffffffffffffffffffffffffff16611707612092565b73ffffffffffffffffffffffffffffffffffffffff1614611773576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806142086029913960400191505060405180910390fd5b61177c81612e81565b50565b600061178c600583612eb2565b90505b919050565b60095467ffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff163314611814576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806143916022913960400191505060405180910390fd5b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6118c66127a4565b60088190556040805182815290517fb13bf6bebed03d1b318e3ea32e4b2a3ad9f5e2312cdf340a2f4bbfaee39f928d9181900360200190a150565b60075473ffffffffffffffffffffffffffffffffffffffff1690565b60025473ffffffffffffffffffffffffffffffffffffffff1690565b60045481565b60085481565b60035473ffffffffffffffffffffffffffffffffffffffff1633146119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806143336024913960400191505060405180910390fd5b6119d673ffffffffffffffffffffffffffffffffffffffff84168383612ed4565b505050565b60025474010000000000000000000000000000000000000000900460ff1615611a6557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b611a718787878761287b565b6000611ab7600089898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050612a989050565b9050611ae47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612abc565b6000611b117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612d68565b905073__$8c977731748aa4504deed57239565df533$__635ced058e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611b6257600080fd5b505af4158015611b76573d6000803e3d6000fd5b505050506040513d6020811015611b8c57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff163314611bfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806142cf6021913960400191505060405180910390fd5b6000611c287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416612c8c565b90507f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff1614611cae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806142a3602c913960400191505060405180910390fd5b6000611cdb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516612bfa565b90506000611d0a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008616612e4c565b90506000611d397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716612cbc565b9050611d4a83838988858e8e61259a565b50505050505050505050505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314611ddf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616c6c6572206e6f74206174746573746572206d616e616765720000000000604482015290519081900360640190fd5b80611e4b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e76616c6964207369676e6174757265207468726573686f6c640000000000604482015290519081900360640190fd5b611e556005612870565b811115611ec357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4e6577207369676e6174757265207468726573686f6c6420746f6f2068696768604482015290519081900360640190fd5b600454811415611f3457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5369676e6174757265207468726573686f6c6420616c72656164792073657400604482015290519081900360640190fd5b6004805490829055604080518281526020810184905281517f149153f58b4da003a8cfd4523709a202402182cb5aa335046911277a1be6eede929181900390910190a15050565b600061178c600583612f61565b611f906127a4565b73ffffffffffffffffffffffffffffffffffffffff811661201257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e76616c6964206174746573746572206d616e616765722061646472657373604482015290519081900360640190fd5b60075473ffffffffffffffffffffffffffffffffffffffff1661203482612f6d565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0cee1b7ae04f3c788dd3a46c6fa677eb95b913611ef7ab59524fdc09d346021960405160405180910390a35050565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b6120b66127a4565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556121016118a2565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60025460009074010000000000000000000000000000000000000000900460ff16156121d357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b83612229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806141e66022913960400191505060405180910390fd5b6000612233612558565b9050600073__$8c977731748aa4504deed57239565df533$__6382c947b7336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561229c57600080fd5b505af41580156122b0573d6000803e3d6000fd5b505050506040513d60208110156122c657600080fd5b505190506122d988888884868a8a61259a565b509695505050505050565b60075473ffffffffffffffffffffffffffffffffffffffff16331461236a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616c6c6572206e6f74206174746573746572206d616e616765720000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166123ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4e6577206174746573746572206d757374206265206e6f6e7a65726f00000000604482015290519081900360640190fd5b6123f760058261252d565b61246257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f417474657374657220616c726561647920656e61626c65640000000000000000604482015290519081900360640190fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907f5b99bab45c72ce67e89466dbc47480b9c1fde1400e7268bbf463b8354ee4653f90600090a250565b600a6020526000908152604090205481565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061254f8373ffffffffffffffffffffffffffffffffffffffff8416612fb4565b90505b92915050565b600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff9283169081019092161790915590565b60085481111561260b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65737361676520626f64792065786365656473206d61782073697a65000000604482015290519081900360640190fd5b8561267757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f526563697069656e74206d757374206265206e6f6e7a65726f00000000000000604482015290519081900360640190fd5b60006126ff7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008a87898c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ffe92505050565b90507f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036816040518080602001828103825283818151815260200191508051906020019080838360005b83811015612760578181015183820152602001612748565b50505050905090810190601f16801561278d5780820380516001836020036101000a031916815260200191505b509250505060405180910390a15050505050505050565b6127ac612e7d565b73ffffffffffffffffffffffffffffffffffffffff166127ca6118a2565b73ffffffffffffffffffffffffffffffffffffffff161461284c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b600061254f8373ffffffffffffffffffffffffffffffffffffffff84166130f3565b600061178c826131d7565b60045460410281146128ee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c6964206174746573746174696f6e206c656e677468000000000000604482015290519081900360640190fd5b60008085856040518083838082843760405192018290039091209450600093505050505b600454811015612a8f5760006129316041838102908101908789614173565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093945061297492508691508490506131db565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611612a1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e76616c6964207369676e6174757265206f72646572206f72206475706500604482015290519081900360640190fd5b612a198161177f565b612a8457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e76616c6964207369676e61747572653a206e6f7420617474657374657200604482015290519081900360640190fd5b935050600101612912565b50505050505050565b815160009060208401612ab364ffffffffff851682846131e7565b95945050505050565b612ae77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216613248565b612b5257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d616c666f726d6564206d657373616765000000000000000000000000000000604482015290519081900360640190fd5b6074612b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613285565b6bffffffffffffffffffffffff16101561177c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c6964206d6573736167653a20746f6f2073686f7274000000000000604482015290519081900360640190fd5b600061178c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660086004613299565b600061178c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316605460206132ba565b600061178c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826004613299565b600061178c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316600480613299565b600061178c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316600c6008613299565b6040805160e09390931b7fffffffff000000000000000000000000000000000000000000000000000000001660208085019190915260c09290921b7fffffffffffffffff0000000000000000000000000000000000000000000000001660248401528051808403600c018152602c9093019052815191012090565b600061178c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316601460206132ba565b600061178c607480612dcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008616613285565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000861692916bffffffffffffffffffffffff9103166000613465565b6060600080612e1684613285565b6bffffffffffffffffffffffff1690506040519150819250612e3b84836020016134f5565b508181016020016040529052919050565b600061178c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316603460206132ba565b3390565b600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561177c816124b8565b600061254f8373ffffffffffffffffffffffffffffffffffffffff8416613621565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526119d6908490613639565b600061254f8383613711565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000612fc08383613621565b612ff657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612552565b506000612552565b60608888888888888888604051602001808963ffffffff1660e01b81526004018863ffffffff1660e01b81526004018763ffffffff1660e01b81526004018667ffffffffffffffff1660c01b815260080185815260200184815260200183815260200182805190602001908083835b602083106130aa57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161306d565b6001836020036101000a03801982511681845116808217855250505050505090500198505050505050505050604051602081830303815290604052905098975050505050505050565b600081815260018301602052604081205480156131cd5783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301919081019060009087908390811061314457fe5b906000526020600020015490508087600001848154811061316157fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061319157fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050612552565b6000915050612552565b5490565b600061254f838361378f565b6000806131f4848461381f565b9050604051811115613204575060005b80613232577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050613241565b61323d858585613891565b9150505b9392505050565b6000613253826138a4565b64ffffffffff1664ffffffffff141561326e5750600061178f565b6000613279836138aa565b60405110199392505050565b60181c6bffffffffffffffffffffffff1690565b60008160200360080260ff166132b08585856132ba565b901c949350505050565b600060ff82166132cc57506000613241565b6132d584613285565b6bffffffffffffffffffffffff166132f08460ff851661381f565b11156133cf57613331613302856138d4565b6bffffffffffffffffffffffff1661331986613285565b6bffffffffffffffffffffffff16858560ff166138e8565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561339457818101518382015260200161337c565b50505050905090810190601f1680156133c15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60208260ff16111561342c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614357603a913960400191505060405180910390fd5b60088202600061343b866138d4565b6bffffffffffffffffffffffff169050600061345683613a43565b91909501511695945050505050565b600080613471866138d4565b6bffffffffffffffffffffffff16905061348a866138aa565b61349e85613498848961381f565b9061381f565b11156134cd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050610929565b6134d7818661381f565b90506134eb8364ffffffffff1682866131e7565b9695505050505050565b600061350083613a8c565b613555576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806143dd6028913960400191505060405180910390fd5b61355e83613248565b6135b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614405602b913960400191505060405180910390fd5b60006135be84613285565b6bffffffffffffffffffffffff16905060006135d9856138d4565b6bffffffffffffffffffffffff16905060006040519050848111156135fe5760206060fd5b8285848460045afa506134eb613613876138a4565b64ffffffffff168685613891565b60009081526001919091016020526040902054151590565b600061369b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613a9e9092919063ffffffff16565b8051909150156119d6578080602001905160208110156136ba57600080fd5b50516119d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806143b3602a913960400191505060405180910390fd5b8154600090821061376d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061419c6022913960400191505060405180910390fd5b82600001828154811061377c57fe5b9060005260206000200154905092915050565b6000815160411461380157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6134eb86828585613aad565b8181018281101561255257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b60d81c90565b60006138b582613285565b6138be836138d4565b016bffffffffffffffffffffffff169050919050565b60781c6bffffffffffffffffffffffff1690565b606060006138f586613c9b565b915050600061390386613c9b565b915050600061391186613c9b565b915050600061391f86613c9b565b915050838383836040516020018080614430603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a82015260500160216142f082397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b6000613a9782613d6f565b1592915050565b60606109298484600085613d97565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613b28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061425b6022913960400191505060405180910390fd5b8360ff16601b1480613b3d57508360ff16601c145b613b92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806143116022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613bee573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612ab357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b600080601f5b600f8160ff161115613d035760ff600882021684901c613cc081613f51565b61ffff16841793508160ff16601014613cdb57601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ca1565b50600f5b60ff8160ff161015613d695760ff600882021684901c613d2681613f51565b61ffff16831792508160ff16600014613d4157601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613d07565b50915091565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b606082471015613df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061427d6026913960400191505060405180910390fd5b613dfb85613f81565b613e6657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310613ecf57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613e92565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613f31576040519150601f19603f3d011682016040523d82523d6000602084013e613f36565b606091505b5091509150613f46828286613f87565b979650505050505050565b6000613f6360048360ff16901c614007565b60ff161760081b62ffff0016613f7882614007565b60ff1617919050565b3b151590565b60608315613f96575081613241565b825115613fa65782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561339457818101518382015260200161337c565b600060f08083179060ff8216141561402357603091505061178f565b8060ff1660f1141561403957603191505061178f565b8060ff1660f2141561404f57603291505061178f565b8060ff1660f3141561406557603391505061178f565b8060ff1660f4141561407b57603491505061178f565b8060ff1660f5141561409157603591505061178f565b8060ff1660f614156140a757603691505061178f565b8060ff1660f714156140bd57603791505061178f565b8060ff1660f814156140d357603891505061178f565b8060ff1660f914156140e957603991505061178f565b8060ff1660fa14156140ff57606191505061178f565b8060ff1660fb141561411557606291505061178f565b8060ff1660fc141561412b57606391505061178f565b8060ff1660fd141561414157606491505061178f565b8060ff1660fe141561415757606591505061178f565b8060ff1660ff141561416d57606691505061178f565b50919050565b60008085851115614182578182fd5b8386111561418e578182fd5b505082019391909203915056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64735061757361626c653a206e65772070617573657220697320746865207a65726f206164647265737344657374696e6174696f6e2063616c6c6572206d757374206265206e6f6e7a65726f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206e6577206f776e6572526573637561626c653a206e6577207265736375657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c7565416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4d657373616765206e6f74206f726967696e616c6c792073656e742066726f6d207468697320646f6d61696e53656e646572206e6f74207065726d697474656420746f20757365206e6f6e63652e20417474656d7074656420746f20696e646578206174206f666673657420307845434453413a20696e76616c6964207369676e6174757265202776272076616c7565526573637561626c653a2063616c6c6572206973206e6f7420746865207265736375657254797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735061757361626c653a2063616c6c6572206973206e6f7420746865207061757365725361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a2646970667358221220e2eab27571cb9d2ecf49a592b1b78e24c28061c662fef829a376f797fcfcd15864736f6c63430007060033", + "sourceMap": "1032:13053:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3612:579;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3612:579:15;;-1:-1:-1;3612:579:15;-1:-1:-1;3612:579:15;:::i;:::-;;;;;;;;;;;;;;;;;;;2214:264:30;;;;;;;;;;;;;;;;-1:-1:-1;2214:264:30;;;;:::i;:::-;;5431:667:26;;;;;;;;;;;;;;;;-1:-1:-1;5431:667:26;;;;:::i;1384:83:30:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2098:94:29;;;:::i;4333:113:26:-;;;:::i;:::-;;;;;;;;;;;;;;;;2406:31:15;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2249:256:29;;;;;;;;;;;;;;;;-1:-1:-1;2249:256:29;;;;:::i;9350:1877:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9350:1877:15;;-1:-1:-1;9350:1877:15;-1:-1:-1;9350:1877:15;:::i;:::-;;;;;;;;;;;;;;;;;;1228:26:29;;;:::i;2623:240:28:-;;;:::i;4082:131:26:-;;;;;;;;;;;;;;;;-1:-1:-1;4082:131:26;;;;:::i;2618:32:15:-;;;:::i;1919:89:29:-;;;:::i;2334:35:15:-;;;:::i;2125:85:27:-;;;:::i;11493:220:15:-;;;;;;;;;;;;;;;;-1:-1:-1;11493:220:15;;:::i;7314:99:26:-;;;:::i;1751:81:29:-;;;:::i;2207:33:26:-;;;:::i;2526::15:-;;;:::i;1909:177:30:-;;;;;;;;;;;;;;;;-1:-1:-1;1909:177:30;;;;;;;;;;;;;;;;;;:::i;5013:1314:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5013:1314:15;-1:-1:-1;5013:1314:15;;:::i;6410:779:26:-;;;;;;;;;;;;;;;;-1:-1:-1;6410:779:26;;:::i;7585:125::-;;;;;;;;;;;;;;;;-1:-1:-1;7585:125:26;;:::i;4653:409::-;;;;;;;;;;;;;;;;-1:-1:-1;4653:409:26;;;;:::i;1700:99:28:-;;;:::i;1992:214::-;;;;;;;;;;;;;;;;-1:-1:-1;1992:214:28;;;;:::i;7236:687:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7236:687:15;;-1:-1:-1;7236:687:15;-1:-1:-1;7236:687:15;:::i;3589:278:26:-;;;;;;;;;;;;;;;;-1:-1:-1;3589:278:26;;;;:::i;2745:45:15:-;;;;;;;;;;;;;;;;-1:-1:-1;2745:45:15;;:::i;3612:579::-;1408:6:29;;3777::15;;1408::29;;;;;1407:7;1399:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3795:31:15::1;::::0;3865:27:::1;:25;:27::i;:::-;3849:43;;3902:22;3927:7;:24;3952:10;3927:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;3927:36:15;;-1:-1:-1;3974:186:15::1;4000:17:::0;4031:9;4054:23;3927:36;4119:6;4139:11;;3974:12:::1;:186::i;:::-;-1:-1:-1::0;4178:6:15;-1:-1:-1;;1445:1:29::1;3612:579:15::0;;;;;;:::o;2214:264:30:-;2018:13:27;:11;:13::i;:::-;2307:24:30::1;::::0;::::1;2286:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2409:8;:21:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;2445:26:::1;::::0;::::1;::::0;-1:-1:-1;;2445:26:30::1;2214:264:::0;:::o;5431:667:26:-;2809:16;;;;2795:10;:30;2787:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5587:28:::1;5618:24;:22;:24::i;:::-;5587:55;;5684:1;5661:20;:24;5653:62;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;5894:18;;5871:20;:41;5850:118;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;5987:33;:16;6011:8:::0;5987:23:::1;:33::i;:::-;5979:71;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6065:26;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;2867:1;5431:667:::0;:::o;1384:83:30:-;1452:8;;;;1384:83;:::o;2098:94:29:-;1595:7;;;;1581:10;:21;1573:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2147:6:::1;:14:::0;;;::::1;::::0;;2176:9:::1;::::0;::::1;::::0;2156:5:::1;::::0;2176:9:::1;2098:94::o:0;4333:113:26:-;4388:7;4414:25;:16;:23;:25::i;:::-;4407:32;;4333:113;:::o;2406:31:15:-;;;:::o;2249:256:29:-;2018:13:27;:11;:13::i;:::-;2341:24:29::1;::::0;::::1;2320:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2441:7;:20:::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;;2476:22:::1;::::0;2490:7;::::1;::::0;2476:22:::1;::::0;-1:-1:-1;;2476:22:29::1;2249:256:::0;:::o;9350:1877:15:-;1408:6:29;;9499:12:15;;1408:6:29;;;;;1407:7;1399:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9581:50:15::1;9610:7;;9619:11;;9581:28;:50::i;:::-;9642:12;9657:14;9669:1;9657:7;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;9657:11:15;;:14;-1:-1:-1;;9657:11:15::1;:14:::0;-1:-1:-1;9657:14:15:i:1;:::-;9642:29:::0;-1:-1:-1;9717:29:15::1;:27:::0;;::::1;;:29::i;:::-;9805:40;9834:11;9805:40;:25;:23:::0;;::::1;;:25::i;:::-;:40;;;9784:113;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;9988:1;9951:25;:23:::0;;::::1;;:25::i;:::-;:39;9947:240;;10080:36;::::0;;;;;10105:10:::1;10080:36;::::0;::::1;::::0;;;:7:::1;::::0;:24:::1;::::0;:36;;;;;::::1;::::0;;;;;;;;:7;:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;10080:36:15;10031:25:::1;:23:::0;;::::1;;:25::i;:::-;:85;10006:170;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10233:26;10252:7;10233:26;:15;:13:::0;;::::1;;:15::i;:::-;:26;;;10225:62;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10337:20;10360;:18:::0;;::::1;;:20::i;:::-;10337:43:::0;-1:-1:-1;10390:13:15::1;10406;:11:::0;;::::1;;:13::i;:::-;10390:29;;10429:23;10455:42;10475:13;10490:6;10455:19;:42::i;:::-;10515:27;::::0;;;:10:::1;:27;::::0;;;;;10429:68;;-1:-1:-1;10515:32:15;10507:63:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10607:27;::::0;;;:10:::1;:27;::::0;;;;10637:1:::1;10607:31:::0;;10701:14:::1;:12:::0;;::::1;;:14::i;:::-;10683:32:::0;-1:-1:-1;10725:25:15::1;10753:27;:19;:17:::0;;::::1;;:19::i;:::-;:25:::0;::::1;;:27::i;:::-;10725:55:::0;-1:-1:-1;10827:7:15::1;:24;10852:17;:15:::0;;::::1;;:17::i;:::-;10827:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;10827:43:15;10811:136:::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;:98:::1;::::0;;::::1;::::0;::::1;::::0;10910:13;;10925:7;;10934:12;;10811:136;;;;;;;;;10827:43:::1;10811:136:::0;::::1;::::0;;;;-1:-1:-1;10811:136:15::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;10811:136:15;10790:212:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;11136:6;11056:143;;11085:10;11056:143;;;11109:13;11156:7;11177:12;11056:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;11216:4:15::1;::::0;9350:1877;-1:-1:-1;;;;;;;;;;9350:1877:15:o;1228:26:29:-;;;;;;;;;:::o;2623:240:28:-;2669:14;2686:12;:10;:12::i;:::-;2669:29;;2747:6;2729:24;;:14;:12;:14::i;:::-;:24;;;2708:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2830:26;2849:6;2830:18;:26::i;:::-;2623:240;:::o;4082:131:26:-;4148:4;4171:35;:16;4197:8;4171:25;:35::i;:::-;4164:42;;4082:131;;;;:::o;2618:32:15:-;;;;;;:::o;1919:89:29:-;1595:7;;;;1581:10;:21;1573:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1966:6:::1;:13:::0;;;::::1;::::0;::::1;::::0;;1994:7:::1;::::0;::::1;::::0;1966:13;;1994:7:::1;1919:89::o:0;2334:35:15:-;;;:::o;2125:85:27:-;2171:7;2197:6;;;2125:85;:::o;11493:220:15:-;2018:13:27;:11;:13::i;:::-;11604:18:15::1;:42:::0;;;11661:45:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;11493:220:::0;:::o;7314:99:26:-;7390:16;;;;7314:99;:::o;1751:81:29:-;1818:7;;;;1751:81;:::o;2207:33:26:-;;;;:::o;2526::15:-;;;;:::o;1909:177:30:-;1615:8;;;;1601:10;:22;1593:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2041:38:::1;:26;::::0;::::1;2068:2:::0;2072:6;2041:26:::1;:38::i;:::-;1909:177:::0;;;:::o;5013:1314:15:-;1408:6:29;;;;;;;1407:7;1399:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5300:66:15::1;5329:15;;5346:19;;5300:28;:66::i;:::-;5377:20;5400:22;5420:1;5400:15;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;5400:19:15;;:22;-1:-1:-1;;5400:19:15::1;:22:::0;-1:-1:-1;5400:22:15:i:1;:::-;5377:45:::0;-1:-1:-1;5468:37:15::1;:35:::0;;::::1;;:37::i;:::-;5551:15;5569:22;:20:::0;;::::1;;:22::i;:::-;5551:40;;5636:7;:24;5661:7;5636:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;5636:33:15;5622:47:::1;;:10;:47;5601:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5773:20;5796:28;:26:::0;;::::1;;:28::i;:::-;5773:51;;5872:11;5855:28;;:13;:28;;;5834:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5964:25;5992:33;:31:::0;;::::1;;:33::i;:::-;5964:61:::0;-1:-1:-1;6035:18:15::1;6056:25;:23:::0;;::::1;;:25::i;:::-;6035:46:::0;-1:-1:-1;6091:13:15::1;6107:21;:19:::0;;::::1;;:21::i;:::-;6091:37;;6139:181;6165:18;6197:10;6221:20;6255:7;6276:6;6296:14;;6139:12;:181::i;:::-;1445:1:29;;;;;;5013:1314:15::0;;;;;;;:::o;6410:779:26:-;2809:16;;;;2795:10;:30;2787:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6539:26;6531:66:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6735:25;:16;:23;:25::i;:::-;6710:21;:50;;6689:129;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6875:18;;6850:21;:43;;6829:121;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6994:18;::::0;;7022:42;;;;7079:103:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;2867:1;6410:779:::0;:::o;7585:125::-;7651:7;7677:26;:16;7697:5;7677:19;:26::i;4653:409::-;2018:13:27;:11;:13::i;:::-;4782:32:26::1;::::0;::::1;4761:111;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4912:16;::::0;::::1;;4938:39;4958:18:::0;4938:19:::1;:39::i;:::-;5036:18;4992:63;;5015:19;4992:63;;;;;;;;;;;;2041:1:27;4653:409:26::0;:::o;1700:99:28:-;1779:13;;;;1700:99;:::o;1992:214::-;2018:13:27;:11;:13::i;:::-;2117::28::1;:24:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;2181:7:::1;:5;:7::i;:::-;2156:43;;;;;;;;;;;;1992:214:::0;:::o;7236:687:15:-;1408:6:29;;7446::15;;1408::29;;;;;1407:7;1399:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7485:31:15;7464:112:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7587:13;7603:27;:25;:27::i;:::-;7587:43;;7640:22;7665:7;:24;7690:10;7665:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;7665:36:15;;-1:-1:-1;7712:180:15::1;7738:17:::0;7769:9;7792:17;7665:36;7851:6;7871:11;;7712:12:::1;:180::i;:::-;-1:-1:-1::0;7910:6:15;7236:687;-1:-1:-1;;;;;;7236:687:15:o;3589:278:26:-;2809:16;;;;2795:10;:30;2787:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3679:25:::1;::::0;::::1;3671:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3755:33;:16;3776:11:::0;3755:20:::1;:33::i;:::-;3747:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3832:28;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;3589:278:::0;:::o;2745:45:15:-;;;;;;;;;;;;;:::o;2948:187:27:-;3021:16;3040:6;;;3056:17;;;;;;;;;;3088:40;;3040:6;;;;;;;3088:40;;3021:16;3088:40;2948:187;;:::o;6429:150:14:-;6499:4;6522:50;6527:3;6547:23;;;6522:4;:50::i;:::-;6515:57;;6429:150;;;;;:::o;13877:206:15:-;13974:18;;;14002:43;;;13974:18;;;;;14023:22;;;14002:43;;;;;;;13974:18;13877:206::o;12475:836::-;12790:18;;12767:41;;;12746:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12882:24;12874:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12976:21;13000:233;13036:7;13057:11;13082:18;13114:6;13134:7;13155:10;13179:18;13211:12;;13000:233;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13000:22:15;;-1:-1:-1;;;13000:233:15:i;:::-;12976:257;;13283:21;13295:8;13283:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12475:836;;;;;;;;:::o;2283:130:27:-;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2283:130::o;6747:156:14:-;6820:4;6843:53;6851:3;6871:23;;;6843:7;:53::i;7230:115::-;7293:7;7319:19;7327:3;7319:7;:19::i;8866:1327:26:-;9066:18;;2347:2;9048:36;9025:59;;9004:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9191:30;9341:15;9369:8;;9359:19;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9394:9:26;;-1:-1:-1;;;;9389:798:26;9409:18;;9405:1;:22;9389:798;;;9448:23;9474:103;2347:2;9487:19;;;9507:69;;;;9474:12;;:103;:::i;:::-;9448:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9448:129:26;;-1:-1:-1;9621:92:26;;-1:-1:-1;9664:7:26;;-1:-1:-1;9448:129:26;;-1:-1:-1;9621:25:26;:92::i;:::-;9592:121;;9891:22;9870:43;;:18;:43;;;9845:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10017:37;10035:18;10017:17;:37::i;:::-;9992:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10158:18;-1:-1:-1;;9429:3:26;;9389:798;;;;8866:1327;;;;;;:::o;13237:368:7:-;13341:10;;13307:7;;13496:4;13487:14;;13572:26;;;;13487:14;13341:10;13572:5;:26::i;:::-;13565:33;13237:368;-1:-1:-1;;;;;13237:368:7:o;5997:248:25:-;6079:18;:16;;;;:18::i;:::-;6071:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2090:3;6150:14;:12;;;;:14::i;:::-;:36;;;;6129:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3841:184;3934:6;3970:47;:18;;;1841:1;4015;3970:18;:47::i;4633:174::-;4726:7;4756:44;:14;;;2038:2;4797;4756:14;:44::i;3437:135::-;3496:6;3528:36;:18;;;3496:6;3562:1;3528:18;:36::i;3631:146::-;3695:6;3727:42;:18;;;1784:1;;3727:18;:42::i;4077:131::-;4134:6;4166:34;:18;;;1885:2;4198:1;4166:18;:34::i;13587:188:15:-;13734:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13724:44;;;;;;13587:188::o;4261:123:25:-;4319:7;4345:32;:14;;;1931:2;4374;4345:14;:32::i;4865:244::-;4928:7;4966:136;2090:3;;5034:14;:12;;;;:14::i;:::-;4966;;;;:136;;5034:35;;4966:136;5087:1;4966:14;:136::i;27680:614:7:-;27735:16;27763:11;27784:12;27799;27803:7;27799:3;:12::i;:::-;27784:27;;;;27929:4;27923:11;27916:18;;27984:3;27977:10;;28006:33;28019:7;28028:3;28034:4;28028:10;28006:12;:33::i;:::-;-1:-1:-1;28161:14:7;;;28177:4;28157:25;28151:4;28144:39;28224:17;;28058:230;;-1:-1:-1;28058:230:7:o;4440:129:25:-;4501:7;4527:35;:14;;;1980:2;4559;4527:14;:35::i;598:104:13:-;685:10;598:104;:::o;2390:153:28:-;2479:13;2472:20;;;;;;2502:34;2527:8;2502:24;:34::i;6984:165:14:-;7064:4;7087:55;7097:3;7117:23;;;7087:9;:55::i;704:175:11:-;813:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;836:23;813:58;;;786:86;;806:5;;786:19;:86::i;7677:156:14:-;7751:7;7801:22;7805:3;7817:5;7801:3;:22::i;7894:122:26:-;7971:16;:38;;;;;;;;;;;;;;;7894:122::o;1640:404:14:-;1703:4;1724:21;1734:3;1739:5;1724:9;:21::i;:::-;1719:319;;-1:-1:-1;1761:23:14;;;;;;;;:11;:23;;;;;;;;;;;;;1941:18;;1919:19;;;:12;;;:19;;;;;;:40;;;;1973:11;;1719:319;-1:-1:-1;2022:5:14;2015:12;;2737:646:25;3047:12;3124:11;3153:16;3187:21;3226:9;3253:10;3281:13;3312:21;3351:11;3090:286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3071:305;;2737:646;;;;;;;;;;:::o;2212:1512:14:-;2278:4;2415:19;;;:12;;;:19;;;;;;2449:15;;2445:1273;;2878:18;;2830:14;;;;;2878:22;;;;2806:21;;2878:3;;:22;;3160;;;;;;;;;;;;;;3140:42;;3303:9;3274:3;:11;;3286:13;3274:26;;;;;;;;;;;;;;;;;;;:38;;;;3378:23;;;3420:1;3378:12;;;:23;;;;;;3404:17;;;3378:43;;3527:17;;3378:3;;3527:17;;;;;;;;;;;;;;;;;;;;;;3619:3;:12;;:19;3632:5;3619:19;;;;;;;;;;;3612:26;;;3660:4;3653:11;;;;;;;;2445:1273;3702:5;3695:12;;;;;4013:107;4095:18;;4013:107::o;10397:197:26:-;10521:7;10552:34;10566:7;10575:10;10552:13;:34::i;12397:443:7:-;12478:15;;12520:14;:4;12529;12520:8;:14::i;:::-;12505:29;;12657:4;12651:11;12645:4;12642:21;12639:2;;;-1:-1:-1;12690:1:7;12639:2;12728:9;12724:51;;12760:4;12753:11;;;;;12724:51;12794:39;12815:5;12822:4;12828;12794:20;:39::i;:::-;12784:49;;12397:443;;;;;;;:::o;8272:319::-;8329:8;8353:15;8360:7;8353:6;:15::i;:::-;:31;;8372:12;8353:31;8349:52;;;-1:-1:-1;8394:5:7;8387:12;;8349:52;8410:12;8425;8429:7;8425:3;:12::i;:::-;8568:4;8562:11;-1:-1:-1;8549:26:7;;8456:129;-1:-1:-1;;;8456:129:7:o;15855:291::-;16110:2;16106:16;2800:26;16102:28;;16008:132::o;20525:191::-;20614:14;20697:6;20692:2;:11;20707:1;20691:17;20647:62;;20655:30;20661:7;20670:6;20678;20655:5;:30::i;:::-;20647:62;;;20525:191;-1:-1:-1;;;;20525:191:7:o;19502:677::-;19587:14;19617:11;;;19613:37;;-1:-1:-1;19646:1:7;19631:17;;19613:37;19684:12;19688:7;19684:3;:12::i;:::-;19663:33;;:18;:6;:18;;;:10;:18::i;:::-;:33;19659:140;;;19719:68;19735:12;19739:7;19735:3;:12::i;:::-;19719:68;;19749:12;19753:7;19749:3;:12::i;:::-;19719:68;;19763:6;19779;19771:15;;19719;:68::i;:::-;19712:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19659:140;19826:2;19816:6;:12;;;;19808:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19929:1;19920:10;;19902:15;19955:12;19959:7;19955:3;:12::i;:::-;19940:27;;;;19977:13;19993:19;20002:9;19993:8;:19::i;:::-;20137:17;;;;20131:24;20127:36;;;-1:-1:-1;;;;;20031:142:7:o;16713:370::-;16814:7;16833:12;16848;16852:7;16848:3;:12::i;:::-;16833:27;;;;16950:12;16954:7;16950:3;:12::i;:::-;16921:26;16942:4;16921:16;:4;16930:6;16921:8;:16::i;:::-;:20;;:26::i;:::-;:41;16917:83;;;16985:4;16978:11;;;;;16917:83;17017:16;:4;17026:6;17017:8;:16::i;:::-;17010:23;;17050:26;17056:7;17050:26;;17065:4;17071;17050:5;:26::i;:::-;17043:33;16713:370;-1:-1:-1;;;;;;16713:370:7:o;26400:910::-;26478:15;26513:16;26521:7;26513;:16::i;:::-;26505:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26592:16;26600:7;26592;:16::i;:::-;26584:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26666:12;26681;26685:7;26681:3;:12::i;:::-;26666:27;;;;26703:15;26721:12;26725:7;26721:3;:12::i;:::-;26703:30;;;;26744:11;26873:4;26867:11;26860:18;;26960:7;26955:3;26952:16;26949:2;;;27000:4;26994;26987:18;26949:2;27215:4;27206:7;27200:4;27191:7;27188:1;27181:5;27170:50;27166:55;27251:52;27272:15;27279:7;27272:6;:15::i;:::-;27251:52;;27289:7;27298:4;27251:20;:52::i;3805:127:14:-;3878:4;3901:19;;;:12;;;;;:19;;;;;;:24;;;3805:127::o;2967:751:11:-;3386:23;3412:69;3440:4;3412:69;;;;;;;;;;;;;;;;;3420:5;3412:27;;;;:69;;;;;:::i;:::-;3495:17;;3386:95;;-1:-1:-1;3495:21:11;3491:221;;3635:10;3624:30;;;;;;;;;;;;;;;-1:-1:-1;3624:30:11;3616:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4452:201:14;4546:18;;4519:7;;4546:26;-1:-1:-1;4538:73:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4628:3;:11;;4640:5;4628:18;;;;;;;;;;;;;;;;4621:25;;4452:201;;;;:::o;1072:740:8:-;1150:7;1211:9;:16;1231:2;1211:22;1207:94;;1249:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1207:94;1651:4;1636:20;;1630:27;1696:4;1681:20;;1675:27;1749:4;1734:20;;1728:27;1367:9;1720:36;1783:22;1791:4;1720:36;1630:27;1675;1783:7;:22::i;2553:172:6:-;2638:7;;;2663;;;;2655:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11432:426:7;11664:2;11660:27;;;11734:17;;;;11726:26;;;11799:17;11795:2;11791:26;;11563:289::o;13797:276::-;14016:3;14012:17;;13886:181::o;16320:113::-;16373:7;16414:12;16418:7;16414:3;:12::i;:::-;16399;16403:7;16399:3;:12::i;:::-;:27;16392:34;;;;16320:113;;;:::o;14658:373::-;14994:3;14990:17;2800:26;14986:29;;14811:214::o;18259:741::-;18405:17;18437:9;18450:15;18460:4;18450:9;:15::i;:::-;18434:31;;;18478:9;18491:15;18501:4;18491:9;:15::i;:::-;18475:31;;;18519:9;18532:17;18542:6;18532:9;:17::i;:::-;18516:33;;;18562:9;18575:17;18585:6;18575:9;:17::i;:::-;18559:33;;;18742:1;18804;18884;18946;18628:355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18628:355:7;;;;;;;;;;;;;;;;;;;;;;18259:741;-1:-1:-1;;;;;;;;;;;18259:741:7:o;6845:366::-;7115:66;7085:12;;;;7064:131;;6970:235::o;7750:103::-;7807:4;7831:15;7838:7;7831:6;:15::i;:::-;7830:16;;7750:103;-1:-1:-1;;7750:103:7:o;3581:193:12:-;3684:12;3715:52;3737:6;3745:4;3751:1;3754:12;3715:21;:52::i;1960:1414:8:-;2045:7;2960:66;2946:80;;;2938:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3083:1;:7;;3088:2;3083:7;:18;;;;3094:1;:7;;3099:2;3094:7;3083:18;3075:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3235:14;3252:24;3262:4;3268:1;3271;3274;3252:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3252:24:8;;;;;;-1:-1:-1;;3294:20:8;;;3286:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4809:556:7;4863:13;;4919:2;4904:202;4927:2;4923:1;:6;;;4904:202;;;4973:13;4984:1;4980:5;;4973:13;;;;5010:14;4973:13;5010:7;:14::i;:::-;5001:23;;;;;;5042:1;:7;;5047:2;5042:7;5038:58;;5079:2;5069:12;;;;;5038:58;-1:-1:-1;4931:6:7;;4904:202;;;-1:-1:-1;5169:2:7;5154:205;5177:3;5173:1;:7;;;5154:205;;;5225:13;5236:1;5232:5;;5225:13;;;;5263:14;5225:13;5263:7;:14::i;:::-;5253:24;;;;;;5295:1;:6;;5300:1;5295:6;5291:58;;5332:2;5321:13;;;;;5291:58;-1:-1:-1;5183:6:7;;5154:205;;;;4809:556;;;:::o;7520:101::-;7610:4;7599:15;;;;;7520:101::o;4608:523:12:-;4735:12;4792:5;4767:21;:30;;4759:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:18;4869:6;4858:10;:18::i;:::-;4850:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4981:12;4995:23;5022:6;:11;;5042:5;5050:4;5022:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4980:75;;;;5072:52;5090:7;5099:10;5111:12;5072:17;:52::i;:::-;5065:59;4608:523;-1:-1:-1;;;;;;;4608:523:12:o;4286:199:7:-;4336:14;4373:18;4389:1;4383:2;:7;;;;4373:9;:18::i;:::-;4362:29;;;4427:1;4415:13;;;4449;4459:2;4449:9;:13::i;:::-;4438:24;;;;4286:199;-1:-1:-1;4286:199:7:o;726:413:12:-;1086:20;1124:8;;;726:413::o;7091:725::-;7206:12;7234:7;7230:580;;;-1:-1:-1;7264:10:12;7257:17;;7230:580;7375:17;;:21;7371:429;;7633:10;7627:17;7693:15;7680:10;7676:2;7672:19;7665:44;7582:145;7765:20;;;;;;;;;;;;;;;;;;;;7772:12;;7765:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3073:1041:7;3125:10;3291:4;3286:9;;;;3337:15;;;;3333:35;;;3362:4;3355:11;;;;;3333:35;3386:7;:15;;3397:4;3386:15;3382:35;;;3411:4;3404:11;;;;;3382:35;3435:7;:15;;3446:4;3435:15;3431:35;;;3460:4;3453:11;;;;;3431:35;3484:7;:15;;3495:4;3484:15;3480:35;;;3509:4;3502:11;;;;;3480:35;3533:7;:15;;3544:4;3533:15;3529:35;;;3558:4;3551:11;;;;;3529:35;3582:7;:15;;3593:4;3582:15;3578:35;;;3607:4;3600:11;;;;;3578:35;3631:7;:15;;3642:4;3631:15;3627:35;;;3656:4;3649:11;;;;;3627:35;3680:7;:15;;3691:4;3680:15;3676:35;;;3705:4;3698:11;;;;;3676:35;3729:7;:15;;3740:4;3729:15;3725:35;;;3754:4;3747:11;;;;;3725:35;3778:7;:15;;3789:4;3778:15;3774:35;;;3803:4;3796:11;;;;;3774:35;3827:7;:15;;3838:4;3827:15;3823:35;;;3852:4;3845:11;;;;;3823:35;3876:7;:15;;3887:4;3876:15;3872:35;;;3901:4;3894:11;;;;;3872:35;3925:7;:15;;3936:4;3925:15;3921:35;;;3950:4;3943:11;;;;;3921:35;3974:7;:15;;3985:4;3974:15;3970:35;;;3999:4;3992:11;;;;;3970:35;4023:7;:15;;4034:4;4023:15;4019:35;;;4048:4;4041:11;;;;;4019:35;4072:7;:15;;4083:4;4072:15;4068:35;;;4097:4;4090:11;;;;;4068:35;3073:1041;;;;:::o;14:363:32:-;;;172:8;160:10;157:24;154:2;;;202:9;191;184:28;154:2;239:6;229:8;226:20;223:2;;;267:9;256;249:28;223:2;-1:-1:-1;;301:23:32;;;346:25;;;;;-1:-1:-1;144:233:32:o", + "linkReferences": { + "src/messages/Message.sol": { + "Message": [ + { + "start": 2180, + "length": 20 + }, + { + "start": 4208, + "length": 20 + }, + { + "start": 5042, + "length": 20 + }, + { + "start": 6933, + "length": 20 + }, + { + "start": 8761, + "length": 20 + } + ] + } + }, + "immutableReferences": { + "17969": [ + { + "start": 3920, + "length": 32 + }, + { + "start": 6272, + "length": 32 + }, + { + "start": 7212, + "length": 32 + }, + { + "start": 9887, + "length": 32 + } + ], + "17971": [ + { + "start": 3378, + "length": 32 + }, + { + "start": 4467, + "length": 32 + }, + { + "start": 9854, + "length": 32 + } + ] + } + }, + "methodIdentifiers": { + "acceptOwnership()": "79ba5097", + "attesterManager()": "9b0d94b7", + "disableAttester(address)": "2d025080", + "enableAttester(address)": "fae36879", + "getEnabledAttester(uint256)": "beb673d8", + "getNumEnabledAttesters()": "51079a53", + "isEnabledAttester(address)": "7af82f60", + "localDomain()": "8d3638f4", + "maxMessageBodySize()": "af47b9bb", + "nextAvailableNonce()": "8371744e", + "owner()": "8da5cb5b", + "pause()": "8456cb59", + "paused()": "5c975abb", + "pauser()": "9fd0506d", + "pendingOwner()": "e30c3978", + "receiveMessage(bytes,bytes)": "57ecfd28", + "replaceMessage(bytes,bytes,bytes,bytes32)": "b857b774", + "rescueERC20(address,address,uint256)": "b2118a8d", + "rescuer()": "38a63183", + "sendMessage(uint32,bytes32,bytes)": "0ba469bc", + "sendMessageWithCaller(uint32,bytes32,bytes32,bytes)": "f7259a75", + "setMaxMessageBodySize(uint256)": "92492c68", + "setSignatureThreshold(uint256)": "bbde5374", + "signatureThreshold()": "a82f2e26", + "transferOwnership(address)": "f2fde38b", + "unpause()": "3f4ba83a", + "updateAttesterManager(address)": "de7769d4", + "updatePauser(address)": "554bab3c", + "updateRescuer(address)": "2ab60045", + "usedNonces(bytes32)": "feb61724", + "version()": "54fd4d50" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_localDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_attester\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_maxMessageBodySize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_version\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"AttesterDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"AttesterEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousAttesterManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAttesterManager\",\"type\":\"address\"}],\"name\":\"AttesterManagerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newMaxMessageBodySize\",\"type\":\"uint256\"}],\"name\":\"MaxMessageBodySizeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"sourceDomain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"messageBody\",\"type\":\"bytes\"}],\"name\":\"MessageReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"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\":[],\"name\":\"Pause\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PauserChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRescuer\",\"type\":\"address\"}],\"name\":\"RescuerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldSignatureThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSignatureThreshold\",\"type\":\"uint256\"}],\"name\":\"SignatureThresholdUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unpause\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"attesterManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"disableAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAttester\",\"type\":\"address\"}],\"name\":\"enableAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getEnabledAttester\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumEnabledAttesters\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"isEnabledAttester\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localDomain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxMessageBodySize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextAvailableNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauser\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"attestation\",\"type\":\"bytes\"}],\"name\":\"receiveMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"originalMessage\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"originalAttestation\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"newMessageBody\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"newDestinationCaller\",\"type\":\"bytes32\"}],\"name\":\"replaceMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rescuer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"messageBody\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"destinationCaller\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"messageBody\",\"type\":\"bytes\"}],\"name\":\"sendMessageWithCaller\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMaxMessageBodySize\",\"type\":\"uint256\"}],\"name\":\"setMaxMessageBodySize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newSignatureThreshold\",\"type\":\"uint256\"}],\"name\":\"setSignatureThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signatureThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAttesterManager\",\"type\":\"address\"}],\"name\":\"updateAttesterManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newPauser\",\"type\":\"address\"}],\"name\":\"updatePauser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRescuer\",\"type\":\"address\"}],\"name\":\"updateRescuer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"usedNonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"MaxMessageBodySizeUpdated(uint256)\":{\"params\":{\"newMaxMessageBodySize\":\"new maximum message body size, in bytes\"}},\"MessageReceived(address,uint32,uint64,bytes32,bytes)\":{\"params\":{\"caller\":\"Caller (msg.sender) on destination domain\",\"messageBody\":\"message body bytes\",\"nonce\":\"The nonce unique to this message\",\"sender\":\"The sender of this message\",\"sourceDomain\":\"The source domain this message originated from\"}},\"MessageSent(bytes)\":{\"params\":{\"message\":\"Raw bytes of message\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"attesterManager()\":{\"details\":\"Returns the address of the attester manager\",\"returns\":{\"_0\":\"address of the attester manager\"}},\"disableAttester(address)\":{\"details\":\"Only callable by attesterManager. Disabling the attester is not allowed if there is only one attester enabled, or if it would cause the number of enabled attesters to become less than signatureThreshold. (Attester must be currently enabled.)\",\"params\":{\"attester\":\"attester to disable\"}},\"enableAttester(address)\":{\"details\":\"Only callable by attesterManager. New attester must be nonzero, and currently disabled.\",\"params\":{\"newAttester\":\"attester to enable\"}},\"getEnabledAttester(uint256)\":{\"params\":{\"index\":\"index of attester to check\"},\"returns\":{\"_0\":\"enabled attester at given `index`\"}},\"getNumEnabledAttesters()\":{\"returns\":{\"_0\":\"number of enabled attesters\"}},\"isEnabledAttester(address)\":{\"params\":{\"attester\":\"attester to check enabled status of\"},\"returns\":{\"_0\":\"true if given `attester` is enabled, else false\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pause()\":{\"details\":\"called by the owner to pause, triggers stopped state\"},\"pauser()\":{\"returns\":{\"_0\":\"Pauser's address\"}},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"receiveMessage(bytes,bytes)\":{\"details\":\"Attestation format: A valid attestation is the concatenated 65-byte signature(s) of exactly `thresholdSignature` signatures, in increasing order of attester address. ***If the attester addresses recovered from signatures are not in increasing order, signature verification will fail.*** If incorrect number of signatures or duplicate signatures are supplied, signature verification will fail. Message format: Field Bytes Type Index version 4 uint32 0 sourceDomain 4 uint32 4 destinationDomain 4 uint32 8 nonce 8 uint64 12 sender 32 bytes32 20 recipient 32 bytes32 52 messageBody dynamic bytes 84\",\"params\":{\"attestation\":\"Concatenated 65-byte signature(s) of `message`, in increasing order of the attester address recovered from signatures.\",\"message\":\"Message bytes\"},\"returns\":{\"success\":\"bool, true if successful\"}},\"replaceMessage(bytes,bytes,bytes,bytes32)\":{\"details\":\"The `originalAttestation` must be a valid attestation of `originalMessage`. Reverts if msg.sender does not match sender of original message, or if the source domain of the original message does not match this MessageTransmitter's local domain.\",\"params\":{\"newDestinationCaller\":\"the new destination caller, which may be the same as the original destination caller, a new destination caller, or an empty destination caller (bytes32(0), indicating that any destination caller is valid.)\",\"newMessageBody\":\"new message body of replaced message\",\"originalAttestation\":\"attestation of `originalMessage`\",\"originalMessage\":\"original message to replace\"}},\"rescueERC20(address,address,uint256)\":{\"params\":{\"amount\":\"Amount to withdraw\",\"to\":\"Recipient address\",\"tokenContract\":\"ERC20 token contract address\"}},\"rescuer()\":{\"returns\":{\"_0\":\"Rescuer's address\"}},\"sendMessage(uint32,bytes32,bytes)\":{\"details\":\"Increment nonce, format the message, and emit `MessageSent` event with message information.\",\"params\":{\"destinationDomain\":\"Domain of destination chain\",\"messageBody\":\"Raw bytes content of message\",\"recipient\":\"Address of message recipient on destination chain as bytes32\"},\"returns\":{\"_0\":\"nonce reserved by message\"}},\"sendMessageWithCaller(uint32,bytes32,bytes32,bytes)\":{\"details\":\"Increment nonce, format the message, and emit `MessageSent` event with message information. WARNING: if the `destinationCaller` does not represent a valid address, then it will not be possible to broadcast the message on the destination domain. This is an advanced feature, and the standard sendMessage() should be preferred for use cases where a specific destination caller is not required.\",\"params\":{\"destinationCaller\":\"caller on the destination domain, as bytes32\",\"destinationDomain\":\"Domain of destination chain\",\"messageBody\":\"Raw bytes content of message\",\"recipient\":\"Address of message recipient on destination domain as bytes32\"},\"returns\":{\"_0\":\"nonce reserved by message\"}},\"setMaxMessageBodySize(uint256)\":{\"details\":\"This value should not be reduced without good reason, to avoid impacting users who rely on large messages.\",\"params\":{\"newMaxMessageBodySize\":\"new max message body size, in bytes\"}},\"setSignatureThreshold(uint256)\":{\"details\":\"new signature threshold must be nonzero, and must not exceed number of enabled attesters.\",\"params\":{\"newSignatureThreshold\":\"new signature threshold\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"},\"unpause()\":{\"details\":\"called by the owner to unpause, returns to normal state\"},\"updateAttesterManager(address)\":{\"details\":\"Allows the current attester manager to transfer control of the contract to a newAttesterManager.\",\"params\":{\"newAttesterManager\":\"The address to update attester manager to.\"}},\"updatePauser(address)\":{\"details\":\"update the pauser role\"},\"updateRescuer(address)\":{\"params\":{\"newRescuer\":\"New rescuer's address\"}}},\"title\":\"MessageTransmitter\",\"version\":1},\"userdoc\":{\"events\":{\"AttesterDisabled(address)\":{\"notice\":\"Emitted when an attester is disabled\"},\"AttesterEnabled(address)\":{\"notice\":\"Emitted when an attester is enabled\"},\"MaxMessageBodySizeUpdated(uint256)\":{\"notice\":\"Emitted when max message body size is updated\"},\"MessageReceived(address,uint32,uint64,bytes32,bytes)\":{\"notice\":\"Emitted when a new message is received\"},\"MessageSent(bytes)\":{\"notice\":\"Emitted when a new message is dispatched\"},\"SignatureThresholdUpdated(uint256,uint256)\":{\"notice\":\"Emitted when threshold number of attestations (m in m/n multisig) is updated\"}},\"kind\":\"user\",\"methods\":{\"disableAttester(address)\":{\"notice\":\"Disables an attester\"},\"enableAttester(address)\":{\"notice\":\"Enables an attester\"},\"getEnabledAttester(uint256)\":{\"notice\":\"gets enabled attester at given `index`\"},\"getNumEnabledAttesters()\":{\"notice\":\"returns the number of enabled attesters\"},\"isEnabledAttester(address)\":{\"notice\":\"returns true if given `attester` is enabled, else false\"},\"pauser()\":{\"notice\":\"Returns current pauser\"},\"receiveMessage(bytes,bytes)\":{\"notice\":\"Receive a message. Messages with a given nonce can only be broadcast once for a (sourceDomain, destinationDomain) pair. The message body of a valid message is passed to the specified recipient for further processing.\"},\"replaceMessage(bytes,bytes,bytes,bytes32)\":{\"notice\":\"Replace a message with a new message body and/or destination caller.\"},\"rescueERC20(address,address,uint256)\":{\"notice\":\"Rescue ERC20 tokens locked up in this contract.\"},\"rescuer()\":{\"notice\":\"Returns current rescuer\"},\"sendMessage(uint32,bytes32,bytes)\":{\"notice\":\"Send the message to the destination domain and recipient\"},\"sendMessageWithCaller(uint32,bytes32,bytes32,bytes)\":{\"notice\":\"Send the message to the destination domain and recipient, for a specified `destinationCaller` on the destination domain.\"},\"setMaxMessageBodySize(uint256)\":{\"notice\":\"Sets the max message body size\"},\"setSignatureThreshold(uint256)\":{\"notice\":\"Sets the threshold of signatures required to attest to a message. (This is the m in m/n multisig.)\"},\"updateRescuer(address)\":{\"notice\":\"Assign the rescuer role to a given address.\"}},\"notice\":\"Contract responsible for sending and receiving messages across chains.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/MessageTransmitter.sol\":\"MessageTransmitter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[\":@memview-sol/=lib/memview-sol/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":centre-tokens.git/=lib/centre-tokens.git/\",\":ds-test/=lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":memview-sol/=lib/memview-sol/contracts/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/memview-sol/contracts/SafeMath.sol\":{\"keccak256\":\"0xa1054a453f13c3c817cd2d9fb048d68b20202a6f925d2efe6c887bddf3752837\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0fbe6252658163c22e42725c746a005e3b0e129355579113914c679a26fda50d\",\"dweb:/ipfs/QmZHmS7NjoSZcymwmU4kSfyKAvu2RpuxLowVY5Tj4LY6kr\"]},\"lib/memview-sol/contracts/TypedMemView.sol\":{\"keccak256\":\"0xa59e6e460439df036676d255b089784e6cd1539fbd439dafae33d751fe828ebe\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://b2d5865010f33ac2298a563b8c8fdb6b7da5607b61172b09ed9a51d180b6b823\",\"dweb:/ipfs/QmdzLCZtkXRCbya28LyV9qCcVXU9mFN6SeB6mVyhKiSiTv\"]},\"lib/openzeppelin-contracts/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0x94c4719c16ffb96dd3cdc68f6fbf78105153018adbf382241821e8188e6a4bd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33390c907a31dd8961949b0fa1b9557781c81024231f607f6f97b203746ebf60\",\"dweb:/ipfs/QmSdRfWx8tsa2Phm23qtNGTDUek2BphzwyxuqKf3AEszL9\"]},\"lib/openzeppelin-contracts/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5f02220344881ce43204ae4a6281145a67bc52c2bb1290a791857df3d19d78f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24427744bd3e6cb73c17010119af12a318289c0253a4d9acb8576c9fb3797b08\",\"dweb:/ipfs/QmTLDqpKRBuxGxRAmjgXt9AkXyACW3MtKzi7PYjm5iMfGC\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0xf12dfbe97e6276980b83d2830bb0eb75e0cf4f3e626c2471137f82158ae6a0fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a849c2d95e85463909e5b5c920b13e7a11216ca14127085e16d22b9379d52a\",\"dweb:/ipfs/QmUg3CZDbCCcQdroEpexBy5ZFd5vD1UWijWQq9qHZjtJNQ\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://256c8c8af5eb072bc473226ab2b2187149b8fc04f5f4a4820db22527f5ce8e3c\",\"dweb:/ipfs/QmRvi5BhnL7Rxf85KrJhwM6RRhukm4tzoctRdgQEheNyiN\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]},\"lib/openzeppelin-contracts/contracts/utils/EnumerableSet.sol\":{\"keccak256\":\"0x1562cd9922fbf739edfb979f506809e2743789cbde3177515542161c3d04b164\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4580d57781513d98870d9738c7d39094336e0a70cdb90d68dad549c6ced466ec\",\"dweb:/ipfs/Qmf9YZzzRFuvMnav9dgmeRUpdYMMECiZX8w25sHWVbA18V\"]},\"src/MessageTransmitter.sol\":{\"keccak256\":\"0xdcf4b3dd5881fa447a735ebd3d591b0a6428e2c7f86ab215943f8a0aa4052215\",\"urls\":[\"bzz-raw://12fb77845d40f04becc7de116bba94243a62c57e07e16e88c56dc2d6490b80f6\",\"dweb:/ipfs/QmNeX3oreys3S486gfMWyLCMhYJZKneFjWY3aU9a7oy29x\"]},\"src/interfaces/IMessageHandler.sol\":{\"keccak256\":\"0x6af84af8715e65646d4442917779d9429035e78d53cfd197c460fd2e18ccf6a7\",\"urls\":[\"bzz-raw://8d01d52be8119f64c2df22a10bb47929937e7cb4af53354ca4dff15e353dfa9a\",\"dweb:/ipfs/QmbFt45Ny4ePgjwZdk3GEoV9ynSM8jfXWNft7p1B7SuTMT\"]},\"src/interfaces/IMessageTransmitter.sol\":{\"keccak256\":\"0x70daea8dee44f753a36243b58b89488a665f09bc30470a2255db8034ebb1254e\",\"urls\":[\"bzz-raw://cff30fdf2b90c8c1c9c84acab9d2c34c42893ea9d4111ac3dfc636f107afbcd8\",\"dweb:/ipfs/QmY5sqNDSNE2E5zSikfW7fJFpJHEWzGrKbJZXEBLvbhD6X\"]},\"src/interfaces/IReceiver.sol\":{\"keccak256\":\"0xa6a97fd01c17ac415d8b891c613a6b64a5723a24e7a042b47d1f6930f8d6e818\",\"urls\":[\"bzz-raw://ca049c40ca32e1cefe1436357a86746115756de7a069d6d75d6774a2bfe32259\",\"dweb:/ipfs/QmSfBtdr517rLNuaBQjrDfBERyX8DvSLPjcuK7dDLD7AGW\"]},\"src/interfaces/IRelayer.sol\":{\"keccak256\":\"0x1510214de1adac12937c79fa6b25b0973a879219a31b149a7c11c70a8c095b3a\",\"urls\":[\"bzz-raw://6f6af107b32576803feb574d0d4413c567336be9e9499b25918c3492c87d7e2b\",\"dweb:/ipfs/QmUF51siiUMFmRw5zB5S85cEjgpUxesPc52fM5azbqscid\"]},\"src/messages/Message.sol\":{\"keccak256\":\"0xd2e6ed7b6b91d45656010289be542588b7ea9b240497286cf46f99e271474547\",\"urls\":[\"bzz-raw://c3be6543e3fc071452b0cf196b9813b2340dd96e39bcbe15d7d135bcae700017\",\"dweb:/ipfs/QmW7BnYyYM6AMiYtumWjwkCQ3yrLQZQYwnVG8fPn5aJ22C\"]},\"src/roles/Attestable.sol\":{\"keccak256\":\"0x7ff129ca1f778e959d18128917d1587ddccc308bca1526069cb606daa84affea\",\"urls\":[\"bzz-raw://0a2646306f5e1a598ca2dc4e427b4c836eccae361973b9f40bed8873f708f6dd\",\"dweb:/ipfs/QmVjLJRJvAuiuZE1hJyonWrE56DPrjUyhqBninPivNg3ps\"]},\"src/roles/Ownable.sol\":{\"keccak256\":\"0x4b675058095169e2aa938936232e4516b00ae55b6051725cec0d066fa4eb01be\",\"urls\":[\"bzz-raw://125d1b051badf05d6ea4bdf30360e7afb1c858c96b69f970e21d1aee709047fc\",\"dweb:/ipfs/QmWHt7H9Dcc6RMhPHHkZe2VkPSrQV9HJQ1ddCAwC2r84an\"]},\"src/roles/Ownable2Step.sol\":{\"keccak256\":\"0xc3ad0bdd8165c164d47256cdcb7aa26ac06cb1d5eb5e4d5b706e7f0d4bfdc36a\",\"urls\":[\"bzz-raw://583122acee73e04af577ae578d9e9cd162bc94ffa9671e5f76fc73c21ce35328\",\"dweb:/ipfs/QmZ6tG8djdRfHvaLfkVaSmys4WRySvnTDbgiNCW1Mz724U\"]},\"src/roles/Pausable.sol\":{\"keccak256\":\"0x97000ae63d20c0a4b94f75f1066d7f9940ae86dd7ff56dad7c09b9c14f0691f5\",\"urls\":[\"bzz-raw://c08f10d8e52bf3749ae6fc94f671bfabf0df729b4fab1944b389882a7b6600ee\",\"dweb:/ipfs/QmXhKLEpM42qrBpZ3vjqG7nfSk2X724daGpgp4Xf4C9qjw\"]},\"src/roles/Rescuable.sol\":{\"keccak256\":\"0x0535df5d996c5c2b5063b83e8d4e2221468e324fabeb089cb4086d3675479137\",\"urls\":[\"bzz-raw://2aaccc3920ba05a28a1bced825a5fb79e9f7721bd1aba885aed657ca45196b8b\",\"dweb:/ipfs/QmPwYrn9Y2FfhGv7jAexRj5iLZFLUWc8LUupzShymBVUe3\"]}},\"version\":1}", + "metadata": { + "compiler": { + "version": "0.7.6+commit.7338295f" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint32", + "name": "_localDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_attester", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_maxMessageBodySize", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_version", + "type": "uint32" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attester", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "AttesterDisabled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attester", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "AttesterEnabled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousAttesterManager", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newAttesterManager", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "AttesterManagerUpdated", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newMaxMessageBodySize", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "MaxMessageBodySizeUpdated", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address", + "indexed": true + }, + { + "internalType": "uint32", + "name": "sourceDomain", + "type": "uint32", + "indexed": false + }, + { + "internalType": "uint64", + "name": "nonce", + "type": "uint64", + "indexed": true + }, + { + "internalType": "bytes32", + "name": "sender", + "type": "bytes32", + "indexed": false + }, + { + "internalType": "bytes", + "name": "messageBody", + "type": "bytes", + "indexed": false + } + ], + "type": "event", + "name": "MessageReceived", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "message", + "type": "bytes", + "indexed": false + } + ], + "type": "event", + "name": "MessageSent", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "type": "event", + "name": "Pause", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAddress", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "PauserChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newRescuer", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "RescuerChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldSignatureThreshold", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newSignatureThreshold", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "SignatureThresholdUpdated", + "anonymous": false + }, + { + "inputs": [], + "type": "event", + "name": "Unpause", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "attesterManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "disableAttester" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAttester", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "enableAttester" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getEnabledAttester", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getNumEnabledAttesters", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isEnabledAttester", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "localDomain", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "maxMessageBodySize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "nextAvailableNonce", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "pause" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pauser", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestation", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "receiveMessage", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "originalMessage", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "originalAttestation", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "newMessageBody", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "newDestinationCaller", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "replaceMessage" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "rescueERC20" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "rescuer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "recipient", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "messageBody", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "sendMessage", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "recipient", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "destinationCaller", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "messageBody", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "sendMessageWithCaller", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newMaxMessageBodySize", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setMaxMessageBodySize" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newSignatureThreshold", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setSignatureThreshold" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "signatureThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "unpause" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAttesterManager", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updateAttesterManager" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauser", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updatePauser" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newRescuer", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updateRescuer" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "usedNonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "version", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "attesterManager()": { + "details": "Returns the address of the attester manager", + "returns": { + "_0": "address of the attester manager" + } + }, + "disableAttester(address)": { + "details": "Only callable by attesterManager. Disabling the attester is not allowed if there is only one attester enabled, or if it would cause the number of enabled attesters to become less than signatureThreshold. (Attester must be currently enabled.)", + "params": { + "attester": "attester to disable" + } + }, + "enableAttester(address)": { + "details": "Only callable by attesterManager. New attester must be nonzero, and currently disabled.", + "params": { + "newAttester": "attester to enable" + } + }, + "getEnabledAttester(uint256)": { + "params": { + "index": "index of attester to check" + }, + "returns": { + "_0": "enabled attester at given `index`" + } + }, + "getNumEnabledAttesters()": { + "returns": { + "_0": "number of enabled attesters" + } + }, + "isEnabledAttester(address)": { + "params": { + "attester": "attester to check enabled status of" + }, + "returns": { + "_0": "true if given `attester` is enabled, else false" + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pause()": { + "details": "called by the owner to pause, triggers stopped state" + }, + "pauser()": { + "returns": { + "_0": "Pauser's address" + } + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "receiveMessage(bytes,bytes)": { + "details": "Attestation format: A valid attestation is the concatenated 65-byte signature(s) of exactly `thresholdSignature` signatures, in increasing order of attester address. ***If the attester addresses recovered from signatures are not in increasing order, signature verification will fail.*** If incorrect number of signatures or duplicate signatures are supplied, signature verification will fail. Message format: Field Bytes Type Index version 4 uint32 0 sourceDomain 4 uint32 4 destinationDomain 4 uint32 8 nonce 8 uint64 12 sender 32 bytes32 20 recipient 32 bytes32 52 messageBody dynamic bytes 84", + "params": { + "attestation": "Concatenated 65-byte signature(s) of `message`, in increasing order of the attester address recovered from signatures.", + "message": "Message bytes" + }, + "returns": { + "success": "bool, true if successful" + } + }, + "replaceMessage(bytes,bytes,bytes,bytes32)": { + "details": "The `originalAttestation` must be a valid attestation of `originalMessage`. Reverts if msg.sender does not match sender of original message, or if the source domain of the original message does not match this MessageTransmitter's local domain.", + "params": { + "newDestinationCaller": "the new destination caller, which may be the same as the original destination caller, a new destination caller, or an empty destination caller (bytes32(0), indicating that any destination caller is valid.)", + "newMessageBody": "new message body of replaced message", + "originalAttestation": "attestation of `originalMessage`", + "originalMessage": "original message to replace" + } + }, + "rescueERC20(address,address,uint256)": { + "params": { + "amount": "Amount to withdraw", + "to": "Recipient address", + "tokenContract": "ERC20 token contract address" + } + }, + "rescuer()": { + "returns": { + "_0": "Rescuer's address" + } + }, + "sendMessage(uint32,bytes32,bytes)": { + "details": "Increment nonce, format the message, and emit `MessageSent` event with message information.", + "params": { + "destinationDomain": "Domain of destination chain", + "messageBody": "Raw bytes content of message", + "recipient": "Address of message recipient on destination chain as bytes32" + }, + "returns": { + "_0": "nonce reserved by message" + } + }, + "sendMessageWithCaller(uint32,bytes32,bytes32,bytes)": { + "details": "Increment nonce, format the message, and emit `MessageSent` event with message information. WARNING: if the `destinationCaller` does not represent a valid address, then it will not be possible to broadcast the message on the destination domain. This is an advanced feature, and the standard sendMessage() should be preferred for use cases where a specific destination caller is not required.", + "params": { + "destinationCaller": "caller on the destination domain, as bytes32", + "destinationDomain": "Domain of destination chain", + "messageBody": "Raw bytes content of message", + "recipient": "Address of message recipient on destination domain as bytes32" + }, + "returns": { + "_0": "nonce reserved by message" + } + }, + "setMaxMessageBodySize(uint256)": { + "details": "This value should not be reduced without good reason, to avoid impacting users who rely on large messages.", + "params": { + "newMaxMessageBodySize": "new max message body size, in bytes" + } + }, + "setSignatureThreshold(uint256)": { + "details": "new signature threshold must be nonzero, and must not exceed number of enabled attesters.", + "params": { + "newSignatureThreshold": "new signature threshold" + } + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + }, + "unpause()": { + "details": "called by the owner to unpause, returns to normal state" + }, + "updateAttesterManager(address)": { + "details": "Allows the current attester manager to transfer control of the contract to a newAttesterManager.", + "params": { + "newAttesterManager": "The address to update attester manager to." + } + }, + "updatePauser(address)": { + "details": "update the pauser role" + }, + "updateRescuer(address)": { + "params": { + "newRescuer": "New rescuer's address" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "disableAttester(address)": { + "notice": "Disables an attester" + }, + "enableAttester(address)": { + "notice": "Enables an attester" + }, + "getEnabledAttester(uint256)": { + "notice": "gets enabled attester at given `index`" + }, + "getNumEnabledAttesters()": { + "notice": "returns the number of enabled attesters" + }, + "isEnabledAttester(address)": { + "notice": "returns true if given `attester` is enabled, else false" + }, + "pauser()": { + "notice": "Returns current pauser" + }, + "receiveMessage(bytes,bytes)": { + "notice": "Receive a message. Messages with a given nonce can only be broadcast once for a (sourceDomain, destinationDomain) pair. The message body of a valid message is passed to the specified recipient for further processing." + }, + "replaceMessage(bytes,bytes,bytes,bytes32)": { + "notice": "Replace a message with a new message body and/or destination caller." + }, + "rescueERC20(address,address,uint256)": { + "notice": "Rescue ERC20 tokens locked up in this contract." + }, + "rescuer()": { + "notice": "Returns current rescuer" + }, + "sendMessage(uint32,bytes32,bytes)": { + "notice": "Send the message to the destination domain and recipient" + }, + "sendMessageWithCaller(uint32,bytes32,bytes32,bytes)": { + "notice": "Send the message to the destination domain and recipient, for a specified `destinationCaller` on the destination domain." + }, + "setMaxMessageBodySize(uint256)": { + "notice": "Sets the max message body size" + }, + "setSignatureThreshold(uint256)": { + "notice": "Sets the threshold of signatures required to attest to a message. (This is the m in m/n multisig.)" + }, + "updateRescuer(address)": { + "notice": "Assign the rescuer role to a given address." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + ":@memview-sol/=lib/memview-sol/", + ":@openzeppelin/=lib/openzeppelin-contracts/", + ":centre-tokens.git/=lib/centre-tokens.git/", + ":ds-test/=lib/ds-test/src/", + ":forge-std/=lib/forge-std/src/", + ":memview-sol/=lib/memview-sol/contracts/", + ":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/" + ], + "optimizer": { + "enabled": true, + "runs": 100000 + }, + "metadata": { + "bytecodeHash": "ipfs" + }, + "compilationTarget": { + "src/MessageTransmitter.sol": "MessageTransmitter" + }, + "libraries": {} + }, + "sources": { + "lib/memview-sol/contracts/SafeMath.sol": { + "keccak256": "0xa1054a453f13c3c817cd2d9fb048d68b20202a6f925d2efe6c887bddf3752837", + "urls": [ + "bzz-raw://0fbe6252658163c22e42725c746a005e3b0e129355579113914c679a26fda50d", + "dweb:/ipfs/QmZHmS7NjoSZcymwmU4kSfyKAvu2RpuxLowVY5Tj4LY6kr" + ], + "license": "MIT" + }, + "lib/memview-sol/contracts/TypedMemView.sol": { + "keccak256": "0xa59e6e460439df036676d255b089784e6cd1539fbd439dafae33d751fe828ebe", + "urls": [ + "bzz-raw://b2d5865010f33ac2298a563b8c8fdb6b7da5607b61172b09ed9a51d180b6b823", + "dweb:/ipfs/QmdzLCZtkXRCbya28LyV9qCcVXU9mFN6SeB6mVyhKiSiTv" + ], + "license": "MIT OR Apache-2.0" + }, + "lib/openzeppelin-contracts/contracts/cryptography/ECDSA.sol": { + "keccak256": "0x94c4719c16ffb96dd3cdc68f6fbf78105153018adbf382241821e8188e6a4bd5", + "urls": [ + "bzz-raw://33390c907a31dd8961949b0fa1b9557781c81024231f607f6f97b203746ebf60", + "dweb:/ipfs/QmSdRfWx8tsa2Phm23qtNGTDUek2BphzwyxuqKf3AEszL9" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/math/SafeMath.sol": { + "keccak256": "0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52", + "urls": [ + "bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c", + "dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": { + "keccak256": "0x5f02220344881ce43204ae4a6281145a67bc52c2bb1290a791857df3d19d78f5", + "urls": [ + "bzz-raw://24427744bd3e6cb73c17010119af12a318289c0253a4d9acb8576c9fb3797b08", + "dweb:/ipfs/QmTLDqpKRBuxGxRAmjgXt9AkXyACW3MtKzi7PYjm5iMfGC" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol": { + "keccak256": "0xf12dfbe97e6276980b83d2830bb0eb75e0cf4f3e626c2471137f82158ae6a0fc", + "urls": [ + "bzz-raw://b3a849c2d95e85463909e5b5c920b13e7a11216ca14127085e16d22b9379d52a", + "dweb:/ipfs/QmUg3CZDbCCcQdroEpexBy5ZFd5vD1UWijWQq9qHZjtJNQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea", + "urls": [ + "bzz-raw://256c8c8af5eb072bc473226ab2b2187149b8fc04f5f4a4820db22527f5ce8e3c", + "dweb:/ipfs/QmRvi5BhnL7Rxf85KrJhwM6RRhukm4tzoctRdgQEheNyiN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0", + "urls": [ + "bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f", + "dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/EnumerableSet.sol": { + "keccak256": "0x1562cd9922fbf739edfb979f506809e2743789cbde3177515542161c3d04b164", + "urls": [ + "bzz-raw://4580d57781513d98870d9738c7d39094336e0a70cdb90d68dad549c6ced466ec", + "dweb:/ipfs/Qmf9YZzzRFuvMnav9dgmeRUpdYMMECiZX8w25sHWVbA18V" + ], + "license": "MIT" + }, + "src/MessageTransmitter.sol": { + "keccak256": "0xdcf4b3dd5881fa447a735ebd3d591b0a6428e2c7f86ab215943f8a0aa4052215", + "urls": [ + "bzz-raw://12fb77845d40f04becc7de116bba94243a62c57e07e16e88c56dc2d6490b80f6", + "dweb:/ipfs/QmNeX3oreys3S486gfMWyLCMhYJZKneFjWY3aU9a7oy29x" + ], + "license": null + }, + "src/interfaces/IMessageHandler.sol": { + "keccak256": "0x6af84af8715e65646d4442917779d9429035e78d53cfd197c460fd2e18ccf6a7", + "urls": [ + "bzz-raw://8d01d52be8119f64c2df22a10bb47929937e7cb4af53354ca4dff15e353dfa9a", + "dweb:/ipfs/QmbFt45Ny4ePgjwZdk3GEoV9ynSM8jfXWNft7p1B7SuTMT" + ], + "license": null + }, + "src/interfaces/IMessageTransmitter.sol": { + "keccak256": "0x70daea8dee44f753a36243b58b89488a665f09bc30470a2255db8034ebb1254e", + "urls": [ + "bzz-raw://cff30fdf2b90c8c1c9c84acab9d2c34c42893ea9d4111ac3dfc636f107afbcd8", + "dweb:/ipfs/QmY5sqNDSNE2E5zSikfW7fJFpJHEWzGrKbJZXEBLvbhD6X" + ], + "license": null + }, + "src/interfaces/IReceiver.sol": { + "keccak256": "0xa6a97fd01c17ac415d8b891c613a6b64a5723a24e7a042b47d1f6930f8d6e818", + "urls": [ + "bzz-raw://ca049c40ca32e1cefe1436357a86746115756de7a069d6d75d6774a2bfe32259", + "dweb:/ipfs/QmSfBtdr517rLNuaBQjrDfBERyX8DvSLPjcuK7dDLD7AGW" + ], + "license": null + }, + "src/interfaces/IRelayer.sol": { + "keccak256": "0x1510214de1adac12937c79fa6b25b0973a879219a31b149a7c11c70a8c095b3a", + "urls": [ + "bzz-raw://6f6af107b32576803feb574d0d4413c567336be9e9499b25918c3492c87d7e2b", + "dweb:/ipfs/QmUF51siiUMFmRw5zB5S85cEjgpUxesPc52fM5azbqscid" + ], + "license": null + }, + "src/messages/Message.sol": { + "keccak256": "0xd2e6ed7b6b91d45656010289be542588b7ea9b240497286cf46f99e271474547", + "urls": [ + "bzz-raw://c3be6543e3fc071452b0cf196b9813b2340dd96e39bcbe15d7d135bcae700017", + "dweb:/ipfs/QmW7BnYyYM6AMiYtumWjwkCQ3yrLQZQYwnVG8fPn5aJ22C" + ], + "license": null + }, + "src/roles/Attestable.sol": { + "keccak256": "0x7ff129ca1f778e959d18128917d1587ddccc308bca1526069cb606daa84affea", + "urls": [ + "bzz-raw://0a2646306f5e1a598ca2dc4e427b4c836eccae361973b9f40bed8873f708f6dd", + "dweb:/ipfs/QmVjLJRJvAuiuZE1hJyonWrE56DPrjUyhqBninPivNg3ps" + ], + "license": null + }, + "src/roles/Ownable.sol": { + "keccak256": "0x4b675058095169e2aa938936232e4516b00ae55b6051725cec0d066fa4eb01be", + "urls": [ + "bzz-raw://125d1b051badf05d6ea4bdf30360e7afb1c858c96b69f970e21d1aee709047fc", + "dweb:/ipfs/QmWHt7H9Dcc6RMhPHHkZe2VkPSrQV9HJQ1ddCAwC2r84an" + ], + "license": null + }, + "src/roles/Ownable2Step.sol": { + "keccak256": "0xc3ad0bdd8165c164d47256cdcb7aa26ac06cb1d5eb5e4d5b706e7f0d4bfdc36a", + "urls": [ + "bzz-raw://583122acee73e04af577ae578d9e9cd162bc94ffa9671e5f76fc73c21ce35328", + "dweb:/ipfs/QmZ6tG8djdRfHvaLfkVaSmys4WRySvnTDbgiNCW1Mz724U" + ], + "license": null + }, + "src/roles/Pausable.sol": { + "keccak256": "0x97000ae63d20c0a4b94f75f1066d7f9940ae86dd7ff56dad7c09b9c14f0691f5", + "urls": [ + "bzz-raw://c08f10d8e52bf3749ae6fc94f671bfabf0df729b4fab1944b389882a7b6600ee", + "dweb:/ipfs/QmXhKLEpM42qrBpZ3vjqG7nfSk2X724daGpgp4Xf4C9qjw" + ], + "license": null + }, + "src/roles/Rescuable.sol": { + "keccak256": "0x0535df5d996c5c2b5063b83e8d4e2221468e324fabeb089cb4086d3675479137", + "urls": [ + "bzz-raw://2aaccc3920ba05a28a1bced825a5fb79e9f7721bd1aba885aed657ca45196b8b", + "dweb:/ipfs/QmPwYrn9Y2FfhGv7jAexRj5iLZFLUWc8LUupzShymBVUe3" + ], + "license": null + } + }, + "version": 1 + }, + "ast": { + "absolutePath": "src/MessageTransmitter.sol", + "id": 18453, + "exportedSymbols": { + "Attestable": [ + 21675 + ], + "Context": [ + 24291 + ], + "ECDSA": [ + 22652 + ], + "EnumerableSet": [ + 23144 + ], + "IERC20": [ + 23305 + ], + "IMessageHandler": [ + 21282 + ], + "IMessageTransmitter": [ + 21292 + ], + "IReceiver": [ + 22494 + ], + "IRelayer": [ + 22536 + ], + "Message": [ + 19815 + ], + "MessageTransmitter": [ + 18452 + ], + "Ownable": [ + 23617 + ], + "Ownable2Step": [ + 23227 + ], + "Pausable": [ + 21783 + ], + "Rescuable": [ + 21872 + ], + "SafeERC20": [ + 23518 + ], + "SafeMath": [ + 22480 + ], + "TypedMemView": [ + 21266 + ] + }, + "nodeType": "SourceUnit", + "src": "619:13467:15", + "nodes": [ + { + "id": 17919, + "nodeType": "PragmaDirective", + "src": "619:22:15", + "nodes": [], + "literals": [ + "solidity", + "0.7", + ".6" + ] + }, + { + "id": 17920, + "nodeType": "ImportDirective", + "src": "643:49:15", + "nodes": [], + "absolutePath": "lib/memview-sol/contracts/TypedMemView.sol", + "file": "@memview-sol/contracts/TypedMemView.sol", + "scope": 18453, + "sourceUnit": 21267, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 17921, + "nodeType": "ImportDirective", + "src": "693:46:15", + "nodes": [], + "absolutePath": "src/interfaces/IMessageTransmitter.sol", + "file": "./interfaces/IMessageTransmitter.sol", + "scope": 18453, + "sourceUnit": 21293, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 17922, + "nodeType": "ImportDirective", + "src": "740:42:15", + "nodes": [], + "absolutePath": "src/interfaces/IMessageHandler.sol", + "file": "./interfaces/IMessageHandler.sol", + "scope": 18453, + "sourceUnit": 21283, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 17923, + "nodeType": "ImportDirective", + "src": "783:32:15", + "nodes": [], + "absolutePath": "src/messages/Message.sol", + "file": "./messages/Message.sol", + "scope": 18453, + "sourceUnit": 19816, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 17924, + "nodeType": "ImportDirective", + "src": "816:30:15", + "nodes": [], + "absolutePath": "src/roles/Pausable.sol", + "file": "./roles/Pausable.sol", + "scope": 18453, + "sourceUnit": 21784, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 17925, + "nodeType": "ImportDirective", + "src": "847:31:15", + "nodes": [], + "absolutePath": "src/roles/Rescuable.sol", + "file": "./roles/Rescuable.sol", + "scope": 18453, + "sourceUnit": 21873, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 17926, + "nodeType": "ImportDirective", + "src": "879:32:15", + "nodes": [], + "absolutePath": "src/roles/Attestable.sol", + "file": "./roles/Attestable.sol", + "scope": 18453, + "sourceUnit": 21676, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 18452, + "nodeType": "ContractDefinition", + "src": "1032:13053:15", + "nodes": [ + { + "id": 17940, + "nodeType": "EventDefinition", + "src": "1293:33:15", + "nodes": [], + "anonymous": false, + "documentation": { + "id": 17936, + "nodeType": "StructuredDocumentation", + "src": "1178:110:15", + "text": " @notice Emitted when a new message is dispatched\n @param message Raw bytes of message" + }, + "name": "MessageSent", + "parameters": { + "id": 17939, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17938, + "indexed": false, + "mutability": "mutable", + "name": "message", + "nodeType": "VariableDeclaration", + "scope": 17940, + "src": "1311:13:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 17937, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1311:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1310:15:15" + } + }, + { + "id": 17953, + "nodeType": "EventDefinition", + "src": "1685:170:15", + "nodes": [], + "anonymous": false, + "documentation": { + "id": 17941, + "nodeType": "StructuredDocumentation", + "src": "1332:348:15", + "text": " @notice Emitted when a new message is received\n @param caller Caller (msg.sender) on destination domain\n @param sourceDomain The source domain this message originated from\n @param nonce The nonce unique to this message\n @param sender The sender of this message\n @param messageBody message body bytes" + }, + "name": "MessageReceived", + "parameters": { + "id": 17952, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17943, + "indexed": true, + "mutability": "mutable", + "name": "caller", + "nodeType": "VariableDeclaration", + "scope": 17953, + "src": "1716:22:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 17942, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1716:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17945, + "indexed": false, + "mutability": "mutable", + "name": "sourceDomain", + "nodeType": "VariableDeclaration", + "scope": 17953, + "src": "1748:19:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 17944, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1748:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17947, + "indexed": true, + "mutability": "mutable", + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 17953, + "src": "1777:20:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 17946, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1777:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17949, + "indexed": false, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 17953, + "src": "1807:14:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 17948, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1807:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17951, + "indexed": false, + "mutability": "mutable", + "name": "messageBody", + "nodeType": "VariableDeclaration", + "scope": 17953, + "src": "1831:17:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 17950, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1831:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1706:148:15" + } + }, + { + "id": 17958, + "nodeType": "EventDefinition", + "src": "2014:63:15", + "nodes": [], + "anonymous": false, + "documentation": { + "id": 17954, + "nodeType": "StructuredDocumentation", + "src": "1861:148:15", + "text": " @notice Emitted when max message body size is updated\n @param newMaxMessageBodySize new maximum message body size, in bytes" + }, + "name": "MaxMessageBodySizeUpdated", + "parameters": { + "id": 17957, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17956, + "indexed": false, + "mutability": "mutable", + "name": "newMaxMessageBodySize", + "nodeType": "VariableDeclaration", + "scope": 17958, + "src": "2046:29:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17955, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2046:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2045:31:15" + } + }, + { + "id": 17961, + "nodeType": "UsingForDirective", + "src": "2126:29:15", + "nodes": [], + "libraryName": { + "id": 17959, + "name": "TypedMemView", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21266, + "src": "2132:12:15", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TypedMemView_$21266", + "typeString": "library TypedMemView" + } + }, + "typeName": { + "id": 17960, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2149:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + } + }, + { + "id": 17964, + "nodeType": "UsingForDirective", + "src": "2160:31:15", + "nodes": [], + "libraryName": { + "id": 17962, + "name": "TypedMemView", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21266, + "src": "2166:12:15", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TypedMemView_$21266", + "typeString": "library TypedMemView" + } + }, + "typeName": { + "id": 17963, + "name": "bytes29", + "nodeType": "ElementaryTypeName", + "src": "2183:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + } + }, + { + "id": 17967, + "nodeType": "UsingForDirective", + "src": "2196:26:15", + "nodes": [], + "libraryName": { + "id": 17965, + "name": "Message", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 19815, + "src": "2202:7:15", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Message_$19815", + "typeString": "library Message" + } + }, + "typeName": { + "id": 17966, + "name": "bytes29", + "nodeType": "ElementaryTypeName", + "src": "2214:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + } + }, + { + "id": 17969, + "nodeType": "VariableDeclaration", + "src": "2334:35:15", + "nodes": [], + "constant": false, + "functionSelector": "8d3638f4", + "mutability": "immutable", + "name": "localDomain", + "scope": 18452, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 17968, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2334:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "public" + }, + { + "id": 17971, + "nodeType": "VariableDeclaration", + "src": "2406:31:15", + "nodes": [], + "constant": false, + "functionSelector": "54fd4d50", + "mutability": "immutable", + "name": "version", + "scope": 18452, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 17970, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2406:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "public" + }, + { + "id": 17973, + "nodeType": "VariableDeclaration", + "src": "2526:33:15", + "nodes": [], + "constant": false, + "functionSelector": "af47b9bb", + "mutability": "mutable", + "name": "maxMessageBodySize", + "scope": 18452, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17972, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2526:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "id": 17975, + "nodeType": "VariableDeclaration", + "src": "2618:32:15", + "nodes": [], + "constant": false, + "functionSelector": "8371744e", + "mutability": "mutable", + "name": "nextAvailableNonce", + "scope": 18452, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 17974, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2618:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "public" + }, + { + "id": 17979, + "nodeType": "VariableDeclaration", + "src": "2745:45:15", + "nodes": [], + "constant": false, + "functionSelector": "feb61724", + "mutability": "mutable", + "name": "usedNonces", + "scope": 18452, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "typeName": { + "id": 17978, + "keyType": { + "id": 17976, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2753:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2745:27:15", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "valueType": { + "id": 17977, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2764:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "public" + }, + { + "id": 18006, + "nodeType": "FunctionDefinition", + "src": "2842:278:15", + "nodes": [], + "body": { + "id": 18005, + "nodeType": "Block", + "src": "2999:121:15", + "nodes": [], + "statements": [ + { + "expression": { + "id": 17995, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 17993, + "name": "localDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17969, + "src": "3009:11:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 17994, + "name": "_localDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17981, + "src": "3023:12:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "3009:26:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 17996, + "nodeType": "ExpressionStatement", + "src": "3009:26:15" + }, + { + "expression": { + "id": 17999, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 17997, + "name": "maxMessageBodySize", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17973, + "src": "3045:18:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 17998, + "name": "_maxMessageBodySize", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17985, + "src": "3066:19:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "3045:40:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 18000, + "nodeType": "ExpressionStatement", + "src": "3045:40:15" + }, + { + "expression": { + "id": 18003, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 18001, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17971, + "src": "3095:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 18002, + "name": "_version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17987, + "src": "3105:8:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "3095:18:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 18004, + "nodeType": "ExpressionStatement", + "src": "3095:18:15" + } + ] + }, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 17990, + "name": "_attester", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17983, + "src": "2988:9:15", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 17991, + "modifierName": { + "id": 17989, + "name": "Attestable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 21675, + "src": "2977:10:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Attestable_$21675_$", + "typeString": "type(contract Attestable)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2977:21:15" + } + ], + "name": "", + "parameters": { + "id": 17988, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17981, + "mutability": "mutable", + "name": "_localDomain", + "nodeType": "VariableDeclaration", + "scope": 18006, + "src": "2863:19:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 17980, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2863:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17983, + "mutability": "mutable", + "name": "_attester", + "nodeType": "VariableDeclaration", + "scope": 18006, + "src": "2892:17:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 17982, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2892:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17985, + "mutability": "mutable", + "name": "_maxMessageBodySize", + "nodeType": "VariableDeclaration", + "scope": 18006, + "src": "2919:26:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 17984, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2919:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17987, + "mutability": "mutable", + "name": "_version", + "nodeType": "VariableDeclaration", + "scope": 18006, + "src": "2955:15:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 17986, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2955:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "2853:123:15" + }, + "returnParameters": { + "id": 17992, + "nodeType": "ParameterList", + "parameters": [], + "src": "2999:0:15" + }, + "scope": 18452, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 18053, + "nodeType": "FunctionDefinition", + "src": "3612:579:15", + "nodes": [], + "body": { + "id": 18052, + "nodeType": "Block", + "src": "3785:406:15", + "nodes": [], + "statements": [ + { + "assignments": [ + 18022 + ], + "declarations": [ + { + "constant": false, + "id": 18022, + "mutability": "mutable", + "name": "_emptyDestinationCaller", + "nodeType": "VariableDeclaration", + "scope": 18052, + "src": "3795:31:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18021, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3795:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 18027, + "initialValue": { + "arguments": [ + { + "hexValue": "30", + "id": 18025, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3837:1:15", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 18024, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3829:7:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 18023, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3829:7:15", + "typeDescriptions": {} + } + }, + "id": 18026, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3829:10:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3795:44:15" + }, + { + "assignments": [ + 18029 + ], + "declarations": [ + { + "constant": false, + "id": 18029, + "mutability": "mutable", + "name": "_nonce", + "nodeType": "VariableDeclaration", + "scope": 18052, + "src": "3849:13:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 18028, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "3849:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "id": 18032, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 18030, + "name": "_reserveAndIncrementNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18451, + "src": "3865:25:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint64_$", + "typeString": "function () returns (uint64)" + } + }, + "id": 18031, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3865:27:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3849:43:15" + }, + { + "assignments": [ + 18034 + ], + "declarations": [ + { + "constant": false, + "id": 18034, + "mutability": "mutable", + "name": "_messageSender", + "nodeType": "VariableDeclaration", + "scope": 18052, + "src": "3902:22:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18033, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3902:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 18040, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 18037, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "3952:3:15", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 18038, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "3952:10:15", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "expression": { + "id": 18035, + "name": "Message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19815, + "src": "3927:7:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Message_$19815_$", + "typeString": "type(library Message)" + } + }, + "id": 18036, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "addressToBytes32", + "nodeType": "MemberAccess", + "referencedDeclaration": 19771, + "src": "3927:24:15", + "typeDescriptions": { + "typeIdentifier": "t_function_delegatecall_pure$_t_address_$returns$_t_bytes32_$", + "typeString": "function (address) pure returns (bytes32)" + } + }, + "id": 18039, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3927:36:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3902:61:15" + }, + { + "expression": { + "arguments": [ + { + "id": 18042, + "name": "destinationDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18009, + "src": "4000:17:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18043, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18011, + "src": "4031:9:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18044, + "name": "_emptyDestinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18022, + "src": "4054:23:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18045, + "name": "_messageSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18034, + "src": "4091:14:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18046, + "name": "_nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18029, + "src": "4119:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 18047, + "name": "messageBody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18013, + "src": "4139:11:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "id": 18041, + "name": "_sendMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18413, + "src": "3974:12:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_uint64_$_t_bytes_calldata_ptr_$returns$__$", + "typeString": "function (uint32,bytes32,bytes32,bytes32,uint64,bytes calldata)" + } + }, + "id": 18048, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3974:186:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18049, + "nodeType": "ExpressionStatement", + "src": "3974:186:15" + }, + { + "expression": { + "id": 18050, + "name": "_nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18029, + "src": "4178:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 18020, + "id": 18051, + "nodeType": "Return", + "src": "4171:13:15" + } + ] + }, + "baseFunctions": [ + 22509 + ], + "documentation": { + "id": 18007, + "nodeType": "StructuredDocumentation", + "src": "3179:428:15", + "text": " @notice Send the message to the destination domain and recipient\n @dev Increment nonce, format the message, and emit `MessageSent` event with message information.\n @param destinationDomain Domain of destination chain\n @param recipient Address of message recipient on destination chain as bytes32\n @param messageBody Raw bytes content of message\n @return nonce reserved by message" + }, + "functionSelector": "0ba469bc", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 18017, + "modifierName": { + "id": 18016, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 21705, + "src": "3754:13:15", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3754:13:15" + } + ], + "name": "sendMessage", + "overrides": { + "id": 18015, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3745:8:15" + }, + "parameters": { + "id": 18014, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18009, + "mutability": "mutable", + "name": "destinationDomain", + "nodeType": "VariableDeclaration", + "scope": 18053, + "src": "3642:24:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18008, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "3642:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18011, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 18053, + "src": "3676:17:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18010, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3676:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18013, + "mutability": "mutable", + "name": "messageBody", + "nodeType": "VariableDeclaration", + "scope": 18053, + "src": "3703:26:15", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 18012, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3703:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3632:103:15" + }, + "returnParameters": { + "id": 18020, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18019, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 18053, + "src": "3777:6:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 18018, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "3777:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "3776:8:15" + }, + "scope": 18452, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 18143, + "nodeType": "FunctionDefinition", + "src": "5013:1314:15", + "nodes": [], + "body": { + "id": 18142, + "nodeType": "Block", + "src": "5236:1091:15", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 18069, + "name": "originalMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18056, + "src": "5329:15:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + { + "id": 18070, + "name": "originalAttestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18058, + "src": "5346:19:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "id": 18068, + "name": "_verifyAttestationSignatures", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 21656, + "src": "5300:28:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$", + "typeString": "function (bytes calldata,bytes calldata) view" + } + }, + "id": 18071, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5300:66:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18072, + "nodeType": "ExpressionStatement", + "src": "5300:66:15" + }, + { + "assignments": [ + 18074 + ], + "declarations": [ + { + "constant": false, + "id": 18074, + "mutability": "mutable", + "name": "_originalMsg", + "nodeType": "VariableDeclaration", + "scope": 18142, + "src": "5377:20:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + }, + "typeName": { + "id": 18073, + "name": "bytes29", + "nodeType": "ElementaryTypeName", + "src": "5377:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "visibility": "internal" + } + ], + "id": 18079, + "initialValue": { + "arguments": [ + { + "hexValue": "30", + "id": 18077, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5420:1:15", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "expression": { + "id": 18075, + "name": "originalMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18056, + "src": "5400:15:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + "id": 18076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ref", + "nodeType": "MemberAccess", + "referencedDeclaration": 20430, + "src": "5400:19:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory,uint40) pure returns (bytes29)" + } + }, + "id": 18078, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5400:22:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5377:45:15" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18080, + "name": "_originalMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18074, + "src": "5468:12:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18082, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_validateMessageFormat", + "nodeType": "MemberAccess", + "referencedDeclaration": 19814, + "src": "5468:35:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$__$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure" + } + }, + "id": 18083, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5468:37:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18084, + "nodeType": "ExpressionStatement", + "src": "5468:37:15" + }, + { + "assignments": [ + 18086 + ], + "declarations": [ + { + "constant": false, + "id": 18086, + "mutability": "mutable", + "name": "_sender", + "nodeType": "VariableDeclaration", + "scope": 18142, + "src": "5551:15:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18085, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5551:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 18090, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18087, + "name": "_originalMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18074, + "src": "5569:12:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18088, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_sender", + "nodeType": "MemberAccess", + "referencedDeclaration": 19704, + "src": "5569:20:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (bytes32)" + } + }, + "id": 18089, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5569:22:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5551:40:15" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 18098, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 18092, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5622:3:15", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 18093, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "5622:10:15", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 18096, + "name": "_sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18086, + "src": "5661:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 18094, + "name": "Message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19815, + "src": "5636:7:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Message_$19815_$", + "typeString": "type(library Message)" + } + }, + "id": 18095, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bytes32ToAddress", + "nodeType": "MemberAccess", + "referencedDeclaration": 19791, + "src": "5636:24:15", + "typeDescriptions": { + "typeIdentifier": "t_function_delegatecall_pure$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes32) pure returns (address)" + } + }, + "id": 18097, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5636:33:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5622:47:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "53656e646572206e6f74207065726d697474656420746f20757365206e6f6e6365", + "id": 18099, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5683:35:15", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_65bedb2e4f2c1af4f7892642991a53c40c4cb8f3389a75b1377a49c3dccafdb0", + "typeString": "literal_string \"Sender not permitted to use nonce\"" + }, + "value": "Sender not permitted to use nonce" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_65bedb2e4f2c1af4f7892642991a53c40c4cb8f3389a75b1377a49c3dccafdb0", + "typeString": "literal_string \"Sender not permitted to use nonce\"" + } + ], + "id": 18091, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5601:7:15", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18100, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5601:127:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18101, + "nodeType": "ExpressionStatement", + "src": "5601:127:15" + }, + { + "assignments": [ + 18103 + ], + "declarations": [ + { + "constant": false, + "id": 18103, + "mutability": "mutable", + "name": "_sourceDomain", + "nodeType": "VariableDeclaration", + "scope": 18142, + "src": "5773:20:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18102, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "5773:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "id": 18107, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18104, + "name": "_originalMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18074, + "src": "5796:12:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18105, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_sourceDomain", + "nodeType": "MemberAccess", + "referencedDeclaration": 19656, + "src": "5796:26:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (uint32)" + } + }, + "id": 18106, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5796:28:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5773:51:15" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "id": 18111, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 18109, + "name": "_sourceDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18103, + "src": "5855:13:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 18110, + "name": "localDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17969, + "src": "5872:11:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "5855:28:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4d657373616765206e6f74206f726967696e616c6c792073656e742066726f6d207468697320646f6d61696e", + "id": 18112, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5897:46:15", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_59007f0a4219c28e3bfd02b7062a6aaaf5972f8d2627c0bff91fbc2864cb59bf", + "typeString": "literal_string \"Message not originally sent from this domain\"" + }, + "value": "Message not originally sent from this domain" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_59007f0a4219c28e3bfd02b7062a6aaaf5972f8d2627c0bff91fbc2864cb59bf", + "typeString": "literal_string \"Message not originally sent from this domain\"" + } + ], + "id": 18108, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5834:7:15", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5834:119:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18114, + "nodeType": "ExpressionStatement", + "src": "5834:119:15" + }, + { + "assignments": [ + 18116 + ], + "declarations": [ + { + "constant": false, + "id": 18116, + "mutability": "mutable", + "name": "_destinationDomain", + "nodeType": "VariableDeclaration", + "scope": 18142, + "src": "5964:25:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18115, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "5964:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "id": 18120, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18117, + "name": "_originalMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18074, + "src": "5992:12:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18118, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_destinationDomain", + "nodeType": "MemberAccess", + "referencedDeclaration": 19673, + "src": "5992:31:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (uint32)" + } + }, + "id": 18119, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5992:33:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5964:61:15" + }, + { + "assignments": [ + 18122 + ], + "declarations": [ + { + "constant": false, + "id": 18122, + "mutability": "mutable", + "name": "_recipient", + "nodeType": "VariableDeclaration", + "scope": 18142, + "src": "6035:18:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18121, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6035:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 18126, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18123, + "name": "_originalMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18074, + "src": "6056:12:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_recipient", + "nodeType": "MemberAccess", + "referencedDeclaration": 19718, + "src": "6056:23:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (bytes32)" + } + }, + "id": 18125, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6056:25:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6035:46:15" + }, + { + "assignments": [ + 18128 + ], + "declarations": [ + { + "constant": false, + "id": 18128, + "mutability": "mutable", + "name": "_nonce", + "nodeType": "VariableDeclaration", + "scope": 18142, + "src": "6091:13:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 18127, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "6091:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "id": 18132, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18129, + "name": "_originalMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18074, + "src": "6107:12:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18130, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_nonce", + "nodeType": "MemberAccess", + "referencedDeclaration": 19690, + "src": "6107:19:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint64_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (uint64)" + } + }, + "id": 18131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6107:21:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6091:37:15" + }, + { + "expression": { + "arguments": [ + { + "id": 18134, + "name": "_destinationDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18116, + "src": "6165:18:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18135, + "name": "_recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18122, + "src": "6197:10:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18136, + "name": "newDestinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18062, + "src": "6221:20:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18137, + "name": "_sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18086, + "src": "6255:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18138, + "name": "_nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18128, + "src": "6276:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 18139, + "name": "newMessageBody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18060, + "src": "6296:14:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "id": 18133, + "name": "_sendMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18413, + "src": "6139:12:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_uint64_$_t_bytes_calldata_ptr_$returns$__$", + "typeString": "function (uint32,bytes32,bytes32,bytes32,uint64,bytes calldata)" + } + }, + "id": 18140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6139:181:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18141, + "nodeType": "ExpressionStatement", + "src": "6139:181:15" + } + ] + }, + "baseFunctions": [ + 22535 + ], + "documentation": { + "id": 18054, + "nodeType": "StructuredDocumentation", + "src": "4197:811:15", + "text": " @notice Replace a message with a new message body and/or destination caller.\n @dev The `originalAttestation` must be a valid attestation of `originalMessage`.\n Reverts if msg.sender does not match sender of original message, or if the source domain of the original message\n does not match this MessageTransmitter's local domain.\n @param originalMessage original message to replace\n @param originalAttestation attestation of `originalMessage`\n @param newMessageBody new message body of replaced message\n @param newDestinationCaller the new destination caller, which may be the\n same as the original destination caller, a new destination caller, or an empty\n destination caller (bytes32(0), indicating that any destination caller is valid.)" + }, + "functionSelector": "b857b774", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 18066, + "modifierName": { + "id": 18065, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 21705, + "src": "5222:13:15", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5222:13:15" + } + ], + "name": "replaceMessage", + "overrides": { + "id": 18064, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5213:8:15" + }, + "parameters": { + "id": 18063, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18056, + "mutability": "mutable", + "name": "originalMessage", + "nodeType": "VariableDeclaration", + "scope": 18143, + "src": "5046:30:15", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 18055, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5046:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18058, + "mutability": "mutable", + "name": "originalAttestation", + "nodeType": "VariableDeclaration", + "scope": 18143, + "src": "5086:34:15", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 18057, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5086:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18060, + "mutability": "mutable", + "name": "newMessageBody", + "nodeType": "VariableDeclaration", + "scope": 18143, + "src": "5130:29:15", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 18059, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5130:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18062, + "mutability": "mutable", + "name": "newDestinationCaller", + "nodeType": "VariableDeclaration", + "scope": 18143, + "src": "5169:28:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18061, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5169:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5036:167:15" + }, + "returnParameters": { + "id": 18067, + "nodeType": "ParameterList", + "parameters": [], + "src": "5236:0:15" + }, + "scope": 18452, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 18195, + "nodeType": "FunctionDefinition", + "src": "7236:687:15", + "nodes": [], + "body": { + "id": 18194, + "nodeType": "Block", + "src": "7454:469:15", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 18166, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 18161, + "name": "destinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18150, + "src": "7485:17:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 18164, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7514:1:15", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 18163, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7506:7:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 18162, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7506:7:15", + "typeDescriptions": {} + } + }, + "id": 18165, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7506:10:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "7485:31:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "44657374696e6174696f6e2063616c6c6572206d757374206265206e6f6e7a65726f", + "id": 18167, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7530:36:15", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_16483e6dd3c8282947f9ec9d4baa0b9ce0705b959b30a461e0c041eda3114e30", + "typeString": "literal_string \"Destination caller must be nonzero\"" + }, + "value": "Destination caller must be nonzero" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_16483e6dd3c8282947f9ec9d4baa0b9ce0705b959b30a461e0c041eda3114e30", + "typeString": "literal_string \"Destination caller must be nonzero\"" + } + ], + "id": 18160, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "7464:7:15", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18168, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7464:112:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18169, + "nodeType": "ExpressionStatement", + "src": "7464:112:15" + }, + { + "assignments": [ + 18171 + ], + "declarations": [ + { + "constant": false, + "id": 18171, + "mutability": "mutable", + "name": "_nonce", + "nodeType": "VariableDeclaration", + "scope": 18194, + "src": "7587:13:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 18170, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "7587:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "id": 18174, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 18172, + "name": "_reserveAndIncrementNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18451, + "src": "7603:25:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint64_$", + "typeString": "function () returns (uint64)" + } + }, + "id": 18173, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7603:27:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7587:43:15" + }, + { + "assignments": [ + 18176 + ], + "declarations": [ + { + "constant": false, + "id": 18176, + "mutability": "mutable", + "name": "_messageSender", + "nodeType": "VariableDeclaration", + "scope": 18194, + "src": "7640:22:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18175, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7640:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 18182, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 18179, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "7690:3:15", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 18180, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "7690:10:15", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "expression": { + "id": 18177, + "name": "Message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19815, + "src": "7665:7:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Message_$19815_$", + "typeString": "type(library Message)" + } + }, + "id": 18178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "addressToBytes32", + "nodeType": "MemberAccess", + "referencedDeclaration": 19771, + "src": "7665:24:15", + "typeDescriptions": { + "typeIdentifier": "t_function_delegatecall_pure$_t_address_$returns$_t_bytes32_$", + "typeString": "function (address) pure returns (bytes32)" + } + }, + "id": 18181, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7665:36:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7640:61:15" + }, + { + "expression": { + "arguments": [ + { + "id": 18184, + "name": "destinationDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18146, + "src": "7738:17:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18185, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18148, + "src": "7769:9:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18186, + "name": "destinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18150, + "src": "7792:17:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18187, + "name": "_messageSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18176, + "src": "7823:14:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18188, + "name": "_nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18171, + "src": "7851:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 18189, + "name": "messageBody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18152, + "src": "7871:11:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "id": 18183, + "name": "_sendMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18413, + "src": "7712:12:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_uint64_$_t_bytes_calldata_ptr_$returns$__$", + "typeString": "function (uint32,bytes32,bytes32,bytes32,uint64,bytes calldata)" + } + }, + "id": 18190, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7712:180:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18191, + "nodeType": "ExpressionStatement", + "src": "7712:180:15" + }, + { + "expression": { + "id": 18192, + "name": "_nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18171, + "src": "7910:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 18159, + "id": 18193, + "nodeType": "Return", + "src": "7903:13:15" + } + ] + }, + "baseFunctions": [ + 22523 + ], + "documentation": { + "id": 18144, + "nodeType": "StructuredDocumentation", + "src": "6333:898:15", + "text": " @notice Send the message to the destination domain and recipient, for a specified `destinationCaller` on the\n destination domain.\n @dev Increment nonce, format the message, and emit `MessageSent` event with message information.\n WARNING: if the `destinationCaller` does not represent a valid address, then it will not be possible\n to broadcast the message on the destination domain. This is an advanced feature, and the standard\n sendMessage() should be preferred for use cases where a specific destination caller is not required.\n @param destinationDomain Domain of destination chain\n @param recipient Address of message recipient on destination domain as bytes32\n @param destinationCaller caller on the destination domain, as bytes32\n @param messageBody Raw bytes content of message\n @return nonce reserved by message" + }, + "functionSelector": "f7259a75", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 18156, + "modifierName": { + "id": 18155, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 21705, + "src": "7423:13:15", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7423:13:15" + } + ], + "name": "sendMessageWithCaller", + "overrides": { + "id": 18154, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "7414:8:15" + }, + "parameters": { + "id": 18153, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18146, + "mutability": "mutable", + "name": "destinationDomain", + "nodeType": "VariableDeclaration", + "scope": 18195, + "src": "7276:24:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18145, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "7276:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18148, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 18195, + "src": "7310:17:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18147, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7310:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18150, + "mutability": "mutable", + "name": "destinationCaller", + "nodeType": "VariableDeclaration", + "scope": 18195, + "src": "7337:25:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18149, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7337:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18152, + "mutability": "mutable", + "name": "messageBody", + "nodeType": "VariableDeclaration", + "scope": 18195, + "src": "7372:26:15", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 18151, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "7372:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "7266:138:15" + }, + "returnParameters": { + "id": 18159, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18158, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 18195, + "src": "7446:6:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 18157, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "7446:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "7445:8:15" + }, + "scope": 18452, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 18343, + "nodeType": "FunctionDefinition", + "src": "9350:1877:15", + "nodes": [], + "body": { + "id": 18342, + "nodeType": "Block", + "src": "9517:1710:15", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 18209, + "name": "message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18198, + "src": "9610:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + { + "id": 18210, + "name": "attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18200, + "src": "9619:11:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "id": 18208, + "name": "_verifyAttestationSignatures", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 21656, + "src": "9581:28:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$", + "typeString": "function (bytes calldata,bytes calldata) view" + } + }, + "id": 18211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9581:50:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18212, + "nodeType": "ExpressionStatement", + "src": "9581:50:15" + }, + { + "assignments": [ + 18214 + ], + "declarations": [ + { + "constant": false, + "id": 18214, + "mutability": "mutable", + "name": "_msg", + "nodeType": "VariableDeclaration", + "scope": 18342, + "src": "9642:12:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + }, + "typeName": { + "id": 18213, + "name": "bytes29", + "nodeType": "ElementaryTypeName", + "src": "9642:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "visibility": "internal" + } + ], + "id": 18219, + "initialValue": { + "arguments": [ + { + "hexValue": "30", + "id": 18217, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9669:1:15", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "expression": { + "id": 18215, + "name": "message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18198, + "src": "9657:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + "id": 18216, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ref", + "nodeType": "MemberAccess", + "referencedDeclaration": 20430, + "src": "9657:11:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory,uint40) pure returns (bytes29)" + } + }, + "id": 18218, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9657:14:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9642:29:15" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18220, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18214, + "src": "9717:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_validateMessageFormat", + "nodeType": "MemberAccess", + "referencedDeclaration": 19814, + "src": "9717:27:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$__$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure" + } + }, + "id": 18223, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9717:29:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18224, + "nodeType": "ExpressionStatement", + "src": "9717:29:15" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "id": 18230, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18226, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18214, + "src": "9805:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18227, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_destinationDomain", + "nodeType": "MemberAccess", + "referencedDeclaration": 19673, + "src": "9805:23:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (uint32)" + } + }, + "id": 18228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9805:25:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 18229, + "name": "localDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17969, + "src": "9834:11:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "9805:40:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c69642064657374696e6174696f6e20646f6d61696e", + "id": 18231, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9859:28:15", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2ff9faa4662ff1540badc93e5cef6dd8e4f0f217fb2d7333299d0b79f62347d8", + "typeString": "literal_string \"Invalid destination domain\"" + }, + "value": "Invalid destination domain" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2ff9faa4662ff1540badc93e5cef6dd8e4f0f217fb2d7333299d0b79f62347d8", + "typeString": "literal_string \"Invalid destination domain\"" + } + ], + "id": 18225, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "9784:7:15", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9784:113:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18233, + "nodeType": "ExpressionStatement", + "src": "9784:113:15" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 18241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18234, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18214, + "src": "9951:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18235, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_destinationCaller", + "nodeType": "MemberAccess", + "referencedDeclaration": 19732, + "src": "9951:23:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (bytes32)" + } + }, + "id": 18236, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9951:25:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 18239, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9988:1:15", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 18238, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9980:7:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 18237, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9980:7:15", + "typeDescriptions": {} + } + }, + "id": 18240, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9980:10:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "9951:39:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 18256, + "nodeType": "IfStatement", + "src": "9947:240:15", + "trueBody": { + "id": 18255, + "nodeType": "Block", + "src": "9992:195:15", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 18251, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18243, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18214, + "src": "10031:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18244, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_destinationCaller", + "nodeType": "MemberAccess", + "referencedDeclaration": 19732, + "src": "10031:23:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (bytes32)" + } + }, + "id": 18245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10031:25:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "expression": { + "id": 18248, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "10105:3:15", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 18249, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "10105:10:15", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "expression": { + "id": 18246, + "name": "Message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19815, + "src": "10080:7:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Message_$19815_$", + "typeString": "type(library Message)" + } + }, + "id": 18247, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "addressToBytes32", + "nodeType": "MemberAccess", + "referencedDeclaration": 19771, + "src": "10080:24:15", + "typeDescriptions": { + "typeIdentifier": "t_function_delegatecall_pure$_t_address_$returns$_t_bytes32_$", + "typeString": "function (address) pure returns (bytes32)" + } + }, + "id": 18250, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10080:36:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "10031:85:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c69642063616c6c657220666f72206d657373616765", + "id": 18252, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10134:28:15", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ecc4221c56d28dd779a96682717afa7c73ae4368985260c43312f7b834a60c32", + "typeString": "literal_string \"Invalid caller for message\"" + }, + "value": "Invalid caller for message" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ecc4221c56d28dd779a96682717afa7c73ae4368985260c43312f7b834a60c32", + "typeString": "literal_string \"Invalid caller for message\"" + } + ], + "id": 18242, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "10006:7:15", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18253, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10006:170:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18254, + "nodeType": "ExpressionStatement", + "src": "10006:170:15" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "id": 18262, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18258, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18214, + "src": "10233:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18259, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_version", + "nodeType": "MemberAccess", + "referencedDeclaration": 19639, + "src": "10233:13:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (uint32)" + } + }, + "id": 18260, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10233:15:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 18261, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17971, + "src": "10252:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "10233:26:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c6964206d6573736167652076657273696f6e", + "id": 18263, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10261:25:15", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_96ec396733dac8a2a2d6e461050f2f50ffdf90ecaf7c67ef3e266a30493dd0d7", + "typeString": "literal_string \"Invalid message version\"" + }, + "value": "Invalid message version" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_96ec396733dac8a2a2d6e461050f2f50ffdf90ecaf7c67ef3e266a30493dd0d7", + "typeString": "literal_string \"Invalid message version\"" + } + ], + "id": 18257, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "10225:7:15", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18264, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10225:62:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18265, + "nodeType": "ExpressionStatement", + "src": "10225:62:15" + }, + { + "assignments": [ + 18267 + ], + "declarations": [ + { + "constant": false, + "id": 18267, + "mutability": "mutable", + "name": "_sourceDomain", + "nodeType": "VariableDeclaration", + "scope": 18342, + "src": "10337:20:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18266, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "10337:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "id": 18271, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18268, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18214, + "src": "10360:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18269, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_sourceDomain", + "nodeType": "MemberAccess", + "referencedDeclaration": 19656, + "src": "10360:18:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (uint32)" + } + }, + "id": 18270, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10360:20:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10337:43:15" + }, + { + "assignments": [ + 18273 + ], + "declarations": [ + { + "constant": false, + "id": 18273, + "mutability": "mutable", + "name": "_nonce", + "nodeType": "VariableDeclaration", + "scope": 18342, + "src": "10390:13:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 18272, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "10390:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "id": 18277, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18274, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18214, + "src": "10406:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18275, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_nonce", + "nodeType": "MemberAccess", + "referencedDeclaration": 19690, + "src": "10406:11:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint64_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (uint64)" + } + }, + "id": 18276, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10406:13:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10390:29:15" + }, + { + "assignments": [ + 18279 + ], + "declarations": [ + { + "constant": false, + "id": 18279, + "mutability": "mutable", + "name": "_sourceAndNonce", + "nodeType": "VariableDeclaration", + "scope": 18342, + "src": "10429:23:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18278, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "10429:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 18284, + "initialValue": { + "arguments": [ + { + "id": 18281, + "name": "_sourceDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18267, + "src": "10475:13:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18282, + "name": "_nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18273, + "src": "10490:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 18280, + "name": "_hashSourceAndNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18432, + "src": "10455:19:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint64_$returns$_t_bytes32_$", + "typeString": "function (uint32,uint64) pure returns (bytes32)" + } + }, + "id": 18283, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10455:42:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10429:68:15" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 18290, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 18286, + "name": "usedNonces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17979, + "src": "10515:10:15", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 18288, + "indexExpression": { + "id": 18287, + "name": "_sourceAndNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18279, + "src": "10526:15:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10515:27:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 18289, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10546:1:15", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "10515:32:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4e6f6e636520616c72656164792075736564", + "id": 18291, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10549:20:15", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_923b8cbbcee77e95e0614b96c81a4cbd157e2cc78e2937caa0bed8e1c5641a28", + "typeString": "literal_string \"Nonce already used\"" + }, + "value": "Nonce already used" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_923b8cbbcee77e95e0614b96c81a4cbd157e2cc78e2937caa0bed8e1c5641a28", + "typeString": "literal_string \"Nonce already used\"" + } + ], + "id": 18285, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "10507:7:15", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10507:63:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18293, + "nodeType": "ExpressionStatement", + "src": "10507:63:15" + }, + { + "expression": { + "id": 18298, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 18294, + "name": "usedNonces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17979, + "src": "10607:10:15", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 18296, + "indexExpression": { + "id": 18295, + "name": "_sourceAndNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18279, + "src": "10618:15:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "10607:27:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "31", + "id": 18297, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10637:1:15", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "10607:31:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 18299, + "nodeType": "ExpressionStatement", + "src": "10607:31:15" + }, + { + "assignments": [ + 18301 + ], + "declarations": [ + { + "constant": false, + "id": 18301, + "mutability": "mutable", + "name": "_sender", + "nodeType": "VariableDeclaration", + "scope": 18342, + "src": "10683:15:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18300, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "10683:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 18305, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18302, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18214, + "src": "10701:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18303, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_sender", + "nodeType": "MemberAccess", + "referencedDeclaration": 19704, + "src": "10701:12:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (bytes32)" + } + }, + "id": 18304, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10701:14:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10683:32:15" + }, + { + "assignments": [ + 18307 + ], + "declarations": [ + { + "constant": false, + "id": 18307, + "mutability": "mutable", + "name": "_messageBody", + "nodeType": "VariableDeclaration", + "scope": 18342, + "src": "10725:25:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 18306, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "10725:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 18313, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18308, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18214, + "src": "10753:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18309, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_messageBody", + "nodeType": "MemberAccess", + "referencedDeclaration": 19751, + "src": "10753:17:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (bytes29)" + } + }, + "id": 18310, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10753:19:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18311, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "clone", + "nodeType": "MemberAccess", + "referencedDeclaration": 21130, + "src": "10753:25:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes29_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) view returns (bytes memory)" + } + }, + "id": 18312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10753:27:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10725:55:15" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 18324, + "name": "_sourceDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18267, + "src": "10910:13:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18325, + "name": "_sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18301, + "src": "10925:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18326, + "name": "_messageBody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18307, + "src": "10934:12:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18318, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18214, + "src": "10852:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18319, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_recipient", + "nodeType": "MemberAccess", + "referencedDeclaration": 19718, + "src": "10852:15:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (bytes32)" + } + }, + "id": 18320, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10852:17:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 18316, + "name": "Message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19815, + "src": "10827:7:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Message_$19815_$", + "typeString": "type(library Message)" + } + }, + "id": 18317, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bytes32ToAddress", + "nodeType": "MemberAccess", + "referencedDeclaration": 19791, + "src": "10827:24:15", + "typeDescriptions": { + "typeIdentifier": "t_function_delegatecall_pure$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes32) pure returns (address)" + } + }, + "id": 18321, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10827:43:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 18315, + "name": "IMessageHandler", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 21282, + "src": "10811:15:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IMessageHandler_$21282_$", + "typeString": "type(contract IMessageHandler)" + } + }, + "id": 18322, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10811:60:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMessageHandler_$21282", + "typeString": "contract IMessageHandler" + } + }, + "id": 18323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "handleReceiveMessage", + "nodeType": "MemberAccess", + "referencedDeclaration": 21281, + "src": "10811:98:15", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$", + "typeString": "function (uint32,bytes32,bytes memory) external returns (bool)" + } + }, + "id": 18327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10811:136:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "68616e646c65526563656976654d6573736167652829206661696c6564", + "id": 18328, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10961:31:15", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_418a87c56a932bf28ccb1d12973c09492bd3895dd59091ffd5d12b6e3e445885", + "typeString": "literal_string \"handleReceiveMessage() failed\"" + }, + "value": "handleReceiveMessage() failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_418a87c56a932bf28ccb1d12973c09492bd3895dd59091ffd5d12b6e3e445885", + "typeString": "literal_string \"handleReceiveMessage() failed\"" + } + ], + "id": 18314, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "10790:7:15", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18329, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10790:212:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18330, + "nodeType": "ExpressionStatement", + "src": "10790:212:15" + }, + { + "eventCall": { + "arguments": [ + { + "expression": { + "id": 18332, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "11085:3:15", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 18333, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "11085:10:15", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 18334, + "name": "_sourceDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18267, + "src": "11109:13:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18335, + "name": "_nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18273, + "src": "11136:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 18336, + "name": "_sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18301, + "src": "11156:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18337, + "name": "_messageBody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18307, + "src": "11177:12:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 18331, + "name": "MessageReceived", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17953, + "src": "11056:15:15", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint32_$_t_uint64_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,uint32,uint64,bytes32,bytes memory)" + } + }, + "id": 18338, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11056:143:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18339, + "nodeType": "EmitStatement", + "src": "11051:148:15" + }, + { + "expression": { + "hexValue": "74727565", + "id": 18340, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11216:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 18207, + "id": 18341, + "nodeType": "Return", + "src": "11209:11:15" + } + ] + }, + "baseFunctions": [ + 22493 + ], + "documentation": { + "id": 18196, + "nodeType": "StructuredDocumentation", + "src": "7929:1416:15", + "text": " @notice Receive a message. Messages with a given nonce\n can only be broadcast once for a (sourceDomain, destinationDomain)\n pair. The message body of a valid message is passed to the\n specified recipient for further processing.\n @dev Attestation format:\n A valid attestation is the concatenated 65-byte signature(s) of exactly\n `thresholdSignature` signatures, in increasing order of attester address.\n ***If the attester addresses recovered from signatures are not in\n increasing order, signature verification will fail.***\n If incorrect number of signatures or duplicate signatures are supplied,\n signature verification will fail.\n Message format:\n Field Bytes Type Index\n version 4 uint32 0\n sourceDomain 4 uint32 4\n destinationDomain 4 uint32 8\n nonce 8 uint64 12\n sender 32 bytes32 20\n recipient 32 bytes32 52\n messageBody dynamic bytes 84\n @param message Message bytes\n @param attestation Concatenated 65-byte signature(s) of `message`, in increasing order\n of the attester address recovered from signatures.\n @return success bool, true if successful" + }, + "functionSelector": "57ecfd28", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 18204, + "modifierName": { + "id": 18203, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 21705, + "src": "9468:13:15", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "9468:13:15" + } + ], + "name": "receiveMessage", + "overrides": { + "id": 18202, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "9451:8:15" + }, + "parameters": { + "id": 18201, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18198, + "mutability": "mutable", + "name": "message", + "nodeType": "VariableDeclaration", + "scope": 18343, + "src": "9374:22:15", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 18197, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "9374:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18200, + "mutability": "mutable", + "name": "attestation", + "nodeType": "VariableDeclaration", + "scope": 18343, + "src": "9398:26:15", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 18199, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "9398:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "9373:52:15" + }, + "returnParameters": { + "id": 18207, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18206, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 18343, + "src": "9499:12:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 18205, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9499:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "9498:14:15" + }, + "scope": 18452, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 18360, + "nodeType": "FunctionDefinition", + "src": "11493:220:15", + "nodes": [], + "body": { + "id": 18359, + "nodeType": "Block", + "src": "11594:119:15", + "nodes": [], + "statements": [ + { + "expression": { + "id": 18353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 18351, + "name": "maxMessageBodySize", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17973, + "src": "11604:18:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 18352, + "name": "newMaxMessageBodySize", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18346, + "src": "11625:21:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11604:42:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 18354, + "nodeType": "ExpressionStatement", + "src": "11604:42:15" + }, + { + "eventCall": { + "arguments": [ + { + "id": 18356, + "name": "maxMessageBodySize", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17973, + "src": "11687:18:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 18355, + "name": "MaxMessageBodySizeUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17958, + "src": "11661:25:15", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 18357, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11661:45:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18358, + "nodeType": "EmitStatement", + "src": "11656:50:15" + } + ] + }, + "documentation": { + "id": 18344, + "nodeType": "StructuredDocumentation", + "src": "11233:255:15", + "text": " @notice Sets the max message body size\n @dev This value should not be reduced without good reason,\n to avoid impacting users who rely on large messages.\n @param newMaxMessageBodySize new max message body size, in bytes" + }, + "functionSelector": "92492c68", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 18349, + "modifierName": { + "id": 18348, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 23550, + "src": "11580:9:15", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "11580:9:15" + } + ], + "name": "setMaxMessageBodySize", + "parameters": { + "id": 18347, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18346, + "mutability": "mutable", + "name": "newMaxMessageBodySize", + "nodeType": "VariableDeclaration", + "scope": 18360, + "src": "11524:29:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 18345, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11524:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11523:31:15" + }, + "returnParameters": { + "id": 18350, + "nodeType": "ParameterList", + "parameters": [], + "src": "11594:0:15" + }, + "scope": 18452, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 18413, + "nodeType": "FunctionDefinition", + "src": "12475:836:15", + "nodes": [], + "body": { + "id": 18412, + "nodeType": "Block", + "src": "12696:615:15", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 18380, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 18377, + "name": "_messageBody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18373, + "src": "12767:12:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + "id": 18378, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "12767:19:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 18379, + "name": "maxMessageBodySize", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17973, + "src": "12790:18:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12767:41:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4d65737361676520626f64792065786365656473206d61782073697a65", + "id": 18381, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12822:31:15", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_5a1515922dbe2488b5038322110ac6be2a5c2c588524e0e24bfe20a53b04de5f", + "typeString": "literal_string \"Message body exceeds max size\"" + }, + "value": "Message body exceeds max size" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5a1515922dbe2488b5038322110ac6be2a5c2c588524e0e24bfe20a53b04de5f", + "typeString": "literal_string \"Message body exceeds max size\"" + } + ], + "id": 18376, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "12746:7:15", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18382, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12746:117:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18383, + "nodeType": "ExpressionStatement", + "src": "12746:117:15" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 18390, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 18385, + "name": "_recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18365, + "src": "12882:10:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 18388, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12904:1:15", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 18387, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "12896:7:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 18386, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12896:7:15", + "typeDescriptions": {} + } + }, + "id": 18389, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12896:10:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "12882:24:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "526563697069656e74206d757374206265206e6f6e7a65726f", + "id": 18391, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12908:27:15", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_62cbab1e58fe238ebb237c287f51eb3c469f8f7dc54cd96f21a8269dbf7be984", + "typeString": "literal_string \"Recipient must be nonzero\"" + }, + "value": "Recipient must be nonzero" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_62cbab1e58fe238ebb237c287f51eb3c469f8f7dc54cd96f21a8269dbf7be984", + "typeString": "literal_string \"Recipient must be nonzero\"" + } + ], + "id": 18384, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "12874:7:15", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18392, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12874:62:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18393, + "nodeType": "ExpressionStatement", + "src": "12874:62:15" + }, + { + "assignments": [ + 18395 + ], + "declarations": [ + { + "constant": false, + "id": 18395, + "mutability": "mutable", + "name": "_message", + "nodeType": "VariableDeclaration", + "scope": 18412, + "src": "12976:21:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 18394, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "12976:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 18407, + "initialValue": { + "arguments": [ + { + "id": 18398, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17971, + "src": "13036:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18399, + "name": "localDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17969, + "src": "13057:11:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18400, + "name": "_destinationDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18363, + "src": "13082:18:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18401, + "name": "_nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18371, + "src": "13114:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 18402, + "name": "_sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18369, + "src": "13134:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18403, + "name": "_recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18365, + "src": "13155:10:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18404, + "name": "_destinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18367, + "src": "13179:18:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18405, + "name": "_messageBody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18373, + "src": "13211:12:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "expression": { + "id": 18396, + "name": "Message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19815, + "src": "13000:7:15", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Message_$19815_$", + "typeString": "type(library Message)" + } + }, + "id": 18397, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_formatMessage", + "nodeType": "MemberAccess", + "referencedDeclaration": 19622, + "src": "13000:22:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$_t_uint64_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (uint32,uint32,uint32,uint64,bytes32,bytes32,bytes32,bytes memory) pure returns (bytes memory)" + } + }, + "id": 18406, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13000:233:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12976:257:15" + }, + { + "eventCall": { + "arguments": [ + { + "id": 18409, + "name": "_message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18395, + "src": "13295:8:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 18408, + "name": "MessageSent", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17940, + "src": "13283:11:15", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (bytes memory)" + } + }, + "id": 18410, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13283:21:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18411, + "nodeType": "EmitStatement", + "src": "13278:26:15" + } + ] + }, + "documentation": { + "id": 18361, + "nodeType": "StructuredDocumentation", + "src": "11767:703:15", + "text": " @notice Send the message to the destination domain and recipient. If `_destinationCaller` is not equal to bytes32(0),\n the message can only be received on the destination chain when called by `_destinationCaller`.\n @dev Format the message and emit `MessageSent` event with message information.\n @param _destinationDomain Domain of destination chain\n @param _recipient Address of message recipient on destination domain as bytes32\n @param _destinationCaller caller on the destination domain, as bytes32\n @param _sender message sender, as bytes32\n @param _nonce nonce reserved for message\n @param _messageBody Raw bytes content of message" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_sendMessage", + "parameters": { + "id": 18374, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18363, + "mutability": "mutable", + "name": "_destinationDomain", + "nodeType": "VariableDeclaration", + "scope": 18413, + "src": "12506:25:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18362, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "12506:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18365, + "mutability": "mutable", + "name": "_recipient", + "nodeType": "VariableDeclaration", + "scope": 18413, + "src": "12541:18:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18364, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12541:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18367, + "mutability": "mutable", + "name": "_destinationCaller", + "nodeType": "VariableDeclaration", + "scope": 18413, + "src": "12569:26:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18366, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12569:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18369, + "mutability": "mutable", + "name": "_sender", + "nodeType": "VariableDeclaration", + "scope": 18413, + "src": "12605:15:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18368, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12605:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18371, + "mutability": "mutable", + "name": "_nonce", + "nodeType": "VariableDeclaration", + "scope": 18413, + "src": "12630:13:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 18370, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "12630:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18373, + "mutability": "mutable", + "name": "_messageBody", + "nodeType": "VariableDeclaration", + "scope": 18413, + "src": "12653:27:15", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 18372, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "12653:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "12496:190:15" + }, + "returnParameters": { + "id": 18375, + "nodeType": "ParameterList", + "parameters": [], + "src": "12696:0:15" + }, + "scope": 18452, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 18432, + "nodeType": "FunctionDefinition", + "src": "13587:188:15", + "nodes": [], + "body": { + "id": 18431, + "nodeType": "Block", + "src": "13707:68:15", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 18426, + "name": "_source", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18416, + "src": "13751:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18427, + "name": "_nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18418, + "src": "13760:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "id": 18424, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "13734:3:15", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 18425, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "13734:16:15", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 18428, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13734:33:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 18423, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "13724:9:15", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 18429, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13724:44:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 18422, + "id": 18430, + "nodeType": "Return", + "src": "13717:51:15" + } + ] + }, + "documentation": { + "id": 18414, + "nodeType": "StructuredDocumentation", + "src": "13317:265:15", + "text": " @notice hashes `_source` and `_nonce`.\n @param _source Domain of chain where the transfer originated\n @param _nonce The unique identifier for the message from source to\ndestination\n @return hash of source and nonce" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_hashSourceAndNonce", + "parameters": { + "id": 18419, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18416, + "mutability": "mutable", + "name": "_source", + "nodeType": "VariableDeclaration", + "scope": 18432, + "src": "13616:14:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18415, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "13616:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18418, + "mutability": "mutable", + "name": "_nonce", + "nodeType": "VariableDeclaration", + "scope": 18432, + "src": "13632:13:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 18417, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "13632:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "13615:31:15" + }, + "returnParameters": { + "id": 18422, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18421, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 18432, + "src": "13694:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18420, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "13694:7:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "13693:9:15" + }, + "scope": 18452, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "id": 18451, + "nodeType": "FunctionDefinition", + "src": "13877:206:15", + "nodes": [], + "body": { + "id": 18450, + "nodeType": "Block", + "src": "13940:143:15", + "nodes": [], + "statements": [ + { + "assignments": [ + 18439 + ], + "declarations": [ + { + "constant": false, + "id": 18439, + "mutability": "mutable", + "name": "_nonceReserved", + "nodeType": "VariableDeclaration", + "scope": 18450, + "src": "13950:21:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 18438, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "13950:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "id": 18441, + "initialValue": { + "id": 18440, + "name": "nextAvailableNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17975, + "src": "13974:18:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13950:42:15" + }, + { + "expression": { + "id": 18446, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 18442, + "name": "nextAvailableNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17975, + "src": "14002:18:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 18445, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 18443, + "name": "nextAvailableNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17975, + "src": "14023:18:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 18444, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14044:1:15", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "14023:22:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "14002:43:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 18447, + "nodeType": "ExpressionStatement", + "src": "14002:43:15" + }, + { + "expression": { + "id": 18448, + "name": "_nonceReserved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18439, + "src": "14062:14:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 18437, + "id": 18449, + "nodeType": "Return", + "src": "14055:21:15" + } + ] + }, + "documentation": { + "id": 18433, + "nodeType": "StructuredDocumentation", + "src": "13781:91:15", + "text": " Reserve and increment next available nonce\n @return nonce reserved" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_reserveAndIncrementNonce", + "parameters": { + "id": 18434, + "nodeType": "ParameterList", + "parameters": [], + "src": "13911:2:15" + }, + "returnParameters": { + "id": 18437, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18436, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 18451, + "src": "13932:6:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 18435, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "13932:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "13931:8:15" + }, + "scope": 18452, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 17928, + "name": "IMessageTransmitter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21292, + "src": "1067:19:15", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMessageTransmitter_$21292", + "typeString": "contract IMessageTransmitter" + } + }, + "id": 17929, + "nodeType": "InheritanceSpecifier", + "src": "1067:19:15" + }, + { + "baseName": { + "id": 17930, + "name": "Pausable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21783, + "src": "1092:8:15", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Pausable_$21783", + "typeString": "contract Pausable" + } + }, + "id": 17931, + "nodeType": "InheritanceSpecifier", + "src": "1092:8:15" + }, + { + "baseName": { + "id": 17932, + "name": "Rescuable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21872, + "src": "1106:9:15", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Rescuable_$21872", + "typeString": "contract Rescuable" + } + }, + "id": 17933, + "nodeType": "InheritanceSpecifier", + "src": "1106:9:15" + }, + { + "baseName": { + "id": 17934, + "name": "Attestable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21675, + "src": "1121:10:15", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Attestable_$21675", + "typeString": "contract Attestable" + } + }, + "id": 17935, + "nodeType": "InheritanceSpecifier", + "src": "1121:10:15" + } + ], + "contractDependencies": [ + 21292, + 21675, + 21783, + 21872, + 22494, + 22536, + 23227, + 23617, + 24291 + ], + "contractKind": "contract", + "documentation": { + "id": 17927, + "nodeType": "StructuredDocumentation", + "src": "913:118:15", + "text": " @title MessageTransmitter\n @notice Contract responsible for sending and receiving messages across chains." + }, + "fullyImplemented": true, + "linearizedBaseContracts": [ + 18452, + 21675, + 21872, + 21783, + 23227, + 23617, + 24291, + 21292, + 22494, + 22536 + ], + "name": "MessageTransmitter", + "scope": 18453 + } + ] + }, + "id": 15 +} \ No newline at end of file diff --git a/typescript/example/abi/TokenMessenger.json b/typescript/example/abi/TokenMessenger.json new file mode 100644 index 0000000..da46934 --- /dev/null +++ b/typescript/example/abi/TokenMessenger.json @@ -0,0 +1,12642 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_messageTransmitter", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_messageBodyVersion", + "type": "uint32" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "nonce", + "type": "uint64" + }, + { + "indexed": true, + "internalType": "address", + "name": "burnToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "mintRecipient", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "destinationTokenMessenger", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "destinationCaller", + "type": "bytes32" + } + ], + "name": "DepositForBurn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "localMinter", + "type": "address" + } + ], + "name": "LocalMinterAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "localMinter", + "type": "address" + } + ], + "name": "LocalMinterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "mintRecipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "mintToken", + "type": "address" + } + ], + "name": "MintAndWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "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": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "tokenMessenger", + "type": "bytes32" + } + ], + "name": "RemoteTokenMessengerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "tokenMessenger", + "type": "bytes32" + } + ], + "name": "RemoteTokenMessengerRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newRescuer", + "type": "address" + } + ], + "name": "RescuerChanged", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newLocalMinter", + "type": "address" + } + ], + "name": "addLocalMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "tokenMessenger", + "type": "bytes32" + } + ], + "name": "addRemoteTokenMessenger", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mintRecipient", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "burnToken", + "type": "address" + } + ], + "name": "depositForBurn", + "outputs": [ + { + "internalType": "uint64", + "name": "_nonce", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mintRecipient", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "burnToken", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "destinationCaller", + "type": "bytes32" + } + ], + "name": "depositForBurnWithCaller", + "outputs": [ + { + "internalType": "uint64", + "name": "nonce", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "remoteDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "sender", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "messageBody", + "type": "bytes" + } + ], + "name": "handleReceiveMessage", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "localMessageTransmitter", + "outputs": [ + { + "internalType": "contract IMessageTransmitter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "localMinter", + "outputs": [ + { + "internalType": "contract ITokenMinter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "messageBodyVersion", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "name": "remoteTokenMessengers", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "removeLocalMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + } + ], + "name": "removeRemoteTokenMessenger", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "originalMessage", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "originalAttestation", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "newDestinationCaller", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newMintRecipient", + "type": "bytes32" + } + ], + "name": "replaceDepositForBurn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "rescueERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rescuer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newRescuer", + "type": "address" + } + ], + "name": "updateRescuer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": { + "object": "0x60c06040523480156200001157600080fd5b506040516200366238038062003662833981810160405260408110156200003757600080fd5b508051602090910151620000546200004e620000d9565b620000dd565b6001600160a01b038216620000b0576040805162461bcd60e51b815260206004820152601a60248201527f4d6573736167655472616e736d6974746572206e6f7420736574000000000000604482015290519081900360640190fd5b60609190911b6001600160601b03191660805260e01b6001600160e01b03191660a05262000157565b3390565b600180546001600160a01b0319169055620001048162000107602090811b6200177c17901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60805160601c60a05160e01c6134b9620001a960003980610819528061114e528061133f5280611fda5250806108455280610c4c52806121fc5280612252528061293f5280612a1652506134b96000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806391f17888116100cd578063da87e44811610081578063f2fde38b11610066578063f2fde38b146104a7578063f79fd08e146104da578063f856ddb6146104fd57610151565b8063da87e44814610476578063e30c39781461049f57610151565b80639cdbb181116100b25780639cdbb1811461040a578063b2118a8d1461042b578063cb75c11c1461046e57610151565b806391f178881461036c57806396abeb701461037457610151565b80636fd3504e116101245780638197beb9116101095780638197beb9146102fc57806382a5e6651461032f5780638da5cb5b1461036457610151565b80636fd3504e1461028c57806379ba5097146102f457610151565b806329a78e33146101565780632ab60045146102205780632c1219211461025357806338a6318314610284575b600080fd5b61021e6004803603608081101561016c57600080fd5b81019060208101813564010000000081111561018757600080fd5b82018360208201111561019957600080fd5b803590602001918460018302840111640100000000831117156101bb57600080fd5b9193909290916020810190356401000000008111156101d957600080fd5b8201836020820111156101eb57600080fd5b8035906020019184600183028401116401000000008311171561020d57600080fd5b91935091508035906020013561054e565b005b61021e6004803603602081101561023657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b67565b61025b610c4a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61025b610c6e565b6102d7600480360360808110156102a257600080fd5b50803590602081013563ffffffff16906040810135906060013573ffffffffffffffffffffffffffffffffffffffff16610c8a565b6040805167ffffffffffffffff9092168252519081900360200190f35b61021e610ca4565b61021e6004803603602081101561031257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d47565b6103526004803603602081101561034557600080fd5b503563ffffffff16610ecf565b60408051918252519081900360200190f35b61025b610ee1565b61021e610efd565b6103f66004803603606081101561038a57600080fd5b63ffffffff823516916020810135918101906060810160408201356401000000008111156103b757600080fd5b8201836020820111156103c957600080fd5b803590602001918460018302840111640100000000831117156103eb57600080fd5b509092509050610ffe565b604080519115158252519081900360200190f35b61041261133d565b6040805163ffffffff9092168252519081900360200190f35b61021e6004803603606081101561044157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611361565b61025b6113f7565b61021e6004803603604081101561048c57600080fd5b5063ffffffff8135169060200135611413565b61025b61155f565b61021e600480360360208110156104bd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661157b565b61021e600480360360208110156104f057600080fd5b503563ffffffff16611613565b6102d7600480360360a081101561051357600080fd5b5080359063ffffffff6020820135169060408101359073ffffffffffffffffffffffffffffffffffffffff60608201351690608001356116f7565b6000610594600088888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117f19050565b90506105c17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216611817565b60006105ee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316611955565b905061061b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000082166119cc565b60006106487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316611b09565b905073__$8c977731748aa4504deed57239565df533$__635ced058e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561069957600080fd5b505af41580156106ad573d6000803e3d6000fd5b505050506040513d60208110156106c357600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16331461074857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c69642073656e64657220666f72206d657373616765000000000000604482015290519081900360640190fd5b836107b457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d696e7420726563697069656e74206d757374206265206e6f6e7a65726f0000604482015290519081900360640190fd5b60006107e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416611b3a565b905060006108107fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516611b6b565b905060006108417f000000000000000000000000000000000000000000000000000000000000000084898588611b9c565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b857b7748d8d8d8d868e6040518763ffffffff1660e01b81526004018080602001806020018060200185815260200184810384528a8a82818152602001925080828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101858103845288815260200190508888808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018681038452885181528851602091820193918a019250908190849084905b8381101561096757818101518382015260200161094f565b50505050905090810190601f1680156109945780820380516001836020036101000a031916815260200191505b509950505050505050505050600060405180830381600087803b1580156109ba57600080fd5b505af11580156109ce573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff1673__$8c977731748aa4504deed57239565df533$__635ced058e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a3857600080fd5b505af4158015610a4c573d6000803e3d6000fd5b505050506040513d6020811015610a6257600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16610aa57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008916611bff565b67ffffffffffffffff167f2fa9ca894982930190727e75500a97d8dc500233a5065e0f3126c48fbe0343c0858b610afd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008d16611c30565b610b287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008e16611c61565b60408051948552602085019390935263ffffffff909116838301526060830152608082018e9052519081900360a00190a4505050505050505050505050565b610b6f611c92565b73ffffffffffffffffffffffffffffffffffffffff8116610bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613335602a913960400191505060405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe475e580d85111348e40d8ca33cfdd74c30fe1655c2d8537a13abc10065ffa5a90600090a250565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025473ffffffffffffffffffffffffffffffffffffffff1690565b6000610c998585858585611d3c565b90505b949350505050565b6000610cae6121c3565b90508073ffffffffffffffffffffffffffffffffffffffff16610ccf61155f565b73ffffffffffffffffffffffffffffffffffffffff1614610d3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061330c6029913960400191505060405180910390fd5b610d44816121c7565b50565b610d4f611c92565b73ffffffffffffffffffffffffffffffffffffffff8116610dd157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff1615610e5657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4c6f63616c206d696e74657220697320616c7265616479207365742e00000000604482015290519081900360640190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517f109bb3e70cbf1931e295b49e75c67013b85ff80d64e6f1d321f37157b90c38309181900360200190a150565b60046020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b610f05611c92565b60035473ffffffffffffffffffffffffffffffffffffffff1680610f8a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f206c6f63616c206d696e746572206973207365742e000000000000000000604482015290519081900360640190fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f2db49fbf671271826a27b02ebc496209c85fffffb4bccc67430d2a0f22b4d1ac9181900360200190a150565b60006110086121f8565b61107357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e76616c6964206d657373616765207472616e736d69747465720000000000604482015290519081900360640190fd5b848461107f8282612279565b6110d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061335f6021913960400191505060405180910390fd5b600061111a600087878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117f19050565b90506111477fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000082166119cc565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166111997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166122a5565b63ffffffff161461120b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206d65737361676520626f64792076657273696f6e00000000604482015290519081900360640190fd5b60006112387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166122d5565b905060006112677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416611b3a565b905060006112967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516611b6b565b905060006112a2612306565b905061132b818d8573__$8c977731748aa4504deed57239565df533$__635ced058e896040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156112f957600080fd5b505af415801561130d573d6000803e3d6000fd5b505050506040513d602081101561132357600080fd5b5051866123aa565b5060019b9a5050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025473ffffffffffffffffffffffffffffffffffffffff1633146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806133c76024913960400191505060405180910390fd5b6113f273ffffffffffffffffffffffffffffffffffffffff841683836124c3565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b61141b611c92565b8061148757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62797465733332283029206e6f7420616c6c6f77656400000000000000000000604482015290519081900360640190fd5b63ffffffff82166000908152600460205260409020541561150957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f546f6b656e4d657373656e67657220616c726561647920736574000000000000604482015290519081900360640190fd5b63ffffffff82166000818152600460209081526040918290208490558151928352820183905280517f4bba2b08298cf59661b4895e384cc2ac3962ce2d71f1b7c11bca52e1169f95999281900390910190a15050565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b611583611c92565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556115ce610ee1565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61161b611c92565b63ffffffff811660009081526004602052604090205461169c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f20546f6b656e4d657373656e676572207365740000000000000000000000604482015290519081900360640190fd5b63ffffffff8116600081815260046020908152604080832080549390558051938452908301829052805191927f3dcea012093dbca2bb8ed7fd2b2ff90305ab70bddda8bbb94d4152735a98f0b1929081900390910190a15050565b60008161176557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c69642064657374696e6174696f6e2063616c6c6572000000000000604482015290519081900360640190fd5b6117728686868686611d3c565b9695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000906020840161180c64ffffffffff85168284612550565b925050505b92915050565b6118427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000082166125af565b6118ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d616c666f726d6564206d657373616765000000000000000000000000000000604482015290519081900360640190fd5b60746118da7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166125ec565b6bffffffffffffffffffffffff161015610d4457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c6964206d6573736167653a20746f6f2073686f7274000000000000604482015290519081900360640190fd5b60006119c46074806119887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000086166125ec565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000861692916bffffffffffffffffffffffff9103166000612600565b90505b919050565b6119f77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000082166125af565b611a6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d616c666f726d6564206d657373616765000000000000000000000000000000604482015290519081900360640190fd5b6084611a8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166125ec565b6bffffffffffffffffffffffff1614610d4457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c6964206d657373616765206c656e67746800000000000000000000604482015290519081900360640190fd5b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660646020612686565b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660046020612686565b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660446020612831565b6040805160e09690961b7fffffffff000000000000000000000000000000000000000000000000000000001660208701526024860194909452604485019290925260648401526084808401919091528151808403909101815260a4909201905290565b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316600c6008612831565b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660086004612831565b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660346020612686565b611c9a6121c3565b73ffffffffffffffffffffffffffffffffffffffff16611cb8610ee1565b73ffffffffffffffffffffffffffffffffffffffff1614611d3a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b6000808611611dac57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f416d6f756e74206d757374206265206e6f6e7a65726f00000000000000000000604482015290519081900360640190fd5b83611e1857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d696e7420726563697069656e74206d757374206265206e6f6e7a65726f0000604482015290519081900360640190fd5b6000611e2386612852565b90506000611e2f612306565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8084166024830152604482018c905291519293508792918316916323b872dd916064808201926020929091908290030181600087803b158015611eb357600080fd5b505af1158015611ec7573d6000803e3d6000fd5b505050506040513d6020811015611edd57600080fd5b5051611f4a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5472616e73666572206f7065726174696f6e206661696c656400000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff16639dc29fac878b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611fbb57600080fd5b505af1158015611fcf573d6000803e3d6000fd5b5050505060006121297f000000000000000000000000000000000000000000000000000000000000000073__$8c977731748aa4504deed57239565df533$__6382c947b78a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561205e57600080fd5b505af4158015612072573d6000803e3d6000fd5b505050506040513d602081101561208857600080fd5b5051604080517f82c947b700000000000000000000000000000000000000000000000000000000815233600482015290518c918f9173__$8c977731748aa4504deed57239565df533$__916382c947b7916024808301926020929190829003018186803b1580156120f857600080fd5b505af415801561210c573d6000803e3d6000fd5b505050506040513d602081101561212257600080fd5b5051611b9c565b905060006121398a8689856128d4565b604080518d8152602081018c905263ffffffff8d168183015260608101889052608081018a90529051919250339173ffffffffffffffffffffffffffffffffffffffff8b169167ffffffffffffffff8516917f2fa9ca894982930190727e75500a97d8dc500233a5065e0f3126c48fbe0343c09181900360a00190a49a9950505050505050505050565b3390565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610d448161177c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161580159061227457503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016145b905090565b6000811580159061229e575063ffffffff831660009081526004602052604090205482145b9392505050565b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826004612831565b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246020612686565b60035460009073ffffffffffffffffffffffffffffffffffffffff1661238d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4c6f63616c206d696e746572206973206e6f7420736574000000000000000000604482015290519081900360640190fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1690565b604080517fd54de06f00000000000000000000000000000000000000000000000000000000815263ffffffff861660048201526024810185905273ffffffffffffffffffffffffffffffffffffffff848116604483015260648201849052915187926000929084169163d54de06f9160848082019260209290919082900301818787803b15801561243a57600080fd5b505af115801561244e573d6000803e3d6000fd5b505050506040513d602081101561246457600080fd5b505160408051858152905191925073ffffffffffffffffffffffffffffffffffffffff80841692908716917f1b2a7ff080b8cb6ff436ce0372e399692bbfb6d4ae5766fd8d58a7b8cc6142e6919081900360200190a350505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526113f2908490612b07565b60008061255d8484612bdf565b905060405181111561256d575060005b8061259b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505061229e565b6125a6858585612c51565b95945050505050565b60006125ba82612c64565b64ffffffffff1664ffffffffff14156125d5575060006119c7565b60006125e083612c6a565b60405110199392505050565b60181c6bffffffffffffffffffffffff1690565b60008061260c86612c94565b6bffffffffffffffffffffffff16905061262586612c6a565b612639856126338489612bdf565b90612bdf565b1115612668577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050610c9c565b6126728186612bdf565b90506117728364ffffffffff168286612550565b600060ff82166126985750600061229e565b6126a1846125ec565b6bffffffffffffffffffffffff166126bc8460ff8516612bdf565b111561279b576126fd6126ce85612c94565b6bffffffffffffffffffffffff166126e5866125ec565b6bffffffffffffffffffffffff16858560ff16612ca8565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612760578181015183820152602001612748565b50505050905090810190601f16801561278d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60208260ff1611156127f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a8152602001806133eb603a913960400191505060405180910390fd5b60088202600061280786612c94565b6bffffffffffffffffffffffff169050600061282283612e03565b91909501511695945050505050565b60008160200360080260ff16612848858585612686565b901c949350505050565b63ffffffff8116600090815260046020526040812054806119c457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4e6f20546f6b656e4d657373656e67657220666f7220646f6d61696e00000000604482015290519081900360640190fd5b600082612a14576040517f0ba469bc00000000000000000000000000000000000000000000000000000000815263ffffffff8616600482019081526024820186905260606044830190815284516064840152845173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001693630ba469bc938a938a93899360840190602085019080838360005b8381101561299357818101518382015260200161297b565b50505050905090810190601f1680156129c05780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156129e157600080fd5b505af11580156129f5573d6000803e3d6000fd5b505050506040513d6020811015612a0b57600080fd5b50519050610c9c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f7259a75868686866040518563ffffffff1660e01b8152600401808563ffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612ab8578181015183820152602001612aa0565b50505050905090810190601f168015612ae55780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156129e157600080fd5b6000612b69826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612e4c9092919063ffffffff16565b8051909150156113f257808060200190516020811015612b8857600080fd5b50516113f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613425602a913960400191505060405180910390fd5b8181018281101561181157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b60d81c90565b6000612c75826125ec565b612c7e83612c94565b016bffffffffffffffffffffffff169050919050565b60781c6bffffffffffffffffffffffff1690565b60606000612cb586612e5b565b9150506000612cc386612e5b565b9150506000612cd186612e5b565b9150506000612cdf86612e5b565b91505083838383604051602001808061344f603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a82015260500160216133a682397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b6060610c9c8484600085612f2f565b600080601f5b600f8160ff161115612ec35760ff600882021684901c612e80816130e9565b61ffff16841793508160ff16601014612e9b57601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612e61565b50600f5b60ff8160ff161015612f295760ff600882021684901c612ee6816130e9565b61ffff16831792508160ff16600014612f0157601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612ec7565b50915091565b606082471015612f8a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806133806026913960400191505060405180910390fd5b612f9385613119565b612ffe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061306757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161302a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146130c9576040519150601f19603f3d011682016040523d82523d6000602084013e6130ce565b606091505b50915091506130de82828661311f565b979650505050505050565b60006130fb60048360ff16901c61319f565b60ff161760081b62ffff00166131108261319f565b60ff1617919050565b3b151590565b6060831561312e57508161229e565b82511561313e5782518084602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152845160248401528451859391928392604401919085019080838360008315612760578181015183820152602001612748565b600060f08083179060ff821614156131bb5760309150506119c7565b8060ff1660f114156131d15760319150506119c7565b8060ff1660f214156131e75760329150506119c7565b8060ff1660f314156131fd5760339150506119c7565b8060ff1660f414156132135760349150506119c7565b8060ff1660f514156132295760359150506119c7565b8060ff1660f6141561323f5760369150506119c7565b8060ff1660f714156132555760379150506119c7565b8060ff1660f8141561326b5760389150506119c7565b8060ff1660f914156132815760399150506119c7565b8060ff1660fa14156132975760619150506119c7565b8060ff1660fb14156132ad5760629150506119c7565b8060ff1660fc14156132c35760639150506119c7565b8060ff1660fd14156132d95760649150506119c7565b8060ff1660fe14156132ef5760659150506119c7565b8060ff1660ff14156133055760669150506119c7565b5091905056fe4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206e6577206f776e6572526573637561626c653a206e6577207265736375657220697320746865207a65726f206164647265737352656d6f746520546f6b656e4d657373656e67657220756e737570706f72746564416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c2e20417474656d7074656420746f20696e646578206174206f6666736574203078526573637561626c653a2063616c6c6572206973206e6f7420746865207265736375657254797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a26469706673582212206b689f34f4e15f499706461beeb293d1cec2381023fbd21a46dcbc1856ad238864736f6c63430007060033", + "sourceMap": "1055:21572:16:-:0;;;5260:318;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5260:318:16;;;;;;;1860:32:27;1879:12;:10;:12::i;:::-;1860:18;:32::i;:::-;-1:-1:-1;5360:33:16;;5339:106;;;;;-1:-1:-1;;;5339:106:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;5455:66;;;;;-1:-1:-1;5455:66:16;;;5531:40;;-1:-1:-1;5531:40:16;;;1055:21572;;598:104:13;685:10;598:104;:::o;2390:153:28:-;2479:13;2472:20;;-1:-1:-1;2472:20:28;;;2502:34;2527:8;2502:24;;;;;;;:34;;:::i;:::-;2390:153;:::o;2948:187:27:-;3021:16;3040:6;;-1:-1:-1;3056:17:27;;-1:-1:-1;3056:17:27;;;;;;;;3088:40;;3040:6;;;3056:17;;3040:6;;3088:40;;;2948:187;;:::o;1055:21572:16:-;;;;;;;;;;;;;;;;;", + "linkReferences": { + "src/messages/Message.sol": { + "Message": [ + { + "start": 2037, + "length": 20 + }, + { + "start": 2964, + "length": 20 + }, + { + "start": 5205, + "length": 20 + }, + { + "start": 8612, + "length": 20 + }, + { + "start": 8808, + "length": 20 + } + ] + } + } + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106101515760003560e01c806391f17888116100cd578063da87e44811610081578063f2fde38b11610066578063f2fde38b146104a7578063f79fd08e146104da578063f856ddb6146104fd57610151565b8063da87e44814610476578063e30c39781461049f57610151565b80639cdbb181116100b25780639cdbb1811461040a578063b2118a8d1461042b578063cb75c11c1461046e57610151565b806391f178881461036c57806396abeb701461037457610151565b80636fd3504e116101245780638197beb9116101095780638197beb9146102fc57806382a5e6651461032f5780638da5cb5b1461036457610151565b80636fd3504e1461028c57806379ba5097146102f457610151565b806329a78e33146101565780632ab60045146102205780632c1219211461025357806338a6318314610284575b600080fd5b61021e6004803603608081101561016c57600080fd5b81019060208101813564010000000081111561018757600080fd5b82018360208201111561019957600080fd5b803590602001918460018302840111640100000000831117156101bb57600080fd5b9193909290916020810190356401000000008111156101d957600080fd5b8201836020820111156101eb57600080fd5b8035906020019184600183028401116401000000008311171561020d57600080fd5b91935091508035906020013561054e565b005b61021e6004803603602081101561023657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b67565b61025b610c4a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61025b610c6e565b6102d7600480360360808110156102a257600080fd5b50803590602081013563ffffffff16906040810135906060013573ffffffffffffffffffffffffffffffffffffffff16610c8a565b6040805167ffffffffffffffff9092168252519081900360200190f35b61021e610ca4565b61021e6004803603602081101561031257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d47565b6103526004803603602081101561034557600080fd5b503563ffffffff16610ecf565b60408051918252519081900360200190f35b61025b610ee1565b61021e610efd565b6103f66004803603606081101561038a57600080fd5b63ffffffff823516916020810135918101906060810160408201356401000000008111156103b757600080fd5b8201836020820111156103c957600080fd5b803590602001918460018302840111640100000000831117156103eb57600080fd5b509092509050610ffe565b604080519115158252519081900360200190f35b61041261133d565b6040805163ffffffff9092168252519081900360200190f35b61021e6004803603606081101561044157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611361565b61025b6113f7565b61021e6004803603604081101561048c57600080fd5b5063ffffffff8135169060200135611413565b61025b61155f565b61021e600480360360208110156104bd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661157b565b61021e600480360360208110156104f057600080fd5b503563ffffffff16611613565b6102d7600480360360a081101561051357600080fd5b5080359063ffffffff6020820135169060408101359073ffffffffffffffffffffffffffffffffffffffff60608201351690608001356116f7565b6000610594600088888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117f19050565b90506105c17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216611817565b60006105ee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316611955565b905061061b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000082166119cc565b60006106487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316611b09565b905073__$8c977731748aa4504deed57239565df533$__635ced058e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561069957600080fd5b505af41580156106ad573d6000803e3d6000fd5b505050506040513d60208110156106c357600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16331461074857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c69642073656e64657220666f72206d657373616765000000000000604482015290519081900360640190fd5b836107b457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d696e7420726563697069656e74206d757374206265206e6f6e7a65726f0000604482015290519081900360640190fd5b60006107e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416611b3a565b905060006108107fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516611b6b565b905060006108417f000000000000000000000000000000000000000000000000000000000000000084898588611b9c565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b857b7748d8d8d8d868e6040518763ffffffff1660e01b81526004018080602001806020018060200185815260200184810384528a8a82818152602001925080828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101858103845288815260200190508888808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018681038452885181528851602091820193918a019250908190849084905b8381101561096757818101518382015260200161094f565b50505050905090810190601f1680156109945780820380516001836020036101000a031916815260200191505b509950505050505050505050600060405180830381600087803b1580156109ba57600080fd5b505af11580156109ce573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff1673__$8c977731748aa4504deed57239565df533$__635ced058e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a3857600080fd5b505af4158015610a4c573d6000803e3d6000fd5b505050506040513d6020811015610a6257600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16610aa57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008916611bff565b67ffffffffffffffff167f2fa9ca894982930190727e75500a97d8dc500233a5065e0f3126c48fbe0343c0858b610afd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008d16611c30565b610b287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008e16611c61565b60408051948552602085019390935263ffffffff909116838301526060830152608082018e9052519081900360a00190a4505050505050505050505050565b610b6f611c92565b73ffffffffffffffffffffffffffffffffffffffff8116610bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613335602a913960400191505060405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe475e580d85111348e40d8ca33cfdd74c30fe1655c2d8537a13abc10065ffa5a90600090a250565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025473ffffffffffffffffffffffffffffffffffffffff1690565b6000610c998585858585611d3c565b90505b949350505050565b6000610cae6121c3565b90508073ffffffffffffffffffffffffffffffffffffffff16610ccf61155f565b73ffffffffffffffffffffffffffffffffffffffff1614610d3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061330c6029913960400191505060405180910390fd5b610d44816121c7565b50565b610d4f611c92565b73ffffffffffffffffffffffffffffffffffffffff8116610dd157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff1615610e5657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4c6f63616c206d696e74657220697320616c7265616479207365742e00000000604482015290519081900360640190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517f109bb3e70cbf1931e295b49e75c67013b85ff80d64e6f1d321f37157b90c38309181900360200190a150565b60046020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b610f05611c92565b60035473ffffffffffffffffffffffffffffffffffffffff1680610f8a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f206c6f63616c206d696e746572206973207365742e000000000000000000604482015290519081900360640190fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f2db49fbf671271826a27b02ebc496209c85fffffb4bccc67430d2a0f22b4d1ac9181900360200190a150565b60006110086121f8565b61107357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e76616c6964206d657373616765207472616e736d69747465720000000000604482015290519081900360640190fd5b848461107f8282612279565b6110d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061335f6021913960400191505060405180910390fd5b600061111a600087878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506117f19050565b90506111477fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000082166119cc565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166111997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166122a5565b63ffffffff161461120b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206d65737361676520626f64792076657273696f6e00000000604482015290519081900360640190fd5b60006112387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166122d5565b905060006112677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416611b3a565b905060006112967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516611b6b565b905060006112a2612306565b905061132b818d8573__$8c977731748aa4504deed57239565df533$__635ced058e896040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156112f957600080fd5b505af415801561130d573d6000803e3d6000fd5b505050506040513d602081101561132357600080fd5b5051866123aa565b5060019b9a5050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025473ffffffffffffffffffffffffffffffffffffffff1633146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806133c76024913960400191505060405180910390fd5b6113f273ffffffffffffffffffffffffffffffffffffffff841683836124c3565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b61141b611c92565b8061148757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62797465733332283029206e6f7420616c6c6f77656400000000000000000000604482015290519081900360640190fd5b63ffffffff82166000908152600460205260409020541561150957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f546f6b656e4d657373656e67657220616c726561647920736574000000000000604482015290519081900360640190fd5b63ffffffff82166000818152600460209081526040918290208490558151928352820183905280517f4bba2b08298cf59661b4895e384cc2ac3962ce2d71f1b7c11bca52e1169f95999281900390910190a15050565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b611583611c92565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556115ce610ee1565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61161b611c92565b63ffffffff811660009081526004602052604090205461169c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f20546f6b656e4d657373656e676572207365740000000000000000000000604482015290519081900360640190fd5b63ffffffff8116600081815260046020908152604080832080549390558051938452908301829052805191927f3dcea012093dbca2bb8ed7fd2b2ff90305ab70bddda8bbb94d4152735a98f0b1929081900390910190a15050565b60008161176557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c69642064657374696e6174696f6e2063616c6c6572000000000000604482015290519081900360640190fd5b6117728686868686611d3c565b9695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000906020840161180c64ffffffffff85168284612550565b925050505b92915050565b6118427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000082166125af565b6118ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d616c666f726d6564206d657373616765000000000000000000000000000000604482015290519081900360640190fd5b60746118da7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166125ec565b6bffffffffffffffffffffffff161015610d4457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c6964206d6573736167653a20746f6f2073686f7274000000000000604482015290519081900360640190fd5b60006119c46074806119887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000086166125ec565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000861692916bffffffffffffffffffffffff9103166000612600565b90505b919050565b6119f77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000082166125af565b611a6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d616c666f726d6564206d657373616765000000000000000000000000000000604482015290519081900360640190fd5b6084611a8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166125ec565b6bffffffffffffffffffffffff1614610d4457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c6964206d657373616765206c656e67746800000000000000000000604482015290519081900360640190fd5b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660646020612686565b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660046020612686565b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660446020612831565b6040805160e09690961b7fffffffff000000000000000000000000000000000000000000000000000000001660208701526024860194909452604485019290925260648401526084808401919091528151808403909101815260a4909201905290565b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316600c6008612831565b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660086004612831565b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660346020612686565b611c9a6121c3565b73ffffffffffffffffffffffffffffffffffffffff16611cb8610ee1565b73ffffffffffffffffffffffffffffffffffffffff1614611d3a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b6000808611611dac57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f416d6f756e74206d757374206265206e6f6e7a65726f00000000000000000000604482015290519081900360640190fd5b83611e1857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d696e7420726563697069656e74206d757374206265206e6f6e7a65726f0000604482015290519081900360640190fd5b6000611e2386612852565b90506000611e2f612306565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8084166024830152604482018c905291519293508792918316916323b872dd916064808201926020929091908290030181600087803b158015611eb357600080fd5b505af1158015611ec7573d6000803e3d6000fd5b505050506040513d6020811015611edd57600080fd5b5051611f4a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5472616e73666572206f7065726174696f6e206661696c656400000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff16639dc29fac878b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611fbb57600080fd5b505af1158015611fcf573d6000803e3d6000fd5b5050505060006121297f000000000000000000000000000000000000000000000000000000000000000073__$8c977731748aa4504deed57239565df533$__6382c947b78a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561205e57600080fd5b505af4158015612072573d6000803e3d6000fd5b505050506040513d602081101561208857600080fd5b5051604080517f82c947b700000000000000000000000000000000000000000000000000000000815233600482015290518c918f9173__$8c977731748aa4504deed57239565df533$__916382c947b7916024808301926020929190829003018186803b1580156120f857600080fd5b505af415801561210c573d6000803e3d6000fd5b505050506040513d602081101561212257600080fd5b5051611b9c565b905060006121398a8689856128d4565b604080518d8152602081018c905263ffffffff8d168183015260608101889052608081018a90529051919250339173ffffffffffffffffffffffffffffffffffffffff8b169167ffffffffffffffff8516917f2fa9ca894982930190727e75500a97d8dc500233a5065e0f3126c48fbe0343c09181900360a00190a49a9950505050505050505050565b3390565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610d448161177c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161580159061227457503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016145b905090565b6000811580159061229e575063ffffffff831660009081526004602052604090205482145b9392505050565b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826004612831565b60006119c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246020612686565b60035460009073ffffffffffffffffffffffffffffffffffffffff1661238d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4c6f63616c206d696e746572206973206e6f7420736574000000000000000000604482015290519081900360640190fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1690565b604080517fd54de06f00000000000000000000000000000000000000000000000000000000815263ffffffff861660048201526024810185905273ffffffffffffffffffffffffffffffffffffffff848116604483015260648201849052915187926000929084169163d54de06f9160848082019260209290919082900301818787803b15801561243a57600080fd5b505af115801561244e573d6000803e3d6000fd5b505050506040513d602081101561246457600080fd5b505160408051858152905191925073ffffffffffffffffffffffffffffffffffffffff80841692908716917f1b2a7ff080b8cb6ff436ce0372e399692bbfb6d4ae5766fd8d58a7b8cc6142e6919081900360200190a350505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526113f2908490612b07565b60008061255d8484612bdf565b905060405181111561256d575060005b8061259b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505061229e565b6125a6858585612c51565b95945050505050565b60006125ba82612c64565b64ffffffffff1664ffffffffff14156125d5575060006119c7565b60006125e083612c6a565b60405110199392505050565b60181c6bffffffffffffffffffffffff1690565b60008061260c86612c94565b6bffffffffffffffffffffffff16905061262586612c6a565b612639856126338489612bdf565b90612bdf565b1115612668577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050610c9c565b6126728186612bdf565b90506117728364ffffffffff168286612550565b600060ff82166126985750600061229e565b6126a1846125ec565b6bffffffffffffffffffffffff166126bc8460ff8516612bdf565b111561279b576126fd6126ce85612c94565b6bffffffffffffffffffffffff166126e5866125ec565b6bffffffffffffffffffffffff16858560ff16612ca8565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612760578181015183820152602001612748565b50505050905090810190601f16801561278d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60208260ff1611156127f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a8152602001806133eb603a913960400191505060405180910390fd5b60088202600061280786612c94565b6bffffffffffffffffffffffff169050600061282283612e03565b91909501511695945050505050565b60008160200360080260ff16612848858585612686565b901c949350505050565b63ffffffff8116600090815260046020526040812054806119c457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4e6f20546f6b656e4d657373656e67657220666f7220646f6d61696e00000000604482015290519081900360640190fd5b600082612a14576040517f0ba469bc00000000000000000000000000000000000000000000000000000000815263ffffffff8616600482019081526024820186905260606044830190815284516064840152845173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001693630ba469bc938a938a93899360840190602085019080838360005b8381101561299357818101518382015260200161297b565b50505050905090810190601f1680156129c05780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156129e157600080fd5b505af11580156129f5573d6000803e3d6000fd5b505050506040513d6020811015612a0b57600080fd5b50519050610c9c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f7259a75868686866040518563ffffffff1660e01b8152600401808563ffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612ab8578181015183820152602001612aa0565b50505050905090810190601f168015612ae55780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156129e157600080fd5b6000612b69826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612e4c9092919063ffffffff16565b8051909150156113f257808060200190516020811015612b8857600080fd5b50516113f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613425602a913960400191505060405180910390fd5b8181018281101561181157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b60d81c90565b6000612c75826125ec565b612c7e83612c94565b016bffffffffffffffffffffffff169050919050565b60781c6bffffffffffffffffffffffff1690565b60606000612cb586612e5b565b9150506000612cc386612e5b565b9150506000612cd186612e5b565b9150506000612cdf86612e5b565b91505083838383604051602001808061344f603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a82015260500160216133a682397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b6060610c9c8484600085612f2f565b600080601f5b600f8160ff161115612ec35760ff600882021684901c612e80816130e9565b61ffff16841793508160ff16601014612e9b57601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612e61565b50600f5b60ff8160ff161015612f295760ff600882021684901c612ee6816130e9565b61ffff16831792508160ff16600014612f0157601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612ec7565b50915091565b606082471015612f8a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806133806026913960400191505060405180910390fd5b612f9385613119565b612ffe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061306757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161302a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146130c9576040519150601f19603f3d011682016040523d82523d6000602084013e6130ce565b606091505b50915091506130de82828661311f565b979650505050505050565b60006130fb60048360ff16901c61319f565b60ff161760081b62ffff00166131108261319f565b60ff1617919050565b3b151590565b6060831561312e57508161229e565b82511561313e5782518084602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152845160248401528451859391928392604401919085019080838360008315612760578181015183820152602001612748565b600060f08083179060ff821614156131bb5760309150506119c7565b8060ff1660f114156131d15760319150506119c7565b8060ff1660f214156131e75760329150506119c7565b8060ff1660f314156131fd5760339150506119c7565b8060ff1660f414156132135760349150506119c7565b8060ff1660f514156132295760359150506119c7565b8060ff1660f6141561323f5760369150506119c7565b8060ff1660f714156132555760379150506119c7565b8060ff1660f8141561326b5760389150506119c7565b8060ff1660f914156132815760399150506119c7565b8060ff1660fa14156132975760619150506119c7565b8060ff1660fb14156132ad5760629150506119c7565b8060ff1660fc14156132c35760639150506119c7565b8060ff1660fd14156132d95760649150506119c7565b8060ff1660fe14156132ef5760659150506119c7565b8060ff1660ff14156133055760669150506119c7565b5091905056fe4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206e6577206f776e6572526573637561626c653a206e6577207265736375657220697320746865207a65726f206164647265737352656d6f746520546f6b656e4d657373656e67657220756e737570706f72746564416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c2e20417474656d7074656420746f20696e646578206174206f6666736574203078526573637561626c653a2063616c6c6572206973206e6f7420746865207265736375657254797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a26469706673582212206b689f34f4e15f499706461beeb293d1cec2381023fbd21a46dcbc1856ad238864736f6c63430007060033", + "sourceMap": "1055:21572:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10407:1678;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10407:1678:16;-1:-1:-1;10407:1678:16;;;;;;;:::i;:::-;;2214:264:30;;;;;;;;;;;;;;;;-1:-1:-1;2214:264:30;;;;:::i;3845:60:16:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1384:83:30;;;:::i;6482:570:16:-;;;;;;;;;;;;;;;;-1:-1:-1;6482:570:16;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2623:240:28;;;:::i;15254:370:16:-;;;;;;;;;;;;;;;;-1:-1:-1;15254:370:16;;;;:::i;4161:55::-;;;;;;;;;;;;;;;;-1:-1:-1;4161:55:16;;;;:::i;:::-;;;;;;;;;;;;;;;;2125:85:27;;;:::i;15767:277:16:-;;;:::i;12738:926::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12738:926:16;;-1:-1:-1;12738:926:16;-1:-1:-1;12738:926:16;:::i;:::-;;;;;;;;;;;;;;;;;;3950:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1909:177:30;;;;;;;;;;;;;;;;-1:-1:-1;1909:177:30;;;;;;;;;;;;;;;;;;:::i;4076:31:16:-;;;:::i;13946:439::-;;;;;;;;;;;;;;;;-1:-1:-1;13946:439:16;;;;;;;;;:::i;1700:99:28:-;;;:::i;1992:214::-;;;;;;;;;;;;;;;;-1:-1:-1;1992:214:28;;;;:::i;14590:449:16:-;;;;;;;;;;;;;;;;-1:-1:-1;14590:449:16;;;;:::i;8444:623::-;;;;;;;;;;;;;;;;-1:-1:-1;8444:623:16;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10407:1678::-;10619:20;10642:22;10662:1;10642:15;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10642:19:16;;:22;-1:-1:-1;;10642:19:16;:22;-1:-1:-1;10642:22:16:i;:::-;10619:45;-1:-1:-1;10674:37:16;:35;;;;:37::i;:::-;10721:24;10748:27;:25;;;;:27::i;:::-;10721:54;-1:-1:-1;10785:45:16;:43;;;;:45::i;:::-;10841:26;10870:36;:34;;;;:36::i;:::-;10841:65;;11023:7;:24;11048:18;11023:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11023:44:16;11009:58;;:10;:58;10988:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11150:30;11129:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11247:18;11268:32;:30;;;;:32::i;:::-;11247:53;-1:-1:-1;11310:15:16;11328:29;:27;;;;:29::i;:::-;11310:47;;11368:28;11399:175;11439:18;11471:10;11495:16;11525:7;11546:18;11399:26;:175::i;:::-;11368:206;;11585:23;:38;;;11637:15;;11666:19;;11699:15;11728:20;11585:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11585:173:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11585:173:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11908:10;11774:304;;11837:7;:24;11862:10;11837:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11837:36:16;11774:304;;11802:21;:19;;;;:21::i;:::-;11774:304;;;11887:7;11932:16;11962:33;:31;;;;:33::i;:::-;12009:25;:23;;;;:25::i;:::-;11774:304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10407:1678;;;;;;;;;;;;:::o;2214:264:30:-;2018:13:27;:11;:13::i;:::-;2307:24:30::1;::::0;::::1;2286:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2409:8;:21:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;2445:26:::1;::::0;::::1;::::0;-1:-1:-1;;2445:26:30::1;2214:264:::0;:::o;3845:60:16:-;;;:::o;1384:83:30:-;1452:8;;;;1384:83;:::o;6482:570:16:-;6646:13;6690:355;6723:6;6747:17;6782:13;6813:9;6646:13;6690:15;:355::i;:::-;6671:374;;6482:570;;;;;;;:::o;2623:240:28:-;2669:14;2686:12;:10;:12::i;:::-;2669:29;;2747:6;2729:24;;:14;:12;:14::i;:::-;:24;;;2708:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2830:26;2849:6;2830:18;:26::i;:::-;2623:240;:::o;15254:370:16:-;2018:13:27;:11;:13::i;:::-;15339:28:16::1;::::0;::::1;15331:65;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15436:11;::::0;15428:34:::1;15436:11;15428:34:::0;15407:109:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15527:11;:42:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;15585:32:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;15254:370:::0;:::o;4161:55::-;;;;;;;;;;;;;:::o;2125:85:27:-;2171:7;2197:6;;;2125:85;:::o;15767:277:16:-;2018:13:27;:11;:13::i;:::-;15863:11:16::1;::::0;::::1;;15893:33:::0;15885:69:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15972:11;15965:18:::0;;;::::1;::::0;;15998:39:::1;::::0;;15965:18:::1;15998:39:::0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;2041:1:27;15767:277:16:o:0;12738:926::-;13005:4;4998:28;:26;:28::i;:::-;4990:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12966:12:::1;12980:6;4626:47;4650:6;4658:14;4626:23;:47::i;:::-;4605:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13025:12:::2;13040:18;13056:1;13040:11;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;13040:15:16;;:18;-1:-1:-1;;13040:15:16::2;:18:::0;-1:-1:-1;13040:18:16:i:2;:::-;13025:33:::0;-1:-1:-1;13068:33:16::2;:31:::0;;::::2;;:33::i;:::-;13132:40;13154:18;13132:40;:18;:16:::0;;::::2;;:18::i;:::-;:40;;;13111:115;;;::::0;;::::2;::::0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;13237:22;13262:24;:22:::0;;::::2;;:24::i;:::-;13237:49:::0;-1:-1:-1;13296:18:16::2;13317:20;:18:::0;;::::2;;:20::i;:::-;13296:41:::0;-1:-1:-1;13347:15:16::2;13365:17;:15:::0;;::::2;;:17::i;:::-;13347:35;;13393:25;13421:17;:15;:17::i;:::-;13393:45;;13449:186;13487:12;13514;13540:10;13564:7;:24;13589:14;13564:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;13564:40:16;13618:7;13449:16:::2;:186::i;:::-;-1:-1:-1::0;13653:4:16::2;::::0;12738:926;-1:-1:-1;;;;;;;;;;;12738:926:16:o;3950:42::-;;;:::o;1909:177:30:-;1615:8;;;;1601:10;:22;1593:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2041:38:::1;:26;::::0;::::1;2068:2:::0;2072:6;2041:26:::1;:38::i;:::-;1909:177:::0;;;:::o;4076:31:16:-;;;;;;:::o;13946:439::-;2018:13:27;:11;:13::i;:::-;14075:28:16;14067:63:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14162:29;::::0;::::1;14203:1;14162:29:::0;;;:21:::1;:29;::::0;;;;;:43;14141:116:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14268:29;::::0;::::1;;::::0;;;:21:::1;:29;::::0;;;;;;;;:46;;;14329:49;;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;13946:439:::0;;:::o;1700:99:28:-;1779:13;;;;1700:99;:::o;1992:214::-;2018:13:27;:11;:13::i;:::-;2117::28::1;:24:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;2181:7:::1;:5;:7::i;:::-;2156:43;;;;;;;;;;;;1992:214:::0;:::o;14590:449:16:-;2018:13:27;:11;:13::i;:::-;14749:29:16::1;::::0;::::1;14790:1;14749:29:::0;;;:21:::1;:29;::::0;;;;;14728:111:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14883:29;::::0;::::1;14850:30;14883:29:::0;;;:21:::1;:29;::::0;;;;;;;;;14922:36;;;14973:59;;;;;;;::::1;::::0;;;;;14883:29;;14973:59:::1;::::0;;;;;;;;;::::1;2041:1:27;14590:449:16::0;:::o;8444:623::-;8653:12;8787:31;8779:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8879:181;8912:6;8936:17;8971:13;9002:9;9029:17;8879:15;:181::i;:::-;8860:200;8444:623;-1:-1:-1;;;;;;8444:623:16:o;2948:187:27:-;3021:16;3040:6;;;3056:17;;;;;;;;;;3088:40;;3040:6;;;;;;;3088:40;;3021:16;3088:40;2948:187;;:::o;13237:368:7:-;13341:10;;13307:7;;13496:4;13487:14;;13572:26;;;;13487:14;13341:10;13572:5;:26::i;:::-;13565:33;;;;13237:368;;;;;:::o;5997:248:25:-;6079:18;:16;;;;:18::i;:::-;6071:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2090:3;6150:14;:12;;;;:14::i;:::-;:36;;;;6129:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4865:244;4928:7;4966:136;2090:3;;5034:14;:12;;;;:14::i;:::-;4966;;;;:136;;5034:35;;4966:136;5087:1;4966:14;:136::i;:::-;4947:155;;4865:244;;;;:::o;4368:212:24:-;4454:18;:16;;;;:18::i;:::-;4446:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1865:3;4512:14;:12;;;;:14::i;:::-;:34;;;4504:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2837:177;2929:7;2959:48;:14;;;1655:3;1704:2;2959:14;:48::i;3190:145::-;3254:7;3280:48;:14;;;1362:1;1409:2;3280:14;:48::i;3802:138::-;3863:7;3889:44;:18;;;1561:2;1605;3889:18;:44::i;2243:418::-;2481:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2243:418::o;4077:131:25:-;4134:6;4166:34;:18;;;1885:2;4198:1;4166:18;:34::i;3841:184::-;3934:6;3970:47;:18;;;1841:1;4015;3970:18;:47::i;4440:129::-;4501:7;4527:35;:14;;;1980:2;4559;4527:14;:35::i;2283:130:27:-;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2283:130::o;16656:1653:16:-;16861:12;16903:1;16893:7;:11;16885:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16949:28;16941:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17023:34;17060:66;17098:18;17060:24;:66::i;:::-;17023:103;;17137:25;17165:17;:15;:17::i;:::-;17281:133;;;;;;17326:10;17281:133;;;;:27;:133;;;;;;;;;;;;;;;17137:45;;-1:-1:-1;17239:10:16;;17281:27;;;;;;:133;;;;;;;;;;;;;;;17192:29;17281:27;:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17281:133:16;17260:205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17475:12;:17;;;17493:10;17505:7;17475:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17555:25;17583:217;17623:18;17655:7;:24;17680:10;17655:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17655:36:16;17754;;;;;;17779:10;17754:36;;;;;;17705:14;;17733:7;;17754;;:24;;:36;;;;;17655;;17754;;;;;;;:7;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17754:36:16;17583:26;:217::i;:::-;17555:245;;17811:21;17835:166;17875:18;17907:26;17947:18;17979:12;17835:26;:166::i;:::-;18017:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17811:190;;-1:-1:-1;18118:10:16;;18017:253;;;;;;;;;;;;;;;;;18288:14;16656:1653;-1:-1:-1;;;;;;;;;;16656:1653:16:o;598:104:13:-;685:10;598:104;:::o;2390:153:28:-;2479:13;2472:20;;;;;;2502:34;2527:8;2502:24;:34::i;22414:211:16:-;22475:4;22518:23;22510:46;;;;;;:108;;-1:-1:-1;22572:10:16;:46;22594:23;22572:46;;22510:108;22491:127;;22414:211;:::o;21956:261::-;22077:4;22116:29;;;;;:94;;-1:-1:-1;22161:30:16;;;;;;;:21;:30;;;;;;:49;;22116:94;22097:113;21956:261;-1:-1:-1;;;21956:261:16:o;4077:148:24:-;4139:6;4171:46;:18;;;4139:6;1313:1;4171:18;:46::i;3483:185::-;3575:7;3605:56;:14;;;1463:2;1515;3605:14;:56::i;21370:179:16:-;21460:11;;21420:12;;21452:34;21460:11;21444:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21531:11:16;;;;21370:179;:::o;20174:473::-;20450:122;;;;;;;;;;;;;;;;;;;:12;:122;;;;;;;;;;;;;;;20406:12;;20370:20;;20450:12;;;;;;:122;;;;;;;;;;;;;;;20370:20;20450:12;:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20450:122:16;20588:52;;;;;;;;20450:122;;-1:-1:-1;20588:52:16;;;;;;;;;;;;;;;20450:122;20588:52;;;20174:473;;;;;;;:::o;704:175:11:-;813:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;836:23;813:58;;;786:86;;806:5;;786:19;:86::i;12397:443:7:-;12478:15;;12520:14;:4;12529;12520:8;:14::i;:::-;12505:29;;12657:4;12651:11;12645:4;12642:21;12639:2;;;-1:-1:-1;12690:1:7;12639:2;12728:9;12724:51;;12760:4;12753:11;;;;;12724:51;12794:39;12815:5;12822:4;12828;12794:20;:39::i;:::-;12784:49;12397:443;-1:-1:-1;;;;;12397:443:7:o;8272:319::-;8329:8;8353:15;8360:7;8353:6;:15::i;:::-;:31;;8372:12;8353:31;8349:52;;;-1:-1:-1;8394:5:7;8387:12;;8349:52;8410:12;8425;8429:7;8425:3;:12::i;:::-;8568:4;8562:11;-1:-1:-1;8549:26:7;;8456:129;-1:-1:-1;;;8456:129:7:o;15855:291::-;16110:2;16106:16;2800:26;16102:28;;16008:132::o;16713:370::-;16814:7;16833:12;16848;16852:7;16848:3;:12::i;:::-;16833:27;;;;16950:12;16954:7;16950:3;:12::i;:::-;16921:26;16942:4;16921:16;:4;16930:6;16921:8;:16::i;:::-;:20;;:26::i;:::-;:41;16917:83;;;16985:4;16978:11;;;;;16917:83;17017:16;:4;17026:6;17017:8;:16::i;:::-;17010:23;;17050:26;17056:7;17050:26;;17065:4;17071;17050:5;:26::i;19502:677::-;19587:14;19617:11;;;19613:37;;-1:-1:-1;19646:1:7;19631:17;;19613:37;19684:12;19688:7;19684:3;:12::i;:::-;19663:33;;:18;:6;:18;;;:10;:18::i;:::-;:33;19659:140;;;19719:68;19735:12;19739:7;19735:3;:12::i;:::-;19719:68;;19749:12;19753:7;19749:3;:12::i;:::-;19719:68;;19763:6;19779;19771:15;;19719;:68::i;:::-;19712:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19659:140;19826:2;19816:6;:12;;;;19808:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19929:1;19920:10;;19902:15;19955:12;19959:7;19955:3;:12::i;:::-;19940:27;;;;19977:13;19993:19;20002:9;19993:8;:19::i;:::-;20137:17;;;;20131:24;20127:36;;;-1:-1:-1;;;;;20031:142:7:o;20525:191::-;20614:14;20697:6;20692:2;:11;20707:1;20691:17;20647:62;;20655:30;20661:7;20670:6;20678;20655:5;:30::i;:::-;20647:62;;;20525:191;-1:-1:-1;;;;20525:191:7:o;20934:295:16:-;21080:30;;;21031:7;21080:30;;;:21;:30;;;;;;21128:29;21120:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19041:780;19251:12;19279:32;19275:540;;19350:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:35;:23;:35;;;;19407:18;;19447:26;;19495:12;;19350:175;;;;;;;;;;-1:-1:-1;19350:175:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19350:175:16;;-1:-1:-1;19327:198:16;;19275:540;19579:23;:45;;;19646:18;19686:26;19734:18;19774:12;19579:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2967:751:11;3386:23;3412:69;3440:4;3412:69;;;;;;;;;;;;;;;;;3420:5;3412:27;;;;:69;;;;;:::i;:::-;3495:17;;3386:95;;-1:-1:-1;3495:21:11;3491:221;;3635:10;3624:30;;;;;;;;;;;;;;;-1:-1:-1;3624:30:11;3616:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2553:172:6;2638:7;;;2663;;;;2655:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11432:426:7;11664:2;11660:27;;;11734:17;;;;11726:26;;;11799:17;11795:2;11791:26;;11563:289::o;13797:276::-;14016:3;14012:17;;13886:181::o;16320:113::-;16373:7;16414:12;16418:7;16414:3;:12::i;:::-;16399;16403:7;16399:3;:12::i;:::-;:27;16392:34;;;;16320:113;;;:::o;14658:373::-;14994:3;14990:17;2800:26;14986:29;;14811:214::o;18259:741::-;18405:17;18437:9;18450:15;18460:4;18450:9;:15::i;:::-;18434:31;;;18478:9;18491:15;18501:4;18491:9;:15::i;:::-;18475:31;;;18519:9;18532:17;18542:6;18532:9;:17::i;:::-;18516:33;;;18562:9;18575:17;18585:6;18575:9;:17::i;:::-;18559:33;;;18742:1;18804;18884;18946;18628:355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18628:355:7;;;;;;;;;;;;;;;;;;;;;;18259:741;-1:-1:-1;;;;;;;;;;;18259:741:7:o;6845:366::-;7115:66;7085:12;;;;7064:131;;6970:235::o;3581:193:12:-;3684:12;3715:52;3737:6;3745:4;3751:1;3754:12;3715:21;:52::i;4809:556:7:-;4863:13;;4919:2;4904:202;4927:2;4923:1;:6;;;4904:202;;;4973:13;4984:1;4980:5;;4973:13;;;;5010:14;4973:13;5010:7;:14::i;:::-;5001:23;;;;;;5042:1;:7;;5047:2;5042:7;5038:58;;5079:2;5069:12;;;;;5038:58;-1:-1:-1;4931:6:7;;4904:202;;;-1:-1:-1;5169:2:7;5154:205;5177:3;5173:1;:7;;;5154:205;;;5225:13;5236:1;5232:5;;5225:13;;;;5263:14;5225:13;5263:7;:14::i;:::-;5253:24;;;;;;5295:1;:6;;5300:1;5295:6;5291:58;;5332:2;5321:13;;;;;5291:58;-1:-1:-1;5183:6:7;;5154:205;;;;4809:556;;;:::o;4608:523:12:-;4735:12;4792:5;4767:21;:30;;4759:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:18;4869:6;4858:10;:18::i;:::-;4850:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4981:12;4995:23;5022:6;:11;;5042:5;5050:4;5022:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4980:75;;;;5072:52;5090:7;5099:10;5111:12;5072:17;:52::i;:::-;5065:59;4608:523;-1:-1:-1;;;;;;;4608:523:12:o;4286:199:7:-;4336:14;4373:18;4389:1;4383:2;:7;;;;4373:9;:18::i;:::-;4362:29;;;4427:1;4415:13;;;4449;4459:2;4449:9;:13::i;:::-;4438:24;;;;4286:199;-1:-1:-1;4286:199:7:o;726:413:12:-;1086:20;1124:8;;;726:413::o;7091:725::-;7206:12;7234:7;7230:580;;;-1:-1:-1;7264:10:12;7257:17;;7230:580;7375:17;;:21;7371:429;;7633:10;7627:17;7693:15;7680:10;7676:2;7672:19;7665:44;7582:145;7765:20;;;;;;;;;;;;;;;;;;;;7772:12;;7765:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3073:1041:7;3125:10;3291:4;3286:9;;;;3337:15;;;;3333:35;;;3362:4;3355:11;;;;;3333:35;3386:7;:15;;3397:4;3386:15;3382:35;;;3411:4;3404:11;;;;;3382:35;3435:7;:15;;3446:4;3435:15;3431:35;;;3460:4;3453:11;;;;;3431:35;3484:7;:15;;3495:4;3484:15;3480:35;;;3509:4;3502:11;;;;;3480:35;3533:7;:15;;3544:4;3533:15;3529:35;;;3558:4;3551:11;;;;;3529:35;3582:7;:15;;3593:4;3582:15;3578:35;;;3607:4;3600:11;;;;;3578:35;3631:7;:15;;3642:4;3631:15;3627:35;;;3656:4;3649:11;;;;;3627:35;3680:7;:15;;3691:4;3680:15;3676:35;;;3705:4;3698:11;;;;;3676:35;3729:7;:15;;3740:4;3729:15;3725:35;;;3754:4;3747:11;;;;;3725:35;3778:7;:15;;3789:4;3778:15;3774:35;;;3803:4;3796:11;;;;;3774:35;3827:7;:15;;3838:4;3827:15;3823:35;;;3852:4;3845:11;;;;;3823:35;3876:7;:15;;3887:4;3876:15;3872:35;;;3901:4;3894:11;;;;;3872:35;3925:7;:15;;3936:4;3925:15;3921:35;;;3950:4;3943:11;;;;;3921:35;3974:7;:15;;3985:4;3974:15;3970:35;;;3999:4;3992:11;;;;;3970:35;4023:7;:15;;4034:4;4023:15;4019:35;;;4048:4;4041:11;;;;;4019:35;4072:7;:15;;4083:4;4072:15;4068:35;;;4097:4;4090:11;;;;;4068:35;3073:1041;;;;:::o", + "linkReferences": { + "src/messages/Message.sol": { + "Message": [ + { + "start": 1612, + "length": 20 + }, + { + "start": 2539, + "length": 20 + }, + { + "start": 4780, + "length": 20 + }, + { + "start": 8187, + "length": 20 + }, + { + "start": 8383, + "length": 20 + } + ] + } + }, + "immutableReferences": { + "18532": [ + { + "start": 2117, + "length": 32 + }, + { + "start": 3148, + "length": 32 + }, + { + "start": 8700, + "length": 32 + }, + { + "start": 8786, + "length": 32 + }, + { + "start": 10559, + "length": 32 + }, + { + "start": 10774, + "length": 32 + } + ], + "18534": [ + { + "start": 2073, + "length": 32 + }, + { + "start": 4430, + "length": 32 + }, + { + "start": 4927, + "length": 32 + }, + { + "start": 8154, + "length": 32 + } + ] + } + }, + "methodIdentifiers": { + "acceptOwnership()": "79ba5097", + "addLocalMinter(address)": "8197beb9", + "addRemoteTokenMessenger(uint32,bytes32)": "da87e448", + "depositForBurn(uint256,uint32,bytes32,address)": "6fd3504e", + "depositForBurnWithCaller(uint256,uint32,bytes32,address,bytes32)": "f856ddb6", + "handleReceiveMessage(uint32,bytes32,bytes)": "96abeb70", + "localMessageTransmitter()": "2c121921", + "localMinter()": "cb75c11c", + "messageBodyVersion()": "9cdbb181", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "remoteTokenMessengers(uint32)": "82a5e665", + "removeLocalMinter()": "91f17888", + "removeRemoteTokenMessenger(uint32)": "f79fd08e", + "replaceDepositForBurn(bytes,bytes,bytes32,bytes32)": "29a78e33", + "rescueERC20(address,address,uint256)": "b2118a8d", + "rescuer()": "38a63183", + "transferOwnership(address)": "f2fde38b", + "updateRescuer(address)": "2ab60045" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messageTransmitter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_messageBodyVersion\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"burnToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"depositor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"mintRecipient\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"destinationTokenMessenger\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"destinationCaller\",\"type\":\"bytes32\"}],\"name\":\"DepositForBurn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"localMinter\",\"type\":\"address\"}],\"name\":\"LocalMinterAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"localMinter\",\"type\":\"address\"}],\"name\":\"LocalMinterRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"mintRecipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"mintToken\",\"type\":\"address\"}],\"name\":\"MintAndWithdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"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\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"tokenMessenger\",\"type\":\"bytes32\"}],\"name\":\"RemoteTokenMessengerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"tokenMessenger\",\"type\":\"bytes32\"}],\"name\":\"RemoteTokenMessengerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRescuer\",\"type\":\"address\"}],\"name\":\"RescuerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newLocalMinter\",\"type\":\"address\"}],\"name\":\"addLocalMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"tokenMessenger\",\"type\":\"bytes32\"}],\"name\":\"addRemoteTokenMessenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"mintRecipient\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"burnToken\",\"type\":\"address\"}],\"name\":\"depositForBurn\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"mintRecipient\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"burnToken\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationCaller\",\"type\":\"bytes32\"}],\"name\":\"depositForBurnWithCaller\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"remoteDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"messageBody\",\"type\":\"bytes\"}],\"name\":\"handleReceiveMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localMessageTransmitter\",\"outputs\":[{\"internalType\":\"contract IMessageTransmitter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localMinter\",\"outputs\":[{\"internalType\":\"contract ITokenMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBodyVersion\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"remoteTokenMessengers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeLocalMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"}],\"name\":\"removeRemoteTokenMessenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"originalMessage\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"originalAttestation\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"newDestinationCaller\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"newMintRecipient\",\"type\":\"bytes32\"}],\"name\":\"replaceDepositForBurn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rescuer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRescuer\",\"type\":\"address\"}],\"name\":\"updateRescuer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DepositForBurn(uint64,address,uint256,address,bytes32,uint32,bytes32,bytes32)\":{\"params\":{\"amount\":\"deposit amount\",\"burnToken\":\"address of token burnt on source domain\",\"depositor\":\"address where deposit is transferred from\",\"destinationCaller\":\"authorized caller as bytes32 of receiveMessage() on destination domain, if not equal to bytes32(0). If equal to bytes32(0), any address can call receiveMessage().\",\"destinationDomain\":\"destination domain\",\"destinationTokenMessenger\":\"address of TokenMessenger on destination domain as bytes32\",\"mintRecipient\":\"address receiving minted tokens on destination domain as bytes32\",\"nonce\":\"unique nonce reserved by message\"}},\"LocalMinterAdded(address)\":{\"params\":{\"localMinter\":\"address of local minter\"}},\"LocalMinterRemoved(address)\":{\"params\":{\"localMinter\":\"address of local minter\"}},\"MintAndWithdraw(address,uint256,address)\":{\"params\":{\"amount\":\"amount of minted tokens\",\"mintRecipient\":\"recipient address of minted tokens\",\"mintToken\":\"contract address of minted token\"}},\"RemoteTokenMessengerAdded(uint32,bytes32)\":{\"params\":{\"domain\":\"remote domain\",\"tokenMessenger\":\"TokenMessenger on remote domain\"}},\"RemoteTokenMessengerRemoved(uint32,bytes32)\":{\"params\":{\"domain\":\"remote domain\",\"tokenMessenger\":\"TokenMessenger on remote domain\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addLocalMinter(address)\":{\"details\":\"Reverts if a minter is already set for the local domain.\",\"params\":{\"newLocalMinter\":\"The address of the minter on the local domain.\"}},\"addRemoteTokenMessenger(uint32,bytes32)\":{\"details\":\"Reverts if there is already a TokenMessenger set for domain.\",\"params\":{\"domain\":\"Domain of remote TokenMessenger.\",\"tokenMessenger\":\"Address of remote TokenMessenger as bytes32.\"}},\"constructor\":{\"params\":{\"_messageBodyVersion\":\"Message body version\",\"_messageTransmitter\":\"Message transmitter address\"}},\"depositForBurn(uint256,uint32,bytes32,address)\":{\"details\":\"reverts if: - given burnToken is not supported - given destinationDomain has no TokenMessenger registered - transferFrom() reverts. For example, if sender's burnToken balance or approved allowance to this contract is less than `amount`. - burn() reverts. For example, if `amount` is 0. - MessageTransmitter returns false or reverts.\",\"params\":{\"amount\":\"amount of tokens to burn\",\"burnToken\":\"address of contract to burn deposited tokens, on local domain\",\"destinationDomain\":\"destination domain\",\"mintRecipient\":\"address of mint recipient on destination domain\"},\"returns\":{\"_nonce\":\"unique nonce reserved by message\"}},\"depositForBurnWithCaller(uint256,uint32,bytes32,address,bytes32)\":{\"details\":\"reverts if: - given destinationCaller is zero address - given burnToken is not supported - given destinationDomain has no TokenMessenger registered - transferFrom() reverts. For example, if sender's burnToken balance or approved allowance to this contract is less than `amount`. - burn() reverts. For example, if `amount` is 0. - MessageTransmitter returns false or reverts.\",\"params\":{\"amount\":\"amount of tokens to burn\",\"burnToken\":\"address of contract to burn deposited tokens, on local domain\",\"destinationCaller\":\"caller on the destination domain, as bytes32\",\"destinationDomain\":\"destination domain\",\"mintRecipient\":\"address of mint recipient on destination domain\"},\"returns\":{\"nonce\":\"unique nonce reserved by message\"}},\"handleReceiveMessage(uint32,bytes32,bytes)\":{\"details\":\"Validates the local sender is the local MessageTransmitter, and the remote sender is a registered remote TokenMessenger for `remoteDomain`.\",\"params\":{\"messageBody\":\"The message body bytes.\",\"remoteDomain\":\"The domain where the message originated from.\",\"sender\":\"The sender of the message (remote TokenMessenger).\"},\"returns\":{\"_0\":\"success Bool, true if successful.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removeLocalMinter()\":{\"details\":\"Reverts if the minter of the local domain is not set.\"},\"removeRemoteTokenMessenger(uint32)\":{\"details\":\"Reverts if there is no TokenMessenger set for `domain`.\",\"params\":{\"domain\":\"Domain of remote TokenMessenger\"}},\"replaceDepositForBurn(bytes,bytes,bytes32,bytes32)\":{\"details\":\"The new message will reuse the original message's nonce. For a given nonce, all replacement message(s) and the original message are valid to broadcast on the destination domain, until the first message at the nonce confirms, at which point all others are invalidated. Note: The msg.sender of the replaced message must be the same as the msg.sender of the original message.\",\"params\":{\"newDestinationCaller\":\"the new destination caller, which may be the same as the original destination caller, a new destination caller, or an empty destination caller (bytes32(0), indicating that any destination caller is valid.)\",\"newMintRecipient\":\"the new mint recipient, which may be the same as the original mint recipient, or different.\",\"originalAttestation\":\"original attestation bytes\",\"originalMessage\":\"original message bytes (to replace)\"}},\"rescueERC20(address,address,uint256)\":{\"params\":{\"amount\":\"Amount to withdraw\",\"to\":\"Recipient address\",\"tokenContract\":\"ERC20 token contract address\"}},\"rescuer()\":{\"returns\":{\"_0\":\"Rescuer's address\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"},\"updateRescuer(address)\":{\"params\":{\"newRescuer\":\"New rescuer's address\"}}},\"title\":\"TokenMessenger\",\"version\":1},\"userdoc\":{\"events\":{\"DepositForBurn(uint64,address,uint256,address,bytes32,uint32,bytes32,bytes32)\":{\"notice\":\"Emitted when a DepositForBurn message is sent\"},\"LocalMinterAdded(address)\":{\"notice\":\"Emitted when the local minter is addedEmitted when the local minter is added\"},\"LocalMinterRemoved(address)\":{\"notice\":\"Emitted when the local minter is removedEmitted when the local minter is removed\"},\"MintAndWithdraw(address,uint256,address)\":{\"notice\":\"Emitted when tokens are minted\"},\"RemoteTokenMessengerAdded(uint32,bytes32)\":{\"notice\":\"Emitted when a remote TokenMessenger is added\"},\"RemoteTokenMessengerRemoved(uint32,bytes32)\":{\"notice\":\"Emitted when a remote TokenMessenger is removed\"}},\"kind\":\"user\",\"methods\":{\"addLocalMinter(address)\":{\"notice\":\"Add minter for the local domain.\"},\"addRemoteTokenMessenger(uint32,bytes32)\":{\"notice\":\"Add the TokenMessenger for a remote domain.\"},\"depositForBurn(uint256,uint32,bytes32,address)\":{\"notice\":\"Deposits and burns tokens from sender to be minted on destination domain. Emits a `DepositForBurn` event.\"},\"depositForBurnWithCaller(uint256,uint32,bytes32,address,bytes32)\":{\"notice\":\"Deposits and burns tokens from sender to be minted on destination domain. The mint on the destination domain must be called by `destinationCaller`. WARNING: if the `destinationCaller` does not represent a valid address as bytes32, then it will not be possible to broadcast the message on the destination domain. This is an advanced feature, and the standard depositForBurn() should be preferred for use cases where a specific destination caller is not required. Emits a `DepositForBurn` event.\"},\"handleReceiveMessage(uint32,bytes32,bytes)\":{\"notice\":\"Handles an incoming message received by the local MessageTransmitter, and takes the appropriate action. For a burn message, mints the associated token to the requested recipient on the local domain.\"},\"removeLocalMinter()\":{\"notice\":\"Remove the minter for the local domain.\"},\"removeRemoteTokenMessenger(uint32)\":{\"notice\":\"Remove the TokenMessenger for a remote domain.\"},\"replaceDepositForBurn(bytes,bytes,bytes32,bytes32)\":{\"notice\":\"Replace a BurnMessage to change the mint recipient and/or destination caller. Allows the sender of a previous BurnMessage (created by depositForBurn or depositForBurnWithCaller) to send a new BurnMessage to replace the original. The new BurnMessage will reuse the amount and burn token of the original, without requiring a new deposit.\"},\"rescueERC20(address,address,uint256)\":{\"notice\":\"Rescue ERC20 tokens locked up in this contract.\"},\"rescuer()\":{\"notice\":\"Returns current rescuer\"},\"updateRescuer(address)\":{\"notice\":\"Assign the rescuer role to a given address.\"}},\"notice\":\"Sends messages and receives messages to/from MessageTransmitters and to/from TokenMinters\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/TokenMessenger.sol\":\"TokenMessenger\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":100000},\"remappings\":[\":@memview-sol/=lib/memview-sol/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":centre-tokens.git/=lib/centre-tokens.git/\",\":ds-test/=lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":memview-sol/=lib/memview-sol/contracts/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/memview-sol/contracts/SafeMath.sol\":{\"keccak256\":\"0xa1054a453f13c3c817cd2d9fb048d68b20202a6f925d2efe6c887bddf3752837\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0fbe6252658163c22e42725c746a005e3b0e129355579113914c679a26fda50d\",\"dweb:/ipfs/QmZHmS7NjoSZcymwmU4kSfyKAvu2RpuxLowVY5Tj4LY6kr\"]},\"lib/memview-sol/contracts/TypedMemView.sol\":{\"keccak256\":\"0xa59e6e460439df036676d255b089784e6cd1539fbd439dafae33d751fe828ebe\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://b2d5865010f33ac2298a563b8c8fdb6b7da5607b61172b09ed9a51d180b6b823\",\"dweb:/ipfs/QmdzLCZtkXRCbya28LyV9qCcVXU9mFN6SeB6mVyhKiSiTv\"]},\"lib/openzeppelin-contracts/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5f02220344881ce43204ae4a6281145a67bc52c2bb1290a791857df3d19d78f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24427744bd3e6cb73c17010119af12a318289c0253a4d9acb8576c9fb3797b08\",\"dweb:/ipfs/QmTLDqpKRBuxGxRAmjgXt9AkXyACW3MtKzi7PYjm5iMfGC\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0xf12dfbe97e6276980b83d2830bb0eb75e0cf4f3e626c2471137f82158ae6a0fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a849c2d95e85463909e5b5c920b13e7a11216ca14127085e16d22b9379d52a\",\"dweb:/ipfs/QmUg3CZDbCCcQdroEpexBy5ZFd5vD1UWijWQq9qHZjtJNQ\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://256c8c8af5eb072bc473226ab2b2187149b8fc04f5f4a4820db22527f5ce8e3c\",\"dweb:/ipfs/QmRvi5BhnL7Rxf85KrJhwM6RRhukm4tzoctRdgQEheNyiN\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]},\"src/TokenMessenger.sol\":{\"keccak256\":\"0x2750cabd2bdfae392cbfd3941b0b1d2892dc1058a52eb42f6c0f70a374e2ef4f\",\"urls\":[\"bzz-raw://d4a15f828e91362484f13ff21de28fcdb597ec956f8b814c24c5999e019bbae5\",\"dweb:/ipfs/Qmd4XKha6SA8VskBRFrVPLzf3GEz9c8SRSe1V4NHvxXQ1G\"]},\"src/interfaces/IMessageHandler.sol\":{\"keccak256\":\"0x6af84af8715e65646d4442917779d9429035e78d53cfd197c460fd2e18ccf6a7\",\"urls\":[\"bzz-raw://8d01d52be8119f64c2df22a10bb47929937e7cb4af53354ca4dff15e353dfa9a\",\"dweb:/ipfs/QmbFt45Ny4ePgjwZdk3GEoV9ynSM8jfXWNft7p1B7SuTMT\"]},\"src/interfaces/IMessageTransmitter.sol\":{\"keccak256\":\"0x70daea8dee44f753a36243b58b89488a665f09bc30470a2255db8034ebb1254e\",\"urls\":[\"bzz-raw://cff30fdf2b90c8c1c9c84acab9d2c34c42893ea9d4111ac3dfc636f107afbcd8\",\"dweb:/ipfs/QmY5sqNDSNE2E5zSikfW7fJFpJHEWzGrKbJZXEBLvbhD6X\"]},\"src/interfaces/IMintBurnToken.sol\":{\"keccak256\":\"0x9c07c8daa3984d773036c0642d49acda294c2c099b404774d89a7ec930fe1f9c\",\"urls\":[\"bzz-raw://76e2ddc0df9b8c0a8ce9a44c1edcf6b9a19c045b2736d91c7da4df3d9e60d85e\",\"dweb:/ipfs/QmXRLnEMMMjxUSXvLpv9muh3BR2W93t3fjQTbSHg1CFY4J\"]},\"src/interfaces/IReceiver.sol\":{\"keccak256\":\"0xa6a97fd01c17ac415d8b891c613a6b64a5723a24e7a042b47d1f6930f8d6e818\",\"urls\":[\"bzz-raw://ca049c40ca32e1cefe1436357a86746115756de7a069d6d75d6774a2bfe32259\",\"dweb:/ipfs/QmSfBtdr517rLNuaBQjrDfBERyX8DvSLPjcuK7dDLD7AGW\"]},\"src/interfaces/IRelayer.sol\":{\"keccak256\":\"0x1510214de1adac12937c79fa6b25b0973a879219a31b149a7c11c70a8c095b3a\",\"urls\":[\"bzz-raw://6f6af107b32576803feb574d0d4413c567336be9e9499b25918c3492c87d7e2b\",\"dweb:/ipfs/QmUF51siiUMFmRw5zB5S85cEjgpUxesPc52fM5azbqscid\"]},\"src/interfaces/ITokenMinter.sol\":{\"keccak256\":\"0xa037e3f741c01b1fe56b27932cf18e21836027d415f0963257970dbbae3d9262\",\"urls\":[\"bzz-raw://a0766f25344309569654cea7860b11fc68f5b555f8188b53df21d0170f6478be\",\"dweb:/ipfs/QmYL5y9C7LpTLUELD9jSxusQrdjCdj9AiVmv2GN1K1AjEE\"]},\"src/messages/BurnMessage.sol\":{\"keccak256\":\"0xf6d3bab4f9acd78a110a551176cf30d638978db301ffba101a22e65655e1f6a9\",\"urls\":[\"bzz-raw://4ed05fac8cffb5aaf7896131703c17295e91e2153c972f1f441a0af415b3370c\",\"dweb:/ipfs/QmYLujtPBDsVwLpVYCbT3ZGCa5uXajVKqi5SfCKY3mWEet\"]},\"src/messages/Message.sol\":{\"keccak256\":\"0xd2e6ed7b6b91d45656010289be542588b7ea9b240497286cf46f99e271474547\",\"urls\":[\"bzz-raw://c3be6543e3fc071452b0cf196b9813b2340dd96e39bcbe15d7d135bcae700017\",\"dweb:/ipfs/QmW7BnYyYM6AMiYtumWjwkCQ3yrLQZQYwnVG8fPn5aJ22C\"]},\"src/roles/Ownable.sol\":{\"keccak256\":\"0x4b675058095169e2aa938936232e4516b00ae55b6051725cec0d066fa4eb01be\",\"urls\":[\"bzz-raw://125d1b051badf05d6ea4bdf30360e7afb1c858c96b69f970e21d1aee709047fc\",\"dweb:/ipfs/QmWHt7H9Dcc6RMhPHHkZe2VkPSrQV9HJQ1ddCAwC2r84an\"]},\"src/roles/Ownable2Step.sol\":{\"keccak256\":\"0xc3ad0bdd8165c164d47256cdcb7aa26ac06cb1d5eb5e4d5b706e7f0d4bfdc36a\",\"urls\":[\"bzz-raw://583122acee73e04af577ae578d9e9cd162bc94ffa9671e5f76fc73c21ce35328\",\"dweb:/ipfs/QmZ6tG8djdRfHvaLfkVaSmys4WRySvnTDbgiNCW1Mz724U\"]},\"src/roles/Rescuable.sol\":{\"keccak256\":\"0x0535df5d996c5c2b5063b83e8d4e2221468e324fabeb089cb4086d3675479137\",\"urls\":[\"bzz-raw://2aaccc3920ba05a28a1bced825a5fb79e9f7721bd1aba885aed657ca45196b8b\",\"dweb:/ipfs/QmPwYrn9Y2FfhGv7jAexRj5iLZFLUWc8LUupzShymBVUe3\"]}},\"version\":1}", + "metadata": { + "compiler": { + "version": "0.7.6+commit.7338295f" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_messageTransmitter", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_messageBodyVersion", + "type": "uint32" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "nonce", + "type": "uint64", + "indexed": true + }, + { + "internalType": "address", + "name": "burnToken", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "depositor", + "type": "address", + "indexed": true + }, + { + "internalType": "bytes32", + "name": "mintRecipient", + "type": "bytes32", + "indexed": false + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32", + "indexed": false + }, + { + "internalType": "bytes32", + "name": "destinationTokenMessenger", + "type": "bytes32", + "indexed": false + }, + { + "internalType": "bytes32", + "name": "destinationCaller", + "type": "bytes32", + "indexed": false + } + ], + "type": "event", + "name": "DepositForBurn", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "localMinter", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "LocalMinterAdded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "localMinter", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "LocalMinterRemoved", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "mintRecipient", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "mintToken", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "MintAndWithdraw", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32", + "indexed": false + }, + { + "internalType": "bytes32", + "name": "tokenMessenger", + "type": "bytes32", + "indexed": false + } + ], + "type": "event", + "name": "RemoteTokenMessengerAdded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32", + "indexed": false + }, + { + "internalType": "bytes32", + "name": "tokenMessenger", + "type": "bytes32", + "indexed": false + } + ], + "type": "event", + "name": "RemoteTokenMessengerRemoved", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newRescuer", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "RescuerChanged", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newLocalMinter", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addLocalMinter" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "tokenMessenger", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addRemoteTokenMessenger" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mintRecipient", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "burnToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "depositForBurn", + "outputs": [ + { + "internalType": "uint64", + "name": "_nonce", + "type": "uint64" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mintRecipient", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "burnToken", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "destinationCaller", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "depositForBurnWithCaller", + "outputs": [ + { + "internalType": "uint64", + "name": "nonce", + "type": "uint64" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "remoteDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "sender", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "messageBody", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "handleReceiveMessage", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "localMessageTransmitter", + "outputs": [ + { + "internalType": "contract IMessageTransmitter", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "localMinter", + "outputs": [ + { + "internalType": "contract ITokenMinter", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "messageBodyVersion", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "remoteTokenMessengers", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "removeLocalMinter" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "removeRemoteTokenMessenger" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "originalMessage", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "originalAttestation", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "newDestinationCaller", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newMintRecipient", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "replaceDepositForBurn" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "rescueERC20" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "rescuer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newRescuer", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updateRescuer" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "addLocalMinter(address)": { + "details": "Reverts if a minter is already set for the local domain.", + "params": { + "newLocalMinter": "The address of the minter on the local domain." + } + }, + "addRemoteTokenMessenger(uint32,bytes32)": { + "details": "Reverts if there is already a TokenMessenger set for domain.", + "params": { + "domain": "Domain of remote TokenMessenger.", + "tokenMessenger": "Address of remote TokenMessenger as bytes32." + } + }, + "constructor": { + "params": { + "_messageBodyVersion": "Message body version", + "_messageTransmitter": "Message transmitter address" + } + }, + "depositForBurn(uint256,uint32,bytes32,address)": { + "details": "reverts if: - given burnToken is not supported - given destinationDomain has no TokenMessenger registered - transferFrom() reverts. For example, if sender's burnToken balance or approved allowance to this contract is less than `amount`. - burn() reverts. For example, if `amount` is 0. - MessageTransmitter returns false or reverts.", + "params": { + "amount": "amount of tokens to burn", + "burnToken": "address of contract to burn deposited tokens, on local domain", + "destinationDomain": "destination domain", + "mintRecipient": "address of mint recipient on destination domain" + }, + "returns": { + "_nonce": "unique nonce reserved by message" + } + }, + "depositForBurnWithCaller(uint256,uint32,bytes32,address,bytes32)": { + "details": "reverts if: - given destinationCaller is zero address - given burnToken is not supported - given destinationDomain has no TokenMessenger registered - transferFrom() reverts. For example, if sender's burnToken balance or approved allowance to this contract is less than `amount`. - burn() reverts. For example, if `amount` is 0. - MessageTransmitter returns false or reverts.", + "params": { + "amount": "amount of tokens to burn", + "burnToken": "address of contract to burn deposited tokens, on local domain", + "destinationCaller": "caller on the destination domain, as bytes32", + "destinationDomain": "destination domain", + "mintRecipient": "address of mint recipient on destination domain" + }, + "returns": { + "nonce": "unique nonce reserved by message" + } + }, + "handleReceiveMessage(uint32,bytes32,bytes)": { + "details": "Validates the local sender is the local MessageTransmitter, and the remote sender is a registered remote TokenMessenger for `remoteDomain`.", + "params": { + "messageBody": "The message body bytes.", + "remoteDomain": "The domain where the message originated from.", + "sender": "The sender of the message (remote TokenMessenger)." + }, + "returns": { + "_0": "success Bool, true if successful." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "removeLocalMinter()": { + "details": "Reverts if the minter of the local domain is not set." + }, + "removeRemoteTokenMessenger(uint32)": { + "details": "Reverts if there is no TokenMessenger set for `domain`.", + "params": { + "domain": "Domain of remote TokenMessenger" + } + }, + "replaceDepositForBurn(bytes,bytes,bytes32,bytes32)": { + "details": "The new message will reuse the original message's nonce. For a given nonce, all replacement message(s) and the original message are valid to broadcast on the destination domain, until the first message at the nonce confirms, at which point all others are invalidated. Note: The msg.sender of the replaced message must be the same as the msg.sender of the original message.", + "params": { + "newDestinationCaller": "the new destination caller, which may be the same as the original destination caller, a new destination caller, or an empty destination caller (bytes32(0), indicating that any destination caller is valid.)", + "newMintRecipient": "the new mint recipient, which may be the same as the original mint recipient, or different.", + "originalAttestation": "original attestation bytes", + "originalMessage": "original message bytes (to replace)" + } + }, + "rescueERC20(address,address,uint256)": { + "params": { + "amount": "Amount to withdraw", + "to": "Recipient address", + "tokenContract": "ERC20 token contract address" + } + }, + "rescuer()": { + "returns": { + "_0": "Rescuer's address" + } + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + }, + "updateRescuer(address)": { + "params": { + "newRescuer": "New rescuer's address" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "addLocalMinter(address)": { + "notice": "Add minter for the local domain." + }, + "addRemoteTokenMessenger(uint32,bytes32)": { + "notice": "Add the TokenMessenger for a remote domain." + }, + "depositForBurn(uint256,uint32,bytes32,address)": { + "notice": "Deposits and burns tokens from sender to be minted on destination domain. Emits a `DepositForBurn` event." + }, + "depositForBurnWithCaller(uint256,uint32,bytes32,address,bytes32)": { + "notice": "Deposits and burns tokens from sender to be minted on destination domain. The mint on the destination domain must be called by `destinationCaller`. WARNING: if the `destinationCaller` does not represent a valid address as bytes32, then it will not be possible to broadcast the message on the destination domain. This is an advanced feature, and the standard depositForBurn() should be preferred for use cases where a specific destination caller is not required. Emits a `DepositForBurn` event." + }, + "handleReceiveMessage(uint32,bytes32,bytes)": { + "notice": "Handles an incoming message received by the local MessageTransmitter, and takes the appropriate action. For a burn message, mints the associated token to the requested recipient on the local domain." + }, + "removeLocalMinter()": { + "notice": "Remove the minter for the local domain." + }, + "removeRemoteTokenMessenger(uint32)": { + "notice": "Remove the TokenMessenger for a remote domain." + }, + "replaceDepositForBurn(bytes,bytes,bytes32,bytes32)": { + "notice": "Replace a BurnMessage to change the mint recipient and/or destination caller. Allows the sender of a previous BurnMessage (created by depositForBurn or depositForBurnWithCaller) to send a new BurnMessage to replace the original. The new BurnMessage will reuse the amount and burn token of the original, without requiring a new deposit." + }, + "rescueERC20(address,address,uint256)": { + "notice": "Rescue ERC20 tokens locked up in this contract." + }, + "rescuer()": { + "notice": "Returns current rescuer" + }, + "updateRescuer(address)": { + "notice": "Assign the rescuer role to a given address." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + ":@memview-sol/=lib/memview-sol/", + ":@openzeppelin/=lib/openzeppelin-contracts/", + ":centre-tokens.git/=lib/centre-tokens.git/", + ":ds-test/=lib/ds-test/src/", + ":forge-std/=lib/forge-std/src/", + ":memview-sol/=lib/memview-sol/contracts/", + ":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/" + ], + "optimizer": { + "enabled": true, + "runs": 100000 + }, + "metadata": { + "bytecodeHash": "ipfs" + }, + "compilationTarget": { + "src/TokenMessenger.sol": "TokenMessenger" + }, + "libraries": {} + }, + "sources": { + "lib/memview-sol/contracts/SafeMath.sol": { + "keccak256": "0xa1054a453f13c3c817cd2d9fb048d68b20202a6f925d2efe6c887bddf3752837", + "urls": [ + "bzz-raw://0fbe6252658163c22e42725c746a005e3b0e129355579113914c679a26fda50d", + "dweb:/ipfs/QmZHmS7NjoSZcymwmU4kSfyKAvu2RpuxLowVY5Tj4LY6kr" + ], + "license": "MIT" + }, + "lib/memview-sol/contracts/TypedMemView.sol": { + "keccak256": "0xa59e6e460439df036676d255b089784e6cd1539fbd439dafae33d751fe828ebe", + "urls": [ + "bzz-raw://b2d5865010f33ac2298a563b8c8fdb6b7da5607b61172b09ed9a51d180b6b823", + "dweb:/ipfs/QmdzLCZtkXRCbya28LyV9qCcVXU9mFN6SeB6mVyhKiSiTv" + ], + "license": "MIT OR Apache-2.0" + }, + "lib/openzeppelin-contracts/contracts/math/SafeMath.sol": { + "keccak256": "0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52", + "urls": [ + "bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c", + "dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": { + "keccak256": "0x5f02220344881ce43204ae4a6281145a67bc52c2bb1290a791857df3d19d78f5", + "urls": [ + "bzz-raw://24427744bd3e6cb73c17010119af12a318289c0253a4d9acb8576c9fb3797b08", + "dweb:/ipfs/QmTLDqpKRBuxGxRAmjgXt9AkXyACW3MtKzi7PYjm5iMfGC" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol": { + "keccak256": "0xf12dfbe97e6276980b83d2830bb0eb75e0cf4f3e626c2471137f82158ae6a0fc", + "urls": [ + "bzz-raw://b3a849c2d95e85463909e5b5c920b13e7a11216ca14127085e16d22b9379d52a", + "dweb:/ipfs/QmUg3CZDbCCcQdroEpexBy5ZFd5vD1UWijWQq9qHZjtJNQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea", + "urls": [ + "bzz-raw://256c8c8af5eb072bc473226ab2b2187149b8fc04f5f4a4820db22527f5ce8e3c", + "dweb:/ipfs/QmRvi5BhnL7Rxf85KrJhwM6RRhukm4tzoctRdgQEheNyiN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0", + "urls": [ + "bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f", + "dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96" + ], + "license": "MIT" + }, + "src/TokenMessenger.sol": { + "keccak256": "0x2750cabd2bdfae392cbfd3941b0b1d2892dc1058a52eb42f6c0f70a374e2ef4f", + "urls": [ + "bzz-raw://d4a15f828e91362484f13ff21de28fcdb597ec956f8b814c24c5999e019bbae5", + "dweb:/ipfs/Qmd4XKha6SA8VskBRFrVPLzf3GEz9c8SRSe1V4NHvxXQ1G" + ], + "license": null + }, + "src/interfaces/IMessageHandler.sol": { + "keccak256": "0x6af84af8715e65646d4442917779d9429035e78d53cfd197c460fd2e18ccf6a7", + "urls": [ + "bzz-raw://8d01d52be8119f64c2df22a10bb47929937e7cb4af53354ca4dff15e353dfa9a", + "dweb:/ipfs/QmbFt45Ny4ePgjwZdk3GEoV9ynSM8jfXWNft7p1B7SuTMT" + ], + "license": null + }, + "src/interfaces/IMessageTransmitter.sol": { + "keccak256": "0x70daea8dee44f753a36243b58b89488a665f09bc30470a2255db8034ebb1254e", + "urls": [ + "bzz-raw://cff30fdf2b90c8c1c9c84acab9d2c34c42893ea9d4111ac3dfc636f107afbcd8", + "dweb:/ipfs/QmY5sqNDSNE2E5zSikfW7fJFpJHEWzGrKbJZXEBLvbhD6X" + ], + "license": null + }, + "src/interfaces/IMintBurnToken.sol": { + "keccak256": "0x9c07c8daa3984d773036c0642d49acda294c2c099b404774d89a7ec930fe1f9c", + "urls": [ + "bzz-raw://76e2ddc0df9b8c0a8ce9a44c1edcf6b9a19c045b2736d91c7da4df3d9e60d85e", + "dweb:/ipfs/QmXRLnEMMMjxUSXvLpv9muh3BR2W93t3fjQTbSHg1CFY4J" + ], + "license": null + }, + "src/interfaces/IReceiver.sol": { + "keccak256": "0xa6a97fd01c17ac415d8b891c613a6b64a5723a24e7a042b47d1f6930f8d6e818", + "urls": [ + "bzz-raw://ca049c40ca32e1cefe1436357a86746115756de7a069d6d75d6774a2bfe32259", + "dweb:/ipfs/QmSfBtdr517rLNuaBQjrDfBERyX8DvSLPjcuK7dDLD7AGW" + ], + "license": null + }, + "src/interfaces/IRelayer.sol": { + "keccak256": "0x1510214de1adac12937c79fa6b25b0973a879219a31b149a7c11c70a8c095b3a", + "urls": [ + "bzz-raw://6f6af107b32576803feb574d0d4413c567336be9e9499b25918c3492c87d7e2b", + "dweb:/ipfs/QmUF51siiUMFmRw5zB5S85cEjgpUxesPc52fM5azbqscid" + ], + "license": null + }, + "src/interfaces/ITokenMinter.sol": { + "keccak256": "0xa037e3f741c01b1fe56b27932cf18e21836027d415f0963257970dbbae3d9262", + "urls": [ + "bzz-raw://a0766f25344309569654cea7860b11fc68f5b555f8188b53df21d0170f6478be", + "dweb:/ipfs/QmYL5y9C7LpTLUELD9jSxusQrdjCdj9AiVmv2GN1K1AjEE" + ], + "license": null + }, + "src/messages/BurnMessage.sol": { + "keccak256": "0xf6d3bab4f9acd78a110a551176cf30d638978db301ffba101a22e65655e1f6a9", + "urls": [ + "bzz-raw://4ed05fac8cffb5aaf7896131703c17295e91e2153c972f1f441a0af415b3370c", + "dweb:/ipfs/QmYLujtPBDsVwLpVYCbT3ZGCa5uXajVKqi5SfCKY3mWEet" + ], + "license": null + }, + "src/messages/Message.sol": { + "keccak256": "0xd2e6ed7b6b91d45656010289be542588b7ea9b240497286cf46f99e271474547", + "urls": [ + "bzz-raw://c3be6543e3fc071452b0cf196b9813b2340dd96e39bcbe15d7d135bcae700017", + "dweb:/ipfs/QmW7BnYyYM6AMiYtumWjwkCQ3yrLQZQYwnVG8fPn5aJ22C" + ], + "license": null + }, + "src/roles/Ownable.sol": { + "keccak256": "0x4b675058095169e2aa938936232e4516b00ae55b6051725cec0d066fa4eb01be", + "urls": [ + "bzz-raw://125d1b051badf05d6ea4bdf30360e7afb1c858c96b69f970e21d1aee709047fc", + "dweb:/ipfs/QmWHt7H9Dcc6RMhPHHkZe2VkPSrQV9HJQ1ddCAwC2r84an" + ], + "license": null + }, + "src/roles/Ownable2Step.sol": { + "keccak256": "0xc3ad0bdd8165c164d47256cdcb7aa26ac06cb1d5eb5e4d5b706e7f0d4bfdc36a", + "urls": [ + "bzz-raw://583122acee73e04af577ae578d9e9cd162bc94ffa9671e5f76fc73c21ce35328", + "dweb:/ipfs/QmZ6tG8djdRfHvaLfkVaSmys4WRySvnTDbgiNCW1Mz724U" + ], + "license": null + }, + "src/roles/Rescuable.sol": { + "keccak256": "0x0535df5d996c5c2b5063b83e8d4e2221468e324fabeb089cb4086d3675479137", + "urls": [ + "bzz-raw://2aaccc3920ba05a28a1bced825a5fb79e9f7721bd1aba885aed657ca45196b8b", + "dweb:/ipfs/QmPwYrn9Y2FfhGv7jAexRj5iLZFLUWc8LUupzShymBVUe3" + ], + "license": null + } + }, + "version": 1 + }, + "ast": { + "absolutePath": "src/TokenMessenger.sol", + "id": 19297, + "exportedSymbols": { + "BurnMessage": [ + 22108 + ], + "Context": [ + 24291 + ], + "IERC20": [ + 23305 + ], + "IMessageHandler": [ + 21282 + ], + "IMessageTransmitter": [ + 21292 + ], + "IMintBurnToken": [ + 21895 + ], + "IReceiver": [ + 22494 + ], + "IRelayer": [ + 22536 + ], + "ITokenMinter": [ + 21937 + ], + "Message": [ + 19815 + ], + "Ownable": [ + 23617 + ], + "Ownable2Step": [ + 23227 + ], + "Rescuable": [ + 21872 + ], + "SafeERC20": [ + 23518 + ], + "SafeMath": [ + 22480 + ], + "TokenMessenger": [ + 19296 + ], + "TypedMemView": [ + 21266 + ] + }, + "nodeType": "SourceUnit", + "src": "619:22009:16", + "nodes": [ + { + "id": 18454, + "nodeType": "PragmaDirective", + "src": "619:22:16", + "nodes": [], + "literals": [ + "solidity", + "0.7", + ".6" + ] + }, + { + "id": 18455, + "nodeType": "ImportDirective", + "src": "643:42:16", + "nodes": [], + "absolutePath": "src/interfaces/IMessageHandler.sol", + "file": "./interfaces/IMessageHandler.sol", + "scope": 19297, + "sourceUnit": 21283, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 18456, + "nodeType": "ImportDirective", + "src": "686:39:16", + "nodes": [], + "absolutePath": "src/interfaces/ITokenMinter.sol", + "file": "./interfaces/ITokenMinter.sol", + "scope": 19297, + "sourceUnit": 21938, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 18457, + "nodeType": "ImportDirective", + "src": "726:41:16", + "nodes": [], + "absolutePath": "src/interfaces/IMintBurnToken.sol", + "file": "./interfaces/IMintBurnToken.sol", + "scope": 19297, + "sourceUnit": 21896, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 18458, + "nodeType": "ImportDirective", + "src": "768:46:16", + "nodes": [], + "absolutePath": "src/interfaces/IMessageTransmitter.sol", + "file": "./interfaces/IMessageTransmitter.sol", + "scope": 19297, + "sourceUnit": 21293, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 18459, + "nodeType": "ImportDirective", + "src": "815:36:16", + "nodes": [], + "absolutePath": "src/messages/BurnMessage.sol", + "file": "./messages/BurnMessage.sol", + "scope": 19297, + "sourceUnit": 22109, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 18460, + "nodeType": "ImportDirective", + "src": "852:32:16", + "nodes": [], + "absolutePath": "src/messages/Message.sol", + "file": "./messages/Message.sol", + "scope": 19297, + "sourceUnit": 19816, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 18461, + "nodeType": "ImportDirective", + "src": "885:31:16", + "nodes": [], + "absolutePath": "src/roles/Rescuable.sol", + "file": "./roles/Rescuable.sol", + "scope": 19297, + "sourceUnit": 21873, + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 19296, + "nodeType": "ContractDefinition", + "src": "1055:21572:16", + "nodes": [ + { + "id": 18485, + "nodeType": "EventDefinition", + "src": "1896:294:16", + "nodes": [], + "anonymous": false, + "documentation": { + "id": 18467, + "nodeType": "StructuredDocumentation", + "src": "1155:736:16", + "text": " @notice Emitted when a DepositForBurn message is sent\n @param nonce unique nonce reserved by message\n @param burnToken address of token burnt on source domain\n @param amount deposit amount\n @param depositor address where deposit is transferred from\n @param mintRecipient address receiving minted tokens on destination domain as bytes32\n @param destinationDomain destination domain\n @param destinationTokenMessenger address of TokenMessenger on destination domain as bytes32\n @param destinationCaller authorized caller as bytes32 of receiveMessage() on destination domain, if not equal to bytes32(0).\n If equal to bytes32(0), any address can call receiveMessage()." + }, + "name": "DepositForBurn", + "parameters": { + "id": 18484, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18469, + "indexed": true, + "mutability": "mutable", + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 18485, + "src": "1926:20:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 18468, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1926:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18471, + "indexed": true, + "mutability": "mutable", + "name": "burnToken", + "nodeType": "VariableDeclaration", + "scope": 18485, + "src": "1956:25:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 18470, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1956:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18473, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 18485, + "src": "1991:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 18472, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1991:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18475, + "indexed": true, + "mutability": "mutable", + "name": "depositor", + "nodeType": "VariableDeclaration", + "scope": 18485, + "src": "2015:25:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 18474, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2015:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18477, + "indexed": false, + "mutability": "mutable", + "name": "mintRecipient", + "nodeType": "VariableDeclaration", + "scope": 18485, + "src": "2050:21:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18476, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2050:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18479, + "indexed": false, + "mutability": "mutable", + "name": "destinationDomain", + "nodeType": "VariableDeclaration", + "scope": 18485, + "src": "2081:24:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18478, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2081:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18481, + "indexed": false, + "mutability": "mutable", + "name": "destinationTokenMessenger", + "nodeType": "VariableDeclaration", + "scope": 18485, + "src": "2115:33:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18480, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2115:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18483, + "indexed": false, + "mutability": "mutable", + "name": "destinationCaller", + "nodeType": "VariableDeclaration", + "scope": 18485, + "src": "2158:25:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18482, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2158:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1916:273:16" + } + }, + { + "id": 18494, + "nodeType": "EventDefinition", + "src": "2423:126:16", + "nodes": [], + "anonymous": false, + "documentation": { + "id": 18486, + "nodeType": "StructuredDocumentation", + "src": "2196:222:16", + "text": " @notice Emitted when tokens are minted\n @param mintRecipient recipient address of minted tokens\n @param amount amount of minted tokens\n @param mintToken contract address of minted token" + }, + "name": "MintAndWithdraw", + "parameters": { + "id": 18493, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18488, + "indexed": true, + "mutability": "mutable", + "name": "mintRecipient", + "nodeType": "VariableDeclaration", + "scope": 18494, + "src": "2454:29:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 18487, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2454:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18490, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 18494, + "src": "2493:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 18489, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2493:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18492, + "indexed": true, + "mutability": "mutable", + "name": "mintToken", + "nodeType": "VariableDeclaration", + "scope": 18494, + "src": "2517:25:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 18491, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2517:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2444:104:16" + } + }, + { + "id": 18501, + "nodeType": "EventDefinition", + "src": "2728:71:16", + "nodes": [], + "anonymous": false, + "documentation": { + "id": 18495, + "nodeType": "StructuredDocumentation", + "src": "2555:168:16", + "text": " @notice Emitted when a remote TokenMessenger is added\n @param domain remote domain\n @param tokenMessenger TokenMessenger on remote domain" + }, + "name": "RemoteTokenMessengerAdded", + "parameters": { + "id": 18500, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18497, + "indexed": false, + "mutability": "mutable", + "name": "domain", + "nodeType": "VariableDeclaration", + "scope": 18501, + "src": "2760:13:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18496, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2760:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18499, + "indexed": false, + "mutability": "mutable", + "name": "tokenMessenger", + "nodeType": "VariableDeclaration", + "scope": 18501, + "src": "2775:22:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18498, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2775:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2759:39:16" + } + }, + { + "id": 18508, + "nodeType": "EventDefinition", + "src": "2980:73:16", + "nodes": [], + "anonymous": false, + "documentation": { + "id": 18502, + "nodeType": "StructuredDocumentation", + "src": "2805:170:16", + "text": " @notice Emitted when a remote TokenMessenger is removed\n @param domain remote domain\n @param tokenMessenger TokenMessenger on remote domain" + }, + "name": "RemoteTokenMessengerRemoved", + "parameters": { + "id": 18507, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18504, + "indexed": false, + "mutability": "mutable", + "name": "domain", + "nodeType": "VariableDeclaration", + "scope": 18508, + "src": "3014:13:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18503, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "3014:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18506, + "indexed": false, + "mutability": "mutable", + "name": "tokenMessenger", + "nodeType": "VariableDeclaration", + "scope": 18508, + "src": "3029:22:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18505, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3029:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3013:39:16" + } + }, + { + "id": 18513, + "nodeType": "EventDefinition", + "src": "3233:44:16", + "nodes": [], + "anonymous": false, + "documentation": { + "id": 18509, + "nodeType": "StructuredDocumentation", + "src": "3059:169:16", + "text": " @notice Emitted when the local minter is added\n @param localMinter address of local minter\n @notice Emitted when the local minter is added" + }, + "name": "LocalMinterAdded", + "parameters": { + "id": 18512, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18511, + "indexed": false, + "mutability": "mutable", + "name": "localMinter", + "nodeType": "VariableDeclaration", + "scope": 18513, + "src": "3256:19:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 18510, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3256:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3255:21:16" + } + }, + { + "id": 18518, + "nodeType": "EventDefinition", + "src": "3461:46:16", + "nodes": [], + "anonymous": false, + "documentation": { + "id": 18514, + "nodeType": "StructuredDocumentation", + "src": "3283:173:16", + "text": " @notice Emitted when the local minter is removed\n @param localMinter address of local minter\n @notice Emitted when the local minter is removed" + }, + "name": "LocalMinterRemoved", + "parameters": { + "id": 18517, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18516, + "indexed": false, + "mutability": "mutable", + "name": "localMinter", + "nodeType": "VariableDeclaration", + "scope": 18518, + "src": "3486:19:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 18515, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3486:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3485:21:16" + } + }, + { + "id": 18521, + "nodeType": "UsingForDirective", + "src": "3556:29:16", + "nodes": [], + "libraryName": { + "id": 18519, + "name": "TypedMemView", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21266, + "src": "3562:12:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TypedMemView_$21266", + "typeString": "library TypedMemView" + } + }, + "typeName": { + "id": 18520, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3579:5:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + } + }, + { + "id": 18524, + "nodeType": "UsingForDirective", + "src": "3590:31:16", + "nodes": [], + "libraryName": { + "id": 18522, + "name": "TypedMemView", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21266, + "src": "3596:12:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TypedMemView_$21266", + "typeString": "library TypedMemView" + } + }, + "typeName": { + "id": 18523, + "name": "bytes29", + "nodeType": "ElementaryTypeName", + "src": "3613:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + } + }, + { + "id": 18527, + "nodeType": "UsingForDirective", + "src": "3626:30:16", + "nodes": [], + "libraryName": { + "id": 18525, + "name": "BurnMessage", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 22108, + "src": "3632:11:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BurnMessage_$22108", + "typeString": "library BurnMessage" + } + }, + "typeName": { + "id": 18526, + "name": "bytes29", + "nodeType": "ElementaryTypeName", + "src": "3648:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + } + }, + { + "id": 18530, + "nodeType": "UsingForDirective", + "src": "3661:26:16", + "nodes": [], + "libraryName": { + "id": 18528, + "name": "Message", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 19815, + "src": "3667:7:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Message_$19815", + "typeString": "library Message" + } + }, + "typeName": { + "id": 18529, + "name": "bytes29", + "nodeType": "ElementaryTypeName", + "src": "3679:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + } + }, + { + "id": 18532, + "nodeType": "VariableDeclaration", + "src": "3845:60:16", + "nodes": [], + "constant": false, + "functionSelector": "2c121921", + "mutability": "immutable", + "name": "localMessageTransmitter", + "scope": 19296, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMessageTransmitter_$21292", + "typeString": "contract IMessageTransmitter" + }, + "typeName": { + "id": 18531, + "name": "IMessageTransmitter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21292, + "src": "3845:19:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMessageTransmitter_$21292", + "typeString": "contract IMessageTransmitter" + } + }, + "visibility": "public" + }, + { + "id": 18534, + "nodeType": "VariableDeclaration", + "src": "3950:42:16", + "nodes": [], + "constant": false, + "functionSelector": "9cdbb181", + "mutability": "immutable", + "name": "messageBodyVersion", + "scope": 19296, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18533, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "3950:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "public" + }, + { + "id": 18536, + "nodeType": "VariableDeclaration", + "src": "4076:31:16", + "nodes": [], + "constant": false, + "functionSelector": "cb75c11c", + "mutability": "mutable", + "name": "localMinter", + "scope": 19296, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + }, + "typeName": { + "id": 18535, + "name": "ITokenMinter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21937, + "src": "4076:12:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "visibility": "public" + }, + { + "id": 18540, + "nodeType": "VariableDeclaration", + "src": "4161:55:16", + "nodes": [], + "constant": false, + "functionSelector": "82a5e665", + "mutability": "mutable", + "name": "remoteTokenMessengers", + "scope": 19296, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", + "typeString": "mapping(uint32 => bytes32)" + }, + "typeName": { + "id": 18539, + "keyType": { + "id": 18537, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "4169:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Mapping", + "src": "4161:26:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", + "typeString": "mapping(uint32 => bytes32)" + }, + "valueType": { + "id": 18538, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4179:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + }, + "visibility": "public" + }, + { + "id": 18557, + "nodeType": "ModifierDefinition", + "src": "4522:228:16", + "nodes": [], + "body": { + "id": 18556, + "nodeType": "Block", + "src": "4595:155:16", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 18549, + "name": "domain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18543, + "src": "4650:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18550, + "name": "tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18545, + "src": "4658:14:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 18548, + "name": "_isRemoteTokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19270, + "src": "4626:23:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint32_$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (uint32,bytes32) view returns (bool)" + } + }, + "id": 18551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4626:47:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "52656d6f746520546f6b656e4d657373656e67657220756e737570706f72746564", + "id": 18552, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4687:35:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_40eb1ae1f1314980253b94a967f261dd338c1064017e2b68195e92adc1451387", + "typeString": "literal_string \"Remote TokenMessenger unsupported\"" + }, + "value": "Remote TokenMessenger unsupported" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_40eb1ae1f1314980253b94a967f261dd338c1064017e2b68195e92adc1451387", + "typeString": "literal_string \"Remote TokenMessenger unsupported\"" + } + ], + "id": 18547, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4605:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18553, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4605:127:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18554, + "nodeType": "ExpressionStatement", + "src": "4605:127:16" + }, + { + "id": 18555, + "nodeType": "PlaceholderStatement", + "src": "4742:1:16" + } + ] + }, + "documentation": { + "id": 18541, + "nodeType": "StructuredDocumentation", + "src": "4266:251:16", + "text": " @notice Only accept messages from a registered TokenMessenger contract on given remote domain\n @param domain The remote domain\n @param tokenMessenger The address of the TokenMessenger contract for the given remote domain" + }, + "name": "onlyRemoteTokenMessenger", + "parameters": { + "id": 18546, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18543, + "mutability": "mutable", + "name": "domain", + "nodeType": "VariableDeclaration", + "scope": 18557, + "src": "4556:13:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18542, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "4556:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18545, + "mutability": "mutable", + "name": "tokenMessenger", + "nodeType": "VariableDeclaration", + "scope": 18557, + "src": "4571:22:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18544, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4571:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4555:39:16" + }, + "virtual": false, + "visibility": "internal" + }, + { + "id": 18568, + "nodeType": "ModifierDefinition", + "src": "4864:212:16", + "nodes": [], + "body": { + "id": 18567, + "nodeType": "Block", + "src": "4903:173:16", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 18561, + "name": "_isLocalMessageTransmitter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19295, + "src": "4998:26:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 18562, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4998:28:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c6964206d657373616765207472616e736d6974746572", + "id": 18563, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5028:29:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_4492d48387c63d6f016252083c234aa7b6a0f2534d2e2d2271de63c826cb6ee7", + "typeString": "literal_string \"Invalid message transmitter\"" + }, + "value": "Invalid message transmitter" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_4492d48387c63d6f016252083c234aa7b6a0f2534d2e2d2271de63c826cb6ee7", + "typeString": "literal_string \"Invalid message transmitter\"" + } + ], + "id": 18560, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4990:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18564, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4990:68:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18565, + "nodeType": "ExpressionStatement", + "src": "4990:68:16" + }, + { + "id": 18566, + "nodeType": "PlaceholderStatement", + "src": "5068:1:16" + } + ] + }, + "documentation": { + "id": 18558, + "nodeType": "StructuredDocumentation", + "src": "4756:103:16", + "text": " @notice Only accept messages from the registered message transmitter on local domain" + }, + "name": "onlyLocalMessageTransmitter", + "parameters": { + "id": 18559, + "nodeType": "ParameterList", + "parameters": [], + "src": "4900:2:16" + }, + "virtual": false, + "visibility": "internal" + }, + { + "id": 18597, + "nodeType": "FunctionDefinition", + "src": "5260:318:16", + "nodes": [], + "body": { + "id": 18596, + "nodeType": "Block", + "src": "5329:249:16", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 18582, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 18577, + "name": "_messageTransmitter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18571, + "src": "5360:19:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 18580, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5391:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 18579, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5383:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 18578, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5383:7:16", + "typeDescriptions": {} + } + }, + "id": 18581, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5383:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5360:33:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4d6573736167655472616e736d6974746572206e6f7420736574", + "id": 18583, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5407:28:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_5395c6f9d267064ac60bf5fca169e5429fc4e95264955dbd98a50477df8d1328", + "typeString": "literal_string \"MessageTransmitter not set\"" + }, + "value": "MessageTransmitter not set" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5395c6f9d267064ac60bf5fca169e5429fc4e95264955dbd98a50477df8d1328", + "typeString": "literal_string \"MessageTransmitter not set\"" + } + ], + "id": 18576, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5339:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5339:106:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18585, + "nodeType": "ExpressionStatement", + "src": "5339:106:16" + }, + { + "expression": { + "id": 18590, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 18586, + "name": "localMessageTransmitter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18532, + "src": "5455:23:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMessageTransmitter_$21292", + "typeString": "contract IMessageTransmitter" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 18588, + "name": "_messageTransmitter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18571, + "src": "5501:19:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 18587, + "name": "IMessageTransmitter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 21292, + "src": "5481:19:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IMessageTransmitter_$21292_$", + "typeString": "type(contract IMessageTransmitter)" + } + }, + "id": 18589, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5481:40:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMessageTransmitter_$21292", + "typeString": "contract IMessageTransmitter" + } + }, + "src": "5455:66:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMessageTransmitter_$21292", + "typeString": "contract IMessageTransmitter" + } + }, + "id": 18591, + "nodeType": "ExpressionStatement", + "src": "5455:66:16" + }, + { + "expression": { + "id": 18594, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 18592, + "name": "messageBodyVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18534, + "src": "5531:18:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 18593, + "name": "_messageBodyVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18573, + "src": "5552:19:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "5531:40:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 18595, + "nodeType": "ExpressionStatement", + "src": "5531:40:16" + } + ] + }, + "documentation": { + "id": 18569, + "nodeType": "StructuredDocumentation", + "src": "5127:128:16", + "text": " @param _messageTransmitter Message transmitter address\n @param _messageBodyVersion Message body version" + }, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "parameters": { + "id": 18574, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18571, + "mutability": "mutable", + "name": "_messageTransmitter", + "nodeType": "VariableDeclaration", + "scope": 18597, + "src": "5272:27:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 18570, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5272:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18573, + "mutability": "mutable", + "name": "_messageBodyVersion", + "nodeType": "VariableDeclaration", + "scope": 18597, + "src": "5301:26:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18572, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "5301:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "5271:57:16" + }, + "returnParameters": { + "id": 18575, + "nodeType": "ParameterList", + "parameters": [], + "src": "5329:0:16" + }, + "scope": 19296, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 18623, + "nodeType": "FunctionDefinition", + "src": "6482:570:16", + "nodes": [], + "body": { + "id": 18622, + "nodeType": "Block", + "src": "6661:391:16", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 18612, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18600, + "src": "6723:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 18613, + "name": "destinationDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18602, + "src": "6747:17:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18614, + "name": "mintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18604, + "src": "6782:13:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18615, + "name": "burnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18606, + "src": "6813:9:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 18618, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7029:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 18617, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7021:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 18616, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7021:7:16", + "typeDescriptions": {} + } + }, + "id": 18619, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7021:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 18611, + "name": "_depositForBurn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19121, + "src": "6690:15:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint32_$_t_bytes32_$_t_address_$_t_bytes32_$returns$_t_uint64_$", + "typeString": "function (uint256,uint32,bytes32,address,bytes32) returns (uint64)" + } + }, + "id": 18620, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6690:355:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 18610, + "id": 18621, + "nodeType": "Return", + "src": "6671:374:16" + } + ] + }, + "documentation": { + "id": 18598, + "nodeType": "StructuredDocumentation", + "src": "5637:840:16", + "text": " @notice Deposits and burns tokens from sender to be minted on destination domain.\n Emits a `DepositForBurn` event.\n @dev reverts if:\n - given burnToken is not supported\n - given destinationDomain has no TokenMessenger registered\n - transferFrom() reverts. For example, if sender's burnToken balance or approved allowance\n to this contract is less than `amount`.\n - burn() reverts. For example, if `amount` is 0.\n - MessageTransmitter returns false or reverts.\n @param amount amount of tokens to burn\n @param destinationDomain destination domain\n @param mintRecipient address of mint recipient on destination domain\n @param burnToken address of contract to burn deposited tokens, on local domain\n @return _nonce unique nonce reserved by message" + }, + "functionSelector": "6fd3504e", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "depositForBurn", + "parameters": { + "id": 18607, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18600, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 18623, + "src": "6515:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 18599, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6515:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18602, + "mutability": "mutable", + "name": "destinationDomain", + "nodeType": "VariableDeclaration", + "scope": 18623, + "src": "6539:24:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18601, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "6539:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18604, + "mutability": "mutable", + "name": "mintRecipient", + "nodeType": "VariableDeclaration", + "scope": 18623, + "src": "6573:21:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18603, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6573:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18606, + "mutability": "mutable", + "name": "burnToken", + "nodeType": "VariableDeclaration", + "scope": 18623, + "src": "6604:17:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 18605, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6604:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6505:122:16" + }, + "returnParameters": { + "id": 18610, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18609, + "mutability": "mutable", + "name": "_nonce", + "nodeType": "VariableDeclaration", + "scope": 18623, + "src": "6646:13:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 18608, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "6646:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "6645:15:16" + }, + "scope": 19296, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 18658, + "nodeType": "FunctionDefinition", + "src": "8444:623:16", + "nodes": [], + "body": { + "id": 18657, + "nodeType": "Block", + "src": "8667:400:16", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 18645, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 18640, + "name": "destinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18634, + "src": "8787:17:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 18643, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8816:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 18642, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8808:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 18641, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8808:7:16", + "typeDescriptions": {} + } + }, + "id": 18644, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8808:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "8787:31:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c69642064657374696e6174696f6e2063616c6c6572", + "id": 18646, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8820:28:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_36f5523dcd35c4fd23ede40b147d4fa86bd383c4d5dd3d248fe959d8750cc10f", + "typeString": "literal_string \"Invalid destination caller\"" + }, + "value": "Invalid destination caller" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_36f5523dcd35c4fd23ede40b147d4fa86bd383c4d5dd3d248fe959d8750cc10f", + "typeString": "literal_string \"Invalid destination caller\"" + } + ], + "id": 18639, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "8779:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18647, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8779:70:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18648, + "nodeType": "ExpressionStatement", + "src": "8779:70:16" + }, + { + "expression": { + "arguments": [ + { + "id": 18650, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18626, + "src": "8912:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 18651, + "name": "destinationDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18628, + "src": "8936:17:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18652, + "name": "mintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18630, + "src": "8971:13:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18653, + "name": "burnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18632, + "src": "9002:9:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 18654, + "name": "destinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18634, + "src": "9029:17:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 18649, + "name": "_depositForBurn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19121, + "src": "8879:15:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint32_$_t_bytes32_$_t_address_$_t_bytes32_$returns$_t_uint64_$", + "typeString": "function (uint256,uint32,bytes32,address,bytes32) returns (uint64)" + } + }, + "id": 18655, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8879:181:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 18638, + "id": 18656, + "nodeType": "Return", + "src": "8860:200:16" + } + ] + }, + "documentation": { + "id": 18624, + "nodeType": "StructuredDocumentation", + "src": "7058:1381:16", + "text": " @notice Deposits and burns tokens from sender to be minted on destination domain. The mint\n on the destination domain must be called by `destinationCaller`.\n WARNING: if the `destinationCaller` does not represent a valid address as bytes32, then it will not be possible\n to broadcast the message on the destination domain. This is an advanced feature, and the standard\n depositForBurn() should be preferred for use cases where a specific destination caller is not required.\n Emits a `DepositForBurn` event.\n @dev reverts if:\n - given destinationCaller is zero address\n - given burnToken is not supported\n - given destinationDomain has no TokenMessenger registered\n - transferFrom() reverts. For example, if sender's burnToken balance or approved allowance\n to this contract is less than `amount`.\n - burn() reverts. For example, if `amount` is 0.\n - MessageTransmitter returns false or reverts.\n @param amount amount of tokens to burn\n @param destinationDomain destination domain\n @param mintRecipient address of mint recipient on destination domain\n @param burnToken address of contract to burn deposited tokens, on local domain\n @param destinationCaller caller on the destination domain, as bytes32\n @return nonce unique nonce reserved by message" + }, + "functionSelector": "f856ddb6", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "depositForBurnWithCaller", + "parameters": { + "id": 18635, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18626, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 18658, + "src": "8487:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 18625, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8487:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18628, + "mutability": "mutable", + "name": "destinationDomain", + "nodeType": "VariableDeclaration", + "scope": 18658, + "src": "8511:24:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18627, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "8511:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18630, + "mutability": "mutable", + "name": "mintRecipient", + "nodeType": "VariableDeclaration", + "scope": 18658, + "src": "8545:21:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18629, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8545:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18632, + "mutability": "mutable", + "name": "burnToken", + "nodeType": "VariableDeclaration", + "scope": 18658, + "src": "8576:17:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 18631, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8576:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18634, + "mutability": "mutable", + "name": "destinationCaller", + "nodeType": "VariableDeclaration", + "scope": 18658, + "src": "8603:25:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18633, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8603:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "8477:157:16" + }, + "returnParameters": { + "id": 18638, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18637, + "mutability": "mutable", + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 18658, + "src": "8653:12:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 18636, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "8653:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "8652:14:16" + }, + "scope": 19296, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 18774, + "nodeType": "FunctionDefinition", + "src": "10407:1678:16", + "nodes": [], + "body": { + "id": 18773, + "nodeType": "Block", + "src": "10609:1476:16", + "nodes": [], + "statements": [ + { + "assignments": [ + 18671 + ], + "declarations": [ + { + "constant": false, + "id": 18671, + "mutability": "mutable", + "name": "_originalMsg", + "nodeType": "VariableDeclaration", + "scope": 18773, + "src": "10619:20:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + }, + "typeName": { + "id": 18670, + "name": "bytes29", + "nodeType": "ElementaryTypeName", + "src": "10619:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "visibility": "internal" + } + ], + "id": 18676, + "initialValue": { + "arguments": [ + { + "hexValue": "30", + "id": 18674, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10662:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "expression": { + "id": 18672, + "name": "originalMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18661, + "src": "10642:15:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + "id": 18673, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ref", + "nodeType": "MemberAccess", + "referencedDeclaration": 20430, + "src": "10642:19:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory,uint40) pure returns (bytes29)" + } + }, + "id": 18675, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10642:22:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10619:45:16" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18677, + "name": "_originalMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18671, + "src": "10674:12:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18679, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_validateMessageFormat", + "nodeType": "MemberAccess", + "referencedDeclaration": 19814, + "src": "10674:35:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$__$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure" + } + }, + "id": 18680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10674:37:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18681, + "nodeType": "ExpressionStatement", + "src": "10674:37:16" + }, + { + "assignments": [ + 18683 + ], + "declarations": [ + { + "constant": false, + "id": 18683, + "mutability": "mutable", + "name": "_originalMsgBody", + "nodeType": "VariableDeclaration", + "scope": 18773, + "src": "10721:24:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + }, + "typeName": { + "id": 18682, + "name": "bytes29", + "nodeType": "ElementaryTypeName", + "src": "10721:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "visibility": "internal" + } + ], + "id": 18687, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18684, + "name": "_originalMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18671, + "src": "10748:12:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18685, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_messageBody", + "nodeType": "MemberAccess", + "referencedDeclaration": 19751, + "src": "10748:25:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (bytes29)" + } + }, + "id": 18686, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10748:27:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10721:54:16" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18688, + "name": "_originalMsgBody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18683, + "src": "10785:16:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_validateBurnMessageFormat", + "nodeType": "MemberAccess", + "referencedDeclaration": 22107, + "src": "10785:43:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$__$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure" + } + }, + "id": 18691, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10785:45:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18692, + "nodeType": "ExpressionStatement", + "src": "10785:45:16" + }, + { + "assignments": [ + 18694 + ], + "declarations": [ + { + "constant": false, + "id": 18694, + "mutability": "mutable", + "name": "_originalMsgSender", + "nodeType": "VariableDeclaration", + "scope": 18773, + "src": "10841:26:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18693, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "10841:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 18698, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18695, + "name": "_originalMsgBody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18683, + "src": "10870:16:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18696, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_getMessageSender", + "nodeType": "MemberAccess", + "referencedDeclaration": 22021, + "src": "10870:34:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (bytes32)" + } + }, + "id": 18697, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10870:36:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10841:65:16" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 18706, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 18700, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "11009:3:16", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 18701, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "11009:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 18704, + "name": "_originalMsgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18694, + "src": "11048:18:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 18702, + "name": "Message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19815, + "src": "11023:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Message_$19815_$", + "typeString": "type(library Message)" + } + }, + "id": 18703, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bytes32ToAddress", + "nodeType": "MemberAccess", + "referencedDeclaration": 19791, + "src": "11023:24:16", + "typeDescriptions": { + "typeIdentifier": "t_function_delegatecall_pure$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes32) pure returns (address)" + } + }, + "id": 18705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11023:44:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "11009:58:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c69642073656e64657220666f72206d657373616765", + "id": 18707, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11081:28:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_024031a2f40ff3221754d08e89f1c4d343d0bf39082361845d6215e8c44133a1", + "typeString": "literal_string \"Invalid sender for message\"" + }, + "value": "Invalid sender for message" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_024031a2f40ff3221754d08e89f1c4d343d0bf39082361845d6215e8c44133a1", + "typeString": "literal_string \"Invalid sender for message\"" + } + ], + "id": 18699, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "10988:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18708, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10988:131:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18709, + "nodeType": "ExpressionStatement", + "src": "10988:131:16" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 18716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 18711, + "name": "newMintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18667, + "src": "11150:16:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 18714, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11178:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 18713, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "11170:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 18712, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11170:7:16", + "typeDescriptions": {} + } + }, + "id": 18715, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11170:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "11150:30:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4d696e7420726563697069656e74206d757374206265206e6f6e7a65726f", + "id": 18717, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11194:32:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9cd36dcd98b1083b9415d331d560f6da19473be9e6e5434909013bdda3baa1c5", + "typeString": "literal_string \"Mint recipient must be nonzero\"" + }, + "value": "Mint recipient must be nonzero" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9cd36dcd98b1083b9415d331d560f6da19473be9e6e5434909013bdda3baa1c5", + "typeString": "literal_string \"Mint recipient must be nonzero\"" + } + ], + "id": 18710, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "11129:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11129:107:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18719, + "nodeType": "ExpressionStatement", + "src": "11129:107:16" + }, + { + "assignments": [ + 18721 + ], + "declarations": [ + { + "constant": false, + "id": 18721, + "mutability": "mutable", + "name": "_burnToken", + "nodeType": "VariableDeclaration", + "scope": 18773, + "src": "11247:18:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18720, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11247:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 18725, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18722, + "name": "_originalMsgBody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18683, + "src": "11268:16:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_getBurnToken", + "nodeType": "MemberAccess", + "referencedDeclaration": 22036, + "src": "11268:30:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (bytes32)" + } + }, + "id": 18724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11268:32:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11247:53:16" + }, + { + "assignments": [ + 18727 + ], + "declarations": [ + { + "constant": false, + "id": 18727, + "mutability": "mutable", + "name": "_amount", + "nodeType": "VariableDeclaration", + "scope": 18773, + "src": "11310:15:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 18726, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11310:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 18731, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18728, + "name": "_originalMsgBody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18683, + "src": "11328:16:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18729, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_getAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 22066, + "src": "11328:27:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (uint256)" + } + }, + "id": 18730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11328:29:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11310:47:16" + }, + { + "assignments": [ + 18733 + ], + "declarations": [ + { + "constant": false, + "id": 18733, + "mutability": "mutable", + "name": "_newMessageBody", + "nodeType": "VariableDeclaration", + "scope": 18773, + "src": "11368:28:16", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 18732, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "11368:5:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 18742, + "initialValue": { + "arguments": [ + { + "id": 18736, + "name": "messageBodyVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18534, + "src": "11439:18:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18737, + "name": "_burnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18721, + "src": "11471:10:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18738, + "name": "newMintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18667, + "src": "11495:16:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18739, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18727, + "src": "11525:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 18740, + "name": "_originalMsgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18694, + "src": "11546:18:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 18734, + "name": "BurnMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 22108, + "src": "11399:11:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BurnMessage_$22108_$", + "typeString": "type(library BurnMessage)" + } + }, + "id": 18735, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_formatMessage", + "nodeType": "MemberAccess", + "referencedDeclaration": 22006, + "src": "11399:26:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_bytes32_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (uint32,bytes32,bytes32,uint256,bytes32) pure returns (bytes memory)" + } + }, + "id": 18741, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11399:175:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11368:206:16" + }, + { + "expression": { + "arguments": [ + { + "id": 18746, + "name": "originalMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18661, + "src": "11637:15:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + { + "id": 18747, + "name": "originalAttestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18663, + "src": "11666:19:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + { + "id": 18748, + "name": "_newMessageBody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18733, + "src": "11699:15:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 18749, + "name": "newDestinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18665, + "src": "11728:20:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 18743, + "name": "localMessageTransmitter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18532, + "src": "11585:23:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMessageTransmitter_$21292", + "typeString": "contract IMessageTransmitter" + } + }, + "id": 18745, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "replaceMessage", + "nodeType": "MemberAccess", + "referencedDeclaration": 22535, + "src": "11585:38:16", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes32_$returns$__$", + "typeString": "function (bytes memory,bytes memory,bytes memory,bytes32) external" + } + }, + "id": 18750, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11585:173:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18751, + "nodeType": "ExpressionStatement", + "src": "11585:173:16" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18753, + "name": "_originalMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18671, + "src": "11802:12:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18754, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_nonce", + "nodeType": "MemberAccess", + "referencedDeclaration": 19690, + "src": "11802:19:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint64_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (uint64)" + } + }, + "id": 18755, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11802:21:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "arguments": [ + { + "id": 18758, + "name": "_burnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18721, + "src": "11862:10:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 18756, + "name": "Message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19815, + "src": "11837:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Message_$19815_$", + "typeString": "type(library Message)" + } + }, + "id": 18757, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bytes32ToAddress", + "nodeType": "MemberAccess", + "referencedDeclaration": 19791, + "src": "11837:24:16", + "typeDescriptions": { + "typeIdentifier": "t_function_delegatecall_pure$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes32) pure returns (address)" + } + }, + "id": 18759, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11837:36:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 18760, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18727, + "src": "11887:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 18761, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "11908:3:16", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 18762, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "11908:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 18763, + "name": "newMintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18667, + "src": "11932:16:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18764, + "name": "_originalMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18671, + "src": "11962:12:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18765, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_destinationDomain", + "nodeType": "MemberAccess", + "referencedDeclaration": 19673, + "src": "11962:31:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (uint32)" + } + }, + "id": 18766, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11962:33:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18767, + "name": "_originalMsg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18671, + "src": "12009:12:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18768, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_recipient", + "nodeType": "MemberAccess", + "referencedDeclaration": 19718, + "src": "12009:23:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (bytes32)" + } + }, + "id": 18769, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12009:25:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 18770, + "name": "newDestinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18665, + "src": "12048:20:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 18752, + "name": "DepositForBurn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18485, + "src": "11774:14:16", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$_t_address_$_t_uint256_$_t_address_$_t_bytes32_$_t_uint32_$_t_bytes32_$_t_bytes32_$returns$__$", + "typeString": "function (uint64,address,uint256,address,bytes32,uint32,bytes32,bytes32)" + } + }, + "id": 18771, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11774:304:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18772, + "nodeType": "EmitStatement", + "src": "11769:309:16" + } + ] + }, + "documentation": { + "id": 18659, + "nodeType": "StructuredDocumentation", + "src": "9073:1329:16", + "text": " @notice Replace a BurnMessage to change the mint recipient and/or\n destination caller. Allows the sender of a previous BurnMessage\n (created by depositForBurn or depositForBurnWithCaller)\n to send a new BurnMessage to replace the original.\n The new BurnMessage will reuse the amount and burn token of the original,\n without requiring a new deposit.\n @dev The new message will reuse the original message's nonce. For a\n given nonce, all replacement message(s) and the original message are\n valid to broadcast on the destination domain, until the first message\n at the nonce confirms, at which point all others are invalidated.\n Note: The msg.sender of the replaced message must be the same as the\n msg.sender of the original message.\n @param originalMessage original message bytes (to replace)\n @param originalAttestation original attestation bytes\n @param newDestinationCaller the new destination caller, which may be the\n same as the original destination caller, a new destination caller, or an empty\n destination caller (bytes32(0), indicating that any destination caller is valid.)\n @param newMintRecipient the new mint recipient, which may be the same as the\n original mint recipient, or different." + }, + "functionSelector": "29a78e33", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "replaceDepositForBurn", + "parameters": { + "id": 18668, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18661, + "mutability": "mutable", + "name": "originalMessage", + "nodeType": "VariableDeclaration", + "scope": 18774, + "src": "10447:30:16", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 18660, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "10447:5:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18663, + "mutability": "mutable", + "name": "originalAttestation", + "nodeType": "VariableDeclaration", + "scope": 18774, + "src": "10487:34:16", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 18662, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "10487:5:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18665, + "mutability": "mutable", + "name": "newDestinationCaller", + "nodeType": "VariableDeclaration", + "scope": 18774, + "src": "10531:28:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18664, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "10531:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18667, + "mutability": "mutable", + "name": "newMintRecipient", + "nodeType": "VariableDeclaration", + "scope": 18774, + "src": "10569:24:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18666, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "10569:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "10437:162:16" + }, + "returnParameters": { + "id": 18669, + "nodeType": "ParameterList", + "parameters": [], + "src": "10609:0:16" + }, + "scope": 19296, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 18854, + "nodeType": "FunctionDefinition", + "src": "12738:926:16", + "nodes": [], + "body": { + "id": 18853, + "nodeType": "Block", + "src": "13015:649:16", + "nodes": [], + "statements": [ + { + "assignments": [ + 18794 + ], + "declarations": [ + { + "constant": false, + "id": 18794, + "mutability": "mutable", + "name": "_msg", + "nodeType": "VariableDeclaration", + "scope": 18853, + "src": "13025:12:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + }, + "typeName": { + "id": 18793, + "name": "bytes29", + "nodeType": "ElementaryTypeName", + "src": "13025:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "visibility": "internal" + } + ], + "id": 18799, + "initialValue": { + "arguments": [ + { + "hexValue": "30", + "id": 18797, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13056:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "expression": { + "id": 18795, + "name": "messageBody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18781, + "src": "13040:11:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + "id": 18796, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ref", + "nodeType": "MemberAccess", + "referencedDeclaration": 20430, + "src": "13040:15:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory,uint40) pure returns (bytes29)" + } + }, + "id": 18798, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13040:18:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13025:33:16" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18800, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18794, + "src": "13068:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18802, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_validateBurnMessageFormat", + "nodeType": "MemberAccess", + "referencedDeclaration": 22107, + "src": "13068:31:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$__$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure" + } + }, + "id": 18803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13068:33:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18804, + "nodeType": "ExpressionStatement", + "src": "13068:33:16" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "id": 18810, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18806, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18794, + "src": "13132:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_getVersion", + "nodeType": "MemberAccess", + "referencedDeclaration": 22084, + "src": "13132:16:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (uint32)" + } + }, + "id": 18808, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13132:18:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 18809, + "name": "messageBodyVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18534, + "src": "13154:18:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "13132:40:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c6964206d65737361676520626f64792076657273696f6e", + "id": 18811, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13186:30:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0d08fa55749e275c9546ae383f5c2c4e9edb78ae51a042458404babcb2f6caa2", + "typeString": "literal_string \"Invalid message body version\"" + }, + "value": "Invalid message body version" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0d08fa55749e275c9546ae383f5c2c4e9edb78ae51a042458404babcb2f6caa2", + "typeString": "literal_string \"Invalid message body version\"" + } + ], + "id": 18805, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "13111:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18812, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13111:115:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18813, + "nodeType": "ExpressionStatement", + "src": "13111:115:16" + }, + { + "assignments": [ + 18815 + ], + "declarations": [ + { + "constant": false, + "id": 18815, + "mutability": "mutable", + "name": "_mintRecipient", + "nodeType": "VariableDeclaration", + "scope": 18853, + "src": "13237:22:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18814, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "13237:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 18819, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18816, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18794, + "src": "13262:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18817, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_getMintRecipient", + "nodeType": "MemberAccess", + "referencedDeclaration": 22051, + "src": "13262:22:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (bytes32)" + } + }, + "id": 18818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13262:24:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13237:49:16" + }, + { + "assignments": [ + 18821 + ], + "declarations": [ + { + "constant": false, + "id": 18821, + "mutability": "mutable", + "name": "_burnToken", + "nodeType": "VariableDeclaration", + "scope": 18853, + "src": "13296:18:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18820, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "13296:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 18825, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18822, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18794, + "src": "13317:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18823, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_getBurnToken", + "nodeType": "MemberAccess", + "referencedDeclaration": 22036, + "src": "13317:18:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (bytes32)" + } + }, + "id": 18824, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13317:20:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13296:41:16" + }, + { + "assignments": [ + 18827 + ], + "declarations": [ + { + "constant": false, + "id": 18827, + "mutability": "mutable", + "name": "_amount", + "nodeType": "VariableDeclaration", + "scope": 18853, + "src": "13347:15:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 18826, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13347:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 18831, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 18828, + "name": "_msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18794, + "src": "13365:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes29", + "typeString": "bytes29" + } + }, + "id": 18829, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_getAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 22066, + "src": "13365:15:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$bound_to$_t_bytes29_$", + "typeString": "function (bytes29) pure returns (uint256)" + } + }, + "id": 18830, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13365:17:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13347:35:16" + }, + { + "assignments": [ + 18833 + ], + "declarations": [ + { + "constant": false, + "id": 18833, + "mutability": "mutable", + "name": "_localMinter", + "nodeType": "VariableDeclaration", + "scope": 18853, + "src": "13393:25:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + }, + "typeName": { + "id": 18832, + "name": "ITokenMinter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21937, + "src": "13393:12:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "visibility": "internal" + } + ], + "id": 18836, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 18834, + "name": "_getLocalMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19246, + "src": "13421:15:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ITokenMinter_$21937_$", + "typeString": "function () view returns (contract ITokenMinter)" + } + }, + "id": 18835, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13421:17:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13393:45:16" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 18840, + "name": "_localMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18833, + "src": "13487:12:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + ], + "id": 18839, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13479:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 18838, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13479:7:16", + "typeDescriptions": {} + } + }, + "id": 18841, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13479:21:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 18842, + "name": "remoteDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18777, + "src": "13514:12:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18843, + "name": "_burnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18821, + "src": "13540:10:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "id": 18846, + "name": "_mintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18815, + "src": "13589:14:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 18844, + "name": "Message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19815, + "src": "13564:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Message_$19815_$", + "typeString": "type(library Message)" + } + }, + "id": 18845, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bytes32ToAddress", + "nodeType": "MemberAccess", + "referencedDeclaration": 19791, + "src": "13564:24:16", + "typeDescriptions": { + "typeIdentifier": "t_function_delegatecall_pure$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes32) pure returns (address)" + } + }, + "id": 18847, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13564:40:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 18848, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18827, + "src": "13618:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 18837, + "name": "_mintAndWithdraw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19197, + "src": "13449:16:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint32_$_t_bytes32_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint32,bytes32,address,uint256)" + } + }, + "id": 18849, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13449:186:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18850, + "nodeType": "ExpressionStatement", + "src": "13449:186:16" + }, + { + "expression": { + "hexValue": "74727565", + "id": 18851, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13653:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 18792, + "id": 18852, + "nodeType": "Return", + "src": "13646:11:16" + } + ] + }, + "baseFunctions": [ + 21281 + ], + "documentation": { + "id": 18775, + "nodeType": "StructuredDocumentation", + "src": "12091:642:16", + "text": " @notice Handles an incoming message received by the local MessageTransmitter,\n and takes the appropriate action. For a burn message, mints the\n associated token to the requested recipient on the local domain.\n @dev Validates the local sender is the local MessageTransmitter, and the\n remote sender is a registered remote TokenMessenger for `remoteDomain`.\n @param remoteDomain The domain where the message originated from.\n @param sender The sender of the message (remote TokenMessenger).\n @param messageBody The message body bytes.\n @return success Bool, true if successful." + }, + "functionSelector": "96abeb70", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 18785, + "modifierName": { + "id": 18784, + "name": "onlyLocalMessageTransmitter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18568, + "src": "12905:27:16", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "12905:27:16" + }, + { + "arguments": [ + { + "id": 18787, + "name": "remoteDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18777, + "src": "12966:12:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18788, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18779, + "src": "12980:6:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 18789, + "modifierName": { + "id": 18786, + "name": "onlyRemoteTokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18557, + "src": "12941:24:16", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_uint32_$_t_bytes32_$", + "typeString": "modifier (uint32,bytes32)" + } + }, + "nodeType": "ModifierInvocation", + "src": "12941:46:16" + } + ], + "name": "handleReceiveMessage", + "overrides": { + "id": 18783, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "12888:8:16" + }, + "parameters": { + "id": 18782, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18777, + "mutability": "mutable", + "name": "remoteDomain", + "nodeType": "VariableDeclaration", + "scope": 18854, + "src": "12777:19:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18776, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "12777:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18779, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 18854, + "src": "12806:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18778, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12806:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18781, + "mutability": "mutable", + "name": "messageBody", + "nodeType": "VariableDeclaration", + "scope": 18854, + "src": "12830:26:16", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 18780, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "12830:5:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "12767:95:16" + }, + "returnParameters": { + "id": 18792, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18791, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 18854, + "src": "13005:4:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 18790, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "13005:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "13004:6:16" + }, + "scope": 19296, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 18898, + "nodeType": "FunctionDefinition", + "src": "13946:439:16", + "nodes": [], + "body": { + "id": 18897, + "nodeType": "Block", + "src": "14057:328:16", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 18870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 18865, + "name": "tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18859, + "src": "14075:14:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 18868, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14101:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 18867, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14093:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 18866, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "14093:7:16", + "typeDescriptions": {} + } + }, + "id": 18869, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14093:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "14075:28:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "62797465733332283029206e6f7420616c6c6f776564", + "id": 18871, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14105:24:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_eb3c39e87989d8f8e6709d778d43d28552f49b0b36ad2efc41a8354678802c53", + "typeString": "literal_string \"bytes32(0) not allowed\"" + }, + "value": "bytes32(0) not allowed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_eb3c39e87989d8f8e6709d778d43d28552f49b0b36ad2efc41a8354678802c53", + "typeString": "literal_string \"bytes32(0) not allowed\"" + } + ], + "id": 18864, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "14067:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18872, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14067:63:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18873, + "nodeType": "ExpressionStatement", + "src": "14067:63:16" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 18882, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 18875, + "name": "remoteTokenMessengers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18540, + "src": "14162:21:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", + "typeString": "mapping(uint32 => bytes32)" + } + }, + "id": 18877, + "indexExpression": { + "id": 18876, + "name": "domain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18857, + "src": "14184:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14162:29:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 18880, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14203:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 18879, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14195:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 18878, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "14195:7:16", + "typeDescriptions": {} + } + }, + "id": 18881, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14195:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "14162:43:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "546f6b656e4d657373656e67657220616c726561647920736574", + "id": 18883, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14219:28:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_de0b02f4c0ad341a4a9fdf3b1808d53dd0b9d3ecae2158f525fede0c88498e57", + "typeString": "literal_string \"TokenMessenger already set\"" + }, + "value": "TokenMessenger already set" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_de0b02f4c0ad341a4a9fdf3b1808d53dd0b9d3ecae2158f525fede0c88498e57", + "typeString": "literal_string \"TokenMessenger already set\"" + } + ], + "id": 18874, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "14141:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18884, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14141:116:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18885, + "nodeType": "ExpressionStatement", + "src": "14141:116:16" + }, + { + "expression": { + "id": 18890, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 18886, + "name": "remoteTokenMessengers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18540, + "src": "14268:21:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", + "typeString": "mapping(uint32 => bytes32)" + } + }, + "id": 18888, + "indexExpression": { + "id": 18887, + "name": "domain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18857, + "src": "14290:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "14268:29:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 18889, + "name": "tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18859, + "src": "14300:14:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "14268:46:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 18891, + "nodeType": "ExpressionStatement", + "src": "14268:46:16" + }, + { + "eventCall": { + "arguments": [ + { + "id": 18893, + "name": "domain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18857, + "src": "14355:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18894, + "name": "tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18859, + "src": "14363:14:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 18892, + "name": "RemoteTokenMessengerAdded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18501, + "src": "14329:25:16", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_bytes32_$returns$__$", + "typeString": "function (uint32,bytes32)" + } + }, + "id": 18895, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14329:49:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18896, + "nodeType": "EmitStatement", + "src": "14324:54:16" + } + ] + }, + "documentation": { + "id": 18855, + "nodeType": "StructuredDocumentation", + "src": "13670:271:16", + "text": " @notice Add the TokenMessenger for a remote domain.\n @dev Reverts if there is already a TokenMessenger set for domain.\n @param domain Domain of remote TokenMessenger.\n @param tokenMessenger Address of remote TokenMessenger as bytes32." + }, + "functionSelector": "da87e448", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 18862, + "modifierName": { + "id": 18861, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 23550, + "src": "14043:9:16", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "14043:9:16" + } + ], + "name": "addRemoteTokenMessenger", + "parameters": { + "id": 18860, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18857, + "mutability": "mutable", + "name": "domain", + "nodeType": "VariableDeclaration", + "scope": 18898, + "src": "13979:13:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18856, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "13979:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18859, + "mutability": "mutable", + "name": "tokenMessenger", + "nodeType": "VariableDeclaration", + "scope": 18898, + "src": "13994:22:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18858, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "13994:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "13978:39:16" + }, + "returnParameters": { + "id": 18863, + "nodeType": "ParameterList", + "parameters": [], + "src": "14057:0:16" + }, + "scope": 19296, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 18935, + "nodeType": "FunctionDefinition", + "src": "14590:449:16", + "nodes": [], + "body": { + "id": 18934, + "nodeType": "Block", + "src": "14660:379:16", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 18914, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 18907, + "name": "remoteTokenMessengers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18540, + "src": "14749:21:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", + "typeString": "mapping(uint32 => bytes32)" + } + }, + "id": 18909, + "indexExpression": { + "id": 18908, + "name": "domain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18901, + "src": "14771:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14749:29:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 18912, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14790:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 18911, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14782:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 18910, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "14782:7:16", + "typeDescriptions": {} + } + }, + "id": 18913, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14782:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "14749:43:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4e6f20546f6b656e4d657373656e67657220736574", + "id": 18915, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14806:23:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_35a5a807ea7120a79be1089273b3f15534cab274f5b53ebfaa6047b79bba4347", + "typeString": "literal_string \"No TokenMessenger set\"" + }, + "value": "No TokenMessenger set" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_35a5a807ea7120a79be1089273b3f15534cab274f5b53ebfaa6047b79bba4347", + "typeString": "literal_string \"No TokenMessenger set\"" + } + ], + "id": 18906, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "14728:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18916, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14728:111:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18917, + "nodeType": "ExpressionStatement", + "src": "14728:111:16" + }, + { + "assignments": [ + 18919 + ], + "declarations": [ + { + "constant": false, + "id": 18919, + "mutability": "mutable", + "name": "_removedTokenMessenger", + "nodeType": "VariableDeclaration", + "scope": 18934, + "src": "14850:30:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 18918, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "14850:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 18923, + "initialValue": { + "baseExpression": { + "id": 18920, + "name": "remoteTokenMessengers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18540, + "src": "14883:21:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", + "typeString": "mapping(uint32 => bytes32)" + } + }, + "id": 18922, + "indexExpression": { + "id": 18921, + "name": "domain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18901, + "src": "14905:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14883:29:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14850:62:16" + }, + { + "expression": { + "id": 18927, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "14922:36:16", + "subExpression": { + "baseExpression": { + "id": 18924, + "name": "remoteTokenMessengers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18540, + "src": "14929:21:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", + "typeString": "mapping(uint32 => bytes32)" + } + }, + "id": 18926, + "indexExpression": { + "id": 18925, + "name": "domain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18901, + "src": "14951:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "14929:29:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18928, + "nodeType": "ExpressionStatement", + "src": "14922:36:16" + }, + { + "eventCall": { + "arguments": [ + { + "id": 18930, + "name": "domain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18901, + "src": "15001:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 18931, + "name": "_removedTokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18919, + "src": "15009:22:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 18929, + "name": "RemoteTokenMessengerRemoved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18508, + "src": "14973:27:16", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_bytes32_$returns$__$", + "typeString": "function (uint32,bytes32)" + } + }, + "id": 18932, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14973:59:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18933, + "nodeType": "EmitStatement", + "src": "14968:64:16" + } + ] + }, + "documentation": { + "id": 18899, + "nodeType": "StructuredDocumentation", + "src": "14391:194:16", + "text": " @notice Remove the TokenMessenger for a remote domain.\n @dev Reverts if there is no TokenMessenger set for `domain`.\n @param domain Domain of remote TokenMessenger" + }, + "functionSelector": "f79fd08e", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 18904, + "modifierName": { + "id": 18903, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 23550, + "src": "14650:9:16", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "14650:9:16" + } + ], + "name": "removeRemoteTokenMessenger", + "parameters": { + "id": 18902, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18901, + "mutability": "mutable", + "name": "domain", + "nodeType": "VariableDeclaration", + "scope": 18935, + "src": "14626:13:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 18900, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "14626:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "14625:15:16" + }, + "returnParameters": { + "id": 18905, + "nodeType": "ParameterList", + "parameters": [], + "src": "14660:0:16" + }, + "scope": 19296, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 18977, + "nodeType": "FunctionDefinition", + "src": "15254:370:16", + "nodes": [], + "body": { + "id": 18976, + "nodeType": "Block", + "src": "15321:303:16", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 18949, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 18944, + "name": "newLocalMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18938, + "src": "15339:14:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 18947, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15365:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 18946, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "15357:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 18945, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15357:7:16", + "typeDescriptions": {} + } + }, + "id": 18948, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15357:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "15339:28:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5a65726f2061646472657373206e6f7420616c6c6f776564", + "id": 18950, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15369:26:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d15a1b642cacf87a72fab94030672bbfc7860df6ebdb084f3df815612067f9d8", + "typeString": "literal_string \"Zero address not allowed\"" + }, + "value": "Zero address not allowed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d15a1b642cacf87a72fab94030672bbfc7860df6ebdb084f3df815612067f9d8", + "typeString": "literal_string \"Zero address not allowed\"" + } + ], + "id": 18943, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "15331:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18951, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15331:65:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18952, + "nodeType": "ExpressionStatement", + "src": "15331:65:16" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 18962, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 18956, + "name": "localMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18536, + "src": "15436:11:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + ], + "id": 18955, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "15428:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 18954, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15428:7:16", + "typeDescriptions": {} + } + }, + "id": 18957, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15428:20:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 18960, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15460:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 18959, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "15452:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 18958, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15452:7:16", + "typeDescriptions": {} + } + }, + "id": 18961, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15452:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "15428:34:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4c6f63616c206d696e74657220697320616c7265616479207365742e", + "id": 18963, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15476:30:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6de007bec898c66e950f5f7f1503e428e9e2e6e9fe4bd17bf29df30ab36f0066", + "typeString": "literal_string \"Local minter is already set.\"" + }, + "value": "Local minter is already set." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_6de007bec898c66e950f5f7f1503e428e9e2e6e9fe4bd17bf29df30ab36f0066", + "typeString": "literal_string \"Local minter is already set.\"" + } + ], + "id": 18953, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "15407:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18964, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15407:109:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18965, + "nodeType": "ExpressionStatement", + "src": "15407:109:16" + }, + { + "expression": { + "id": 18970, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 18966, + "name": "localMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18536, + "src": "15527:11:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 18968, + "name": "newLocalMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18938, + "src": "15554:14:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 18967, + "name": "ITokenMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 21937, + "src": "15541:12:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ITokenMinter_$21937_$", + "typeString": "type(contract ITokenMinter)" + } + }, + "id": 18969, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15541:28:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "src": "15527:42:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "id": 18971, + "nodeType": "ExpressionStatement", + "src": "15527:42:16" + }, + { + "eventCall": { + "arguments": [ + { + "id": 18973, + "name": "newLocalMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18938, + "src": "15602:14:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 18972, + "name": "LocalMinterAdded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18513, + "src": "15585:16:16", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 18974, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15585:32:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18975, + "nodeType": "EmitStatement", + "src": "15580:37:16" + } + ] + }, + "documentation": { + "id": 18936, + "nodeType": "StructuredDocumentation", + "src": "15045:204:16", + "text": " @notice Add minter for the local domain.\n @dev Reverts if a minter is already set for the local domain.\n @param newLocalMinter The address of the minter on the local domain." + }, + "functionSelector": "8197beb9", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 18941, + "modifierName": { + "id": 18940, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 23550, + "src": "15311:9:16", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "15311:9:16" + } + ], + "name": "addLocalMinter", + "parameters": { + "id": 18939, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18938, + "mutability": "mutable", + "name": "newLocalMinter", + "nodeType": "VariableDeclaration", + "scope": 18977, + "src": "15278:22:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 18937, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15278:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "15277:24:16" + }, + "returnParameters": { + "id": 18942, + "nodeType": "ParameterList", + "parameters": [], + "src": "15321:0:16" + }, + "scope": 19296, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 19008, + "nodeType": "FunctionDefinition", + "src": "15767:277:16", + "nodes": [], + "body": { + "id": 19007, + "nodeType": "Block", + "src": "15815:229:16", + "nodes": [], + "statements": [ + { + "assignments": [ + 18984 + ], + "declarations": [ + { + "constant": false, + "id": 18984, + "mutability": "mutable", + "name": "_localMinterAddress", + "nodeType": "VariableDeclaration", + "scope": 19007, + "src": "15825:27:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 18983, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15825:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 18989, + "initialValue": { + "arguments": [ + { + "id": 18987, + "name": "localMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18536, + "src": "15863:11:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + ], + "id": 18986, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "15855:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 18985, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15855:7:16", + "typeDescriptions": {} + } + }, + "id": 18988, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15855:20:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15825:50:16" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 18996, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 18991, + "name": "_localMinterAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18984, + "src": "15893:19:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 18994, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15924:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 18993, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "15916:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 18992, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15916:7:16", + "typeDescriptions": {} + } + }, + "id": 18995, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15916:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "15893:33:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4e6f206c6f63616c206d696e746572206973207365742e", + "id": 18997, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15928:25:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ea8bf4fb9811da2ac5404491fe8aab63c760e746f7c90e7ab8c42d96659ed48b", + "typeString": "literal_string \"No local minter is set.\"" + }, + "value": "No local minter is set." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ea8bf4fb9811da2ac5404491fe8aab63c760e746f7c90e7ab8c42d96659ed48b", + "typeString": "literal_string \"No local minter is set.\"" + } + ], + "id": 18990, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "15885:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 18998, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15885:69:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 18999, + "nodeType": "ExpressionStatement", + "src": "15885:69:16" + }, + { + "expression": { + "id": 19001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "15965:18:16", + "subExpression": { + "id": 19000, + "name": "localMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18536, + "src": "15972:11:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 19002, + "nodeType": "ExpressionStatement", + "src": "15965:18:16" + }, + { + "eventCall": { + "arguments": [ + { + "id": 19004, + "name": "_localMinterAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18984, + "src": "16017:19:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 19003, + "name": "LocalMinterRemoved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18518, + "src": "15998:18:16", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 19005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15998:39:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 19006, + "nodeType": "EmitStatement", + "src": "15993:44:16" + } + ] + }, + "documentation": { + "id": 18978, + "nodeType": "StructuredDocumentation", + "src": "15630:132:16", + "text": " @notice Remove the minter for the local domain.\n @dev Reverts if the minter of the local domain is not set." + }, + "functionSelector": "91f17888", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 18981, + "modifierName": { + "id": 18980, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 23550, + "src": "15805:9:16", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "15805:9:16" + } + ], + "name": "removeLocalMinter", + "parameters": { + "id": 18979, + "nodeType": "ParameterList", + "parameters": [], + "src": "15793:2:16" + }, + "returnParameters": { + "id": 18982, + "nodeType": "ParameterList", + "parameters": [], + "src": "15815:0:16" + }, + "scope": 19296, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 19121, + "nodeType": "FunctionDefinition", + "src": "16656:1653:16", + "nodes": [], + "body": { + "id": 19120, + "nodeType": "Block", + "src": "16875:1434:16", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 19027, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 19025, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19011, + "src": "16893:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 19026, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16903:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "16893:11:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "416d6f756e74206d757374206265206e6f6e7a65726f", + "id": 19028, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16906:24:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_4fe67bde447bd14fed1ef4a7d0c8126a4e15f5d6de5df70c6c21a024dfe797f6", + "typeString": "literal_string \"Amount must be nonzero\"" + }, + "value": "Amount must be nonzero" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_4fe67bde447bd14fed1ef4a7d0c8126a4e15f5d6de5df70c6c21a024dfe797f6", + "typeString": "literal_string \"Amount must be nonzero\"" + } + ], + "id": 19024, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "16885:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 19029, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16885:46:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 19030, + "nodeType": "ExpressionStatement", + "src": "16885:46:16" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 19037, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 19032, + "name": "_mintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19015, + "src": "16949:14:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 19035, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16975:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 19034, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "16967:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 19033, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "16967:7:16", + "typeDescriptions": {} + } + }, + "id": 19036, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16967:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "16949:28:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4d696e7420726563697069656e74206d757374206265206e6f6e7a65726f", + "id": 19038, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16979:32:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9cd36dcd98b1083b9415d331d560f6da19473be9e6e5434909013bdda3baa1c5", + "typeString": "literal_string \"Mint recipient must be nonzero\"" + }, + "value": "Mint recipient must be nonzero" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9cd36dcd98b1083b9415d331d560f6da19473be9e6e5434909013bdda3baa1c5", + "typeString": "literal_string \"Mint recipient must be nonzero\"" + } + ], + "id": 19031, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "16941:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 19039, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16941:71:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 19040, + "nodeType": "ExpressionStatement", + "src": "16941:71:16" + }, + { + "assignments": [ + 19042 + ], + "declarations": [ + { + "constant": false, + "id": 19042, + "mutability": "mutable", + "name": "_destinationTokenMessenger", + "nodeType": "VariableDeclaration", + "scope": 19120, + "src": "17023:34:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 19041, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "17023:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 19046, + "initialValue": { + "arguments": [ + { + "id": 19044, + "name": "_destinationDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19013, + "src": "17098:18:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 19043, + "name": "_getRemoteTokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19224, + "src": "17060:24:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint32_$returns$_t_bytes32_$", + "typeString": "function (uint32) view returns (bytes32)" + } + }, + "id": 19045, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17060:66:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17023:103:16" + }, + { + "assignments": [ + 19048 + ], + "declarations": [ + { + "constant": false, + "id": 19048, + "mutability": "mutable", + "name": "_localMinter", + "nodeType": "VariableDeclaration", + "scope": 19120, + "src": "17137:25:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + }, + "typeName": { + "id": 19047, + "name": "ITokenMinter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21937, + "src": "17137:12:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "visibility": "internal" + } + ], + "id": 19051, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 19049, + "name": "_getLocalMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19246, + "src": "17165:15:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ITokenMinter_$21937_$", + "typeString": "function () view returns (contract ITokenMinter)" + } + }, + "id": 19050, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17165:17:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17137:45:16" + }, + { + "assignments": [ + 19053 + ], + "declarations": [ + { + "constant": false, + "id": 19053, + "mutability": "mutable", + "name": "_mintBurnToken", + "nodeType": "VariableDeclaration", + "scope": 19120, + "src": "17192:29:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMintBurnToken_$21895", + "typeString": "contract IMintBurnToken" + }, + "typeName": { + "id": 19052, + "name": "IMintBurnToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21895, + "src": "17192:14:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMintBurnToken_$21895", + "typeString": "contract IMintBurnToken" + } + }, + "visibility": "internal" + } + ], + "id": 19057, + "initialValue": { + "arguments": [ + { + "id": 19055, + "name": "_burnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19017, + "src": "17239:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 19054, + "name": "IMintBurnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 21895, + "src": "17224:14:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IMintBurnToken_$21895_$", + "typeString": "type(contract IMintBurnToken)" + } + }, + "id": 19056, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17224:26:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMintBurnToken_$21895", + "typeString": "contract IMintBurnToken" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17192:58:16" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 19061, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "17326:3:16", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 19062, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "17326:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [ + { + "id": 19065, + "name": "_localMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19048, + "src": "17362:12:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + ], + "id": 19064, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "17354:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 19063, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17354:7:16", + "typeDescriptions": {} + } + }, + "id": 19066, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17354:21:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 19067, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19011, + "src": "17393:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 19059, + "name": "_mintBurnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19053, + "src": "17281:14:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMintBurnToken_$21895", + "typeString": "contract IMintBurnToken" + } + }, + "id": 19060, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 23286, + "src": "17281:27:16", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) external returns (bool)" + } + }, + "id": 19068, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17281:133:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5472616e73666572206f7065726174696f6e206661696c6564", + "id": 19069, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17428:27:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1973b3139a4440c91f9f817c44b787c325442831fd10ad94d028af60e546dee4", + "typeString": "literal_string \"Transfer operation failed\"" + }, + "value": "Transfer operation failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1973b3139a4440c91f9f817c44b787c325442831fd10ad94d028af60e546dee4", + "typeString": "literal_string \"Transfer operation failed\"" + } + ], + "id": 19058, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "17260:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 19070, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17260:205:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 19071, + "nodeType": "ExpressionStatement", + "src": "17260:205:16" + }, + { + "expression": { + "arguments": [ + { + "id": 19075, + "name": "_burnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19017, + "src": "17493:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 19076, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19011, + "src": "17505:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 19072, + "name": "_localMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19048, + "src": "17475:12:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "id": 19074, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "burn", + "nodeType": "MemberAccess", + "referencedDeclaration": 21920, + "src": "17475:17:16", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256) external" + } + }, + "id": 19077, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17475:38:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 19078, + "nodeType": "ExpressionStatement", + "src": "17475:38:16" + }, + { + "assignments": [ + 19080 + ], + "declarations": [ + { + "constant": false, + "id": 19080, + "mutability": "mutable", + "name": "_burnMessage", + "nodeType": "VariableDeclaration", + "scope": 19120, + "src": "17555:25:16", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 19079, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "17555:5:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 19096, + "initialValue": { + "arguments": [ + { + "id": 19083, + "name": "messageBodyVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18534, + "src": "17623:18:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "arguments": [ + { + "id": 19086, + "name": "_burnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19017, + "src": "17680:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 19084, + "name": "Message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19815, + "src": "17655:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Message_$19815_$", + "typeString": "type(library Message)" + } + }, + "id": 19085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "addressToBytes32", + "nodeType": "MemberAccess", + "referencedDeclaration": 19771, + "src": "17655:24:16", + "typeDescriptions": { + "typeIdentifier": "t_function_delegatecall_pure$_t_address_$returns$_t_bytes32_$", + "typeString": "function (address) pure returns (bytes32)" + } + }, + "id": 19087, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17655:36:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 19088, + "name": "_mintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19015, + "src": "17705:14:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 19089, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19011, + "src": "17733:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "expression": { + "id": 19092, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "17779:3:16", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 19093, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "17779:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "expression": { + "id": 19090, + "name": "Message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19815, + "src": "17754:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Message_$19815_$", + "typeString": "type(library Message)" + } + }, + "id": 19091, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "addressToBytes32", + "nodeType": "MemberAccess", + "referencedDeclaration": 19771, + "src": "17754:24:16", + "typeDescriptions": { + "typeIdentifier": "t_function_delegatecall_pure$_t_address_$returns$_t_bytes32_$", + "typeString": "function (address) pure returns (bytes32)" + } + }, + "id": 19094, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17754:36:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 19081, + "name": "BurnMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 22108, + "src": "17583:11:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BurnMessage_$22108_$", + "typeString": "type(library BurnMessage)" + } + }, + "id": 19082, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_formatMessage", + "nodeType": "MemberAccess", + "referencedDeclaration": 22006, + "src": "17583:26:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_bytes32_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (uint32,bytes32,bytes32,uint256,bytes32) pure returns (bytes memory)" + } + }, + "id": 19095, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17583:217:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17555:245:16" + }, + { + "assignments": [ + 19098 + ], + "declarations": [ + { + "constant": false, + "id": 19098, + "mutability": "mutable", + "name": "_nonceReserved", + "nodeType": "VariableDeclaration", + "scope": 19120, + "src": "17811:21:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 19097, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "17811:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "id": 19105, + "initialValue": { + "arguments": [ + { + "id": 19100, + "name": "_destinationDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19013, + "src": "17875:18:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 19101, + "name": "_destinationTokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19042, + "src": "17907:26:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 19102, + "name": "_destinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19019, + "src": "17947:18:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 19103, + "name": "_burnMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19080, + "src": "17979:12:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 19099, + "name": "_sendDepositForBurnMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19160, + "src": "17835:26:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_uint64_$", + "typeString": "function (uint32,bytes32,bytes32,bytes memory) returns (uint64)" + } + }, + "id": 19104, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17835:166:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17811:190:16" + }, + { + "eventCall": { + "arguments": [ + { + "id": 19107, + "name": "_nonceReserved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19098, + "src": "18045:14:16", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 19108, + "name": "_burnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19017, + "src": "18073:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 19109, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19011, + "src": "18097:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 19110, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "18118:3:16", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 19111, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "18118:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 19112, + "name": "_mintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19015, + "src": "18142:14:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 19113, + "name": "_destinationDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19013, + "src": "18170:18:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 19114, + "name": "_destinationTokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19042, + "src": "18202:26:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 19115, + "name": "_destinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19019, + "src": "18242:18:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 19106, + "name": "DepositForBurn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18485, + "src": "18017:14:16", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$_t_address_$_t_uint256_$_t_address_$_t_bytes32_$_t_uint32_$_t_bytes32_$_t_bytes32_$returns$__$", + "typeString": "function (uint64,address,uint256,address,bytes32,uint32,bytes32,bytes32)" + } + }, + "id": 19116, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18017:253:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 19117, + "nodeType": "EmitStatement", + "src": "18012:258:16" + }, + { + "expression": { + "id": 19118, + "name": "_nonceReserved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19098, + "src": "18288:14:16", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 19023, + "id": 19119, + "nodeType": "Return", + "src": "18281:21:16" + } + ] + }, + "documentation": { + "id": 19009, + "nodeType": "StructuredDocumentation", + "src": "16098:553:16", + "text": " @notice Deposits and burns tokens from sender to be minted on destination domain.\n Emits a `DepositForBurn` event.\n @param _amount amount of tokens to burn (must be non-zero)\n @param _destinationDomain destination domain\n @param _mintRecipient address of mint recipient on destination domain\n @param _burnToken address of contract to burn deposited tokens, on local domain\n @param _destinationCaller caller on the destination domain, as bytes32\n @return nonce unique nonce reserved by message" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_depositForBurn", + "parameters": { + "id": 19020, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 19011, + "mutability": "mutable", + "name": "_amount", + "nodeType": "VariableDeclaration", + "scope": 19121, + "src": "16690:15:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 19010, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16690:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 19013, + "mutability": "mutable", + "name": "_destinationDomain", + "nodeType": "VariableDeclaration", + "scope": 19121, + "src": "16715:25:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 19012, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "16715:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 19015, + "mutability": "mutable", + "name": "_mintRecipient", + "nodeType": "VariableDeclaration", + "scope": 19121, + "src": "16750:22:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 19014, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "16750:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 19017, + "mutability": "mutable", + "name": "_burnToken", + "nodeType": "VariableDeclaration", + "scope": 19121, + "src": "16782:18:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 19016, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16782:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 19019, + "mutability": "mutable", + "name": "_destinationCaller", + "nodeType": "VariableDeclaration", + "scope": 19121, + "src": "16810:26:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 19018, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "16810:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "16680:162:16" + }, + "returnParameters": { + "id": 19023, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 19022, + "mutability": "mutable", + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 19121, + "src": "16861:12:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 19021, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "16861:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "16860:14:16" + }, + "scope": 19296, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 19160, + "nodeType": "FunctionDefinition", + "src": "19041:780:16", + "nodes": [], + "body": { + "id": 19159, + "nodeType": "Block", + "src": "19265:556:16", + "nodes": [], + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 19140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 19135, + "name": "_destinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19128, + "src": "19279:18:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 19138, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19309:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 19137, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "19301:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 19136, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "19301:7:16", + "typeDescriptions": {} + } + }, + "id": 19139, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19301:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "19279:32:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 19157, + "nodeType": "Block", + "src": "19542:273:16", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 19151, + "name": "_destinationDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19124, + "src": "19646:18:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 19152, + "name": "_destinationTokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19126, + "src": "19686:26:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 19153, + "name": "_destinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19128, + "src": "19734:18:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 19154, + "name": "_burnMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19130, + "src": "19774:12:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 19149, + "name": "localMessageTransmitter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18532, + "src": "19579:23:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMessageTransmitter_$21292", + "typeString": "contract IMessageTransmitter" + } + }, + "id": 19150, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sendMessageWithCaller", + "nodeType": "MemberAccess", + "referencedDeclaration": 22523, + "src": "19579:45:16", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_uint64_$", + "typeString": "function (uint32,bytes32,bytes32,bytes memory) external returns (uint64)" + } + }, + "id": 19155, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19579:225:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 19134, + "id": 19156, + "nodeType": "Return", + "src": "19556:248:16" + } + ] + }, + "id": 19158, + "nodeType": "IfStatement", + "src": "19275:540:16", + "trueBody": { + "id": 19148, + "nodeType": "Block", + "src": "19313:223:16", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 19143, + "name": "_destinationDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19124, + "src": "19407:18:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 19144, + "name": "_destinationTokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19126, + "src": "19447:26:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 19145, + "name": "_burnMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19130, + "src": "19495:12:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 19141, + "name": "localMessageTransmitter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18532, + "src": "19350:23:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMessageTransmitter_$21292", + "typeString": "contract IMessageTransmitter" + } + }, + "id": 19142, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sendMessage", + "nodeType": "MemberAccess", + "referencedDeclaration": 22509, + "src": "19350:35:16", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_uint64_$", + "typeString": "function (uint32,bytes32,bytes memory) external returns (uint64)" + } + }, + "id": 19146, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19350:175:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 19134, + "id": 19147, + "nodeType": "Return", + "src": "19327:198:16" + } + ] + } + } + ] + }, + "documentation": { + "id": 19122, + "nodeType": "StructuredDocumentation", + "src": "18315:721:16", + "text": " @notice Sends a BurnMessage through the local message transmitter\n @dev calls local message transmitter's sendMessage() function if `_destinationCaller` == bytes32(0),\n or else calls sendMessageWithCaller().\n @param _destinationDomain destination domain\n @param _destinationTokenMessenger address of registered TokenMessenger contract on destination domain, as bytes32\n @param _destinationCaller caller on the destination domain, as bytes32. If `_destinationCaller` == bytes32(0),\n any address can call receiveMessage() on destination domain.\n @param _burnMessage formatted BurnMessage bytes (message body)\n @return nonce unique nonce reserved by message" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_sendDepositForBurnMessage", + "parameters": { + "id": 19131, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 19124, + "mutability": "mutable", + "name": "_destinationDomain", + "nodeType": "VariableDeclaration", + "scope": 19160, + "src": "19086:25:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 19123, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "19086:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 19126, + "mutability": "mutable", + "name": "_destinationTokenMessenger", + "nodeType": "VariableDeclaration", + "scope": 19160, + "src": "19121:34:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 19125, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "19121:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 19128, + "mutability": "mutable", + "name": "_destinationCaller", + "nodeType": "VariableDeclaration", + "scope": 19160, + "src": "19165:26:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 19127, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "19165:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 19130, + "mutability": "mutable", + "name": "_burnMessage", + "nodeType": "VariableDeclaration", + "scope": 19160, + "src": "19201:25:16", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 19129, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "19201:5:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "19076:156:16" + }, + "returnParameters": { + "id": 19134, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 19133, + "mutability": "mutable", + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 19160, + "src": "19251:12:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 19132, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "19251:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "19250:14:16" + }, + "scope": 19296, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 19197, + "nodeType": "FunctionDefinition", + "src": "20174:473:16", + "nodes": [], + "body": { + "id": 19196, + "nodeType": "Block", + "src": "20360:287:16", + "nodes": [], + "statements": [ + { + "assignments": [ + 19175 + ], + "declarations": [ + { + "constant": false, + "id": 19175, + "mutability": "mutable", + "name": "_minter", + "nodeType": "VariableDeclaration", + "scope": 19196, + "src": "20370:20:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + }, + "typeName": { + "id": 19174, + "name": "ITokenMinter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21937, + "src": "20370:12:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "visibility": "internal" + } + ], + "id": 19179, + "initialValue": { + "arguments": [ + { + "id": 19177, + "name": "_tokenMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19163, + "src": "20406:12:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 19176, + "name": "ITokenMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 21937, + "src": "20393:12:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ITokenMinter_$21937_$", + "typeString": "type(contract ITokenMinter)" + } + }, + "id": 19178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20393:26:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20370:49:16" + }, + { + "assignments": [ + 19181 + ], + "declarations": [ + { + "constant": false, + "id": 19181, + "mutability": "mutable", + "name": "_mintToken", + "nodeType": "VariableDeclaration", + "scope": 19196, + "src": "20429:18:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 19180, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20429:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 19189, + "initialValue": { + "arguments": [ + { + "id": 19184, + "name": "_remoteDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19165, + "src": "20476:13:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 19185, + "name": "_burnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19167, + "src": "20503:10:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 19186, + "name": "_mintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19169, + "src": "20527:14:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 19187, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19171, + "src": "20555:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 19182, + "name": "_minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19175, + "src": "20450:7:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "id": 19183, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mint", + "nodeType": "MemberAccess", + "referencedDeclaration": 21912, + "src": "20450:12:16", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$_t_address_$_t_uint256_$returns$_t_address_$", + "typeString": "function (uint32,bytes32,address,uint256) external returns (address)" + } + }, + "id": 19188, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20450:122:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20429:143:16" + }, + { + "eventCall": { + "arguments": [ + { + "id": 19191, + "name": "_mintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19169, + "src": "20604:14:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 19192, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19171, + "src": "20620:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 19193, + "name": "_mintToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19181, + "src": "20629:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 19190, + "name": "MintAndWithdraw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18494, + "src": "20588:15:16", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (address,uint256,address)" + } + }, + "id": 19194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20588:52:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 19195, + "nodeType": "EmitStatement", + "src": "20583:57:16" + } + ] + }, + "documentation": { + "id": 19161, + "nodeType": "StructuredDocumentation", + "src": "19827:342:16", + "text": " @notice Mints tokens to a recipient\n @param _tokenMinter address of TokenMinter contract\n @param _remoteDomain domain where burned tokens originate from\n @param _burnToken address of token burned\n @param _mintRecipient recipient address of minted tokens\n @param _amount amount of minted tokens" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_mintAndWithdraw", + "parameters": { + "id": 19172, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 19163, + "mutability": "mutable", + "name": "_tokenMinter", + "nodeType": "VariableDeclaration", + "scope": 19197, + "src": "20209:20:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 19162, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20209:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 19165, + "mutability": "mutable", + "name": "_remoteDomain", + "nodeType": "VariableDeclaration", + "scope": 19197, + "src": "20239:20:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 19164, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "20239:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 19167, + "mutability": "mutable", + "name": "_burnToken", + "nodeType": "VariableDeclaration", + "scope": 19197, + "src": "20269:18:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 19166, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "20269:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 19169, + "mutability": "mutable", + "name": "_mintRecipient", + "nodeType": "VariableDeclaration", + "scope": 19197, + "src": "20297:22:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 19168, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20297:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 19171, + "mutability": "mutable", + "name": "_amount", + "nodeType": "VariableDeclaration", + "scope": 19197, + "src": "20329:15:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 19170, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20329:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "20199:151:16" + }, + "returnParameters": { + "id": 19173, + "nodeType": "ParameterList", + "parameters": [], + "src": "20360:0:16" + }, + "scope": 19296, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 19224, + "nodeType": "FunctionDefinition", + "src": "20934:295:16", + "nodes": [], + "body": { + "id": 19223, + "nodeType": "Block", + "src": "21044:185:16", + "nodes": [], + "statements": [ + { + "assignments": [ + 19206 + ], + "declarations": [ + { + "constant": false, + "id": 19206, + "mutability": "mutable", + "name": "_tokenMessenger", + "nodeType": "VariableDeclaration", + "scope": 19223, + "src": "21054:23:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 19205, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "21054:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 19210, + "initialValue": { + "baseExpression": { + "id": 19207, + "name": "remoteTokenMessengers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18540, + "src": "21080:21:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", + "typeString": "mapping(uint32 => bytes32)" + } + }, + "id": 19209, + "indexExpression": { + "id": 19208, + "name": "_domain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19200, + "src": "21102:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "21080:30:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21054:56:16" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 19217, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 19212, + "name": "_tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19206, + "src": "21128:15:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 19215, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21155:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 19214, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "21147:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 19213, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "21147:7:16", + "typeDescriptions": {} + } + }, + "id": 19216, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21147:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "21128:29:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4e6f20546f6b656e4d657373656e67657220666f7220646f6d61696e", + "id": 19218, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21159:30:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ea596e3591366966a24119837f7e601de32678d024b15f17edcd1be591c01ab8", + "typeString": "literal_string \"No TokenMessenger for domain\"" + }, + "value": "No TokenMessenger for domain" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ea596e3591366966a24119837f7e601de32678d024b15f17edcd1be591c01ab8", + "typeString": "literal_string \"No TokenMessenger for domain\"" + } + ], + "id": 19211, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "21120:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 19219, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21120:70:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 19220, + "nodeType": "ExpressionStatement", + "src": "21120:70:16" + }, + { + "expression": { + "id": 19221, + "name": "_tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19206, + "src": "21207:15:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 19204, + "id": 19222, + "nodeType": "Return", + "src": "21200:22:16" + } + ] + }, + "documentation": { + "id": 19198, + "nodeType": "StructuredDocumentation", + "src": "20653:276:16", + "text": " @notice return the remote TokenMessenger for the given `_domain` if one exists, else revert.\n @param _domain The domain for which to get the remote TokenMessenger\n @return _tokenMessenger The address of the TokenMessenger on `_domain` as bytes32" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getRemoteTokenMessenger", + "parameters": { + "id": 19201, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 19200, + "mutability": "mutable", + "name": "_domain", + "nodeType": "VariableDeclaration", + "scope": 19224, + "src": "20968:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 19199, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "20968:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "20967:16:16" + }, + "returnParameters": { + "id": 19204, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 19203, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 19224, + "src": "21031:7:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 19202, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "21031:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "21030:9:16" + }, + "scope": 19296, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 19246, + "nodeType": "FunctionDefinition", + "src": "21370:179:16", + "nodes": [], + "body": { + "id": 19245, + "nodeType": "Block", + "src": "21434:115:16", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 19239, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 19233, + "name": "localMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18536, + "src": "21460:11:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + ], + "id": 19232, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "21452:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 19231, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21452:7:16", + "typeDescriptions": {} + } + }, + "id": 19234, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21452:20:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 19237, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21484:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 19236, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "21476:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 19235, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21476:7:16", + "typeDescriptions": {} + } + }, + "id": 19238, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21476:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "21452:34:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4c6f63616c206d696e746572206973206e6f7420736574", + "id": 19240, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21488:25:16", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_811a8899febceceb13803550de97ff67998ab252c9188d8caa08994fa886235a", + "typeString": "literal_string \"Local minter is not set\"" + }, + "value": "Local minter is not set" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_811a8899febceceb13803550de97ff67998ab252c9188d8caa08994fa886235a", + "typeString": "literal_string \"Local minter is not set\"" + } + ], + "id": 19230, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "21444:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 19241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21444:70:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 19242, + "nodeType": "ExpressionStatement", + "src": "21444:70:16" + }, + { + "expression": { + "id": 19243, + "name": "localMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18536, + "src": "21531:11:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "functionReturnParameters": 19229, + "id": 19244, + "nodeType": "Return", + "src": "21524:18:16" + } + ] + }, + "documentation": { + "id": 19225, + "nodeType": "StructuredDocumentation", + "src": "21235:130:16", + "text": " @notice return the local minter address if it is set, else revert.\n @return local minter as ITokenMinter." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getLocalMinter", + "parameters": { + "id": 19226, + "nodeType": "ParameterList", + "parameters": [], + "src": "21394:2:16" + }, + "returnParameters": { + "id": 19229, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 19228, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 19246, + "src": "21420:12:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + }, + "typeName": { + "id": 19227, + "name": "ITokenMinter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21937, + "src": "21420:12:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMinter_$21937", + "typeString": "contract ITokenMinter" + } + }, + "visibility": "internal" + } + ], + "src": "21419:14:16" + }, + "scope": 19296, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 19270, + "nodeType": "FunctionDefinition", + "src": "21956:261:16", + "nodes": [], + "body": { + "id": 19269, + "nodeType": "Block", + "src": "22087:130:16", + "nodes": [], + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 19267, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 19261, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 19256, + "name": "_tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19251, + "src": "22116:15:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 19259, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22143:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 19258, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "22135:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 19257, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "22135:7:16", + "typeDescriptions": {} + } + }, + "id": 19260, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22135:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "22116:29:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 19266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 19262, + "name": "remoteTokenMessengers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18540, + "src": "22161:21:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", + "typeString": "mapping(uint32 => bytes32)" + } + }, + "id": 19264, + "indexExpression": { + "id": 19263, + "name": "_domain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19249, + "src": "22183:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "22161:30:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 19265, + "name": "_tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 19251, + "src": "22195:15:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "22161:49:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "22116:94:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 19255, + "id": 19268, + "nodeType": "Return", + "src": "22097:113:16" + } + ] + }, + "documentation": { + "id": 19247, + "nodeType": "StructuredDocumentation", + "src": "21555:396:16", + "text": " @notice Return true if the given remote domain and TokenMessenger is registered\n on this TokenMessenger.\n @param _domain The remote domain of the message.\n @param _tokenMessenger The address of the TokenMessenger on remote domain.\n @return true if a remote TokenMessenger is registered for `_domain` and `_tokenMessenger`,\n on this TokenMessenger." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isRemoteTokenMessenger", + "parameters": { + "id": 19252, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 19249, + "mutability": "mutable", + "name": "_domain", + "nodeType": "VariableDeclaration", + "scope": 19270, + "src": "21989:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 19248, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "21989:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 19251, + "mutability": "mutable", + "name": "_tokenMessenger", + "nodeType": "VariableDeclaration", + "scope": 19270, + "src": "22005:23:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 19250, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "22005:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "21988:41:16" + }, + "returnParameters": { + "id": 19255, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 19254, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 19270, + "src": "22077:4:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 19253, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "22077:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "22076:6:16" + }, + "scope": 19296, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 19295, + "nodeType": "FunctionDefinition", + "src": "22414:211:16", + "nodes": [], + "body": { + "id": 19294, + "nodeType": "Block", + "src": "22481:144:16", + "nodes": [], + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 19292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 19284, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 19278, + "name": "localMessageTransmitter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18532, + "src": "22518:23:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMessageTransmitter_$21292", + "typeString": "contract IMessageTransmitter" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IMessageTransmitter_$21292", + "typeString": "contract IMessageTransmitter" + } + ], + "id": 19277, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "22510:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 19276, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22510:7:16", + "typeDescriptions": {} + } + }, + "id": 19279, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22510:32:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 19282, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22554:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 19281, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "22546:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 19280, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22546:7:16", + "typeDescriptions": {} + } + }, + "id": 19283, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22546:10:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "22510:46:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 19291, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 19285, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "22572:3:16", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 19286, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "22572:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 19289, + "name": "localMessageTransmitter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 18532, + "src": "22594:23:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMessageTransmitter_$21292", + "typeString": "contract IMessageTransmitter" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IMessageTransmitter_$21292", + "typeString": "contract IMessageTransmitter" + } + ], + "id": 19288, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "22586:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 19287, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22586:7:16", + "typeDescriptions": {} + } + }, + "id": 19290, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22586:32:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "22572:46:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "22510:108:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 19275, + "id": 19293, + "nodeType": "Return", + "src": "22491:127:16" + } + ] + }, + "documentation": { + "id": 19271, + "nodeType": "StructuredDocumentation", + "src": "22223:186:16", + "text": " @notice Returns true if the message sender is the local registered MessageTransmitter\n @return true if message sender is the registered local message transmitter" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isLocalMessageTransmitter", + "parameters": { + "id": 19272, + "nodeType": "ParameterList", + "parameters": [], + "src": "22449:2:16" + }, + "returnParameters": { + "id": 19275, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 19274, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 19295, + "src": "22475:4:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 19273, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "22475:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "22474:6:16" + }, + "scope": 19296, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 18463, + "name": "IMessageHandler", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21282, + "src": "1082:15:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMessageHandler_$21282", + "typeString": "contract IMessageHandler" + } + }, + "id": 18464, + "nodeType": "InheritanceSpecifier", + "src": "1082:15:16" + }, + { + "baseName": { + "id": 18465, + "name": "Rescuable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 21872, + "src": "1099:9:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Rescuable_$21872", + "typeString": "contract Rescuable" + } + }, + "id": 18466, + "nodeType": "InheritanceSpecifier", + "src": "1099:9:16" + } + ], + "contractDependencies": [ + 21282, + 21872, + 23227, + 23617, + 24291 + ], + "contractKind": "contract", + "documentation": { + "id": 18462, + "nodeType": "StructuredDocumentation", + "src": "918:136:16", + "text": " @title TokenMessenger\n @notice Sends messages and receives messages to/from MessageTransmitters\n and to/from TokenMinters" + }, + "fullyImplemented": true, + "linearizedBaseContracts": [ + 19296, + 21872, + 23227, + 23617, + 24291, + 21282 + ], + "name": "TokenMessenger", + "scope": 19297 + } + ] + }, + "id": 16 +} \ No newline at end of file diff --git a/typescript/example/depositForBurn.ts b/typescript/example/depositForBurn.ts new file mode 100644 index 0000000..0e60872 --- /dev/null +++ b/typescript/example/depositForBurn.ts @@ -0,0 +1,121 @@ +/** + * Copyright (c) 2024, Circle Internet Group, Inc. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + Account, + AccountAddress, + Aptos, + AptosConfig, + Ed25519PrivateKey, + Network, + U32, + U64, + UserTransactionResponse, +} from "@aptos-labs/ts-sdk"; +import { readFileSync } from "fs"; +import Web3 from "web3"; + +// Aptos Testnet Message Transmitter +const MESSAGE_TRANSMITTER_PACKAGE_ID = "0x81e86cebf457a0c6004f35bd648a2794698f52e0dde09a48619dcd3d4cc23d9"; +// Aptos Testnet Stablecoin object +const BURN_TOKEN = "0x69091fbab5f7d635ee7ac5098cf0c1efbe31d68fec0f2cd565e8d168daf52832"; +// Base Testnet Message Transmitter +const EVM_MESSAGE_TRANSMITTER_ADDRESS = "0x7865fAfC2db2093669d92c0F33AeEF291086BEFD"; +const EVM_PRIVATE_KEY = process.env.EVM_PRIVATE_KEY; +const APTOS_PRIVATE_KEY = process.env.APTOS_PRIVATE_KEY; +const EVM_RPC_URL = process.env.EVM_RPC_URL; + +// Example script for transferring 1 USDC from APTOS to BASE +const main = async () => { + const web3 = new Web3(EVM_RPC_URL); + const evmSigner = web3.eth.accounts.privateKeyToAccount(EVM_PRIVATE_KEY); + web3.eth.accounts.wallet.add(evmSigner); + + const aptosClient = new Aptos(new AptosConfig({ network: Network.TESTNET })); + const userAccount = Account.fromPrivateKey({ privateKey: new Ed25519PrivateKey(APTOS_PRIVATE_KEY) }); + + // Create a transaction with deposit for burn script + const buffer = readFileSync("typescript/example/precompiled-move-scripts/testnet/deposit_for_burn.mv"); + const bytecode = Uint8Array.from(buffer); + const amount = new U64(1); + const destinationDomain = new U32(6); + const burnToken = AccountAddress.from(BURN_TOKEN); + const mintRecipient = AccountAddress.from(evmSigner.address); + const functionArguments: Array = [amount, destinationDomain, mintRecipient, burnToken]; + const transaction = await aptosClient.transaction.build.simple({ + sender: userAccount.accountAddress, + data: { + bytecode, + functionArguments, + }, + }); + const pendingTxn = await aptosClient.signAndSubmitTransaction({ + signer: userAccount, + transaction, + }); + const depositForBurnTx = await aptosClient.waitForTransaction({ transactionHash: pendingTxn.hash }); + console.log( + `Deposit for burn transaction completed successfully: https://explorer.aptoslabs.com/txn/${depositForBurnTx.hash}` + ); + + // Fetch the event data from the transaction + const messageSentEvent = (depositForBurnTx as UserTransactionResponse).events.find( + (e: any) => e.type === `${MESSAGE_TRANSMITTER_PACKAGE_ID}::message_transmitter::MessageSent` + ); + + // Wait for attestation + const messageBytes = messageSentEvent.data.message; + const messageHash = web3.utils.keccak256(messageBytes); + let attestationResponse = { status: "pending", attestation: "" }; + console.log(`Waiting for attestation: https://iris-api-sandbox.circle.com/attestations/${messageHash}`); + while (attestationResponse.status != "complete") { + const response = await fetch(`https://iris-api-sandbox.circle.com/attestations/${messageHash}`); + attestationResponse = await response.json(); + await new Promise((r) => setTimeout(r, 5_000)); + } + console.log(`Message attested: https://iris-api-sandbox.circle.com/attestations/${messageHash}`); + + // Use the attestation and message data to receive the message on the EVM + const attestationSignature = attestationResponse.attestation; + const messageTransmitterInterface = JSON.parse( + readFileSync("typescript/example/abi/MessageTransmitter.json").toString() + ); + const evmMessageTransmitterContract = new web3.eth.Contract( + messageTransmitterInterface.abi, + EVM_MESSAGE_TRANSMITTER_ADDRESS, + { + from: evmSigner.address, + } + ); + const receiveTxGas = await evmMessageTransmitterContract.methods + .receiveMessage(messageBytes, attestationSignature) + .estimateGas(); + const receiveTx = await evmMessageTransmitterContract.methods + .receiveMessage(messageBytes, attestationSignature) + .send({ gas: receiveTxGas.toString() }); + + console.log(`Wait for ReceiveTx to complete: https://sepolia.basescan.org/tx/${receiveTx.transactionHash}`); + let receiveTxReceipt = { transactionHash: receiveTx.transactionHash, status: BigInt(0) }; + while (receiveTxReceipt != null && receiveTxReceipt.status != BigInt(1)) { + receiveTxReceipt = await web3.eth.getTransactionReceipt(receiveTx.transactionHash); + await new Promise((r) => setTimeout(r, 4_000)); + } + console.log(`ReceiveTxReceipt: https://sepolia.basescan.org/tx/${receiveTxReceipt.transactionHash}`); +}; + +main(); diff --git a/typescript/example/precompiled-move-scripts/testnet/deposit_for_burn.mv b/typescript/example/precompiled-move-scripts/testnet/deposit_for_burn.mv new file mode 100644 index 0000000..fb5c32b Binary files /dev/null and b/typescript/example/precompiled-move-scripts/testnet/deposit_for_burn.mv differ diff --git a/typescript/example/precompiled-move-scripts/testnet/deposit_for_burn_with_caller.mv b/typescript/example/precompiled-move-scripts/testnet/deposit_for_burn_with_caller.mv new file mode 100644 index 0000000..c2a35aa Binary files /dev/null and b/typescript/example/precompiled-move-scripts/testnet/deposit_for_burn_with_caller.mv differ diff --git a/typescript/example/precompiled-move-scripts/testnet/handle_receive_message.mv b/typescript/example/precompiled-move-scripts/testnet/handle_receive_message.mv new file mode 100644 index 0000000..e432b91 Binary files /dev/null and b/typescript/example/precompiled-move-scripts/testnet/handle_receive_message.mv differ diff --git a/typescript/example/precompiled-move-scripts/testnet/replace_deposit_for_burn.mv b/typescript/example/precompiled-move-scripts/testnet/replace_deposit_for_burn.mv new file mode 100644 index 0000000..a84204f Binary files /dev/null and b/typescript/example/precompiled-move-scripts/testnet/replace_deposit_for_burn.mv differ diff --git a/typescript/example/receiveMessage.ts b/typescript/example/receiveMessage.ts new file mode 100644 index 0000000..6fc8dd3 --- /dev/null +++ b/typescript/example/receiveMessage.ts @@ -0,0 +1,124 @@ +/** + * Copyright (c) 2024, Circle Internet Group, Inc. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Web3 } from "web3"; +import fs from "fs"; +import { + Account, + Aptos, + AptosConfig, + Ed25519PrivateKey, + Network, + MoveVector +} from "@aptos-labs/ts-sdk"; + +const USDC_AMOUNT = 1; +const APTOS_DOMAIN = 9; + +const EVM_TOKEN_MESSENGER_CONTRACT_ADDRESS = "0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5"; // Base testnet +const USDC_ETH_CONTRACT_ADDRESS = "0x036CbD53842c5426634e7929541eC2318f3dCF7e"; +const EVM_PRIVATE_KEY = process.env.EVM_PRIVATE_KEY; +const APTOS_PRIVATE_KEY = process.env.APTOS_PRIVATE_KEY; +const EVM_RPC_URL = process.env.EVM_RPC_URL; + +const waitForTransaction = async(web3: Web3, txHash: string) => { + let transactionReceipt = await web3.eth.getTransactionReceipt(txHash); + while(transactionReceipt != null && transactionReceipt.status === BigInt(0)) { + transactionReceipt = await web3.eth.getTransactionReceipt(txHash); + await new Promise(r => setTimeout(r, 4000)); + } + return transactionReceipt; +}; + + +/** + * // Example script for transferring 1 USDC from BASE to APTOS + */ +const main = async () => { + // EVM setup + const web3 = new Web3(new Web3.providers.HttpProvider(EVM_RPC_URL)); + const evmSigner = web3.eth.accounts.privateKeyToAccount(EVM_PRIVATE_KEY); + web3.eth.accounts.wallet.add(evmSigner); + + // Aptos setup + const aptosClient = new Aptos(new AptosConfig({ network: Network.TESTNET })); + const userAccount = Account.fromPrivateKey({ privateKey: new Ed25519PrivateKey(APTOS_PRIVATE_KEY) }); + + // initialize contracts using address and ABI + const tokenMessengerInterface = JSON.parse( + fs.readFileSync("typescript/example/abi/TokenMessenger.json").toString() + ); + const usdcInterface = JSON.parse(fs.readFileSync("typescript/example/abi/FiatTokenV2_1.json").toString()); + + const evmTokenMessengerContract = new web3.eth.Contract( + tokenMessengerInterface.abi, + EVM_TOKEN_MESSENGER_CONTRACT_ADDRESS, + { from: evmSigner.address } + ); + const usdcEthContract = new web3.eth.Contract(usdcInterface.abi, USDC_ETH_CONTRACT_ADDRESS, { from: evmSigner.address }); + + // STEP 1: Approve messenger contract to withdraw from our active eth address + const approveTxGas = await usdcEthContract.methods.approve(EVM_TOKEN_MESSENGER_CONTRACT_ADDRESS, USDC_AMOUNT).estimateGas(); + const approveTx = await usdcEthContract.methods.approve(EVM_TOKEN_MESSENGER_CONTRACT_ADDRESS, USDC_AMOUNT).send({ gas: approveTxGas.toString() }); + const approveTxReceipt = await waitForTransaction(web3, approveTx.transactionHash); + console.log(`ApproveTxReceipt: https://sepolia.basescan.org/tx/${approveTxReceipt.transactionHash}`); + + // STEP 2: Burn USDC on EVM + const burnTxGas = await evmTokenMessengerContract.methods.depositForBurn(USDC_AMOUNT, APTOS_DOMAIN, userAccount.accountAddress.toString(), USDC_ETH_CONTRACT_ADDRESS).estimateGas(); + const burnTx = await evmTokenMessengerContract.methods.depositForBurn(USDC_AMOUNT, APTOS_DOMAIN, userAccount.accountAddress.toString(), USDC_ETH_CONTRACT_ADDRESS).send({gas: burnTxGas.toString()}); + const burnTxReceipt = await waitForTransaction(web3, burnTx.transactionHash); + console.log(`DepositForBurnTxReceipt: https://sepolia.basescan.org/tx/${burnTxReceipt.transactionHash}`); + + // STEP 3: Retrieve message bytes from logs + const transactionReceipt = await web3.eth.getTransactionReceipt(burnTx.transactionHash); + const eventTopic = web3.utils.keccak256('MessageSent(bytes)') + const log = transactionReceipt.logs.find((l) => l.topics[0] === eventTopic) + const messageBytes = web3.eth.abi.decodeParameters(['bytes'], log.data)[0] + const messageHash = web3.utils.keccak256(messageBytes as string); + + // STEP 4: Fetch attestation signature + let attestationResponse = {status: 'pending', attestation: ''}; + while(attestationResponse.status !== 'complete') { + const response = await fetch(`https://iris-api-sandbox.circle.com/attestations/${messageHash}`); + attestationResponse = await response.json() + await new Promise(r => setTimeout(r, 2000)); + } + console.log(`Message attested: https://iris-api-sandbox.circle.com/attestations/${messageHash}`); + + const attestationSignature = attestationResponse.attestation; + + // STEP 5: Use message bytes and signature to receive the usdc on Aptos + const bytecode = Uint8Array.from(fs.readFileSync("typescript/example/precompiled-move-scripts/testnet/handle_receive_message.mv")); + const functionArguments: Array = [MoveVector.U8(messageBytes as Buffer), MoveVector.U8(attestationSignature)]; + const transaction = await aptosClient.transaction.build.simple({ + sender: userAccount.accountAddress, + data: { + bytecode, + functionArguments, + }, + }); + const pendingTxn = await aptosClient.signAndSubmitTransaction({ + signer: userAccount, + transaction, + }); + const receiveMessageTx = await aptosClient.waitForTransaction({ transactionHash: pendingTxn.hash }); + console.log( + `Receive message transaction completed successfully: https://explorer.aptoslabs.com/txn/${receiveMessageTx.hash}` + ); +}; +main();