{
  "contractName": "MiniMeTokenERC20",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "creationBlock",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_from",
          "type": "address"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "name": "success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newController",
          "type": "address"
        }
      ],
      "name": "changeController",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "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": "version",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_cloneTokenName",
          "type": "string"
        },
        {
          "name": "_cloneDecimalUnits",
          "type": "uint8"
        },
        {
          "name": "_cloneTokenSymbol",
          "type": "string"
        },
        {
          "name": "_snapshotBlock",
          "type": "uint256"
        },
        {
          "name": "_transfersEnabled",
          "type": "bool"
        }
      ],
      "name": "createCloneToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "name": "balance",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "parentToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_owner",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "generateTokens",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "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": "_to",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "name": "success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "transfersEnabled",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "parentSnapShotBlock",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_spender",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "approveAndCall",
      "outputs": [
        {
          "name": "success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_owner",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "destroyTokens",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_owner",
          "type": "address"
        },
        {
          "name": "_spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "name": "remaining",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "claimTokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tokenFactory",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_transfersEnabled",
          "type": "bool"
        }
      ],
      "name": "enableTransfers",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "controller",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_tokenFactory",
          "type": "address"
        },
        {
          "name": "_parentToken",
          "type": "address"
        },
        {
          "name": "_parentSnapShotBlock",
          "type": "uint256"
        },
        {
          "name": "_tokenName",
          "type": "string"
        },
        {
          "name": "_decimalUnits",
          "type": "uint8"
        },
        {
          "name": "_tokenSymbol",
          "type": "string"
        },
        {
          "name": "_transfersEnabled",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_controller",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "ClaimedTokens",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_cloneToken",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_snapshotBlock",
          "type": "uint256"
        }
      ],
      "name": "NewCloneToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_spender",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_spender",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "name": "success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c0604052600760808190527f4d4d545f302e320000000000000000000000000000000000000000000000000060a09081526200004091600491906200015e565b503480156200004e57600080fd5b5060405162001bbc38038062001bbc8339810160409081528151602080840151928401516060850151608086015160a087015160c088015160008054600160a060020a03191633179055600b8054600160a060020a0389166101000261010060a860020a0319909116179055928801805196989496909592949190910192918891889188918891889188918891620000ed91600191908701906200015e565b506002805460ff191660ff85161790558151620001129060039060208501906200015e565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff19169115159190911790555050436007555062000203945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a157805160ff1916838001178555620001d1565b82800160010185558215620001d1579182015b82811115620001d1578251825591602001919060010190620001b4565b50620001df929150620001e3565b5090565b6200020091905b80821115620001df5760008155600101620001ea565b90565b6119a980620002136000396000f30060806040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101ef578063095ea7b31461027957806317634514146102b157806318160ddd146102d857806323b872dd146102ed578063313ce567146103175780633cebb823146103425780634ee2cd7e1461036357806354fd4d50146103875780636638c0871461039c57806370a082311461045f57806380a5400114610480578063827f32c01461049557806395d89b41146104b9578063981b24d0146104ce578063a9059cbb146104e6578063bef97c871461050a578063c5bcc4f11461051f578063cae9ca5114610534578063d3ce77fe1461059d578063dd62ed3e146105c1578063df8de3e7146105e8578063e77772fe14610609578063f41e60c51461061e578063f77c479114610638575b60005461014490600160a060020a031661064d565b151561014f57600080fd5b600054604080517ff48c30540000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163f48c3054913491602480830192602092919082900301818588803b1580156101b557600080fd5b505af11580156101c9573d6000803e3d6000fd5b50505050506040513d60208110156101e057600080fd5b505115156101ed57600080fd5b005b3480156101fb57600080fd5b5061020461067a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023e578181015183820152602001610226565b50505050905090810190601f16801561026b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028557600080fd5b5061029d600160a060020a0360043516602435610707565b604080519115158252519081900360200190f35b3480156102bd57600080fd5b506102c6610936565b60408051918252519081900360200190f35b3480156102e457600080fd5b506102c661093c565b3480156102f957600080fd5b5061029d600160a060020a036004358116906024351660443561094d565b34801561032357600080fd5b5061032c6109e4565b6040805160ff9092168252519081900360200190f35b34801561034e57600080fd5b506101ed600160a060020a03600435166109ed565b34801561036f57600080fd5b506102c6600160a060020a0360043516602435610a33565b34801561039357600080fd5b50610204610b80565b3480156103a857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261044394369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b60ff8b35169b909a909994019750919550918201935091508190840183828082843750949750508435955050505050602001351515610bdb565b60408051600160a060020a039092168252519081900360200190f35b34801561046b57600080fd5b506102c6600160a060020a0360043516610e35565b34801561048c57600080fd5b50610443610e49565b3480156104a157600080fd5b5061029d600160a060020a0360043516602435610e58565b3480156104c557600080fd5b50610204610f24565b3480156104da57600080fd5b506102c6600435610f7f565b3480156104f257600080fd5b5061029d600160a060020a0360043516602435611073565b34801561051657600080fd5b5061029d611092565b34801561052b57600080fd5b506102c661109b565b34801561054057600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261029d948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506110a19650505050505050565b3480156105a957600080fd5b5061029d600160a060020a03600435166024356111bc565b3480156105cd57600080fd5b506102c6600160a060020a0360043581169060243516611284565b3480156105f457600080fd5b506101ed600160a060020a03600435166112af565b34801561061557600080fd5b50610443611496565b34801561062a57600080fd5b506101ed60043515156114aa565b34801561064457600080fd5b506104436114d4565b600080600160a060020a03831615156106695760009150610674565b823b90506000811191505b50919050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106ff5780601f106106d4576101008083540402835291602001916106ff565b820191906000526020600020905b8154815290600101906020018083116106e257829003601f168201915b505050505081565b600b5460009060ff16151561077d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5472616e736665727320617265206e6f7420656e61626c65642e000000000000604482015290519081900360640190fd5b60005461079290600160a060020a031661064d565b156108ce5760008054604080517fda682aeb000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a038781166024830152604482018790529151919092169263da682aeb92606480820193602093909283900390910190829087803b15801561080f57600080fd5b505af1158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b505115156108ce57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f546f6b656e20636f6e74726f6c6c657220646f6573206e6f7420617070726f7660448201527f652e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b336000818152600960209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60075481565b600061094743610f7f565b90505b90565b60008054600160a060020a031633146109cf57600b5460ff16151561097157600080fd5b600160a060020a03841660009081526009602090815260408083203384529091529020548211156109a4575060006109dd565b600160a060020a03841660009081526009602090815260408083203384529091529020805483900390555b6109da8484846114e3565b90505b9392505050565b60025460ff1681565b600054600160a060020a03163314610a0457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a0382166000908152600860205260408120541580610a8f5750600160a060020a038316600090815260086020526040812080548492908110610a7857fe5b6000918252602090912001546001608060020a0316115b15610b5757600554600160a060020a031615610b4f57600554600654600160a060020a0390911690634ee2cd7e908590610aca9086906116d5565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610b1c57600080fd5b505af1158015610b30573d6000803e3d6000fd5b505050506040513d6020811015610b4657600080fd5b50519050610930565b506000610930565b600160a060020a0383166000908152600860205260409020610b7990836116eb565b9050610930565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106ff5780601f106106d4576101008083540402835291602001916106ff565b600080831515610be9574393505b600b546040517f5b7b72c100000000000000000000000000000000000000000000000000000000815230600482018181526024830188905260ff8a16606484015286151560a484015260c0604484019081528b5160c48501528b51610100909504600160a060020a031694635b7b72c1948a938e938e938e938d939291608482019160e40190602089019080838360005b83811015610c92578181015183820152602001610c7a565b50505050905090810190601f168015610cbf5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610cf2578181015183820152602001610cda565b50505050905090810190601f168015610d1f5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015610d4457600080fd5b505af1158015610d58573d6000803e3d6000fd5b505050506040513d6020811015610d6e57600080fd5b5051604080517f3cebb8230000000000000000000000000000000000000000000000000000000081523360048201529051919250600160a060020a03831691633cebb8239160248082019260009290919082900301818387803b158015610dd457600080fd5b505af1158015610de8573d6000803e3d6000fd5b5050604080518781529051600160a060020a03851693507f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade92509081900360200190a29695505050505050565b6000610e418243610a33565b90505b919050565b600554600160a060020a031681565b6000805481908190600160a060020a03163314610e7457600080fd5b610e7c61093c565b9150838201821115610e8d57600080fd5b610e9685610e35565b9050838101811115610ea757600080fd5b610eb4600a85840161184a565b600160a060020a0385166000908152600860205260409020610ed89082860161184a565b604080518581529051600160a060020a038716916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106ff5780601f106106d4576101008083540402835291602001916106ff565b600a546000901580610fb4575081600a6000815481101515610f9d57fe5b6000918252602090912001546001608060020a0316115b1561106157600554600160a060020a03161561105957600554600654600160a060020a039091169063981b24d090610fed9085906116d5565b6040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561102657600080fd5b505af115801561103a573d6000803e3d6000fd5b505050506040513d602081101561105057600080fd5b50519050610e44565b506000610e44565b61106c600a836116eb565b9050610e44565b600b5460009060ff16151561108757600080fd5b6109dd3384846114e3565b600b5460ff1681565b60065481565b60006110ad8484610707565b15156110b857600080fd5b6040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018690523060448401819052608060648501908152865160848601528651600160a060020a038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b8381101561114b578181015183820152602001611133565b50505050905090810190601f1680156111785780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561119a57600080fd5b505af11580156111ae573d6000803e3d6000fd5b506001979650505050505050565b6000805481908190600160a060020a031633146111d857600080fd5b6111e061093c565b9150838210156111ef57600080fd5b6111f885610e35565b90508381101561120757600080fd5b611214600a85840361184a565b600160a060020a03851660009081526008602052604090206112389085830361184a565b604080518581529051600091600160a060020a038816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b600080548190600160a060020a031633146112c957600080fd5b600160a060020a038316151561131a5760008054604051600160a060020a0390911691303180156108fc02929091818181858888f19350505050158015611314573d6000803e3d6000fd5b50611491565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561137e57600080fd5b505af1158015611392573d6000803e3d6000fd5b505050506040513d60208110156113a857600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b15801561141e57600080fd5b505af1158015611432573d6000803e3d6000fd5b505050506040513d602081101561144857600080fd5b5050600054604080518381529051600160a060020a03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a35b505050565b600b546101009004600160a060020a031681565b600054600160a060020a031633146114c157600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156114f757600192506116cc565b600654431161150557600080fd5b600160a060020a038516158015906115265750600160a060020a0385163014155b151561153157600080fd5b61153b8643610a33565b91508382101561154e57600092506116cc565b60005461156390600160a060020a031661064d565b156116195760008054604080517f4a393149000000000000000000000000000000000000000000000000000000008152600160a060020a038a8116600483015289811660248301526044820189905291519190921692634a39314992606480820193602093909283900390910190829087803b1580156115e257600080fd5b505af11580156115f6573d6000803e3d6000fd5b505050506040513d602081101561160c57600080fd5b5051151561161957600080fd5b600160a060020a038616600090815260086020526040902061163d9085840361184a565b6116478543610a33565b905083810181111561165857600080fd5b600160a060020a038516600090815260086020526040902061167c9082860161184a565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3600192505b50509392505050565b60008183106116e457816109dd565b5090919050565b6000806000808580549050600014156117075760009350611841565b85548690600019810190811061171957fe5b6000918252602090912001546001608060020a031685106117765785548690600019810190811061174657fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a03169350611841565b85600081548110151561178557fe5b6000918252602090912001546001608060020a03168510156117aa5760009350611841565b8554600093506000190191505b828211156118075760026001838501010490508486828154811015156117d957fe5b6000918252602090912001546001608060020a0316116117fb57809250611802565b6001810391505b6117b7565b858381548110151561181557fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b8154600090819015806118835750835443908590600019810190811061186c57fe5b6000918252602090912001546001608060020a0316105b156118f557835484906118998260018301611940565b815481106118a357fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff199093169290921716178155915061193a565b83548490600019810190811061190757fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b8154818355818111156114915760008381526020902061149191810190830161094a91905b808211156119795760008155600101611965565b50905600a165627a7a72305820bbbb318b5679d9c1eb70def664986613879446dc2e72544bb36c9a89c6b496800029",
  "deployedBytecode": "0x60806040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101ef578063095ea7b31461027957806317634514146102b157806318160ddd146102d857806323b872dd146102ed578063313ce567146103175780633cebb823146103425780634ee2cd7e1461036357806354fd4d50146103875780636638c0871461039c57806370a082311461045f57806380a5400114610480578063827f32c01461049557806395d89b41146104b9578063981b24d0146104ce578063a9059cbb146104e6578063bef97c871461050a578063c5bcc4f11461051f578063cae9ca5114610534578063d3ce77fe1461059d578063dd62ed3e146105c1578063df8de3e7146105e8578063e77772fe14610609578063f41e60c51461061e578063f77c479114610638575b60005461014490600160a060020a031661064d565b151561014f57600080fd5b600054604080517ff48c30540000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163f48c3054913491602480830192602092919082900301818588803b1580156101b557600080fd5b505af11580156101c9573d6000803e3d6000fd5b50505050506040513d60208110156101e057600080fd5b505115156101ed57600080fd5b005b3480156101fb57600080fd5b5061020461067a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023e578181015183820152602001610226565b50505050905090810190601f16801561026b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028557600080fd5b5061029d600160a060020a0360043516602435610707565b604080519115158252519081900360200190f35b3480156102bd57600080fd5b506102c6610936565b60408051918252519081900360200190f35b3480156102e457600080fd5b506102c661093c565b3480156102f957600080fd5b5061029d600160a060020a036004358116906024351660443561094d565b34801561032357600080fd5b5061032c6109e4565b6040805160ff9092168252519081900360200190f35b34801561034e57600080fd5b506101ed600160a060020a03600435166109ed565b34801561036f57600080fd5b506102c6600160a060020a0360043516602435610a33565b34801561039357600080fd5b50610204610b80565b3480156103a857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261044394369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b60ff8b35169b909a909994019750919550918201935091508190840183828082843750949750508435955050505050602001351515610bdb565b60408051600160a060020a039092168252519081900360200190f35b34801561046b57600080fd5b506102c6600160a060020a0360043516610e35565b34801561048c57600080fd5b50610443610e49565b3480156104a157600080fd5b5061029d600160a060020a0360043516602435610e58565b3480156104c557600080fd5b50610204610f24565b3480156104da57600080fd5b506102c6600435610f7f565b3480156104f257600080fd5b5061029d600160a060020a0360043516602435611073565b34801561051657600080fd5b5061029d611092565b34801561052b57600080fd5b506102c661109b565b34801561054057600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261029d948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506110a19650505050505050565b3480156105a957600080fd5b5061029d600160a060020a03600435166024356111bc565b3480156105cd57600080fd5b506102c6600160a060020a0360043581169060243516611284565b3480156105f457600080fd5b506101ed600160a060020a03600435166112af565b34801561061557600080fd5b50610443611496565b34801561062a57600080fd5b506101ed60043515156114aa565b34801561064457600080fd5b506104436114d4565b600080600160a060020a03831615156106695760009150610674565b823b90506000811191505b50919050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106ff5780601f106106d4576101008083540402835291602001916106ff565b820191906000526020600020905b8154815290600101906020018083116106e257829003601f168201915b505050505081565b600b5460009060ff16151561077d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5472616e736665727320617265206e6f7420656e61626c65642e000000000000604482015290519081900360640190fd5b60005461079290600160a060020a031661064d565b156108ce5760008054604080517fda682aeb000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a038781166024830152604482018790529151919092169263da682aeb92606480820193602093909283900390910190829087803b15801561080f57600080fd5b505af1158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b505115156108ce57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f546f6b656e20636f6e74726f6c6c657220646f6573206e6f7420617070726f7660448201527f652e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b336000818152600960209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60075481565b600061094743610f7f565b90505b90565b60008054600160a060020a031633146109cf57600b5460ff16151561097157600080fd5b600160a060020a03841660009081526009602090815260408083203384529091529020548211156109a4575060006109dd565b600160a060020a03841660009081526009602090815260408083203384529091529020805483900390555b6109da8484846114e3565b90505b9392505050565b60025460ff1681565b600054600160a060020a03163314610a0457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a0382166000908152600860205260408120541580610a8f5750600160a060020a038316600090815260086020526040812080548492908110610a7857fe5b6000918252602090912001546001608060020a0316115b15610b5757600554600160a060020a031615610b4f57600554600654600160a060020a0390911690634ee2cd7e908590610aca9086906116d5565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610b1c57600080fd5b505af1158015610b30573d6000803e3d6000fd5b505050506040513d6020811015610b4657600080fd5b50519050610930565b506000610930565b600160a060020a0383166000908152600860205260409020610b7990836116eb565b9050610930565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106ff5780601f106106d4576101008083540402835291602001916106ff565b600080831515610be9574393505b600b546040517f5b7b72c100000000000000000000000000000000000000000000000000000000815230600482018181526024830188905260ff8a16606484015286151560a484015260c0604484019081528b5160c48501528b51610100909504600160a060020a031694635b7b72c1948a938e938e938e938d939291608482019160e40190602089019080838360005b83811015610c92578181015183820152602001610c7a565b50505050905090810190601f168015610cbf5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610cf2578181015183820152602001610cda565b50505050905090810190601f168015610d1f5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015610d4457600080fd5b505af1158015610d58573d6000803e3d6000fd5b505050506040513d6020811015610d6e57600080fd5b5051604080517f3cebb8230000000000000000000000000000000000000000000000000000000081523360048201529051919250600160a060020a03831691633cebb8239160248082019260009290919082900301818387803b158015610dd457600080fd5b505af1158015610de8573d6000803e3d6000fd5b5050604080518781529051600160a060020a03851693507f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade92509081900360200190a29695505050505050565b6000610e418243610a33565b90505b919050565b600554600160a060020a031681565b6000805481908190600160a060020a03163314610e7457600080fd5b610e7c61093c565b9150838201821115610e8d57600080fd5b610e9685610e35565b9050838101811115610ea757600080fd5b610eb4600a85840161184a565b600160a060020a0385166000908152600860205260409020610ed89082860161184a565b604080518581529051600160a060020a038716916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106ff5780601f106106d4576101008083540402835291602001916106ff565b600a546000901580610fb4575081600a6000815481101515610f9d57fe5b6000918252602090912001546001608060020a0316115b1561106157600554600160a060020a03161561105957600554600654600160a060020a039091169063981b24d090610fed9085906116d5565b6040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561102657600080fd5b505af115801561103a573d6000803e3d6000fd5b505050506040513d602081101561105057600080fd5b50519050610e44565b506000610e44565b61106c600a836116eb565b9050610e44565b600b5460009060ff16151561108757600080fd5b6109dd3384846114e3565b600b5460ff1681565b60065481565b60006110ad8484610707565b15156110b857600080fd5b6040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018690523060448401819052608060648501908152865160848601528651600160a060020a038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b8381101561114b578181015183820152602001611133565b50505050905090810190601f1680156111785780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561119a57600080fd5b505af11580156111ae573d6000803e3d6000fd5b506001979650505050505050565b6000805481908190600160a060020a031633146111d857600080fd5b6111e061093c565b9150838210156111ef57600080fd5b6111f885610e35565b90508381101561120757600080fd5b611214600a85840361184a565b600160a060020a03851660009081526008602052604090206112389085830361184a565b604080518581529051600091600160a060020a038816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b600080548190600160a060020a031633146112c957600080fd5b600160a060020a038316151561131a5760008054604051600160a060020a0390911691303180156108fc02929091818181858888f19350505050158015611314573d6000803e3d6000fd5b50611491565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561137e57600080fd5b505af1158015611392573d6000803e3d6000fd5b505050506040513d60208110156113a857600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b15801561141e57600080fd5b505af1158015611432573d6000803e3d6000fd5b505050506040513d602081101561144857600080fd5b5050600054604080518381529051600160a060020a03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a35b505050565b600b546101009004600160a060020a031681565b600054600160a060020a031633146114c157600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156114f757600192506116cc565b600654431161150557600080fd5b600160a060020a038516158015906115265750600160a060020a0385163014155b151561153157600080fd5b61153b8643610a33565b91508382101561154e57600092506116cc565b60005461156390600160a060020a031661064d565b156116195760008054604080517f4a393149000000000000000000000000000000000000000000000000000000008152600160a060020a038a8116600483015289811660248301526044820189905291519190921692634a39314992606480820193602093909283900390910190829087803b1580156115e257600080fd5b505af11580156115f6573d6000803e3d6000fd5b505050506040513d602081101561160c57600080fd5b5051151561161957600080fd5b600160a060020a038616600090815260086020526040902061163d9085840361184a565b6116478543610a33565b905083810181111561165857600080fd5b600160a060020a038516600090815260086020526040902061167c9082860161184a565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3600192505b50509392505050565b60008183106116e457816109dd565b5090919050565b6000806000808580549050600014156117075760009350611841565b85548690600019810190811061171957fe5b6000918252602090912001546001608060020a031685106117765785548690600019810190811061174657fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a03169350611841565b85600081548110151561178557fe5b6000918252602090912001546001608060020a03168510156117aa5760009350611841565b8554600093506000190191505b828211156118075760026001838501010490508486828154811015156117d957fe5b6000918252602090912001546001608060020a0316116117fb57809250611802565b6001810391505b6117b7565b858381548110151561181557fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b8154600090819015806118835750835443908590600019810190811061186c57fe5b6000918252602090912001546001608060020a0316105b156118f557835484906118998260018301611940565b815481106118a357fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff199093169290921716178155915061193a565b83548490600019810190811061190757fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b8154818355818111156114915760008381526020902061149191810190830161094a91905b808211156119795760008155600101611965565b50905600a165627a7a72305820bbbb318b5679d9c1eb70def664986613879446dc2e72544bb36c9a89c6b496800029",
  "sourceMap": "1809:33:58:-;555:2092:7;1809:33:58;;555:2092:7;1809:33:58;;;;;;;;;;;;;;:::i;:::-;;1349:426:7;8:9:-1;5:2;;;30:1;27;20:12;5:2;1349:426:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;305:10:57;:23;;-1:-1:-1;;;;;;305:23:57;318:10;305:23;;;4501:12:58;:48;;-1:-1:-1;;;;;4501:48:58;;305:23:57;4501:48:58;-1:-1:-1;;;;;;4501:48:58;;;;;;1349:426:7;;;4559:17:58;;1349:426:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;4559:17:58;;305:23:57;;4559:17:58;;;;;:::i;:::-;-1:-1:-1;4634:8:58;:24;;-1:-1:-1;;4634:24:58;;;;;;;4713:21;;;;:6;;:21;;;;;:::i;:::-;-1:-1:-1;4790:11:58;:39;;-1:-1:-1;;;;;;4790:39:58;-1:-1:-1;;;;;4790:39:58;;;;;;;;;;;-1:-1:-1;;;4839:19:58;:42;4891:16;:36;;-1:-1:-1;;4891:36:58;;;;;;;;;;-1:-1:-1;;4953:12:58;4937:13;:28;-1:-1:-1;555:2092:7;;-1:-1:-1;;;;;555:2092:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;555:2092:7;;;-1:-1:-1;555:2092:7;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "555:2092:7:-;;;;;;;;;-1:-1:-1;;;555:2092:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20156:10:58;;20145:22;;-1:-1:-1;;;;;20156:10:58;20145;:22::i;:::-;20137:31;;;;;;;;20202:10;;20186:69;;;;;;20244:10;20186:69;;;;;;-1:-1:-1;;;;;20202:10:58;;;;20186:40;;20233:9;;20186:69;;;;;;;;;;;;;;20233:9;20202:10;20186:69;;;5:2:-1;;;;30:1;27;20:12;5:2;20186:69:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20186:69:58;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20186:69:58;20178:78;;;;;;;;555:2092:7;1583:18:58;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1583:18:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1583:18:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2126:519:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2126:519:7;-1:-1:-1;;;;;2126:519:7;;;;;;;;;;;;;;;;;;;;;;;;;2724:25:58;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2724:25:58;;;;;;;;;;;;;;;;;;;;11356:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11356:105:58;;;;5794:705;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5794:705:58;-1:-1:-1;;;;;5794:705:58;;;;;;;;;;;;1663:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1663:21:58;;;;;;;;;;;;;;;;;;;;;;;456:116:57;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;456:116:57;-1:-1:-1;;;;;456:116:57;;;;;11815:938:58;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11815:938:58;-1:-1:-1;;;;;11815:938:58;;;;;;;1809:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1809:33:58;;;;14613:755;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14613:755:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14613:755:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14613:755:58;;-1:-1:-1;14613:755:58;;;;-1:-1:-1;14613:755:58;-1:-1:-1;14613:755:58;;;;;;;;;;-1:-1:-1;14613:755:58;;-1:-1:-1;;14613:755:58;;;-1:-1:-1;;;;;14613:755:58;;;;;;;;;;;-1:-1:-1;;;;;14613:755:58;;;;;;;;;;;;;;8541:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8541:134:58;-1:-1:-1;;;;;8541:134:58;;;;;2423:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2423:30:58;;;;15699:576;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15699:576:58;-1:-1:-1;;;;;15699:576:58;;;;;;;1744:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1744:20:58;;;;12966:910;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12966:910:58;;;;;5271:173;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5271:173:58;-1:-1:-1;;;;;5271:173:58;;;;;;;3303:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3303:28:58;;;;2610:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2610:31:58;;;;10890:342;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10890:342:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10890:342:58;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10890:342:58;;-1:-1:-1;10890:342:58;;-1:-1:-1;;;;;;;10890:342:58;16505:500;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16505:500:58;-1:-1:-1;;;;;16505:500:58;;;;;;;10222:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10222:151:58;-1:-1:-1;;;;;10222:151:58;;;;;;;;;;20563:365;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20563:365:58;-1:-1:-1;;;;;20563:365:58;;;;;3389:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3389:38:58;;;;17228:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17228:124:58;;;;;;;242:25:57;;8:9:-1;5:2;;;30:1;27;20:12;5:2;242:25:57;;;;19467:222:58;19528:4;;-1:-1:-1;;;;;19567:10:58;;;19563:28;;;19586:5;19579:12;;;;19563:28;19644:5;19632:18;19624:26;;19681:1;19676:4;:6;19669:13;;19467:222;;;;;:::o;1583:18::-;;;;;;;;;;;;;;;-1:-1:-1;;1583:18:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2126:519:7:-;2226:16;;2194:12;;2226:16;;2218:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2366:10;;2355:22;;-1:-1:-1;;;;;2366:10:7;2355;:22::i;:::-;2351:168;;;2417:10;;;2401:68;;;;;;2439:10;2401:68;;;;-1:-1:-1;;;;;2401:68:7;;;;;;;;;;;;;;;2417:10;;;;;2401:37;;:68;;;;;;;;;;;;;;;;;;2417:10;2401:68;;;5:2:-1;;;;30:1;27;20:12;5:2;2401:68:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2401:68:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2401:68:7;2393:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2537:10;2529:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;2529:29:7;;;;;;;;;;;;:39;;;2578;;;;;;;2529:29;;2537:10;2578:39;;;;;;;;;;;-1:-1:-1;2634:4:7;2126:519;;;;;:::o;2724:25:58:-;;;;:::o;11356:105::-;11404:4;11427:27;11441:12;11427:13;:27::i;:::-;11420:34;;11356:105;;:::o;5794:705::-;5882:12;6201:10;;-1:-1:-1;;;;;6201:10:58;6187;:24;6183:262;;6235:16;;;;6227:25;;;;;;;;-1:-1:-1;;;;;6333:14:58;;;;;;:7;:14;;;;;;;;6348:10;6333:26;;;;;;;;:36;-1:-1:-1;6329:54:58;;;-1:-1:-1;6378:5:58;6371:12;;6329:54;-1:-1:-1;;;;;6397:14:58;;;;;;:7;:14;;;;;;;;6412:10;6397:26;;;;;;;:37;;;;;;;6183:262;6461:31;6472:5;6479:3;6484:7;6461:10;:31::i;:::-;6454:38;;5794:705;;;;;;:::o;1663:21::-;;;;;;:::o;456:116:57:-;219:10;;-1:-1:-1;;;;;219:10:57;205;:24;197:33;;;;;;538:10;:27;;-1:-1:-1;;538:27:57;-1:-1:-1;;;;;538:27:57;;;;;;;;;;456:116::o;11815:938:58:-;-1:-1:-1;;;;;12253:16:58;;11904:4;12253:16;;;:8;:16;;;;;:23;:28;;12252:92;;-1:-1:-1;;;;;;12299:16:58;;;;;;:8;:16;;;;;:19;;12331:12;;12299:16;:19;;;;;;;;;;;;;;;:29;-1:-1:-1;;;;;12299:29:58;:44;12252:92;12248:499;;;12372:11;;-1:-1:-1;;;;;12372:11:58;12364:25;12360:222;;12416:11;;12466:19;;-1:-1:-1;;;;;12416:11:58;;;;:23;;12440:6;;12448:38;;12452:12;;12448:3;:38::i;:::-;12416:71;;;;;-1:-1:-1;;;12416:71:58;;;;;;;-1:-1:-1;;;;;12416:71:58;-1:-1:-1;;;;;12416:71:58;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12416:71:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12416:71:58;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12416:71:58;;-1:-1:-1;12409:78:58;;12360:222;-1:-1:-1;12566:1:58;12559:8;;12248:499;-1:-1:-1;;;;;12705:16:58;;;;;;:8;:16;;;;;12694:42;;12723:12;12694:10;:42::i;:::-;12687:49;;;;1809:33;;;;;;;;;;;;;;;-1:-1:-1;;1809:33:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14613:755;14825:7;;14848:19;;14844:54;;;14886:12;14869:29;;14844:54;14933:12;;:212;;;;;14976:4;14933:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;;;;-1:-1:-1;;;;;14933:12:58;;:29;;:212;;;;;;15083:17;;14933:212;;;;;;;;;;;-1:-1:-1;14933:212:58;;;;;;-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;14933:212:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14933:212:58;;;;;;;;;;;;;;;;;;;;;;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;14933:212:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14933:212:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14933:212:58;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14933:212:58;15156:39;;;;;;15184:10;15156:39;;;;;;14933:212;;-1:-1:-1;;;;;;15156:27:58;;;;;:39;;;;;-1:-1:-1;;15156:39:58;;;;;;;;-1:-1:-1;15156:27:58;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;15156:39:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;15275:50:58;;;;;;;;-1:-1:-1;;;;;15275:50:58;;;-1:-1:-1;15275:50:58;;-1:-1:-1;15275:50:58;;;;;;;;15350:10;14613:755;-1:-1:-1;;;;;;14613:755:58:o;8541:134::-;8601:15;8635:33;8647:6;8655:12;8635:11;:33::i;:::-;8628:40;;8541:134;;;;:::o;2423:30::-;;;-1:-1:-1;;;;;2423:30:58;;:::o;15699:576::-;15789:4;219:10:57;;15789:4:58;;;;-1:-1:-1;;;;;219:10:57;205;:24;197:33;;;;;;15827:13:58;:11;:13::i;:::-;15805:35;-1:-1:-1;15858:24:58;;;:42;-1:-1:-1;15858:42:58;15850:51;;;;;;15958:17;15968:6;15958:9;:17::i;:::-;15933:42;-1:-1:-1;15993:27:58;;;:48;-1:-1:-1;15993:48:58;15985:57;;;;;;16074:62;16091:18;16128:7;16111:14;:24;16074:16;:62::i;:::-;-1:-1:-1;;;;;16163:16:58;;;;;;:8;:16;;;;;16146:63;;16181:27;;;16146:16;:63::i;:::-;16219:28;;;;;;;;-1:-1:-1;;;;;16219:28:58;;;16228:1;;16219:28;;;;;;;;;-1:-1:-1;16264:4:58;;15699:576;-1:-1:-1;;;;15699:576:58:o;1744:20::-;;;;;;;;;;;;;;;-1:-1:-1;;1744:20:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12966:910;13405:18;:25;13032:4;;13405:30;;13404:96;;;13487:12;13453:18;13472:1;13453:21;;;;;;;;;;;;;;;;;;;:31;-1:-1:-1;;;;;13453:31:58;:46;13404:96;13400:470;;;13528:11;;-1:-1:-1;;;;;13528:11:58;13520:25;13516:183;;13572:11;;13616:19;;-1:-1:-1;;;;;13572:11:58;;;;:25;;13598:38;;13602:12;;13598:3;:38::i;:::-;13572:65;;;;;-1:-1:-1;;;13572:65:58;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13572:65:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13572:65:58;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13572:65:58;;-1:-1:-1;13565:72:58;;13516:183;-1:-1:-1;13683:1:58;13676:8;;13400:470;13815:44;13826:18;13846:12;13815:10;:44::i;:::-;13808:51;;;;5271:173;5367:16;;5335:12;;5367:16;;5359:25;;;;;;;;5401:36;5412:10;5424:3;5429:7;5401:10;:36::i;3303:28::-;;;;;;:::o;2610:31::-;;;;:::o;10890:342::-;10988:12;11020:26;11028:8;11038:7;11020;:26::i;:::-;11012:35;;;;;;;;11058:145;;;;;11120:10;11058:145;;;;;;;;;;;;11165:4;11058:145;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11058:48:58;;;;;11120:10;11144:7;;11165:4;11183:10;;11058:145;;;;;;;;;;;;;;;;-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;11058:145:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11058:145:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;11221:4:58;;10890:342;-1:-1:-1;;;;;;;10890:342:58:o;16505:500::-;16594:4;219:10:57;;16594:4:58;;;;-1:-1:-1;;;;;219:10:57;205;:24;197:33;;;;;;16632:13:58;:11;:13::i;:::-;16610:35;-1:-1:-1;16663:25:58;;;;16655:34;;;;;;16726:17;16736:6;16726:9;:17::i;:::-;16699:44;-1:-1:-1;16761:30:58;;;;16753:39;;;;;;16802:62;16819:18;16856:7;16839:14;:24;16802:16;:62::i;:::-;-1:-1:-1;;;;;16891:16:58;;;;;;:8;:16;;;;;16874:65;;16909:29;;;16874:16;:65::i;:::-;16949:28;;;;;;;;16966:1;;-1:-1:-1;;;;;16949:28:58;;;;;;;;;;;;-1:-1:-1;16994:4:58;;16505:500;-1:-1:-1;;;;16505:500:58:o;10222:151::-;-1:-1:-1;;;;;10341:15:58;;;10305:17;10341:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;10222:151::o;20563:365::-;20739:17;219:10:57;;20739:17:58;;-1:-1:-1;;;;;219:10:57;205;:24;197:33;;;;;;-1:-1:-1;;;;;20636:13:58;;;20632:97;;;20665:10;;;:33;;-1:-1:-1;;;;;20665:10:58;;;;20685:4;:12;20665:33;;;;;20685:12;;20665:33;:10;:33;20685:12;20665:10;:33;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20665:33:58;20712:7;;20632:97;20803:21;;;;;;20819:4;20803:21;;;;;;20771:6;;-1:-1:-1;;;;;;20803:15:58;;;;;:21;;;;;;;;;;;;;;-1:-1:-1;20803:15:58;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;20803:21:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20803:21:58;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20803:21:58;20849:10;;;20834:35;;;;;;-1:-1:-1;;;;;20849:10:58;;;20834:35;;;;;;;;;;;;20803:21;;-1:-1:-1;20834:14:58;;;;;;:35;;;;;20803:21;;20834:35;;;;;;;;;;;:14;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;20834:35:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20834:35:58;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;20901:10:58;;20879:42;;;;;;;;-1:-1:-1;;;;;20901:10:58;;;;20879:42;;;;;;;;;20834:35;20879:42;;;232:1:57;20563:365:58;;;:::o;3389:38::-;;;;;;-1:-1:-1;;;;;3389:38:58;;:::o;17228:124::-;219:10:57;;-1:-1:-1;;;;;219:10:57;205;:24;197:33;;;;;;17309:16:58;:36;;-1:-1:-1;;17309:36:58;;;;;;;;;;17228:124::o;242:25:57:-;;;-1:-1:-1;;;;;242:25:57;;:::o;6878:1528:58:-;6962:4;;;6986:12;;6982:60;;;7024:4;7017:11;;;;6982:60;7063:19;;7085:12;-1:-1:-1;7055:43:58;;;;;;-1:-1:-1;;;;;7193:8:58;;;;;;7192:36;;-1:-1:-1;;;;;;7207:20:58;;7222:4;7207:20;;7192:36;7184:45;;;;;;;;7396:32;7408:5;7415:12;7396:11;:32::i;:::-;7370:58;;7467:7;7445:19;:29;7441:78;;;7500:5;7493:12;;;;7441:78;7605:10;;7594:22;;-1:-1:-1;;;;;7605:10:58;7594;:22::i;:::-;7590:127;;;7659:10;;;7643:59;;;;;;-1:-1:-1;;;;;7643:59:58;;;;;;;;;;;;;;;;;;;;;;7659:10;;;;;7643:38;;:59;;;;;;;;;;;;;;;;;;7659:10;7643:59;;;5:2:-1;;;;30:1;27;20:12;5:2;7643:59:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7643:59:58;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7643:59:58;7635:68;;;;;;;;-1:-1:-1;;;;;7861:15:58;;;;;;:8;:15;;;;;7844:64;;7878:29;;;7844:16;:64::i;:::-;8061:30;8073:3;8078:12;8061:11;:30::i;:::-;8037:54;-1:-1:-1;8112:27:58;;;:48;-1:-1:-1;8112:48:58;8104:57;;;;;;-1:-1:-1;;;;;8213:13:58;;;;;;:8;:13;;;;;8196:60;;8228:27;;;8196:16;:60::i;:::-;8361:3;-1:-1:-1;;;;;8345:29:58;8354:5;-1:-1:-1;;;;;8345:29:58;;8366:7;8345:29;;;;;;;;;;;;;;;;;;8395:4;8388:11;;6878:1528;;;;;;;;:::o;19761:95::-;19813:4;19840:1;19836;:5;:13;;19848:1;19836:13;;;-1:-1:-1;19844:1:58;;19761:95;-1:-1:-1;19761:95:58:o;17726:765::-;17825:4;18166:8;18188;18261;17845:11;:18;;;;17867:1;17845:23;17841:37;;;17877:1;17870:8;;;;17841:37;17956:18;;17944:11;;-1:-1:-1;;17956:20:58;;;17944:33;;;;;;;;;;;;;;;:43;-1:-1:-1;;;;;17944:43:58;17934:53;;17930:117;;18020:18;;18008:11;;-1:-1:-1;;18020:20:58;;;18008:33;;;;;;;;;;;;;;;:39;;;;-1:-1:-1;;;;;18008:39:58;;-1:-1:-1;18001:46:58;;17930:117;18070:11;18082:1;18070:14;;;;;;;;;;;;;;;;;;;:24;-1:-1:-1;;;;;18070:24:58;18061:33;;18057:47;;;18103:1;18096:8;;;;18057:47;18199:18;;18177:1;;-1:-1:-1;;;18199:20:58;;-1:-1:-1;18229:217:58;18242:3;18236;:9;18229:217;;;18289:1;18285;18273:9;;;:13;18272:18;18261:29;;18336:6;18308:11;18320:3;18308:16;;;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;18308:26:58;:34;18304:132;;18368:3;18362:9;;18304:132;;;18420:1;18416:3;:5;18410:11;;18304:132;18229:217;;;18462:11;18474:3;18462:16;;;;;;;;;;;;;;;;;;;:22;;;;-1:-1:-1;;;;;18462:22:58;;-1:-1:-1;17726:765:58;;;;;;;;:::o;18709:587::-;18812:18;;18928:32;;;;18812:23;;18811:98;;-1:-1:-1;18861:18:58;;18896:12;;18849:11;;-1:-1:-1;;18861:21:58;;;18849:34;;;;;;;;;;;;;;;:44;-1:-1:-1;;;;;18849:44:58;:59;18811:98;18807:483;;;18976:20;;18963:11;;18976:20;18963:11;18976:20;;;;:::i;:::-;18963:35;;;;;;;;;;;;;;;;;19015:48;;-1:-1:-1;;;;;19080:37:58;;;;;19050:12;19015:48;;-1:-1:-1;;19015:48:58;;;;;;;19080:37;;;;18963:35;-1:-1:-1;18807:483:58;;;19201:18;;19189:11;;-1:-1:-1;;19201:20:58;;;19189:33;;;;;;;;;;;;;;;19239:37;;-1:-1:-1;;;;;19239:37:58;;;;;;;;;;19189:33;-1:-1:-1;18807:483:58;18709:587;;;;:::o;555:2092:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "source": " /**\n *  @title Mini Me Token ERC20\n *  Overwrite the MiniMeToken to make it follow ERC20 recommendation.\n *  This is required because the base token reverts when approve is used with the non zero value while allowed is non zero (which not recommended by the standard, see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md).\n *  @author Clément Lesaege - <clement@lesaege.com>\n *  Bug Bounties: This code hasn't undertaken a bug bounty program yet.\n */\n\npragma solidity ^0.4.18;\n\nimport \"minimetoken/contracts/MiniMeToken.sol\";\n\ncontract MiniMeTokenERC20 is MiniMeToken {\n\n    /** @notice Constructor to create a MiniMeTokenERC20\n     *  @param _tokenFactory The address of the MiniMeTokenFactory contract that will\n     *   create the Clone token contracts, the token factory needs to be deployed first\n     *  @param _parentToken Address of the parent token, set to 0x0 if it is a new token\n     *  @param _parentSnapShotBlock Block of the parent token that will determine the\n     *   initial distribution of the clone token, set to 0 if it is a new token\n     *  @param _tokenName Name of the new token\n     *  @param _decimalUnits Number of decimals of the new token\n     *  @param _tokenSymbol Token Symbol for the new token\n     *  @param _transfersEnabled If true, tokens will be able to be transferred\n     */\n    constructor(\n        address _tokenFactory,\n        address _parentToken,\n        uint _parentSnapShotBlock,\n        string _tokenName,\n        uint8 _decimalUnits,\n        string _tokenSymbol,\n        bool _transfersEnabled\n    )  MiniMeToken(\n        _tokenFactory,\n        _parentToken,\n        _parentSnapShotBlock,\n        _tokenName,\n        _decimalUnits,\n        _tokenSymbol,\n        _transfersEnabled\n    ) public {}\n\n    /** @notice `msg.sender` approves `_spender` to spend `_amount` tokens on its behalf.\n      * This is a ERC20 compliant version.\n      * @param _spender The address of the account able to transfer the tokens\n      * @param _amount The amount of tokens to be approved for transfer\n      * @return True if the approval was successful\n      */\n    function approve(address _spender, uint256 _amount) public returns (bool success) {\n        require(transfersEnabled, \"Transfers are not enabled.\");\n        // Alerts the token controller of the approve function call\n        if (isContract(controller)) {\n            require(TokenController(controller).onApprove(msg.sender, _spender, _amount), \"Token controller does not approve.\");\n        }\n\n        allowed[msg.sender][_spender] = _amount;\n        Approval(msg.sender, _spender, _amount);\n        return true;\n    }\n}\n",
  "sourcePath": "/private/tmp/kleros-interaction/contracts/standard/arbitration/ArbitrableTokens/MiniMeTokenERC20.sol",
  "ast": {
    "absolutePath": "/private/tmp/kleros-interaction/contracts/standard/arbitration/ArbitrableTokens/MiniMeTokenERC20.sol",
    "exportedSymbols": {
      "MiniMeTokenERC20": [
        3766
      ]
    },
    "id": 3767,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3684,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".18"
        ],
        "nodeType": "PragmaDirective",
        "src": "480:24:7"
      },
      {
        "absolutePath": "minimetoken/contracts/MiniMeToken.sol",
        "file": "minimetoken/contracts/MiniMeToken.sol",
        "id": 3685,
        "nodeType": "ImportDirective",
        "scope": 3767,
        "sourceUnit": 19661,
        "src": "506:47:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3686,
              "name": "MiniMeToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 19619,
              "src": "584:11:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MiniMeToken_$19619",
                "typeString": "contract MiniMeToken"
              }
            },
            "id": 3687,
            "nodeType": "InheritanceSpecifier",
            "src": "584:11:7"
          }
        ],
        "contractDependencies": [
          18589,
          19619
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 3766,
        "linearizedBaseContracts": [
          3766,
          19619,
          18589
        ],
        "name": "MiniMeTokenERC20",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 3713,
              "nodeType": "Block",
              "src": "1773:2:7",
              "statements": []
            },
            "documentation": "@notice Constructor to create a MiniMeTokenERC20\n @param _tokenFactory The address of the MiniMeTokenFactory contract that will\n  create the Clone token contracts, the token factory needs to be deployed first\n @param _parentToken Address of the parent token, set to 0x0 if it is a new token\n @param _parentSnapShotBlock Block of the parent token that will determine the\n  initial distribution of the clone token, set to 0 if it is a new token\n @param _tokenName Name of the new token\n @param _decimalUnits Number of decimals of the new token\n @param _tokenSymbol Token Symbol for the new token\n @param _transfersEnabled If true, tokens will be able to be transferred",
            "id": 3714,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3704,
                    "name": "_tokenFactory",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3689,
                    "src": "1602:13:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3705,
                    "name": "_parentToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3691,
                    "src": "1625:12:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3706,
                    "name": "_parentSnapShotBlock",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3693,
                    "src": "1647:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3707,
                    "name": "_tokenName",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3695,
                    "src": "1677:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3708,
                    "name": "_decimalUnits",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3697,
                    "src": "1697:13:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3709,
                    "name": "_tokenSymbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3699,
                    "src": "1720:12:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3710,
                    "name": "_transfersEnabled",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3701,
                    "src": "1742:17:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  }
                ],
                "id": 3711,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3703,
                  "name": "MiniMeToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19619,
                  "src": "1581:11:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_MiniMeToken_$19619_$",
                    "typeString": "type(contract MiniMeToken)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1581:184:7"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3702,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3689,
                  "name": "_tokenFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "1370:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3688,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1370:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3691,
                  "name": "_parentToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "1401:20:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3690,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1401:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3693,
                  "name": "_parentSnapShotBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "1431:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3692,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1431:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3695,
                  "name": "_tokenName",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "1466:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3694,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1466:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3697,
                  "name": "_decimalUnits",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "1493:19:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 3696,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1493:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3699,
                  "name": "_tokenSymbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "1522:19:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3698,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1522:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3701,
                  "name": "_transfersEnabled",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "1551:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3700,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1551:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1360:219:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 3712,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1773:0:7"
            },
            "scope": 3766,
            "src": "1349:426:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3764,
              "nodeType": "Block",
              "src": "2208:437:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3724,
                        "name": "transfersEnabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18643,
                        "src": "2226:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5472616e736665727320617265206e6f7420656e61626c65642e",
                        "id": 3725,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2244:28:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7132476ce9990628120d407def4ccb4d8302d51e7a8ccfecd9d3567bd593bfcd",
                          "typeString": "literal_string \"Transfers are not enabled.\""
                        },
                        "value": "Transfers are not enabled."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7132476ce9990628120d407def4ccb4d8302d51e7a8ccfecd9d3567bd593bfcd",
                          "typeString": "literal_string \"Transfers are not enabled.\""
                        }
                      ],
                      "id": 3723,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        20642,
                        20643
                      ],
                      "referencedDeclaration": 20643,
                      "src": "2218:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3726,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2218:55:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3727,
                  "nodeType": "ExpressionStatement",
                  "src": "2218:55:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3729,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18567,
                        "src": "2366:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3728,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19500,
                      "src": "2355:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 3730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2355:22:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3745,
                  "nodeType": "IfStatement",
                  "src": "2351:168:7",
                  "trueBody": {
                    "id": 3744,
                    "nodeType": "Block",
                    "src": "2379:140:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3736,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20639,
                                    "src": "2439:3:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 3737,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2439:10:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3738,
                                  "name": "_spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3716,
                                  "src": "2451:8:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3739,
                                  "name": "_amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3718,
                                  "src": "2461:7:7",
                                  "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,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 3733,
                                      "name": "controller",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18567,
                                      "src": "2417:10:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 3732,
                                    "name": "TokenController",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 19692,
                                    "src": "2401:15:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_TokenController_$19692_$",
                                      "typeString": "type(contract TokenController)"
                                    }
                                  },
                                  "id": 3734,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2401:27:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_TokenController_$19692",
                                    "typeString": "contract TokenController"
                                  }
                                },
                                "id": 3735,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "onApprove",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 19691,
                                "src": "2401:37:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,address,uint256) external returns (bool)"
                                }
                              },
                              "id": 3740,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2401:68:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "546f6b656e20636f6e74726f6c6c657220646f6573206e6f7420617070726f76652e",
                              "id": 3741,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2471:36:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_79d65a1bd1f23f9f5378ef7b5ef4264276ee7abedd59d071e69b279986f77ac7",
                                "typeString": "literal_string \"Token controller does not approve.\""
                              },
                              "value": "Token controller does not approve."
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_79d65a1bd1f23f9f5378ef7b5ef4264276ee7abedd59d071e69b279986f77ac7",
                                "typeString": "literal_string \"Token controller does not approve.\""
                              }
                            ],
                            "id": 3731,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              20642,
                              20643
                            ],
                            "referencedDeclaration": 20643,
                            "src": "2393:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2393:115:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3743,
                        "nodeType": "ExpressionStatement",
                        "src": "2393:115:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3746,
                          "name": "allowed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18638,
                          "src": "2529:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 3750,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3747,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20639,
                            "src": "2537:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2537:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2529:19:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 3751,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 3749,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3716,
                        "src": "2549:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2529:29:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3752,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3718,
                      "src": "2561:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2529:39:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3754,
                  "nodeType": "ExpressionStatement",
                  "src": "2529:39:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3756,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20639,
                          "src": "2587:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3757,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2587:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3758,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3716,
                        "src": "2599:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3759,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3718,
                        "src": "2609:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3755,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19618,
                      "src": "2578:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 3760,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2578:39:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3761,
                  "nodeType": "ExpressionStatement",
                  "src": "2578:39:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 3762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2634:4:7",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 3722,
                  "id": 3763,
                  "nodeType": "Return",
                  "src": "2627:11:7"
                }
              ]
            },
            "documentation": "@notice `msg.sender` approves `_spender` to spend `_amount` tokens on its behalf.\nThis is a ERC20 compliant version.\n@param _spender The address of the account able to transfer the tokens\n@param _amount The amount of tokens to be approved for transfer\n@return True if the approval was successful",
            "id": 3765,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "approve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3719,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3716,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 3765,
                  "src": "2143:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3715,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2143:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3718,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3765,
                  "src": "2161:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3717,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2161:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2142:35:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 3722,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3721,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 3765,
                  "src": "2194:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3720,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2194:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2193:14:7"
            },
            "scope": 3766,
            "src": "2126:519:7",
            "stateMutability": "nonpayable",
            "superFunction": 18960,
            "visibility": "public"
          }
        ],
        "scope": 3767,
        "src": "555:2092:7"
      }
    ],
    "src": "480:2168:7"
  },
  "legacyAST": {
    "absolutePath": "/private/tmp/kleros-interaction/contracts/standard/arbitration/ArbitrableTokens/MiniMeTokenERC20.sol",
    "exportedSymbols": {
      "MiniMeTokenERC20": [
        3766
      ]
    },
    "id": 3767,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3684,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".18"
        ],
        "nodeType": "PragmaDirective",
        "src": "480:24:7"
      },
      {
        "absolutePath": "minimetoken/contracts/MiniMeToken.sol",
        "file": "minimetoken/contracts/MiniMeToken.sol",
        "id": 3685,
        "nodeType": "ImportDirective",
        "scope": 3767,
        "sourceUnit": 19661,
        "src": "506:47:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3686,
              "name": "MiniMeToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 19619,
              "src": "584:11:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MiniMeToken_$19619",
                "typeString": "contract MiniMeToken"
              }
            },
            "id": 3687,
            "nodeType": "InheritanceSpecifier",
            "src": "584:11:7"
          }
        ],
        "contractDependencies": [
          18589,
          19619
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 3766,
        "linearizedBaseContracts": [
          3766,
          19619,
          18589
        ],
        "name": "MiniMeTokenERC20",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 3713,
              "nodeType": "Block",
              "src": "1773:2:7",
              "statements": []
            },
            "documentation": "@notice Constructor to create a MiniMeTokenERC20\n @param _tokenFactory The address of the MiniMeTokenFactory contract that will\n  create the Clone token contracts, the token factory needs to be deployed first\n @param _parentToken Address of the parent token, set to 0x0 if it is a new token\n @param _parentSnapShotBlock Block of the parent token that will determine the\n  initial distribution of the clone token, set to 0 if it is a new token\n @param _tokenName Name of the new token\n @param _decimalUnits Number of decimals of the new token\n @param _tokenSymbol Token Symbol for the new token\n @param _transfersEnabled If true, tokens will be able to be transferred",
            "id": 3714,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3704,
                    "name": "_tokenFactory",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3689,
                    "src": "1602:13:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3705,
                    "name": "_parentToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3691,
                    "src": "1625:12:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3706,
                    "name": "_parentSnapShotBlock",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3693,
                    "src": "1647:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3707,
                    "name": "_tokenName",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3695,
                    "src": "1677:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3708,
                    "name": "_decimalUnits",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3697,
                    "src": "1697:13:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3709,
                    "name": "_tokenSymbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3699,
                    "src": "1720:12:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 3710,
                    "name": "_transfersEnabled",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3701,
                    "src": "1742:17:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  }
                ],
                "id": 3711,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3703,
                  "name": "MiniMeToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 19619,
                  "src": "1581:11:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_MiniMeToken_$19619_$",
                    "typeString": "type(contract MiniMeToken)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1581:184:7"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3702,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3689,
                  "name": "_tokenFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "1370:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3688,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1370:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3691,
                  "name": "_parentToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "1401:20:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3690,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1401:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3693,
                  "name": "_parentSnapShotBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "1431:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3692,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1431:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3695,
                  "name": "_tokenName",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "1466:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3694,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1466:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3697,
                  "name": "_decimalUnits",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "1493:19:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 3696,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1493:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3699,
                  "name": "_tokenSymbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "1522:19:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3698,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1522:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3701,
                  "name": "_transfersEnabled",
                  "nodeType": "VariableDeclaration",
                  "scope": 3714,
                  "src": "1551:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3700,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1551:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1360:219:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 3712,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1773:0:7"
            },
            "scope": 3766,
            "src": "1349:426:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3764,
              "nodeType": "Block",
              "src": "2208:437:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3724,
                        "name": "transfersEnabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18643,
                        "src": "2226:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5472616e736665727320617265206e6f7420656e61626c65642e",
                        "id": 3725,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2244:28:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7132476ce9990628120d407def4ccb4d8302d51e7a8ccfecd9d3567bd593bfcd",
                          "typeString": "literal_string \"Transfers are not enabled.\""
                        },
                        "value": "Transfers are not enabled."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7132476ce9990628120d407def4ccb4d8302d51e7a8ccfecd9d3567bd593bfcd",
                          "typeString": "literal_string \"Transfers are not enabled.\""
                        }
                      ],
                      "id": 3723,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        20642,
                        20643
                      ],
                      "referencedDeclaration": 20643,
                      "src": "2218:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3726,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2218:55:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3727,
                  "nodeType": "ExpressionStatement",
                  "src": "2218:55:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3729,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18567,
                        "src": "2366:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3728,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19500,
                      "src": "2355:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 3730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2355:22:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3745,
                  "nodeType": "IfStatement",
                  "src": "2351:168:7",
                  "trueBody": {
                    "id": 3744,
                    "nodeType": "Block",
                    "src": "2379:140:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3736,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20639,
                                    "src": "2439:3:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 3737,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2439:10:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3738,
                                  "name": "_spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3716,
                                  "src": "2451:8:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3739,
                                  "name": "_amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3718,
                                  "src": "2461:7:7",
                                  "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,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 3733,
                                      "name": "controller",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18567,
                                      "src": "2417:10:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 3732,
                                    "name": "TokenController",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 19692,
                                    "src": "2401:15:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_TokenController_$19692_$",
                                      "typeString": "type(contract TokenController)"
                                    }
                                  },
                                  "id": 3734,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2401:27:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_TokenController_$19692",
                                    "typeString": "contract TokenController"
                                  }
                                },
                                "id": 3735,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "onApprove",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 19691,
                                "src": "2401:37:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,address,uint256) external returns (bool)"
                                }
                              },
                              "id": 3740,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2401:68:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "546f6b656e20636f6e74726f6c6c657220646f6573206e6f7420617070726f76652e",
                              "id": 3741,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2471:36:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_79d65a1bd1f23f9f5378ef7b5ef4264276ee7abedd59d071e69b279986f77ac7",
                                "typeString": "literal_string \"Token controller does not approve.\""
                              },
                              "value": "Token controller does not approve."
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_79d65a1bd1f23f9f5378ef7b5ef4264276ee7abedd59d071e69b279986f77ac7",
                                "typeString": "literal_string \"Token controller does not approve.\""
                              }
                            ],
                            "id": 3731,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              20642,
                              20643
                            ],
                            "referencedDeclaration": 20643,
                            "src": "2393:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2393:115:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3743,
                        "nodeType": "ExpressionStatement",
                        "src": "2393:115:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3746,
                          "name": "allowed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18638,
                          "src": "2529:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 3750,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3747,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20639,
                            "src": "2537:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2537:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2529:19:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 3751,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 3749,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3716,
                        "src": "2549:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2529:29:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3752,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3718,
                      "src": "2561:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2529:39:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3754,
                  "nodeType": "ExpressionStatement",
                  "src": "2529:39:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3756,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20639,
                          "src": "2587:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3757,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2587:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3758,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3716,
                        "src": "2599:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3759,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3718,
                        "src": "2609:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3755,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19618,
                      "src": "2578:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 3760,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2578:39:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3761,
                  "nodeType": "ExpressionStatement",
                  "src": "2578:39:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 3762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2634:4:7",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 3722,
                  "id": 3763,
                  "nodeType": "Return",
                  "src": "2627:11:7"
                }
              ]
            },
            "documentation": "@notice `msg.sender` approves `_spender` to spend `_amount` tokens on its behalf.\nThis is a ERC20 compliant version.\n@param _spender The address of the account able to transfer the tokens\n@param _amount The amount of tokens to be approved for transfer\n@return True if the approval was successful",
            "id": 3765,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "approve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3719,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3716,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 3765,
                  "src": "2143:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3715,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2143:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3718,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3765,
                  "src": "2161:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3717,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2161:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2142:35:7"
            },
            "payable": false,
            "returnParameters": {
              "id": 3722,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3721,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 3765,
                  "src": "2194:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3720,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2194:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2193:14:7"
            },
            "scope": 3766,
            "src": "2126:519:7",
            "stateMutability": "nonpayable",
            "superFunction": 18960,
            "visibility": "public"
          }
        ],
        "scope": 3767,
        "src": "555:2092:7"
      }
    ],
    "src": "480:2168:7"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-11-02T14:04:10.967Z"
}