tokenboost-solidity
Version:
Solidity contracts for TokenBoost
777 lines • 775 kB
JSON
{
"contractName": "Raiser",
"abi": [
{
"constant": true,
"inputs": [
{
"name": "_interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MAX_HALVING_ERA",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "name",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_tokenId",
"type": "uint256"
}
],
"name": "getApproved",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_to",
"type": "address"
},
{
"name": "_tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "HALVING_WEI",
"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": true,
"inputs": [],
"name": "InterfaceId_ERC165",
"outputs": [
{
"name": "",
"type": "bytes4"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_from",
"type": "address"
},
{
"name": "_to",
"type": "address"
},
{
"name": "_tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "rewardEra",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_owner",
"type": "address"
},
{
"name": "_index",
"type": "uint256"
}
],
"name": "tokenOfOwnerByIndex",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_from",
"type": "address"
},
{
"name": "_to",
"type": "address"
},
{
"name": "_tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_tokenId",
"type": "uint256"
}
],
"name": "exists",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_index",
"type": "uint256"
}
],
"name": "tokenByIndex",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "owner",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "symbol",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_to",
"type": "address"
},
{
"name": "_approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "boost",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_from",
"type": "address"
},
{
"name": "_to",
"type": "address"
},
{
"name": "_tokenId",
"type": "uint256"
},
{
"name": "_data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_owner",
"type": "address"
},
{
"name": "_operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"name": "_boost",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "tokenId",
"type": "uint256"
}
],
"name": "Mint",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "previousOwner",
"type": "address"
}
],
"name": "OwnershipRenounced",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "_from",
"type": "address"
},
{
"indexed": true,
"name": "_to",
"type": "address"
},
{
"indexed": true,
"name": "_tokenId",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "_owner",
"type": "address"
},
{
"indexed": true,
"name": "_approved",
"type": "address"
},
{
"indexed": true,
"name": "_tokenId",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "_owner",
"type": "address"
},
{
"indexed": true,
"name": "_operator",
"type": "address"
},
{
"indexed": false,
"name": "_approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"constant": false,
"inputs": [
{
"name": "_slug",
"type": "string"
},
{
"name": "_template",
"type": "address"
},
{
"name": "_bytecode",
"type": "bytes"
},
{
"name": "_args",
"type": "bytes"
}
],
"name": "mint",
"outputs": [],
"payable": true,
"stateMutability": "payable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_slug",
"type": "string"
}
],
"name": "toTokenId",
"outputs": [
{
"name": "tokenId",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_tokenId",
"type": "uint256"
}
],
"name": "slugOf",
"outputs": [
{
"name": "slug",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_tokenId",
"type": "uint256"
}
],
"name": "saleOf",
"outputs": [
{
"name": "sale",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_tokenId",
"type": "uint256"
}
],
"name": "claimableBoostsOf",
"outputs": [
{
"name": "boosts",
"type": "uint256"
},
{
"name": "newRewardEra",
"type": "uint256"
},
{
"name": "newWeiUntilNextHalving",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_tokenId",
"type": "uint256"
}
],
"name": "claimBoostsOf",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_tokenId",
"type": "uint256"
}
],
"name": "rewardedBoostsOf",
"outputs": [
{
"name": "boosts",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "claimableBoosts",
"outputs": [
{
"name": "boosts",
"type": "uint256"
},
{
"name": "newRewardEra",
"type": "uint256"
},
{
"name": "newWeiUntilNextHalving",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "claimBoosts",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "rewardedBoosts",
"outputs": [
{
"name": "boosts",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "boostsUntilNextHalving",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60806040526000600e556a115eec47f6cf7e35000000600f553480156200002557600080fd5b50604051602080620022ae83398101604081815291518282018352600682527f52616973657200000000000000000000000000000000000000000000000000006020808401919091528351808501909452600384527f52414900000000000000000000000000000000000000000000000000000000009084015291620000d47f01ffc9a70000000000000000000000000000000000000000000000000000000064010000000062000206810204565b620001087f80ac58cd0000000000000000000000000000000000000000000000000000000064010000000062000206810204565b6200013c7f4f558e790000000000000000000000000000000000000000000000000000000064010000000062000206810204565b81516200015190600590602085019062000273565b5080516200016790600690602084019062000273565b506200019c7f780e9d630000000000000000000000000000000000000000000000000000000064010000000062000206810204565b620001d07f5b5e139f0000000000000000000000000000000000000000000000000000000064010000000062000206810204565b5050600c805433600160a060020a031991821617909155600d8054909116600160a060020a039290921691909117905562000318565b7fffffffff0000000000000000000000000000000000000000000000000000000080821614156200023657600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002b657805160ff1916838001178555620002e6565b82800160010185558215620002e6579182015b82811115620002e6578251825591602001919060010190620002c9565b50620002f4929150620002f8565b5090565b6200031591905b80821115620002f45760008155600101620002ff565b90565b611f8680620003286000396000f3006080604052600436106101a85763ffffffff60e060020a60003504166301ffc9a781146101ad57806303948e47146101e357806306fdde031461020a578063081812fc14610294578063095ea7b3146102c85780630c972b09146102ee57806311bae04f1461030657806318076e4f1461031b57806318160ddd1461033057806319fa8f50146103455780632213719b1461037757806323b872dd146103ad57806326eed3b5146103d75780632d38bf7a146104305780632f745c591461044557806342842e0e146104695780634f558e79146104935780634f6ccce7146104ab578063550a778b146104c357806356935e8e146104db57806361db2445146104f05780636352211e1461050857806370a0823114610520578063715018a61461054157806373edf1891461055657806385449c091461056b5780638da5cb5b1461058057806395d89b4114610595578063a22cb465146105aa578063a66f42c0146105d0578063aeef6719146105e5578063b88d4fde146106bc578063c87b56dd1461072b578063dfdab20d14610743578063e985e9c51461075b578063f2fde38b14610782575b600080fd5b3480156101b957600080fd5b506101cf600160e060020a0319600435166107a3565b604080519115158252519081900360200190f35b3480156101ef57600080fd5b506101f86107c2565b60408051918252519081900360200190f35b34801561021657600080fd5b5061021f6107c7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610259578181015183820152602001610241565b50505050905090810190601f1680156102865780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102a057600080fd5b506102ac60043561085e565b60408051600160a060020a039092168252519081900360200190f35b3480156102d457600080fd5b506102ec600160a060020a0360043516602435610879565b005b3480156102fa57600080fd5b506101f8600435610922565b34801561031257600080fd5b506101f861093f565b34801561032757600080fd5b506101f8610959565b34801561033c57600080fd5b506101f8610968565b34801561035157600080fd5b5061035a61096e565b60408051600160e060020a03199092168252519081900360200190f35b34801561038357600080fd5b5061038f600435610992565b60408051938452602084019290925282820152519081900360600190f35b3480156103b957600080fd5b506102ec600160a060020a0360043581169060243516604435610c28565b3480156103e357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101f8943694929360249392840191908190840183828082843750949750610ccb9650505050505050565b34801561043c57600080fd5b506101f8610e50565b34801561045157600080fd5b506101f8600160a060020a0360043516602435610e56565b34801561047557600080fd5b506102ec600160a060020a0360043581169060243516604435610ea4565b34801561049f57600080fd5b506101cf600435610ec5565b3480156104b757600080fd5b506101f8600435610ee2565b3480156104cf57600080fd5b506102ac600435610f17565b3480156104e757600080fd5b506101f8610f32565b3480156104fc57600080fd5b506101cf600435610f7c565b34801561051457600080fd5b506102ac600435611065565b34801561052c57600080fd5b506101f8600160a060020a0360043516611089565b34801561054d57600080fd5b506102ec6110bc565b34801561056257600080fd5b5061038f61111d565b34801561057757600080fd5b506101cf61117f565b34801561058c57600080fd5b506102ac6111bc565b3480156105a157600080fd5b5061021f6111cb565b3480156105b657600080fd5b506102ec600160a060020a0360043516602435151561122c565b3480156105dc57600080fd5b506102ac6112b0565b6040805160206004803580820135601f81018490048402850184019095528484526102ec94369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b600160a060020a038b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506112bf9650505050505050565b3480156106c857600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526102ec94600160a060020a03813581169560248035909216956044359536956084940191819084018382808284375094975061160d9650505050505050565b34801561073757600080fd5b5061021f600435611635565b34801561074f57600080fd5b5061021f6004356116ea565b34801561076757600080fd5b506101cf600160a060020a0360043581169060243516611754565b34801561078e57600080fd5b506102ec600160a060020a0360043516611782565b600160e060020a03191660009081526020819052604090205460ff1690565b601481565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108535780601f1061082857610100808354040283529160200191610853565b820191906000526020600020905b81548152906001019060200180831161083657829003601f168201915b505050505090505b90565b600090815260026020526040902054600160a060020a031690565b600061088482611065565b9050600160a060020a03838116908216141561089f57600080fd5b33600160a060020a03821614806108bb57506108bb8133611754565b15156108c657600080fd5b6000828152600260205260408082208054600160a060020a031916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600090815260126020908152604080832033845290915290205490565b60008061094d600f546117a5565b505090508091505b5090565b6a115eec47f6cf7e3500000081565b60095490565b7f01ffc9a70000000000000000000000000000000000000000000000000000000081565b600081815260126020908152604080832033845290915281205481908190819081908110156109cf57600e54600f54600096509094509250610c1f565b600086815260106020526040902054600160a060020a031691508115156109f557600080fd5b81600160a060020a031663bef4876b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610a3357600080fd5b505af1158015610a47573d6000803e3d6000fd5b505050506040513d6020811015610a5d57600080fd5b50511515610a6a57600080fd5b604080517fcf7c2b310000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a0384169163cf7c2b319160248083019260209291908290030181600087803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5051604080517f8da5cb5b00000000000000000000000000000000000000000000000000000000815290519192503391600160a060020a03851691638da5cb5b9160048083019260209291908290030181600087803b158015610b5757600080fd5b505af1158015610b6b573d6000803e3d6000fd5b505050506040513d6020811015610b8157600080fd5b5051600160a060020a03161415610c0f57610c0c82600160a060020a0316634042b66f6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610bd357600080fd5b505af1158015610be7573d6000803e3d6000fd5b505050506040513d6020811015610bfd57600080fd5b5051829063ffffffff61188216565b90505b610c18816117a5565b9450945094505b50509193909250565b610c32338261188f565b1515610c3d57600080fd5b600160a060020a0383161515610c5257600080fd5b600160a060020a0382161515610c6757600080fd5b610c7183826118ee565b610c7b8382611952565b610c858282611a59565b8082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000606060008084925060008351111515610d4757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f537472696e6720697320656d7074792e00000000000000000000000000000000604482015290519081900360640190fd5b600091505b610d5883516020611aa2565b821015610e44578282815181101515610d6d57fe5b90602001015160f860020a900460f860020a0260f860020a9004905080606111158015610d9b5750607a8111155b80610da6575080602d145b1515610e3957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f537472696e67206d75737420636f6e7461696e206f6e6c79206c6f776572636160448201527f736520616c70686162657473206f722068797068656e732e0000000000000000606482015290519081900360840190fd5b600190910190610d4c565b50506020015192915050565b600e5481565b6000610e6183611089565b8210610e6c57600080fd5b600160a060020a0383166000908152600760205260409020805483908110610e9057fe5b906000526020600020015490505b92915050565b610ec0838383602060405190810160405280600081525061160d565b505050565b600090815260016020526040902054600160a060020a0316151590565b6000610eec610968565b8210610ef757600080fd5b6009805483908110610f0557fe5b90600052602060002001549050919050565b600090815260106020526040902054600160a060020a031690565b600080805b610f3f610968565b821015610f7757610f4f82610ee2565b9050610f6a610f5d82610922565b849063ffffffff61188216565b9250600190910190610f37565b505090565b600080600080610f8b85610992565b600e829055600f81905591945092509050600083111561103f57600d54604080517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152602481018690529051600160a060020a03909216916340c10f19916044808201926020929091908290030181600087803b15801561101257600080fd5b505af1158015611026573d6000803e3d6000fd5b505050506040513d602081101561103c57600080fd5b50505b505060009283526012602090815260408085203386529091529092209190915550600190565b600081815260016020526040812054600160a060020a0316801515610e9e57600080fd5b6000600160a060020a03821615156110a057600080fd5b50600160a060020a031660009081526003602052604090205490565b600c54600160a060020a031633146110d357600080fd5b600c54604051600160a060020a03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a2600c8054600160a060020a0319169055565b6000808080808080805b61112f610968565b8510156111755761113f85610ee2565b935061114a84610992565b91945092509050611161888463ffffffff61188216565b975090955093506001909201918484611127565b5050505050909192565b600080805b61118c610968565b8210156111b35761119c82610ee2565b90506111a781610f7c565b50600190910190611184565b60019250505090565b600c54600160a060020a031681565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108535780601f1061082857610100808354040283529160200191610853565b600160a060020a03821633141561124257600080fd5b336000818152600460209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b600d54600160a060020a031681565b604080517f01ffc9a700000000000000000000000000000000000000000000000000000000808252600482015290516000918291600160a060020a038716916301ffc9a791602480830192602092919082900301818787803b15801561132457600080fd5b505af1158015611338573d6000803e3d6000fd5b505050506040513d602081101561134e57600080fd5b5051151561135b57600080fd5b604080517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fd48445ff0000000000000000000000000000000000000000000000000000000060048201529051600160a060020a038716916301ffc9a79160248083019260209291908290030181600087803b1580156113dc57600080fd5b505af11580156113f0573d6000803e3d6000fd5b505050506040513d602081101561140657600080fd5b5051151561141357600080fd5b61141c86610ccb565b600081815260106020526040902054909250600160a060020a03161561144157600080fd5b84600160a060020a0316636535b4a53486866040518463ffffffff1660e060020a028152600401808060200180602001838103835285818151815260200191508051906020019080838360005b838110156114a657818101518382015260200161148e565b50505050905090810190601f1680156114d35780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156115065781810151838201526020016114ee565b50505050905090810190601f1680156115335780820380516001836020036101000a031916815260200191505b509450505050506020604051808303818588803b15801561155357600080fd5b505af1158015611567573d6000803e3d6000fd5b50505050506040513d602081101561157e57600080fd5b505160008381526010602090815260408083208054600160a060020a031916600160a060020a0386161790556011825290912088519293506115c4929091890190611ea6565b506115cf3383611aba565b60408051838152905133917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a2505050505050565b611618848484610c28565b61162484848484611b09565b151561162f57600080fd5b50505050565b606061164082610ec5565b151561164b57600080fd5b6000828152600b602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156116de5780601f106116b3576101008083540402835291602001916116de565b820191906000526020600020905b8154815290600101906020018083116116c157829003601f168201915b50505050509050919050565b60008181526011602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156116de5780601f106116b3576101008083540402835291602001916116de565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205460ff1690565b600c54600160a060020a0316331461179957600080fd5b6117a281611c76565b50565b60008060008060006014600e5411156117cc57600e54600f54600096509094509250610c1f565b85915060009450600e549350600f5492505b6000821115610c1f576117f382600f54611aa2565b905061183b61182e61181e6103e861181260148963ffffffff611ce716565b9063ffffffff611cf916565b839060020a63ffffffff611d0e16565b869063ffffffff61188216565b945061184d828263ffffffff611ce716565b915061185f838263ffffffff611ce716565b925082151561187d576a115eec47f6cf7e3500000092506001840193505b6117de565b81810182811015610e9e57fe5b60008061189b83611065565b905080600160a060020a031684600160a060020a031614806118d6575083600160a060020a03166118cb8461085e565b600160a060020a0316145b806118e657506118e68185611754565b949350505050565b81600160a060020a031661190182611065565b600160a060020a03161461191457600080fd5b600081815260026020526040902054600160a060020a03161561194e5760008181526002602052604090208054600160a060020a03191690555b5050565b60008060006119618585611d37565b600084815260086020908152604080832054600160a060020a038916845260079092529091205490935061199c90600163ffffffff611ce716565b600160a060020a0386166000908152600760205260409020805491935090839081106119c457fe5b90600052602060002001549050806007600087600160a060020a0316600160a060020a0316815260200190815260200160002084815481101515611a0457fe5b6000918252602080832090910192909255600160a060020a0387168152600790915260409020805490611a3b906000198301611f20565b50600093845260086020526040808520859055908452909220555050565b6000611a658383611dc0565b50600160a060020a039091166000908152600760209081526040808320805460018101825590845282842081018590559383526008909152902055565b6000818310611ab15781611ab3565b825b9392505050565b611ac48282611e43565b600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af015550565b600080611b1e85600160a060020a0316611e9e565b1515611b2d5760019150611c6d565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03898116602485015260448401889052608060648501908152875160848601528751918a169463150b7a0294938c938b938b93909160a490910190602085019080838360005b83811015611bc0578181015183820152602001611ba8565b50505050905090810190601f168015611bed5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015611c0f57600080fd5b505af1158015611c23573d6000803e3d6000fd5b505050506040513d6020811015611c3957600080fd5b5051600160e060020a031981167f150b7a020000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b600160a060020a0381161515611c8b57600080fd5b600c54604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600c8054600160a060020a031916600160a060020a0392909216919091179055565b600082821115611cf357fe5b50900390565b60008183811515611d0657fe5b049392505050565b6000821515611d1f57506000610e9e565b50818102818382811515611d2f57fe5b0414610e9e57fe5b81600160a060020a0316611d4a82611065565b600160a060020a031614611d5d57600080fd5b600160a060020a038216600090815260036020526040902054611d8790600163ffffffff611ce716565b600160a060020a039092166000908152600360209081526040808320949094559181526001909152208054600160a060020a0319169055565b600081815260016020526040902054600160a060020a031615611de257600080fd5b60008181526001602081815260408084208054600160a060020a031916600160a060020a0388169081179091558452600390915290912054611e2391611882565b600160a060020a0390921660009081526003602052604090209190915550565b600160a060020a0382161515611e5857600080fd5b611e628282611a59565b6040518190600160a060020a038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000903b1190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611ee757805160ff1916838001178555611f14565b82800160010185558215611f14579182015b82811115611f14578251825591602001919060010190611ef9565b50610955929150611f40565b815481835581811115610ec057600083815260209020610ec09181019083015b61085b91905b808211156109555760008155600101611f465600a165627a7a723058200aafb32ba569e0b59ed229e5265b5e3bbb869f17b8fc2e2a260eda3bc5e6a2350029",
"deployedBytecode": "0x6080604052600436106101a85763ffffffff60e060020a60003504166301ffc9a781146101ad57806303948e47146101e357806306fdde031461020a578063081812fc14610294578063095ea7b3146102c85780630c972b09146102ee57806311bae04f1461030657806318076e4f1461031b57806318160ddd1461033057806319fa8f50146103455780632213719b1461037757806323b872dd146103ad57806326eed3b5146103d75780632d38bf7a146104305780632f745c591461044557806342842e0e146104695780634f558e79146104935780634f6ccce7146104ab578063550a778b146104c357806356935e8e146104db57806361db2445146104f05780636352211e1461050857806370a0823114610520578063715018a61461054157806373edf1891461055657806385449c091461056b5780638da5cb5b1461058057806395d89b4114610595578063a22cb465146105aa578063a66f42c0146105d0578063aeef6719146105e5578063b88d4fde146106bc578063c87b56dd1461072b578063dfdab20d14610743578063e985e9c51461075b578063f2fde38b14610782575b600080fd5b3480156101b957600080fd5b506101cf600160e060020a0319600435166107a3565b604080519115158252519081900360200190f35b3480156101ef57600080fd5b506101f86107c2565b60408051918252519081900360200190f35b34801561021657600080fd5b5061021f6107c7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610259578181015183820152602001610241565b50505050905090810190601f1680156102865780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102a057600080fd5b506102ac60043561085e565b60408051600160a060020a039092168252519081900360200190f35b3480156102d457600080fd5b506102ec600160a060020a0360043516602435610879565b005b3480156102fa57600080fd5b506101f8600435610922565b34801561031257600080fd5b506101f861093f565b34801561032757600080fd5b506101f8610959565b34801561033c57600080fd5b506101f8610968565b34801561035157600080fd5b5061035a61096e565b60408051600160e060020a03199092168252519081900360200190f35b34801561038357600080fd5b5061038f600435610992565b60408051938452602084019290925282820152519081900360600190f35b3480156103b957600080fd5b506102ec600160a060020a0360043581169060243516604435610c28565b3480156103e357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101f8943694929360249392840191908190840183828082843750949750610ccb9650505050505050565b34801561043c57600080fd5b506101f8610e50565b34801561045157600080fd5b506101f8600160a060020a0360043516602435610e56565b34801561047557600080fd5b506102ec600160a060020a0360043581169060243516604435610ea4565b34801561049f57600080fd5b506101cf600435610ec5565b3480156104b757600080fd5b506101f8600435610ee2565b3480156104cf57600080fd5b506102ac600435610f17565b3480156104e757600080fd5b506101f8610f32565b3480156104fc57600080fd5b506101cf600435610f7c565b34801561051457600080fd5b506102ac600435611065565b34801561052c57600080fd5b506101f8600160a060020a0360043516611089565b34801561054d57600080fd5b506102ec6110bc565b34801561056257600080fd5b5061038f61111d565b34801561057757600080fd5b506101cf61117f565b34801561058c57600080fd5b506102ac6111bc565b3480156105a157600080fd5b5061021f6111cb565b3480156105b657600080fd5b506102ec600160a060020a0360043516602435151561122c565b3480156105dc57600080fd5b506102ac6112b0565b6040805160206004803580820135601f81018490048402850184019095528484526102ec94369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b600160a060020a038b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506112bf9650505050505050565b3480156106c857600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526102ec94600160a060020a03813581169560248035909216956044359536956084940191819084018382808284375094975061160d9650505050505050565b34801561073757600080fd5b5061021f600435611635565b34801561074f57600080fd5b5061021f6004356116ea565b34801561076757600080fd5b506101cf600160a060020a0360043581169060243516611754565b34801561078e57600080fd5b506102ec600160a060020a0360043516611782565b600160e060020a03191660009081526020819052604090205460ff1690565b601481565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108535780601f1061082857610100808354040283529160200191610853565b820191906000526020600020905b81548152906001019060200180831161083657829003601f168201915b505050505090505b90565b600090815260026020526040902054600160a060020a031690565b600061088482611065565b9050600160a060020a03838116908216141561089f57600080fd5b33600160a060020a03821614806108bb57506108bb8133611754565b15156108c657600080fd5b6000828152600260205260408082208054600160a060020a031916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600090815260126020908152604080832033845290915290205490565b60008061094d600f546117a5565b505090508091505b5090565b6a115eec47f6cf7e3500000081565b60095490565b7f01ffc9a70000000000000000000000000000000000000000000000000000000081565b600081815260126020908152604080832033845290915281205481908190819081908110156109cf57600e54600f54600096509094509250610c1f565b600086815260106020526040902054600160a060020a031691508115156109f557600080fd5b81600160a060020a031663bef4876b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610a3357600080fd5b505af1158015610a47573d6000803e3d6000fd5b505050506040513d6020811015610a5d57600080fd5b50511515610a6a57600080fd5b604080517fcf7c2b310000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a0384169163cf7c2b319160248083019260209291908290030181600087803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5051604080517f8da5cb5b00000000000000000000000000000000000000000000000000000000815290519192503391600160a060020a03851691638da5cb5b9160048083019260209291908290030181600087803b158015610b5757600080fd5b505af1158015610b6b573d6000803e3d6000fd5b505050506040513d6020811015610b8157600080fd5b5051600160a060020a03161415610c0f57610c0c82600160a060020a0316634042b66f6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610bd357600080fd5b505af1158015610be7573d6000803e3d6000fd5b505050506040513d6020811015610bfd57600080fd5b5051829063ffffffff61188216565b90505b610c18816117a5565b9450945094505b50509193909250565b610c32338261188f565b1515610c3d57600080fd5b600160a060020a0383161515610c5257600080fd5b600160a060020a0382161515610c6757600080fd5b610c7183826118ee565b610c7b8382611952565b610c858282611a59565b8082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000606060008084925060008351111515610d4757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f537472696e6720697320656d7074792e00000000000000000000000000000000604482015290519081900360640190fd5b600091505b610d5883516020611aa2565b821015610e44578282815181101515610d6d57fe5b90602001015160f860020a900460f860020a0260f860020a9004905080606111158015610d9b5750607a8111155b80610da6575080602d145b1515610e3957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f537472696e67206d75737420636f6e7461696e206f6e6c79206c6f776572636160448201527f736520616c70686162657473206f722068797068656e732e0000000000000000606482015290519081900360840190fd5b600190910190610d4c565b50506020015192915050565b600e5481565b6000610e6183611089565b8210610e6c57600080fd5b600160a060020a0383166000908152600760205260409020805483908110610e9057fe5b906000526020600020015490505b92915050565b610ec0838383602060405190810160405280600081525061160d565b505050565b600090815260016020526040902054600160a060020a0316151590565b6000610eec610968565b8210610ef757600080fd5b6009805483908110610f0557fe5b90600052602060002001549050919050565b600090815260106020526040902054600160a060020a031690565b600080805b610f3f610968565b821015610f7757610f4f82610ee2565b9050610f6a610f5d82610922565b849063ffffffff61188216565b9250600190910190610f37565b505090565b600080600080610f8b85610992565b600e829055600f81905591945092509050600083111561103f57600d54604080517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152602481018690529051600160a060020a03909216916340c10f19916044808201926020929091908290030181600087803b15801561101257600080fd5b505af1158015611026573d6000803e3d6000fd5b505050506040513d602081101561103c57600080fd5b50505b505060009283526012602090815260408085203386529091529092209190915550600190565b600081815260016020526040812054600160a060020a0316801515610e9e57600080fd5b6000600160a060020a03821615156110a057600080fd5b50600160a060020a031660009081526003602052604090205490565b600c54600160a060020a031633146110d357600080fd5b600c54604051600160a060020a03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a2600c8054600160a060020a0319169055565b6000808080808080805b61112f610968565b8510156111755761113f85610ee2565b935061114a84610992565b91945092509050611161888463ffffffff61188216565b975090955093506001909201918484611127565b5050505050909192565b600080805b61118c610968565b8210156111b35761119c82610ee2565b90506111a781610f7c565b50600190910190611184565b60019250505090565b600c54600160a060020a031681565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108535780601f1061082857610100808354040283529160200191610853565b600160a060020a03821633141561124257600080fd5b336000818152600460209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b600d54600160a060020a031681565b604080517f01ffc9a700000000000000000000000000000000000000000000000000000000808252600482015290516000918291600160a060020a038716916301ffc9a791602480830192602092919082900301818787803b15801561132457600080fd5b505af1158015611338573d6000803e3d6000fd5b505050506040513d602081101561134e57600080fd5b5051151561135b57600080fd5b604080517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fd48445ff0000000000000000000000000000000000000000000000000000000060048201529051600160a060020a038716916301ffc9a79160248083019260209291908290030181600087803b1580156113dc57600080fd5b505af11580156113f0573d6000803e3d6000fd5b505050506040513d602081101561140657600080fd5b5051151561141357600080fd5b61141c86610ccb565b600081815260106020526040902054909250600160a060020a03161561144157600080fd5b84600160a060020a0316636535b4a53486866040518463ffffffff1660e060020a028152600401808060200180602001838103835285818151815260200191508051906020019080838360005b838110156114a657818101518382015260200161148e565b50505050905090810190601f1680156114d35780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156115065781810151838201526020016114ee565b50505050905090810190601f1680156115335780820380516001836020036101000a031916815260200191505b509450505050506020604051808303818588803b15801561155357600080fd5b505af1158015611567573d6000803e3d6000fd5b50505050506040513d602081101561157e57600080fd5b505160008381526010602090815260408083208054600160a060020a031916600160a060020a0386161790556011825290912088519293506115c4929091890190611ea6565b506115cf3383611aba565b60408051838152905133917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a2505050505050565b611618848484610c28565b61162484848484611b09565b151561162f57600080fd5b50505050565b606061164082610ec5565b151561164b57600080fd5b6000828152600b602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156116de5780601f106116b3576101008083540402835291602001916116de565b820191906000526020600020905b8154815290600101906020018083116116c157829003601f168201915b50505050509050919050565b60008181526011602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156116de5780601f106116b3576101008083540402835291602001916116de565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205460ff1690565b600c54600160a060020a0316331461179957600080fd5b6117a281611c76565b50565b60008060008060006014600e5411156117cc57600e54600f54600096509094509250610c1f565b85915060009450600e549350600f5492505b6000821115610c1f576117f382600f54611aa2565b905061183b61182e61181e6103e861181260148963ffffffff611ce716565b9063ffffffff611cf916565b839060020a63ffffffff611d0e16565b869063ffffffff61188216565b945061184d828263ffffffff611ce716565b915061185f838263ffffffff611ce716565b925082151561187d576a115eec47f6cf7e3500000092506001840193505b6117de565b81810182811015610e9e57fe5b60008061189b83611065565b905080600160a060020a031684600160a060020a031614806118d6575083600160a060020a03166118cb8461085e565b600160a060020a0316145b806118e657506118e68185611754565b949350505050565b81600160a060020a031661190182611065565b600160a060020a03161461191457600080fd5b600081815260026020526040902054600160a060020a03161561194e5760008181526002602052604090208054600160a060020a03191690555b5050565b60008060006119618585611d37565b600084815260086020908152604080832054600160a060020a038916845260079092529091205490935061199c90600163ffffffff611ce716565b600160a060020a0386166000908152600760205260409020805491935090839081106119c457fe5b90600052602060002001549050806007600087600160a060020a0316600160a060020a0316815260200190815260200160002084815481101515611a0457fe5b6000918252602080832090910192909255600160a060020a0387168152600790915260409020805490611a3b906000198301611f20565b50600093845260086020526040808520859055908452909220555050565b6000611a658383611dc0565b50600160a060020a039091166000908152600760209081526040808320805460018101825590845282842081018590559383526008909152902055565b6000818310611ab15781611ab3565b825b9392505050565b611ac48282611e43565b600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af015550565b600080611b1e85600160a060020a0316611e9e565b1515611b2d5760019150611c6d565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03898116602485015260448401889052608060648501908152875160848601528751918a169463150b7a0294938c938b938b93909160a490910190602085019080838360005b83811015611bc0578181015183820152602001611ba8565b50505050905090810190601f168015611bed5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015611c0f57600080fd5b505af1158015611c23573d6000803e3d6000fd5b505050506040513d6020811015611c3957600080fd5b5051600160e060020a031981167f150b7a020000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b600160a060020a0381161515611c8b57600080fd5b600c54604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600c8054600160a060020a031916600160a060020a0392909216919091179055565b600082821115611cf357fe5b50900390565b60008183811515611d0657fe5b049392505050565b6000821515611d1f57506000610e9e565b50818102818382811515611d2f57fe5b0414610e9e57fe5b81600160a060020a0316611d4a82611065565b600160a060020a031614611d5d57600080fd5b600160a060020a038216600090815260036020526040902054611d8790600163ffffffff611ce716565b600160a060020a039092166000908152600360209081526040808320949094559181526001909152208054600160a060020a0319169055565b600081815260016020526040902054600160a060020a031615611de257600080fd5b60008181526001602081815260408084208054600160a060020a031916600160a060020a0388169081179091558452600390915290912054611e2391611882565b600160a060020a0390921660009081526003602052604090209190915550565b600160a060020a0382161515611e5857600080fd5b611e628282611a59565b6040518190600160a060020a038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000903b1190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611ee757805160ff1916838001178555611f14565b82800160010185558215611f14579182015b82811115611f14578251825591602001919060010190611ef9565b50610955929150611f40565b815481835581811115610ec057600083815260209020610ec09181019083015b61085b91905b808211156109555760008155600101611f465600a165627a7a723058200aafb32ba569e0b59ed229e5265b5e3bbb869f17b8fc2e2a260eda3bc5e6a2350029",
"sourceMap": "305:5221:3:-;;;622:1;595:28;;493:21;630:41;;854:64;8:9:-1;5:2;;;30:1;27;20:12;5:2;854:64:3;;;;;;;;;;;;;;;;1166:276:33;;;;;;;;;854:64:3;1166:276:33;;;;;;;;;;;;;;;;;;;;;;;854:64:3;649:38:20;668:18;649;;;;:38;:::i;:::-;1258::31;1277:18;1258;;;;:38;:::i;:::-;1302:44;1321:24;1302:18;;;;:44;:::i;:::-;1221:13:33;;;;:5;;:13;;;;;:::i;:::-;-1:-1:-1;1240:17:33;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;1337:48:33;1356:28;1337:18;;;;:48;:::i;:::-;1391:46;1410:26;1391:18;;;;:46;:::i;:::-;-1:-1:-1;;567:5:22;:18;;575:10;-1:-1:-1;;;;;;567:18:22;;;;;;;897:5:3;:14;;;;;-1:-1:-1;;;;;897:14:3;;;;;;;;;;305:5221;;987:156:20;1065:26;;;;;;1057:35;;;;;;1098:33;;:19;:33;;;;;;;;;;:40;;-1:-1:-1;;1098:40:20;1134:4;1098:40;;;987:156::o;305:5221:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;305:5221:3;;;-1:-1:-1;305:5221:3;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
"deployedSourceMap": "305:5221:3:-;;;;;;;;;-1:-1:-1;;;305:5221:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;775:142:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;775:142:20;-1:-1:-1;;;;;;775:142:20;;;;;;;;;;;;;;;;;;;;;;;