{
  "contractName": "ERC20Handler",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "bridgeAddress",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "_bridgeAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "_burnList",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "_contractWhitelist",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "_resourceIDToTokenContractAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "_tokenContractAddressToResourceID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "setBurnable",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "setResource",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "depositer",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "deposit",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "executeProposal",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"_bridgeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_burnList\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_contractWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_resourceIDToTokenContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_tokenContractAddressToResourceID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"depositer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"setBurnable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"setResource\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"ChainSafe Systems.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"bridgeAddress\":\"Contract address of previously deployed Bridge.\"}},\"deposit(bytes32,address,bytes)\":{\"details\":\"Depending if the corresponding {tokenAddress} for the parsed {resourceID} is marked true in {_burnList}, deposited tokens will be burned, if not, they will be locked.\",\"params\":{\"data\":\"Consists of {amount} padded to 32 bytes.\",\"depositer\":\"Address of account making the deposit in the Bridge contract.\",\"resourceID\":\"ResourceID used to find address of token to be used for deposit.\"},\"returns\":{\"_0\":\"an empty data.\"}},\"executeProposal(bytes32,bytes)\":{\"params\":{\"data\":\"Consists of {resourceID}, {amount}, {lenDestinationRecipientAddress}, and {destinationRecipientAddress} all padded to 32 bytes.\"}},\"setBurnable(address)\":{\"params\":{\"contractAddress\":\"Address of contract to be used when making or executing deposits.\"}},\"setResource(bytes32,address)\":{\"params\":{\"contractAddress\":\"Address of contract to be called when a deposit is made and a deposited is executed.\",\"resourceID\":\"ResourceID to be used when making deposits.\"}},\"withdraw(bytes)\":{\"params\":{\"data\":\"Consists of {tokenAddress}, {recipient}, and {amount} all padded to 32 bytes.\"}}},\"title\":\"Handles ERC20 deposits and deposit executions.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"deposit(bytes32,address,bytes)\":{\"notice\":\"A deposit is initiatied by making a deposit in the Bridge contract.Data passed into the function should be constructed as follows: amount                      uint256     bytes   0 - 32\"},\"executeProposal(bytes32,bytes)\":{\"notice\":\"Proposal execution should be initiated when a proposal is finalized in the Bridge contract. by a relayer on the deposit's destination chain.Data passed into the function should be constructed as follows: amount                                 uint256     bytes  0 - 32 destinationRecipientAddress length     uint256     bytes  32 - 64 destinationRecipientAddress            bytes       bytes  64 - END\"},\"setBurnable(address)\":{\"notice\":\"First verifies {contractAddress} is whitelisted, then sets {_burnList}[{contractAddress}] to true.\"},\"setResource(bytes32,address)\":{\"notice\":\"First verifies {_resourceIDToContractAddress}[{resourceID}] and {_contractAddressToResourceID}[{contractAddress}] are not already set, then sets {_resourceIDToContractAddress} with {contractAddress}, {_contractAddressToResourceID} with {resourceID}, and {_contractWhitelist} to true for {contractAddress}.\"},\"withdraw(bytes)\":{\"notice\":\"Used to manually release ERC20 tokens from ERC20Safe.Data passed into the function should be constructed as follows: tokenAddress                           address     bytes  0 - 32 recipient                              address     bytes  32 - 64 amount                                 uint        bytes  64 - 96\"}},\"notice\":\"This contract is intended to be used with the Bridge contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/handlers/ERC20Handler.sol\":\"ERC20Handler\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0x4fc155a2f7837603d69a13cfa481eb5e7f5e02cb77e2ec9edbac30986db37988\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0855147e38b5e36288a8df73b8da49132f14ec7abb19041b0c98872263643aaa\",\"dweb:/ipfs/QmSrSysyFUYQq7hbJaJXG7EyZW6ezDBzEJx3SABp6eiJSS\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"@openzeppelin/contracts/presets/ERC20PresetMinterPauser.sol\":{\"keccak256\":\"0xa7c607ed4a0b2bebb811a398838ce4b5165e490f420a06337478eb2ba8c90cfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7eaf468e140d3430711cb859fbb41b097093069a75bfe4ab19e515c59f8b78ea\",\"dweb:/ipfs/QmYvdoCh8TAX7ucpMZspPpHpQZSuNe8cQTrbZyUcy3caqc\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xca0c2396dbeb3503b51abf4248ebf77a1461edad513c01529df51850a012bee3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://991b44ff44e0496e8554a90f4c0512c28faed45104d40430019f3c67ea67740e\",\"dweb:/ipfs/Qmc3nRapVbcctELoZS5qe17zLkFB3bETBfwzCTMF1CSuGE\"]},\"@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0x9c0eb3b0e11d2480d49991dc384f1e5f9c9b9967cc81944d50916a9b9c6c4984\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e4033d778624992e86f0b6d801a4f6d7b5c0cd5c79c1296be90a051ad5f5af\",\"dweb:/ipfs/QmShYmkUqh6pDEeoWadZ24icmCr4C2Xys1uE5boivPmbwf\"]},\"@openzeppelin/contracts/token/ERC20/ERC20Pausable.sol\":{\"keccak256\":\"0xa22af140ae7ec1f8f2f3bed5869cd0d548dfaac66343f0efc7324ff34aaf1254\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fed479feda7354e89c095fde0927dcb581f460257bf93b7db54b2b902b4bbd48\",\"dweb:/ipfs/QmSDUhS2AQvTGXHwaxDgAXtwXKCgQh2kp1nwhwUgr2hQZK\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5f02220344881ce43204ae4a6281145a67bc52c2bb1290a791857df3d19d78f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24427744bd3e6cb73c17010119af12a318289c0253a4d9acb8576c9fb3797b08\",\"dweb:/ipfs/QmTLDqpKRBuxGxRAmjgXt9AkXyACW3MtKzi7PYjm5iMfGC\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://256c8c8af5eb072bc473226ab2b2187149b8fc04f5f4a4820db22527f5ce8e3c\",\"dweb:/ipfs/QmRvi5BhnL7Rxf85KrJhwM6RRhukm4tzoctRdgQEheNyiN\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]},\"@openzeppelin/contracts/utils/EnumerableSet.sol\":{\"keccak256\":\"0x1562cd9922fbf739edfb979f506809e2743789cbde3177515542161c3d04b164\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4580d57781513d98870d9738c7d39094336e0a70cdb90d68dad549c6ced466ec\",\"dweb:/ipfs/Qmf9YZzzRFuvMnav9dgmeRUpdYMMECiZX8w25sHWVbA18V\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0x212fb1b1d4beaf74354dad9bc329f44ee3c5375ef1c32acff76b4ecefc10f1d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d21c68cb321d1c8d0fa39fd9ecb6bbe3b2f26623b0f38af280a010c916c85f23\",\"dweb:/ipfs/Qmf2P51HRC4ekDHLYfbXu5SXR33gXrWtq6oKSmfyWqVRuC\"]},\"project:/contracts/ERC20Safe.sol\":{\"keccak256\":\"0x8f93dfbdf43c6ba17ef5742ff544a7f78b97ef66817fee1532f099a9fd57d194\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://58517fef09d9e89ce7dc685bf6d90b125155add35e3c9834b6859389047e7961\",\"dweb:/ipfs/Qma6q2ZMDaNKTa6D8Ppsoe71xWieABmPEeynU6nbkXTnKX\"]},\"project:/contracts/handlers/ERC20Handler.sol\":{\"keccak256\":\"0x58ca13fcca2f2e1897b3032e2b1f0809ffdccc8ae755a4836e06dd0cba135467\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://f46d73a42eb1bc3a2ca2b3d2effbfb34992bf3094a9516d53f0334cf1d5c7de4\",\"dweb:/ipfs/QmXohwhHAzSzgsCNg75erQHxq9qfP5LyouUesZLzCQ6Rf2\"]},\"project:/contracts/handlers/HandlerHelpers.sol\":{\"keccak256\":\"0x9418d0646c373e028595a4a3abf5ac93948ea64efa031f1531c70a0500882d09\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://43e30989056cc8c5f0d2a26cb3a7e8a5d0d51dd2c832fb8d751c353226254871\",\"dweb:/ipfs/QmRpXPeLz7Qjh5qxMW4PyC8qkjrpEJCeCiqfobZyg28y6S\"]},\"project:/contracts/interfaces/IDepositExecute.sol\":{\"keccak256\":\"0x3623f906ae6f354cbf27ffd4eeccbfc2c3baa94783c5dd854b2e0f50db2a7c8d\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://26f8ddafd8655375eeb861a033fe390b3235c4f8de9a54e0524b91d2d1992674\",\"dweb:/ipfs/QmUAsxc8j4UdaDZ5HVp73kAwLpgTqqrgZG1sX86iRKZTqv\"]},\"project:/contracts/interfaces/IERCHandler.sol\":{\"keccak256\":\"0x4384276611a789db6481e1158d92c280fe5990ec0c375df30dd5e8f8a97cbb4c\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://3af488536c6d8f6b3090ca9b5fa54718941604a30f58bd66db641a6599a9f296\",\"dweb:/ipfs/QmSm988tQV4XtkCQpTbf2SbdCHp8AcjYZhQLhftPFXrUf2\"]}},\"version\":1}",
  "bytecode": "0x60a060405234801561001057600080fd5b50604051610c7e380380610c7e83398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c610bea610094600039806101ff528061042b5250610bea6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80637f79bea8116100665780637f79bea81461011c578063b07e54bb1461012f578063b8fa37361461014f578063c8ba6c8714610162578063e248cff2146101825761009e565b806307b7ed99146100a35780630968f264146100b85780630a6d55d8146100cb578063318c136e146100f45780636a70d081146100fc575b600080fd5b6100b66100b136600461073b565b610195565b005b6100b66100c63660046108ab565b6101a9565b6100de6100d93660046107c0565b6101e2565b6040516100eb9190610983565b60405180910390f35b6100de6101fd565b61010f61010a36600461073b565b610221565b6040516100eb91906109d4565b61010f61012a36600461073b565b610236565b61014261013d366004610807565b61024b565b6040516100eb91906109e8565b6100b661015d3660046107d8565b6102fb565b61017561017036600461073b565b610311565b6040516100eb91906109df565b6100b6610190366004610861565b610323565b61019d610420565b6101a68161046a565b50565b6101b1610420565b6000806000838060200190518101906101ca919061075e565b919450925090506101dc8383836104c6565b50505050565b6000602081905290815260409020546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020526000908152604090205460ff1681565b60026020526000908152604090205460ff1681565b6060610255610420565b6000610263838501856107c0565b600087815260208181526040808320546001600160a01b03168084526002909252909120549192509060ff166102b45760405162461bcd60e51b81526004016102ab90610af7565b60405180910390fd5b6001600160a01b03811660009081526003602052604090205460ff16156102e5576102e08187846104d2565b6102f1565b6102f181873085610530565b5050949350505050565b610303610420565b61030d8282610544565b5050565b60016020526000908152604090205481565b61032b610420565b600080606061033c84860186610946565b90935091506103516040808401908688610b3f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508a81526020818152604080832054828801516001600160a01b039091168085526002909352922054959650909490935060ff1691506103d490505760405162461bcd60e51b81526004016102ab90610af7565b6001600160a01b03811660009081526003602052604090205460ff161561040857610403818360601c87610591565b610416565b610416818360601c876104c6565b5050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104685760405162461bcd60e51b81526004016102ab90610a50565b565b6001600160a01b03811660009081526002602052604090205460ff166104a25760405162461bcd60e51b81526004016102ab90610a87565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b826101dc8184846105c1565b60405163079cc67960e41b815283906001600160a01b038216906379cc67909061050290869086906004016109bb565b600060405180830381600087803b15801561051c57600080fd5b505af1158015610416573d6000803e3d6000fd5b8361053d8185858561061c565b5050505050565b60008281526020818152604080832080546001600160a01b039095166001600160a01b0319909516851790559282526001808252838320949094556002905220805460ff19169091179055565b6040516340c10f1960e01b815283906001600160a01b038216906340c10f199061050290869086906004016109bb565b6106178363a9059cbb60e01b84846040516024016105e09291906109bb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261063d565b505050565b6101dc846323b872dd60e01b8585856040516024016105e093929190610997565b60006060836001600160a01b0316836040516106599190610967565b6000604051808303816000865af19150503d8060008114610696576040519150601f19603f3d011682016040523d82523d6000602084013e61069b565b606091505b5091509150816106bd5760405162461bcd60e51b81526004016102ab90610acb565b8051156101dc57808060200190518101906106d891906107a0565b6101dc5760405162461bcd60e51b81526004016102ab90610a1b565b60008083601f840112610705578182fd5b50813567ffffffffffffffff81111561071c578182fd5b60208301915083602082850101111561073457600080fd5b9250929050565b60006020828403121561074c578081fd5b813561075781610b9f565b9392505050565b600080600060608486031215610772578182fd5b835161077d81610b9f565b602085015190935061078e81610b9f565b80925050604084015190509250925092565b6000602082840312156107b1578081fd5b81518015158114610757578182fd5b6000602082840312156107d1578081fd5b5035919050565b600080604083850312156107ea578182fd5b8235915060208301356107fc81610b9f565b809150509250929050565b6000806000806060858703121561081c578081fd5b84359350602085013561082e81610b9f565b9250604085013567ffffffffffffffff811115610849578182fd5b610855878288016106f4565b95989497509550505050565b600080600060408486031215610875578283fd5b83359250602084013567ffffffffffffffff811115610892578283fd5b61089e868287016106f4565b9497909650939450505050565b6000602082840312156108bc578081fd5b813567ffffffffffffffff808211156108d3578283fd5b818401915084601f8301126108e6578283fd5b8135818111156108f4578384fd5b604051601f8201601f191681016020018381118282101715610914578586fd5b60405281815283820160200187101561092b578485fd5b61093c826020830160208701610b67565b9695505050505050565b60008060408385031215610958578182fd5b50508035926020909101359150565b60008251610979818460208701610b73565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6000602082528251806020840152610a07816040850160208701610b73565b601f01601f19169190910160400192915050565b6020808252818101527f45524332303a206f7065726174696f6e20646964206e6f742073756363656564604082015260600190565b6020808252601e908201527f73656e646572206d7573742062652062726964676520636f6e74726163740000604082015260600190565b60208082526024908201527f70726f766964656420636f6e7472616374206973206e6f742077686974656c696040820152631cdd195960e21b606082015260800190565b602080825260129082015271115490cc8c0e8818d85b1b0819985a5b195960721b604082015260600190565b60208082526028908201527f70726f766964656420746f6b656e41646472657373206973206e6f74207768696040820152671d195b1a5cdd195960c21b606082015260800190565b60008085851115610b4e578182fd5b83861115610b5a578182fd5b5050820193919092039150565b82818337506000910152565b60005b83811015610b8e578181015183820152602001610b76565b838111156101dc5750506000910152565b6001600160a01b03811681146101a657600080fdfea26469706673582212200b7f9f3bf4e068dd7906bce4598f87c4ddf114962e3bd7f10759f026d816c38a64736f6c634300060c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80637f79bea8116100665780637f79bea81461011c578063b07e54bb1461012f578063b8fa37361461014f578063c8ba6c8714610162578063e248cff2146101825761009e565b806307b7ed99146100a35780630968f264146100b85780630a6d55d8146100cb578063318c136e146100f45780636a70d081146100fc575b600080fd5b6100b66100b136600461073b565b610195565b005b6100b66100c63660046108ab565b6101a9565b6100de6100d93660046107c0565b6101e2565b6040516100eb9190610983565b60405180910390f35b6100de6101fd565b61010f61010a36600461073b565b610221565b6040516100eb91906109d4565b61010f61012a36600461073b565b610236565b61014261013d366004610807565b61024b565b6040516100eb91906109e8565b6100b661015d3660046107d8565b6102fb565b61017561017036600461073b565b610311565b6040516100eb91906109df565b6100b6610190366004610861565b610323565b61019d610420565b6101a68161046a565b50565b6101b1610420565b6000806000838060200190518101906101ca919061075e565b919450925090506101dc8383836104c6565b50505050565b6000602081905290815260409020546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020526000908152604090205460ff1681565b60026020526000908152604090205460ff1681565b6060610255610420565b6000610263838501856107c0565b600087815260208181526040808320546001600160a01b03168084526002909252909120549192509060ff166102b45760405162461bcd60e51b81526004016102ab90610af7565b60405180910390fd5b6001600160a01b03811660009081526003602052604090205460ff16156102e5576102e08187846104d2565b6102f1565b6102f181873085610530565b5050949350505050565b610303610420565b61030d8282610544565b5050565b60016020526000908152604090205481565b61032b610420565b600080606061033c84860186610946565b90935091506103516040808401908688610b3f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508a81526020818152604080832054828801516001600160a01b039091168085526002909352922054959650909490935060ff1691506103d490505760405162461bcd60e51b81526004016102ab90610af7565b6001600160a01b03811660009081526003602052604090205460ff161561040857610403818360601c87610591565b610416565b610416818360601c876104c6565b5050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104685760405162461bcd60e51b81526004016102ab90610a50565b565b6001600160a01b03811660009081526002602052604090205460ff166104a25760405162461bcd60e51b81526004016102ab90610a87565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b826101dc8184846105c1565b60405163079cc67960e41b815283906001600160a01b038216906379cc67909061050290869086906004016109bb565b600060405180830381600087803b15801561051c57600080fd5b505af1158015610416573d6000803e3d6000fd5b8361053d8185858561061c565b5050505050565b60008281526020818152604080832080546001600160a01b039095166001600160a01b0319909516851790559282526001808252838320949094556002905220805460ff19169091179055565b6040516340c10f1960e01b815283906001600160a01b038216906340c10f199061050290869086906004016109bb565b6106178363a9059cbb60e01b84846040516024016105e09291906109bb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261063d565b505050565b6101dc846323b872dd60e01b8585856040516024016105e093929190610997565b60006060836001600160a01b0316836040516106599190610967565b6000604051808303816000865af19150503d8060008114610696576040519150601f19603f3d011682016040523d82523d6000602084013e61069b565b606091505b5091509150816106bd5760405162461bcd60e51b81526004016102ab90610acb565b8051156101dc57808060200190518101906106d891906107a0565b6101dc5760405162461bcd60e51b81526004016102ab90610a1b565b60008083601f840112610705578182fd5b50813567ffffffffffffffff81111561071c578182fd5b60208301915083602082850101111561073457600080fd5b9250929050565b60006020828403121561074c578081fd5b813561075781610b9f565b9392505050565b600080600060608486031215610772578182fd5b835161077d81610b9f565b602085015190935061078e81610b9f565b80925050604084015190509250925092565b6000602082840312156107b1578081fd5b81518015158114610757578182fd5b6000602082840312156107d1578081fd5b5035919050565b600080604083850312156107ea578182fd5b8235915060208301356107fc81610b9f565b809150509250929050565b6000806000806060858703121561081c578081fd5b84359350602085013561082e81610b9f565b9250604085013567ffffffffffffffff811115610849578182fd5b610855878288016106f4565b95989497509550505050565b600080600060408486031215610875578283fd5b83359250602084013567ffffffffffffffff811115610892578283fd5b61089e868287016106f4565b9497909650939450505050565b6000602082840312156108bc578081fd5b813567ffffffffffffffff808211156108d3578283fd5b818401915084601f8301126108e6578283fd5b8135818111156108f4578384fd5b604051601f8201601f191681016020018381118282101715610914578586fd5b60405281815283820160200187101561092b578485fd5b61093c826020830160208701610b67565b9695505050505050565b60008060408385031215610958578182fd5b50508035926020909101359150565b60008251610979818460208701610b73565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6000602082528251806020840152610a07816040850160208701610b73565b601f01601f19169190910160400192915050565b6020808252818101527f45524332303a206f7065726174696f6e20646964206e6f742073756363656564604082015260600190565b6020808252601e908201527f73656e646572206d7573742062652062726964676520636f6e74726163740000604082015260600190565b60208082526024908201527f70726f766964656420636f6e7472616374206973206e6f742077686974656c696040820152631cdd195960e21b606082015260800190565b602080825260129082015271115490cc8c0e8818d85b1b0819985a5b195960721b604082015260600190565b60208082526028908201527f70726f766964656420746f6b656e41646472657373206973206e6f74207768696040820152671d195b1a5cdd195960c21b606082015260800190565b60008085851115610b4e578182fd5b83861115610b5a578182fd5b5050820193919092039150565b82818337506000910152565b60005b83811015610b8e578181015183820152602001610b76565b838111156101dc5750506000910152565b6001600160a01b03811681146101a657600080fdfea26469706673582212200b7f9f3bf4e068dd7906bce4598f87c4ddf114962e3bd7f10759f026d816c38a64736f6c634300060c0033",
  "immutableReferences": {
    "9652": [
      {
        "length": 32,
        "start": 511
      },
      {
        "length": 32,
        "start": 1067
      }
    ]
  },
  "sourceMap": "376:3965:45:-:0;;;543:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1045:30:48;;-1:-1:-1;;;;;;1045:30:48;;;376:3965:45;;146:263:-1;;261:2;249:9;240:7;236:23;232:32;229:2;;;-1:-1;;267:12;229:2;83:13;;-1:-1;;;;;576:54;;701:35;;691:2;;-1:-1;;740:12;691:2;319:74;223:186;-1:-1;;;223:186::o;:::-;376:3965:45;;;;;;;;;;;",
  "deployedSourceMap": "376:3965:45:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2170:120:48;;;;;;:::i;:::-;;:::i;:::-;;4043:296:45;;;;;;:::i;:::-;;:::i;408:69:48:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;318:39;;;:::i;755:42::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;652:51::-;;;;;;:::i;:::-;;:::i;1352:612:45:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1774:154:48:-;;;;;;:::i;:::-;;:::i;528:69::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2609:943:45:-;;;;;;:::i;:::-;;:::i;2170:120:48:-;836:13;:11;:13::i;:::-;2254:29:::1;2267:15;2254:12;:29::i;:::-;2170:120:::0;:::o;4043:296:45:-;836:13:48;:11;:13::i;:::-;4119:20:45::1;4149:17:::0;4176:11:::1;4245:4;4234:42;;;;;;;;;;;;:::i;:::-;4198:78:::0;;-1:-1:-1;4198:78:45;-1:-1:-1;4198:78:45;-1:-1:-1;4287:45:45::1;4198:78:::0;;;4287:12:::1;:45::i;:::-;859:1:48;;;4043:296:45::0;:::o;408:69:48:-;;;;;;;;;;;;;-1:-1:-1;;;;;408:69:48;;:::o;318:39::-;;;:::o;755:42::-;;;;;;;;;;;;;;;:::o;652:51::-;;;;;;;;;;;;;;;:::o;1352:612:45:-;1499:12;836:13:48;:11;:13::i;:::-;1523:21:45::1;1565:24;::::0;;::::1;1576:4:::0;1565:24:::1;:::i;:::-;1600:20;1623:45:::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;1623:45:45::1;1686:32:::0;;;:18:::1;:32:::0;;;;;;;1554:35;;-1:-1:-1;1623:45:45;1686:32:::1;;1678:85;;;;-1:-1:-1::0;;;1678:85:45::1;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;;;;;1778:23:45;::::1;;::::0;;;:9:::1;:23;::::0;;;;;::::1;;1774:184;;;1817:42;1827:12;1841:9;1852:6;1817:9;:42::i;:::-;1774:184;;;1890:57;1900:12;1914:9;1933:4;1940:6;1890:9;:57::i;:::-;859:1:48;;1352:612:45::0;;;;;;:::o;1774:154:48:-;836:13;:11;:13::i;:::-;1880:41:::1;1893:10;1905:15;1880:12;:41::i;:::-;1774:154:::0;;:::o;528:69::-;;;;;;;;;;;;;:::o;2609:943:45:-;836:13:48;:11;:13::i;:::-;2714:20:45::1;::::0;2798:41:::1;2893:30;::::0;;::::1;2904:4:::0;2893:30:::1;:::i;:::-;2850:73:::0;;-1:-1:-1;2850:73:45;-1:-1:-1;2969:44:45::1;2974:2;2977:35:::0;;::::1;::::0;2969:4;;:44:::1;:::i;:::-;2933:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;3082:45:45;;;::::1;::::0;;;;;;;;3187:38;;::::1;3181:45:::0;-1:-1:-1;;;;;3082:45:45;;::::1;3254:32:::0;;;:18:::1;:32:::0;;;;;;2933:81;;-1:-1:-1;3181:45:45;;3082;;-1:-1:-1;3254:32:45::1;;::::0;-1:-1:-1;3246:85:45::1;::::0;-1:-1:-1;3246:85:45::1;;;-1:-1:-1::0;;;3246:85:45::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3346:23:45;::::1;;::::0;;;:9:::1;:23;::::0;;;;;::::1;;3342:204;;;3385:58;3395:12;3417:16;3409:25;;3436:6;3385:9;:58::i;:::-;3342:204;;;3474:61;3487:12;3509:16;3501:25;;3528:6;3474:12;:61::i;:::-;859:1:48;;;;;2609:943:45::0;;;:::o;1088:124:48:-;1142:10;-1:-1:-1;;;;;1156:14:48;1142:28;;1134:71;;;;-1:-1:-1;;;1134:71:48;;;;;;;:::i;:::-;1088:124::o;2655:200::-;-1:-1:-1;;;;;2729:35:48;;;;;;:18;:35;;;;;;;;2721:84;;;;-1:-1:-1;;;2721:84:48;;;;;;;:::i;:::-;-1:-1:-1;;;;;2815:26:48;;;;;:9;:26;;;;;:33;;-1:-1:-1;;2815:33:48;2844:4;2815:33;;;2655:200::o;1271:189:38:-;1391:12;1414:39;1391:12;1435:9;1446:6;1414:13;:39::i;2099:186::-;2249:29;;-1:-1:-1;;;2249:29:38;;2226:12;;-1:-1:-1;;;;;2249:14:38;;;;;:29;;2264:5;;2271:6;;2249:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;814:212;946:12;969:50;946:12;994:5;1001:9;1012:6;969:17;:50::i;:::-;814:212;;;;;:::o;2367:282:48:-;2453:33;:45;;;;;;;;;;;:63;;-1:-1:-1;;;;;2453:63:48;;;-1:-1:-1;;;;;;2453:63:48;;;;;;;2526:50;;;2453:63;2526:50;;;;;;:63;;;;2600:18;:35;;;:42;;-1:-1:-1;;2600:42:48;;;;;;2367:282::o;1681:211:38:-;1855:29;;-1:-1:-1;;;1855:29:38;;1832:12;;-1:-1:-1;;;;;1855:10:38;;;;;:29;;1866:9;;1877:6;;1855:29;;;:::i;2498:165::-;2580:76;2590:5;2620:23;;;2645:2;2649:5;2597:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2597:58:38;;;;;;;;;;;;;;-1:-1:-1;;;;;2597:58:38;-1:-1:-1;;;;;;2597:58:38;;;;;;;;;;2580:9;:76::i;:::-;2498:165;;;:::o;2928:193::-;3028:86;3038:5;3068:27;;;3097:4;3103:2;3107:5;3045:68;;;;;;;;;;:::i;3282:338::-;3361:12;3375:23;3410:5;-1:-1:-1;;;;;3402:19:38;3422:4;3402:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3360:67;;;;3445:7;3437:38;;;;-1:-1:-1;;;3437:38:38;;;;;;;:::i;:::-;3490:17;;:21;3486:128;;3547:10;3536:30;;;;;;;;;;;;:::i;:::-;3528:75;;;;-1:-1:-1;;;3528:75:38;;;;;;;:::i;585:336:-1:-;;;699:3;692:4;684:6;680:17;676:27;666:2;;-1:-1;;707:12;666:2;-1:-1;737:20;;777:18;766:30;;763:2;;;-1:-1;;799:12;763:2;843:4;835:6;831:17;819:29;;894:3;843:4;874:17;835:6;860:32;;857:41;854:2;;;911:1;;901:12;854:2;659:262;;;;;:::o;1656:241::-;;1760:2;1748:9;1739:7;1735:23;1731:32;1728:2;;;-1:-1;;1766:12;1728:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1818:63;1722:175;-1:-1;;;1722:175::o;1904:567::-;;;;2069:2;2057:9;2048:7;2044:23;2040:32;2037:2;;;-1:-1;;2075:12;2037:2;234:6;228:13;246:41;281:5;246:41;:::i;:::-;2246:2;2304:22;;228:13;2127:82;;-1:-1;246:41;228:13;246:41;:::i;:::-;2254:82;;;;2373:2;2427:9;2423:22;1593:13;2381:74;;2031:440;;;;;:::o;2478:257::-;;2590:2;2578:9;2569:7;2565:23;2561:32;2558:2;;;-1:-1;;2596:12;2558:2;380:6;374:13;15589:5;14396:13;14389:21;15567:5;15564:32;15554:2;;-1:-1;;15600:12;2742:241;;2846:2;2834:9;2825:7;2821:23;2817:32;2814:2;;;-1:-1;;2852:12;2814:2;-1:-1;501:20;;2808:175;-1:-1;2808:175::o;2990:366::-;;;3111:2;3099:9;3090:7;3086:23;3082:32;3079:2;;;-1:-1;;3117:12;3079:2;514:6;501:20;3169:63;;3269:2;3312:9;3308:22;72:20;97:33;124:5;97:33;:::i;:::-;3277:63;;;;3073:283;;;;;:::o;3363:615::-;;;;;3520:2;3508:9;3499:7;3495:23;3491:32;3488:2;;;-1:-1;;3526:12;3488:2;514:6;501:20;3578:63;;3678:2;3721:9;3717:22;72:20;97:33;124:5;97:33;:::i;:::-;3686:63;-1:-1;3814:2;3799:18;;3786:32;3838:18;3827:30;;3824:2;;;-1:-1;;3860:12;3824:2;3898:64;3954:7;3945:6;3934:9;3930:22;3898:64;:::i;:::-;3482:496;;;;-1:-1;3880:82;-1:-1;;;;3482:496::o;3985:490::-;;;;4125:2;4113:9;4104:7;4100:23;4096:32;4093:2;;;-1:-1;;4131:12;4093:2;514:6;501:20;4183:63;;4311:2;4300:9;4296:18;4283:32;4335:18;4327:6;4324:30;4321:2;;;-1:-1;;4357:12;4321:2;4395:64;4451:7;4442:6;4431:9;4427:22;4395:64;:::i;:::-;4087:388;;4377:82;;-1:-1;4377:82;;-1:-1;;;;4087:388::o;4482:345::-;;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;-1:-1;;4601:12;4563:2;4659:17;4646:31;4697:18;;4689:6;4686:30;4683:2;;;-1:-1;;4719:12;4683:2;4794:6;4783:9;4779:22;;;1031:3;1024:4;1016:6;1012:17;1008:27;998:2;;-1:-1;;1039:12;998:2;1086:6;1073:20;4697:18;12984:6;12981:30;12978:2;;;-1:-1;;13014:12;12978:2;12648;12642:9;13087;13068:17;;-1:-1;;13064:33;12674:17;;4595:2;12674:17;12734:34;;;12770:22;;;12731:62;12728:2;;;-1:-1;;12796:12;12728:2;12648;12815:22;1178:21;;;1278:16;;;4595:2;1278:16;1275:25;-1:-1;1272:2;;;-1:-1;;1303:12;1272:2;1323:41;1357:6;4595:2;1254:5;1250:16;4595:2;1220:6;1216:17;1323:41;:::i;:::-;4739:72;4557:270;-1:-1;;;;;;4557:270::o;5082:366::-;;;5203:2;5191:9;5182:7;5178:23;5174:32;5171:2;;;-1:-1;;5209:12;5171:2;-1:-1;;1445:20;;;5361:2;5400:22;;;1445:20;;-1:-1;5165:283::o;8414:271::-;;6316:5;13264:12;6427:52;6472:6;6467:3;6460:4;6453:5;6449:16;6427:52;:::i;:::-;6491:16;;;;;8548:137;-1:-1;;8548:137::o;8692:222::-;-1:-1;;;;;14563:54;;;;5526:37;;8819:2;8804:18;;8790:124::o;8921:444::-;-1:-1;;;;;14563:54;;;5526:37;;14563:54;;;;9268:2;9253:18;;5526:37;9351:2;9336:18;;5757:37;;;;9104:2;9089:18;;9075:290::o;9372:333::-;-1:-1;;;;;14563:54;;;;5526:37;;9691:2;9676:18;;5757:37;9527:2;9512:18;;9498:207::o;9712:210::-;14396:13;;14389:21;5640:34;;9833:2;9818:18;;9804:118::o;9929:222::-;5757:37;;;10056:2;10041:18;;10027:124::o;10158:306::-;;10303:2;10324:17;10317:47;5948:5;13264:12;13420:6;10303:2;10292:9;10288:18;13408:19;6041:52;6086:6;13448:14;10292:9;13448:14;10303:2;6067:5;6063:16;6041:52;:::i;:::-;13087:9;15207:14;-1:-1;;15203:28;6105:39;;;;13448:14;6105:39;;10274:190;-1:-1;;10274:190::o;10471:416::-;10671:2;10685:47;;;10656:18;;;13408:19;6780:34;13448:14;;;6760:55;6834:12;;;10642:245::o;10894:416::-;11094:2;11108:47;;;7085:2;11079:18;;;13408:19;7121:32;13448:14;;;7101:53;7173:12;;;11065:245::o;11317:416::-;11517:2;11531:47;;;7424:2;11502:18;;;13408:19;7460:34;13448:14;;;7440:55;-1:-1;;;7515:12;;;7508:28;7555:12;;;11488:245::o;11740:416::-;11940:2;11954:47;;;7806:2;11925:18;;;13408:19;-1:-1;;;13448:14;;;7822:41;7882:12;;;11911:245::o;12163:416::-;12363:2;12377:47;;;8133:2;12348:18;;;13408:19;8169:34;13448:14;;;8149:55;-1:-1;;;8224:12;;;8217:32;8268:12;;;12334:245::o;13801:318::-;;;13951:8;13939:10;13936:24;13933:2;;;-1:-1;;13963:12;13933:2;13998:6;13988:8;13985:20;13982:2;;;-1:-1;;14008:12;13982:2;-1:-1;;14040:31;;;14089:25;;;;;-1:-1;13927:192::o;14709:145::-;14790:6;14785:3;14780;14767:30;-1:-1;14846:1;14828:16;;14821:27;14760:94::o;14863:268::-;14928:1;14935:101;14949:6;14946:1;14943:13;14935:101;;;15016:11;;;15010:18;14997:11;;;14990:39;14971:2;14964:10;14935:101;;;15051:6;15048:1;15045:13;15042:2;;;-1:-1;;14928:1;15098:16;;15091:27;14912:219::o;15244:117::-;-1:-1;;;;;14563:54;;15303:35;;15293:2;;15352:1;;15342:12",
  "source": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity 0.6.12;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/IDepositExecute.sol\";\nimport \"./HandlerHelpers.sol\";\nimport \"../ERC20Safe.sol\";\n\n/**\n    @title Handles ERC20 deposits and deposit executions.\n    @author ChainSafe Systems.\n    @notice This contract is intended to be used with the Bridge contract.\n */\ncontract ERC20Handler is IDepositExecute, HandlerHelpers, ERC20Safe {\n    /**\n        @param bridgeAddress Contract address of previously deployed Bridge.\n     */\n    constructor(\n        address          bridgeAddress\n    ) public HandlerHelpers(bridgeAddress) {\n    }\n\n    /**\n        @notice A deposit is initiatied by making a deposit in the Bridge contract.\n        @param resourceID ResourceID used to find address of token to be used for deposit.\n        @param depositer Address of account making the deposit in the Bridge contract.\n        @param data Consists of {amount} padded to 32 bytes.\n        @notice Data passed into the function should be constructed as follows:\n        amount                      uint256     bytes   0 - 32\n        @dev Depending if the corresponding {tokenAddress} for the parsed {resourceID} is\n        marked true in {_burnList}, deposited tokens will be burned, if not, they will be locked.\n        @return an empty data.\n     */\n    function deposit(\n        bytes32 resourceID,\n        address depositer,\n        bytes   calldata data\n    ) external override onlyBridge returns (bytes memory) {\n        uint256        amount;\n        (amount) = abi.decode(data, (uint));\n\n        address tokenAddress = _resourceIDToTokenContractAddress[resourceID];\n        require(_contractWhitelist[tokenAddress], \"provided tokenAddress is not whitelisted\");\n\n        if (_burnList[tokenAddress]) {\n            burnERC20(tokenAddress, depositer, amount);\n        } else {\n            lockERC20(tokenAddress, depositer, address(this), amount);\n        }\n    }\n\n    /**\n        @notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\n        by a relayer on the deposit's destination chain.\n        @param data Consists of {resourceID}, {amount}, {lenDestinationRecipientAddress},\n        and {destinationRecipientAddress} all padded to 32 bytes.\n        @notice Data passed into the function should be constructed as follows:\n        amount                                 uint256     bytes  0 - 32\n        destinationRecipientAddress length     uint256     bytes  32 - 64\n        destinationRecipientAddress            bytes       bytes  64 - END\n     */\n    function executeProposal(bytes32 resourceID, bytes calldata data) external override onlyBridge {\n        uint256       amount;\n        uint256       lenDestinationRecipientAddress;\n        bytes  memory destinationRecipientAddress;\n\n        (amount, lenDestinationRecipientAddress) = abi.decode(data, (uint, uint));\n        destinationRecipientAddress = bytes(data[64:64 + lenDestinationRecipientAddress]);\n\n        bytes20 recipientAddress;\n        address tokenAddress = _resourceIDToTokenContractAddress[resourceID];\n\n        assembly {\n            recipientAddress := mload(add(destinationRecipientAddress, 0x20))\n        }\n\n        require(_contractWhitelist[tokenAddress], \"provided tokenAddress is not whitelisted\");\n\n        if (_burnList[tokenAddress]) {\n            mintERC20(tokenAddress, address(recipientAddress), amount);\n        } else {\n            releaseERC20(tokenAddress, address(recipientAddress), amount);\n        }\n    }\n\n    /**\n        @notice Used to manually release ERC20 tokens from ERC20Safe.\n        @param data Consists of {tokenAddress}, {recipient}, and {amount} all padded to 32 bytes.\n        @notice Data passed into the function should be constructed as follows:\n        tokenAddress                           address     bytes  0 - 32\n        recipient                              address     bytes  32 - 64\n        amount                                 uint        bytes  64 - 96\n     */\n    function withdraw(bytes memory data) external override onlyBridge {\n        address tokenAddress;\n        address recipient;\n        uint amount;\n\n        (tokenAddress, recipient, amount) = abi.decode(data, (address, address, uint));\n\n        releaseERC20(tokenAddress, recipient, amount);\n    }\n}\n",
  "sourcePath": "/home/sigo/w/deer/ethsub/packages/sol/contracts/handlers/ERC20Handler.sol",
  "ast": {
    "absolutePath": "project:/contracts/handlers/ERC20Handler.sol",
    "exportedSymbols": {
      "ERC20Handler": [
        8996
      ]
    },
    "id": 8997,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8779,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "42:23:45"
      },
      {
        "id": 8780,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:45"
      },
      {
        "absolutePath": "project:/contracts/interfaces/IDepositExecute.sol",
        "file": "../interfaces/IDepositExecute.sol",
        "id": 8781,
        "nodeType": "ImportDirective",
        "scope": 8997,
        "sourceUnit": 9817,
        "src": "101:43:45",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/handlers/HandlerHelpers.sol",
        "file": "./HandlerHelpers.sol",
        "id": 8782,
        "nodeType": "ImportDirective",
        "scope": 8997,
        "sourceUnit": 9783,
        "src": "145:30:45",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/ERC20Safe.sol",
        "file": "../ERC20Safe.sol",
        "id": 8783,
        "nodeType": "ImportDirective",
        "scope": 8997,
        "sourceUnit": 7752,
        "src": "176:26:45",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8785,
              "name": "IDepositExecute",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9816,
              "src": "401:15:45",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IDepositExecute_$9816",
                "typeString": "contract IDepositExecute"
              }
            },
            "id": 8786,
            "nodeType": "InheritanceSpecifier",
            "src": "401:15:45"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8787,
              "name": "HandlerHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9782,
              "src": "418:14:45",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_HandlerHelpers_$9782",
                "typeString": "contract HandlerHelpers"
              }
            },
            "id": 8788,
            "nodeType": "InheritanceSpecifier",
            "src": "418:14:45"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8789,
              "name": "ERC20Safe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7751,
              "src": "434:9:45",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20Safe_$7751",
                "typeString": "contract ERC20Safe"
              }
            },
            "id": 8790,
            "nodeType": "InheritanceSpecifier",
            "src": "434:9:45"
          }
        ],
        "contractDependencies": [
          7751,
          9782,
          9816,
          9840
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 8784,
          "nodeType": "StructuredDocumentation",
          "src": "204:171:45",
          "text": "@title Handles ERC20 deposits and deposit executions.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
        },
        "fullyImplemented": true,
        "id": 8996,
        "linearizedBaseContracts": [
          8996,
          7751,
          9782,
          9840,
          9816
        ],
        "name": "ERC20Handler",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 8799,
              "nodeType": "Block",
              "src": "638:7:45",
              "statements": []
            },
            "documentation": {
              "id": 8791,
              "nodeType": "StructuredDocumentation",
              "src": "450:88:45",
              "text": "@param bridgeAddress Contract address of previously deployed Bridge."
            },
            "id": 8800,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8796,
                    "name": "bridgeAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8793,
                    "src": "623:13:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8797,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8795,
                  "name": "HandlerHelpers",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9782,
                  "src": "608:14:45",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_HandlerHelpers_$9782_$",
                    "typeString": "type(contract HandlerHelpers)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "608:29:45"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8794,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8793,
                  "mutability": "mutable",
                  "name": "bridgeAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8800,
                  "src": "564:30:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8792,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "564:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "554:46:45"
            },
            "returnParameters": {
              "id": 8798,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "638:0:45"
            },
            "scope": 8996,
            "src": "543:102:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9807
            ],
            "body": {
              "id": 8864,
              "nodeType": "Block",
              "src": "1513:451:45",
              "statements": [
                {
                  "assignments": [
                    8816
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8816,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 8864,
                      "src": "1523:21:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8815,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1523:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8817,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1523:21:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8827,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 8818,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8816,
                          "src": "1555:6:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 8819,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "1554:8:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8822,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8807,
                          "src": "1576:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 8824,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1583:4:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 8823,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "1583:4:45",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            }
                          ],
                          "id": 8825,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1582:6:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8820,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "1565:3:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 8821,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1565:10:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8826,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1565:24:45",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1554:35:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8828,
                  "nodeType": "ExpressionStatement",
                  "src": "1554:35:45"
                },
                {
                  "assignments": [
                    8830
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8830,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 8864,
                      "src": "1600:20:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8829,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1600:7:45",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8834,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8831,
                      "name": "_resourceIDToTokenContractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9656,
                      "src": "1623:33:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 8833,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8832,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8803,
                      "src": "1657:10:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1623:45:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1600:68:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 8836,
                          "name": "_contractWhitelist",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9664,
                          "src": "1686:18:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 8838,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 8837,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8830,
                          "src": "1705:12:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1686:32:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "70726f766964656420746f6b656e41646472657373206973206e6f742077686974656c6973746564",
                        "id": 8839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1720:42:45",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d6f36190bb0602e32e72016fc9d55735c428c14ee06e9999974578d6c009c7ad",
                          "typeString": "literal_string \"provided tokenAddress is not whitelisted\""
                        },
                        "value": "provided tokenAddress is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d6f36190bb0602e32e72016fc9d55735c428c14ee06e9999974578d6c009c7ad",
                          "typeString": "literal_string \"provided tokenAddress is not whitelisted\""
                        }
                      ],
                      "id": 8835,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1678:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1678:85:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8841,
                  "nodeType": "ExpressionStatement",
                  "src": "1678:85:45"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8842,
                      "name": "_burnList",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9668,
                      "src": "1778:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 8844,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8843,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8830,
                      "src": "1788:12:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1778:23:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8862,
                    "nodeType": "Block",
                    "src": "1876:82:45",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8853,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8830,
                              "src": "1900:12:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8854,
                              "name": "depositer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8805,
                              "src": "1914:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8857,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "1933:4:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20Handler_$8996",
                                    "typeString": "contract ERC20Handler"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ERC20Handler_$8996",
                                    "typeString": "contract ERC20Handler"
                                  }
                                ],
                                "id": 8856,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1925:7:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8855,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1925:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 8858,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1925:13:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8859,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8816,
                              "src": "1940:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8852,
                            "name": "lockERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7587,
                            "src": "1890:9:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 8860,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1890:57:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8861,
                        "nodeType": "ExpressionStatement",
                        "src": "1890:57:45"
                      }
                    ]
                  },
                  "id": 8863,
                  "nodeType": "IfStatement",
                  "src": "1774:184:45",
                  "trueBody": {
                    "id": 8851,
                    "nodeType": "Block",
                    "src": "1803:67:45",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8846,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8830,
                              "src": "1827:12:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8847,
                              "name": "depositer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8805,
                              "src": "1841:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8848,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8816,
                              "src": "1852:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8845,
                            "name": "burnERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7658,
                            "src": "1817:9:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 8849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1817:42:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8850,
                        "nodeType": "ExpressionStatement",
                        "src": "1817:42:45"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 8801,
              "nodeType": "StructuredDocumentation",
              "src": "651:696:45",
              "text": "@notice A deposit is initiatied by making a deposit in the Bridge contract.\n@param resourceID ResourceID used to find address of token to be used for deposit.\n@param depositer Address of account making the deposit in the Bridge contract.\n@param data Consists of {amount} padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\namount                      uint256     bytes   0 - 32\n@dev Depending if the corresponding {tokenAddress} for the parsed {resourceID} is\nmarked true in {_burnList}, deposited tokens will be burned, if not, they will be locked.\n@return an empty data."
            },
            "functionSelector": "b07e54bb",
            "id": 8865,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8811,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8810,
                  "name": "onlyBridge",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9675,
                  "src": "1479:10:45",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1479:10:45"
              }
            ],
            "name": "deposit",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8809,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1470:8:45"
            },
            "parameters": {
              "id": 8808,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8803,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8865,
                  "src": "1378:18:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8802,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1378:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8805,
                  "mutability": "mutable",
                  "name": "depositer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8865,
                  "src": "1406:17:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8804,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1406:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8807,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8865,
                  "src": "1433:21:45",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8806,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1433:5:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1368:92:45"
            },
            "returnParameters": {
              "id": 8814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8813,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8865,
                  "src": "1499:12:45",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8812,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1499:5:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1498:14:45"
            },
            "scope": 8996,
            "src": "1352:612:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9815
            ],
            "body": {
              "id": 8952,
              "nodeType": "Block",
              "src": "2704:848:45",
              "statements": [
                {
                  "assignments": [
                    8877
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8877,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 8952,
                      "src": "2714:20:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8876,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2714:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8878,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2714:20:45"
                },
                {
                  "assignments": [
                    8880
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8880,
                      "mutability": "mutable",
                      "name": "lenDestinationRecipientAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 8952,
                      "src": "2744:44:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8879,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2744:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8881,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2744:44:45"
                },
                {
                  "assignments": [
                    8883
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8883,
                      "mutability": "mutable",
                      "name": "destinationRecipientAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 8952,
                      "src": "2798:41:45",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 8882,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2798:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8884,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2798:41:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 8885,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8877,
                          "src": "2851:6:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8886,
                          "name": "lenDestinationRecipientAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8880,
                          "src": "2859:30:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 8887,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "2850:40:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8890,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8870,
                          "src": "2904:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 8892,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2911:4:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 8891,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "2911:4:45",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8894,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2917:4:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 8893,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "2917:4:45",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            }
                          ],
                          "id": 8895,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2910:12:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(uint256),type(uint256))"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(uint256),type(uint256))"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8888,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "2893:3:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 8889,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2893:10:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8896,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2893:30:45",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "src": "2850:73:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8898,
                  "nodeType": "ExpressionStatement",
                  "src": "2850:73:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8909,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8899,
                      "name": "destinationRecipientAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8883,
                      "src": "2933:27:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 8902,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8870,
                            "src": "2969:4:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "endExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8906,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "3634",
                              "id": 8904,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2977:2:45",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_64_by_1",
                                "typeString": "int_const 64"
                              },
                              "value": "64"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 8905,
                              "name": "lenDestinationRecipientAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8880,
                              "src": "2982:30:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2977:35:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8907,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "2969:44:45",
                          "startExpression": {
                            "argumentTypes": null,
                            "hexValue": "3634",
                            "id": 8903,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2974:2:45",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_64_by_1",
                              "typeString": "int_const 64"
                            },
                            "value": "64"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        ],
                        "id": 8901,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2963:5:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                          "typeString": "type(bytes storage pointer)"
                        },
                        "typeName": {
                          "id": 8900,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2963:5:45",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 8908,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2963:51:45",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_calldata_ptr",
                        "typeString": "bytes calldata"
                      }
                    },
                    "src": "2933:81:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 8910,
                  "nodeType": "ExpressionStatement",
                  "src": "2933:81:45"
                },
                {
                  "assignments": [
                    8912
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8912,
                      "mutability": "mutable",
                      "name": "recipientAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 8952,
                      "src": "3025:24:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      },
                      "typeName": {
                        "id": 8911,
                        "name": "bytes20",
                        "nodeType": "ElementaryTypeName",
                        "src": "3025:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8913,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3025:24:45"
                },
                {
                  "assignments": [
                    8915
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8915,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 8952,
                      "src": "3059:20:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8914,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3059:7:45",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8919,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8916,
                      "name": "_resourceIDToTokenContractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9656,
                      "src": "3082:33:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 8918,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8917,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8868,
                      "src": "3116:10:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3082:45:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3059:68:45"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "3147:89:45",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "3161:65:45",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "destinationRecipientAddress",
                                  "nodeType": "YulIdentifier",
                                  "src": "3191:27:45"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3220:4:45",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3187:3:45"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3187:38:45"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "3181:5:45"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3181:45:45"
                        },
                        "variableNames": [
                          {
                            "name": "recipientAddress",
                            "nodeType": "YulIdentifier",
                            "src": "3161:16:45"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 8883,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3191:27:45",
                      "valueSize": 1
                    },
                    {
                      "declaration": 8912,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3161:16:45",
                      "valueSize": 1
                    }
                  ],
                  "id": 8920,
                  "nodeType": "InlineAssembly",
                  "src": "3138:98:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 8922,
                          "name": "_contractWhitelist",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9664,
                          "src": "3254:18:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 8924,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 8923,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8915,
                          "src": "3273:12:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3254:32:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "70726f766964656420746f6b656e41646472657373206973206e6f742077686974656c6973746564",
                        "id": 8925,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3288:42:45",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d6f36190bb0602e32e72016fc9d55735c428c14ee06e9999974578d6c009c7ad",
                          "typeString": "literal_string \"provided tokenAddress is not whitelisted\""
                        },
                        "value": "provided tokenAddress is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d6f36190bb0602e32e72016fc9d55735c428c14ee06e9999974578d6c009c7ad",
                          "typeString": "literal_string \"provided tokenAddress is not whitelisted\""
                        }
                      ],
                      "id": 8921,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3246:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3246:85:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8927,
                  "nodeType": "ExpressionStatement",
                  "src": "3246:85:45"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8928,
                      "name": "_burnList",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9668,
                      "src": "3346:9:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 8930,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8929,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8915,
                      "src": "3356:12:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3346:23:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8950,
                    "nodeType": "Block",
                    "src": "3460:86:45",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8942,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8915,
                              "src": "3487:12:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8945,
                                  "name": "recipientAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8912,
                                  "src": "3509:16:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                ],
                                "id": 8944,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3501:7:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8943,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3501:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 8946,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3501:25:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8947,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8877,
                              "src": "3528:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8941,
                            "name": "releaseERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7610,
                            "src": "3474:12:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 8948,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3474:61:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8949,
                        "nodeType": "ExpressionStatement",
                        "src": "3474:61:45"
                      }
                    ]
                  },
                  "id": 8951,
                  "nodeType": "IfStatement",
                  "src": "3342:204:45",
                  "trueBody": {
                    "id": 8940,
                    "nodeType": "Block",
                    "src": "3371:83:45",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8932,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8915,
                              "src": "3395:12:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8935,
                                  "name": "recipientAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8912,
                                  "src": "3417:16:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                ],
                                "id": 8934,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3409:7:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8933,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3409:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 8936,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3409:25:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8937,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8877,
                              "src": "3436:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8931,
                            "name": "mintERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7634,
                            "src": "3385:9:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 8938,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3385:58:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8939,
                        "nodeType": "ExpressionStatement",
                        "src": "3385:58:45"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 8866,
              "nodeType": "StructuredDocumentation",
              "src": "1970:634:45",
              "text": "@notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\nby a relayer on the deposit's destination chain.\n@param data Consists of {resourceID}, {amount}, {lenDestinationRecipientAddress},\nand {destinationRecipientAddress} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\namount                                 uint256     bytes  0 - 32\ndestinationRecipientAddress length     uint256     bytes  32 - 64\ndestinationRecipientAddress            bytes       bytes  64 - END"
            },
            "functionSelector": "e248cff2",
            "id": 8953,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8874,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8873,
                  "name": "onlyBridge",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9675,
                  "src": "2693:10:45",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2693:10:45"
              }
            ],
            "name": "executeProposal",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8872,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2684:8:45"
            },
            "parameters": {
              "id": 8871,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8868,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8953,
                  "src": "2634:18:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8867,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2634:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8870,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8953,
                  "src": "2654:19:45",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8869,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2654:5:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2633:41:45"
            },
            "returnParameters": {
              "id": 8875,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2704:0:45"
            },
            "scope": 8996,
            "src": "2609:943:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9736
            ],
            "body": {
              "id": 8994,
              "nodeType": "Block",
              "src": "4109:230:45",
              "statements": [
                {
                  "assignments": [
                    8963
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8963,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 8994,
                      "src": "4119:20:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8962,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4119:7:45",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8964,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4119:20:45"
                },
                {
                  "assignments": [
                    8966
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8966,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 8994,
                      "src": "4149:17:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8965,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4149:7:45",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8967,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4149:17:45"
                },
                {
                  "assignments": [
                    8969
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8969,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 8994,
                      "src": "4176:11:45",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8968,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4176:4:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8970,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4176:11:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 8971,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8963,
                          "src": "4199:12:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8972,
                          "name": "recipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8966,
                          "src": "4213:9:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 8973,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8969,
                          "src": "4224:6:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 8974,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "4198:33:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$",
                        "typeString": "tuple(address,address,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8977,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8956,
                          "src": "4245:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 8979,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4252:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 8978,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "4252:7:45",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4261:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 8980,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "4261:7:45",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8983,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4270:4:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 8982,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "4270:4:45",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            }
                          ],
                          "id": 8984,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4251:24:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(address),type(address),type(uint256))"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(address),type(address),type(uint256))"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8975,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "4234:3:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 8976,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4234:10:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8985,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4234:42:45",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_payable_$_t_address_payable_$_t_uint256_$",
                        "typeString": "tuple(address payable,address payable,uint256)"
                      }
                    },
                    "src": "4198:78:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8987,
                  "nodeType": "ExpressionStatement",
                  "src": "4198:78:45"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8989,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8963,
                        "src": "4300:12:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8990,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8966,
                        "src": "4314:9:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8991,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8969,
                        "src": "4325:6:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8988,
                      "name": "releaseERC20",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7610,
                      "src": "4287:12:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 8992,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4287:45:45",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8993,
                  "nodeType": "ExpressionStatement",
                  "src": "4287:45:45"
                }
              ]
            },
            "documentation": {
              "id": 8954,
              "nodeType": "StructuredDocumentation",
              "src": "3558:480:45",
              "text": "@notice Used to manually release ERC20 tokens from ERC20Safe.\n@param data Consists of {tokenAddress}, {recipient}, and {amount} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenAddress                           address     bytes  0 - 32\nrecipient                              address     bytes  32 - 64\namount                                 uint        bytes  64 - 96"
            },
            "functionSelector": "0968f264",
            "id": 8995,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8960,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8959,
                  "name": "onlyBridge",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9675,
                  "src": "4098:10:45",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4098:10:45"
              }
            ],
            "name": "withdraw",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8958,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4089:8:45"
            },
            "parameters": {
              "id": 8957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8956,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8995,
                  "src": "4061:17:45",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8955,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4061:5:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4060:19:45"
            },
            "returnParameters": {
              "id": 8961,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4109:0:45"
            },
            "scope": 8996,
            "src": "4043:296:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 8997,
        "src": "376:3965:45"
      }
    ],
    "src": "42:4300:45"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "project:/contracts/handlers/ERC20Handler.sol",
      "exportedSymbols": {
        "ERC20Handler": [
          8996
        ]
      },
      "license": "LGPL-3.0-only"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.6",
            ".12"
          ]
        },
        "id": 8779,
        "name": "PragmaDirective",
        "src": "42:23:45"
      },
      {
        "attributes": {
          "literals": [
            "experimental",
            "ABIEncoderV2"
          ]
        },
        "id": 8780,
        "name": "PragmaDirective",
        "src": "66:33:45"
      },
      {
        "attributes": {
          "SourceUnit": 9817,
          "absolutePath": "project:/contracts/interfaces/IDepositExecute.sol",
          "file": "../interfaces/IDepositExecute.sol",
          "scope": 8997,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 8781,
        "name": "ImportDirective",
        "src": "101:43:45"
      },
      {
        "attributes": {
          "SourceUnit": 9783,
          "absolutePath": "project:/contracts/handlers/HandlerHelpers.sol",
          "file": "./HandlerHelpers.sol",
          "scope": 8997,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 8782,
        "name": "ImportDirective",
        "src": "145:30:45"
      },
      {
        "attributes": {
          "SourceUnit": 7752,
          "absolutePath": "project:/contracts/ERC20Safe.sol",
          "file": "../ERC20Safe.sol",
          "scope": 8997,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 8783,
        "name": "ImportDirective",
        "src": "176:26:45"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            7751,
            9782,
            9816,
            9840
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            8996,
            7751,
            9782,
            9840,
            9816
          ],
          "name": "ERC20Handler",
          "scope": 8997
        },
        "children": [
          {
            "attributes": {
              "text": "@title Handles ERC20 deposits and deposit executions.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
            },
            "id": 8784,
            "name": "StructuredDocumentation",
            "src": "204:171:45"
          },
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "IDepositExecute",
                  "referencedDeclaration": 9816,
                  "type": "contract IDepositExecute"
                },
                "id": 8785,
                "name": "UserDefinedTypeName",
                "src": "401:15:45"
              }
            ],
            "id": 8786,
            "name": "InheritanceSpecifier",
            "src": "401:15:45"
          },
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "HandlerHelpers",
                  "referencedDeclaration": 9782,
                  "type": "contract HandlerHelpers"
                },
                "id": 8787,
                "name": "UserDefinedTypeName",
                "src": "418:14:45"
              }
            ],
            "id": 8788,
            "name": "InheritanceSpecifier",
            "src": "418:14:45"
          },
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ERC20Safe",
                  "referencedDeclaration": 7751,
                  "type": "contract ERC20Safe"
                },
                "id": 8789,
                "name": "UserDefinedTypeName",
                "src": "434:9:45"
              }
            ],
            "id": 8790,
            "name": "InheritanceSpecifier",
            "src": "434:9:45"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "name": "",
              "overrides": null,
              "scope": 8996,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": "@param bridgeAddress Contract address of previously deployed Bridge."
                },
                "id": 8791,
                "name": "StructuredDocumentation",
                "src": "450:88:45"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "bridgeAddress",
                      "overrides": null,
                      "scope": 8800,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 8792,
                        "name": "ElementaryTypeName",
                        "src": "564:7:45"
                      }
                    ],
                    "id": 8793,
                    "name": "VariableDeclaration",
                    "src": "564:30:45"
                  }
                ],
                "id": 8794,
                "name": "ParameterList",
                "src": "554:46:45"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 8798,
                "name": "ParameterList",
                "src": "638:0:45"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 9782,
                      "type": "type(contract HandlerHelpers)",
                      "value": "HandlerHelpers"
                    },
                    "id": 8795,
                    "name": "Identifier",
                    "src": "608:14:45"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 8793,
                      "type": "address",
                      "value": "bridgeAddress"
                    },
                    "id": 8796,
                    "name": "Identifier",
                    "src": "623:13:45"
                  }
                ],
                "id": 8797,
                "name": "ModifierInvocation",
                "src": "608:29:45"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 8799,
                "name": "Block",
                "src": "638:7:45"
              }
            ],
            "id": 8800,
            "name": "FunctionDefinition",
            "src": "543:102:45"
          },
          {
            "attributes": {
              "baseFunctions": [
                9807
              ],
              "functionSelector": "b07e54bb",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "deposit",
              "scope": 8996,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice A deposit is initiatied by making a deposit in the Bridge contract.\n@param resourceID ResourceID used to find address of token to be used for deposit.\n@param depositer Address of account making the deposit in the Bridge contract.\n@param data Consists of {amount} padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\namount                      uint256     bytes   0 - 32\n@dev Depending if the corresponding {tokenAddress} for the parsed {resourceID} is\nmarked true in {_burnList}, deposited tokens will be burned, if not, they will be locked.\n@return an empty data."
                },
                "id": 8801,
                "name": "StructuredDocumentation",
                "src": "651:696:45"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 8809,
                "name": "OverrideSpecifier",
                "src": "1470:8:45"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resourceID",
                      "overrides": null,
                      "scope": 8865,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 8802,
                        "name": "ElementaryTypeName",
                        "src": "1378:7:45"
                      }
                    ],
                    "id": 8803,
                    "name": "VariableDeclaration",
                    "src": "1378:18:45"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "depositer",
                      "overrides": null,
                      "scope": 8865,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 8804,
                        "name": "ElementaryTypeName",
                        "src": "1406:7:45"
                      }
                    ],
                    "id": 8805,
                    "name": "VariableDeclaration",
                    "src": "1406:17:45"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 8865,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 8806,
                        "name": "ElementaryTypeName",
                        "src": "1433:5:45"
                      }
                    ],
                    "id": 8807,
                    "name": "VariableDeclaration",
                    "src": "1433:21:45"
                  }
                ],
                "id": 8808,
                "name": "ParameterList",
                "src": "1368:92:45"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 8865,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 8812,
                        "name": "ElementaryTypeName",
                        "src": "1499:5:45"
                      }
                    ],
                    "id": 8813,
                    "name": "VariableDeclaration",
                    "src": "1499:12:45"
                  }
                ],
                "id": 8814,
                "name": "ParameterList",
                "src": "1498:14:45"
              },
              {
                "attributes": {
                  "arguments": null
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 9675,
                      "type": "modifier ()",
                      "value": "onlyBridge"
                    },
                    "id": 8810,
                    "name": "Identifier",
                    "src": "1479:10:45"
                  }
                ],
                "id": 8811,
                "name": "ModifierInvocation",
                "src": "1479:10:45"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        8816
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "amount",
                          "overrides": null,
                          "scope": 8864,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 8815,
                            "name": "ElementaryTypeName",
                            "src": "1523:7:45"
                          }
                        ],
                        "id": 8816,
                        "name": "VariableDeclaration",
                        "src": "1523:21:45"
                      }
                    ],
                    "id": 8817,
                    "name": "VariableDeclarationStatement",
                    "src": "1523:21:45"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8816,
                                  "type": "uint256",
                                  "value": "amount"
                                },
                                "id": 8818,
                                "name": "Identifier",
                                "src": "1555:6:45"
                              }
                            ],
                            "id": 8819,
                            "name": "TupleExpression",
                            "src": "1554:8:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "decode",
                                  "referencedDeclaration": null,
                                  "type": "function () pure"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -1,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 8820,
                                    "name": "Identifier",
                                    "src": "1565:3:45"
                                  }
                                ],
                                "id": 8821,
                                "name": "MemberAccess",
                                "src": "1565:10:45"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8807,
                                  "type": "bytes calldata",
                                  "value": "data"
                                },
                                "id": 8822,
                                "name": "Identifier",
                                "src": "1576:4:45"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint",
                                          "type": null
                                        },
                                        "id": 8823,
                                        "name": "ElementaryTypeName",
                                        "src": "1583:4:45"
                                      }
                                    ],
                                    "id": 8824,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "1583:4:45"
                                  }
                                ],
                                "id": 8825,
                                "name": "TupleExpression",
                                "src": "1582:6:45"
                              }
                            ],
                            "id": 8826,
                            "name": "FunctionCall",
                            "src": "1565:24:45"
                          }
                        ],
                        "id": 8827,
                        "name": "Assignment",
                        "src": "1554:35:45"
                      }
                    ],
                    "id": 8828,
                    "name": "ExpressionStatement",
                    "src": "1554:35:45"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        8830
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "tokenAddress",
                          "overrides": null,
                          "scope": 8864,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 8829,
                            "name": "ElementaryTypeName",
                            "src": "1600:7:45"
                          }
                        ],
                        "id": 8830,
                        "name": "VariableDeclaration",
                        "src": "1600:20:45"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9656,
                              "type": "mapping(bytes32 => address)",
                              "value": "_resourceIDToTokenContractAddress"
                            },
                            "id": 8831,
                            "name": "Identifier",
                            "src": "1623:33:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8803,
                              "type": "bytes32",
                              "value": "resourceID"
                            },
                            "id": 8832,
                            "name": "Identifier",
                            "src": "1657:10:45"
                          }
                        ],
                        "id": 8833,
                        "name": "IndexAccess",
                        "src": "1623:45:45"
                      }
                    ],
                    "id": 8834,
                    "name": "VariableDeclarationStatement",
                    "src": "1600:68:45"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_d6f36190bb0602e32e72016fc9d55735c428c14ee06e9999974578d6c009c7ad",
                                  "typeString": "literal_string \"provided tokenAddress is not whitelisted\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8835,
                            "name": "Identifier",
                            "src": "1678:7:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9664,
                                  "type": "mapping(address => bool)",
                                  "value": "_contractWhitelist"
                                },
                                "id": 8836,
                                "name": "Identifier",
                                "src": "1686:18:45"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8830,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 8837,
                                "name": "Identifier",
                                "src": "1705:12:45"
                              }
                            ],
                            "id": 8838,
                            "name": "IndexAccess",
                            "src": "1686:32:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "70726f766964656420746f6b656e41646472657373206973206e6f742077686974656c6973746564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"provided tokenAddress is not whitelisted\"",
                              "value": "provided tokenAddress is not whitelisted"
                            },
                            "id": 8839,
                            "name": "Literal",
                            "src": "1720:42:45"
                          }
                        ],
                        "id": 8840,
                        "name": "FunctionCall",
                        "src": "1678:85:45"
                      }
                    ],
                    "id": 8841,
                    "name": "ExpressionStatement",
                    "src": "1678:85:45"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9668,
                              "type": "mapping(address => bool)",
                              "value": "_burnList"
                            },
                            "id": 8842,
                            "name": "Identifier",
                            "src": "1778:9:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8830,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 8843,
                            "name": "Identifier",
                            "src": "1788:12:45"
                          }
                        ],
                        "id": 8844,
                        "name": "IndexAccess",
                        "src": "1778:23:45"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7658,
                                      "type": "function (address,address,uint256)",
                                      "value": "burnERC20"
                                    },
                                    "id": 8845,
                                    "name": "Identifier",
                                    "src": "1817:9:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8830,
                                      "type": "address",
                                      "value": "tokenAddress"
                                    },
                                    "id": 8846,
                                    "name": "Identifier",
                                    "src": "1827:12:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8805,
                                      "type": "address",
                                      "value": "depositer"
                                    },
                                    "id": 8847,
                                    "name": "Identifier",
                                    "src": "1841:9:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8816,
                                      "type": "uint256",
                                      "value": "amount"
                                    },
                                    "id": 8848,
                                    "name": "Identifier",
                                    "src": "1852:6:45"
                                  }
                                ],
                                "id": 8849,
                                "name": "FunctionCall",
                                "src": "1817:42:45"
                              }
                            ],
                            "id": 8850,
                            "name": "ExpressionStatement",
                            "src": "1817:42:45"
                          }
                        ],
                        "id": 8851,
                        "name": "Block",
                        "src": "1803:67:45"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7587,
                                      "type": "function (address,address,address,uint256)",
                                      "value": "lockERC20"
                                    },
                                    "id": 8852,
                                    "name": "Identifier",
                                    "src": "1890:9:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8830,
                                      "type": "address",
                                      "value": "tokenAddress"
                                    },
                                    "id": 8853,
                                    "name": "Identifier",
                                    "src": "1900:12:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8805,
                                      "type": "address",
                                      "value": "depositer"
                                    },
                                    "id": 8854,
                                    "name": "Identifier",
                                    "src": "1914:9:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_ERC20Handler_$8996",
                                              "typeString": "contract ERC20Handler"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "address",
                                              "type": null
                                            },
                                            "id": 8855,
                                            "name": "ElementaryTypeName",
                                            "src": "1925:7:45"
                                          }
                                        ],
                                        "id": 8856,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "1925:7:45"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -28,
                                          "type": "contract ERC20Handler",
                                          "value": "this"
                                        },
                                        "id": 8857,
                                        "name": "Identifier",
                                        "src": "1933:4:45"
                                      }
                                    ],
                                    "id": 8858,
                                    "name": "FunctionCall",
                                    "src": "1925:13:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8816,
                                      "type": "uint256",
                                      "value": "amount"
                                    },
                                    "id": 8859,
                                    "name": "Identifier",
                                    "src": "1940:6:45"
                                  }
                                ],
                                "id": 8860,
                                "name": "FunctionCall",
                                "src": "1890:57:45"
                              }
                            ],
                            "id": 8861,
                            "name": "ExpressionStatement",
                            "src": "1890:57:45"
                          }
                        ],
                        "id": 8862,
                        "name": "Block",
                        "src": "1876:82:45"
                      }
                    ],
                    "id": 8863,
                    "name": "IfStatement",
                    "src": "1774:184:45"
                  }
                ],
                "id": 8864,
                "name": "Block",
                "src": "1513:451:45"
              }
            ],
            "id": 8865,
            "name": "FunctionDefinition",
            "src": "1352:612:45"
          },
          {
            "attributes": {
              "baseFunctions": [
                9815
              ],
              "functionSelector": "e248cff2",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "executeProposal",
              "scope": 8996,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\nby a relayer on the deposit's destination chain.\n@param data Consists of {resourceID}, {amount}, {lenDestinationRecipientAddress},\nand {destinationRecipientAddress} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\namount                                 uint256     bytes  0 - 32\ndestinationRecipientAddress length     uint256     bytes  32 - 64\ndestinationRecipientAddress            bytes       bytes  64 - END"
                },
                "id": 8866,
                "name": "StructuredDocumentation",
                "src": "1970:634:45"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 8872,
                "name": "OverrideSpecifier",
                "src": "2684:8:45"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resourceID",
                      "overrides": null,
                      "scope": 8953,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 8867,
                        "name": "ElementaryTypeName",
                        "src": "2634:7:45"
                      }
                    ],
                    "id": 8868,
                    "name": "VariableDeclaration",
                    "src": "2634:18:45"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 8953,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 8869,
                        "name": "ElementaryTypeName",
                        "src": "2654:5:45"
                      }
                    ],
                    "id": 8870,
                    "name": "VariableDeclaration",
                    "src": "2654:19:45"
                  }
                ],
                "id": 8871,
                "name": "ParameterList",
                "src": "2633:41:45"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 8875,
                "name": "ParameterList",
                "src": "2704:0:45"
              },
              {
                "attributes": {
                  "arguments": null
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 9675,
                      "type": "modifier ()",
                      "value": "onlyBridge"
                    },
                    "id": 8873,
                    "name": "Identifier",
                    "src": "2693:10:45"
                  }
                ],
                "id": 8874,
                "name": "ModifierInvocation",
                "src": "2693:10:45"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        8877
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "amount",
                          "overrides": null,
                          "scope": 8952,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 8876,
                            "name": "ElementaryTypeName",
                            "src": "2714:7:45"
                          }
                        ],
                        "id": 8877,
                        "name": "VariableDeclaration",
                        "src": "2714:20:45"
                      }
                    ],
                    "id": 8878,
                    "name": "VariableDeclarationStatement",
                    "src": "2714:20:45"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        8880
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "lenDestinationRecipientAddress",
                          "overrides": null,
                          "scope": 8952,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 8879,
                            "name": "ElementaryTypeName",
                            "src": "2744:7:45"
                          }
                        ],
                        "id": 8880,
                        "name": "VariableDeclaration",
                        "src": "2744:44:45"
                      }
                    ],
                    "id": 8881,
                    "name": "VariableDeclarationStatement",
                    "src": "2744:44:45"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        8883
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "destinationRecipientAddress",
                          "overrides": null,
                          "scope": 8952,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 8882,
                            "name": "ElementaryTypeName",
                            "src": "2798:5:45"
                          }
                        ],
                        "id": 8883,
                        "name": "VariableDeclaration",
                        "src": "2798:41:45"
                      }
                    ],
                    "id": 8884,
                    "name": "VariableDeclarationStatement",
                    "src": "2798:41:45"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "tuple(uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8877,
                                  "type": "uint256",
                                  "value": "amount"
                                },
                                "id": 8885,
                                "name": "Identifier",
                                "src": "2851:6:45"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8880,
                                  "type": "uint256",
                                  "value": "lenDestinationRecipientAddress"
                                },
                                "id": 8886,
                                "name": "Identifier",
                                "src": "2859:30:45"
                              }
                            ],
                            "id": 8887,
                            "name": "TupleExpression",
                            "src": "2850:40:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple(uint256,uint256)",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                                      "typeString": "tuple(type(uint256),type(uint256))"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "decode",
                                  "referencedDeclaration": null,
                                  "type": "function () pure"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -1,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 8888,
                                    "name": "Identifier",
                                    "src": "2893:3:45"
                                  }
                                ],
                                "id": 8889,
                                "name": "MemberAccess",
                                "src": "2893:10:45"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8870,
                                  "type": "bytes calldata",
                                  "value": "data"
                                },
                                "id": 8890,
                                "name": "Identifier",
                                "src": "2904:4:45"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "tuple(type(uint256),type(uint256))"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint",
                                          "type": null
                                        },
                                        "id": 8891,
                                        "name": "ElementaryTypeName",
                                        "src": "2911:4:45"
                                      }
                                    ],
                                    "id": 8892,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "2911:4:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint",
                                          "type": null
                                        },
                                        "id": 8893,
                                        "name": "ElementaryTypeName",
                                        "src": "2917:4:45"
                                      }
                                    ],
                                    "id": 8894,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "2917:4:45"
                                  }
                                ],
                                "id": 8895,
                                "name": "TupleExpression",
                                "src": "2910:12:45"
                              }
                            ],
                            "id": 8896,
                            "name": "FunctionCall",
                            "src": "2893:30:45"
                          }
                        ],
                        "id": 8897,
                        "name": "Assignment",
                        "src": "2850:73:45"
                      }
                    ],
                    "id": 8898,
                    "name": "ExpressionStatement",
                    "src": "2850:73:45"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8883,
                              "type": "bytes memory",
                              "value": "destinationRecipientAddress"
                            },
                            "id": 8899,
                            "name": "Identifier",
                            "src": "2933:27:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes calldata",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                      "typeString": "bytes calldata slice"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes storage pointer)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": null
                                    },
                                    "id": 8900,
                                    "name": "ElementaryTypeName",
                                    "src": "2963:5:45"
                                  }
                                ],
                                "id": 8901,
                                "name": "ElementaryTypeNameExpression",
                                "src": "2963:5:45"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "bytes calldata slice"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8870,
                                      "type": "bytes calldata",
                                      "value": "data"
                                    },
                                    "id": 8902,
                                    "name": "Identifier",
                                    "src": "2969:4:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "3634",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 64",
                                      "value": "64"
                                    },
                                    "id": 8903,
                                    "name": "Literal",
                                    "src": "2974:2:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "+",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "3634",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 64",
                                          "value": "64"
                                        },
                                        "id": 8904,
                                        "name": "Literal",
                                        "src": "2977:2:45"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8880,
                                          "type": "uint256",
                                          "value": "lenDestinationRecipientAddress"
                                        },
                                        "id": 8905,
                                        "name": "Identifier",
                                        "src": "2982:30:45"
                                      }
                                    ],
                                    "id": 8906,
                                    "name": "BinaryOperation",
                                    "src": "2977:35:45"
                                  }
                                ],
                                "id": 8907,
                                "name": "IndexRangeAccess",
                                "src": "2969:44:45"
                              }
                            ],
                            "id": 8908,
                            "name": "FunctionCall",
                            "src": "2963:51:45"
                          }
                        ],
                        "id": 8909,
                        "name": "Assignment",
                        "src": "2933:81:45"
                      }
                    ],
                    "id": 8910,
                    "name": "ExpressionStatement",
                    "src": "2933:81:45"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        8912
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "recipientAddress",
                          "overrides": null,
                          "scope": 8952,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes20",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes20",
                              "type": "bytes20"
                            },
                            "id": 8911,
                            "name": "ElementaryTypeName",
                            "src": "3025:7:45"
                          }
                        ],
                        "id": 8912,
                        "name": "VariableDeclaration",
                        "src": "3025:24:45"
                      }
                    ],
                    "id": 8913,
                    "name": "VariableDeclarationStatement",
                    "src": "3025:24:45"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        8915
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "tokenAddress",
                          "overrides": null,
                          "scope": 8952,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 8914,
                            "name": "ElementaryTypeName",
                            "src": "3059:7:45"
                          }
                        ],
                        "id": 8915,
                        "name": "VariableDeclaration",
                        "src": "3059:20:45"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9656,
                              "type": "mapping(bytes32 => address)",
                              "value": "_resourceIDToTokenContractAddress"
                            },
                            "id": 8916,
                            "name": "Identifier",
                            "src": "3082:33:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8868,
                              "type": "bytes32",
                              "value": "resourceID"
                            },
                            "id": 8917,
                            "name": "Identifier",
                            "src": "3116:10:45"
                          }
                        ],
                        "id": 8918,
                        "name": "IndexAccess",
                        "src": "3082:45:45"
                      }
                    ],
                    "id": 8919,
                    "name": "VariableDeclarationStatement",
                    "src": "3059:68:45"
                  },
                  {
                    "attributes": {
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 8883,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "3191:27:45",
                          "valueSize": 1
                        },
                        {
                          "declaration": 8912,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "3161:16:45",
                          "valueSize": 1
                        }
                      ],
                      "operations": "{\n    recipientAddress := mload(add(destinationRecipientAddress, 0x20))\n}"
                    },
                    "children": [],
                    "id": 8920,
                    "name": "InlineAssembly",
                    "src": "3138:98:45"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_d6f36190bb0602e32e72016fc9d55735c428c14ee06e9999974578d6c009c7ad",
                                  "typeString": "literal_string \"provided tokenAddress is not whitelisted\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 8921,
                            "name": "Identifier",
                            "src": "3246:7:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9664,
                                  "type": "mapping(address => bool)",
                                  "value": "_contractWhitelist"
                                },
                                "id": 8922,
                                "name": "Identifier",
                                "src": "3254:18:45"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8915,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 8923,
                                "name": "Identifier",
                                "src": "3273:12:45"
                              }
                            ],
                            "id": 8924,
                            "name": "IndexAccess",
                            "src": "3254:32:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "70726f766964656420746f6b656e41646472657373206973206e6f742077686974656c6973746564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"provided tokenAddress is not whitelisted\"",
                              "value": "provided tokenAddress is not whitelisted"
                            },
                            "id": 8925,
                            "name": "Literal",
                            "src": "3288:42:45"
                          }
                        ],
                        "id": 8926,
                        "name": "FunctionCall",
                        "src": "3246:85:45"
                      }
                    ],
                    "id": 8927,
                    "name": "ExpressionStatement",
                    "src": "3246:85:45"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9668,
                              "type": "mapping(address => bool)",
                              "value": "_burnList"
                            },
                            "id": 8928,
                            "name": "Identifier",
                            "src": "3346:9:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8915,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 8929,
                            "name": "Identifier",
                            "src": "3356:12:45"
                          }
                        ],
                        "id": 8930,
                        "name": "IndexAccess",
                        "src": "3346:23:45"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7634,
                                      "type": "function (address,address,uint256)",
                                      "value": "mintERC20"
                                    },
                                    "id": 8931,
                                    "name": "Identifier",
                                    "src": "3385:9:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8915,
                                      "type": "address",
                                      "value": "tokenAddress"
                                    },
                                    "id": 8932,
                                    "name": "Identifier",
                                    "src": "3395:12:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address payable",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes20",
                                              "typeString": "bytes20"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "address",
                                              "type": null
                                            },
                                            "id": 8933,
                                            "name": "ElementaryTypeName",
                                            "src": "3409:7:45"
                                          }
                                        ],
                                        "id": 8934,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "3409:7:45"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8912,
                                          "type": "bytes20",
                                          "value": "recipientAddress"
                                        },
                                        "id": 8935,
                                        "name": "Identifier",
                                        "src": "3417:16:45"
                                      }
                                    ],
                                    "id": 8936,
                                    "name": "FunctionCall",
                                    "src": "3409:25:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8877,
                                      "type": "uint256",
                                      "value": "amount"
                                    },
                                    "id": 8937,
                                    "name": "Identifier",
                                    "src": "3436:6:45"
                                  }
                                ],
                                "id": 8938,
                                "name": "FunctionCall",
                                "src": "3385:58:45"
                              }
                            ],
                            "id": 8939,
                            "name": "ExpressionStatement",
                            "src": "3385:58:45"
                          }
                        ],
                        "id": 8940,
                        "name": "Block",
                        "src": "3371:83:45"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7610,
                                      "type": "function (address,address,uint256)",
                                      "value": "releaseERC20"
                                    },
                                    "id": 8941,
                                    "name": "Identifier",
                                    "src": "3474:12:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8915,
                                      "type": "address",
                                      "value": "tokenAddress"
                                    },
                                    "id": 8942,
                                    "name": "Identifier",
                                    "src": "3487:12:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address payable",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes20",
                                              "typeString": "bytes20"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "address",
                                              "type": null
                                            },
                                            "id": 8943,
                                            "name": "ElementaryTypeName",
                                            "src": "3501:7:45"
                                          }
                                        ],
                                        "id": 8944,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "3501:7:45"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8912,
                                          "type": "bytes20",
                                          "value": "recipientAddress"
                                        },
                                        "id": 8945,
                                        "name": "Identifier",
                                        "src": "3509:16:45"
                                      }
                                    ],
                                    "id": 8946,
                                    "name": "FunctionCall",
                                    "src": "3501:25:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8877,
                                      "type": "uint256",
                                      "value": "amount"
                                    },
                                    "id": 8947,
                                    "name": "Identifier",
                                    "src": "3528:6:45"
                                  }
                                ],
                                "id": 8948,
                                "name": "FunctionCall",
                                "src": "3474:61:45"
                              }
                            ],
                            "id": 8949,
                            "name": "ExpressionStatement",
                            "src": "3474:61:45"
                          }
                        ],
                        "id": 8950,
                        "name": "Block",
                        "src": "3460:86:45"
                      }
                    ],
                    "id": 8951,
                    "name": "IfStatement",
                    "src": "3342:204:45"
                  }
                ],
                "id": 8952,
                "name": "Block",
                "src": "2704:848:45"
              }
            ],
            "id": 8953,
            "name": "FunctionDefinition",
            "src": "2609:943:45"
          },
          {
            "attributes": {
              "baseFunctions": [
                9736
              ],
              "functionSelector": "0968f264",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "withdraw",
              "scope": 8996,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Used to manually release ERC20 tokens from ERC20Safe.\n@param data Consists of {tokenAddress}, {recipient}, and {amount} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenAddress                           address     bytes  0 - 32\nrecipient                              address     bytes  32 - 64\namount                                 uint        bytes  64 - 96"
                },
                "id": 8954,
                "name": "StructuredDocumentation",
                "src": "3558:480:45"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 8958,
                "name": "OverrideSpecifier",
                "src": "4089:8:45"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 8995,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 8955,
                        "name": "ElementaryTypeName",
                        "src": "4061:5:45"
                      }
                    ],
                    "id": 8956,
                    "name": "VariableDeclaration",
                    "src": "4061:17:45"
                  }
                ],
                "id": 8957,
                "name": "ParameterList",
                "src": "4060:19:45"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 8961,
                "name": "ParameterList",
                "src": "4109:0:45"
              },
              {
                "attributes": {
                  "arguments": null
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 9675,
                      "type": "modifier ()",
                      "value": "onlyBridge"
                    },
                    "id": 8959,
                    "name": "Identifier",
                    "src": "4098:10:45"
                  }
                ],
                "id": 8960,
                "name": "ModifierInvocation",
                "src": "4098:10:45"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        8963
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "tokenAddress",
                          "overrides": null,
                          "scope": 8994,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 8962,
                            "name": "ElementaryTypeName",
                            "src": "4119:7:45"
                          }
                        ],
                        "id": 8963,
                        "name": "VariableDeclaration",
                        "src": "4119:20:45"
                      }
                    ],
                    "id": 8964,
                    "name": "VariableDeclarationStatement",
                    "src": "4119:20:45"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        8966
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "recipient",
                          "overrides": null,
                          "scope": 8994,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 8965,
                            "name": "ElementaryTypeName",
                            "src": "4149:7:45"
                          }
                        ],
                        "id": 8966,
                        "name": "VariableDeclaration",
                        "src": "4149:17:45"
                      }
                    ],
                    "id": 8967,
                    "name": "VariableDeclarationStatement",
                    "src": "4149:17:45"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        8969
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "amount",
                          "overrides": null,
                          "scope": 8994,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 8968,
                            "name": "ElementaryTypeName",
                            "src": "4176:4:45"
                          }
                        ],
                        "id": 8969,
                        "name": "VariableDeclaration",
                        "src": "4176:11:45"
                      }
                    ],
                    "id": 8970,
                    "name": "VariableDeclarationStatement",
                    "src": "4176:11:45"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "tuple(address,address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8963,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 8971,
                                "name": "Identifier",
                                "src": "4199:12:45"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8966,
                                  "type": "address",
                                  "value": "recipient"
                                },
                                "id": 8972,
                                "name": "Identifier",
                                "src": "4213:9:45"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8969,
                                  "type": "uint256",
                                  "value": "amount"
                                },
                                "id": 8973,
                                "name": "Identifier",
                                "src": "4224:6:45"
                              }
                            ],
                            "id": 8974,
                            "name": "TupleExpression",
                            "src": "4198:33:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple(address payable,address payable,uint256)",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                                      "typeString": "tuple(type(address),type(address),type(uint256))"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "decode",
                                  "referencedDeclaration": null,
                                  "type": "function () pure"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -1,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 8975,
                                    "name": "Identifier",
                                    "src": "4234:3:45"
                                  }
                                ],
                                "id": 8976,
                                "name": "MemberAccess",
                                "src": "4234:10:45"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8956,
                                  "type": "bytes memory",
                                  "value": "data"
                                },
                                "id": 8977,
                                "name": "Identifier",
                                "src": "4245:4:45"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "tuple(type(address),type(address),type(uint256))"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address",
                                          "type": null
                                        },
                                        "id": 8978,
                                        "name": "ElementaryTypeName",
                                        "src": "4252:7:45"
                                      }
                                    ],
                                    "id": 8979,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4252:7:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address",
                                          "type": null
                                        },
                                        "id": 8980,
                                        "name": "ElementaryTypeName",
                                        "src": "4261:7:45"
                                      }
                                    ],
                                    "id": 8981,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4261:7:45"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint",
                                          "type": null
                                        },
                                        "id": 8982,
                                        "name": "ElementaryTypeName",
                                        "src": "4270:4:45"
                                      }
                                    ],
                                    "id": 8983,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4270:4:45"
                                  }
                                ],
                                "id": 8984,
                                "name": "TupleExpression",
                                "src": "4251:24:45"
                              }
                            ],
                            "id": 8985,
                            "name": "FunctionCall",
                            "src": "4234:42:45"
                          }
                        ],
                        "id": 8986,
                        "name": "Assignment",
                        "src": "4198:78:45"
                      }
                    ],
                    "id": 8987,
                    "name": "ExpressionStatement",
                    "src": "4198:78:45"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7610,
                              "type": "function (address,address,uint256)",
                              "value": "releaseERC20"
                            },
                            "id": 8988,
                            "name": "Identifier",
                            "src": "4287:12:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8963,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 8989,
                            "name": "Identifier",
                            "src": "4300:12:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8966,
                              "type": "address",
                              "value": "recipient"
                            },
                            "id": 8990,
                            "name": "Identifier",
                            "src": "4314:9:45"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8969,
                              "type": "uint256",
                              "value": "amount"
                            },
                            "id": 8991,
                            "name": "Identifier",
                            "src": "4325:6:45"
                          }
                        ],
                        "id": 8992,
                        "name": "FunctionCall",
                        "src": "4287:45:45"
                      }
                    ],
                    "id": 8993,
                    "name": "ExpressionStatement",
                    "src": "4287:45:45"
                  }
                ],
                "id": 8994,
                "name": "Block",
                "src": "4109:230:45"
              }
            ],
            "id": 8995,
            "name": "FunctionDefinition",
            "src": "4043:296:45"
          }
        ],
        "id": 8996,
        "name": "ContractDefinition",
        "src": "376:3965:45"
      }
    ],
    "id": 8997,
    "name": "SourceUnit",
    "src": "42:4300:45"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.3",
  "updatedAt": "2021-11-29T02:07:34.265Z",
  "devdoc": {
    "author": "ChainSafe Systems.",
    "kind": "dev",
    "methods": {
      "constructor": {
        "params": {
          "bridgeAddress": "Contract address of previously deployed Bridge."
        }
      },
      "deposit(bytes32,address,bytes)": {
        "details": "Depending if the corresponding {tokenAddress} for the parsed {resourceID} is marked true in {_burnList}, deposited tokens will be burned, if not, they will be locked.",
        "params": {
          "data": "Consists of {amount} padded to 32 bytes.",
          "depositer": "Address of account making the deposit in the Bridge contract.",
          "resourceID": "ResourceID used to find address of token to be used for deposit."
        },
        "returns": {
          "_0": "an empty data."
        }
      },
      "executeProposal(bytes32,bytes)": {
        "params": {
          "data": "Consists of {resourceID}, {amount}, {lenDestinationRecipientAddress}, and {destinationRecipientAddress} all padded to 32 bytes."
        }
      },
      "setBurnable(address)": {
        "params": {
          "contractAddress": "Address of contract to be used when making or executing deposits."
        }
      },
      "setResource(bytes32,address)": {
        "params": {
          "contractAddress": "Address of contract to be called when a deposit is made and a deposited is executed.",
          "resourceID": "ResourceID to be used when making deposits."
        }
      },
      "withdraw(bytes)": {
        "params": {
          "data": "Consists of {tokenAddress}, {recipient}, and {amount} all padded to 32 bytes."
        }
      }
    },
    "title": "Handles ERC20 deposits and deposit executions.",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "deposit(bytes32,address,bytes)": {
        "notice": "A deposit is initiatied by making a deposit in the Bridge contract.Data passed into the function should be constructed as follows: amount                      uint256     bytes   0 - 32"
      },
      "executeProposal(bytes32,bytes)": {
        "notice": "Proposal execution should be initiated when a proposal is finalized in the Bridge contract. by a relayer on the deposit's destination chain.Data passed into the function should be constructed as follows: amount                                 uint256     bytes  0 - 32 destinationRecipientAddress length     uint256     bytes  32 - 64 destinationRecipientAddress            bytes       bytes  64 - END"
      },
      "setBurnable(address)": {
        "notice": "First verifies {contractAddress} is whitelisted, then sets {_burnList}[{contractAddress}] to true."
      },
      "setResource(bytes32,address)": {
        "notice": "First verifies {_resourceIDToContractAddress}[{resourceID}] and {_contractAddressToResourceID}[{contractAddress}] are not already set, then sets {_resourceIDToContractAddress} with {contractAddress}, {_contractAddressToResourceID} with {resourceID}, and {_contractWhitelist} to true for {contractAddress}."
      },
      "withdraw(bytes)": {
        "notice": "Used to manually release ERC20 tokens from ERC20Safe.Data passed into the function should be constructed as follows: tokenAddress                           address     bytes  0 - 32 recipient                              address     bytes  32 - 64 amount                                 uint        bytes  64 - 96"
      }
    },
    "notice": "This contract is intended to be used with the Bridge contract.",
    "version": 1
  }
}