0 txs
0 calls
constructor
constructor()
functions
authorityAddress
viewfunction authorityAddress() view returns (address)
baseToken
viewfunction baseToken() view returns (address)
dataRequestCreated
viewfunction dataRequestCreated(address) view returns (bool)
getAuthorityAddress
viewfunction getAuthorityAddress() view returns (address)
getBaseToken
viewfunction getBaseToken() view returns (address)
getMinimumRewardPerOracle
viewfunction getMinimumRewardPerOracle() view returns (uint256)
getPlatformWallet
viewfunction getPlatformWallet() view returns (address)
MINIMUM_REWARD_PER_ORACLE
viewfunction MINIMUM_REWARD_PER_ORACLE() view returns (uint256)
owner
viewfunction owner() view returns (address)
platformWallet
viewfunction platformWallet() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
timeFeeWallet
viewfunction timeFeeWallet() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
userDataRequestContracts
viewfunction userDataRequestContracts(address, uint256) view returns (address)
userDataRequestCount
viewfunction userDataRequestCount(address) view returns (uint256)
createDataRequestFromFactory
nonpayablefunction createDataRequestFromFactory(tuple dataRequestParams) returns (address)
initialize
nonpayablefunction initialize(address platform, address timeFeeAddress, address base, address authority, address platformOwner)
renounceOwnership
nonpayablefunction renounceOwnership()
setAuthorityAddress
nonpayablefunction setAuthorityAddress(address newAuthorityAddress)
setMinimumRewardPerOracle
nonpayablefunction setMinimumRewardPerOracle(uint256 newMinimumRewardPerOracle)
setPlatformWallet
nonpayablefunction setPlatformWallet(address newPlatformWallet)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateExistingAuthorityAddress
nonpayablefunction updateExistingAuthorityAddress(address dataRequestContract, address newAuthorityAddress)
updateExistingPlatformWallet
nonpayablefunction updateExistingPlatformWallet(address dataRequestContract, address newPlatformWallet)
updateTimeFeeWalletAddress
nonpayablefunction updateTimeFeeWalletAddress(address newTimeFeeWallet)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AuthorityAddressUpdated
event AuthorityAddressUpdated(address indexed previousAuthorityAddress, address indexed newAuthorityAddress)
BaseTokenIsUpdated
event BaseTokenIsUpdated(address indexed previousBaseToken, address indexed newBaseToken)
DataRequestCreated
event DataRequestCreated(address contractAddress, address creator, address baseToken, address authority, uint256 userDataRequestId)
ExistingAuthorityAddressUpdated
event ExistingAuthorityAddressUpdated(address indexed dataRequestContract, address indexed authorityAddress)
ExistingPlatformWalletUpdated
event ExistingPlatformWalletUpdated(address indexed dataRequestContract, address indexed platfromWallet)
Initialized
event Initialized(uint64 version)
MinimumRewardIsUpdated
event MinimumRewardIsUpdated(uint256 previousMinimumReward, uint256 newMinimumReward)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PlatformWalletIsUpdated
event PlatformWalletIsUpdated(address indexed previousPlatformWallet, address indexed newPlatformWallet)
TimeFeeWalletAddressUpdated
event TimeFeeWalletAddressUpdated(address indexed previousTimeFeeWallet, address indexed newTimeFeeWallet)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
DataRequestAddressNotFound
error DataRequestAddressNotFound()
DataRequestEndTimeCantBeInPast
error DataRequestEndTimeCantBeInPast()
DataRequestEndTimeMustBeAfterStartTime
error DataRequestEndTimeMustBeAfterStartTime()
DataRequestStartAndEndTimeCantBeSame
error DataRequestStartAndEndTimeCantBeSame()
DataRequestStartTimeCantBeInPast
error DataRequestStartTimeCantBeInPast()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExistingAndNewAuthorityAddressCantBeSame
error ExistingAndNewAuthorityAddressCantBeSame()
ExistingAndNewPlatFormWalletCantBeSame
error ExistingAndNewPlatFormWalletCantBeSame()
ExistingAndNewWalletAddressCantBeSame
error ExistingAndNewWalletAddressCantBeSame()
FailedCall
error FailedCall()
InvalidAddress
error InvalidAddress()
InvalidAuthorityAddress
error InvalidAuthorityAddress()
InvalidBaseToken
error InvalidBaseToken()
InvalidDataRequestContractAddress
error InvalidDataRequestContractAddress()
InvalidInitialization
error InvalidInitialization()
InvalidMinimumReward
error InvalidMinimumReward()
InvalidPlatformOwner
error InvalidPlatformOwner()
InvalidPlatformWallet
error InvalidPlatformWallet()
NewAndExisitingMinimumRewardCantBeSame
error NewAndExisitingMinimumRewardCantBeSame()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a060405230608052348015610013575f5ffd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161459b6100f95f395f8181610fc701528181610ff00152611134015261459b5ff3fe60806040526004361061017b575f3560e01c8063a3cf25ab116100cd578063d76a09f411610087578063e59ede1811610062578063e59ede181461047e578063ea36212d146104bc578063f2fde38b146104db578063fa2af9da146104fa575f5ffd5b8063d76a09f414610419578063d969da4e14610436578063e47a9d4614610461575f5ffd5b8063a3cf25ab1461034d578063a472463b1461036c578063ad3cb1cc1461038b578063b42f0bb9146103c8578063bf0780db146103dc578063c55dae63146103fb575f5ffd5b806358bc5fd8116101385780638831e9cf116101135780638831e9cf146102975780638da5cb5b146102b657806398acd7a6146102f25780639a22d2a51461030e575f5ffd5b806358bc5fd81461024f5780635e159c5314610264578063715018a614610283575f5ffd5b80631459457a1461017f5780633c695d4e146101a05780633db248cc146101dc5780634f1ef286146101fb57806352d1902d1461020e578063579812a514610230575b5f5ffd5b34801561018a575f5ffd5b5061019e6101993660046114fb565b610519565b005b3480156101ab575f5ffd5b506002546101bf906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101e7575f5ffd5b506101bf6101f636600461163b565b610746565b61019e610209366004611701565b6109be565b348015610219575f5ffd5b506102226109dd565b6040519081526020016101d3565b34801561023b575f5ffd5b5061019e61024a366004611761565b6109f8565b34801561025a575f5ffd5b5061022260035481565b34801561026f575f5ffd5b5061019e61027e36600461177c565b610ab0565b34801561028e575f5ffd5b5061019e610bcf565b3480156102a2575f5ffd5b5061019e6102b1366004611761565b610be2565b3480156102c1575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166101bf565b3480156102fd575f5ffd5b505f546001600160a01b03166101bf565b348015610319575f5ffd5b506101bf6103283660046117b3565b600560209081525f92835260408084209091529082529020546001600160a01b031681565b348015610358575f5ffd5b506004546101bf906001600160a01b031681565b348015610377575f5ffd5b5061019e6103863660046117dd565b610c9c565b348015610396575f5ffd5b506103bb604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101d39190611822565b3480156103d3575f5ffd5b50600354610222565b3480156103e7575f5ffd5b5061019e6103f6366004611761565b610d2a565b348015610406575f5ffd5b505f546101bf906001600160a01b031681565b348015610424575f5ffd5b506001546001600160a01b03166101bf565b348015610441575f5ffd5b50610222610450366004611761565b60066020525f908152604090205481565b34801561046c575f5ffd5b506002546001600160a01b03166101bf565b348015610489575f5ffd5b506104ac610498366004611761565b60076020525f908152604090205460ff1681565b60405190151581526020016101d3565b3480156104c7575f5ffd5b5061019e6104d636600461177c565b610de2565b3480156104e6575f5ffd5b5061019e6104f5366004611761565b610f01565b348015610505575f5ffd5b506001546101bf906001600160a01b031681565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f8115801561055e5750825b90505f8267ffffffffffffffff16600114801561057a5750303b155b905081158015610588575080155b156105a65760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105d057845460ff60401b1916600160401b1785555b6105d986610f43565b6105e1610f54565b622dc6c06003556001600160a01b038a1661060f576040516387ac4dbf60e01b815260040160405180910390fd5b6001600160a01b0389166106365760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b03881661065d57604051630722152560e11b815260040160405180910390fd5b6001600160a01b038716610684576040516322203f5960e01b815260040160405180910390fd5b6001600160a01b0386166106ab57604051631397094360e21b815260040160405180910390fd5b5f80546001600160a01b03808b166001600160a01b031992831617909255600480548c8416908316179055600180548d841690831617905560028054928a1692909116919091179055831561073a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b60808101515f90339042111561076f576040516306041f9b60e01b815260040160405180910390fd5b8260a001514210610793576040516308c3223760e01b815260040160405180910390fd5b8260a001518360800151036107bb5760405163626a0a0360e01b815260040160405180910390fd5b82608001518360a00151116107e35760405163f60c5b1560e01b815260040160405180910390fd5b6001546004545f805460025460035460405193956001600160a01b0390811695811694938116939216913090610818906114ca565b6001600160a01b039687168152948616602086015292851660408501529084166060840152608083015290911660a082015260c001604051809103905ff080158015610866573d5f5f3e3d5ffd5b5060408501515f54919250610888916001600160a01b03169084908490610f5c565b604051634269599d60e01b81526001600160a01b03821690634269599d906108b4908790600401611834565b5f604051808303815f87803b1580156108cb575f5ffd5b505af11580156108dd573d5f5f3e3d5ffd5b505050506001600160a01b038281165f818152600660208181526040808420805460058452828620818752845291852080546001600160a01b03191697891697909717909655938352528254919290610935836118be565b90915550506001600160a01b038281165f818152600760209081526040808320805460ff19166001179055915460025483519485528886169285019290925284168383015290921660608201526080810183905290517f3215a2705293ef32f3fc5270cb080b528ee2e4f334600985cff97771c28e9fbc9160a0908290030190a1509392505050565b6109c6610fbc565b6109cf82611060565b6109d98282611068565b5050565b5f6109e6611129565b505f5160206145465f395f51905f5290565b610a00611172565b6001600160a01b038116610a275760405163e6c4247b60e01b815260040160405180910390fd5b6004546001600160a01b03808316911603610a55576040516369a7332160e01b815260040160405180910390fd5b6004546040516001600160a01b038084169216907f62f89c5f9ac38231a06486e252729814bf16bf7e1e766076dad77dcde9f41d7c905f90a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b610ab8611172565b6001600160a01b038216610adf5760405163751ec7b160e01b815260040160405180910390fd5b6001600160a01b0382165f9081526007602052604090205460ff16610b17576040516373606bdb60e01b815260040160405180910390fd5b6001600160a01b038116610b3e576040516322203f5960e01b815260040160405180910390fd5b60405163ccfc456960e01b81526001600160a01b03828116600483015283169063ccfc4569906024015f604051808303815f87803b158015610b7e575f5ffd5b505af1158015610b90573d5f5f3e3d5ffd5b50506040516001600160a01b038085169350851691507f1f2a1174c083e293cecbc3d063657f97b3d3fd1d84d1b6484d6cba850b6e671e905f90a35050565b610bd7611172565b610be05f6111cd565b565b610bea611172565b6001546001600160a01b0316610c13576040516387ac4dbf60e01b815260040160405180910390fd5b6001546001600160a01b03808316911603610c415760405163c951884960e01b815260040160405180910390fd5b6001546040516001600160a01b038084169216907fafdafba178415f38a81e9ce31168ffa3ce22045e659b3dbb40405bf2ac3e7078905f90a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b610ca4611172565b600354811015610cc7576040516309b78b1360e01b815260040160405180910390fd5b6003548103610ce95760405163bc94801d60e01b815260040160405180910390fd5b60035460408051918252602082018390527f3730086158ab0cd8cd5f6ca037f9b891157c44e002bb87e18190e96539bf9fcb910160405180910390a1600355565b610d32611172565b6001600160a01b038116610d59576040516322203f5960e01b815260040160405180910390fd5b6002546001600160a01b03808316911603610d8757604051634e7ec35760e01b815260040160405180910390fd5b6002546040516001600160a01b038084169216907f741ee0e619c436098dff0f2be43023c24aef6c4c3134ca5db37746bb1088d0df905f90a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b610dea611172565b6001600160a01b038216610e115760405163751ec7b160e01b815260040160405180910390fd5b6001600160a01b0382165f9081526007602052604090205460ff16610e49576040516373606bdb60e01b815260040160405180910390fd5b6001600160a01b038116610e70576040516387ac4dbf60e01b815260040160405180910390fd5b604051630ada4ef360e41b81526001600160a01b03828116600483015283169063ada4ef30906024015f604051808303815f87803b158015610eb0575f5ffd5b505af1158015610ec2573d5f5f3e3d5ffd5b50506040516001600160a01b038085169350851691507fae03c08a3f7078bbdc6986e7f8f7fda4a75c215f0adda92c192919c27e9f92e2905f90a35050565b610f09611172565b6001600160a01b038116610f3757604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610f40816111cd565b50565b610f4b61123d565b610f4081611286565b610be061123d565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610fb690859061128e565b50505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061104257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166110365f5160206145465f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15610be05760405163703e46dd60e11b815260040160405180910390fd5b610f40611172565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156110c2575060408051601f3d908101601f191682019092526110bf918101906118e2565b60015b6110ea57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610f2e565b5f5160206145465f395f51905f52811461111a57604051632a87526960e21b815260048101829052602401610f2e565b61112483836112fa565b505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610be05760405163703e46dd60e11b815260040160405180910390fd5b336111a47f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610be05760405163118cdaa760e01b8152336004820152602401610f2e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610be057604051631afcd79f60e31b815260040160405180910390fd5b610f0961123d565b5f5f60205f8451602086015f885af1806112ad576040513d5f823e3d81fd5b50505f513d915081156112c45780600114156112d1565b6001600160a01b0384163b155b15610fb657604051635274afe760e01b81526001600160a01b0385166004820152602401610f2e565b6113038261134f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156113475761112482826113b2565b6109d9611424565b806001600160a01b03163b5f0361138457604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610f2e565b5f5160206145465f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b0316846040516113ce91906118f9565b5f60405180830381855af49150503d805f8114611406576040519150601f19603f3d011682016040523d82523d5f602084013e61140b565b606091505b509150915061141b858383611443565b95945050505050565b3415610be05760405163b398979f60e01b815260040160405180910390fd5b60608261145857611453826114a2565b61149b565b815115801561146f57506001600160a01b0384163b155b1561149857604051639996b31560e01b81526001600160a01b0385166004820152602401610f2e565b50805b9392505050565b8051156114b157805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b612c368061191083390190565b6001600160a01b0381168114610f40575f5ffd5b80356114f6816114d7565b919050565b5f5f5f5f5f60a0868803121561150f575f5ffd5b853561151a816114d7565b9450602086013561152a816114d7565b9350604086013561153a816114d7565b9250606086013561154a816114d7565b9150608086013561155a816114d7565b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b604051610120810167ffffffffffffffff811182821017156115a0576115a0611568565b60405290565b5f5f67ffffffffffffffff8411156115c0576115c0611568565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156115ef576115ef611568565b604052838152905080828401851015611606575f5ffd5b838360208301375f60208583010152509392505050565b5f82601f83011261162c575f5ffd5b61149b838335602085016115a6565b5f6020828403121561164b575f5ffd5b813567ffffffffffffffff811115611661575f5ffd5b82016101208185031215611673575f5ffd5b61167b61157c565b813581526020808301359082015260408083013590820152606080830135908201526080808301359082015260a0808301359082015260c0808301359082015260e082013567ffffffffffffffff8111156116d4575f5ffd5b6116e08682850161161d565b60e0830152506116f361010083016114eb565b610100820152949350505050565b5f5f60408385031215611712575f5ffd5b823561171d816114d7565b9150602083013567ffffffffffffffff811115611738575f5ffd5b8301601f81018513611748575f5ffd5b611757858235602084016115a6565b9150509250929050565b5f60208284031215611771575f5ffd5b813561149b816114d7565b5f5f6040838503121561178d575f5ffd5b8235611798816114d7565b915060208301356117a8816114d7565b809150509250929050565b5f5f604083850312156117c4575f5ffd5b82356117cf816114d7565b946020939093013593505050565b5f602082840312156117ed575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61149b60208301846117f4565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c082015260c082015160e08201525f60e08301516101206101008401526118986101408401826117f4565b90506101008401516118b66101208501826001600160a01b03169052565b509392505050565b5f600182016118db57634e487b7160e01b5f52601160045260245ffd5b5060010190565b5f602082840312156118f2575f5ffd5b5051919050565b5f82518060208501845e5f92019182525091905056fe60c060405234801561000f575f5ffd5b50604051612c36380380612c3683398101604081905261002e916101af565b806001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61006581610149565b506001600160a01b03861661008d576040516387ac4dbf60e01b815260040160405180910390fd5b6001600160a01b0384166100b457604051630722152560e11b815260040160405180910390fd5b6001600160a01b0383166100db576040516322203f5960e01b815260040160405180910390fd5b815f036100fb576040516327964f8960e11b815260040160405180910390fd5b50600280546001600160a01b03199081166001600160a01b0396871617909155600180548216968616969096179095559183166080526003805490941692169190911790915560a052610228565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101ac575f5ffd5b50565b5f5f5f5f5f5f60c087890312156101c4575f5ffd5b86516101cf81610198565b60208801519096506101e081610198565b60408801519095506101f181610198565b606088015190945061020281610198565b608088015160a0890151919450925061021a81610198565b809150509295509295509295565b60805160a0516129ca61026c5f395f81816102b00152610a4d01525f818161046701528181610bc601528181610e2501528181611a040152611aa601526129ca5ff3fe608060405260043610610198575f3560e01c806398c07938116100e7578063ccfc456911610087578063db0fff3711610062578063db0fff37146104e4578063e47a9d46146104f9578063ea35e80514610516578063f2fde38b1461052a575f5ffd5b8063ccfc456914610489578063d3cb29f6146104a8578063d76a09f4146104c7575f5ffd5b8063ada4ef30116100c2578063ada4ef30146103f8578063b0d2616814610417578063b88a802f14610442578063c55dae6314610456575f5ffd5b806398c07938146103a55780639b46a164146103ba5780639e4cbcda146103d9575f5ffd5b806358bc5fd8116101525780637afbf4801161012d5780637afbf480146103145780638a5fc0f9146103485780638da5cb5b146103615780638e7ea5b214610391575f5ffd5b806358bc5fd81461029f578063715018a6146102d257806373b2e80e146102e6575f5ffd5b806309eef43e146101a35780631973f028146101e65780631af19dd31461020f5780634269599d14610248578063548388821461026957806356069c0a1461028a575f5ffd5b3661019f57005b5f5ffd5b3480156101ae575f5ffd5b506101d16101bd36600461233d565b60126020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101f1575f5ffd5b506101fa610549565b604080519283526020830191909152016101dd565b34801561021a575f5ffd5b5061023a61022936600461233d565b60136020525f908152604090205481565b6040519081526020016101dd565b348015610253575f5ffd5b50610267610262366004612358565b6109a1565b005b348015610274575f5ffd5b5061027d610eda565b6040516101dd91906123be565b348015610295575f5ffd5b5061023a60045481565b3480156102aa575f5ffd5b5061023a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102dd575f5ffd5b5061026761101d565b3480156102f1575f5ffd5b506101d161030036600461233d565b60116020525f908152604090205460ff1681565b34801561031f575f5ffd5b5061023a61032e36600461233d565b6001600160a01b03165f9081526013602052604090205490565b348015610353575f5ffd5b506006546101d19060ff1681565b34801561036c575f5ffd5b505f546001600160a01b03165b6040516001600160a01b0390911681526020016101dd565b34801561039c575f5ffd5b5061023a611030565b3480156103b0575f5ffd5b5061023a60055481565b3480156103c5575f5ffd5b506102676103d4366004612448565b61105c565b3480156103e4575f5ffd5b506102676103f3366004612448565b61143b565b348015610403575f5ffd5b5061026761041236600461233d565b6117b4565b348015610422575f5ffd5b5061023a6104313660046124bf565b60146020525f908152604090205481565b34801561044d575f5ffd5b5061026761186c565b348015610461575f5ffd5b506103797f000000000000000000000000000000000000000000000000000000000000000081565b348015610494575f5ffd5b506102676104a336600461233d565b611b17565b3480156104b3575f5ffd5b5061023a6104c23660046124d6565b611bcf565b3480156104d2575f5ffd5b506001546001600160a01b0316610379565b3480156104ef575f5ffd5b5061023a60105481565b348015610504575f5ffd5b506003546001600160a01b0316610379565b348015610521575f5ffd5b5061023a611bfa565b348015610535575f5ffd5b5061026761054436600461233d565b6120be565b6040805161012081018252600780548252600854602083015260095492820192909252600a546060820152600b546080820152600c5460a0820152600d5460c0820152600e80545f9384938493909260e0840191906105a7906124f6565b80601f01602080910402602001604051908101604052809291908181526020018280546105d3906124f6565b801561061e5780601f106105f55761010080835404028352916020019161061e565b820191905f5260205f20905b81548152906001019060200180831161060157829003601f168201915b5050509183525050600891909101546001600160a01b0316602090910152805160055460405163d494f49360e01b8152600481019290925260248201529091505f908190819073a7e97b3134654a18a7e743157cf8df0239eadd7a9063d494f49390604401602060405180830381865af415801561069e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c2919061252e565b9050801580156106d55750601054600714155b156106f35760405163907c5f1960e01b815260040160405180910390fd5b835160405163cb7e3a1360e01b81525f9173a7e97b3134654a18a7e743157cf8df0239eadd7a9163cb7e3a13916107309160040190815260200190565b602060405180830381865af415801561074b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061076f919061254d565b90505f60015b8660c0015181116107ad575f81815260146020526040902054831161079d57600191506107ad565b6107a681612578565b9050610775565b50801580156107bf57508560a0015142105b156107dd57604051633fc30bd160e11b815260040160405180910390fd5b5f5f8760c0015167ffffffffffffffff8111156107fc576107fc612590565b604051908082528060200260200182016040528015610825578160200160208202803683370190505b5090505f60015b8960c0015181116108bc575f8181526014602052604090205484811115610878578094506001925081845f81518110610867576108676125a4565b6020026020010181815250506108ab565b8481036108ab5781848481518110610892576108926125a4565b6020908102919091010152826108a781612578565b9350505b506108b581612578565b905061082c565b506001811115610962575f195f805b83811015610958575f8582815181106108e6576108e66125a4565b6020908102919091018101515f8181526015909252604082205490925061090f906001906125b8565b5f8381526015602052604081208054929350909183908110610933576109336125a4565b905f5260205f20015490508581101561094d578095508294505b5050506001016108cb565b50985061097f9050565b815f81518110610974576109746125a4565b602002602001015197505b82896060015161098f91906125cb565b979b979a509698505050505050505050565b5f6109aa612100565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156109d15750825b90505f8267ffffffffffffffff1660011480156109ed5750303b155b9050811580156109fb575080155b15610a195760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a4357845460ff60401b1916600160401b1785555b610a4b61212a565b7f000000000000000000000000000000000000000000000000000000000000000086602001351015610a90576040516327964f8960e11b815260040160405180910390fd5b5f610aa060c088013560016125ea565b90505f610ab2883560208a01356125fd565b90505f620f4240610aca6207a12060408c01356125fd565b610ad491906125cb565b9050811580610ae1575080155b80610aea575082155b15610b0857604051630b6de1b760e31b815260040160405180910390fd5b8835831115610b2a5760405163d9421b5560e01b815260040160405180910390fd5b8189604001351015610b4f576040516340179ba160e11b815260040160405180910390fd5b8089606001351015610b74576040516327964f8960e11b815260040160405180910390fd5b886007610b81828261276f565b50610b919050620f4240826125b8565b60405163095ea7b360e01b815273e592427a0aece92de3edee1f18e0157c058615646004820152620f424060248201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063095ea7b3906044016020604051808303815f875af1158015610c14573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c38919061252e565b506040805173fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb960601b6020820152607d60ea1b60348201527382af49447d8a07e3bd95bd0d56f35241523fbab160601b60378201528151602b81830301815260eb8201909252604b810182815230606b8301525f91608b01610cb04261012c6125ea565b8152620f424060208201525f6040918201819052905163c04b8d5960e01b81529192509073e592427a0aece92de3edee1f18e0157c058615649063c04b8d5990610cfe908590600401612804565b6020604051808303815f875af1158015610d1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3e919061254d565b604051632e1a7d4d60e01b8152600481018290529091507382af49447d8a07e3bd95bd0d56f35241523fbab190632e1a7d4d906024015f604051808303815f87803b158015610d8b575f5ffd5b505af1158015610d9d573d5f5f3e3d5ffd5b50506002546040515f93506001600160a01b03909116915083908381818185875af1925050503d805f8114610ded576040519150601f19603f3d011682016040523d82523d5f602084013e610df2565b606091505b5050905080610e145760405163e6c4247b60e01b815260040160405180910390fd5b600154610e4e906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911687612156565b7fcdf0cd473764fd7446cd055bfc16e177ee48b6145bf9ae15ac086c7679180c368d604051610e7d91906128c5565b60405180910390a1505050505050508315610ed257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610f2a6040518061012001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f8152602001606081526020015f6001600160a01b031681525090565b6040805161012081018252600780548252600854602083015260095492820192909252600a546060820152600b546080820152600c5460a0820152600d5460c0820152600e805491929160e084019190610f83906124f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610faf906124f6565b8015610ffa5780601f10610fd157610100808354040283529160200191610ffa565b820191905f5260205f20905b815481529060010190602001808311610fdd57829003601f168201915b5050509183525050600891909101546001600160a01b0316602090910152919050565b61102561212a565b61102e5f6121a8565b565b6006545f9060ff16611055576040516349087aad60e01b815260040160405180910390fd5b5060045490565b6110646121f7565b6040805161012081018252600780548252600854602083015260095492820192909252600a546060820152600b546080820152600c5460a0820152600d5460c0820152600e805433935f9392909160e0840191906110c1906124f6565b80601f01602080910402602001604051908101604052809291908181526020018280546110ed906124f6565b80156111385780601f1061110f57610100808354040283529160200191611138565b820191905f5260205f20905b81548152906001019060200180831161111b57829003601f168201915b5050509183525050600891909101546001600160a01b0316602090910152905084158061116857508060c0015185115b1561118657604051632a71953160e01b815260040160405180910390fd5b8061010001516001600160a01b0316826001600160a01b0316036111bd57604051632d073dab60e21b815260040160405180910390fd5b8051600554106111e05760405163d9421b5560e01b815260040160405180910390fd5b600354604051632f34148760e11b8152600481018790526001600160a01b03848116602483015273a7e97b3134654a18a7e743157cf8df0239eadd7a9263238a4d1e929116908390635e68290e90604401602060405180830381865af415801561124c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611270919061254d565b87876040518563ffffffff1660e01b81526004016112919493929190612963565b602060405180830381865af41580156112ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d0919061252e565b6112ed57604051638baa579f60e01b815260040160405180910390fd5b8060a00151421061131157604051637a19ed0560e01b815260040160405180910390fd5b806080015142101561133657604051633fd0090160e11b815260040160405180910390fd5b6001600160a01b0382165f9081526012602052604090205460ff161561136f57604051637c9a1cf960e01b815260040160405180910390fd5b5f858152601560209081526040808320805460018181018355918552838520429101556001600160a01b038616845260128352818420805460ff1916909117905560138252808320889055878352601490915281208054916113d083612578565b909155505060058054905f6113e483612578565b9190505550816001600160a01b03167fd0e6c39f2e086dc49f1524b47725526a56945cd1ff661f37976f1725a1e569868660405161142491815260200190565b60405180910390a25050611436612264565b505050565b6114436121f7565b6040805161012081018252600780548252600854602083015260095492820192909252600a546060820152600b546080820152600c5460a0820152600d5460c0820152600e80545f939160e084019161149b906124f6565b80601f01602080910402602001604051908101604052809291908181526020018280546114c7906124f6565b80156115125780601f106114e957610100808354040283529160200191611512565b820191905f5260205f20905b8154815290600101906020018083116114f557829003601f168201915b5050509183525050600891909101546001600160a01b03166020909101526010549091506007036115565760405163c7eff8f760e01b815260040160405180910390fd5b8060a0015142101561157b576040516338af65f760e01b815260040160405180910390fd5b428411158061158e57508060a001518411155b156115ac576040516338af65f760e01b815260040160405180910390fd5b805160055460405163d494f49360e01b8152600481019290925260248201525f9073a7e97b3134654a18a7e743157cf8df0239eadd7a9063d494f49390604401602060405180830381865af4158015611607573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061162b919061252e565b9050801561164c57604051633102c16960e21b815260040160405180910390fd5b600354604051632f34148760e11b81526004810187905233602482015273a7e97b3134654a18a7e743157cf8df0239eadd7a9163238a4d1e916001600160a01b03909116908390635e68290e90604401602060405180830381865af41580156116b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116db919061254d565b87876040518563ffffffff1660e01b81526004016116fc9493929190612963565b602060405180830381865af4158015611717573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061173b919061252e565b61175857604051638baa579f60e01b815260040160405180910390fd5b600c85905560108054600191905f906117729084906125ea565b909155505060a0820151604080519182526020820187905230917f1330a2b7f70d74408554b6e5d73c6aefa8d88e43a5cf2dde8220b95a7bb23e359101611424565b6117bc61212a565b6001600160a01b0381166117e3576040516387ac4dbf60e01b815260040160405180910390fd5b6001546001600160a01b038083169116036118115760405163c951884960e01b815260040160405180910390fd5b6001546040516001600160a01b038084169216907fafdafba178415f38a81e9ce31168ffa3ce22045e659b3dbb40405bf2ac3e7078905f90a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b600654339060ff1661188257611880611bfa565b505b6001600160a01b0381165f9081526011602052604090205460ff16806118c157506004546001600160a01b0382165f9081526013602052604090205414155b156118df57604051637c75aa6f60e11b815260040160405180910390fd5b6040805161012081018252600780548252600854602083015260095492820192909252600a546060820152600b546080820152600c5460a0820152600d5460c0820152600e80545f939160e0840191611937906124f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611963906124f6565b80156119ae5780601f10611985576101008083540402835291602001916119ae565b820191905f5260205f20905b81548152906001019060200180831161199157829003601f168201915b5050509183525050600891909101546001600160a01b0316602090910152805160608201519192505f916119e291906125cb565b6040516370a0823160e01b81523060048201529091505f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611a49573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a6d919061254d565b90505f611a7a828461228e565b6001600160a01b038087165f908152601160205260409020805460ff19166001179055909150611acd907f0000000000000000000000000000000000000000000000000000000000000000168683612156565b846001600160a01b03167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f724184604051611b0891815260200190565b60405180910390a25050505050565b611b1f61212a565b6001600160a01b038116611b46576040516322203f5960e01b815260040160405180910390fd5b6003546001600160a01b03808316911603611b7457604051634e7ec35760e01b815260040160405180910390fd5b6003546040516001600160a01b038084169216907f741ee0e619c436098dff0f2be43023c24aef6c4c3134ca5db37746bb1088d0df905f90a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6015602052815f5260405f208181548110611be8575f80fd5b905f5260205f20015f91509150505481565b5f611c036121f7565b6040805161012081018252600780548252600854602083015260095492820192909252600a546060820152600b546080820152600c5460a0820152600d5460c0820152600e80545f939160e0840191611c5b906124f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611c87906124f6565b8015611cd25780601f10611ca957610100808354040283529160200191611cd2565b820191905f5260205f20905b815481529060010190602001808311611cb557829003601f168201915b5050509183525050600891909101546001600160a01b031660209091015260065490915060ff1615611d175760405163025cfd3760e51b815260040160405180910390fd5b805160055460405163d494f49360e01b8152600481019290925260248201525f9073a7e97b3134654a18a7e743157cf8df0239eadd7a9063d494f49390604401602060405180830381865af4158015611d72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d96919061252e565b905080158015611da95750601054600714155b15611dc75760405163907c5f1960e01b815260040160405180910390fd5b815160405163cb7e3a1360e01b81525f9173a7e97b3134654a18a7e743157cf8df0239eadd7a9163cb7e3a1391611e049160040190815260200190565b602060405180830381865af4158015611e1f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e43919061254d565b90505f60015b8460c001518111611e81575f818152601460205260409020548311611e715760019150611e81565b611e7a81612578565b9050611e49565b5080158015611e9357508360a0015142105b15611eb157604051633fc30bd160e11b815260040160405180910390fd5b5f5f8560c0015167ffffffffffffffff811115611ed057611ed0612590565b604051908082528060200260200182016040528015611ef9578160200160208202803683370190505b5090505f60015b8760c001518111611f90575f8181526014602052604090205484811115611f4c578094506001925081845f81518110611f3b57611f3b6125a4565b602002602001018181525050611f7f565b848103611f7f5781848481518110611f6657611f666125a4565b602090810291909101015282611f7b81612578565b9350505b50611f8981612578565b9050611f00565b506001811115612036575f195f805b8381101561202c575f858281518110611fba57611fba6125a4565b6020908102919091018101515f81815260159092526040822054909250611fe3906001906125b8565b5f8381526015602052604081208054929350909183908110612007576120076125a4565b905f5260205f200154905085811015612021578095508294505b505050600101611f9f565b5060045550612057565b815f81518110612048576120486125a4565b60200260200101516004819055505b6006805460ff19166001179055600783905560045460405133917f56482e870a733859b0a577d9a75f12c17bd7754ab7b2723301bfc952988b3c799161209f91815260200190565b60405180910390a26004549750505050505050506120bb612264565b90565b6120c661212a565b6001600160a01b0381166120f457604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6120fd816121a8565b50565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b5f546001600160a01b0316331461102e5760405163118cdaa760e01b81523360048201526024016120eb565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526114369084906122a0565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c1561223757604051633ee5aeb560e01b815260040160405180910390fd5b61102e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b90612312565b61102e5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0061225e565b5f8282188284100282185b9392505050565b5f5f60205f8451602086015f885af1806122bf576040513d5f823e3d81fd5b50505f513d915081156122d65780600114156122e3565b6001600160a01b0384163b155b1561230c57604051635274afe760e01b81526001600160a01b03851660048201526024016120eb565b50505050565b80825d5050565b6001600160a01b03811681146120fd575f5ffd5b803561233881612319565b919050565b5f6020828403121561234d575f5ffd5b813561229981612319565b5f60208284031215612368575f5ffd5b813567ffffffffffffffff81111561237e575f5ffd5b82016101208185031215612299575f5ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c082015260c082015160e08201525f60e0830151610120610100840152612422610140840182612390565b90506101008401516124406101208501826001600160a01b03169052565b509392505050565b5f5f5f6040848603121561245a575f5ffd5b83359250602084013567ffffffffffffffff811115612477575f5ffd5b8401601f81018613612487575f5ffd5b803567ffffffffffffffff81111561249d575f5ffd5b8660208284010111156124ae575f5ffd5b939660209190910195509293505050565b5f602082840312156124cf575f5ffd5b5035919050565b5f5f604083850312156124e7575f5ffd5b50508035926020909101359150565b600181811c9082168061250a57607f821691505b60208210810361252857634e487b7160e01b5f52602260045260245ffd5b50919050565b5f6020828403121561253e575f5ffd5b81518015158114612299575f5ffd5b5f6020828403121561255d575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161258957612589612564565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b8181038181111561212457612124612564565b5f826125e557634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561212457612124612564565b808202811582820484141761212457612124612564565b5f5f8335601e19843603018112612629575f5ffd5b83018035915067ffffffffffffffff821115612643575f5ffd5b602001915036819003821315612657575f5ffd5b9250929050565b601f82111561143657805f5260205f20601f840160051c810160208510156126835750805b601f840160051c820191505b818110156126a2575f815560010161268f565b5050505050565b67ffffffffffffffff8311156126c1576126c1612590565b6126d5836126cf83546124f6565b8361265e565b5f601f841160018114612706575f85156126ef5750838201355b5f19600387901b1c1916600186901b1783556126a2565b5f83815260208120601f198716915b828110156127355786850135825560209485019460019092019101612715565b5086821015612751575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f813561212481612319565b813581556020820135600182015560408201356002820155606082013560038201556080820135600482015560a0820135600582015560c082013560068201556127bc60e0830183612614565b6127ca8183600786016126a9565b50506128006127dc6101008401612763565b6008830180546001600160a01b0319166001600160a01b0392909216919091179055565b5050565b602081525f825160a0602084015261281f60c0840182612390565b905060018060a01b0360208501511660408401526040840151606084015260608401516080840152608084015160a08401528091505092915050565b5f5f8335601e19843603018112612870575f5ffd5b830160208101925035905067ffffffffffffffff81111561288f575f5ffd5b803603821315612657575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602080825282358282015282013560408083019190915282013560608083019190915282013560808083019190915282013560a08083019190915282013560c08083019190915282013560e0808301919091525f906129269084018461285b565b61012061010085015261293e6101408501828461289d565b91505061294e610100850161232d565b6001600160a01b038116610120850152612440565b60018060a01b0385168152836020820152606060408201525f61298a60608301848661289d565b969550505050505056fea2646970667358221220bf6475210e4d7da2e318c9505e51e4e034da2eed2783847002bc713efe7f009764736f6c634300081c0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220f6250092aa58347c7032a68c935dbc5ac048d028865190bfe3dfa049d669ad2064736f6c634300081c0033