UNPKG

@gnosis.pm/pm-contracts

Version:

Collection of smart contracts for the Gnosis prediction market platform

392 lines 365 kB
{ "contractName": "ScalarEvent", "abi": [ { "constant": false, "inputs": [], "name": "setOutcome", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "outcome", "outputs": [ { "name": "", "type": "int256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "collateralTokenCount", "type": "uint256" } ], "name": "buyAllOutcomes", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "LONG", "outputs": [ { "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "owner", "type": "address" } ], "name": "getOutcomeTokenDistribution", "outputs": [ { "name": "outcomeTokenDistribution", "type": "uint256[]" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "OUTCOME_RANGE", "outputs": [ { "name": "", "type": "uint24" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "outcomeTokenCount", "type": "uint256" } ], "name": "sellAllOutcomes", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "oracle", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getOutcomeCount", "outputs": [ { "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "uint256" } ], "name": "outcomeTokens", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "lowerBound", "outputs": [ { "name": "", "type": "int256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "masterCopy", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "SHORT", "outputs": [ { "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "upperBound", "outputs": [ { "name": "", "type": "int256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "collateralToken", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "isOutcomeSet", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getOutcomeTokens", "outputs": [ { "name": "", "type": "address[]" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "outcomeToken", "type": "address" }, { "indexed": false, "name": "index", "type": "uint8" } ], "name": "OutcomeTokenCreation", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "buyer", "type": "address" }, { "indexed": false, "name": "collateralTokenCount", "type": "uint256" } ], "name": "OutcomeTokenSetIssuance", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "seller", "type": "address" }, { "indexed": false, "name": "outcomeTokenCount", "type": "uint256" } ], "name": "OutcomeTokenSetRevocation", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "outcome", "type": "int256" } ], "name": "OutcomeAssignment", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "receiver", "type": "address" }, { "indexed": false, "name": "winnings", "type": "uint256" } ], "name": "WinningsRedemption", "type": "event" }, { "constant": false, "inputs": [], "name": "redeemWinnings", "outputs": [ { "name": "winnings", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "getEventHash", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" } ], "metadata": "{\"compiler\":{\"version\":\"0.5.6+commit.b259423e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[],\"name\":\"setOutcome\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"outcome\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"collateralTokenCount\",\"type\":\"uint256\"}],\"name\":\"buyAllOutcomes\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"LONG\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getOutcomeTokenDistribution\",\"outputs\":[{\"name\":\"outcomeTokenDistribution\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"OUTCOME_RANGE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint24\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"outcomeTokenCount\",\"type\":\"uint256\"}],\"name\":\"sellAllOutcomes\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOutcomeCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"outcomeTokens\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lowerBound\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"masterCopy\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"SHORT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"redeemWinnings\",\"outputs\":[{\"name\":\"winnings\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"upperBound\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"collateralToken\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOutcomeSet\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getEventHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOutcomeTokens\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"outcomeToken\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"OutcomeTokenCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"collateralTokenCount\",\"type\":\"uint256\"}],\"name\":\"OutcomeTokenSetIssuance\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"seller\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"outcomeTokenCount\",\"type\":\"uint256\"}],\"name\":\"OutcomeTokenSetRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"outcome\",\"type\":\"int256\"}],\"name\":\"OutcomeAssignment\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"winnings\",\"type\":\"uint256\"}],\"name\":\"WinningsRedemption\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Stefan George - <stefan@gnosis.pm>\",\"methods\":{\"buyAllOutcomes(uint256)\":{\"details\":\"Buys equal number of tokens of all outcomes, exchanging collateral tokens and sets of outcome tokens 1:1\",\"params\":{\"collateralTokenCount\":\"Number of collateral tokens\"}},\"getEventHash()\":{\"details\":\"Calculates and returns event hash\",\"return\":\"Event hash\"},\"getOutcomeCount()\":{\"details\":\"Returns outcome count\",\"return\":\"Outcome count\"},\"getOutcomeTokenDistribution(address)\":{\"details\":\"Returns the amount of outcome tokens held by owner\",\"return\":\"Outcome token distribution\"},\"getOutcomeTokens()\":{\"details\":\"Returns outcome tokens array\",\"return\":\"Outcome tokens\"},\"redeemWinnings()\":{\"details\":\"Exchanges sender's winning outcome tokens for collateral tokens\",\"return\":\"Sender's winnings\"},\"sellAllOutcomes(uint256)\":{\"details\":\"Sells equal number of tokens of all outcomes, exchanging collateral tokens and sets of outcome tokens 1:1\",\"params\":{\"outcomeTokenCount\":\"Number of outcome tokens\"}},\"setOutcome()\":{\"details\":\"Sets winning event outcome\"}},\"title\":\"Scalar event contract - Scalar events resolve to a number within a range\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/ScalarEvent.sol\":\"ScalarEvent\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/Event.sol\":{\"keccak256\":\"0xdcacfa25145426b5681ad7d8bafb3c117c92a37b7a0175d72a10b42f130fb8c1\",\"urls\":[\"bzzr://bd10fbdb82f0d50866442c9e95317b3176c8ee067def27d764529973fb36420a\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/ScalarEvent.sol\":{\"keccak256\":\"0xb8113f1a3f63ec0b6ae2d1a833fbffcf2b2af9470d4d7591d8e2c2784a163b32\",\"urls\":[\"bzzr://feb468d84fdda273585ba31abbbf8cceb906df5a9142695ec30c98f000a05bd4\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Oracles/Oracle.sol\":{\"keccak256\":\"0xf4d12f4a59c17e66dfa6791188f621a8914e2038a4e3f72d6fc9fb903ca8e18e\",\"urls\":[\"bzzr://a477ccd203e677cc904b1a4f8fcc85251c5b5e09c5c10eed27e01318584b16d1\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Tokens/OutcomeToken.sol\":{\"keccak256\":\"0x3d4c9ec14a60cf7577d366da5116e919a4331da8d6d993174f7d599f84ae74e0\",\"urls\":[\"bzzr://20f87450259a3af24ff1769faa9ab3b714d01921e9d8fa4efa75a0c277837a8a\"]},\"@gnosis.pm/util-contracts/contracts/Proxy.sol\":{\"keccak256\":\"0xeab0e83a9ec9e7f052c0455a11577061ec6d1994db08dae429abd6faaabf6555\",\"urls\":[\"bzzr://b2c1273d4ec30e2f9e768eea8c510f8493a7359b03e01923d93eea86b57ec145\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x852793a3c2f86d336a683b30d688ec3dcfc57451af5a2bf5975cda3b7191a901\",\"urls\":[\"bzzr://07fb42206812a17c1f71e548cfa5cec6f9aa1ae0ca5df870718ca4aa9759d1a5\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzzr://aa8b45b57edafc3d67bc5d916327ea16807fae33f753ca163ae0c4061b789766\"]}},\"version\":1}", "bytecode": "0x608060405234801561001057600080fd5b50611674806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80638abe59ea116100ad578063b09ad8a011610071578063b09ad8a014610415578063b2016bd414610433578063ccdf68f31461047d578063e96e59501461049f578063f21a1468146104bd57610121565b80638abe59ea146102fd578063a384d6ff1461036b578063a619486e14610389578063a871da91146103d3578063ad0b2bec146103f757610121565b806369c19d4c116100f457806369c19d4c146101a05780636e5452fe146102395780636fb1edcd146102615780637dc0d1d01461028f5780637dc8f086146102d957610121565b80630537665d1461012657806327793f871461013057806328da850b1461014e578063561cce0a1461017c575b600080fd5b61012e61051c565b005b6101386106e0565b6040518082815260200191505060405180910390f35b61017a6004803603602081101561016457600080fd5b81019080803590602001909291905050506106e6565b005b610184610955565b604051808260ff1660ff16815260200191505060405180910390f35b6101e2600480360360208110156101b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061095a565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561022557808201518184015260208101905061020a565b505050509050019250505060405180910390f35b610241610ac5565b604051808262ffffff1662ffffff16815260200191505060405180910390f35b61028d6004803603602081101561027757600080fd5b8101908080359060200190929190505050610acc565b005b610297610d07565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102e1610d2d565b604051808260ff1660ff16815260200191505060405180910390f35b6103296004803603602081101561031357600080fd5b8101908080359060200190929190505050610d3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610373610d76565b6040518082815260200191505060405180910390f35b610391610d7c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103db610da1565b604051808260ff1660ff16815260200191505060405180910390f35b6103ff610da6565b6040518082815260200191505060405180910390f35b61041d611360565b6040518082815260200191505060405180910390f35b61043b611366565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61048561138c565b604051808215151515815260200191505060405180910390f35b6104a761139f565b6040518082815260200191505060405180910390f35b6104c561148b565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156105085780820151818401526020810190506104ed565b505050509050019250505060405180910390f35b600260149054906101000a900460ff161580156105d85750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ccdf68f36040518163ffffffff1660e01b815260040160206040518083038186803b15801561059c57600080fd5b505afa1580156105b0573d6000803e3d6000fd5b505050506040513d60208110156105c657600080fd5b81019080805190602001909291905050505b6105e157600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637e7e4b476040518163ffffffff1660e01b815260040160206040518083038186803b15801561064957600080fd5b505afa15801561065d573d6000803e3d6000fd5b505050506040513d602081101561067357600080fd5b81019080805190602001909291905050506003819055506001600260146101000a81548160ff0219169083151502179055507fb1aaa9f4484acc283375c8e495a44766e4026170797dc9280b4ae2ab5632fb716003546040518082815260200191505060405180910390a1565b60035481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156107c357600080fd5b505af11580156107d7573d6000803e3d6000fd5b505050506040513d60208110156107ed57600080fd5b810190808051906020019092919050505061080757600080fd5b60008090505b6004805490508160ff1610156109035760048160ff168154811061082d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663867904b433846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156108de57600080fd5b505af11580156108f2573d6000803e3d6000fd5b50505050808060010191505061080d565b503373ffffffffffffffffffffffffffffffffffffffff167fad2a02292986148558019ae4abf172732228e32e131a91d3fa7e0cada61932c0826040518082815260200191505060405180910390a250565b600181565b60606004805490506040519080825280602002602001820160405280156109905781602001602082028038833980820191505090505b50905060008090505b81518160ff161015610abf5760048160ff16815481106109b557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b8101908080519060200190929190505050828260ff1681518110610aa657fe5b6020026020010181815250508080600101915050610999565b50919050565b620f424081565b60008090505b6004805490508160ff161015610bc85760048160ff1681548110610af257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eac449d933846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610ba357600080fd5b505af1158015610bb7573d6000803e3d6000fd5b505050508080600101915050610ad2565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c7257600080fd5b505af1158015610c86573d6000803e3d6000fd5b505050506040513d6020811015610c9c57600080fd5b8101908080519060200190929190505050610cb657600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7ac9271efd660c24459c447459e46f7366d2b4a692e572f108619d0d7273fcc5826040518082815260200191505060405180910390a250565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600480549050905090565b60048181548110610d4757fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081565b6000600260149054906101000a900460ff16610dc157600080fd5b60006005546003541215610dd85760009050610e13565b6006546003541315610def57620f42409050610e12565b6005546006540360055460035403620f424062ffffff160281610e0e57fe5b0590505b5b600081620f42400362ffffff169050600081620f424062ffffff1603905060006004600060ff1681548110610e4457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610eeb57600080fd5b505afa158015610eff573d6000803e3d6000fd5b505050506040513d6020811015610f1557600080fd5b8101908080519060200190929190505050905060006004600160ff1681548110610f3b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fe257600080fd5b505afa158015610ff6573d6000803e3d6000fd5b505050506040513d602081101561100c57600080fd5b81019080805190602001909291905050509050620f424062ffffff1661105f61103e858461151990919063ffffffff16565b611051878661151990919063ffffffff16565b61159f90919063ffffffff16565b8161106657fe5b0495506004600060ff168154811061107a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eac449d933846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561112b57600080fd5b505af115801561113f573d6000803e3d6000fd5b505050506004600160ff168154811061115457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eac449d933836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561120557600080fd5b505af1158015611219573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33886040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156112c657600080fd5b505af11580156112da573d6000803e3d6000fd5b505050506040513d60208110156112f057600080fd5b810190808051906020019092919050505061130a57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f2fe921bb50a459800ae7eae7c0124e9e875094a539eb7dc5b3f728017347e0fb876040518082815260200191505060405180910390a2505050505090565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600554600654604051602001808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200194505050505060405160208183030381529060405280519060200120905090565b6060600480548060200260200160405190810160405280929190818152602001828054801561150f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116114c5575b5050505050905090565b60008083141561152c5760009050611599565b600082840290508284828161153d57fe5b0414611594576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806116286021913960400191505060405180910390fd5b809150505b92915050565b60008082840190508381101561161d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a165627a7a72305820605601e8fe6e567cbfbb5d9ef766ae2b2ab6b145c83a3e28edf5371799f78c9f0029", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c80638abe59ea116100ad578063b09ad8a011610071578063b09ad8a014610415578063b2016bd414610433578063ccdf68f31461047d578063e96e59501461049f578063f21a1468146104bd57610121565b80638abe59ea146102fd578063a384d6ff1461036b578063a619486e14610389578063a871da91146103d3578063ad0b2bec146103f757610121565b806369c19d4c116100f457806369c19d4c146101a05780636e5452fe146102395780636fb1edcd146102615780637dc0d1d01461028f5780637dc8f086146102d957610121565b80630537665d1461012657806327793f871461013057806328da850b1461014e578063561cce0a1461017c575b600080fd5b61012e61051c565b005b6101386106e0565b6040518082815260200191505060405180910390f35b61017a6004803603602081101561016457600080fd5b81019080803590602001909291905050506106e6565b005b610184610955565b604051808260ff1660ff16815260200191505060405180910390f35b6101e2600480360360208110156101b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061095a565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561022557808201518184015260208101905061020a565b505050509050019250505060405180910390f35b610241610ac5565b604051808262ffffff1662ffffff16815260200191505060405180910390f35b61028d6004803603602081101561027757600080fd5b8101908080359060200190929190505050610acc565b005b610297610d07565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102e1610d2d565b604051808260ff1660ff16815260200191505060405180910390f35b6103296004803603602081101561031357600080fd5b8101908080359060200190929190505050610d3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610373610d76565b6040518082815260200191505060405180910390f35b610391610d7c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103db610da1565b604051808260ff1660ff16815260200191505060405180910390f35b6103ff610da6565b6040518082815260200191505060405180910390f35b61041d611360565b6040518082815260200191505060405180910390f35b61043b611366565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61048561138c565b604051808215151515815260200191505060405180910390f35b6104a761139f565b6040518082815260200191505060405180910390f35b6104c561148b565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156105085780820151818401526020810190506104ed565b505050509050019250505060405180910390f35b600260149054906101000a900460ff161580156105d85750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ccdf68f36040518163ffffffff1660e01b815260040160206040518083038186803b15801561059c57600080fd5b505afa1580156105b0573d6000803e3d6000fd5b505050506040513d60208110156105c657600080fd5b81019080805190602001909291905050505b6105e157600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637e7e4b476040518163ffffffff1660e01b815260040160206040518083038186803b15801561064957600080fd5b505afa15801561065d573d6000803e3d6000fd5b505050506040513d602081101561067357600080fd5b81019080805190602001909291905050506003819055506001600260146101000a81548160ff0219169083151502179055507fb1aaa9f4484acc283375c8e495a44766e4026170797dc9280b4ae2ab5632fb716003546040518082815260200191505060405180910390a1565b60035481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156107c357600080fd5b505af11580156107d7573d6000803e3d6000fd5b505050506040513d60208110156107ed57600080fd5b810190808051906020019092919050505061080757600080fd5b60008090505b6004805490508160ff1610156109035760048160ff168154811061082d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663867904b433846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156108de57600080fd5b505af11580156108f2573d6000803e3d6000fd5b50505050808060010191505061080d565b503373ffffffffffffffffffffffffffffffffffffffff167fad2a02292986148558019ae4abf172732228e32e131a91d3fa7e0cada61932c0826040518082815260200191505060405180910390a250565b600181565b60606004805490506040519080825280602002602001820160405280156109905781602001602082028038833980820191505090505b50905060008090505b81518160ff161015610abf5760048160ff16815481106109b557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b8101908080519060200190929190505050828260ff1681518110610aa657fe5b6020026020010181815250508080600101915050610999565b50919050565b620f424081565b60008090505b6004805490508160ff161015610bc85760048160ff1681548110610af257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eac449d933846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610ba357600080fd5b505af1158015610bb7573d6000803e3d6000fd5b505050508080600101915050610ad2565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c7257600080fd5b505af1158015610c86573d6000803e3d6000fd5b505050506040513d6020811015610c9c57600080fd5b8101908080519060200190929190505050610cb657600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7ac9271efd660c24459c447459e46f7366d2b4a692e572f108619d0d7273fcc5826040518082815260200191505060405180910390a250565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600480549050905090565b60048181548110610d4757fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081565b6000600260149054906101000a900460ff16610dc157600080fd5b60006005546003541215610dd85760009050610e13565b6006546003541315610def57620f42409050610e12565b6005546006540360055460035403620f424062ffffff160281610e0e57fe5b0590505b5b600081620f42400362ffffff169050600081620f424062ffffff1603905060006004600060ff1681548110610e4457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610eeb57600080fd5b505afa158015610eff573d6000803e3d6000fd5b505050506040513d6020811015610f1557600080fd5b8101908080519060200190929190505050905060006004600160ff1681548110610f3b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fe257600080fd5b505afa158015610ff6573d6000803e3d6000fd5b505050506040513d602081101561100c57600080fd5b81019080805190602001909291905050509050620f424062ffffff1661105f61103e858461151990919063ffffffff16565b611051878661151990919063ffffffff16565b61159f90919063ffffffff16565b8161106657fe5b0495506004600060ff168154811061107a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eac449d933846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561112b57600080fd5b505af115801561113f573d6000803e3d6000fd5b505050506004600160ff168154811061115457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eac449d933836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561120557600080fd5b505af1158015611219573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33886040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156112c657600080fd5b505af11580156112da573d6000803e3d6000fd5b505050506040513d60208110156112f057600080fd5b810190808051906020019092919050505061130a57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f2fe921bb50a459800ae7eae7c0124e9e875094a539eb7dc5b3f728017347e0fb876040518082815260200191505060405180910390a2505050505090565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600554600654604051602001808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200194505050505060405160208183030381529060405280519060200120905090565b6060600480548060200260200160405190810160405280929190818152602001828054801561150f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116114c5575b5050505050905090565b60008083141561152c5760009050611599565b600082840290508284828161153d57fe5b0414611594576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806116286021913960400191505060405180910390fd5b809150505b92915050565b60008082840190508381101561161d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a165627a7a72305820605601e8fe6e567cbfbb5d9ef766ae2b2ab6b145c83a3e28edf5371799f78c9f0029", "sourceMap": "1816:1913:3:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1816:1913:3;;;;;;;", "deployedSourceMap": "1816:1913:3:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1816:1913:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2361:328:1;;;:::i;:::-;;748:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1206:475;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1206:475:1;;;;;;;;;;;;;;;;;:::i;:::-;;214:30:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3223:362:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3223:362:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3223:362:1;;;;;;;;;;;;;;;;;250:46:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1864:451:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1864:451:1;;;;;;;;;;;;;;;;;:::i;:::-;;692:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2760:134;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;772:35;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;772:35:1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;334:21:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;205:25:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;177:31:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2056:1409;;;:::i;:::-;;;;;;;;;;;;;;;;;;;361:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;658:28:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;718:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3545:182:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2973:137:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2973:137:1;;;;;;;;;;;;;;;;;2361:328;2504:12;;;;;;;;;;;2503:13;:38;;;;;2520:6;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2520:21:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2520:21:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2520:21:1;;;;;;;;;;;;;;;;2503:38;2495:47;;;;;;2593:6;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2593:19:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2593:19:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2593:19:1;;;;;;;;;;;;;;;;2583:7;:29;;;;2637:4;2622:12;;:19;;;;;;;;;;;;;;;;;;2656:26;2674:7;;2656:26;;;;;;;;;;;;;;;;;;2361:328::o;748:18::-;;;;:::o;1206:475::-;1351:15;;;;;;;;;;;:28;;;1380:10;1400:4;1407:20;1351:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1351:77:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1351:77:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1351:77:1;;;;;;;;;;;;;;;;1343:86;;;;;;1490:7;1500:1;1490:11;;1485:117;1507:13;:20;;;;1503:1;:24;;;1485:117;;;1546:13;1560:1;1546:16;;;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;1569:10;1581:20;1546:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1546:56:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1546:56:1;;;;1529:3;;;;;;;1485:117;;;;1641:10;1617:57;;;1653:20;1617:57;;;;;;;;;;;;;;;;;;1206:475;:::o;214:30:3:-;243:1;214:30;:::o;3223:362:1:-;3320:38;3412:13;:20;;;;3401:32;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;3401:32:1;;;;3374:59;;3448:7;3458:1;3448:11;;3443:135;3465:24;:31;3461:1;:35;;;3443:135;;;3545:13;3559:1;3545:16;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;3572:5;3545:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3545:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3545:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3545:33:1;;;;;;;;;;;;;;;;3515:24;3540:1;3515:27;;;;;;;;;;;;;;;:63;;;;;3498:3;;;;;;;3443:135;;;;3223:362;;;:::o;250:46:3:-;289:7;250:46;:::o;1864:451:1:-;2005:7;2015:1;2005:11;;2000:115;2022:13;:20;;;;2018:1;:24;;;2000:115;;;2061:13;2075:1;2061:16;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;2085:10;2097:17;2061:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2061:54:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2061:54:1;;;;2044:3;;;;;;;2000:115;;;;2181:15;;;;;;;;;;;:24;;;2206:10;2218:17;2181:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2181:55:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2181:55:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2181:55:1;;;;;;;;;;;;;;;;2173:64;;;;;;2278:10;2252:56;;;2290:17;2252:56;;;;;;;;;;;;;;;;;;1864:451;:::o;692:20::-;;;;;;;;;;;;;:::o;2760:134::-;2832:5;2866:13;:20;;;;2853:34;;2760:134;:::o;772:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;334:21:3:-;;;;:::o;205:25:29:-;;;;;;;;;;;;;:::o;177:31:3:-;207:1;177:31;:::o;2056:1409::-;2114:13;2192:12;;;;;;;;;;;2184:21;;;;;;2245:30;2352:10;;2342:7;;:20;2338:378;;;2402:1;2376:27;;2338:378;;;2486:10;;2476:7;;:20;2472:244;;;289:7;2510:39;;2472:244;;;2704:10;;2691;;:23;2676:10;;2666:7;;:20;289:7;2649:38;;;:66;;;;;;2616:100;;2472:244;2338:378;2726:16;2761:23;289:7;2745:39;2726:58;;;;2794:15;2828:11;289:7;2812:27;;;2794:45;;2849:27;2879:13;207:1;2879:20;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;2910:10;2879:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2879:42:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2879:42:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2879:42:3;;;;;;;;;;;;;;;;2849:72;;2931:26;2960:13;243:1;2960:19;;;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;2990:10;2960:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2960:41:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2960:41:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2960:41:3;;;;;;;;;;;;;;;;2931:70;;289:7;3022:98;;:82;3066:37;3092:10;3066:21;:25;;:37;;;;:::i;:::-;3022:39;3049:11;3022:22;:26;;:39;;;;:::i;:::-;:43;;:82;;;;:::i;:::-;:98;;;;;;3011:109;;3167:13;207:1;3167:20;;;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;3195:10;3207:22;3167:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3167:63:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3167:63:3;;;;3240:13;243:1;3240:19;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;3267:10;3279:21;3240:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3240:61:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3240:61:3;;;;3356:15;;;;;;;;;;;:24;;;3381:10;3393:8;3356:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3356:46:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3356:46:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3356:46:3;;;;;;;;;;;;;;;;3348:55;;;;;;3437:10;3418:40;;;3449:8;3418:40;;;;;;;;;;;;;;;;;;2056:1409;;;;;;:::o;361:21::-;;;;:::o;658:28:1:-;;;;;;;;;;;;;:::o;718:24::-;;;;;;;;;;;;;:::o;3545:182:3:-;3614:7;3671:15;;;;;;;;;;;3688:6;;;;;;;;;;;3696:10;;3708;;3654:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3654:65:3;;;3644:76;;;;;;3637:83;;3545:182;:::o;2973:137:1:-;3046:21;3090:13;3083:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2973:137;:::o;1693:458:32:-;1751:7;1996:1;1991;:6;1987:45;;;2020:1;2013:8;;;;1987:45;2042:9;2058:1;2054;:5;2042:17;;2086:1;2081;2077;:5;;;;;;:10;2069:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2143:1;2136:8;;;1693:458;;;;;:::o;834:176::-;892:7;911:9;927:1;923;:5;911:17;;951:1;946;:6;;938:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;995:8;;;834:176;;;;:::o", "source": "pragma solidity ^0.5.0;\nimport \"../Events/Event.sol\";\nimport \"@gnosis.pm/util-contracts/contracts/Proxy.sol\";\n\n\ncontract ScalarEventData {\n\n /*\n * Constants\n */\n uint8 public constant SHORT = 0;\n uint8 public constant LONG = 1;\n uint24 public constant OUTCOME_RANGE = 1000000;\n\n /*\n * Storage\n */\n int public lowerBound;\n int public upperBound;\n}\n\ncontract ScalarEventProxy is Proxy, EventData, ScalarEventData {\n\n /// @dev Contract constructor validates and sets basic event properties\n /// @param _collateralToken Tokens used as collateral in exchange for outcome tokens\n /// @param _oracle Oracle contract used to resolve the event\n /// @param _lowerBound Lower bound for event outcome\n /// @param _upperBound Lower bound for event outcome\n constructor(\n address proxied,\n address outcomeTokenMasterCopy,\n ERC20 _collateralToken,\n Oracle _oracle,\n int _lowerBound,\n int _upperBound\n )\n Proxy(proxied)\n public\n {\n // Validate input\n require(address(_collateralToken) != address(0) && address(_oracle) != address(0));\n collateralToken = _collateralToken;\n oracle = _oracle;\n // Create an outcome token for each outcome\n for (uint8 i = 0; i < 2; i++) {\n OutcomeToken outcomeToken = OutcomeToken(address(new OutcomeTokenProxy(outcomeTokenMasterCopy)));\n outcomeTokens.push(outcomeToken);\n emit OutcomeTokenCreation(outcomeToken, i);\n }\n\n // Validate bounds\n require(_upperBound > _lowerBound);\n lowerBound = _lowerBound;\n upperBound = _upperBound;\n }\n}\n\n/// @title Scalar event contract - Scalar events resolve to a number within a range\n/// @author Stefan George - <stefan@gnosis.pm>\ncontract ScalarEvent is Proxied, Event, ScalarEventData {\n using SafeMath for *;\n\n /*\n * Public functions\n */\n /// @dev Exchanges sender's winning outcome tokens for collateral tokens\n /// @return Sender's winnings\n function redeemWinnings()\n public\n returns (uint winnings)\n {\n // Winning outcome has to be set\n require(isOutcomeSet);\n // Calculate winnings\n uint24 convertedWinningOutcome;\n // Outcome is lower than defined lower bound\n if (outcome < lowerBound)\n convertedWinningOutcome = 0;\n // Outcome is higher than defined upper bound\n else if (outcome > upperBound)\n convertedWinningOutcome = OUTCOME_RANGE;\n // Map outcome to outcome range\n else\n convertedWinningOutcome = uint24(OUTCOME_RANGE * (outcome - lowerBound) / (upperBound - lowerBound));\n uint factorShort = OUTCOME_RANGE - convertedWinningOutcome;\n uint factorLong = OUTCOME_RANGE - factorShort;\n uint shortOutcomeTokenCount = outcomeTokens[SHORT].balanceOf(msg.sender);\n uint longOutcomeTokenCount = outcomeTokens[LONG].balanceOf(msg.sender);\n winnings = shortOutcomeTokenCount.mul(factorShort).add(longOutcomeTokenCount.mul(factorLong)) / OUTCOME_RANGE;\n // Revoke all outcome tokens\n outcomeTokens[SHORT].revoke(msg.sender, shortOutcomeTokenCount);\n outcomeTokens[LONG].revoke(msg.sender, longOutcomeTokenCount);\n // Payout winnings to sender\n require(collateralToken.transfer(msg.sender, winnings));\n emit WinningsRedemption(msg.sender, winnings);\n }\n\n /// @dev Calculates and returns event hash\n /// @return Event hash\n function getEventHash()\n public\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(collateralToken, oracle, lowerBound, upperBound));\n }\n}\n", "sourcePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/ScalarEvent.sol", "ast": { "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/ScalarEvent.sol", "exportedSymbols": { "ScalarEvent": [ 870 ], "ScalarEventData": [ 620 ], "ScalarEventProxy": [ 720 ] }, "id": 871, "nodeType": "SourceUnit", "nodes": [ { "id": 604, "literals": [ "solidity", "^", "0.5", ".0" ], "nodeType": "PragmaDirective", "src": "0:23:3" }, { "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/Event.sol", "file":