{
  "contractName": "TokenWrapper",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "hasInitialized",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_script",
          "type": "bytes"
        }
      ],
      "name": "getEVMScriptExecutor",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getRecoveryVault",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "token",
          "type": "address"
        }
      ],
      "name": "allowRecoverability",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "appId",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInitializationBlock",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "transferToVault",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_sender",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        },
        {
          "name": "_params",
          "type": "uint256[]"
        }
      ],
      "name": "canPerform",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getEVMScriptRegistry",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "kernel",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "depositedToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isPetrified",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "entity",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "entity",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Withdrawal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "executor",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "script",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "input",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "returnData",
          "type": "bytes"
        }
      ],
      "name": "ScriptResult",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "vault",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "RecoverToVault",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_depositedToken",
          "type": "address"
        },
        {
          "name": "_name",
          "type": "string"
        },
        {
          "name": "_symbol",
          "type": "string"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_owner",
          "type": "address"
        },
        {
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "balanceOfAt",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyAt",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isForwarder",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_evmScript",
          "type": "bytes"
        }
      ],
      "name": "forward",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_sender",
          "type": "address"
        },
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "canForward",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.4.24+commit.e67f0147\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"hasInitialized\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_script\",\"type\":\"bytes\"}],\"name\":\"getEVMScriptExecutor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getRecoveryVault\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"balanceOfAt\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"allowRecoverability\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"appId\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getInitializationBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_depositedToken\",\"type\":\"address\"},{\"name\":\"_name\",\"type\":\"string\"},{\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"totalSupplyAt\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"transferToVault\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_sender\",\"type\":\"address\"},{\"name\":\"_role\",\"type\":\"bytes32\"},{\"name\":\"_params\",\"type\":\"uint256[]\"}],\"name\":\"canPerform\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getEVMScriptRegistry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_sender\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"canForward\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"kernel\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_evmScript\",\"type\":\"bytes\"}],\"name\":\"forward\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"depositedToken\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isPetrified\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isForwarder\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"entity\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"entity\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"script\",\"type\":\"bytes\"},{\"indexed\":false,\"name\":\"input\",\"type\":\"bytes\"},{\"indexed\":false,\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ScriptResult\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"vault\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RecoverToVault\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"allowRecoverability(address)\":{\"details\":\"By default deriving from AragonApp makes it recoverable\",\"params\":{\"token\":\"Token address that would be recovered\"},\"return\":\"bool whether the app allows the recovery\"},\"canForward(address,bytes)\":{\"details\":\"IForwarder interface conformance\",\"params\":{\"_sender\":\"Address of the account intending to forward an action\"},\"return\":\"True if the given address can forward actions, false otherwise\"},\"canPerform(address,bytes32,uint256[])\":{\"details\":\"Check whether an action can be performed by a sender for a particular role on this app\",\"params\":{\"_params\":\"Permission params for the role\",\"_role\":\"Role on this app\",\"_sender\":\"Sender of the call\"},\"return\":\"Boolean indicating whether the sender has the permissions to perform the action.        Always returns false if the app hasn't been initialized yet.\"},\"deposit(uint256)\":{\"details\":\"Only up to 2^192 - 1 tokens are ever allowed to be deposited, due to the underlying     storage format.\",\"params\":{\"_amount\":\"Amount to wrap\"}},\"forward(bytes)\":{\"details\":\"IForwarder interface conformance. Forwards any token holder action.\",\"params\":{\"_evmScript\":\"Script being executed\"}},\"getInitializationBlock()\":{\"return\":\"Block number in which the contract was initialized\"},\"getRecoveryVault()\":{\"details\":\"Get the recovery vault for the app\",\"return\":\"Recovery vault address for the app\"},\"hasInitialized()\":{\"return\":\"Whether the contract has been initialized by the time of the current block\"},\"initialize(address,string,string)\":{\"params\":{\"_depositedToken\":\"The ERC20 token to be wrapped\",\"_name\":\"The wrapped token's name\",\"_symbol\":\"The wrapped token's symbol\"}},\"isForwarder()\":{\"details\":\"IForwarder interface conformance\",\"return\":\"Always true\"},\"transferToVault(address)\":{\"params\":{\"_token\":\"Token balance to be sent to recovery vault.\"}},\"withdraw(uint256)\":{\"params\":{\"_amount\":\"Amount to unwrap\"}}},\"title\":\"TokenWrapper\"},\"userdoc\":{\"methods\":{\"canForward(address,bytes)\":{\"notice\":\"Tells whether `_sender` can forward actions or not\"},\"deposit(uint256)\":{\"notice\":\"Wrap `@tokenAmount(self.depositedToken(): address, _amount)`\"},\"forward(bytes)\":{\"notice\":\"Execute desired action as a token holder\"},\"initialize(address,string,string)\":{\"notice\":\"Create a new \\\"wrapped\\\" checkpointed token that is convertible from a normal ERC20 token\"},\"isForwarder()\":{\"notice\":\"Tells whether the TokenWrapper app is a forwarder or not\"},\"transferToVault(address)\":{\"notice\":\"Send funds to recovery Vault. This contract should never receive funds,        but in case it does, this function allows one to recover them.\"},\"withdraw(uint256)\":{\"notice\":\"Unwrap `@tokenAmount(self.depositedToken(): address, _amount)`\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/TokenWrapper.sol\":\"TokenWrapper\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/TokenWrapper.sol\":{\"keccak256\":\"0x6c873e6a579aa8496bcde71406940469b6d8cb96933e6debfb122599de9803bc\",\"urls\":[\"bzzr://4d7e5a68ae094c2a17b515e5a82fd3811db5786b00ff23ce9198dc05e8cf3cf0\"]},\"@aragon/os/contracts/acl/ACLSyntaxSugar.sol\":{\"keccak256\":\"0x519915c14576b679b5ed5767d6b21b44a13aa7ae2fe7b33664ca364fafc33e00\",\"urls\":[\"bzzr://8d899afdbf161eaa5e6ce6a68d9ea420c3f98a00a71d70b293e8de8771e6aa62\"]},\"@aragon/os/contracts/acl/IACL.sol\":{\"keccak256\":\"0xe3492bc29d2482e65d2e39c96487b5388f6181f6bcdc6fe6329b8206b84c0cf1\",\"urls\":[\"bzzr://3af0b7e423c7ff4100a3b5868203ec169c866328f2d93d3b6a2111e916cdc411\"]},\"@aragon/os/contracts/apps/AppStorage.sol\":{\"keccak256\":\"0xb1c8eb71d1bdfe1241cc1714b280b46bbfc5bcb1e8499d42c24d3f5f5e8130f1\",\"urls\":[\"bzzr://503beec9e0e19834cb685a1d037eb9caaa412e3709d90bf6e53f51d143d58029\"]},\"@aragon/os/contracts/apps/AragonApp.sol\":{\"keccak256\":\"0xba456000d65bea8d9d82e9f1789086c3777df68fe364f8f397973b6d579f3a2a\",\"urls\":[\"bzzr://85ae9658277830a9454e34e319f8fbcb27d4e015d3bb1219c4d42ec33b9a184e\"]},\"@aragon/os/contracts/common/Autopetrified.sol\":{\"keccak256\":\"0x216e6ecbdcf45d90e8846ab2773072bd82180558a7dcf0c5425ed13b0188c5f3\",\"urls\":[\"bzzr://95b7ec6b2e8d3d8cd8c02f9be8b17d715c48a35445ba194429cca5264bfd0435\"]},\"@aragon/os/contracts/common/ConversionHelpers.sol\":{\"keccak256\":\"0x9872383d458352f5c68fa5afd1fc84ab6b172cbee33359cfa57655b8eda92416\",\"urls\":[\"bzzr://4636d13fecb497561ff5a2c54bb936a0339308bffa4e71a988b8ce00dcc249f3\"]},\"@aragon/os/contracts/common/EtherTokenConstant.sol\":{\"keccak256\":\"0xb18d16ad5127519251d9759349bf0ce1e5cfc861a776c5297b91a625c84d0363\",\"urls\":[\"bzzr://42b57d455cdbf7a8ab1383eb977c55d1826870a488cfc0cbc906a3d0f9ad2328\"]},\"@aragon/os/contracts/common/IForwarder.sol\":{\"keccak256\":\"0xd862ca160ed12725de3044b1f1c90248e8c26ec764f64f2c06ac57279a7a712b\",\"urls\":[\"bzzr://9385ac177e250e9e05e34772a7f6c1cd05fb8ecf4220c1a2c028b03da4fdeabf\"]},\"@aragon/os/contracts/common/IVaultRecoverable.sol\":{\"keccak256\":\"0xd7cb66ee5d01be69a6abab04583cc86755bf63c2f1fd03b519a876162f52b323\",\"urls\":[\"bzzr://acb75e2637639bbc83b95032a822a54a588889f203b188e97cd78292cc0ee7f5\"]},\"@aragon/os/contracts/common/Initializable.sol\":{\"keccak256\":\"0xc559fdbee1c0ee18b6f2f866c28ed6eb96859b2c88f75867ca11f25ebd00b090\",\"urls\":[\"bzzr://3d3bca8b35030fc12f94bb52a162be9520868b27ff2cb32f09179d67b6ffdf93\"]},\"@aragon/os/contracts/common/IsContract.sol\":{\"keccak256\":\"0xb76e263e3532883fe32dfe4b1447eb487a570e121c5cce01cee604dd9e44a075\",\"urls\":[\"bzzr://4a7dd7aafff496a2c6403a7e9f4e74562088b5a38e2f6e2670e38dab11b9cd8f\"]},\"@aragon/os/contracts/common/Petrifiable.sol\":{\"keccak256\":\"0xb69f9d6de8ff6f2a084aca2e0228c9008a8776482a70bcab16f46a693ec77be6\",\"urls\":[\"bzzr://ca1d7bb504b8d9d75c162f5edc8588ac86934b69f765f2010d603027dc534375\"]},\"@aragon/os/contracts/common/ReentrancyGuard.sol\":{\"keccak256\":\"0x2b2014de57620aedded6365e742e17b9a23492d754e48dfeefa56f7e5bcf5645\",\"urls\":[\"bzzr://1aa2b79808ccb14b6c2d68f9283bd40300877c749b44edf0f66d78f0c1d17708\"]},\"@aragon/os/contracts/common/SafeERC20.sol\":{\"keccak256\":\"0xd251a1207e1faa4c41500bf927310bb739b1fbc0bf880f236f8e0a9236d6a03a\",\"urls\":[\"bzzr://b2d0f5981950b4e90eaee65c85050ac4f86a79f579f4ef38e6b281c0de980b2b\"]},\"@aragon/os/contracts/common/TimeHelpers.sol\":{\"keccak256\":\"0x95b785dc4319f6ce5255c9adf5e68a469a0f837f7b02e01b6bc974b4921d4024\",\"urls\":[\"bzzr://53f41920d95ed5cb7326de3062063c9296076809377fbadf2cbd26ab0c84ffd1\"]},\"@aragon/os/contracts/common/Uint256Helpers.sol\":{\"keccak256\":\"0x83033025a3f4402be3b7bcc9a23ce96ae4fadc7f251da8f139d73a13a3400b0c\",\"urls\":[\"bzzr://bd0e059eff36a66c3a28298ed5a2e1b058ce93057866ab36063e9f3095cef36f\"]},\"@aragon/os/contracts/common/UnstructuredStorage.sol\":{\"keccak256\":\"0xe0d627fc7a7716409389f34cfe49366ba7871309d3a73262ec9608ef73e47591\",\"urls\":[\"bzzr://9742204494402cdecc66b266f0e420fcfe2677ba710db7651c40f96a63940bef\"]},\"@aragon/os/contracts/common/VaultRecoverable.sol\":{\"keccak256\":\"0x4f4de2c27ea7df731ad7d9babc37965a805282fed16b422f46a35d9d2ef931a1\",\"urls\":[\"bzzr://02d492884e6b1cf7c0869974219c40453d23cf2021cc1deaa6895e0f1b4404b9\"]},\"@aragon/os/contracts/evmscript/EVMScriptRunner.sol\":{\"keccak256\":\"0xcb6b5f7d2610321882cdc86819f1a51341c33b510fff7c60936ac7d7a015d7be\",\"urls\":[\"bzzr://bc430c1487d75909dc059de848123822c257ea9e7c812a7252c10986be253e21\"]},\"@aragon/os/contracts/evmscript/IEVMScriptExecutor.sol\":{\"keccak256\":\"0x9cab64cd2f10148d4e20433ecd11679e69be1fbde112892c48db94f92e48c571\",\"urls\":[\"bzzr://b4bf9f4fc41e6e7791a84d0847410677fc0066ed393872186d90f819f5f22cc0\"]},\"@aragon/os/contracts/evmscript/IEVMScriptRegistry.sol\":{\"keccak256\":\"0x00d98507ec160cb7cc814cc9bdebd01a414353636d6045720fe6d1592277694b\",\"urls\":[\"bzzr://170505211d1846fe24b89cfceea7f5b59a587527f68f89e8f36fed8e08b02db4\"]},\"@aragon/os/contracts/kernel/IKernel.sol\":{\"keccak256\":\"0xd02b98282ccd271b0caa86f2c249986f1619dcf41811f5dadce520b32610b68e\",\"urls\":[\"bzzr://e77000fc50cf4cfb160518af1cfb612e6cbbc06cb4357b1e03ff492fd17d8d2e\"]},\"@aragon/os/contracts/kernel/KernelConstants.sol\":{\"keccak256\":\"0x95e46be2becfb4c8952880909cd32adf5dcfa8c2e0fdf4ae054bbf83ef7f53cd\",\"urls\":[\"bzzr://68d3ce6cda841600d1e5724c0752314a084e4eeebc1fdcb6bc22c92d77c9a3db\"]},\"@aragon/os/contracts/lib/math/SafeMath.sol\":{\"keccak256\":\"0x2e11c8dcead82c452ef452f4dbced40e20ae105fa4145d920dac6e077b31d846\",\"urls\":[\"bzzr://91dbd0e3335720d4a3d12a90682b8d9834f76e75918c1f646a84debb38089ece\"]},\"@aragon/os/contracts/lib/token/ERC20.sol\":{\"keccak256\":\"0xa2e319fde92f9e70912f09bf6e99bbf8b9b798961d54ffcba59d347d37bde1b7\",\"urls\":[\"bzzr://8c9a4aec8e185884f26ffb125975bd52c2363359b9adff481649c59cfe15660f\"]},\"@aragonone/voting-connectors-contract-utils/contracts/Checkpointing.sol\":{\"keccak256\":\"0xb6821c40c370cf6088e640a32adda80a394efbdd33f678e53813875c3ff61f1a\",\"urls\":[\"bzzr://dfeaf443b60d4aff738934d125eea2ca066091453fb1373432d9ab732d12ae5f\"]},\"@aragonone/voting-connectors-contract-utils/contracts/CheckpointingHelpers.sol\":{\"keccak256\":\"0x842f94c1bd4fc1cab0273138b432e723cedcd8bf9a59ec38550a8b619a92a02d\",\"urls\":[\"bzzr://ab15e73a508883816a8d699b6f9266e56a3cc2412df09b78fa2f9e6b3ae16cc2\"]},\"@aragonone/voting-connectors-contract-utils/contracts/ERC20ViewOnly.sol\":{\"keccak256\":\"0x9d5b93d45e2d6414842a300d862e65d1df4620503a3af17b06c91c55d775a4af\",\"urls\":[\"bzzr://511a056abecf9136a6cca1e5045f8d57c0c0e4c36d0213e612f0919807d61e8a\"]},\"@aragonone/voting-connectors-contract-utils/contracts/interfaces/IERC20WithCheckpointing.sol\":{\"keccak256\":\"0x580d44b95215fcf734f4d4565822b865cfe48632ce122d86f79e933c80bf4bdc\",\"urls\":[\"bzzr://1c6c396c431336c6f8ced6fa57bed9e2056f4d24dd10aa5eb27925a361d933dc\"]},\"@aragonone/voting-connectors-contract-utils/contracts/interfaces/IERC20WithDecimals.sol\":{\"keccak256\":\"0xef25959eaa4c485d50898e970aff564a03a9b4aec6c69eb22abe76bcef31c183\",\"urls\":[\"bzzr://dd28923582fa223fe03d9aedac4ee68a1f08792a94691444a60eafc15cc8500c\"]}},\"version\":1}",
  "bytecode": "0x6080604052620000176401000000006200001d810204565b6200023b565b6200003064010000000062000125810204565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a45440000000000000000602082015290156200010c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620000d0578181015183820152602001620000b6565b50505050905090810190601f168015620000fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506200012360001964010000000062000154810204565b565b60006200014f600080516020620030bc83398151915264010000000062001ff46200023382021704565b905090565b6200016764010000000062000125810204565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a454400000000000000006020820152901562000206576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015620000d0578181015183820152602001620000b6565b5062000230600080516020620030bc8339815191528264010000000062002b776200023782021704565b50565b5490565b9055565b612e71806200024b6000396000f3006080604052600436106101745763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146101795780630803fac014610203578063095ea7b31461022c57806318160ddd1461025d57806323b872dd146102845780632914b9bd146102bb5780632e1a7d4d1461033d578063313ce5671461035757806332f0a3b5146103825780634ee2cd7e1461039757806370a08231146103c85780637e7db6e1146103f657806380afdea8146104245780638b3dd74914610439578063906571471461044e57806395d89b4114610494578063981b24d0146104a95780639d4941d8146104c1578063a1658fad146104ef578063a479e50814610563578063a9059cbb1461022c578063b6b55f2514610578578063c0774df314610590578063d4aae0c414610604578063d948d46814610619578063dad9b08614610672578063dd62ed3e14610687578063de4796ed146106bb578063fd64eccb146106d0575b600080fd5b34801561018557600080fd5b5061018e6106e5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101c85781810151838201526020016101b0565b50505050905090810190601f1680156101f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561020f57600080fd5b50610218610790565b604080519115158252519081900360200190f35b34801561023857600080fd5b5061021873ffffffffffffffffffffffffffffffffffffffff600435166024356107ba565b34801561026957600080fd5b50610272610887565b60408051918252519081900360200190f35b34801561029057600080fd5b5061021873ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356107ba565b3480156102c757600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261031494369492936024939284019190819084018382808284375094975061089f9650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561034957600080fd5b506103556004356109ab565b005b34801561036357600080fd5b5061036c610d26565b6040805160ff9092168252519081900360200190f35b34801561038e57600080fd5b50610314610dde565b3480156103a357600080fd5b5061027273ffffffffffffffffffffffffffffffffffffffff60043516602435610e4b565b3480156103d457600080fd5b5061027273ffffffffffffffffffffffffffffffffffffffff60043516610e5e565b34801561040257600080fd5b5061021873ffffffffffffffffffffffffffffffffffffffff60043516610e77565b34801561043057600080fd5b50610272610e7d565b34801561044557600080fd5b50610272610ea8565b34801561045a57600080fd5b506103556004803573ffffffffffffffffffffffffffffffffffffffff169060248035808201929081013591604435908101910135610ed3565b3480156104a057600080fd5b5061018e611088565b3480156104b557600080fd5b506102726004356110fe565b3480156104cd57600080fd5b5061035573ffffffffffffffffffffffffffffffffffffffff60043516611109565b3480156104fb57600080fd5b50604080516020600460443581810135838102808601850190965280855261021895833573ffffffffffffffffffffffffffffffffffffffff1695602480359636969560649593949201929182918501908490808284375094975061142b9650505050505050565b34801561056f57600080fd5b506103146115bb565b34801561058457600080fd5b5061035560043561167d565b34801561059c57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261021895833573ffffffffffffffffffffffffffffffffffffffff1695369560449491939091019190819084018382808284375094975061192e9650505050505050565b34801561061057600080fd5b50610314611952565b34801561062557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261035594369492936024939284019190819084018382808284375094975061197d9650505050505050565b34801561067e57600080fd5b50610314611ab1565b34801561069357600080fd5b5061027273ffffffffffffffffffffffffffffffffffffffff60043581169060243516611acd565b3480156106c757600080fd5b50610218611ad5565b3480156106dc57600080fd5b50610218611b06565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107885780601f1061075d57610100808354040283529160200191610788565b820191906000526020600020905b81548152906001019060200180831161076b57829003601f168201915b505050505081565b60008061079b610ea8565b905080158015906107b35750806107b0611b0b565b10155b91505b5090565b604080518082018252600f81527f45524332305f564945575f4f4e4c590000000000000000000000000000000000602080830191825292517f08c379a00000000000000000000000000000000000000000000000000000000081526004810193845282516024820152825160009492839260440191808383895b8381101561084c578181015183820152602001610834565b50505050905090810190601f1680156108795780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6000610899610894611b0b565b611b0f565b90505b90565b60006108a96115bb565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561092d578181015183820152602001610915565b50505050905090810190601f16801561095a5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561097957600080fd5b505af115801561098d573d6000803e3d6000fd5b505050506040513d60208110156109a357600080fd5b505192915050565b60008060008060006109bb610790565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515610a58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b5060408051808201909152601781527f54575f57495448445241575f414d4f554e545f5a45524f000000000000000000602082015260008711610af7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b50610b0133610e5e565b60408051808201909152601a81527f54575f494e56414c49445f57495448445241575f414d4f554e54000000000000602082015290955085871115610ba2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b50610bb3858763ffffffff611b2b16565b9350610bbd610887565b9250610bcf838763ffffffff611b2b16565b9150610bd9611bd6565b9050610c0481610be886611be8565b336000908152600360205260409020919063ffffffff611ca816565b610c2081610c1184611be8565b6004919063ffffffff611ca816565b600054610c4a9073ffffffffffffffffffffffffffffffffffffffff16338863ffffffff611f1d16565b60408051808201909152601881527f54575f544f4b454e5f5452414e534645525f4641494c454400000000000000006020820152901515610ce7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b5060408051878152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a2505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610dad57600080fd5b505af1158015610dc1573d6000803e3d6000fd5b505050506040513d6020811015610dd757600080fd5b5051905090565b6000610de8611952565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610dad57600080fd5b6000610e578383611fb5565b9392505050565b6000610e7182610e6c611b0b565b611fb5565b92915050565b50600190565b60006108997fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b611ff4565b60006108997febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e611ff4565b610edb610ea8565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015610f77576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b50610f80611ffc565b610f89856120db565b60408051808201909152601581527f54575f544f4b454e5f4e4f545f434f4e545241435400000000000000000000006020820152901515611026576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b50600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871617905561107360018585612d99565b5061108060028383612d99565b505050505050565b600280546040805160206001841615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909316849004601f810184900484028201840190925281815292918301828280156107885780601f1061075d57610100808354040283529160200191610788565b6000610e7182611b0f565b600080600061111784610e77565b60408051808201909152601281527f5245434f5645525f444953414c4c4f574544000000000000000000000000000060208201529015156111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b506111bd610dde565b92506111c8836120db565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515611265576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b5073ffffffffffffffffffffffffffffffffffffffff841615156112d0576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f193505050501580156112ca573d6000803e3d6000fd5b506113c0565b50826112f873ffffffffffffffffffffffffffffffffffffffff82163063ffffffff61211516565b915061132173ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff611f1d16565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c454400000060208201529015156113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b600080611436610790565b151561144557600091506115b3565b61144d611952565b905073ffffffffffffffffffffffffffffffffffffffff8116151561147557600091506115b3565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef910686308761149d8861224e565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b8381101561153557818101518382015260200161151d565b50505050905090810190601f1680156115625780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561158457600080fd5b505af1158015611598573d6000803e3d6000fd5b505050506040513d60208110156115ae57600080fd5b505191505b509392505050565b6000806115c6611952565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b15801561097957600080fd5b600080600080600061168d610790565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000602082015290151561172a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b5060408051808201909152601681527f54575f4445504f5349545f414d4f554e545f5a45524f000000000000000000006020820152600087116117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b506000546117f59073ffffffffffffffffffffffffffffffffffffffff1633308963ffffffff61225816565b60408051808201909152601d81527f54575f544f4b454e5f5452414e534645525f46524f4d5f4641494c45440000006020820152901515611892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b5061189c33610e5e565b94506118ae858763ffffffff6122f916565b93506118b8610887565b92506118ca838763ffffffff6122f916565b91506118d4611bd6565b90506118e381610be886611be8565b6118f081610c1184611be8565b60408051878152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a2505050505050565b6000611938610790565b8015610e575750600061194a84610e5e565b119392505050565b60006108997f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b611ff4565b60608061198a338461192e565b60408051808201909152601281527f54575f43414e5f4e4f545f464f525741524400000000000000000000000000006020820152901515611a27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b50604080516000815260016020808301828152606084018552929550919290919085019080388339505060008054835193945073ffffffffffffffffffffffffffffffffffffffff16928492508110611a7c57fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152611aab83838361239e565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611b00610ea8565b14905090565b600190565b4390565b6000610e71611b1d83612a74565b60049063ffffffff612b1d16565b60408051808201909152601281527f4d4154485f5355425f554e444552464c4f5700000000000000000000000000006020820152600090819084841115611bce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b505050900390565b6000610899611be3611b0b565b612a74565b60408051808201909152601681527f55494e543139325f4e554d4245525f544f4f5f42494700000000000000000000602082015260009077ffffffffffffffffffffffffffffffffffffffffffffffff831115611ca1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b5090919050565b8254600080821515611d4d576040805180820190915267ffffffffffffffff808716825277ffffffffffffffffffffffffffffffffffffffffffffffff80871660208085019182528a54600181018c5560008c815291909120945194018054915190921668010000000000000000029383167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090911617909116919091179055611080565b855486907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501908110611d7d57fe5b6000918252602090912001805490925067ffffffffffffffff90811691508516811015611e3d576040805180820190915267ffffffffffffffff808716825277ffffffffffffffffffffffffffffffffffffffffffffffff80871660208085019182528a54600181018c5560008c815291909120945194018054915190921668010000000000000000029383167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090911617909116919091179055611080565b808567ffffffffffffffff161415611e8957815467ffffffffffffffff166801000000000000000077ffffffffffffffffffffffffffffffffffffffffffffffff861602178255611080565b604080518082018252601a81527f434845434b504f494e545f504153545f434845434b504f494e54000000000000602080830191825292517f08c379a00000000000000000000000000000000000000000000000000000000081526004810193845282516024820152825192939283926044909201919080838360008381101561084c578181015183820152602001610834565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052600090611fac8582612b29565b95945050505050565b6000610e57611fc383612a74565b73ffffffffffffffffffffffffffffffffffffffff851660009081526003602052604090209063ffffffff612b1d16565b5490565b5490565b612004610ea8565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a45440000000000000000602082015290156120a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b506120d96120ac611b0b565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff612b7716565b565b60008073ffffffffffffffffffffffffffffffffffffffff83161515612104576000915061210f565b823b90506000811191505b50919050565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905260009081806121a28684612b7b565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515612244576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b5095945050505050565b8051602002815290565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526000906122ef8682612b29565b9695505050505050565b60408051808201909152601181527f4d4154485f4144445f4f564552464c4f57000000000000000000000000000000602082015260009083830190848210156115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b60606000806060806123ae610790565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000602082015290151561244b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b50600080612457611952565b9150612461610e7d565b905061246c8a61089f565b60408051808201909152601b81527f45564d52554e5f4558454355544f525f554e415641494c41424c450000000000602082015290965073ffffffffffffffffffffffffffffffffffffffff87161515612522576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b506040516060602482019081528b5160848301528b517f279cea3500000000000000000000000000000000000000000000000000000000975087928d928d928d9282916044820191606481019160a490910190602089019080838360005b83811015612598578181015183820152602001612580565b50505050905090810190601f1680156125c55780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b838110156125f85781810151838201526020016125e0565b50505050905090810190601f1680156126255780820380516001836020036101000a031916815260200191505b508481038252855181528551602091820191808801910280838360005b8381101561265a578181015183820152602001612642565b505050509050019650505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509350600080855160208701895af4604051935080801561275f57603f3d1180156126fd5760203d03806020883e8601604052612759565b7f08c379a000000000000000000000000000000000000000000000000000000000865260206004870152601e60248701527f45564d52554e5f4558454355544f525f494e56414c49445f52455455524e00006044870152606486fd5b50612768565b3d6000863e3d85fd5b50508573ffffffffffffffffffffffffffffffffffffffff167f5229a5dba83a54ae8cb5b51bdd6de9474cacbe9dd332f5185f3a4f4f2e3f4ad98b8b8660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156127ea5781810151838201526020016127d2565b50505050905090810190601f1680156128175780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b8381101561284a578181015183820152602001612832565b50505050905090810190601f1680156128775780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b838110156128aa578181015183820152602001612892565b50505050905090810190601f1680156128d75780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a28296508173ffffffffffffffffffffffffffffffffffffffff1661290a611952565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601f81526020017f45564d52554e5f50524f5445435445445f53544154455f4d4f444946494544008152509015156129c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b50806129ca610e7d565b60408051808201909152601f81527f45564d52554e5f50524f5445435445445f53544154455f4d4f4449464945440060208201529114612a66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b505050505050509392505050565b60408051808201909152601581527f55494e5436345f4e554d4245525f544f4f5f4249470000000000000000000000602082015260009067ffffffffffffffff831115611ca1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b6000610e578383612bac565b6000806040516020818551602087016000895af16000811115612b6d573d8015612b5a5760208114612b6357612b6b565b60019350612b6b565b600183511493505b505b5090949350505050565b9055565b6000806000806040516020818751602089018a5afa92506000831115612ba057805191505b50909590945092505050565b815460009081808080808080871515612bc85760009850612d8b565b8a547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff890197508b9088908110612bfb57fe5b6000918252602090912001805490965067ffffffffffffffff908116908b1610612c4e57855468010000000000000000900477ffffffffffffffffffffffffffffffffffffffffffffffff169850612d8b565b8760011480612c8457508a548b906000908110612c6757fe5b60009182526020909120015467ffffffffffffffff908116908b16105b15612c925760009850612d8b565b600094506001870393505b84841115612d48578a5460028686016001010493508b9084908110612cbe57fe5b6000918252602090912001805490925067ffffffffffffffff90811691508a16811015612ced57829450612d43565b8067ffffffffffffffff168a67ffffffffffffffff161015612d1457600183039350612d43565b815468010000000000000000900477ffffffffffffffffffffffffffffffffffffffffffffffff169850612d8b565b612c9d565b8a548b9086908110612d5657fe5b60009182526020909120015468010000000000000000900477ffffffffffffffffffffffffffffffffffffffffffffffff1698505b505050505050505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612df8578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555612e25565b82800160010185558215612e25579182015b82811115612e25578235825591602001919060010190612e0a565b506107b69261089c9250905b808211156107b65760008155600101612e315600a165627a7a723058204dc39d1e014f8c8e4b279532979c82c2bec9fdac19222a14a51b89c5595df3ce0029ebb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e",
  "deployedBytecode": "0x6080604052600436106101745763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146101795780630803fac014610203578063095ea7b31461022c57806318160ddd1461025d57806323b872dd146102845780632914b9bd146102bb5780632e1a7d4d1461033d578063313ce5671461035757806332f0a3b5146103825780634ee2cd7e1461039757806370a08231146103c85780637e7db6e1146103f657806380afdea8146104245780638b3dd74914610439578063906571471461044e57806395d89b4114610494578063981b24d0146104a95780639d4941d8146104c1578063a1658fad146104ef578063a479e50814610563578063a9059cbb1461022c578063b6b55f2514610578578063c0774df314610590578063d4aae0c414610604578063d948d46814610619578063dad9b08614610672578063dd62ed3e14610687578063de4796ed146106bb578063fd64eccb146106d0575b600080fd5b34801561018557600080fd5b5061018e6106e5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101c85781810151838201526020016101b0565b50505050905090810190601f1680156101f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561020f57600080fd5b50610218610790565b604080519115158252519081900360200190f35b34801561023857600080fd5b5061021873ffffffffffffffffffffffffffffffffffffffff600435166024356107ba565b34801561026957600080fd5b50610272610887565b60408051918252519081900360200190f35b34801561029057600080fd5b5061021873ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356107ba565b3480156102c757600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261031494369492936024939284019190819084018382808284375094975061089f9650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561034957600080fd5b506103556004356109ab565b005b34801561036357600080fd5b5061036c610d26565b6040805160ff9092168252519081900360200190f35b34801561038e57600080fd5b50610314610dde565b3480156103a357600080fd5b5061027273ffffffffffffffffffffffffffffffffffffffff60043516602435610e4b565b3480156103d457600080fd5b5061027273ffffffffffffffffffffffffffffffffffffffff60043516610e5e565b34801561040257600080fd5b5061021873ffffffffffffffffffffffffffffffffffffffff60043516610e77565b34801561043057600080fd5b50610272610e7d565b34801561044557600080fd5b50610272610ea8565b34801561045a57600080fd5b506103556004803573ffffffffffffffffffffffffffffffffffffffff169060248035808201929081013591604435908101910135610ed3565b3480156104a057600080fd5b5061018e611088565b3480156104b557600080fd5b506102726004356110fe565b3480156104cd57600080fd5b5061035573ffffffffffffffffffffffffffffffffffffffff60043516611109565b3480156104fb57600080fd5b50604080516020600460443581810135838102808601850190965280855261021895833573ffffffffffffffffffffffffffffffffffffffff1695602480359636969560649593949201929182918501908490808284375094975061142b9650505050505050565b34801561056f57600080fd5b506103146115bb565b34801561058457600080fd5b5061035560043561167d565b34801561059c57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261021895833573ffffffffffffffffffffffffffffffffffffffff1695369560449491939091019190819084018382808284375094975061192e9650505050505050565b34801561061057600080fd5b50610314611952565b34801561062557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261035594369492936024939284019190819084018382808284375094975061197d9650505050505050565b34801561067e57600080fd5b50610314611ab1565b34801561069357600080fd5b5061027273ffffffffffffffffffffffffffffffffffffffff60043581169060243516611acd565b3480156106c757600080fd5b50610218611ad5565b3480156106dc57600080fd5b50610218611b06565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107885780601f1061075d57610100808354040283529160200191610788565b820191906000526020600020905b81548152906001019060200180831161076b57829003601f168201915b505050505081565b60008061079b610ea8565b905080158015906107b35750806107b0611b0b565b10155b91505b5090565b604080518082018252600f81527f45524332305f564945575f4f4e4c590000000000000000000000000000000000602080830191825292517f08c379a00000000000000000000000000000000000000000000000000000000081526004810193845282516024820152825160009492839260440191808383895b8381101561084c578181015183820152602001610834565b50505050905090810190601f1680156108795780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6000610899610894611b0b565b611b0f565b90505b90565b60006108a96115bb565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561092d578181015183820152602001610915565b50505050905090810190601f16801561095a5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561097957600080fd5b505af115801561098d573d6000803e3d6000fd5b505050506040513d60208110156109a357600080fd5b505192915050565b60008060008060006109bb610790565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515610a58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b5060408051808201909152601781527f54575f57495448445241575f414d4f554e545f5a45524f000000000000000000602082015260008711610af7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b50610b0133610e5e565b60408051808201909152601a81527f54575f494e56414c49445f57495448445241575f414d4f554e54000000000000602082015290955085871115610ba2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b50610bb3858763ffffffff611b2b16565b9350610bbd610887565b9250610bcf838763ffffffff611b2b16565b9150610bd9611bd6565b9050610c0481610be886611be8565b336000908152600360205260409020919063ffffffff611ca816565b610c2081610c1184611be8565b6004919063ffffffff611ca816565b600054610c4a9073ffffffffffffffffffffffffffffffffffffffff16338863ffffffff611f1d16565b60408051808201909152601881527f54575f544f4b454e5f5452414e534645525f4641494c454400000000000000006020820152901515610ce7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b5060408051878152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a2505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610dad57600080fd5b505af1158015610dc1573d6000803e3d6000fd5b505050506040513d6020811015610dd757600080fd5b5051905090565b6000610de8611952565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610dad57600080fd5b6000610e578383611fb5565b9392505050565b6000610e7182610e6c611b0b565b611fb5565b92915050565b50600190565b60006108997fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b611ff4565b60006108997febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e611ff4565b610edb610ea8565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015610f77576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b50610f80611ffc565b610f89856120db565b60408051808201909152601581527f54575f544f4b454e5f4e4f545f434f4e545241435400000000000000000000006020820152901515611026576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b50600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871617905561107360018585612d99565b5061108060028383612d99565b505050505050565b600280546040805160206001841615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909316849004601f810184900484028201840190925281815292918301828280156107885780601f1061075d57610100808354040283529160200191610788565b6000610e7182611b0f565b600080600061111784610e77565b60408051808201909152601281527f5245434f5645525f444953414c4c4f574544000000000000000000000000000060208201529015156111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b506111bd610dde565b92506111c8836120db565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515611265576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b5073ffffffffffffffffffffffffffffffffffffffff841615156112d0576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f193505050501580156112ca573d6000803e3d6000fd5b506113c0565b50826112f873ffffffffffffffffffffffffffffffffffffffff82163063ffffffff61211516565b915061132173ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff611f1d16565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c454400000060208201529015156113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b600080611436610790565b151561144557600091506115b3565b61144d611952565b905073ffffffffffffffffffffffffffffffffffffffff8116151561147557600091506115b3565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef910686308761149d8861224e565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b8381101561153557818101518382015260200161151d565b50505050905090810190601f1680156115625780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561158457600080fd5b505af1158015611598573d6000803e3d6000fd5b505050506040513d60208110156115ae57600080fd5b505191505b509392505050565b6000806115c6611952565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b15801561097957600080fd5b600080600080600061168d610790565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000602082015290151561172a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b5060408051808201909152601681527f54575f4445504f5349545f414d4f554e545f5a45524f000000000000000000006020820152600087116117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b506000546117f59073ffffffffffffffffffffffffffffffffffffffff1633308963ffffffff61225816565b60408051808201909152601d81527f54575f544f4b454e5f5452414e534645525f46524f4d5f4641494c45440000006020820152901515611892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b5061189c33610e5e565b94506118ae858763ffffffff6122f916565b93506118b8610887565b92506118ca838763ffffffff6122f916565b91506118d4611bd6565b90506118e381610be886611be8565b6118f081610c1184611be8565b60408051878152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a2505050505050565b6000611938610790565b8015610e575750600061194a84610e5e565b119392505050565b60006108997f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b611ff4565b60608061198a338461192e565b60408051808201909152601281527f54575f43414e5f4e4f545f464f525741524400000000000000000000000000006020820152901515611a27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b50604080516000815260016020808301828152606084018552929550919290919085019080388339505060008054835193945073ffffffffffffffffffffffffffffffffffffffff16928492508110611a7c57fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152611aab83838361239e565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611b00610ea8565b14905090565b600190565b4390565b6000610e71611b1d83612a74565b60049063ffffffff612b1d16565b60408051808201909152601281527f4d4154485f5355425f554e444552464c4f5700000000000000000000000000006020820152600090819084841115611bce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b505050900390565b6000610899611be3611b0b565b612a74565b60408051808201909152601681527f55494e543139325f4e554d4245525f544f4f5f42494700000000000000000000602082015260009077ffffffffffffffffffffffffffffffffffffffffffffffff831115611ca1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b5090919050565b8254600080821515611d4d576040805180820190915267ffffffffffffffff808716825277ffffffffffffffffffffffffffffffffffffffffffffffff80871660208085019182528a54600181018c5560008c815291909120945194018054915190921668010000000000000000029383167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090911617909116919091179055611080565b855486907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501908110611d7d57fe5b6000918252602090912001805490925067ffffffffffffffff90811691508516811015611e3d576040805180820190915267ffffffffffffffff808716825277ffffffffffffffffffffffffffffffffffffffffffffffff80871660208085019182528a54600181018c5560008c815291909120945194018054915190921668010000000000000000029383167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090911617909116919091179055611080565b808567ffffffffffffffff161415611e8957815467ffffffffffffffff166801000000000000000077ffffffffffffffffffffffffffffffffffffffffffffffff861602178255611080565b604080518082018252601a81527f434845434b504f494e545f504153545f434845434b504f494e54000000000000602080830191825292517f08c379a00000000000000000000000000000000000000000000000000000000081526004810193845282516024820152825192939283926044909201919080838360008381101561084c578181015183820152602001610834565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052600090611fac8582612b29565b95945050505050565b6000610e57611fc383612a74565b73ffffffffffffffffffffffffffffffffffffffff851660009081526003602052604090209063ffffffff612b1d16565b5490565b5490565b612004610ea8565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a45440000000000000000602082015290156120a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b506120d96120ac611b0b565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff612b7716565b565b60008073ffffffffffffffffffffffffffffffffffffffff83161515612104576000915061210f565b823b90506000811191505b50919050565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905260009081806121a28684612b7b565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515612244576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b5095945050505050565b8051602002815290565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526000906122ef8682612b29565b9695505050505050565b60408051808201909152601181527f4d4154485f4144445f4f564552464c4f57000000000000000000000000000000602082015260009083830190848210156115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b60606000806060806123ae610790565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000602082015290151561244b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b50600080612457611952565b9150612461610e7d565b905061246c8a61089f565b60408051808201909152601b81527f45564d52554e5f4558454355544f525f554e415641494c41424c450000000000602082015290965073ffffffffffffffffffffffffffffffffffffffff87161515612522576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b506040516060602482019081528b5160848301528b517f279cea3500000000000000000000000000000000000000000000000000000000975087928d928d928d9282916044820191606481019160a490910190602089019080838360005b83811015612598578181015183820152602001612580565b50505050905090810190601f1680156125c55780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b838110156125f85781810151838201526020016125e0565b50505050905090810190601f1680156126255780820380516001836020036101000a031916815260200191505b508481038252855181528551602091820191808801910280838360005b8381101561265a578181015183820152602001612642565b505050509050019650505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509350600080855160208701895af4604051935080801561275f57603f3d1180156126fd5760203d03806020883e8601604052612759565b7f08c379a000000000000000000000000000000000000000000000000000000000865260206004870152601e60248701527f45564d52554e5f4558454355544f525f494e56414c49445f52455455524e00006044870152606486fd5b50612768565b3d6000863e3d85fd5b50508573ffffffffffffffffffffffffffffffffffffffff167f5229a5dba83a54ae8cb5b51bdd6de9474cacbe9dd332f5185f3a4f4f2e3f4ad98b8b8660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156127ea5781810151838201526020016127d2565b50505050905090810190601f1680156128175780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b8381101561284a578181015183820152602001612832565b50505050905090810190601f1680156128775780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b838110156128aa578181015183820152602001612892565b50505050905090810190601f1680156128d75780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a28296508173ffffffffffffffffffffffffffffffffffffffff1661290a611952565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601f81526020017f45564d52554e5f50524f5445435445445f53544154455f4d4f444946494544008152509015156129c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b50806129ca610e7d565b60408051808201909152601f81527f45564d52554e5f50524f5445435445445f53544154455f4d4f4449464945440060208201529114612a66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b505050505050509392505050565b60408051808201909152601581527f55494e5436345f4e554d4245525f544f4f5f4249470000000000000000000000602082015260009067ffffffffffffffff831115611ca1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561084c578181015183820152602001610834565b6000610e578383612bac565b6000806040516020818551602087016000895af16000811115612b6d573d8015612b5a5760208114612b6357612b6b565b60019350612b6b565b600183511493505b505b5090949350505050565b9055565b6000806000806040516020818751602089018a5afa92506000831115612ba057805191505b50909590945092505050565b815460009081808080808080871515612bc85760009850612d8b565b8a547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff890197508b9088908110612bfb57fe5b6000918252602090912001805490965067ffffffffffffffff908116908b1610612c4e57855468010000000000000000900477ffffffffffffffffffffffffffffffffffffffffffffffff169850612d8b565b8760011480612c8457508a548b906000908110612c6757fe5b60009182526020909120015467ffffffffffffffff908116908b16105b15612c925760009850612d8b565b600094506001870393505b84841115612d48578a5460028686016001010493508b9084908110612cbe57fe5b6000918252602090912001805490925067ffffffffffffffff90811691508a16811015612ced57829450612d43565b8067ffffffffffffffff168a67ffffffffffffffff161015612d1457600183039350612d43565b815468010000000000000000900477ffffffffffffffffffffffffffffffffffffffffffffffff169850612d8b565b612c9d565b8a548b9086908110612d5657fe5b60009182526020909120015468010000000000000000900477ffffffffffffffffffffffffffffffffffffffffffffffff1698505b505050505050505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612df8578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555612e25565b82800160010185558215612e25579182015b82811115612e25578235825591602001919060010190612e0a565b506107b69261089c9250905b808211156107b65760008155600101612e315600a165627a7a723058204dc39d1e014f8c8e4b279532979c82c2bec9fdac19222a14a51b89c5595df3ce0029",
  "sourceMap": "1226:6917:0:-;;;344:9:22;:7;;;;:9;:::i;:::-;1226:6917:0;;590:84:32;615:24:30;:22;;;;:24;:::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;607:65:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;637:30:32;-1:-1:-1;;637:13:32;;;;:30;:::i;:::-;590:84::o;881:137:30:-;936:7;962:49;-1:-1:-1;;;;;;;;;;;962:47:30;;;;;;:49;:::i;:::-;955:56;;881:137;:::o;1751:141::-;615:24;:22;;;;:24;:::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;607:65:30;-1:-1:-1;1824:61:30;-1:-1:-1;;;;;;;;;;;1872:12:30;1824:47;;;;;;:61;:::i;:::-;1751:141;:::o;519:134:37:-;630:15;;620:27::o;1028:119::-;1117:22;;1115:26::o;1226:6917:0:-;;;;;;;",
  "deployedSourceMap": "1226:6917:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2116:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2116:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2116:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1128:208:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1128:208:30;;;;;;;;;;;;;;;;;;;;;;503:103:63;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;503:103:63;;;;;;;;;5847:109:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5847:109:0;;;;;;;;;;;;;;;;;;;;722:117:63;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;722:117:63;;;;;;;;;;;;;;795:179:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;795:179:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;795:179:40;;-1:-1:-1;795:179:40;;-1:-1:-1;;;;;;;795:179:40;;;;;;;;;;;;;;;;;;;;4349:896:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4349:896:0;;;;;;;5668:173;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5668:173:0;;;;;;;;;;;;;;;;;;;;;;;2253:229:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2253:229:21;;;;6095:147:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6095:147:0;;;;;;;;;5535:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5535:127:0;;;;;;;1659:99:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1659:99:38;;;;;;;796:106:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;796:106:20;;;;881:137:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;881:137:30;;;;2816:285:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2816:285:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2140:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2140:20:0;;;;6248:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6248:127:0;;;;;836:623:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;836:623:38;;;;;;;1641:496:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1641:496:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1641:496:21;;-1:-1:-1;1641:496:21;;-1:-1:-1;;;;;;;1641:496:21;980:231:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;980:231:40;;;;3360:850:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3360:850:0;;;;;7632:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7632:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7632:137:0;;-1:-1:-1;7632:137:0;;-1:-1:-1;;;;;;;7632:137:0;674:116:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;674:116:20;;;;6843:507:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6843:507:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6843:507:0;;-1:-1:-1;6843:507:0;;-1:-1:-1;;;;;;;6843:507:0;2083:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2083:27:0;;;;845:92:63;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;845:92:63;;;;;;;;;;;;287:117:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;287:117:32;;;;6560:78:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6560:78:0;;;;2116:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1128:208:30:-;1175:4;1191:27;1221:24;:22;:24::i;:::-;1191:54;-1:-1:-1;1262:24:30;;;;;:67;;;1310:19;1290:16;:14;:16::i;:::-;:39;;1262:67;1255:74;;1128:208;;;:::o;503:103:63:-;577:21;;;;;;;;;;;;;;;;;;;570:29;;;;;;;;;;;;;;;;;;;554:4;;570:29;;;;;;;;577:21;554:4;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;570:29:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5847:109:0;5891:7;5917:32;5932:16;:14;:16::i;:::-;5917:14;:32::i;:::-;5910:39;;5847:109;;:::o;795:179:40:-;861:18;917:22;:20;:22::i;:::-;:40;;;958:7;917:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;917:49:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;917:49:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;917:49:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;917:49:40;;795:179;-1:-1:-1;;795:179:40:o;4349:896:0:-;4476:22;4657:18;4716:26;4768:22;4835:19;737:16:30;:14;:16::i;:::-;755:21;;;;;;;;;;;;;;;;;;729:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;729:48:30;-1:-1:-1;4438:26:0;;;;;;;;;;;;;;;;;4435:1;4425:11;;4417:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4417:48:0;;4501:21;4511:10;4501:9;:21::i;:::-;4567:29;;;;;;;;;;;;;;;;;4476:46;;-1:-1:-1;4540:25:0;;;;4532:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4532:65:0;-1:-1:-1;4678:27:0;:14;4697:7;4678:27;:18;:27;:::i;:::-;4657:48;;4745:13;:11;:13::i;:::-;4716:42;-1:-1:-1;4793:31:0;4716:42;4816:7;4793:31;:22;:31;:::i;:::-;4768:56;;4857:18;:16;:18::i;:::-;4835:40;;4885:84;4927:12;4941:27;:10;:25;:27::i;:::-;4901:10;4885:27;;;;:15;:27;;;;;;:84;;:41;:84;:::i;:::-;4979:79;5012:12;5026:31;:14;:29;:31::i;:::-;4979:18;;:79;;:32;:79;:::i;:::-;5113:14;;:48;;:14;;5141:10;5153:7;5113:48;:27;:48;:::i;:::-;5163:27;;;;;;;;;;;;;;;;;;5105:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5105:86:0;-1:-1:-1;5207:31:0;;;;;;;;5218:10;;5207:31;;;;;;;;;;4349:896;;;;;;:::o;5668:173::-;5709:5;5808:14;;;;;;;;;;;5789:43;;;:45;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5789:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5789:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5789:45:0;;-1:-1:-1;5668:173:0;:::o;2253:229:21:-;2302:7;2408:8;:6;:8::i;:::-;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;6095:147:0;6175:7;6201:34;6214:6;6222:12;6201;:34::i;:::-;6194:41;6095:147;-1:-1:-1;;;6095:147:0:o;5535:127::-;5591:7;5617:38;5630:6;5638:16;:14;:16::i;:::-;5617:12;:38::i;:::-;5610:45;5535:127;-1:-1:-1;;5535:127:0:o;1659:99:38:-;-1:-1:-1;1747:4:38;;1659:99::o;796:106:20:-;834:7;860:35;601:66;860:33;:35::i;881:137:30:-;936:7;962:49;345:66;962:47;:49::i;2816:285:0:-;615:24:30;:22;:24::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;607:65:30;;2917:13:0;:11;:13::i;:::-;2949:27;2960:15;2949:10;:27::i;:::-;2978:24;;;;;;;;;;;;;;;;;;2941:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2941:62:0;-1:-1:-1;3014:14:0;:32;;;;;;;;;;3056:12;-1:-1:-1;3063:5:0;;3056:12;:::i;:::-;-1:-1:-1;3078:16:0;:6;3087:7;;3078:16;:::i;:::-;;2816:285;;;;;:::o;2140:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6248:127;6314:7;6340:28;6355:12;6340:14;:28::i;836:623:38:-;960:13;1067:15;1224:11;904:27;924:6;904:19;:27::i;:::-;933:16;;;;;;;;;;;;;;;;;;896:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;896:54:38;;976:18;:16;:18::i;:::-;960:34;;1012:17;1023:5;1012:10;:17::i;:::-;1031:24;;;;;;;;;;;;;;;;;;1004:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1004:52:38;-1:-1:-1;1096:13:38;;;;1092:307;;;1170:23;;1143:4;1135:21;;-1:-1:-1;1135:21:38;1170:14;;;:23;;;;;1135:21;;1170:23;;;;1135:21;1170:14;:23;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1170:23:38;1092:307;;;-1:-1:-1;1244:6:38;1275:27;:21;;;1297:4;1275:27;:21;:27;:::i;:::-;1265:37;-1:-1:-1;1324:34:38;:18;;;1343:5;1265:37;1324:34;:18;:34;:::i;:::-;1360:27;;;;;;;;;;;;;;;;;;1316:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1316:72:38;;1092:307;1436:6;1414:38;;1429:5;1414:38;;;1444:7;1414:38;;;;;;;;;;;;;;;;;;836:623;;;;:::o;1641:496:21:-;1733:4;1819:20;1754:16;:14;:16::i;:::-;1753:17;1749:60;;;1793:5;1786:12;;;;1749:60;1842:8;:6;:8::i;:::-;1819:31;-1:-1:-1;1864:35:21;;;;1860:78;;;1922:5;1915:12;;;;1860:78;1955:12;:26;;;1995:7;2024:4;2043:5;2062:58;2112:7;2062:49;:58::i;:::-;1955:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1955:175:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1955:175:21;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1955:175:21;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1955:175:21;;-1:-1:-1;1641:496:21;;;;;;;:::o;980:231:40:-;1033:18;1063:20;1086:8;:6;:8::i;:::-;:69;;;;;;1368:66:51;1086:69:40;;;;330:66:42;1086:69:40;;;;;;:15;;;;;;;;:69;;;;;;;;;;;;;;;;:15;:69;;;5:2:-1;;;;30:1;27;20:12;3360:850:0;3702:22;3758:18;3817:26;3869:22;3936:19;737:16:30;:14;:16::i;:::-;755:21;;;;;;;;;;;;;;;;;;729:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;729:48:30;-1:-1:-1;3448:25:0;;;;;;;;;;;;;;;;;3445:1;3435:11;;3427:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3427:47:0;-1:-1:-1;3535:14:0;;:67;;:14;;3567:10;3587:4;3594:7;3535:67;:31;:67;:::i;:::-;3604:32;;;;;;;;;;;;;;;;;;3527:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3527:110:0;;3727:21;3737:10;3727:9;:21::i;:::-;3702:46;-1:-1:-1;3779:27:0;3702:46;3798:7;3779:27;:18;:27;:::i;:::-;3758:48;;3846:13;:11;:13::i;:::-;3817:42;-1:-1:-1;3894:31:0;3817:42;3917:7;3894:31;:22;:31;:::i;:::-;3869:56;;3958:18;:16;:18::i;:::-;3936:40;;3986:84;4028:12;4042:27;:10;:25;:27::i;3986:84::-;4080:79;4113:12;4127:31;:14;:29;:31::i;4080:79::-;4175:28;;;;;;;;4183:10;;4175:28;;;;;;;;;;3360:850;;;;;;:::o;7632:137::-;7697:4;7720:16;:14;:16::i;:::-;:42;;;;;7761:1;7740:18;7750:7;7740:9;:18::i;:::-;:22;;7632:137;-1:-1:-1;;;7632:137:0:o;674:116:20:-;713:7;747:35;485:66;747:33;:35::i;6843:507:0:-;6971:18;7200:26;6903:34;6914:10;6926;6903;:34::i;:::-;6939:21;;;;;;;;;;;;;;;;;;6895:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6895:66:0;-1:-1:-1;6992:12:0;;;7002:1;6992:12;;7243:1;6992:12;;;;7229:16;;;;;;;;6992:12;;-1:-1:-1;6992:12:0;;7243:1;;7229:16;;;;6992:12;105:10:-1;7229:16:0;88:34:-1;-1:-1;;7278:14:0;;;7255:12;;;;-1:-1:-1;7278:14:0;;;7255:12;;-1:-1:-1;7255:12:0;;;;;;:38;;;;:12;;;;;;;;;;:38;7304:39;7314:10;7326:5;7333:9;7304;:39::i;:::-;;6843:507;;;:::o;2083:27::-;;;;;;:::o;845:92:63:-;903:7;845:92;;;;:::o;287:117:32:-;331:4;277:2;354:24;:22;:24::i;:::-;:43;347:50;;287:117;:::o;6560:78:0:-;6627:4;6560:78;:::o;347:94:35:-;422:12;347:94;:::o;7981:160:0:-;8050:7;8076:58;8106:27;:12;:25;:27::i;:::-;8076:18;;:58;:29;:58;:::i;1685:172:57:-;1782:19;;;;;;;;;;;;;;;;;1745:7;;;;1772:8;;;;1764:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1764:38:57;-1:-1:-1;;;1824:7:57;;;1685:172::o;646:110:35:-;697:6;722:27;:16;:14;:16::i;:::-;:25;:27::i;490:162:62:-;595:21;;;;;;;;;;;;;;;;;549:7;;582:11;576:17;;;568:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;568:49:62;-1:-1:-1;642:2:62;;490:162;-1:-1:-1;490:162:62:o;713:733:61:-;825:20;;808:14;;859:11;;855:585;;;905:25;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;45:23;;886:13:61;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;855:585;;;1001:25;;:5;;1015:10;;;;1001:25;;;;;;;;;;;;;;;1080:22;;1001:25;;-1:-1:-1;1080:22:61;;;;;-1:-1:-1;1122:29:61;;;-1:-1:-1;1118:312:61;;;1190:25;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;45:23;;1171:13:61;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1118:312;;;1250:21;1241:5;:30;;;1237:193;;;1291:32;;;;;;;;;;;;1237:193;;;1393:21;;;;;;;;;;;;;;;;;;;1386:29;;;;;;;;;;;;;;;;;;;1393:21;;1386:29;;;;;;;;1393:21;1386:29;;1393:21;-1:-1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3100:304:34;3232:101;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3232:101:34;;;;;;;;25:18:-1;;61:17;;3232:101:34;182:15:-1;3268:17:34;179:29:-1;160:49;;3184:4:34;;3350:47;3372:6;3232:101;3350:21;:47::i;:::-;3343:54;3100:304;-1:-1:-1;;;;;3100:304:34:o;7796:179:0:-;7879:7;7905:63;7940:27;:12;:25;:27::i;:::-;7905:23;;;;;;;:15;:23;;;;;;:63;:34;:63;:::i;379:134:37:-;490:15;;480:27::o;519:134::-;630:15;;620:27::o;1447:123:30:-;615:24;:22;:24::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;607:65:30;;1498;1546:16;:14;:16::i;:::-;345:66;;1498:65;:47;:65;:::i;:::-;1447:123::o;426:244:31:-;486:4;;506:21;;;;502:64;;;550:5;543:12;;;;502:64;629:7;617:20;609:28;;662:1;655:4;:8;648:15;;426:244;;;;;:::o;4578:403:34:-;4708:91;;;4744:16;4708:91;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4708:91:34;;;;;;;;25:18:-1;;61:17;;4708:91:34;182:15:-1;4744:25:34;179:29:-1;160:49;;4656:7:34;;;;4849:39;4744:6;4708:91;4849:12;:39::i;:::-;4915:28;;;;;;;;;;;;;;;;;4810:78;;-1:-1:-1;4810:78:34;-1:-1:-1;4898:46:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4898:46:34;-1:-1:-1;4962:12:34;4578:403;-1:-1:-1;;;;;4578:403:34:o;142:539:23:-;559:13;;575:2;559:18;639:26;;559:6;596:79::o;3586:361:34:-;3741:131;;;3777:19;3741:131;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3741:131:34;;;;;;;;25:18:-1;;61:17;;3741:131:34;182:15:-1;3777:28:34;179:29:-1;160:49;;3689:4:34;;3889:51;3777:6;3741:131;3889:21;:51::i;:::-;3882:58;3586:361;-1:-1:-1;;;;;;3586:361:34:o;1928:170:57:-;2053:18;;;;;;;;;;;;;;;;;1988:7;;2019;;;;2044;;;;2036:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1217:3212:40;1364:5;1385:27;1533:10;1584:17;1671:19;737:16:30;:14;:16::i;:::-;755:21;;;;;;;;;;;;;;;;;;729:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;729:48:30;;4467:17:40;4514:16;4495:8;:6;:8::i;:::-;4467:37;;4533:7;:5;:7::i;:::-;4514:26;;1415:29;1436:7;1415:20;:29::i;:::-;1495:26;;;;;;;;;;;;;;;;;1385:59;;-1:-1:-1;1462:31:40;;;;;1454:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1454:68:40;-1:-1:-1;1604:56:40;;;;;;;;;;;;;;;;;1546:28;;-1:-1:-1;1546:28:40;;1632:7;;1641:6;;1649:10;;1604:56;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1604:56:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1604:56:40;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1604:56:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1604:56:40;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1604:56:40;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1604:56:40;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;1604:56:40;1584:76;;2067:1;1979;1930:4;1924:11;1880:4;1874;1870:15;1823:8;1768:3;1738:384;2152:4;2146:11;;-1:-1:-1;2198:7:40;2218:195;;;;2478:4;2462:14;2459:24;2500:970;;;;4144:4;4128:14;4124:25;4199:8;4193:4;4185:6;4170:38;4243:21;;4237:4;4230:35;2452:1851;;2500:970;2853:66;2845:6;2838:82;2995:66;2988:4;2980:6;2976:17;2969:93;3128:66;3121:4;3113:6;3109:17;3102:93;3259:66;3252:4;3244:6;3240:17;3233:93;3373:3;3365:6;3358:19;2452:1851;;2191:2126;;2218:195;2337:14;2334:1;2326:6;2311:41;2384:14;2376:6;2369:30;2191:2126;;1709:2618;4363:8;4342:56;;;4374:7;4383:6;4391;4342:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4342:56:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4342:56:40;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4342:56:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4342:56:40;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4342:56:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4416:6;4409:13;;4598:9;4577:30;;4585:8;:6;:8::i;:::-;4577:30;;;4609;;;;;;;;;;;;;;;;;;4569:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4569:71:40;-1:-1:-1;4669:8:40;4658:7;:5;:7::i;:::-;4679:30;;;;;;;;;;;;;;;;;;4658:19;4650:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4650:60:40;;787:1:30;;1217:3212:40;;;;;;;;;:::o;328:156:62:-;429:20;;;;;;;;;;;;;;;;;385:6;;417:10;411:16;;;403:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1452:138:61;1532:7;1558:25;1570:5;1577;1558:11;:25::i;800:1342:34:-;903:4;923:8;981:4;975:11;1403:4;1332:3;1281:9;1275:16;1234:4;1223:9;1219:20;1169:1;1120:5;1063:3;1041:415;1485:1;1476:7;1473:14;1470:2;;;1587:14;1672:55;;;;1806:4;1801:193;;;;1580:512;;1672:55;1708:1;1701:8;;1672:55;;1801:193;1974:1;1968:3;1962:10;1959:17;1952:24;;1580:512;;1470:2;-1:-1:-1;2132:3:34;;800:1342;-1:-1:-1;;;;800:1342:34:o;1028:119:37:-;1117:22;;1115:26::o;2148:774:34:-;2255:4;2261:7;2284:12;2306:11;2367:4;2361:11;2741:4;2670:3;2619:9;2613:16;2572:4;2561:9;2557:20;2508:5;2451:3;2423:371;2412:382;;2823:1;2814:7;2811:14;2808:2;;;2857:3;2851:10;2844:17;;2808:2;-1:-1:-1;2902:7:34;;2911:3;;-1:-1:-1;2148:774:34;-1:-1:-1;;;2148:774:34:o;2099:1693:61:-;2215:20;;2179:7;;;;;;;;;2450:11;;2446:50;;;2484:1;2477:8;;;;2446:50;2615:24;;2559:10;;;;-1:-1:-1;2615:5:61;;2559:10;;2615:24;;;;;;;;;;;;;;;2662:19;;2615:24;;-1:-1:-1;2662:19:61;;;;2653:28;;;;2649:95;;2712:20;;;;;;;;-1:-1:-1;2697:36:61;;2649:95;2846:6;2856:1;2846:11;:44;;;-1:-1:-1;2869:16:61;;:5;;:13;;:16;;;;;;;;;;;;;;;:21;;;;;2861:29;;;;2846:44;2842:83;;;2913:1;2906:8;;;;2842:83;3073:1;3059:15;;3111:1;3099:9;:13;3084:28;;3123:612;3137:3;3130:4;:10;3123:612;;;3259:18;;3189:1;3171:10;;;3184:1;3171:14;3170:20;;-1:-1:-1;3259:5:61;;3170:20;;3259:18;;;;;;;;;;;;;;;3308:15;;3259:18;;-1:-1:-1;3308:15:61;;;;;-1:-1:-1;3342:15:61;;;-1:-1:-1;3338:387:61;;;3383:3;3377:9;;3338:387;;;3419:7;3411:15;;:5;:15;;;3407:318;;;3602:1;3596:3;:7;3589:14;;3407:318;;;3693:16;;;;;;;;-1:-1:-1;3678:32:61;;3407:318;3123:612;;;3760:18;;:5;;3774:3;;3760:18;;;;;;;;;;;;;;;:24;;;;;;;-1:-1:-1;2099:1693:61;;;;;;;;;;;;;:::o;1226:6917:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1226:6917:0;;;;-1:-1:-1;1226:6917:0;;;;;;;;;;;;;;",
  "source": "/*\n * SPDX-License-Identitifer:    GPL-3.0-or-later\n */\n\npragma solidity 0.4.24;\n\nimport \"@aragon/os/contracts/apps/AragonApp.sol\";\nimport \"@aragon/os/contracts/common/IForwarder.sol\";\nimport \"@aragon/os/contracts/common/IsContract.sol\";\nimport \"@aragon/os/contracts/lib/math/SafeMath.sol\";\nimport \"@aragon/os/contracts/lib/token/ERC20.sol\";\n\nimport \"@aragonone/voting-connectors-contract-utils/contracts/Checkpointing.sol\";\nimport \"@aragonone/voting-connectors-contract-utils/contracts/CheckpointingHelpers.sol\";\nimport \"@aragonone/voting-connectors-contract-utils/contracts/ERC20ViewOnly.sol\";\nimport \"@aragonone/voting-connectors-contract-utils/contracts/interfaces/IERC20WithCheckpointing.sol\";\nimport \"@aragonone/voting-connectors-contract-utils/contracts/interfaces/IERC20WithDecimals.sol\";\n\n\n/**\n * @title TokenWrapper\n * @notice Wrapper around a normal ERC20 token that provides a \"view-only\" checkpointed ERC20\n *         implementation for use with Voting apps.\n *         It only supports up to 2^192 - 1 tokens being deposited (not taking into account decimals).\n * @dev Inspired by:\n *   - MiniMe token\n *   - https://github.com/MyBitFoundation/MyBit-DAO.tech/blob/master/apps/MyTokens/contracts/MyTokens.sol\n */\ncontract TokenWrapper is IERC20WithCheckpointing, IForwarder, IsContract, ERC20ViewOnly, AragonApp {\n    using SafeMath for uint256;\n    using SafeERC20 for ERC20;\n    using Checkpointing for Checkpointing.History;\n    using CheckpointingHelpers for uint256;\n\n    string private constant ERROR_TOKEN_NOT_CONTRACT = \"TW_TOKEN_NOT_CONTRACT\";\n    string private constant ERROR_DEPOSIT_AMOUNT_ZERO = \"TW_DEPOSIT_AMOUNT_ZERO\";\n    string private constant ERROR_TOKEN_TRANSFER_FROM_FAILED = \"TW_TOKEN_TRANSFER_FROM_FAILED\";\n    string private constant ERROR_WITHDRAW_AMOUNT_ZERO = \"TW_WITHDRAW_AMOUNT_ZERO\";\n    string private constant ERROR_INVALID_WITHDRAW_AMOUNT = \"TW_INVALID_WITHDRAW_AMOUNT\";\n    string private constant ERROR_TOKEN_TRANSFER_FAILED = \"TW_TOKEN_TRANSFER_FAILED\";\n    string private constant ERROR_CAN_NOT_FORWARD = \"TW_CAN_NOT_FORWARD\";\n\n    ERC20 public depositedToken;\n    string public name;\n    string public symbol;\n\n    // Checkpointed balances of the deposited token by block number\n    mapping (address => Checkpointing.History) internal balancesHistory;\n\n    // Checkpointed total supply of the deposited token\n    Checkpointing.History internal totalSupplyHistory;\n\n    event Deposit(address indexed entity, uint256 amount);\n    event Withdrawal(address indexed entity, uint256 amount);\n\n    /**\n     * @notice Create a new \"wrapped\" checkpointed token that is convertible from a normal ERC20 token\n     * @param _depositedToken The ERC20 token to be wrapped\n     * @param _name The wrapped token's name\n     * @param _symbol The wrapped token's symbol\n     */\n    function initialize(ERC20 _depositedToken, string _name, string _symbol) external onlyInit {\n        initialized();\n\n        require(isContract(_depositedToken), ERROR_TOKEN_NOT_CONTRACT);\n\n        depositedToken = _depositedToken;\n        name = _name;\n        symbol = _symbol;\n    }\n\n    /**\n     * @notice Wrap `@tokenAmount(self.depositedToken(): address, _amount)`\n     * @dev Only up to 2^192 - 1 tokens are ever allowed to be deposited, due to the underlying\n     *      storage format.\n     * @param _amount Amount to wrap\n     */\n    function deposit(uint256 _amount) external isInitialized {\n        require(_amount > 0, ERROR_DEPOSIT_AMOUNT_ZERO);\n\n        // Fetch the outside ERC20 tokens\n        require(depositedToken.safeTransferFrom(msg.sender, address(this), _amount), ERROR_TOKEN_TRANSFER_FROM_FAILED);\n\n        // Then increase our wrapped token accounting\n        uint256 currentBalance = balanceOf(msg.sender);\n        uint256 newBalance = currentBalance.add(_amount);\n\n        uint256 currentTotalSupply = totalSupply();\n        uint256 newTotalSupply = currentTotalSupply.add(_amount);\n\n        uint64 currentBlock = getBlockNumber64();\n        balancesHistory[msg.sender].addCheckpoint(currentBlock, newBalance.toUint192Value());\n        totalSupplyHistory.addCheckpoint(currentBlock, newTotalSupply.toUint192Value());\n\n        emit Deposit(msg.sender, _amount);\n    }\n\n    /**\n     * @notice Unwrap `@tokenAmount(self.depositedToken(): address, _amount)`\n     * @param _amount Amount to unwrap\n     */\n    function withdraw(uint256 _amount) external isInitialized {\n        require(_amount > 0, ERROR_WITHDRAW_AMOUNT_ZERO);\n\n        uint256 currentBalance = balanceOf(msg.sender);\n        require(_amount <= currentBalance, ERROR_INVALID_WITHDRAW_AMOUNT);\n\n        // Decrease our wrapped token accounting\n        uint256 newBalance = currentBalance.sub(_amount);\n\n        uint256 currentTotalSupply = totalSupply();\n        uint256 newTotalSupply = currentTotalSupply.sub(_amount);\n\n        uint64 currentBlock = getBlockNumber64();\n        balancesHistory[msg.sender].addCheckpoint(currentBlock, newBalance.toUint192Value());\n        totalSupplyHistory.addCheckpoint(currentBlock, newTotalSupply.toUint192Value());\n\n        // Then return ERC20 tokens\n        require(depositedToken.safeTransfer(msg.sender, _amount), ERROR_TOKEN_TRANSFER_FAILED);\n\n        emit Withdrawal(msg.sender, _amount);\n    }\n\n    // ERC20 fns - note that this token is a non-transferrable \"view-only\" implementation.\n    // Users should only be changing balances by depositing and withdrawing tokens.\n    // These functions do **NOT** revert if the app is uninitialized to stay compatible with normal ERC20s.\n\n    function balanceOf(address _owner) public view returns (uint256) {\n        return _balanceOfAt(_owner, getBlockNumber());\n    }\n\n    function decimals() public view returns (uint8) {\n        // Decimals is optional; proxy to outside token\n        return IERC20WithDecimals(depositedToken).decimals();\n    }\n\n    function totalSupply() public view returns (uint256) {\n        return _totalSupplyAt(getBlockNumber());\n    }\n\n    // Checkpointed fns\n    // These functions do **NOT** revert if the app is uninitialized to stay compatible with normal ERC20s.\n\n    function balanceOfAt(address _owner, uint256 _blockNumber) public view returns (uint256) {\n        return _balanceOfAt(_owner, _blockNumber);\n    }\n\n    function totalSupplyAt(uint256 _blockNumber) public view returns (uint256) {\n        return _totalSupplyAt(_blockNumber);\n    }\n\n    // Forwarding fns\n\n    /**\n    * @notice Tells whether the TokenWrapper app is a forwarder or not\n    * @dev IForwarder interface conformance\n    * @return Always true\n    */\n    function isForwarder() public pure returns (bool) {\n        return true;\n    }\n\n    /**\n     * @notice Execute desired action as a token holder\n     * @dev IForwarder interface conformance. Forwards any token holder action.\n     * @param _evmScript Script being executed\n     */\n    function forward(bytes _evmScript) public {\n        require(canForward(msg.sender, _evmScript), ERROR_CAN_NOT_FORWARD);\n        bytes memory input = new bytes(0);\n\n        // Add the wrapped token to the blacklist to disallow a token holder from interacting with\n        // the token on this contract's behalf (e.g. maliciously causing a transfer).\n        address[] memory blacklist = new address[](1);\n        blacklist[0] = address(depositedToken);\n\n        runScript(_evmScript, input, blacklist);\n    }\n\n    /**\n    * @notice Tells whether `_sender` can forward actions or not\n    * @dev IForwarder interface conformance\n    * @param _sender Address of the account intending to forward an action\n    * @return True if the given address can forward actions, false otherwise\n    */\n    function canForward(address _sender, bytes) public view returns (bool) {\n        return hasInitialized() && balanceOf(_sender) > 0;\n    }\n\n    // Internal fns\n\n    function _balanceOfAt(address _owner, uint256 _blockNumber) internal view returns (uint256) {\n        return balancesHistory[_owner].getValueAt(_blockNumber.toUint64Time());\n    }\n\n    function _totalSupplyAt(uint256 _blockNumber) internal view returns (uint256) {\n        return totalSupplyHistory.getValueAt(_blockNumber.toUint64Time());\n    }\n}\n",
  "sourcePath": "/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/TokenWrapper.sol",
  "ast": {
    "absolutePath": "/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/TokenWrapper.sol",
    "exportedSymbols": {
      "TokenWrapper": [
        458
      ]
    },
    "id": 459,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "57:23:0"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "@aragon/os/contracts/apps/AragonApp.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 6121,
        "src": "82:49:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/IForwarder.sol",
        "file": "@aragon/os/contracts/common/IForwarder.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 6316,
        "src": "132:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/IsContract.sol",
        "file": "@aragon/os/contracts/common/IsContract.sol",
        "id": 4,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 6470,
        "src": "185:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "id": 5,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 9696,
        "src": "238:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/token/ERC20.sol",
        "file": "@aragon/os/contracts/lib/token/ERC20.sol",
        "id": 6,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 9926,
        "src": "291:50:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragonone/voting-connectors-contract-utils/contracts/Checkpointing.sol",
        "file": "@aragonone/voting-connectors-contract-utils/contracts/Checkpointing.sol",
        "id": 7,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 10233,
        "src": "343:81:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragonone/voting-connectors-contract-utils/contracts/CheckpointingHelpers.sol",
        "file": "@aragonone/voting-connectors-contract-utils/contracts/CheckpointingHelpers.sol",
        "id": 8,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 10292,
        "src": "425:88:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragonone/voting-connectors-contract-utils/contracts/ERC20ViewOnly.sol",
        "file": "@aragonone/voting-connectors-contract-utils/contracts/ERC20ViewOnly.sol",
        "id": 9,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 10357,
        "src": "514:81:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragonone/voting-connectors-contract-utils/contracts/interfaces/IERC20WithCheckpointing.sol",
        "file": "@aragonone/voting-connectors-contract-utils/contracts/interfaces/IERC20WithCheckpointing.sol",
        "id": 10,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 10379,
        "src": "596:102:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragonone/voting-connectors-contract-utils/contracts/interfaces/IERC20WithDecimals.sol",
        "file": "@aragonone/voting-connectors-contract-utils/contracts/interfaces/IERC20WithDecimals.sol",
        "id": 11,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 10390,
        "src": "699:97:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12,
              "name": "IERC20WithCheckpointing",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10378,
              "src": "1251:23:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20WithCheckpointing_$10378",
                "typeString": "contract IERC20WithCheckpointing"
              }
            },
            "id": 13,
            "nodeType": "InheritanceSpecifier",
            "src": "1251:23:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 14,
              "name": "IForwarder",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6315,
              "src": "1276:10:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IForwarder_$6315",
                "typeString": "contract IForwarder"
              }
            },
            "id": 15,
            "nodeType": "InheritanceSpecifier",
            "src": "1276:10:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 16,
              "name": "IsContract",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6469,
              "src": "1288:10:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IsContract_$6469",
                "typeString": "contract IsContract"
              }
            },
            "id": 17,
            "nodeType": "InheritanceSpecifier",
            "src": "1288:10:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 18,
              "name": "ERC20ViewOnly",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10356,
              "src": "1300:13:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20ViewOnly_$10356",
                "typeString": "contract ERC20ViewOnly"
              }
            },
            "id": 19,
            "nodeType": "InheritanceSpecifier",
            "src": "1300:13:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6120,
              "src": "1315:9:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$6120",
                "typeString": "contract AragonApp"
              }
            },
            "id": 21,
            "nodeType": "InheritanceSpecifier",
            "src": "1315:9:0"
          }
        ],
        "contractDependencies": [
          5208,
          5996,
          6120,
          6133,
          6293,
          6315,
          6343,
          6441,
          6469,
          6502,
          6539,
          6831,
          7053,
          7454,
          7481,
          8745,
          9925,
          10356,
          10378
        ],
        "contractKind": "contract",
        "documentation": "@title TokenWrapper\n@notice Wrapper around a normal ERC20 token that provides a \"view-only\" checkpointed ERC20\n        implementation for use with Voting apps.\n        It only supports up to 2^192 - 1 tokens being deposited (not taking into account decimals).\n@dev Inspired by:\n  - MiniMe token\n  - https://github.com/MyBitFoundation/MyBit-DAO.tech/blob/master/apps/MyTokens/contracts/MyTokens.sol",
        "fullyImplemented": true,
        "id": 458,
        "linearizedBaseContracts": [
          458,
          6120,
          5208,
          7454,
          8745,
          7481,
          6539,
          7053,
          10356,
          6469,
          6293,
          6343,
          6133,
          6502,
          6441,
          6831,
          5996,
          6315,
          10378,
          9925
        ],
        "name": "TokenWrapper",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 24,
            "libraryName": {
              "contractScope": null,
              "id": 22,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9695,
              "src": "1337:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$9695",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1331:27:0",
            "typeName": {
              "id": 23,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1350:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 27,
            "libraryName": {
              "contractScope": null,
              "id": 25,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6784,
              "src": "1369:9:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$6784",
                "typeString": "library SafeERC20"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1363:26:0",
            "typeName": {
              "contractScope": null,
              "id": 26,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9925,
              "src": "1383:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$9925",
                "typeString": "contract ERC20"
              }
            }
          },
          {
            "id": 30,
            "libraryName": {
              "contractScope": null,
              "id": 28,
              "name": "Checkpointing",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10232,
              "src": "1400:13:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Checkpointing_$10232",
                "typeString": "library Checkpointing"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1394:46:0",
            "typeName": {
              "contractScope": null,
              "id": 29,
              "name": "Checkpointing.History",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9939,
              "src": "1418:21:0",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_History_$9939_storage_ptr",
                "typeString": "struct Checkpointing.History"
              }
            }
          },
          {
            "id": 33,
            "libraryName": {
              "contractScope": null,
              "id": 31,
              "name": "CheckpointingHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10291,
              "src": "1451:20:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CheckpointingHelpers_$10291",
                "typeString": "library CheckpointingHelpers"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1445:39:0",
            "typeName": {
              "id": 32,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1476:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 36,
            "name": "ERROR_TOKEN_NOT_CONTRACT",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "1490:74:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 34,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1490:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "54575f544f4b454e5f4e4f545f434f4e5452414354",
              "id": 35,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1541:23:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_7ba81676a24b6cf524098771d7efc06702eaa0dfca6e44c9bb1e29d99fcc8f7e",
                "typeString": "literal_string \"TW_TOKEN_NOT_CONTRACT\""
              },
              "value": "TW_TOKEN_NOT_CONTRACT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 39,
            "name": "ERROR_DEPOSIT_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "1570:76:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 37,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1570:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "54575f4445504f5349545f414d4f554e545f5a45524f",
              "id": 38,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1622:24:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f7a6759aee557658c1e2eb38c2ea42778750eb14f91d098afe293237d7f52c03",
                "typeString": "literal_string \"TW_DEPOSIT_AMOUNT_ZERO\""
              },
              "value": "TW_DEPOSIT_AMOUNT_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 42,
            "name": "ERROR_TOKEN_TRANSFER_FROM_FAILED",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "1652:90:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 40,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1652:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "54575f544f4b454e5f5452414e534645525f46524f4d5f4641494c4544",
              "id": 41,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1711:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_413ce35ed93e8d8e54bd02240ebd5206b8286deb9f612747bf74e9b2c5a35ffd",
                "typeString": "literal_string \"TW_TOKEN_TRANSFER_FROM_FAILED\""
              },
              "value": "TW_TOKEN_TRANSFER_FROM_FAILED"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 45,
            "name": "ERROR_WITHDRAW_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "1748:78:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 43,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1748:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "54575f57495448445241575f414d4f554e545f5a45524f",
              "id": 44,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1801:25:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_c3496688d3b7cf242c741d2469400ce5224f8de9d95f39ba4b05fcdb61d63679",
                "typeString": "literal_string \"TW_WITHDRAW_AMOUNT_ZERO\""
              },
              "value": "TW_WITHDRAW_AMOUNT_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 48,
            "name": "ERROR_INVALID_WITHDRAW_AMOUNT",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "1832:84:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 46,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1832:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "54575f494e56414c49445f57495448445241575f414d4f554e54",
              "id": 47,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1888:28:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d0cd27344bdef631161748197f4aa8b773b68f5bd30c99c206ca894566552937",
                "typeString": "literal_string \"TW_INVALID_WITHDRAW_AMOUNT\""
              },
              "value": "TW_INVALID_WITHDRAW_AMOUNT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 51,
            "name": "ERROR_TOKEN_TRANSFER_FAILED",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "1922:80:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 49,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1922:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "54575f544f4b454e5f5452414e534645525f4641494c4544",
              "id": 50,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1976:26:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_ab63e88ec259ac0b8c242574caff6553c4e42776739cac9d71eb578671806581",
                "typeString": "literal_string \"TW_TOKEN_TRANSFER_FAILED\""
              },
              "value": "TW_TOKEN_TRANSFER_FAILED"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 54,
            "name": "ERROR_CAN_NOT_FORWARD",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "2008:68:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 52,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2008:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "54575f43414e5f4e4f545f464f5257415244",
              "id": 53,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2056:20:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_2100f92f0a0168e6ea10b21bd6ab318825dbaa2b8561b410bac7acacc03eb92b",
                "typeString": "literal_string \"TW_CAN_NOT_FORWARD\""
              },
              "value": "TW_CAN_NOT_FORWARD"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 56,
            "name": "depositedToken",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "2083:27:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$9925",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 55,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9925,
              "src": "2083:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$9925",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 58,
            "name": "name",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "2116:18:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 57,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2116:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 60,
            "name": "symbol",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "2140:20:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 59,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2140:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 64,
            "name": "balancesHistory",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "2235:67:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_History_$9939_storage_$",
              "typeString": "mapping(address => struct Checkpointing.History)"
            },
            "typeName": {
              "id": 63,
              "keyType": {
                "id": 61,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2244:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2235:42:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_History_$9939_storage_$",
                "typeString": "mapping(address => struct Checkpointing.History)"
              },
              "valueType": {
                "contractScope": null,
                "id": 62,
                "name": "Checkpointing.History",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 9939,
                "src": "2255:21:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_History_$9939_storage_ptr",
                  "typeString": "struct Checkpointing.History"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 66,
            "name": "totalSupplyHistory",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "2365:49:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_History_$9939_storage",
              "typeString": "struct Checkpointing.History"
            },
            "typeName": {
              "contractScope": null,
              "id": 65,
              "name": "Checkpointing.History",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9939,
              "src": "2365:21:0",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_History_$9939_storage_ptr",
                "typeString": "struct Checkpointing.History"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 72,
            "name": "Deposit",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 71,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 68,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 72,
                  "src": "2435:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2435:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 72,
                  "src": "2459:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2459:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2434:40:0"
            },
            "src": "2421:54:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 78,
            "name": "Withdrawal",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 77,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 74,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 78,
                  "src": "2497:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 73,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2497:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 76,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 78,
                  "src": "2521:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 75,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2521:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2496:40:0"
            },
            "src": "2480:57:0"
          },
          {
            "body": {
              "id": 111,
              "nodeType": "Block",
              "src": "2907:194:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 89,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6426,
                      "src": "2917:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 90,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2917:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 91,
                  "nodeType": "ExpressionStatement",
                  "src": "2917:13:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 94,
                            "name": "_depositedToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 80,
                            "src": "2960:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$9925",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$9925",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 93,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6468,
                          "src": "2949:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 95,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2949:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 96,
                        "name": "ERROR_TOKEN_NOT_CONTRACT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36,
                        "src": "2978:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 92,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "2941:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 97,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2941:62:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 98,
                  "nodeType": "ExpressionStatement",
                  "src": "2941:62:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 99,
                      "name": "depositedToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 56,
                      "src": "3014:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$9925",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 100,
                      "name": "_depositedToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 80,
                      "src": "3031:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$9925",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "3014:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$9925",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 102,
                  "nodeType": "ExpressionStatement",
                  "src": "3014:32:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 103,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 58,
                      "src": "3056:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 104,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 82,
                      "src": "3063:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "3056:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 106,
                  "nodeType": "ExpressionStatement",
                  "src": "3056:12:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 107,
                      "name": "symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60,
                      "src": "3078:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 108,
                      "name": "_symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 84,
                      "src": "3087:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "3078:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 110,
                  "nodeType": "ExpressionStatement",
                  "src": "3078:16:0"
                }
              ]
            },
            "documentation": "@notice Create a new \"wrapped\" checkpointed token that is convertible from a normal ERC20 token\n@param _depositedToken The ERC20 token to be wrapped\n@param _name The wrapped token's name\n@param _symbol The wrapped token's symbol",
            "id": 112,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 87,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 86,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6373,
                  "src": "2898:8:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2898:8:0"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 85,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 80,
                  "name": "_depositedToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 112,
                  "src": "2836:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$9925",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 79,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9925,
                    "src": "2836:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$9925",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 82,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 112,
                  "src": "2859:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 81,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2859:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 84,
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 112,
                  "src": "2873:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 83,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2873:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2835:53:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 88,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2907:0:0"
            },
            "scope": 458,
            "src": "2816:285:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 196,
              "nodeType": "Block",
              "src": "3417:793:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 120,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 114,
                          "src": "3435:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 121,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3445:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3435:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 123,
                        "name": "ERROR_DEPOSIT_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 39,
                        "src": "3448:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 119,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "3427:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3427:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 125,
                  "nodeType": "ExpressionStatement",
                  "src": "3427:47:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 129,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10404,
                              "src": "3567:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 130,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3567:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 132,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10485,
                                "src": "3587:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_TokenWrapper_$458",
                                  "typeString": "contract TokenWrapper"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_TokenWrapper_$458",
                                  "typeString": "contract TokenWrapper"
                                }
                              ],
                              "id": 131,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3579:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 133,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3579:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 134,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 114,
                            "src": "3594:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 127,
                            "name": "depositedToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 56,
                            "src": "3535:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$9925",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 128,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "safeTransferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6647,
                          "src": "3535:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$9925_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_contract$_ERC20_$9925_$",
                            "typeString": "function (contract ERC20,address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3535:67:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 136,
                        "name": "ERROR_TOKEN_TRANSFER_FROM_FAILED",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42,
                        "src": "3604:32:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 126,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "3527:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 137,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3527:110:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 138,
                  "nodeType": "ExpressionStatement",
                  "src": "3527:110:0"
                },
                {
                  "assignments": [
                    140
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 140,
                      "name": "currentBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 197,
                      "src": "3702:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 139,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3702:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 145,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 142,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "3737:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 143,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3737:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 141,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        300
                      ],
                      "referencedDeclaration": 300,
                      "src": "3727:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3727:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3702:46:0"
                },
                {
                  "assignments": [
                    147
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 147,
                      "name": "newBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 197,
                      "src": "3758:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 146,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3758:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 152,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 150,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 114,
                        "src": "3798:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 148,
                        "name": "currentBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 140,
                        "src": "3779:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 149,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9673,
                      "src": "3779:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3779:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3758:48:0"
                },
                {
                  "assignments": [
                    154
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 154,
                      "name": "currentTotalSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 197,
                      "src": "3817:26:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 153,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3817:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 157,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 155,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        323
                      ],
                      "referencedDeclaration": 323,
                      "src": "3846:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3846:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3817:42:0"
                },
                {
                  "assignments": [
                    159
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 159,
                      "name": "newTotalSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 197,
                      "src": "3869:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 158,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3869:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 164,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 162,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 114,
                        "src": "3917:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 160,
                        "name": "currentTotalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 154,
                        "src": "3894:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 161,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9673,
                      "src": "3894:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3894:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3869:56:0"
                },
                {
                  "assignments": [
                    166
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 166,
                      "name": "currentBlock",
                      "nodeType": "VariableDeclaration",
                      "scope": 197,
                      "src": "3936:19:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 165,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "3936:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 169,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 167,
                      "name": "getBlockNumber64",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6810,
                      "src": "3958:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 168,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3958:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3936:40:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 175,
                        "name": "currentBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 166,
                        "src": "4028:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 176,
                            "name": "newBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 147,
                            "src": "4042:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toUint192Value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10290,
                          "src": "4042:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint192_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint192)"
                          }
                        },
                        "id": 178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4042:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 170,
                          "name": "balancesHistory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 64,
                          "src": "3986:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_History_$9939_storage_$",
                            "typeString": "mapping(address => struct Checkpointing.History storage ref)"
                          }
                        },
                        "id": 173,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 171,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10404,
                            "src": "4002:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 172,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4002:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3986:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_History_$9939_storage",
                          "typeString": "struct Checkpointing.History storage ref"
                        }
                      },
                      "id": 174,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addCheckpoint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10020,
                      "src": "3986:41:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_History_$9939_storage_ptr_$_t_uint64_$_t_uint192_$returns$__$bound_to$_t_struct$_History_$9939_storage_ptr_$",
                        "typeString": "function (struct Checkpointing.History storage pointer,uint64,uint192)"
                      }
                    },
                    "id": 179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3986:84:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 180,
                  "nodeType": "ExpressionStatement",
                  "src": "3986:84:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 184,
                        "name": "currentBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 166,
                        "src": "4113:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 185,
                            "name": "newTotalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 159,
                            "src": "4127:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 186,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toUint192Value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10290,
                          "src": "4127:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint192_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint192)"
                          }
                        },
                        "id": 187,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4127:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 181,
                        "name": "totalSupplyHistory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66,
                        "src": "4080:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_History_$9939_storage",
                          "typeString": "struct Checkpointing.History storage ref"
                        }
                      },
                      "id": 183,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addCheckpoint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10020,
                      "src": "4080:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_History_$9939_storage_ptr_$_t_uint64_$_t_uint192_$returns$__$bound_to$_t_struct$_History_$9939_storage_ptr_$",
                        "typeString": "function (struct Checkpointing.History storage pointer,uint64,uint192)"
                      }
                    },
                    "id": 188,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4080:79:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 189,
                  "nodeType": "ExpressionStatement",
                  "src": "4080:79:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 191,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "4183:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 192,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4183:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 193,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 114,
                        "src": "4195:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 190,
                      "name": "Deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 72,
                      "src": "4175:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 194,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4175:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 195,
                  "nodeType": "EmitStatement",
                  "src": "4170:33:0"
                }
              ]
            },
            "documentation": "@notice Wrap `@tokenAmount(self.depositedToken(): address, _amount)`\n@dev Only up to 2^192 - 1 tokens are ever allowed to be deposited, due to the underlying\n     storage format.\n@param _amount Amount to wrap",
            "id": 197,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 117,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 116,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6383,
                  "src": "3403:13:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3403:13:0"
              }
            ],
            "name": "deposit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 114,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 197,
                  "src": "3377:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 113,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3377:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3376:17:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 118,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3417:0:0"
            },
            "scope": 458,
            "src": "3360:850:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 285,
              "nodeType": "Block",
              "src": "4407:838:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 205,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 199,
                          "src": "4425:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4435:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4425:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 208,
                        "name": "ERROR_WITHDRAW_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45,
                        "src": "4438:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 204,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "4417:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4417:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 210,
                  "nodeType": "ExpressionStatement",
                  "src": "4417:48:0"
                },
                {
                  "assignments": [
                    212
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 212,
                      "name": "currentBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 286,
                      "src": "4476:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 211,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4476:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 217,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 214,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "4511:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 215,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4511:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 213,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        300
                      ],
                      "referencedDeclaration": 300,
                      "src": "4501:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4501:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4476:46:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 221,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 219,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 199,
                          "src": "4540:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 220,
                          "name": "currentBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 212,
                          "src": "4551:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4540:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 222,
                        "name": "ERROR_INVALID_WITHDRAW_AMOUNT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 48,
                        "src": "4567:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 218,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "4532:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4532:65:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 224,
                  "nodeType": "ExpressionStatement",
                  "src": "4532:65:0"
                },
                {
                  "assignments": [
                    226
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 226,
                      "name": "newBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 286,
                      "src": "4657:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 225,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4657:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 231,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 229,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 199,
                        "src": "4697:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 227,
                        "name": "currentBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 212,
                        "src": "4678:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 228,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9648,
                      "src": "4678:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4678:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4657:48:0"
                },
                {
                  "assignments": [
                    233
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 233,
                      "name": "currentTotalSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 286,
                      "src": "4716:26:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 232,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4716:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 236,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 234,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        323
                      ],
                      "referencedDeclaration": 323,
                      "src": "4745:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4745:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4716:42:0"
                },
                {
                  "assignments": [
                    238
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 238,
                      "name": "newTotalSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 286,
                      "src": "4768:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 237,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4768:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 243,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 241,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 199,
                        "src": "4816:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 239,
                        "name": "currentTotalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 233,
                        "src": "4793:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 240,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9648,
                      "src": "4793:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4793:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4768:56:0"
                },
                {
                  "assignments": [
                    245
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 245,
                      "name": "currentBlock",
                      "nodeType": "VariableDeclaration",
                      "scope": 286,
                      "src": "4835:19:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 244,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "4835:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 248,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 246,
                      "name": "getBlockNumber64",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6810,
                      "src": "4857:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4857:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4835:40:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 254,
                        "name": "currentBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 245,
                        "src": "4927:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 255,
                            "name": "newBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 226,
                            "src": "4941:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 256,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toUint192Value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10290,
                          "src": "4941:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint192_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint192)"
                          }
                        },
                        "id": 257,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4941:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 249,
                          "name": "balancesHistory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 64,
                          "src": "4885:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_History_$9939_storage_$",
                            "typeString": "mapping(address => struct Checkpointing.History storage ref)"
                          }
                        },
                        "id": 252,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 250,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10404,
                            "src": "4901:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 251,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4901:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4885:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_History_$9939_storage",
                          "typeString": "struct Checkpointing.History storage ref"
                        }
                      },
                      "id": 253,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addCheckpoint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10020,
                      "src": "4885:41:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_History_$9939_storage_ptr_$_t_uint64_$_t_uint192_$returns$__$bound_to$_t_struct$_History_$9939_storage_ptr_$",
                        "typeString": "function (struct Checkpointing.History storage pointer,uint64,uint192)"
                      }
                    },
                    "id": 258,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4885:84:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 259,
                  "nodeType": "ExpressionStatement",
                  "src": "4885:84:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 263,
                        "name": "currentBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 245,
                        "src": "5012:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 264,
                            "name": "newTotalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 238,
                            "src": "5026:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toUint192Value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10290,
                          "src": "5026:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint192_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint192)"
                          }
                        },
                        "id": 266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5026:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 260,
                        "name": "totalSupplyHistory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66,
                        "src": "4979:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_History_$9939_storage",
                          "typeString": "struct Checkpointing.History storage ref"
                        }
                      },
                      "id": 262,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addCheckpoint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10020,
                      "src": "4979:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_History_$9939_storage_ptr_$_t_uint64_$_t_uint192_$returns$__$bound_to$_t_struct$_History_$9939_storage_ptr_$",
                        "typeString": "function (struct Checkpointing.History storage pointer,uint64,uint192)"
                      }
                    },
                    "id": 267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4979:79:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 268,
                  "nodeType": "ExpressionStatement",
                  "src": "4979:79:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 272,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10404,
                              "src": "5141:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5141:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 274,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 199,
                            "src": "5153:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 270,
                            "name": "depositedToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 56,
                            "src": "5113:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$9925",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 271,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "safeTransfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6616,
                          "src": "5113:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$9925_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_contract$_ERC20_$9925_$",
                            "typeString": "function (contract ERC20,address,uint256) returns (bool)"
                          }
                        },
                        "id": 275,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5113:48:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 276,
                        "name": "ERROR_TOKEN_TRANSFER_FAILED",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51,
                        "src": "5163:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 269,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "5105:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5105:86:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 278,
                  "nodeType": "ExpressionStatement",
                  "src": "5105:86:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 280,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "5218:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 281,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5218:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 282,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 199,
                        "src": "5230:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 279,
                      "name": "Withdrawal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 78,
                      "src": "5207:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5207:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 284,
                  "nodeType": "EmitStatement",
                  "src": "5202:36:0"
                }
              ]
            },
            "documentation": "@notice Unwrap `@tokenAmount(self.depositedToken(): address, _amount)`\n@param _amount Amount to unwrap",
            "id": 286,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 202,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 201,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6383,
                  "src": "4393:13:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4393:13:0"
              }
            ],
            "name": "withdraw",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 200,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 199,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 286,
                  "src": "4367:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 198,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4367:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4366:17:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 203,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4407:0:0"
            },
            "scope": 458,
            "src": "4349:896:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 299,
              "nodeType": "Block",
              "src": "5600:62:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 294,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 288,
                        "src": "5630:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 295,
                          "name": "getBlockNumber",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6799,
                          "src": "5638:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 296,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5638:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 293,
                      "name": "_balanceOfAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 442,
                      "src": "5617:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view returns (uint256)"
                      }
                    },
                    "id": 297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5617:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 292,
                  "id": 298,
                  "nodeType": "Return",
                  "src": "5610:45:0"
                }
              ]
            },
            "documentation": null,
            "id": 300,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 288,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 300,
                  "src": "5554:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 287,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5554:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5553:16:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 291,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 300,
                  "src": "5591:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5591:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5590:9:0"
            },
            "scope": 458,
            "src": "5535:127:0",
            "stateMutability": "view",
            "superFunction": 9870,
            "visibility": "public"
          },
          {
            "body": {
              "id": 311,
              "nodeType": "Block",
              "src": "5716:125:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 306,
                            "name": "depositedToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 56,
                            "src": "5808:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$9925",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$9925",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 305,
                          "name": "IERC20WithDecimals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10389,
                          "src": "5789:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20WithDecimals_$10389_$",
                            "typeString": "type(contract IERC20WithDecimals)"
                          }
                        },
                        "id": 307,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5789:34:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20WithDecimals_$10389",
                          "typeString": "contract IERC20WithDecimals"
                        }
                      },
                      "id": 308,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "decimals",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10388,
                      "src": "5789:43:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                        "typeString": "function () view external returns (uint8)"
                      }
                    },
                    "id": 309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5789:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 304,
                  "id": 310,
                  "nodeType": "Return",
                  "src": "5782:52:0"
                }
              ]
            },
            "documentation": null,
            "id": 312,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "decimals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 301,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5685:2:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 303,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 312,
                  "src": "5709:5:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 302,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "5709:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5708:7:0"
            },
            "scope": 458,
            "src": "5668:173:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 322,
              "nodeType": "Block",
              "src": "5900:56:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 318,
                          "name": "getBlockNumber",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6799,
                          "src": "5932:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 319,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5932:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 317,
                      "name": "_totalSupplyAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 457,
                      "src": "5917:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5917:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 316,
                  "id": 321,
                  "nodeType": "Return",
                  "src": "5910:39:0"
                }
              ]
            },
            "documentation": null,
            "id": 323,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "totalSupply",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 313,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5867:2:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 315,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 323,
                  "src": "5891:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 314,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5891:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5890:9:0"
            },
            "scope": 458,
            "src": "5847:109:0",
            "stateMutability": "view",
            "superFunction": 9863,
            "visibility": "public"
          },
          {
            "body": {
              "id": 337,
              "nodeType": "Block",
              "src": "6184:58:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 333,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 325,
                        "src": "6214:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 334,
                        "name": "_blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 327,
                        "src": "6222:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 332,
                      "name": "_balanceOfAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 442,
                      "src": "6201:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view returns (uint256)"
                      }
                    },
                    "id": 335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6201:34:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 331,
                  "id": 336,
                  "nodeType": "Return",
                  "src": "6194:41:0"
                }
              ]
            },
            "documentation": null,
            "id": 338,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "balanceOfAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 325,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 338,
                  "src": "6116:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 324,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6116:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 327,
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 338,
                  "src": "6132:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 326,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6132:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6115:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 330,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 338,
                  "src": "6175:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 329,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6175:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6174:9:0"
            },
            "scope": 458,
            "src": "6095:147:0",
            "stateMutability": "view",
            "superFunction": 10370,
            "visibility": "public"
          },
          {
            "body": {
              "id": 349,
              "nodeType": "Block",
              "src": "6323:52:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 346,
                        "name": "_blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 340,
                        "src": "6355:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 345,
                      "name": "_totalSupplyAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 457,
                      "src": "6340:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6340:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 344,
                  "id": 348,
                  "nodeType": "Return",
                  "src": "6333:35:0"
                }
              ]
            },
            "documentation": null,
            "id": 350,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "totalSupplyAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 341,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 340,
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 350,
                  "src": "6271:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 339,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6271:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6270:22:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 343,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 350,
                  "src": "6314:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 342,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6314:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6313:9:0"
            },
            "scope": 458,
            "src": "6248:127:0",
            "stateMutability": "view",
            "superFunction": 10377,
            "visibility": "public"
          },
          {
            "body": {
              "id": 357,
              "nodeType": "Block",
              "src": "6610:28:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 355,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6627:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 354,
                  "id": 356,
                  "nodeType": "Return",
                  "src": "6620:11:0"
                }
              ]
            },
            "documentation": "@notice Tells whether the TokenWrapper app is a forwarder or not\n@dev IForwarder interface conformance\n@return Always true",
            "id": 358,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "isForwarder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 351,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6580:2:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 354,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 353,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 358,
                  "src": "6604:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 352,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6604:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6603:6:0"
            },
            "scope": 458,
            "src": "6560:78:0",
            "stateMutability": "pure",
            "superFunction": 6300,
            "visibility": "public"
          },
          {
            "body": {
              "id": 403,
              "nodeType": "Block",
              "src": "6885:465:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 365,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10404,
                              "src": "6914:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 366,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "6914:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 367,
                            "name": "_evmScript",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 360,
                            "src": "6926:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 364,
                          "name": "canForward",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            423
                          ],
                          "referencedDeclaration": 423,
                          "src": "6903:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (address,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 368,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6903:34:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 369,
                        "name": "ERROR_CAN_NOT_FORWARD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54,
                        "src": "6939:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 363,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "6895:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 370,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6895:66:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 371,
                  "nodeType": "ExpressionStatement",
                  "src": "6895:66:0"
                },
                {
                  "assignments": [
                    373
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 373,
                      "name": "input",
                      "nodeType": "VariableDeclaration",
                      "scope": 404,
                      "src": "6971:18:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 372,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "6971:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 378,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 376,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7002:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 375,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "6992:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 374,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "6996:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 377,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6992:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6971:33:0"
                },
                {
                  "assignments": [
                    382
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 382,
                      "name": "blacklist",
                      "nodeType": "VariableDeclaration",
                      "scope": 404,
                      "src": "7200:26:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 380,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7200:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 381,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "7200:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 388,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 386,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7243:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 385,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "7229:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 383,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7233:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 384,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "7233:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7229:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7200:45:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 389,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 382,
                        "src": "7255:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 391,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 390,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7265:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7255:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 393,
                          "name": "depositedToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56,
                          "src": "7278:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$9925",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$9925",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 392,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7270:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7270:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7255:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 396,
                  "nodeType": "ExpressionStatement",
                  "src": "7255:38:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 398,
                        "name": "_evmScript",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 360,
                        "src": "7314:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 399,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 373,
                        "src": "7326:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 400,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 382,
                        "src": "7333:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "id": 397,
                      "name": "runScript",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7419,
                      "src": "7304:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,bytes memory,address[] memory) returns (bytes memory)"
                      }
                    },
                    "id": 401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7304:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 402,
                  "nodeType": "ExpressionStatement",
                  "src": "7304:39:0"
                }
              ]
            },
            "documentation": "@notice Execute desired action as a token holder\n@dev IForwarder interface conformance. Forwards any token holder action.\n@param _evmScript Script being executed",
            "id": 404,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "forward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 361,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 360,
                  "name": "_evmScript",
                  "nodeType": "VariableDeclaration",
                  "scope": 404,
                  "src": "6860:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 359,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6860:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6859:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 362,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6885:0:0"
            },
            "scope": 458,
            "src": "6843:507:0",
            "stateMutability": "nonpayable",
            "superFunction": 6314,
            "visibility": "public"
          },
          {
            "body": {
              "id": 422,
              "nodeType": "Block",
              "src": "7703:66:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 420,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 413,
                        "name": "hasInitialized",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6413,
                        "src": "7720:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                          "typeString": "function () view returns (bool)"
                        }
                      },
                      "id": 414,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7720:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 419,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 416,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 406,
                            "src": "7750:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 415,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            300
                          ],
                          "referencedDeclaration": 300,
                          "src": "7740:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 417,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7740:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 418,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7761:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "7740:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "7720:42:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 412,
                  "id": 421,
                  "nodeType": "Return",
                  "src": "7713:49:0"
                }
              ]
            },
            "documentation": "@notice Tells whether `_sender` can forward actions or not\n@dev IForwarder interface conformance\n@param _sender Address of the account intending to forward an action\n@return True if the given address can forward actions, false otherwise",
            "id": 423,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "canForward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 409,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 406,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 423,
                  "src": "7652:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 405,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7652:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 408,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 423,
                  "src": "7669:5:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 407,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7669:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7651:24:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 412,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 411,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 423,
                  "src": "7697:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 410,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7697:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7696:6:0"
            },
            "scope": 458,
            "src": "7632:137:0",
            "stateMutability": "view",
            "superFunction": 6309,
            "visibility": "public"
          },
          {
            "body": {
              "id": 441,
              "nodeType": "Block",
              "src": "7888:87:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 436,
                            "name": "_blockNumber",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 427,
                            "src": "7940:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 437,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toUint64Time",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10271,
                          "src": "7940:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint64)"
                          }
                        },
                        "id": 438,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7940:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 432,
                          "name": "balancesHistory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 64,
                          "src": "7905:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_History_$9939_storage_$",
                            "typeString": "mapping(address => struct Checkpointing.History storage ref)"
                          }
                        },
                        "id": 434,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 433,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 425,
                          "src": "7921:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7905:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_History_$9939_storage",
                          "typeString": "struct Checkpointing.History storage ref"
                        }
                      },
                      "id": 435,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getValueAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10035,
                      "src": "7905:34:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_History_$9939_storage_ptr_$_t_uint64_$returns$_t_uint256_$bound_to$_t_struct$_History_$9939_storage_ptr_$",
                        "typeString": "function (struct Checkpointing.History storage pointer,uint64) view returns (uint256)"
                      }
                    },
                    "id": 439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7905:63:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 431,
                  "id": 440,
                  "nodeType": "Return",
                  "src": "7898:70:0"
                }
              ]
            },
            "documentation": null,
            "id": 442,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_balanceOfAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 428,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 425,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 442,
                  "src": "7818:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 424,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7818:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 427,
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 442,
                  "src": "7834:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 426,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7834:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7817:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 431,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 430,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 442,
                  "src": "7879:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 429,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7879:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7878:9:0"
            },
            "scope": 458,
            "src": "7796:179:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 456,
              "nodeType": "Block",
              "src": "8059:82:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 451,
                            "name": "_blockNumber",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 444,
                            "src": "8106:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 452,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toUint64Time",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10271,
                          "src": "8106:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint64)"
                          }
                        },
                        "id": 453,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8106:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 449,
                        "name": "totalSupplyHistory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66,
                        "src": "8076:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_History_$9939_storage",
                          "typeString": "struct Checkpointing.History storage ref"
                        }
                      },
                      "id": 450,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getValueAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10035,
                      "src": "8076:29:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_History_$9939_storage_ptr_$_t_uint64_$returns$_t_uint256_$bound_to$_t_struct$_History_$9939_storage_ptr_$",
                        "typeString": "function (struct Checkpointing.History storage pointer,uint64) view returns (uint256)"
                      }
                    },
                    "id": 454,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8076:58:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 448,
                  "id": 455,
                  "nodeType": "Return",
                  "src": "8069:65:0"
                }
              ]
            },
            "documentation": null,
            "id": 457,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_totalSupplyAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 445,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 444,
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 457,
                  "src": "8005:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 443,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8005:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8004:22:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 448,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 447,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 457,
                  "src": "8050:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 446,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8050:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8049:9:0"
            },
            "scope": 458,
            "src": "7981:160:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 459,
        "src": "1226:6917:0"
      }
    ],
    "src": "57:8087:0"
  },
  "legacyAST": {
    "absolutePath": "/Users/brett/Development/aragon/voting-connectors/apps/token-wrapper/contracts/TokenWrapper.sol",
    "exportedSymbols": {
      "TokenWrapper": [
        458
      ]
    },
    "id": 459,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "57:23:0"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "@aragon/os/contracts/apps/AragonApp.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 6121,
        "src": "82:49:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/IForwarder.sol",
        "file": "@aragon/os/contracts/common/IForwarder.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 6316,
        "src": "132:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/IsContract.sol",
        "file": "@aragon/os/contracts/common/IsContract.sol",
        "id": 4,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 6470,
        "src": "185:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "id": 5,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 9696,
        "src": "238:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/token/ERC20.sol",
        "file": "@aragon/os/contracts/lib/token/ERC20.sol",
        "id": 6,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 9926,
        "src": "291:50:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragonone/voting-connectors-contract-utils/contracts/Checkpointing.sol",
        "file": "@aragonone/voting-connectors-contract-utils/contracts/Checkpointing.sol",
        "id": 7,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 10233,
        "src": "343:81:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragonone/voting-connectors-contract-utils/contracts/CheckpointingHelpers.sol",
        "file": "@aragonone/voting-connectors-contract-utils/contracts/CheckpointingHelpers.sol",
        "id": 8,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 10292,
        "src": "425:88:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragonone/voting-connectors-contract-utils/contracts/ERC20ViewOnly.sol",
        "file": "@aragonone/voting-connectors-contract-utils/contracts/ERC20ViewOnly.sol",
        "id": 9,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 10357,
        "src": "514:81:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragonone/voting-connectors-contract-utils/contracts/interfaces/IERC20WithCheckpointing.sol",
        "file": "@aragonone/voting-connectors-contract-utils/contracts/interfaces/IERC20WithCheckpointing.sol",
        "id": 10,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 10379,
        "src": "596:102:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragonone/voting-connectors-contract-utils/contracts/interfaces/IERC20WithDecimals.sol",
        "file": "@aragonone/voting-connectors-contract-utils/contracts/interfaces/IERC20WithDecimals.sol",
        "id": 11,
        "nodeType": "ImportDirective",
        "scope": 459,
        "sourceUnit": 10390,
        "src": "699:97:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12,
              "name": "IERC20WithCheckpointing",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10378,
              "src": "1251:23:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20WithCheckpointing_$10378",
                "typeString": "contract IERC20WithCheckpointing"
              }
            },
            "id": 13,
            "nodeType": "InheritanceSpecifier",
            "src": "1251:23:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 14,
              "name": "IForwarder",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6315,
              "src": "1276:10:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IForwarder_$6315",
                "typeString": "contract IForwarder"
              }
            },
            "id": 15,
            "nodeType": "InheritanceSpecifier",
            "src": "1276:10:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 16,
              "name": "IsContract",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6469,
              "src": "1288:10:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IsContract_$6469",
                "typeString": "contract IsContract"
              }
            },
            "id": 17,
            "nodeType": "InheritanceSpecifier",
            "src": "1288:10:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 18,
              "name": "ERC20ViewOnly",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10356,
              "src": "1300:13:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20ViewOnly_$10356",
                "typeString": "contract ERC20ViewOnly"
              }
            },
            "id": 19,
            "nodeType": "InheritanceSpecifier",
            "src": "1300:13:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6120,
              "src": "1315:9:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$6120",
                "typeString": "contract AragonApp"
              }
            },
            "id": 21,
            "nodeType": "InheritanceSpecifier",
            "src": "1315:9:0"
          }
        ],
        "contractDependencies": [
          5208,
          5996,
          6120,
          6133,
          6293,
          6315,
          6343,
          6441,
          6469,
          6502,
          6539,
          6831,
          7053,
          7454,
          7481,
          8745,
          9925,
          10356,
          10378
        ],
        "contractKind": "contract",
        "documentation": "@title TokenWrapper\n@notice Wrapper around a normal ERC20 token that provides a \"view-only\" checkpointed ERC20\n        implementation for use with Voting apps.\n        It only supports up to 2^192 - 1 tokens being deposited (not taking into account decimals).\n@dev Inspired by:\n  - MiniMe token\n  - https://github.com/MyBitFoundation/MyBit-DAO.tech/blob/master/apps/MyTokens/contracts/MyTokens.sol",
        "fullyImplemented": true,
        "id": 458,
        "linearizedBaseContracts": [
          458,
          6120,
          5208,
          7454,
          8745,
          7481,
          6539,
          7053,
          10356,
          6469,
          6293,
          6343,
          6133,
          6502,
          6441,
          6831,
          5996,
          6315,
          10378,
          9925
        ],
        "name": "TokenWrapper",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 24,
            "libraryName": {
              "contractScope": null,
              "id": 22,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9695,
              "src": "1337:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$9695",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1331:27:0",
            "typeName": {
              "id": 23,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1350:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 27,
            "libraryName": {
              "contractScope": null,
              "id": 25,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6784,
              "src": "1369:9:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$6784",
                "typeString": "library SafeERC20"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1363:26:0",
            "typeName": {
              "contractScope": null,
              "id": 26,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9925,
              "src": "1383:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$9925",
                "typeString": "contract ERC20"
              }
            }
          },
          {
            "id": 30,
            "libraryName": {
              "contractScope": null,
              "id": 28,
              "name": "Checkpointing",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10232,
              "src": "1400:13:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Checkpointing_$10232",
                "typeString": "library Checkpointing"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1394:46:0",
            "typeName": {
              "contractScope": null,
              "id": 29,
              "name": "Checkpointing.History",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9939,
              "src": "1418:21:0",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_History_$9939_storage_ptr",
                "typeString": "struct Checkpointing.History"
              }
            }
          },
          {
            "id": 33,
            "libraryName": {
              "contractScope": null,
              "id": 31,
              "name": "CheckpointingHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10291,
              "src": "1451:20:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CheckpointingHelpers_$10291",
                "typeString": "library CheckpointingHelpers"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1445:39:0",
            "typeName": {
              "id": 32,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1476:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 36,
            "name": "ERROR_TOKEN_NOT_CONTRACT",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "1490:74:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 34,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1490:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "54575f544f4b454e5f4e4f545f434f4e5452414354",
              "id": 35,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1541:23:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_7ba81676a24b6cf524098771d7efc06702eaa0dfca6e44c9bb1e29d99fcc8f7e",
                "typeString": "literal_string \"TW_TOKEN_NOT_CONTRACT\""
              },
              "value": "TW_TOKEN_NOT_CONTRACT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 39,
            "name": "ERROR_DEPOSIT_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "1570:76:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 37,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1570:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "54575f4445504f5349545f414d4f554e545f5a45524f",
              "id": 38,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1622:24:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f7a6759aee557658c1e2eb38c2ea42778750eb14f91d098afe293237d7f52c03",
                "typeString": "literal_string \"TW_DEPOSIT_AMOUNT_ZERO\""
              },
              "value": "TW_DEPOSIT_AMOUNT_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 42,
            "name": "ERROR_TOKEN_TRANSFER_FROM_FAILED",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "1652:90:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 40,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1652:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "54575f544f4b454e5f5452414e534645525f46524f4d5f4641494c4544",
              "id": 41,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1711:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_413ce35ed93e8d8e54bd02240ebd5206b8286deb9f612747bf74e9b2c5a35ffd",
                "typeString": "literal_string \"TW_TOKEN_TRANSFER_FROM_FAILED\""
              },
              "value": "TW_TOKEN_TRANSFER_FROM_FAILED"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 45,
            "name": "ERROR_WITHDRAW_AMOUNT_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "1748:78:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 43,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1748:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "54575f57495448445241575f414d4f554e545f5a45524f",
              "id": 44,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1801:25:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_c3496688d3b7cf242c741d2469400ce5224f8de9d95f39ba4b05fcdb61d63679",
                "typeString": "literal_string \"TW_WITHDRAW_AMOUNT_ZERO\""
              },
              "value": "TW_WITHDRAW_AMOUNT_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 48,
            "name": "ERROR_INVALID_WITHDRAW_AMOUNT",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "1832:84:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 46,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1832:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "54575f494e56414c49445f57495448445241575f414d4f554e54",
              "id": 47,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1888:28:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d0cd27344bdef631161748197f4aa8b773b68f5bd30c99c206ca894566552937",
                "typeString": "literal_string \"TW_INVALID_WITHDRAW_AMOUNT\""
              },
              "value": "TW_INVALID_WITHDRAW_AMOUNT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 51,
            "name": "ERROR_TOKEN_TRANSFER_FAILED",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "1922:80:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 49,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1922:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "54575f544f4b454e5f5452414e534645525f4641494c4544",
              "id": 50,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1976:26:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_ab63e88ec259ac0b8c242574caff6553c4e42776739cac9d71eb578671806581",
                "typeString": "literal_string \"TW_TOKEN_TRANSFER_FAILED\""
              },
              "value": "TW_TOKEN_TRANSFER_FAILED"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 54,
            "name": "ERROR_CAN_NOT_FORWARD",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "2008:68:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 52,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2008:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "54575f43414e5f4e4f545f464f5257415244",
              "id": 53,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2056:20:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_2100f92f0a0168e6ea10b21bd6ab318825dbaa2b8561b410bac7acacc03eb92b",
                "typeString": "literal_string \"TW_CAN_NOT_FORWARD\""
              },
              "value": "TW_CAN_NOT_FORWARD"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 56,
            "name": "depositedToken",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "2083:27:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$9925",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 55,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9925,
              "src": "2083:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$9925",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 58,
            "name": "name",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "2116:18:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 57,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2116:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 60,
            "name": "symbol",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "2140:20:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 59,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2140:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 64,
            "name": "balancesHistory",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "2235:67:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_History_$9939_storage_$",
              "typeString": "mapping(address => struct Checkpointing.History)"
            },
            "typeName": {
              "id": 63,
              "keyType": {
                "id": 61,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2244:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2235:42:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_History_$9939_storage_$",
                "typeString": "mapping(address => struct Checkpointing.History)"
              },
              "valueType": {
                "contractScope": null,
                "id": 62,
                "name": "Checkpointing.History",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 9939,
                "src": "2255:21:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_History_$9939_storage_ptr",
                  "typeString": "struct Checkpointing.History"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 66,
            "name": "totalSupplyHistory",
            "nodeType": "VariableDeclaration",
            "scope": 458,
            "src": "2365:49:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_History_$9939_storage",
              "typeString": "struct Checkpointing.History"
            },
            "typeName": {
              "contractScope": null,
              "id": 65,
              "name": "Checkpointing.History",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9939,
              "src": "2365:21:0",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_History_$9939_storage_ptr",
                "typeString": "struct Checkpointing.History"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 72,
            "name": "Deposit",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 71,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 68,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 72,
                  "src": "2435:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2435:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 72,
                  "src": "2459:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2459:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2434:40:0"
            },
            "src": "2421:54:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 78,
            "name": "Withdrawal",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 77,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 74,
                  "indexed": true,
                  "name": "entity",
                  "nodeType": "VariableDeclaration",
                  "scope": 78,
                  "src": "2497:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 73,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2497:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 76,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 78,
                  "src": "2521:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 75,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2521:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2496:40:0"
            },
            "src": "2480:57:0"
          },
          {
            "body": {
              "id": 111,
              "nodeType": "Block",
              "src": "2907:194:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 89,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6426,
                      "src": "2917:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 90,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2917:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 91,
                  "nodeType": "ExpressionStatement",
                  "src": "2917:13:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 94,
                            "name": "_depositedToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 80,
                            "src": "2960:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$9925",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$9925",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 93,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6468,
                          "src": "2949:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 95,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2949:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 96,
                        "name": "ERROR_TOKEN_NOT_CONTRACT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36,
                        "src": "2978:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 92,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "2941:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 97,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2941:62:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 98,
                  "nodeType": "ExpressionStatement",
                  "src": "2941:62:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 99,
                      "name": "depositedToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 56,
                      "src": "3014:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$9925",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 100,
                      "name": "_depositedToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 80,
                      "src": "3031:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$9925",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "3014:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$9925",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 102,
                  "nodeType": "ExpressionStatement",
                  "src": "3014:32:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 103,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 58,
                      "src": "3056:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 104,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 82,
                      "src": "3063:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "3056:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 106,
                  "nodeType": "ExpressionStatement",
                  "src": "3056:12:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 107,
                      "name": "symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60,
                      "src": "3078:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 108,
                      "name": "_symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 84,
                      "src": "3087:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "3078:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 110,
                  "nodeType": "ExpressionStatement",
                  "src": "3078:16:0"
                }
              ]
            },
            "documentation": "@notice Create a new \"wrapped\" checkpointed token that is convertible from a normal ERC20 token\n@param _depositedToken The ERC20 token to be wrapped\n@param _name The wrapped token's name\n@param _symbol The wrapped token's symbol",
            "id": 112,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 87,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 86,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6373,
                  "src": "2898:8:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2898:8:0"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 85,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 80,
                  "name": "_depositedToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 112,
                  "src": "2836:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$9925",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 79,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9925,
                    "src": "2836:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$9925",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 82,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 112,
                  "src": "2859:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 81,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2859:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 84,
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 112,
                  "src": "2873:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 83,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2873:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2835:53:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 88,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2907:0:0"
            },
            "scope": 458,
            "src": "2816:285:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 196,
              "nodeType": "Block",
              "src": "3417:793:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 120,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 114,
                          "src": "3435:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 121,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3445:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3435:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 123,
                        "name": "ERROR_DEPOSIT_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 39,
                        "src": "3448:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 119,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "3427:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3427:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 125,
                  "nodeType": "ExpressionStatement",
                  "src": "3427:47:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 129,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10404,
                              "src": "3567:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 130,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3567:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 132,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10485,
                                "src": "3587:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_TokenWrapper_$458",
                                  "typeString": "contract TokenWrapper"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_TokenWrapper_$458",
                                  "typeString": "contract TokenWrapper"
                                }
                              ],
                              "id": 131,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3579:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 133,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3579:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 134,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 114,
                            "src": "3594:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 127,
                            "name": "depositedToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 56,
                            "src": "3535:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$9925",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 128,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "safeTransferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6647,
                          "src": "3535:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$9925_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_contract$_ERC20_$9925_$",
                            "typeString": "function (contract ERC20,address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3535:67:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 136,
                        "name": "ERROR_TOKEN_TRANSFER_FROM_FAILED",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42,
                        "src": "3604:32:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 126,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "3527:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 137,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3527:110:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 138,
                  "nodeType": "ExpressionStatement",
                  "src": "3527:110:0"
                },
                {
                  "assignments": [
                    140
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 140,
                      "name": "currentBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 197,
                      "src": "3702:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 139,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3702:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 145,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 142,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "3737:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 143,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3737:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 141,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        300
                      ],
                      "referencedDeclaration": 300,
                      "src": "3727:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3727:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3702:46:0"
                },
                {
                  "assignments": [
                    147
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 147,
                      "name": "newBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 197,
                      "src": "3758:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 146,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3758:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 152,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 150,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 114,
                        "src": "3798:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 148,
                        "name": "currentBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 140,
                        "src": "3779:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 149,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9673,
                      "src": "3779:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3779:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3758:48:0"
                },
                {
                  "assignments": [
                    154
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 154,
                      "name": "currentTotalSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 197,
                      "src": "3817:26:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 153,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3817:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 157,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 155,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        323
                      ],
                      "referencedDeclaration": 323,
                      "src": "3846:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3846:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3817:42:0"
                },
                {
                  "assignments": [
                    159
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 159,
                      "name": "newTotalSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 197,
                      "src": "3869:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 158,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3869:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 164,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 162,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 114,
                        "src": "3917:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 160,
                        "name": "currentTotalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 154,
                        "src": "3894:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 161,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9673,
                      "src": "3894:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3894:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3869:56:0"
                },
                {
                  "assignments": [
                    166
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 166,
                      "name": "currentBlock",
                      "nodeType": "VariableDeclaration",
                      "scope": 197,
                      "src": "3936:19:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 165,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "3936:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 169,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 167,
                      "name": "getBlockNumber64",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6810,
                      "src": "3958:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 168,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3958:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3936:40:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 175,
                        "name": "currentBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 166,
                        "src": "4028:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 176,
                            "name": "newBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 147,
                            "src": "4042:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toUint192Value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10290,
                          "src": "4042:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint192_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint192)"
                          }
                        },
                        "id": 178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4042:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 170,
                          "name": "balancesHistory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 64,
                          "src": "3986:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_History_$9939_storage_$",
                            "typeString": "mapping(address => struct Checkpointing.History storage ref)"
                          }
                        },
                        "id": 173,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 171,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10404,
                            "src": "4002:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 172,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4002:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3986:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_History_$9939_storage",
                          "typeString": "struct Checkpointing.History storage ref"
                        }
                      },
                      "id": 174,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addCheckpoint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10020,
                      "src": "3986:41:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_History_$9939_storage_ptr_$_t_uint64_$_t_uint192_$returns$__$bound_to$_t_struct$_History_$9939_storage_ptr_$",
                        "typeString": "function (struct Checkpointing.History storage pointer,uint64,uint192)"
                      }
                    },
                    "id": 179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3986:84:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 180,
                  "nodeType": "ExpressionStatement",
                  "src": "3986:84:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 184,
                        "name": "currentBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 166,
                        "src": "4113:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 185,
                            "name": "newTotalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 159,
                            "src": "4127:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 186,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toUint192Value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10290,
                          "src": "4127:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint192_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint192)"
                          }
                        },
                        "id": 187,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4127:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 181,
                        "name": "totalSupplyHistory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66,
                        "src": "4080:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_History_$9939_storage",
                          "typeString": "struct Checkpointing.History storage ref"
                        }
                      },
                      "id": 183,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addCheckpoint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10020,
                      "src": "4080:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_History_$9939_storage_ptr_$_t_uint64_$_t_uint192_$returns$__$bound_to$_t_struct$_History_$9939_storage_ptr_$",
                        "typeString": "function (struct Checkpointing.History storage pointer,uint64,uint192)"
                      }
                    },
                    "id": 188,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4080:79:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 189,
                  "nodeType": "ExpressionStatement",
                  "src": "4080:79:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 191,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "4183:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 192,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4183:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 193,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 114,
                        "src": "4195:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 190,
                      "name": "Deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 72,
                      "src": "4175:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 194,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4175:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 195,
                  "nodeType": "EmitStatement",
                  "src": "4170:33:0"
                }
              ]
            },
            "documentation": "@notice Wrap `@tokenAmount(self.depositedToken(): address, _amount)`\n@dev Only up to 2^192 - 1 tokens are ever allowed to be deposited, due to the underlying\n     storage format.\n@param _amount Amount to wrap",
            "id": 197,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 117,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 116,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6383,
                  "src": "3403:13:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3403:13:0"
              }
            ],
            "name": "deposit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 114,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 197,
                  "src": "3377:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 113,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3377:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3376:17:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 118,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3417:0:0"
            },
            "scope": 458,
            "src": "3360:850:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 285,
              "nodeType": "Block",
              "src": "4407:838:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 205,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 199,
                          "src": "4425:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4435:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4425:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 208,
                        "name": "ERROR_WITHDRAW_AMOUNT_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45,
                        "src": "4438:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 204,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "4417:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4417:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 210,
                  "nodeType": "ExpressionStatement",
                  "src": "4417:48:0"
                },
                {
                  "assignments": [
                    212
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 212,
                      "name": "currentBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 286,
                      "src": "4476:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 211,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4476:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 217,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 214,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "4511:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 215,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4511:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 213,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        300
                      ],
                      "referencedDeclaration": 300,
                      "src": "4501:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4501:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4476:46:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 221,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 219,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 199,
                          "src": "4540:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 220,
                          "name": "currentBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 212,
                          "src": "4551:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4540:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 222,
                        "name": "ERROR_INVALID_WITHDRAW_AMOUNT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 48,
                        "src": "4567:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 218,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "4532:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4532:65:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 224,
                  "nodeType": "ExpressionStatement",
                  "src": "4532:65:0"
                },
                {
                  "assignments": [
                    226
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 226,
                      "name": "newBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 286,
                      "src": "4657:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 225,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4657:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 231,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 229,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 199,
                        "src": "4697:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 227,
                        "name": "currentBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 212,
                        "src": "4678:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 228,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9648,
                      "src": "4678:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4678:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4657:48:0"
                },
                {
                  "assignments": [
                    233
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 233,
                      "name": "currentTotalSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 286,
                      "src": "4716:26:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 232,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4716:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 236,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 234,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        323
                      ],
                      "referencedDeclaration": 323,
                      "src": "4745:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4745:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4716:42:0"
                },
                {
                  "assignments": [
                    238
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 238,
                      "name": "newTotalSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 286,
                      "src": "4768:22:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 237,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4768:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 243,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 241,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 199,
                        "src": "4816:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 239,
                        "name": "currentTotalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 233,
                        "src": "4793:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 240,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9648,
                      "src": "4793:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4793:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4768:56:0"
                },
                {
                  "assignments": [
                    245
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 245,
                      "name": "currentBlock",
                      "nodeType": "VariableDeclaration",
                      "scope": 286,
                      "src": "4835:19:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 244,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "4835:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 248,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 246,
                      "name": "getBlockNumber64",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6810,
                      "src": "4857:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                        "typeString": "function () view returns (uint64)"
                      }
                    },
                    "id": 247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4857:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4835:40:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 254,
                        "name": "currentBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 245,
                        "src": "4927:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 255,
                            "name": "newBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 226,
                            "src": "4941:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 256,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toUint192Value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10290,
                          "src": "4941:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint192_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint192)"
                          }
                        },
                        "id": 257,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4941:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 249,
                          "name": "balancesHistory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 64,
                          "src": "4885:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_History_$9939_storage_$",
                            "typeString": "mapping(address => struct Checkpointing.History storage ref)"
                          }
                        },
                        "id": 252,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 250,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10404,
                            "src": "4901:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 251,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4901:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4885:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_History_$9939_storage",
                          "typeString": "struct Checkpointing.History storage ref"
                        }
                      },
                      "id": 253,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addCheckpoint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10020,
                      "src": "4885:41:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_History_$9939_storage_ptr_$_t_uint64_$_t_uint192_$returns$__$bound_to$_t_struct$_History_$9939_storage_ptr_$",
                        "typeString": "function (struct Checkpointing.History storage pointer,uint64,uint192)"
                      }
                    },
                    "id": 258,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4885:84:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 259,
                  "nodeType": "ExpressionStatement",
                  "src": "4885:84:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 263,
                        "name": "currentBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 245,
                        "src": "5012:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 264,
                            "name": "newTotalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 238,
                            "src": "5026:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toUint192Value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10290,
                          "src": "5026:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint192_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint192)"
                          }
                        },
                        "id": 266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5026:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 260,
                        "name": "totalSupplyHistory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66,
                        "src": "4979:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_History_$9939_storage",
                          "typeString": "struct Checkpointing.History storage ref"
                        }
                      },
                      "id": 262,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addCheckpoint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10020,
                      "src": "4979:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_History_$9939_storage_ptr_$_t_uint64_$_t_uint192_$returns$__$bound_to$_t_struct$_History_$9939_storage_ptr_$",
                        "typeString": "function (struct Checkpointing.History storage pointer,uint64,uint192)"
                      }
                    },
                    "id": 267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4979:79:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 268,
                  "nodeType": "ExpressionStatement",
                  "src": "4979:79:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 272,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10404,
                              "src": "5141:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5141:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 274,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 199,
                            "src": "5153:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 270,
                            "name": "depositedToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 56,
                            "src": "5113:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$9925",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 271,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "safeTransfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6616,
                          "src": "5113:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$9925_$_t_address_$_t_uint256_$returns$_t_bool_$bound_to$_t_contract$_ERC20_$9925_$",
                            "typeString": "function (contract ERC20,address,uint256) returns (bool)"
                          }
                        },
                        "id": 275,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5113:48:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 276,
                        "name": "ERROR_TOKEN_TRANSFER_FAILED",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51,
                        "src": "5163:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 269,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "5105:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5105:86:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 278,
                  "nodeType": "ExpressionStatement",
                  "src": "5105:86:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 280,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "5218:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 281,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5218:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 282,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 199,
                        "src": "5230:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 279,
                      "name": "Withdrawal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 78,
                      "src": "5207:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5207:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 284,
                  "nodeType": "EmitStatement",
                  "src": "5202:36:0"
                }
              ]
            },
            "documentation": "@notice Unwrap `@tokenAmount(self.depositedToken(): address, _amount)`\n@param _amount Amount to unwrap",
            "id": 286,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 202,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 201,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6383,
                  "src": "4393:13:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4393:13:0"
              }
            ],
            "name": "withdraw",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 200,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 199,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 286,
                  "src": "4367:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 198,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4367:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4366:17:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 203,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4407:0:0"
            },
            "scope": 458,
            "src": "4349:896:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 299,
              "nodeType": "Block",
              "src": "5600:62:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 294,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 288,
                        "src": "5630:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 295,
                          "name": "getBlockNumber",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6799,
                          "src": "5638:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 296,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5638:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 293,
                      "name": "_balanceOfAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 442,
                      "src": "5617:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view returns (uint256)"
                      }
                    },
                    "id": 297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5617:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 292,
                  "id": 298,
                  "nodeType": "Return",
                  "src": "5610:45:0"
                }
              ]
            },
            "documentation": null,
            "id": 300,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 288,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 300,
                  "src": "5554:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 287,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5554:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5553:16:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 291,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 300,
                  "src": "5591:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5591:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5590:9:0"
            },
            "scope": 458,
            "src": "5535:127:0",
            "stateMutability": "view",
            "superFunction": 9870,
            "visibility": "public"
          },
          {
            "body": {
              "id": 311,
              "nodeType": "Block",
              "src": "5716:125:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 306,
                            "name": "depositedToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 56,
                            "src": "5808:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$9925",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$9925",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 305,
                          "name": "IERC20WithDecimals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10389,
                          "src": "5789:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20WithDecimals_$10389_$",
                            "typeString": "type(contract IERC20WithDecimals)"
                          }
                        },
                        "id": 307,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5789:34:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20WithDecimals_$10389",
                          "typeString": "contract IERC20WithDecimals"
                        }
                      },
                      "id": 308,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "decimals",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10388,
                      "src": "5789:43:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                        "typeString": "function () view external returns (uint8)"
                      }
                    },
                    "id": 309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5789:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 304,
                  "id": 310,
                  "nodeType": "Return",
                  "src": "5782:52:0"
                }
              ]
            },
            "documentation": null,
            "id": 312,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "decimals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 301,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5685:2:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 303,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 312,
                  "src": "5709:5:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 302,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "5709:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5708:7:0"
            },
            "scope": 458,
            "src": "5668:173:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 322,
              "nodeType": "Block",
              "src": "5900:56:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 318,
                          "name": "getBlockNumber",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6799,
                          "src": "5932:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 319,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5932:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 317,
                      "name": "_totalSupplyAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 457,
                      "src": "5917:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5917:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 316,
                  "id": 321,
                  "nodeType": "Return",
                  "src": "5910:39:0"
                }
              ]
            },
            "documentation": null,
            "id": 323,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "totalSupply",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 313,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5867:2:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 315,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 323,
                  "src": "5891:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 314,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5891:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5890:9:0"
            },
            "scope": 458,
            "src": "5847:109:0",
            "stateMutability": "view",
            "superFunction": 9863,
            "visibility": "public"
          },
          {
            "body": {
              "id": 337,
              "nodeType": "Block",
              "src": "6184:58:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 333,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 325,
                        "src": "6214:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 334,
                        "name": "_blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 327,
                        "src": "6222:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 332,
                      "name": "_balanceOfAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 442,
                      "src": "6201:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view returns (uint256)"
                      }
                    },
                    "id": 335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6201:34:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 331,
                  "id": 336,
                  "nodeType": "Return",
                  "src": "6194:41:0"
                }
              ]
            },
            "documentation": null,
            "id": 338,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "balanceOfAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 325,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 338,
                  "src": "6116:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 324,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6116:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 327,
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 338,
                  "src": "6132:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 326,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6132:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6115:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 330,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 338,
                  "src": "6175:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 329,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6175:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6174:9:0"
            },
            "scope": 458,
            "src": "6095:147:0",
            "stateMutability": "view",
            "superFunction": 10370,
            "visibility": "public"
          },
          {
            "body": {
              "id": 349,
              "nodeType": "Block",
              "src": "6323:52:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 346,
                        "name": "_blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 340,
                        "src": "6355:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 345,
                      "name": "_totalSupplyAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 457,
                      "src": "6340:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6340:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 344,
                  "id": 348,
                  "nodeType": "Return",
                  "src": "6333:35:0"
                }
              ]
            },
            "documentation": null,
            "id": 350,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "totalSupplyAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 341,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 340,
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 350,
                  "src": "6271:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 339,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6271:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6270:22:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 343,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 350,
                  "src": "6314:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 342,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6314:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6313:9:0"
            },
            "scope": 458,
            "src": "6248:127:0",
            "stateMutability": "view",
            "superFunction": 10377,
            "visibility": "public"
          },
          {
            "body": {
              "id": 357,
              "nodeType": "Block",
              "src": "6610:28:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 355,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6627:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 354,
                  "id": 356,
                  "nodeType": "Return",
                  "src": "6620:11:0"
                }
              ]
            },
            "documentation": "@notice Tells whether the TokenWrapper app is a forwarder or not\n@dev IForwarder interface conformance\n@return Always true",
            "id": 358,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "isForwarder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 351,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6580:2:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 354,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 353,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 358,
                  "src": "6604:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 352,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6604:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6603:6:0"
            },
            "scope": 458,
            "src": "6560:78:0",
            "stateMutability": "pure",
            "superFunction": 6300,
            "visibility": "public"
          },
          {
            "body": {
              "id": 403,
              "nodeType": "Block",
              "src": "6885:465:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 365,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10404,
                              "src": "6914:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 366,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "6914:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 367,
                            "name": "_evmScript",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 360,
                            "src": "6926:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 364,
                          "name": "canForward",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            423
                          ],
                          "referencedDeclaration": 423,
                          "src": "6903:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (address,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 368,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6903:34:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 369,
                        "name": "ERROR_CAN_NOT_FORWARD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54,
                        "src": "6939:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 363,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10408,
                      "src": "6895:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 370,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6895:66:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 371,
                  "nodeType": "ExpressionStatement",
                  "src": "6895:66:0"
                },
                {
                  "assignments": [
                    373
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 373,
                      "name": "input",
                      "nodeType": "VariableDeclaration",
                      "scope": 404,
                      "src": "6971:18:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 372,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "6971:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 378,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 376,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7002:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 375,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "6992:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 374,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "6996:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 377,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6992:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6971:33:0"
                },
                {
                  "assignments": [
                    382
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 382,
                      "name": "blacklist",
                      "nodeType": "VariableDeclaration",
                      "scope": 404,
                      "src": "7200:26:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 380,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7200:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 381,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "7200:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 388,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 386,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7243:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 385,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "7229:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 383,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7233:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 384,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "7233:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7229:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7200:45:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 389,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 382,
                        "src": "7255:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 391,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 390,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7265:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7255:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 393,
                          "name": "depositedToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56,
                          "src": "7278:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$9925",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$9925",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 392,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7270:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7270:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7255:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 396,
                  "nodeType": "ExpressionStatement",
                  "src": "7255:38:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 398,
                        "name": "_evmScript",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 360,
                        "src": "7314:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 399,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 373,
                        "src": "7326:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 400,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 382,
                        "src": "7333:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "id": 397,
                      "name": "runScript",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7419,
                      "src": "7304:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,bytes memory,address[] memory) returns (bytes memory)"
                      }
                    },
                    "id": 401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7304:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 402,
                  "nodeType": "ExpressionStatement",
                  "src": "7304:39:0"
                }
              ]
            },
            "documentation": "@notice Execute desired action as a token holder\n@dev IForwarder interface conformance. Forwards any token holder action.\n@param _evmScript Script being executed",
            "id": 404,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "forward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 361,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 360,
                  "name": "_evmScript",
                  "nodeType": "VariableDeclaration",
                  "scope": 404,
                  "src": "6860:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 359,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6860:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6859:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 362,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6885:0:0"
            },
            "scope": 458,
            "src": "6843:507:0",
            "stateMutability": "nonpayable",
            "superFunction": 6314,
            "visibility": "public"
          },
          {
            "body": {
              "id": 422,
              "nodeType": "Block",
              "src": "7703:66:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 420,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 413,
                        "name": "hasInitialized",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6413,
                        "src": "7720:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                          "typeString": "function () view returns (bool)"
                        }
                      },
                      "id": 414,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7720:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 419,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 416,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 406,
                            "src": "7750:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 415,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            300
                          ],
                          "referencedDeclaration": 300,
                          "src": "7740:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 417,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7740:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 418,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7761:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "7740:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "7720:42:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 412,
                  "id": 421,
                  "nodeType": "Return",
                  "src": "7713:49:0"
                }
              ]
            },
            "documentation": "@notice Tells whether `_sender` can forward actions or not\n@dev IForwarder interface conformance\n@param _sender Address of the account intending to forward an action\n@return True if the given address can forward actions, false otherwise",
            "id": 423,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "canForward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 409,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 406,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 423,
                  "src": "7652:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 405,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7652:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 408,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 423,
                  "src": "7669:5:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 407,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7669:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7651:24:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 412,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 411,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 423,
                  "src": "7697:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 410,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7697:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7696:6:0"
            },
            "scope": 458,
            "src": "7632:137:0",
            "stateMutability": "view",
            "superFunction": 6309,
            "visibility": "public"
          },
          {
            "body": {
              "id": 441,
              "nodeType": "Block",
              "src": "7888:87:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 436,
                            "name": "_blockNumber",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 427,
                            "src": "7940:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 437,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toUint64Time",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10271,
                          "src": "7940:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint64)"
                          }
                        },
                        "id": 438,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7940:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 432,
                          "name": "balancesHistory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 64,
                          "src": "7905:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_History_$9939_storage_$",
                            "typeString": "mapping(address => struct Checkpointing.History storage ref)"
                          }
                        },
                        "id": 434,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 433,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 425,
                          "src": "7921:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7905:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_History_$9939_storage",
                          "typeString": "struct Checkpointing.History storage ref"
                        }
                      },
                      "id": 435,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getValueAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10035,
                      "src": "7905:34:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_History_$9939_storage_ptr_$_t_uint64_$returns$_t_uint256_$bound_to$_t_struct$_History_$9939_storage_ptr_$",
                        "typeString": "function (struct Checkpointing.History storage pointer,uint64) view returns (uint256)"
                      }
                    },
                    "id": 439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7905:63:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 431,
                  "id": 440,
                  "nodeType": "Return",
                  "src": "7898:70:0"
                }
              ]
            },
            "documentation": null,
            "id": 442,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_balanceOfAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 428,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 425,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 442,
                  "src": "7818:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 424,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7818:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 427,
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 442,
                  "src": "7834:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 426,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7834:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7817:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 431,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 430,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 442,
                  "src": "7879:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 429,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7879:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7878:9:0"
            },
            "scope": 458,
            "src": "7796:179:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 456,
              "nodeType": "Block",
              "src": "8059:82:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 451,
                            "name": "_blockNumber",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 444,
                            "src": "8106:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 452,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toUint64Time",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10271,
                          "src": "8106:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint64)"
                          }
                        },
                        "id": 453,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8106:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 449,
                        "name": "totalSupplyHistory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66,
                        "src": "8076:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_History_$9939_storage",
                          "typeString": "struct Checkpointing.History storage ref"
                        }
                      },
                      "id": 450,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getValueAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10035,
                      "src": "8076:29:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_History_$9939_storage_ptr_$_t_uint64_$returns$_t_uint256_$bound_to$_t_struct$_History_$9939_storage_ptr_$",
                        "typeString": "function (struct Checkpointing.History storage pointer,uint64) view returns (uint256)"
                      }
                    },
                    "id": 454,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8076:58:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 448,
                  "id": 455,
                  "nodeType": "Return",
                  "src": "8069:65:0"
                }
              ]
            },
            "documentation": null,
            "id": 457,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_totalSupplyAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 445,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 444,
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 457,
                  "src": "8005:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 443,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8005:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8004:22:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 448,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 447,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 457,
                  "src": "8050:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 446,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8050:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8049:9:0"
            },
            "scope": 458,
            "src": "7981:160:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 459,
        "src": "1226:6917:0"
      }
    ],
    "src": "57:8087:0"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-06-07T23:27:00.423Z",
  "devdoc": {
    "methods": {
      "allowRecoverability(address)": {
        "details": "By default deriving from AragonApp makes it recoverable",
        "params": {
          "token": "Token address that would be recovered"
        },
        "return": "bool whether the app allows the recovery"
      },
      "canForward(address,bytes)": {
        "details": "IForwarder interface conformance",
        "params": {
          "_sender": "Address of the account intending to forward an action"
        },
        "return": "True if the given address can forward actions, false otherwise"
      },
      "canPerform(address,bytes32,uint256[])": {
        "details": "Check whether an action can be performed by a sender for a particular role on this app",
        "params": {
          "_params": "Permission params for the role",
          "_role": "Role on this app",
          "_sender": "Sender of the call"
        },
        "return": "Boolean indicating whether the sender has the permissions to perform the action.        Always returns false if the app hasn't been initialized yet."
      },
      "deposit(uint256)": {
        "details": "Only up to 2^192 - 1 tokens are ever allowed to be deposited, due to the underlying     storage format.",
        "params": {
          "_amount": "Amount to wrap"
        }
      },
      "forward(bytes)": {
        "details": "IForwarder interface conformance. Forwards any token holder action.",
        "params": {
          "_evmScript": "Script being executed"
        }
      },
      "getInitializationBlock()": {
        "return": "Block number in which the contract was initialized"
      },
      "getRecoveryVault()": {
        "details": "Get the recovery vault for the app",
        "return": "Recovery vault address for the app"
      },
      "hasInitialized()": {
        "return": "Whether the contract has been initialized by the time of the current block"
      },
      "initialize(address,string,string)": {
        "params": {
          "_depositedToken": "The ERC20 token to be wrapped",
          "_name": "The wrapped token's name",
          "_symbol": "The wrapped token's symbol"
        }
      },
      "isForwarder()": {
        "details": "IForwarder interface conformance",
        "return": "Always true"
      },
      "transferToVault(address)": {
        "params": {
          "_token": "Token balance to be sent to recovery vault."
        }
      },
      "withdraw(uint256)": {
        "params": {
          "_amount": "Amount to unwrap"
        }
      }
    },
    "title": "TokenWrapper"
  },
  "userdoc": {
    "methods": {
      "canForward(address,bytes)": {
        "notice": "Tells whether `_sender` can forward actions or not"
      },
      "deposit(uint256)": {
        "notice": "Wrap `@tokenAmount(self.depositedToken(): address, _amount)`"
      },
      "forward(bytes)": {
        "notice": "Execute desired action as a token holder"
      },
      "initialize(address,string,string)": {
        "notice": "Create a new \"wrapped\" checkpointed token that is convertible from a normal ERC20 token"
      },
      "isForwarder()": {
        "notice": "Tells whether the TokenWrapper app is a forwarder or not"
      },
      "transferToVault(address)": {
        "notice": "Send funds to recovery Vault. This contract should never receive funds,        but in case it does, this function allows one to recover them."
      },
      "withdraw(uint256)": {
        "notice": "Unwrap `@tokenAmount(self.depositedToken(): address, _amount)`"
      }
    }
  }
}