UNPKG

@levelk/token-price-oracles

Version:

tools for creating token price data feeds and oracles that integrate with on-chain dex's

464 lines 146 kB
{ "contractName": "TokenPriceDataFeed", "abi": [ { "constant": true, "inputs": [ { "name": "startIndex", "type": "uint256" }, { "name": "endIndex", "type": "uint256" } ], "name": "medianizeByIndices", "outputs": [ { "name": "medianValue", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "_date", "type": "uint256" } ], "name": "dateHasResult", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "dataSource", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "token2", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "exchangeAdapter", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "_index", "type": "uint256" } ], "name": "resultByIndex", "outputs": [ { "name": "", "type": "bytes32" }, { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "latestResult", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "latestResultDate", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_result", "type": "bytes32" }, { "name": "_date", "type": "uint256" } ], "name": "setResult", "outputs": [ { "name": "index", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "_date", "type": "uint256" } ], "name": "resultByDate", "outputs": [ { "name": "", "type": "bytes32" }, { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "totalResults", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "startDate", "type": "uint256" }, { "name": "endDate", "type": "uint256" } ], "name": "medianizeByTimeframe", "outputs": [ { "name": "medianValue", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "token1", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "_index", "type": "uint256" } ], "name": "indexHasResult", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "_result", "type": "bytes32" }, { "indexed": false, "name": "_date", "type": "uint256" }, { "indexed": false, "name": "_index", "type": "uint256" }, { "indexed": false, "name": "_sender", "type": "address" } ], "name": "ResultSet", "type": "event" }, { "constant": false, "inputs": [ { "name": "_token1", "type": "address" }, { "name": "_token2", "type": "address" }, { "name": "_exchangeAdapter", "type": "address" } ], "name": "initialize", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_dataSource", "type": "address" } ], "name": "initialize", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [], "name": "logResult", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "viewCurrentResult", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" } ], "bytecode": "0x608060405234801561001057600080fd5b50611ca3806100206000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806307acc14b146101015780631a0ba4f2146101545780631b076edc1461019957806325be124e146101f05780632cbcda251461024757806330adb55d1461029e5780636a2ea57e146102ee5780636e4aa4d0146103215780636f1e84981461034c57806371a1c0ae1461037f57806392549bf214610396578063a25fa35c146103e5578063c0a6ab7914610435578063c0c53b8b14610460578063c2605a64146104e3578063c4d66de814610536578063d21220a714610579578063dab21b63146105d0575b600080fd5b34801561010d57600080fd5b506101366004803603810190808035906020019092919080359060200190929190505050610615565b60405180826000191660001916815260200191505060405180910390f35b34801561016057600080fd5b5061017f60048036038101908080359060200190929190505050610780565b604051808215151515815260200191505060405180910390f35b3480156101a557600080fd5b506101ae61079f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101fc57600080fd5b506102056107c5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025357600080fd5b5061025c6107eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102aa57600080fd5b506102c960048036038101908080359060200190929190505050610811565b6040518083600019166000191681526020018281526020019250505060405180910390f35b3480156102fa57600080fd5b506103036108e1565b60405180826000191660001916815260200191505060405180910390f35b34801561032d57600080fd5b5061033661091c565b6040518082815260200191505060405180910390f35b34801561035857600080fd5b50610361610944565b60405180826000191660001916815260200191505060405180910390f35b34801561038b57600080fd5b50610394610abe565b005b3480156103a257600080fd5b506103cf600480360381019080803560001916906020019092919080359060200190929190505050610cf3565b6040518082815260200191505060405180910390f35b3480156103f157600080fd5b5061041060048036038101908080359060200190929190505050610eb1565b6040518083600019166000191681526020018281526020019250505060405180910390f35b34801561044157600080fd5b5061044a610f62565b6040518082815260200191505060405180910390f35b34801561046c57600080fd5b506104e1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f72565b005b3480156104ef57600080fd5b5061051860048036038101908080359060200190929190803590602001909291905050506111c1565b60405180826000191660001916815260200191505060405180910390f35b34801561054257600080fd5b50610577600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611476565b005b34801561058557600080fd5b5061058e6116ce565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105dc57600080fd5b506105fb600480360381019080803590602001909291905050506116f4565b604051808215151515815260200191505060405180910390f35b60006060808385111515156106b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001807f7374617274496e646578206d757374206265206c657373207468616e206f722081526020017f657175616c20746f20656e64496e64657800000000000000000000000000000081525060400191505060405180910390fd5b600085111515610756576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f7374617274496e646578206d7573742062652067726561746572207468616e2081526020017f300000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610760858561177c565b915061076b82611828565b905061077681611a70565b9250505092915050565b6000806035600084815260200190815260200160002054119050919050565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061081d836116f4565b1515610891576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f20726573756c742073657420666f72205f696e646578000000000000000081525060200191505060405180910390fd5b603460006033858154811015156108a457fe5b90600052602060002001548152602001908152602001600020546033848154811015156108cd57fe5b906000526020600020015491509150915091565b60006034600060336108f1610f62565b8154811015156108fd57fe5b9060005260206000200154815260200190815260200160002054905090565b60006033610928610f62565b81548110151561093457fe5b9060005260206000200154905090565b6000603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aaaa795603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015610a7b57600080fd5b505af1158015610a8f573d6000803e3d6000fd5b505050506040513d6020811015610aa557600080fd5b8101908080519060200190929190505050600102905090565b6000603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aaaa795603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b505050506040513d6020811015610c1f57600080fd5b810190808051906020019092919050505090503073ffffffffffffffffffffffffffffffffffffffff166392549bf282600102426040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050506040513d6020811015610cde57600080fd5b81019080805190602001909291905050505050565b6000603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610de0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f5468652063616c6c6572206973206e6f7420746865206461746120736f75726381526020017f650000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81428111151515610e59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f446174652063616e6e6f7420626520696e20746865206675747572650000000081525060200191505060405180910390fd5b60006033805490501115610e96576033610e71610f62565b815481101515610e7d57fe5b906000526020600020015483111515610e9557600080fd5b5b610ea08484611abc565b610ea8610f62565b91505092915050565b600080610ebd83610780565b1515610f31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f20726573756c742073657420666f72205f6461746500000000000000000081525060200191505060405180910390fd5b6034600084815260200190815260200160002054603560008581526020019081526020016000205491509150915091565b6000600160338054905003905090565b8073ffffffffffffffffffffffffffffffffffffffff1663d6e7444d84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561104157600080fd5b505af1158015611055573d6000803e3d6000fd5b505050506040513d602081101561106b57600080fd5b810190808051906020019092919050505015156110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f746f6b656e207061697220646f6573206e6f742065786973740000000000000081525060200191505060405180910390fd5b82603760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081603860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080603960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506111bc30611476565b505050565b60008060008060008587101515611266576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f737461727444617465206d757374206265206c657373207468616e20656e644481526020017f617465000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016033805490500391505b6000821180156112825750600084145b156112bb578560338381548110151561129757fe5b90600052602060002001541115156112ad578193505b818060019003925050611272565b600084111515611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6461746573206f757473696465206f662072616e6765206f662064617461666581526020017f656420726573756c74730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8660338581548110151561136957fe5b906000526020600020015410151515611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6461746573206f757473696465206f662072616e6765206f662064617461666581526020017f656420726573756c74730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8390505b600081101580156114255750600083145b15611460578660338281548110151561143a57fe5b90600052602060002001541015611452576001810192505b808060019003915050611414565b61146a8385610615565b94505050505092915050565b60008060019054906101000a900460ff16806114965750611495611bbb565b5b806114ad57506000809054906101000a900460ff16155b1515611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f436f6e747261637420696e7374616e63652068617320616c726561647920626581526020017f656e20696e697469616c697a656400000000000000000000000000000000000081525060400191505060405180910390fd5b600060019054906101000a900460ff161590508015611596576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5f64617461536f757263652063616e6e6f74206265206164647265737328302981525060200191505060405180910390fd5b81603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060336000908060018154018082558091505090600182039060005260206000200160009091929091909150555080156116ca5760008060016101000a81548160ff0219169083151502179055505b5050565b603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808211151561176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f5f696e646578206d7573742062652067726561746572207468616e203000000081525060200191505060405180910390fd5b81603380549050119050919050565b6060600060606000806001878703019350836040519080825280602002602001820160405280156117bc5781602001602082028038833980820191505090505b509250600091508690505b858111151561181b576033818154811015156117df57fe5b906000526020600020015483838151811015156117f857fe5b9060200190602002018181525050818060010192505080806001019150506117c7565b8294505050505092915050565b6060600080600080600080600061184a60028a51611bcc90919063ffffffff16565b96506000955061186560018a51611bf690919063ffffffff16565b94505b84861015611a615761189660026118888789611c1790919063ffffffff16565b611bcc90919063ffffffff16565b935088848151811015156118a657fe5b90602001906020020151925088858151811015156118c057fe5b9060200190602002015189858151811015156118d857fe5b906020019060200201518a868151811015156118f057fe5b9060200190602002018b8881518110151561190757fe5b906020019060200201828152508281525050508591508590505b848110156119cd5761194a898281518110151561193a57fe5b9060200190602002015184611c38565b156119c057888181518110151561195d57fe5b90602001906020020151898381518110151561197557fe5b906020019060200201518a8481518110151561198d57fe5b9060200190602002018b848151811015156119a457fe5b9060200190602002018281525082815250505081806001019250505b8080600101915050611921565b88858151811015156119db57fe5b9060200190602002015189838151811015156119f357fe5b906020019060200201518a84815181101515611a0b57fe5b9060200190602002018b88815181101515611a2257fe5b9060200190602002018281525082815250505086821015611a5857611a51600183611c1790919063ffffffff16565b9550611a5c565b8194505b611868565b88975050505050505050919050565b600080600060028451811515611a8257fe5b0491508382815181101515611a9357fe5b906020019060200201519050603460008281526020019081526020016000205492505050919050565b816034600083815260200190815260200160002081600019169055506033819080600181540180825580915050906001820390600052602060002001600090919290919091505550611b0c610f62565b6035600083815260200190815260200160002081905550611b2d8282611c73565b7f441cd35745cc95136f39641bf16b52089bd7e481d97d7db059792befa3caec198282611b58610f62565b336040518085600019166000191681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a15050565b600080303b90506000811491505090565b600080600083111515611bde57600080fd5b8284811515611be957fe5b0490508091505092915050565b600080838311151515611c0857600080fd5b82840390508091505092915050565b6000808284019050838110151515611c2e57600080fd5b8091505092915050565b600060346000838152602001908152602001600020546001900460346000858152602001908152602001600020546001900410905092915050565b50505600a165627a7a72305820229d59cff97483188e4f5407c14d921953d2d030adeb5e4dedef366296c037e50029", "deployedBytecode": "0x6080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806307acc14b146101015780631a0ba4f2146101545780631b076edc1461019957806325be124e146101f05780632cbcda251461024757806330adb55d1461029e5780636a2ea57e146102ee5780636e4aa4d0146103215780636f1e84981461034c57806371a1c0ae1461037f57806392549bf214610396578063a25fa35c146103e5578063c0a6ab7914610435578063c0c53b8b14610460578063c2605a64146104e3578063c4d66de814610536578063d21220a714610579578063dab21b63146105d0575b600080fd5b34801561010d57600080fd5b506101366004803603810190808035906020019092919080359060200190929190505050610615565b60405180826000191660001916815260200191505060405180910390f35b34801561016057600080fd5b5061017f60048036038101908080359060200190929190505050610780565b604051808215151515815260200191505060405180910390f35b3480156101a557600080fd5b506101ae61079f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101fc57600080fd5b506102056107c5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025357600080fd5b5061025c6107eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102aa57600080fd5b506102c960048036038101908080359060200190929190505050610811565b6040518083600019166000191681526020018281526020019250505060405180910390f35b3480156102fa57600080fd5b506103036108e1565b60405180826000191660001916815260200191505060405180910390f35b34801561032d57600080fd5b5061033661091c565b6040518082815260200191505060405180910390f35b34801561035857600080fd5b50610361610944565b60405180826000191660001916815260200191505060405180910390f35b34801561038b57600080fd5b50610394610abe565b005b3480156103a257600080fd5b506103cf600480360381019080803560001916906020019092919080359060200190929190505050610cf3565b6040518082815260200191505060405180910390f35b3480156103f157600080fd5b5061041060048036038101908080359060200190929190505050610eb1565b6040518083600019166000191681526020018281526020019250505060405180910390f35b34801561044157600080fd5b5061044a610f62565b6040518082815260200191505060405180910390f35b34801561046c57600080fd5b506104e1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f72565b005b3480156104ef57600080fd5b5061051860048036038101908080359060200190929190803590602001909291905050506111c1565b60405180826000191660001916815260200191505060405180910390f35b34801561054257600080fd5b50610577600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611476565b005b34801561058557600080fd5b5061058e6116ce565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105dc57600080fd5b506105fb600480360381019080803590602001909291905050506116f4565b604051808215151515815260200191505060405180910390f35b60006060808385111515156106b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001807f7374617274496e646578206d757374206265206c657373207468616e206f722081526020017f657175616c20746f20656e64496e64657800000000000000000000000000000081525060400191505060405180910390fd5b600085111515610756576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f7374617274496e646578206d7573742062652067726561746572207468616e2081526020017f300000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610760858561177c565b915061076b82611828565b905061077681611a70565b9250505092915050565b6000806035600084815260200190815260200160002054119050919050565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061081d836116f4565b1515610891576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f20726573756c742073657420666f72205f696e646578000000000000000081525060200191505060405180910390fd5b603460006033858154811015156108a457fe5b90600052602060002001548152602001908152602001600020546033848154811015156108cd57fe5b906000526020600020015491509150915091565b60006034600060336108f1610f62565b8154811015156108fd57fe5b9060005260206000200154815260200190815260200160002054905090565b60006033610928610f62565b81548110151561093457fe5b9060005260206000200154905090565b6000603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aaaa795603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015610a7b57600080fd5b505af1158015610a8f573d6000803e3d6000fd5b505050506040513d6020811015610aa557600080fd5b8101908080519060200190929190505050600102905090565b6000603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aaaa795603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b505050506040513d6020811015610c1f57600080fd5b810190808051906020019092919050505090503073ffffffffffffffffffffffffffffffffffffffff166392549bf282600102426040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050506040513d6020811015610cde57600080fd5b81019080805190602001909291905050505050565b6000603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610de0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f5468652063616c6c6572206973206e6f7420746865206461746120736f75726381526020017f650000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81428111151515610e59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f446174652063616e6e6f7420626520696e20746865206675747572650000000081525060200191505060405180910390fd5b60006033805490501115610e96576033610e71610f62565b815481101515610e7d57fe5b906000526020600020015483111515610e9557600080fd5b5b610ea08484611abc565b610ea8610f62565b91505092915050565b600080610ebd83610780565b1515610f31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f20726573756c742073657420666f72205f6461746500000000000000000081525060200191505060405180910390fd5b6034600084815260200190815260200160002054603560008581526020019081526020016000205491509150915091565b6000600160338054905003905090565b8073ffffffffffffffffffffffffffffffffffffffff1663d6e7444d84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561104157600080fd5b505af1158015611055573d6000803e3d6000fd5b505050506040513d602081101561106b57600080fd5b810190808051906020019092919050505015156110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f746f6b656e207061697220646f6573206e6f742065786973740000000000000081525060200191505060405180910390fd5b82603760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081603860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080603960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506111bc30611476565b505050565b60008060008060008587101515611266576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f737461727444617465206d757374206265206c657373207468616e20656e644481526020017f617465000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016033805490500391505b6000821180156112825750600084145b156112bb578560338381548110151561129757fe5b90600052602060002001541115156112ad578193505b818060019003925050611272565b600084111515611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6461746573206f757473696465206f662072616e6765206f662064617461666581526020017f656420726573756c74730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8660338581548110151561136957fe5b906000526020600020015410151515611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6461746573206f757473696465206f662072616e6765206f662064617461666581526020017f656420726573756c74730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8390505b600081101580156114255750600083145b15611460578660338281548110151561143a57fe5b90600052602060002001541015611452576001810192505b808060019003915050611414565b61146a8385610615565b94505050505092915050565b60008060019054906101000a900460ff16806114965750611495611bbb565b5b806114ad57506000809054906101000a900460ff16155b1515611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f436f6e747261637420696e7374616e63652068617320616c726561647920626581526020017f656e20696e697469616c697a656400000000000000000000000000000000000081525060400191505060405180910390fd5b600060019054906101000a900460ff161590508015611596576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5f64617461536f757263652063616e6e6f74206265206164647265737328302981525060200191505060405180910390fd5b81603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060336000908060018154018082558091505090600182039060005260206000200160009091929091909150555080156116ca5760008060016101000a81548160ff0219169083151502179055505b5050565b603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808211151561176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f5f696e646578206d7573742062652067726561746572207468616e203000000081525060200191505060405180910390fd5b81603380549050119050919050565b6060600060606000806001878703019350836040519080825280602002602001820160405280156117bc5781602001602082028038833980820191505090505b509250600091508690505b858111151561181b576033818154811015156117df57fe5b906000526020600020015483838151811015156117f857fe5b9060200190602002018181525050818060010192505080806001019150506117c7565b8294505050505092915050565b6060600080600080600080600061184a60028a51611bcc90919063ffffffff16565b96506000955061186560018a51611bf690919063ffffffff16565b94505b84861015611a615761189660026118888789611c1790919063ffffffff16565b611bcc90919063ffffffff16565b935088848151811015156118a657fe5b90602001906020020151925088858151811015156118c057fe5b9060200190602002015189858151811015156118d857fe5b906020019060200201518a868151811015156118f057fe5b9060200190602002018b8881518110151561190757fe5b906020019060200201828152508281525050508591508590505b848110156119cd5761194a898281518110151561193a57fe5b9060200190602002015184611c38565b156119c057888181518110151561195d57fe5b90602001906020020151898381518110151561197557fe5b906020019060200201518a8481518110151561198d57fe5b9060200190602002018b848151811015156119a457fe5b9060200190602002018281525082815250505081806001019250505b8080600101915050611921565b88858151811015156119db57fe5b9060200190602002015189838151811015156119f357fe5b906020019060200201518a84815181101515611a0b57fe5b9060200190602002018b88815181101515611a2257fe5b9060200190602002018281525082815250505086821015611a5857611a51600183611c1790919063ffffffff16565b9550611a5c565b8194505b611868565b88975050505050505050919050565b600080600060028451811515611a8257fe5b0491508382815181101515611a9357fe5b906020019060200201519050603460008281526020019081526020016000205492505050919050565b816034600083815260200190815260200160002081600019169055506033819080600181540180825580915050906001820390600052602060002001600090919290919091505550611b0c610f62565b6035600083815260200190815260200160002081905550611b2d8282611c73565b7f441cd35745cc95136f39641bf16b52089bd7e481d97d7db059792befa3caec198282611b58610f62565b336040518085600019166000191681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a15050565b600080303b90506000811491505090565b600080600083111515611bde57600080fd5b8284811515611be957fe5b0490508091505092915050565b600080838311151515611c0857600080fd5b82840390508091505092915050565b6000808284019050838110151515611c2e57600080fd5b8091505092915050565b600060346000838152602001908152602001600020546001900460346000858152602001908152602001600020546001900410905092915050565b50505600a165627a7a72305820229d59cff97483188e4f5407c14d921953d2d030adeb5e4dedef366296c037e50029", "sourceMap": "114:1090:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;114:1090:1;;;;;;;", "deployedSourceMap": "114:1090:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1139:484:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1139:484:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3824:109:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3824:109:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;460:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;460:25:10;;;;;;;;;;;;;;;;;;;;;;;;;;;193:21:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;193:21:1;;;;;;;;;;;;;;;;;;;;;;;;;;;218:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;218:39:1;;;;;;;;;;;;;;;;;;;;;;;;;;;2276:209:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2276:209:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3279:123;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3279:123:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3051:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3051:114:10;;;;;;;;;;;;;;;;;;;;;;;1064:138:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1064:138:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;789:186;;8:9:-1;5:2;;;30:1;27;20:12;5:2;789:186:1;;;;;;1575:290:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1575:290:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2722:203;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2722:203:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1947:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1947:90:10;;;;;;;;;;;;;;;;;;;;;;;262:436:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;262:436:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;213:922:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;213:922:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1138:238:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1138:238:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;168:21:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;168:21:1;;;;;;;;;;;;;;;;;;;;;;;;;;;3526:167:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3526:167:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1139:484:0;1232:19;1418:27;1492:30;1283:8;1269:10;:22;;1261:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1372:1;1359:10;:14;1351:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1448:38;1465:10;1477:8;1448:16;:38::i;:::-;1418:68;;1525:38;1549:13;1525:23;:38::i;:::-;1492:71;;1583:35;1601:16;1583:17;:35::i;:::-;1569:49;;1139:484;;;;;;:::o;3824:109:10:-;3883:4;3926:1;3903:13;:20;3917:5;3903:20;;;;;;;;;;;;:24;3896:31;;3824:109;;;:::o;460:25::-;;;;;;;;;;;;;:::o;193:21:1:-;;;;;;;;;;;;;:::o;218:39::-;;;;;;;;;;;;;:::o;2276:209:10:-;2336:7;2345;2369:22;2384:6;2369:14;:22::i;:::-;2361:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2435:13;:28;2449:5;2455:6;2449:13;;;;;;;;;;;;;;;;;;2435:28;;;;;;;;;;;;2465:5;2471:6;2465:13;;;;;;;;;;;;;;;;;;2427:52;;;;2276:209;;;:::o;3279:123::-;3334:7;3360:13;:36;3374:5;3380:14;:12;:14::i;:::-;3374:21;;;;;;;;;;;;;;;;;;3360:36;;;;;;;;;;;;3353:43;;3279:123;:::o;3051:114::-;3110:7;3137:5;3143:14;:12;:14::i;:::-;3137:21;;;;;;;;;;;;;;;;;;3129:30;;3051:114;:::o;1064:138:1:-;1114:7;1144:15;;;;;;;;;;;:36;;;1181:6;;;;;;;;;;;1189;;;;;;;;;;;1144:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1144:52:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1144:52:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1144:52:1;;;;;;;;;;;;;;;;1136:61;;1129:68;;1064:138;:::o;789:186::-;823:10;836:15;;;;;;;;;;;:36;;;873:6;;;;;;;;;;;881;;;;;;;;;;;836:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;836:52:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;836:52:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;836:52:1;;;;;;;;;;;;;;;;823:65;;913:4;894:34;;;937:5;929:14;;953:15;894:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;894:76:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;894:76:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;894:76:1;;;;;;;;;;;;;;;;;789:186;:::o;1575:290:10:-;1697:13;942:10;;;;;;;;;;;928:24;;:10;:24;;;920:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1676:5;761:3;752:5;:12;;744:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1741:1;1726:5;:12;;;;:16;1722:77;;;1769:5;1775:14;:12;:14::i;:::-;1769:21;;;;;;;;;;;;;;;;;;1761:5;:29;1753:38;;;;;;;;1722:77;1805:26;1816:7;1825:5;1805:10;:26::i;:::-;1845:14;:12;:14::i;:::-;1838:21;;997:1;1575:290;;;;:::o;2722:203::-;2780:7;2789;2813:20;2827:5;2813:13;:20::i;:::-;2805:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2876:13;:20;2890:5;2876:20;;;;;;;;;;;;2898:13;:20;2912:5;2898:20;;;;;;;;;;;;2868:51;;;;2722:203;;;:::o;1947:90::-;1992:7;2030:1;2015:5;:12;;;;:16;2008:23;;1947:90;:::o;262:436:1:-;394:16;:32;;;427:7;436;394:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;394:50:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;394:50:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;394:50:1;;;;;;;;;;;;;;;;386:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;490:7;481:6;;:16;;;;;;;;;;;;;;;;;;512:7;503:6;;:16;;;;;;;;;;;;;;;;;;543;525:15;;:34;;;;;;;;;;;;;;;;;;649:44;687:4;649:29;:44::i;:::-;262:436;;;:::o;213:922:0:-;306:19;408:13;427:15;494:6;909;355:7;343:9;:19;335:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;518:1;503:5;:12;;;;:16;494:25;;489:165;525:1;521;:5;:22;;;;;542:1;530:8;:13;521:22;489:165;;;574:7;562:5;568:1;562:8;;;;;;;;;;;;;;;;;;:19;;558:90;;;604:1;593:12;;558:90;545:3;;;;;;;;489:165;;;718:1;707:8;:12;699:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;799:9;780:5;786:8;780:15;;;;;;;;;;;;;;;;;;:28;;772:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;918:8;909:17;;904:166;933:1;928;:6;;:25;;;;;952:1;938:10;:15;928:25;904:166;;;983:9;972:5;978:1;972:8;;;;;;;;;;;;;;;;;;:20;968:96;;;1021:1;1017;:5;1004:18;;968:96;955:3;;;;;;;;904:166;;;1090:40;1109:10;1121:8;1090:18;:40::i;:::-;1076:54;;213:922;;;;;;;;:::o;1138:238:10:-;601:19:12;496:12;;;;;;;;;;;:31;;;;512:15;:13;:15::i;:::-;496:31;:47;;;;532:11;;;;;;;;;;;531:12;496:47;488:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;624:12;;;;;;;;;;;623:13;601:35;;646:14;642:80;;;685:4;670:12;;:19;;;;;;;;;;;;;;;;;;711:4;697:11;;:18;;;;;;;;;;;;;;;;;;642:80;1236:1:10;1213:25;;:11;:25;;;;1205:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1295:11;1282:10;;:24;;;;;;;;;;;;;;;;;;1313:5;1324:1;1313:13;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;1313:13:10;;;;;;;;;;;;;;;;;;;;;;740:14:12;736:55;;;779:5;764:12;;:20;;;;;;;;;;;;;;;;;;736:55;1138:238:10;;:::o;168:21:1:-;;;;;;;;;;;;;:::o;3526:167:10:-;3587:4;3617:1;3608:6;:10;3600:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3681:6;3666:5;:12;;;;:21;3659:28;;3526:167;;;:::o;3091:339:0:-;3184:6;3200:11;3245:17;3289:10;3314:6;3238:1;3225:10;3214:8;:21;:25;3200:39;;3276:6;3265:18;;;;;;;;;;;;;;;;;;;;;;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;3265:18:0;;;;3245:38;;3302:1;3289:14;;3323:10;3314:19;;3309:101;3340:8;3335:1;:13;;3309:101;;;3378:5;3384:1;3378:8;;;;;;;;;;;;;;;;;;3365:3;3369:5;3365:10;;;;;;;;;;;;;;;;;:21;;;;;3396:7;;;;;;;3350:3;;;;;;;3309:101;;;3422:3;3415:10;;3091:339;;;;;;;;:::o;2056:1031::-;2146:6;2162;2204:9;2223:10;2301:15;2351;2516;2553:6;2171:27;2196:1;2171:13;:20;:24;;:27;;;;:::i;:::-;2162:36;;2216:1;2204:13;;2236:27;2261:1;2236:13;:20;:24;;:27;;;;:::i;:::-;2223:40;;2270:786;2284:5;2277:4;:12;2270:786;;;2319:22;2339:1;2319:15;2328:5;2319:4;:8;;:15;;;;:::i;:::-;:19;;:22;;;;:::i;:::-;2301:40;;2369:13;2383:10;2369:25;;;;;;;;;;;;;;;;;;2351:43;;2458:13;2472:5;2458:20;;;;;;;;;;;;;;;;;;2480:13;2494:10;2480:25;;;;;;;;;;;;;;;;;;2406:13;2420:10;2406:25;;;;;;;;;;;;;;;;;2433:13;2447:5;2433:20;;;;;;;;;;;;;;;;;2405:101;;;;;;;;;;2534:4;2516:22;;2562:4;2553:13;;2548:263;2572:5;2568:1;:9;2548:263;;;2602:41;2614:13;2628:1;2614:16;;;;;;;;;;;;;;;;;;2632:10;2602:11;:41::i;:::-;2598:203;;;2712:13;2726:1;2712:16;;;;;;;;;;;;;;;;;;2730:13;2744:10;2730:25;;;;;;;;;;;;;;;;;;2664:13;2678:10;2664:25;;;;;;;;;;;;;;;;;2691:13;2705:1;2691:16;;;;;;;;;;;;;;;;;2663:93;;;;;;;;;;2774:12;;;;;;;2598:203;2579:3;;;;;;;2548:263;;;2874:13;2888:5;2874:20;;;;;;;;;;;;;;;;;;2896:13;2910:10;2896:25;;;;;;;;;;;;;;;;;;2822:13;2836:10;2822:25;;;;;;;;;;;;;;;;;2849:13;2863:5;2849:20;;;;;;;;;;;;;;;;;2821:101;;;;;;;;;;2949:1;2936:10;:14;2932:118;;;2973:17;2988:1;2973:10;:14;;:17;;;;:::i;:::-;2966:24;;2932:118;;;3029:10;3021:18;;2932:118;2270:786;;;3069:13;3062:20;;2056:1031;;;;;;;;;;:::o;1652:254::-;1735:19;1764:16;1812:15;1805:1;1783:12;:19;:23;;;;;;;;1764:42;;1831:12;1844:11;1831:25;;;;;;;;;;;;;;;;;;1812:44;;1876:13;:25;1890:10;1876:25;;;;;;;;;;;;1862:39;;1652:254;;;;;:::o;4102:277:10:-;4193:7;4170:13;:20;4184:5;4170:20;;;;;;;;;;;:30;;;;;;;4207:5;4218;4207:17;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;4207:17:10;;;;;;;;;;;;;;;;;;;;;;4254:14;:12;:14::i;:::-;4231:13;:20;4245:5;4231:20;;;;;;;;;;;:37;;;;4277:29;4291:7;4300:5;4277:13;:29::i;:::-;4320:53;4330:7;4339:5;4346:14;:12;:14::i;:::-;4362:10;4320:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4102:277;;:::o;881:467:12:-;928:4;1269:10;1314:7;1302:20;1296:26;;1342:1;1336:2;:7;1329:14;;881:467;;:::o;699:270:8:-;757:7;850:9;784:1;780;:5;772:14;;;;;;;;866:1;862;:5;;;;;;;;850:17;;963:1;956:8;;699:270;;;;;:::o;1082:131::-;1140:7;1176:9;1168:1;1163;:6;;1155:15;;;;;;;;1192:1;1188;:5;1176:17;;1207:1;1200:8;;1082:131;;;;;:::o;1276:::-;1334:7;1349:9;1365:1;1361;:5;1349:17;;1385:1;1380;:6;;1372:15;;;;;;;;1401:1;1394:8;;1276:131;;;;;:::o;3434:161:0:-;3514:4;3569:13;:20;3583:5;3569:20;;;;;;;;;;;;3564:26;;;3540:13;:20;3554:5;3540:20;;;;;;;;;;;;3535:26;;;:55;3528:62;;3434:161;;;;:::o;4470:104:10:-;;;:::o", "source": "pragma solidity >=0.4.24;\n\nimport \"./TimeMedianDataFeed.sol\";\nimport \"../ExchangeAdapters/IExchangeAdapter.sol\";\n\ncontract TokenPriceDataFeed is TimeMedianDataFeed {\n address public token1;\n address public token2;\n IExchangeAdapter public exchangeAdapter;\n\n function initialize(\n address _token1,\n address _token2,\n IExchangeAdapter _exchangeAdapter\n )\n public\n {\n require(_exchangeAdapter.tokenPairExists(_token1, _token2), 'token pair does not exist');\n\n token1 = _token1;\n token2 = _token2;\n exchangeAdapter = _exchangeAdapter;\n\n // set dataSource to `this` so setResult can only be called from this contract\n DataFeedOracleBase.initialize(address(this));\n }\n\n /**\n * @dev logs current exchange price in dataFeed at current block timestamp\n */\n function logResult() public {\n uint price = exchangeAdapter.getPriceForTokenPair(token1, token2);\n TimeMedianDataFeed(this).setResult(bytes32(price), uint256(block.timestamp));\n }\n\n /**\n * @dev returns the value of the current price according to the exchange\n */\n function viewCurrentResult() public view returns (bytes32) {\n return bytes32(exchangeAdapter.getPriceForTokenPair(token1, token2));\n }\n}\n", "sourcePath": "/Users/mfcalvanese/dev/eth/token-price-oracles/contracts/DataFeeds/TokenPriceDataFeed.sol", "ast": { "absolutePath": "/Users/mfcalvanese/dev/eth/token-price-oracles/contracts/DataFeeds/TokenPriceDataFeed.sol", "exportedSymbols": { "TokenPriceDataFeed": [ 505 ] }, "id": 506, "nodeType": "SourceUnit", "nodes": [ { "id": 416, "literals": [ "solidity", ">=", "0.4", ".24" ], "nodeType": "PragmaDirective", "src": "0:25:1" }, { "absolutePath": "/Users/mfcalvanese/dev/eth/token-price-oracles/contracts/DataFeeds/TimeMedianDataFeed.sol", "file": "./TimeMedianDataFeed.sol", "id": 417, "nodeType": "ImportDirective", "scope": 506, "sourceUnit": 415, "src": "27:34:1", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "/Users/mfcalvanese/dev/eth/token-price-oracles/contracts/ExchangeAdapters/IExchangeAdapter.sol", "file": "../ExchangeAdapters/IExchangeAdapter.sol", "id": 418, "nodeType": "ImportDirective", "scope": 506, "sourceUnit": 641, "src": "62:50:1", "symbolAliases": [], "unitAlias": "" }, { "baseContracts": [ { "arguments": null, "baseName": { "contractScope": null, "id": 419, "name": "TimeMedianDataFeed", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 414, "src": "145:18:1", "typeDescriptions": { "typeIdentifier": "t_contract$_TimeMedianDataFeed_$414", "typeString": "contract TimeMedianDataFeed" } }, "id": 420, "nodeType": "InheritanceSpecifier", "src": "145:18:1" } ], "contractDependencies": [ 414, 1649, 1699, 1762 ], "contractKind": "contract", "documentation": null, "fullyImplemented": true, "id": 505, "linearizedBaseContracts": [ 505, 414, 1649, 1699, 1762 ], "name": "TokenPriceDataFeed", "nodeType": "ContractDefinition", "nodes": [ { "constant": false, "id": 422, "name": "token1", "nodeType": "VariableDeclaration", "scope": 505, "src": "168:21:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 421, "name": "address", "nodeType": "ElementaryTypeName", "src": "168:7:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "public" }, { "constant": false, "id": 424, "name": "token2", "nodeType": "VariableDeclaration", "scope": 505, "src": "193:21