{
  "contractName": "TokenA",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Issue",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "addBalance",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "who",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "issue",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "who",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "issueTo",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "setBalance",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bool",
          "name": "_shouldRevertNameCall",
          "type": "bool"
        }
      ],
      "name": "setShouldRevertNameCall",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "shouldRevertNameCall",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Issue\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"addBalance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"issue\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"issueTo\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setBalance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_shouldRevertNameCall\",\"type\":\"bool\"}],\"name\":\"setShouldRevertNameCall\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"shouldRevertNameCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/testing/TokenA.sol\":\"TokenA\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/testing/TestToken.sol\":{\"keccak256\":\"0xfbf238308c7b72cfc85387bdcf3a88145ab193c82268bed81f6eeea470c8e1bb\",\"urls\":[\"bzz-raw://ee425eb5d26cf169e6fc1ec50c66a59596bb4af77c9b190e5d8b3a0abd26efa1\",\"dweb:/ipfs/QmRKFYpuX7Q3pJ3UuLMcAHJ8SF1Gegp7Q99r2wZo57hDrR\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/testing/TokenA.sol\":{\"keccak256\":\"0xe55a56e9a358431b822101588c7d1a79c75a4a82a0e477ccab05ab93aebb4fc3\",\"urls\":[\"bzz-raw://883eee07af4faa385ac5db590fd2e8a792b026926eae84edb986631034ef443d\",\"dweb:/ipfs/QmNbPGESjj4UmJSYqmG4yLTizq9a7v1HfLReQVLHwAvSXW\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50610e14806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063313ce56711610097578063b6169b9c11610066578063b6169b9c146101d3578063cc872b66146101e6578063dd62ed3e146101f9578063e30443bc1461020c576100f5565b8063313ce5671461019057806370a08231146101a557806395d89b41146101b8578063a9059cbb146101c0576100f5565b806318160ddd116100d357806318160ddd1461014d5780631e929ac31461016257806321e5383a1461016a57806323b872dd1461017d576100f5565b806306fdde03146100fa578063095ea7b3146101185780631207f0c114610138575b600080fd5b61010261021f565b60405161010f9190610c97565b60405180910390f35b61012b610126366004610a5b565b610256565b60405161010f9190610c89565b61014b610146366004610a5b565b6102ce565b005b610155610381565b60405161010f9190610cf8565b61012b610387565b61014b610178366004610a5b565b610390565b61012b61018b366004610a0e565b610487565b61019861068f565b60405161010f9190610d06565b6101556101b33660046109ae565b610694565b6101026106bc565b61012b6101ce366004610a5b565b6106f3565b61014b6101e1366004610a8b565b6107f7565b61014b6101f4366004610aa9565b610828565b6101556102073660046109d4565b610835565b61014b61021a366004610a5b565b61086d565b60408051808201909152600681527f5553442f2f430000000000000000000000000000000000000000000000000000602082015290565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906102bc908690610cf8565b60405180910390a35060015b92915050565b6000546102e1908263ffffffff6108c416565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054610319908263ffffffff6108c416565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600160205260409081902092909255905130907f4b2682685b046a3dae8e75ff49b82fa703e366056a43c6a791411011134f4f5d90610375908590610cf8565b60405180910390a35050565b60005490565b60035460ff1681565b600061039b83610694565b90508081830110156103e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990610ce8565b60405180910390fd5b6103f2818363ffffffff6108c416565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160205260408120919091555461042c908363ffffffff6108c416565b600090815560405173ffffffffffffffffffffffffffffffffffffffff851691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061047a908690610cf8565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260408120548211156104e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990610cd8565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054821115610550576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990610cc8565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054610586908363ffffffff6108c416565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602052604080822093909355908616815220546105c8908363ffffffff61090a16565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320939093556002815282822033835290522054610612908363ffffffff61090a16565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602090815260408083203384529091529081902093909355915190851691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061067d908690610cf8565b60405180910390a35060019392505050565b600690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b60408051808201909152600481527f5553444300000000000000000000000000000000000000000000000000000000602082015290565b3360009081526001602052604081205482111561073c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990610ca8565b3360009081526001602052604090205461075c908363ffffffff61090a16565b336000908152600160205260408082209290925573ffffffffffffffffffffffffffffffffffffffff85168152205461079b908363ffffffff6108c416565b73ffffffffffffffffffffffffffffffffffffffff84166000818152600160205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906102bc908690610cf8565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b61083233826102ce565b50565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260016020526040808220849055517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610375908590610cf8565b600082820183811015610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990610cb8565b9392505050565b600061090383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060008184841115610985576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d99190610c97565b505050900390565b80356102c881610dab565b80356102c881610dbf565b80356102c881610dc8565b6000602082840312156109c057600080fd5b60006109cc848461098d565b949350505050565b600080604083850312156109e757600080fd5b60006109f3858561098d565b9250506020610a048582860161098d565b9150509250929050565b600080600060608486031215610a2357600080fd5b6000610a2f868661098d565b9350506020610a408682870161098d565b9250506040610a51868287016109a3565b9150509250925092565b60008060408385031215610a6e57600080fd5b6000610a7a858561098d565b9250506020610a04858286016109a3565b600060208284031215610a9d57600080fd5b60006109cc8484610998565b600060208284031215610abb57600080fd5b60006109cc84846109a3565b610ad081610d2c565b82525050565b6000610ae182610d14565b610aeb8185610d18565b9350610afb818560208601610d53565b610b0481610d83565b9093019392505050565b6000610b1b601683610d18565b7f546f6b656e3a205472616e73666572206661696c656400000000000000000000815260200192915050565b6000610b54601b83610d18565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000610b8d602583610d18565b7f237472616e7366657246726f6d3a20494e53554646494349454e545f414c4c4f81527f57414e4345000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000610bec602383610d18565b7f237472616e7366657246726f6d3a20494e53554646494349454e545f42414c4181527f4e43450000000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000610c4b600d83610d18565b7f494e56414c49445f56414c554500000000000000000000000000000000000000815260200192915050565b610ad081610d4a565b610ad081610d4d565b602081016102c88284610ac7565b602080825281016109038184610ad6565b602080825281016102c881610b0e565b602080825281016102c881610b47565b602080825281016102c881610b80565b602080825281016102c881610bdf565b602080825281016102c881610c3e565b602081016102c88284610c77565b602081016102c88284610c80565b5190565b90815260200190565b60006102c882610d31565b151590565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b60ff1690565b60005b83811015610d6e578181015183820152602001610d56565b83811115610d7d576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b610db481610d21565b811461083257600080fd5b610db481610d2c565b610db481610d4a56fea365627a7a72315820d6d8bd6a2cf8673c770dded543a2ce257941d55e5b476c86e3335a3219e0efb56c6578706572696d656e74616cf564736f6c63430005100040",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c8063313ce56711610097578063b6169b9c11610066578063b6169b9c146101d3578063cc872b66146101e6578063dd62ed3e146101f9578063e30443bc1461020c576100f5565b8063313ce5671461019057806370a08231146101a557806395d89b41146101b8578063a9059cbb146101c0576100f5565b806318160ddd116100d357806318160ddd1461014d5780631e929ac31461016257806321e5383a1461016a57806323b872dd1461017d576100f5565b806306fdde03146100fa578063095ea7b3146101185780631207f0c114610138575b600080fd5b61010261021f565b60405161010f9190610c97565b60405180910390f35b61012b610126366004610a5b565b610256565b60405161010f9190610c89565b61014b610146366004610a5b565b6102ce565b005b610155610381565b60405161010f9190610cf8565b61012b610387565b61014b610178366004610a5b565b610390565b61012b61018b366004610a0e565b610487565b61019861068f565b60405161010f9190610d06565b6101556101b33660046109ae565b610694565b6101026106bc565b61012b6101ce366004610a5b565b6106f3565b61014b6101e1366004610a8b565b6107f7565b61014b6101f4366004610aa9565b610828565b6101556102073660046109d4565b610835565b61014b61021a366004610a5b565b61086d565b60408051808201909152600681527f5553442f2f430000000000000000000000000000000000000000000000000000602082015290565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906102bc908690610cf8565b60405180910390a35060015b92915050565b6000546102e1908263ffffffff6108c416565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054610319908263ffffffff6108c416565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600160205260409081902092909255905130907f4b2682685b046a3dae8e75ff49b82fa703e366056a43c6a791411011134f4f5d90610375908590610cf8565b60405180910390a35050565b60005490565b60035460ff1681565b600061039b83610694565b90508081830110156103e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990610ce8565b60405180910390fd5b6103f2818363ffffffff6108c416565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160205260408120919091555461042c908363ffffffff6108c416565b600090815560405173ffffffffffffffffffffffffffffffffffffffff851691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061047a908690610cf8565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260408120548211156104e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990610cd8565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054821115610550576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990610cc8565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054610586908363ffffffff6108c416565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602052604080822093909355908616815220546105c8908363ffffffff61090a16565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320939093556002815282822033835290522054610612908363ffffffff61090a16565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602090815260408083203384529091529081902093909355915190851691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061067d908690610cf8565b60405180910390a35060019392505050565b600690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b60408051808201909152600481527f5553444300000000000000000000000000000000000000000000000000000000602082015290565b3360009081526001602052604081205482111561073c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990610ca8565b3360009081526001602052604090205461075c908363ffffffff61090a16565b336000908152600160205260408082209290925573ffffffffffffffffffffffffffffffffffffffff85168152205461079b908363ffffffff6108c416565b73ffffffffffffffffffffffffffffffffffffffff84166000818152600160205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906102bc908690610cf8565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b61083233826102ce565b50565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260016020526040808220849055517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610375908590610cf8565b600082820183811015610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990610cb8565b9392505050565b600061090383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060008184841115610985576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d99190610c97565b505050900390565b80356102c881610dab565b80356102c881610dbf565b80356102c881610dc8565b6000602082840312156109c057600080fd5b60006109cc848461098d565b949350505050565b600080604083850312156109e757600080fd5b60006109f3858561098d565b9250506020610a048582860161098d565b9150509250929050565b600080600060608486031215610a2357600080fd5b6000610a2f868661098d565b9350506020610a408682870161098d565b9250506040610a51868287016109a3565b9150509250925092565b60008060408385031215610a6e57600080fd5b6000610a7a858561098d565b9250506020610a04858286016109a3565b600060208284031215610a9d57600080fd5b60006109cc8484610998565b600060208284031215610abb57600080fd5b60006109cc84846109a3565b610ad081610d2c565b82525050565b6000610ae182610d14565b610aeb8185610d18565b9350610afb818560208601610d53565b610b0481610d83565b9093019392505050565b6000610b1b601683610d18565b7f546f6b656e3a205472616e73666572206661696c656400000000000000000000815260200192915050565b6000610b54601b83610d18565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000610b8d602583610d18565b7f237472616e7366657246726f6d3a20494e53554646494349454e545f414c4c4f81527f57414e4345000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000610bec602383610d18565b7f237472616e7366657246726f6d3a20494e53554646494349454e545f42414c4181527f4e43450000000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000610c4b600d83610d18565b7f494e56414c49445f56414c554500000000000000000000000000000000000000815260200192915050565b610ad081610d4a565b610ad081610d4d565b602081016102c88284610ac7565b602080825281016109038184610ad6565b602080825281016102c881610b0e565b602080825281016102c881610b47565b602080825281016102c881610b80565b602080825281016102c881610bdf565b602080825281016102c881610c3e565b602081016102c88284610c77565b602081016102c88284610c80565b5190565b90815260200190565b60006102c882610d31565b151590565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b60ff1690565b60005b83811015610d6e578181015183820152602001610d56565b83811115610d7d576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b610db481610d21565b811461083257600080fd5b610db481610d2c565b610db481610d4a56fea365627a7a72315820d6d8bd6a2cf8673c770dded543a2ce257941d55e5b476c86e3335a3219e0efb56c6578706572696d656e74616cf564736f6c63430005100040",
  "sourceMap": "740:288:142:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;740:288:142;;;;;;;",
  "deployedSourceMap": "740:288:142:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;740:288:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;942:84;;;:::i;:::-;;;;;;;;;;;;;;;;3746:242:139;;;;;;;;;:::i;:::-;;;;;;;;1918:196;;;;;;;;;:::i;:::-;;2120:83;;;:::i;:::-;;;;;;;;1009:32;;;:::i;1550:362::-;;;;;;;;;:::i;3191:549::-;;;;;;;;;:::i;775:73:142:-;;;:::i;:::-;;;;;;;;2209:99:139;;;;;;;;;:::i;853:84:142:-;;;:::i;2811:374:139:-;;;;;;;;;:::i;1415:129::-;;;;;;;;;:::i;1164:82::-;;;;;;;;;:::i;2314:128::-;;;;;;;;;:::i;1252:157::-;;;;;;;;;:::i;942:84:142:-;1004:15;;;;;;;;;;;;;;;;;942:84;:::o;3746:242:139:-;3835:10;3811:4;3827:19;;;:7;:19;;;;;;;;;:28;;;;;;;;;;:36;;;3878:82;3811:4;;3827:28;;3878:82;;;;3858:5;;3878:82;;;;;;;;;;-1:-1:-1;3977:4:139;3746:242;;;;;:::o;1918:196::-;1990:6;;:18;;2001:6;1990:18;:10;:18;:::i;:::-;1981:6;:27;;;2034:13;;;;;:8;:13;;;;;;:25;;2052:6;2034:25;:17;:25;:::i;:::-;2018:13;;;;;;;:8;:13;;;;;;;:41;;;;2074:33;;2088:4;;2074:33;;;;2100:6;;2074:33;;;;;;;;;;1918:196;;:::o;2120:83::-;2164:7;2190:6;2120:83;:::o;1009:32::-;;;;;;:::o;1550:362::-;1650:19;1672:18;1682:7;1672:9;:18::i;:::-;1650:40;;1732:11;1717;1708:6;:20;:35;;1700:61;;;;;;;;;;;;;;;;;;;;;;1791:23;:11;1807:6;1791:23;:15;:23;:::i;:::-;1771:17;;;;;;;:8;:17;;;;;:43;;;;1833:6;:18;;1844:6;1833:18;:10;:18;:::i;:::-;1824:6;:27;;;1866:39;;;;;;1824:6;1866:39;;;;1898:6;;1866:39;;;;;;;;;;1550:362;;;:::o;3191:549::-;3294:14;;;3270:4;3294:14;;;:8;:14;;;;;;:23;-1:-1:-1;3294:23:139;3286:71;;;;;;;;;;;;;;3375:13;;;;;;;:7;:13;;;;;;;;3389:10;3375:25;;;;;;;;:34;-1:-1:-1;3375:34:139;3367:84;;;;;;;;;;;;;;3477:12;;;;;;;:8;:12;;;;;;:23;;3494:5;3477:23;:16;:23;:::i;:::-;3462:12;;;;;;;;:8;:12;;;;;;:38;;;;3527:14;;;;;;;:25;;3546:5;3527:25;:18;:25;:::i;:::-;3510:14;;;;;;;:8;:14;;;;;;;;:42;;;;3590:7;:13;;;;;3604:10;3590:25;;;;;;:36;;3620:5;3590:36;:29;:36;:::i;:::-;3562:13;;;;;;;;:7;:13;;;;;;;;3576:10;3562:25;;;;;;;;;:64;;;;3641:71;;;;;;3562:13;3641:71;;;;3697:5;;3641:71;;;;;;;;;;-1:-1:-1;3729:4:139;3191:549;;;;;:::o;775:73:142:-;840:1;775:73;:::o;2209:99:139:-;2288:13;;2262:7;2288:13;;;:8;:13;;;;;;;2209:99::o;853:84:142:-;917:13;;;;;;;;;;;;;;;;;853:84;:::o;2811:374:139:-;2905:10;2872:4;2896:20;;;:8;:20;;;;;;:29;-1:-1:-1;2896:29:139;2888:64;;;;;;;;;;;;;;2995:10;2986:20;;;;:8;:20;;;;;;:31;;3011:5;2986:31;:24;:31;:::i;:::-;2972:10;2963:20;;;;:8;:20;;;;;;:54;;;;:20;3042:12;;;;;;:23;;3059:5;3042:23;:16;:23;:::i;:::-;3027:12;;;;;;;:8;:12;;;;;;;:38;;;;3080:77;;3102:10;;3080:77;;;;3142:5;;3080:77;;1415:129;1493:20;:44;;;;;;;;;;;;;1415:129::o;1164:82::-;1212:27;1220:10;1232:6;1212:7;:27::i;:::-;1164:82;:::o;2314:128::-;2412:14;;;;2386:7;2412:14;;;:7;:14;;;;;;;;:23;;;;;;;;;;;;;2314:128::o;1252:157::-;1322:17;;;;;;;:8;:17;;;;;;:26;;;1363:39;;;;;1342:6;;1363:39;;834:176:150;892:7;923:5;;;946:6;;;;938:46;;;;;;;;;;;;;;1002:1;834:176;-1:-1:-1;;;834:176:150:o;1274:134::-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;1818:7;1853:12;1845:6;;;;1837:29;;;;;;;;;;;;;;;-1:-1:-1;;;1888:5:150;;;1732:187::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:124;206:20;;231:30;206:20;231:30;;273:130;340:20;;365:33;340:20;365:33;;410:241;;514:2;502:9;493:7;489:23;485:32;482:2;;;530:1;527;520:12;482:2;565:1;582:53;627:7;607:9;582:53;;;572:63;476:175;-1:-1;;;;476:175;658:366;;;779:2;767:9;758:7;754:23;750:32;747:2;;;795:1;792;785:12;747:2;830:1;847:53;892:7;872:9;847:53;;;837:63;;809:97;937:2;955:53;1000:7;991:6;980:9;976:22;955:53;;;945:63;;916:98;741:283;;;;;;1031:491;;;;1169:2;1157:9;1148:7;1144:23;1140:32;1137:2;;;1185:1;1182;1175:12;1137:2;1220:1;1237:53;1282:7;1262:9;1237:53;;;1227:63;;1199:97;1327:2;1345:53;1390:7;1381:6;1370:9;1366:22;1345:53;;;1335:63;;1306:98;1435:2;1453:53;1498:7;1489:6;1478:9;1474:22;1453:53;;;1443:63;;1414:98;1131:391;;;;;;1529:366;;;1650:2;1638:9;1629:7;1625:23;1621:32;1618:2;;;1666:1;1663;1656:12;1618:2;1701:1;1718:53;1763:7;1743:9;1718:53;;;1708:63;;1680:97;1808:2;1826:53;1871:7;1862:6;1851:9;1847:22;1826:53;;1902:235;;2003:2;1991:9;1982:7;1978:23;1974:32;1971:2;;;2019:1;2016;2009:12;1971:2;2054:1;2071:50;2113:7;2093:9;2071:50;;2144:241;;2248:2;2236:9;2227:7;2223:23;2219:32;2216:2;;;2264:1;2261;2254:12;2216:2;2299:1;2316:53;2361:7;2341:9;2316:53;;2392:104;2469:21;2484:5;2469:21;;;2464:3;2457:34;2451:45;;;2503:347;;2615:39;2648:5;2615:39;;;2666:71;2730:6;2725:3;2666:71;;;2659:78;;2742:52;2787:6;2782:3;2775:4;2768:5;2764:16;2742:52;;;2815:29;2837:6;2815:29;;;2806:39;;;;2595:255;-1:-1;;;2595:255;2858:322;;3018:67;3082:2;3077:3;3018:67;;;3118:24;3098:45;;3171:2;3162:12;;3004:176;-1:-1;;3004:176;3189:327;;3349:67;3413:2;3408:3;3349:67;;;3449:29;3429:50;;3507:2;3498:12;;3335:181;-1:-1;;3335:181;3525:374;;3685:67;3749:2;3744:3;3685:67;;;3785:34;3765:55;;3854:7;3849:2;3840:12;;3833:29;3890:2;3881:12;;3671:228;-1:-1;;3671:228;3908:372;;4068:67;4132:2;4127:3;4068:67;;;4168:34;4148:55;;4237:5;4232:2;4223:12;;4216:27;4271:2;4262:12;;4054:226;-1:-1;;4054:226;4289:313;;4449:67;4513:2;4508:3;4449:67;;;4549:15;4529:36;;4593:2;4584:12;;4435:167;-1:-1;;4435:167;4610:113;4693:24;4711:5;4693:24;;4730:107;4809:22;4825:5;4809:22;;4844:201;4956:2;4941:18;;4970:65;4945:9;5008:6;4970:65;;5052:301;5190:2;5204:47;;;5175:18;;5265:78;5175:18;5329:6;5265:78;;5360:407;5551:2;5565:47;;;5536:18;;5626:131;5536:18;5626:131;;5774:407;5965:2;5979:47;;;5950:18;;6040:131;5950:18;6040:131;;6188:407;6379:2;6393:47;;;6364:18;;6454:131;6364:18;6454:131;;6602:407;6793:2;6807:47;;;6778:18;;6868:131;6778:18;6868:131;;7016:407;7207:2;7221:47;;;7192:18;;7282:131;7192:18;7282:131;;7430:213;7548:2;7533:18;;7562:71;7537:9;7606:6;7562:71;;7650:205;7764:2;7749:18;;7778:67;7753:9;7818:6;7778:67;;7862:122;7950:12;;7921:63;7992:163;8095:19;;;8144:4;8135:14;;8088:67;8163:91;;8225:24;8243:5;8225:24;;8261:85;8327:13;8320:21;;8303:43;8353:121;8426:42;8415:54;;8398:76;8481:72;8543:5;8526:27;8560:81;8631:4;8620:16;;8603:38;8649:268;8714:1;8721:101;8735:6;8732:1;8729:13;8721:101;;;8802:11;;;8796:18;8783:11;;;8776:39;8757:2;8750:10;8721:101;;;8837:6;8834:1;8831:13;8828:2;;;8902:1;8893:6;8888:3;8884:16;8877:27;8828:2;8698:219;;;;;8925:97;9013:2;8993:14;9009:7;8989:28;;8973:49;9030:117;9099:24;9117:5;9099:24;;;9092:5;9089:35;9079:2;;9138:1;9135;9128:12;9154:111;9220:21;9235:5;9220:21;;9272:117;9341:24;9359:5;9341:24;",
  "source": "/*\n\n    Copyright 2019 dYdX Trading Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n*/\n\npragma solidity ^0.5.7;\npragma experimental ABIEncoderV2;\n\nimport { TestToken } from \"./TestToken.sol\";\n\n\n/* solium-disable-next-line */\ncontract TokenA is TestToken {\n    function decimals() public view returns (uint8) {\n        return 6;\n    }\n    function symbol() public view returns (string memory) {\n        return \"USDC\";\n    }\n    function name() public view returns (string memory) {\n        return \"USD//C\";\n    }\n}\n",
  "sourcePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/testing/TokenA.sol",
  "ast": {
    "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/testing/TokenA.sol",
    "exportedSymbols": {
      "TokenA": [
        36922
      ]
    },
    "id": 36923,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 36892,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".7"
        ],
        "nodeType": "PragmaDirective",
        "src": "603:23:142"
      },
      {
        "id": 36893,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "627:33:142"
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/testing/TestToken.sol",
        "file": "./TestToken.sol",
        "id": 36895,
        "nodeType": "ImportDirective",
        "scope": 36923,
        "sourceUnit": 36717,
        "src": "662:44:142",
        "symbolAliases": [
          {
            "foreign": 36894,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 36896,
              "name": "TestToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 36716,
              "src": "759:9:142",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TestToken_$36716",
                "typeString": "contract TestToken"
              }
            },
            "id": 36897,
            "nodeType": "InheritanceSpecifier",
            "src": "759:9:142"
          }
        ],
        "contractDependencies": [
          24715,
          36716,
          37552
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 36922,
        "linearizedBaseContracts": [
          36922,
          36716,
          24715,
          37552
        ],
        "name": "TokenA",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 36904,
              "nodeType": "Block",
              "src": "823:25:142",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "36",
                    "id": 36902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "840:1:142",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_6_by_1",
                      "typeString": "int_const 6"
                    },
                    "value": "6"
                  },
                  "functionReturnParameters": 36901,
                  "id": 36903,
                  "nodeType": "Return",
                  "src": "833:8:142"
                }
              ]
            },
            "documentation": null,
            "id": 36905,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decimals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 36898,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "792:2:142"
            },
            "returnParameters": {
              "id": 36901,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 36900,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 36905,
                  "src": "816:5:142",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 36899,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "816:5:142",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "815:7:142"
            },
            "scope": 36922,
            "src": "775:73:142",
            "stateMutability": "view",
            "superFunction": 36554,
            "visibility": "public"
          },
          {
            "body": {
              "id": 36912,
              "nodeType": "Block",
              "src": "907:30:142",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "55534443",
                    "id": 36910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "924:6:142",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_d6aca1be9729c13d677335161321649cccae6a591554772516700f986f942eaa",
                      "typeString": "literal_string \"USDC\""
                    },
                    "value": "USDC"
                  },
                  "functionReturnParameters": 36909,
                  "id": 36911,
                  "nodeType": "Return",
                  "src": "917:13:142"
                }
              ]
            },
            "documentation": null,
            "id": 36913,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 36906,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "868:2:142"
            },
            "returnParameters": {
              "id": 36909,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 36908,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 36913,
                  "src": "892:13:142",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 36907,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "892:6:142",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "891:15:142"
            },
            "scope": 36922,
            "src": "853:84:142",
            "stateMutability": "view",
            "superFunction": 36531,
            "visibility": "public"
          },
          {
            "body": {
              "id": 36920,
              "nodeType": "Block",
              "src": "994:32:142",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "5553442f2f43",
                    "id": 36918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1011:8:142",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_fdd3920a4ee0f7f4e23f41409654c5341adee3704366408e8ded8a8a295265f2",
                      "typeString": "literal_string \"USD//C\""
                    },
                    "value": "USD//C"
                  },
                  "functionReturnParameters": 36917,
                  "id": 36919,
                  "nodeType": "Return",
                  "src": "1004:15:142"
                }
              ]
            },
            "documentation": null,
            "id": 36921,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 36914,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "955:2:142"
            },
            "returnParameters": {
              "id": 36917,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 36916,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 36921,
                  "src": "979:13:142",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 36915,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "979:6:142",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "978:15:142"
            },
            "scope": 36922,
            "src": "942:84:142",
            "stateMutability": "view",
            "superFunction": 36546,
            "visibility": "public"
          }
        ],
        "scope": 36923,
        "src": "740:288:142"
      }
    ],
    "src": "603:426:142"
  },
  "legacyAST": {
    "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/testing/TokenA.sol",
    "exportedSymbols": {
      "TokenA": [
        36922
      ]
    },
    "id": 36923,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 36892,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".7"
        ],
        "nodeType": "PragmaDirective",
        "src": "603:23:142"
      },
      {
        "id": 36893,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "627:33:142"
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/testing/TestToken.sol",
        "file": "./TestToken.sol",
        "id": 36895,
        "nodeType": "ImportDirective",
        "scope": 36923,
        "sourceUnit": 36717,
        "src": "662:44:142",
        "symbolAliases": [
          {
            "foreign": 36894,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 36896,
              "name": "TestToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 36716,
              "src": "759:9:142",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TestToken_$36716",
                "typeString": "contract TestToken"
              }
            },
            "id": 36897,
            "nodeType": "InheritanceSpecifier",
            "src": "759:9:142"
          }
        ],
        "contractDependencies": [
          24715,
          36716,
          37552
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 36922,
        "linearizedBaseContracts": [
          36922,
          36716,
          24715,
          37552
        ],
        "name": "TokenA",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 36904,
              "nodeType": "Block",
              "src": "823:25:142",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "36",
                    "id": 36902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "840:1:142",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_6_by_1",
                      "typeString": "int_const 6"
                    },
                    "value": "6"
                  },
                  "functionReturnParameters": 36901,
                  "id": 36903,
                  "nodeType": "Return",
                  "src": "833:8:142"
                }
              ]
            },
            "documentation": null,
            "id": 36905,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decimals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 36898,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "792:2:142"
            },
            "returnParameters": {
              "id": 36901,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 36900,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 36905,
                  "src": "816:5:142",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 36899,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "816:5:142",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "815:7:142"
            },
            "scope": 36922,
            "src": "775:73:142",
            "stateMutability": "view",
            "superFunction": 36554,
            "visibility": "public"
          },
          {
            "body": {
              "id": 36912,
              "nodeType": "Block",
              "src": "907:30:142",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "55534443",
                    "id": 36910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "924:6:142",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_d6aca1be9729c13d677335161321649cccae6a591554772516700f986f942eaa",
                      "typeString": "literal_string \"USDC\""
                    },
                    "value": "USDC"
                  },
                  "functionReturnParameters": 36909,
                  "id": 36911,
                  "nodeType": "Return",
                  "src": "917:13:142"
                }
              ]
            },
            "documentation": null,
            "id": 36913,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 36906,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "868:2:142"
            },
            "returnParameters": {
              "id": 36909,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 36908,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 36913,
                  "src": "892:13:142",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 36907,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "892:6:142",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "891:15:142"
            },
            "scope": 36922,
            "src": "853:84:142",
            "stateMutability": "view",
            "superFunction": 36531,
            "visibility": "public"
          },
          {
            "body": {
              "id": 36920,
              "nodeType": "Block",
              "src": "994:32:142",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "5553442f2f43",
                    "id": 36918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1011:8:142",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_fdd3920a4ee0f7f4e23f41409654c5341adee3704366408e8ded8a8a295265f2",
                      "typeString": "literal_string \"USD//C\""
                    },
                    "value": "USD//C"
                  },
                  "functionReturnParameters": 36917,
                  "id": 36919,
                  "nodeType": "Return",
                  "src": "1004:15:142"
                }
              ]
            },
            "documentation": null,
            "id": 36921,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 36914,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "955:2:142"
            },
            "returnParameters": {
              "id": 36917,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 36916,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 36921,
                  "src": "979:13:142",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 36915,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "979:6:142",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "978:15:142"
            },
            "scope": 36922,
            "src": "942:84:142",
            "stateMutability": "view",
            "superFunction": 36546,
            "visibility": "public"
          }
        ],
        "scope": 36923,
        "src": "740:288:142"
      }
    ],
    "src": "603:426:142"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.23",
  "updatedAt": "2026-03-02T16:38:29.133Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}