0 txs
994 calls
constructor
constructor(address _serviceRegistry, address _karma)
functions
chainId
viewfunction chainId() view returns (uint256)
checkMech
viewfunction checkMech(address mech) view returns (address multisig)
DOMAIN_SEPARATOR_TYPE_HASH
viewfunction DOMAIN_SEPARATOR_TYPE_HASH() view returns (bytes32)
domainSeparator
viewfunction domainSeparator() view returns (bytes32)
fee
viewfunction fee() view returns (uint256)
getDomainSeparator
viewfunction getDomainSeparator() view returns (bytes32)
getRequestId
viewfunction getRequestId(address mech, address requester, bytes data, uint256 deliveryRate, bytes32 paymentType, uint256 nonce) view returns (bytes32 requestId)
getRequestStatus
viewfunction getRequestStatus(bytes32 requestId) view returns (uint8 status)
karma
viewfunction karma() view returns (address)
mapAgentMechFactories
viewfunction mapAgentMechFactories(address) view returns (address)
mapDeliveryCounts
viewfunction mapDeliveryCounts(address) view returns (uint256)
mapMechDeliveryCounts
viewfunction mapMechDeliveryCounts(address) view returns (uint256)
mapMechFactories
viewfunction mapMechFactories(address) view returns (bool)
mapMechServiceDeliveryCounts
viewfunction mapMechServiceDeliveryCounts(address) view returns (uint256)
mapNonces
viewfunction mapNonces(address) view returns (uint256)
mapPaymentTypeBalanceTrackers
viewfunction mapPaymentTypeBalanceTrackers(bytes32) view returns (address)
mapRequestCounts
viewfunction mapRequestCounts(address) view returns (uint256)
mapRequestIdInfos
viewfunction mapRequestIdInfos(bytes32) view returns (address priorityMech, address deliveryMech, address requester, uint256 responseTimeout, uint256 deliveryRate, bytes32 paymentType)
MAX_FEE_FACTOR
viewfunction MAX_FEE_FACTOR() view returns (uint256)
maxResponseTimeout
viewfunction maxResponseTimeout() view returns (uint256)
MECH_MARKETPLACE_PROXY
viewfunction MECH_MARKETPLACE_PROXY() view returns (bytes32)
minResponseTimeout
viewfunction minResponseTimeout() view returns (uint256)
numMechs
viewfunction numMechs() view returns (uint256)
numTotalRequests
viewfunction numTotalRequests() view returns (uint256)
numUndeliveredRequests
viewfunction numUndeliveredRequests() view returns (uint256)
owner
viewfunction owner() view returns (address)
serviceRegistry
viewfunction serviceRegistry() view returns (address)
VERSION
viewfunction VERSION() view returns (string)
changeImplementation
nonpayablefunction changeImplementation(address newImplementation)
changeMarketplaceParams
nonpayablefunction changeMarketplaceParams(uint256 newFee, uint256 newMinResponseTimeout, uint256 newMaxResponseTimeout)
changeOwner
nonpayablefunction changeOwner(address newOwner)
create
nonpayablefunction create(uint256 serviceId, address mechFactory, bytes payload) returns (address mech)
deliverMarketplace
nonpayablefunction deliverMarketplace(bytes32[] requestIds, uint256[] deliveryRates) returns (bool[] deliveredRequests)
deliverMarketplaceWithSignatures
nonpayablefunction deliverMarketplaceWithSignatures(address requester, tuple[] deliverWithSignatures, uint256[] deliveryRates, bytes paymentData)
initialize
nonpayablefunction initialize(uint256 _fee, uint256 _minResponseTimeout, uint256 _maxResponseTimeout)
request
payablefunction request(bytes requestData, uint256 maxDeliveryRate, bytes32 paymentType, address priorityMech, uint256 responseTimeout, bytes paymentData) payable returns (bytes32 requestId)
requestBatch
payablefunction requestBatch(bytes[] requestDatas, uint256 maxDeliveryRate, bytes32 paymentType, address priorityMech, uint256 responseTimeout, bytes paymentData) payable returns (bytes32[] requestIds)
setMechFactoryStatuses
nonpayablefunction setMechFactoryStatuses(address[] mechFactories, bool[] statuses)
setPaymentTypeBalanceTrackers
nonpayablefunction setPaymentTypeBalanceTrackers(bytes32[] paymentTypes, address[] balanceTrackers)
events
CreateMech
event CreateMech(address indexed mech, uint256 indexed serviceId, address indexed mechFactory)
Deliver
event Deliver(address indexed mech, address indexed mechServiceMultisig, bytes32 requestId, uint256 deliveryRate, bytes data)
ImplementationUpdated
event ImplementationUpdated(address indexed implementation)
MarketplaceDelivery
event MarketplaceDelivery(address indexed deliveryMech, address[] indexed requesters, uint256 numDeliveries, bytes32[] requestIds, bool[] deliveredRequests)
MarketplaceDeliveryWithSignatures
event MarketplaceDeliveryWithSignatures(address indexed deliveryMech, address indexed requester, uint256 numDeliveries, bytes32[] requestIds)
MarketplaceParamsUpdated
event MarketplaceParamsUpdated(uint256 fee, uint256 minResponseTimeout, uint256 maxResponseTimeout)
MarketplaceRequest
event MarketplaceRequest(address indexed priorityMech, address indexed requester, uint256 numRequests, bytes32[] requestIds)
OwnerUpdated
event OwnerUpdated(address indexed owner)
SetMechFactoryStatuses
event SetMechFactoryStatuses(address[] mechFactories, bool[] statuses)
SetPaymentTypeBalanceTrackers
event SetPaymentTypeBalanceTrackers(bytes32[] paymentTypes, address[] balanceTrackers)
errors
AlreadyInitialized
error AlreadyInitialized()
AlreadyRequested
error AlreadyRequested(bytes32 requestId)
IncorrectSignatureLength
error IncorrectSignatureLength(bytes signature, uint256 provided, uint256 expected)
InsufficientBalance
error InsufficientBalance(uint256 current, uint256 required)
NoDepositAllowed
error NoDepositAllowed(uint256 amount)
OutOfBounds
error OutOfBounds(uint256 provided, uint256 min, uint256 max)
Overflow
error Overflow(uint256 provided, uint256 max)
OwnerOnly
error OwnerOnly(address sender, address owner)
ReentrancyGuard
error ReentrancyGuard()
SignatureNotValidated
error SignatureNotValidated(address requester, bytes32 msgHash, bytes signature)
TransferFailed
error TransferFailed(address token, address from, address to, uint256 amount)
UnauthorizedAccount
error UnauthorizedAccount(address account)
WrongArrayLength
error WrongArrayLength(uint256 numValues1, uint256 numValues2)
WrongPaymentType
error WrongPaymentType(bytes32 paymentType)
WrongServiceState
error WrongServiceState(uint256 state, uint256 serviceId)
ZeroAddress
error ZeroAddress()
ZeroValue
error ZeroValue()
creation bytecode
0x60e060405234801561000f575f5ffd5b506040516146b33803806146b383398101604081905261002e9161009f565b6001600160a01b038216158061004b57506001600160a01b038116155b156100695760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0391821660c0521660a052466080526100d0565b80516001600160a01b038116811461009a575f5ffd5b919050565b5f5f604083850312156100b0575f5ffd5b6100b983610084565b91506100c760208401610084565b90509250929050565b60805160a05160c05161457a6101395f395f818161077401528181610ea401528181610f5d015261110c01525f818161051a01528181611a8001528181611cd1015281816128fe0152818161298801526132d401525f818161066b0152612273015261457a5ff3fe608060405260043610610290575f3560e01c80638da5cb5b11610165578063d64bf8b0116100c6578063ed24911d1161007c578063f6938b0911610062578063f6938b0914610899578063f698da25146108ac578063ffa1ad74146108c0575f5ffd5b8063ed24911d14610852578063f5dcb7bb14610866575f5ffd5b8063ded81286116100ac578063ded81286146107f5578063e0cb19e81461080a578063e8eca22d1461081f575f5ffd5b8063d64bf8b0146107c1578063ddca3f43146107e0575f5ffd5b8063bdf863171161011b578063c7b6a9f011610101578063c7b6a9f014610743578063cbcf252a14610763578063cbd6407a14610796575f5ffd5b8063bdf86317146106ed578063c69f6f9f14610702575f5ffd5b80639e592bb91161014b5780639e592bb91461068d578063a6f9dae1146106b9578063af4937fc146106d8575f5ffd5b80638da5cb5b1461062e5780639a8a05921461065a575f5ffd5b806345d076641161020f57806357c0762d116101c55780637ecb65f6116101ab5780637ecb65f61461053c57806380d859111461055b5780638342d20e1461057a575f5ffd5b806357c0762d146104ea57806374a8569b14610509575f5ffd5b80634ada3e61116101f55780634ada3e61146104755780634e894dd11461048a5780634eb07dd3146104a9575f5ffd5b806345d076641461042a57806346fbcbb214610456575f5ffd5b8063176b8b01116102645780631bbbeeb81161024a5780631bbbeeb8146103905780632685937b146103bb57806343be9643146103ff575f5ffd5b8063176b8b011461034657806317a68dd814610371575f5ffd5b8062427c5414610294578063087f08d4146102d25780630f41196a146102f35780631399991414610308575b5f5ffd5b34801561029f575f5ffd5b506102bf6102ae3660046137ac565b600a6020525f908152604090205481565b6040519081526020015b60405180910390f35b3480156102dd575f5ffd5b506102f16102ec366004613816565b610915565b005b3480156102fe575f5ffd5b506102bf60025481565b348015610313575f5ffd5b506103366103223660046137ac565b600e6020525f908152604090205460ff1681565b60405190151581526020016102c9565b348015610351575f5ffd5b506102bf6103603660046137ac565b600b6020525f908152604090205481565b34801561037c575f5ffd5b506102f161038b3660046137ac565b610b3e565b34801561039b575f5ffd5b506102bf6103aa3660046137ac565b60096020525f908152604090205481565b3480156103c6575f5ffd5b506103da6103d53660046137ac565b610c65565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c9565b34801561040a575f5ffd5b506102bf6104193660046137ac565b600c6020525f908152604090205481565b348015610435575f5ffd5b50610449610444366004613882565b610d9b565b6040516102c99190613899565b348015610461575f5ffd5b506103da6104703660046139de565b610e5c565b348015610480575f5ffd5b506102bf60055481565b348015610495575f5ffd5b506102f16104a4366004613a71565b611290565b3480156104b4575f5ffd5b506103da6104c3366004613882565b60106020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156104f5575f5ffd5b506102f1610504366004613b22565b611491565b348015610514575f5ffd5b506103da7f000000000000000000000000000000000000000000000000000000000000000081565b348015610547575f5ffd5b506102bf610556366004613b4b565b611555565b348015610566575f5ffd5b506102f1610575366004613b22565b61161f565b348015610585575f5ffd5b506105e3610594366004613882565b600d6020525f908152604090208054600182015460028301546003840154600485015460059095015473ffffffffffffffffffffffffffffffffffffffff948516959385169490921692909186565b6040805173ffffffffffffffffffffffffffffffffffffffff9788168152958716602087015293909516928401929092526060830152608082015260a081019190915260c0016102c9565b348015610639575f5ffd5b506008546103da9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610665575f5ffd5b506102bf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610698575f5ffd5b506106ac6106a7366004613816565b6116b8565b6040516102c99190613c00565b3480156106c4575f5ffd5b506102f16106d33660046137ac565b611e89565b3480156106e3575f5ffd5b506102bf61271081565b3480156106f8575f5ffd5b506102bf60045481565b34801561070d575f5ffd5b506103da61071c3660046137ac565b600f6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b610756610751366004613c12565b611fb7565b6040516102c99190613d4b565b34801561076e575f5ffd5b506103da7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107a1575f5ffd5b506102bf6107b03660046137ac565b60116020525f908152604090205481565b3480156107cc575f5ffd5b506102f16107db366004613816565b61201a565b3480156107eb575f5ffd5b506102bf60015481565b348015610800575f5ffd5b506102bf60035481565b348015610815575f5ffd5b506102bf60065481565b34801561082a575f5ffd5b506102bf7fe6194b93a7bff0a54130ed8cd277223408a77f3e48bb5104a9db96d334f962ca81565b34801561085d575f5ffd5b506102bf612270565b348015610871575f5ffd5b506102bf7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6102bf6108a7366004613d5d565b6122ab565b3480156108b7575f5ffd5b506102bf5f5481565b3480156108cb575f5ffd5b506109086040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102c99190613e00565b60085473ffffffffffffffffffffffffffffffffffffffff16331461098d576008546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044015b60405180910390fd5b8281146109d0576040517f8151c1100000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610984565b5f5b83811015610afa575f8585838181106109ed576109ed613e12565b9050602002016020810190610a0291906137ac565b73ffffffffffffffffffffffffffffffffffffffff1603610a4f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828282818110610a6157610a61613e12565b9050602002016020810190610a769190613e4e565b600e5f878785818110610a8b57610a8b613e12565b9050602002016020810190610aa091906137ac565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556001016109d2565b507f8cc6be981009d13170c616af494b7d671ed2d84b7e6891e4c8f21fe065c00dfc84848484604051610b309493929190613eb2565b60405180910390a150505050565b60085473ffffffffffffffffffffffffffffffffffffffff163314610bb1576008546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610984565b73ffffffffffffffffffffffffffffffffffffffff8116610bfe576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fe6194b93a7bff0a54130ed8cd277223408a77f3e48bb5104a9db96d334f962ca81905560405173ffffffffffffffffffffffffffffffffffffffff8216907f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03905f90a250565b5f73ffffffffffffffffffffffffffffffffffffffff8216610cb3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281165f908152600f602052604090205416610d28576040517f32b2baa300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610984565b8173ffffffffffffffffffffffffffffffffffffffff1663e7f43c686040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d959190613f0c565b92915050565b5f818152600d60209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff90811680835260018401548216958301959095526002830154169281019290925260038101546060830152600481015460808301526005015460a082015290610e1557505f92915050565b602081015173ffffffffffffffffffffffffffffffffffffffff1615610e3e5750600392915050565b8060600151421115610e535750600292915050565b50600192915050565b6040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018490525f90819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610ee9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f0d9190613f0c565b90503373ffffffffffffffffffffffffffffffffffffffff82161461104c576040517f4236aff8000000000000000000000000000000000000000000000000000000008152600481018690525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634236aff89060240160e060405180830381865afa158015610fb7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fdb9190613f3a565b50505050509150508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461104a576040517f32b2baa3000000000000000000000000000000000000000000000000000000008152336004820152602401610984565b505b73ffffffffffffffffffffffffffffffffffffffff84165f908152600e602052604090205460ff166110c2576040517f32b2baa300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610984565b6040517f0f7fb56d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690630f7fb56d90611138907f00000000000000000000000000000000000000000000000000000000000000009089908890600401613fd1565b6020604051808303815f875af1158015611154573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111789190613f0c565b915073ffffffffffffffffffffffffffffffffffffffff82166111c7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281165f908152600f6020526040812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169287169290921790915560068054916112288361403b565b91905055508373ffffffffffffffffffffffffffffffffffffffff16858373ffffffffffffffffffffffffffffffffffffffff167f46e1ca45c09520471c43e2e88eca33bb51803011cfd456933629dcc645ecacd660405160405180910390a4509392505050565b6007546002036112cc576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026007558415806112de5750848314155b1561131f576040517f8151c1100000000000000000000000000000000000000000000000000000000081526004810186905260248101849052604401610984565b5f3373ffffffffffffffffffffffffffffffffffffffff16632763b8da6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611369573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061138d9190614072565b905061139d88828989898961239c565b5f8181526010602052604090205473ffffffffffffffffffffffffffffffffffffffff16806113f8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6072dd2c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690636072dd2c906114549033908d908b908b908b908b90600401614119565b5f604051808303815f87803b15801561146b575f5ffd5b505af115801561147d573d5f5f3e3d5ffd5b505060016007555050505050505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff163314611504576008546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610984565b61150f838383612acf565b60408051848152602081018490529081018290527f64d0972bd5d0c2828d80911b61084d86d61214c3081656ca3a720047a88320359060600160405180910390a1505050565b5f61155e612270565b85516020968701206040805130818a015273ffffffffffffffffffffffffffffffffffffffff9a8b1681830152989099166060890152608088015260a08701949094525060c085019190915260e08085019190915284518085039091018152610100840185528051908301207f19010000000000000000000000000000000000000000000000000000000000006101208501526101228401919091526101428084019190915283518084039091018152610162909201909252805191012090565b60085473ffffffffffffffffffffffffffffffffffffffff161561166f576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a838383612acf565b611682612bf5565b5f555050600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055506001600755565b60606007546002036116f6576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026007558315806117085750838214155b15611749576040517f8151c1100000000000000000000000000000000000000000000000000000000081526004810185905260248101839052604401610984565b5f61175333610c65565b90505f858067ffffffffffffffff811115611770576117706138d8565b604051908082528060200260200182016040528015611799578160200160208202803683370190505b5093505f8167ffffffffffffffff8111156117b6576117b66138d8565b6040519080825280602002602001820160405280156117df578160200160208202803683370190505b5090505f8267ffffffffffffffff8111156117fc576117fc6138d8565b604051908082528060200260200182016040528015611825578160200160208202803683370190505b5090505f3373ffffffffffffffffffffffffffffffffffffffff16632763b8da6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611872573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118969190614072565b90505f5b84811015611c23575f600d5f8e8e858181106118b8576118b8613e12565b602090810292909201358352508101919091526040015f20805490915073ffffffffffffffffffffffffffffffffffffffff1680611922576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83826005015414611962576040517f7fec71d700000000000000000000000000000000000000000000000000000000815260048101859052602401610984565b600182015473ffffffffffffffffffffffffffffffffffffffff1615611989575050611c1b565b81600401548584815181106119a0576119a0613e12565b6020026020010181815250508483815181106119be576119be613e12565b60200260200101518c8c858181106119d8576119d8613e12565b9050602002013511156119ec575050611c1b565b73ffffffffffffffffffffffffffffffffffffffff81163314611ae3578160030154421115611adc576040517f4225d37a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f00000000000000000000000000000000000000000000000000000000000000001690634225d37a906044015f604051808303815f87803b158015611ac1575f5ffd5b505af1158015611ad3573d5f5f3e3d5ffd5b50505050611ae3565b5050611c1b565b6001820180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790556002820154865173ffffffffffffffffffffffffffffffffffffffff9190911690879085908110611b4257611b42613e12565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a5f878581518110611b9157611b91613e12565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190611be29061403b565b919050555060018a8481518110611bfb57611bfb613e12565b9115156020928302919091019091015287611c158161403b565b98505050505b60010161189a565b508415611e0b578460045f828254611c3b9190614184565b9091555050335f908152600b602052604081208054879290611c5e908490614197565b909155505073ffffffffffffffffffffffffffffffffffffffff86165f908152600c602052604081208054879290611c97908490614197565b90915550506040517f4225d37a000000000000000000000000000000000000000000000000000000008152336004820152602481018690527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634225d37a906044015f604051808303815f87803b158015611d27575f5ffd5b505af1158015611d39573d5f5f3e3d5ffd5b5050505f8281526010602052604090205473ffffffffffffffffffffffffffffffffffffffff16905080611d99576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166379e4afe833868b8e8e896040518763ffffffff1660e01b8152600401611ddc969594939291906141aa565b5f604051808303815f87803b158015611df3575f5ffd5b505af1158015611e05573d5f5f3e3d5ffd5b50505050505b82604051611e199190614255565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f894bb814a80f77e14febccf552394d95b38cc21a6dda1b0cf26434433fdf3e4c878e8e8c604051611e6d94939291906142a0565b60405180910390a3505060016007555092979650505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff163314611efc576008546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610984565b73ffffffffffffffffffffffffffffffffffffffff8116611f49576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6060600754600203611ff5576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260075561200988888888888888612cf3565b600160075598975050505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff16331461208d576008546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610984565b8281146120d0576040517f8151c1100000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610984565b5f5b8381101561223a578484828181106120ec576120ec613e12565b905060200201355f5f1b0361212d576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f83838381811061214057612140613e12565b905060200201602081019061215591906137ac565b73ffffffffffffffffffffffffffffffffffffffff16036121a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8282828181106121b4576121b4613e12565b90506020020160208101906121c991906137ac565b60105f8787858181106121de576121de613e12565b9050602002013581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060010190506120d2565b507fa9759667b17e564f26a0d91ce1c5e4a1dc3910aee992dc3f5f4da0a59d48f3cb84848484604051610b3094939291906142d6565b5f7f000000000000000000000000000000000000000000000000000000000000000046146122a5576122a0612bf5565b905090565b505f5490565b5f6007546002036122e8576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026007556040805160018082528183019092525f91816020015b60608152602001906001900390816123035750506040805160018082528183019092529192505f91906020808301908036833701905050905089825f8151811061234f5761234f613e12565b6020026020010181905250612369828a8a8a8a8a8a612cf3565b9050805f8151811061237d5761237d613e12565b6020026020010151925060016007819055505050979650505050505050565b5f6123a633610c65565b9050835f8167ffffffffffffffff8111156123c3576123c36138d8565b6040519080825280602002602001820160405280156123ec578160200160208202803683370190505b5073ffffffffffffffffffffffffffffffffffffffff8a165f908152601160205260408120549192505b838110156127b85788888281811061243057612430613e12565b905060200281019061244291906142fc565b61244c9080614338565b90505f03612486576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61250f338c8b8b8581811061249d5761249d613e12565b90506020028101906124af91906142fc565b6124b99080614338565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508d92508c915087905081811061250157612501613e12565b905060200201358e87611555565b83828151811061252157612521613e12565b6020026020010181815250506125b68b84838151811061254357612543613e12565b60200260200101518b8b8581811061255d5761255d613e12565b905060200281019061256f91906142fc565b61257d906020810190614338565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061346392505050565b5f600d5f8584815181106125cc576125cc613e12565b60209081029190910181015182528101919091526040015f20805490915073ffffffffffffffffffffffffffffffffffffffff16156126545783828151811061261757612617613e12565b60200260200101516040517fec0db69800000000000000000000000000000000000000000000000000000000815260040161098491815260200190565b8054337fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001830180548316909117905560028201805490911673ffffffffffffffffffffffffffffffffffffffff8e161790558787838181106126c1576126c1613e12565b6020029190910135600483015550600581018b9055826126e08161403b565b9350508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fb0d013658abb05dd269ff3ab257175d5ae3fa4107d4e142abd96e947cd5cb06f86858151811061274457612744613e12565b60200260200101518b8b8781811061275e5761275e613e12565b905060200201358e8e8881811061277757612777613e12565b905060200281019061278991906142fc565b612797906040810190614338565b6040516127a79493929190614399565b60405180910390a350600101612416565b5073ffffffffffffffffffffffffffffffffffffffff8a165f9081526011602090815260408083208490556009909152812080548592906127fa908490614197565b909155505073ffffffffffffffffffffffffffffffffffffffff8a165f908152600a602052604081208054859290612833908490614197565b9091555050335f908152600b602052604081208054859290612856908490614197565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f908152600c60205260408120805485929061288f908490614197565b925050819055508260055f8282546128a79190614197565b90915550506040517f55e7d04400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152336024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906355e7d044906064015f604051808303815f87803b15801561293f575f5ffd5b505af1158015612951573d5f5f3e3d5ffd5b50506040517f4225d37a000000000000000000000000000000000000000000000000000000008152336004820152602481018690527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169250634225d37a91506044015f604051808303815f87803b1580156129e0575f5ffd5b505af11580156129f2573d5f5f3e3d5ffd5b50506040517f9680b60300000000000000000000000000000000000000000000000000000000815260048101869052339250639680b60391506024015f604051808303815f87803b158015612a45575f5ffd5b505af1158015612a57573d5f5f3e3d5ffd5b505050508973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ff980d83e9456535b0f9f3634d171df2a5f052f5d5e706b75d30c4e0433da927d845185604051612abb9291906143c2565b60405180910390a350505050505050505050565b811580612ada575080155b15612b11576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612710831115612b58576040517f7ae59685000000000000000000000000000000000000000000000000000000008152600481018490526127106024820152604401610984565b80821115612b9c576040517f7ae596850000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610984565b63ffffffff811115612be7576040517f7ae596850000000000000000000000000000000000000000000000000000000081526004810182905263ffffffff6024820152604401610984565b600192909255600255600355565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7ff376b6313a0837eb351511248cfe7dcc1cd26c49b8e0a47e1eb369dd62c425db6040518060400160405280600581526020017f312e312e30000000000000000000000000000000000000000000000000000000815250604051602001612c7e9190613e00565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083019490945281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b606063ffffffff612d044286614197565b1115612d5457612d144285614197565b6040517f7ae59685000000000000000000000000000000000000000000000000000000008152600481019190915263ffffffff6024820152604401610984565b600254841080612d65575060035484115b15612db2576002546003546040517feb373cfe0000000000000000000000000000000000000000000000000000000081526004810187905260248101929092526044820152606401610984565b861580612dbd575085155b15612df4576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87515f819003612e30576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e3986610c65565b508067ffffffffffffffff811115612e5357612e536138d8565b604051908082528060200260200182016040528015612e7c578160200160208202803683370190505b5091505f8673ffffffffffffffffffffffffffffffffffffffff16632cc0fcb26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ec9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eed9190614072565b905088811115612f33576040517f7ae5968500000000000000000000000000000000000000000000000000000000815260048101829052602481018a9052604401610984565b8673ffffffffffffffffffffffffffffffffffffffff16632763b8da6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f7c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fa09190614072565b8814612fdb576040517f7fec71d700000000000000000000000000000000000000000000000000000000815260048101899052602401610984565b335f90815260116020526040812054905b8b5181101561318e578b818151811061300757613007613e12565b6020026020010151515f03613048576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306f89338e848151811061305f5761305f613e12565b6020026020010151868e87611555565b85828151811061308157613081613e12565b6020026020010181815250505f600d5f8784815181106130a3576130a3613e12565b60209081029190910181015182528101919091526040015f20805490915073ffffffffffffffffffffffffffffffffffffffff16156130ee5785828151811061261757612617613e12565b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8b16178155613136428a614197565b60038201556002810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317905560048101849055600581018b90558261317f8161403b565b93505050806001019050612fec565b50335f9081526011602090815260408083208490558b8352601090915290205473ffffffffffffffffffffffffffffffffffffffff16806131fb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f38603a3900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906338603a39903490613257903390899089908e908e906004016143e2565b5f604051808303818588803b15801561326e575f5ffd5b505af1158015613280573d5f5f3e3d5ffd5b50506040517f55e7d04400000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8d81166024830152604482018990527f00000000000000000000000000000000000000000000000000000000000000001693506355e7d044925060640190505f604051808303815f87803b158015613319575f5ffd5b505af115801561332b573d5f5f3e3d5ffd5b5050335f908152600960205260408120805488945090925061334e908490614197565b925050819055508360045f8282546133669190614197565b925050819055508360055f82825461337e9190614197565b925050819055508873ffffffffffffffffffffffffffffffffffffffff1663be2641de868e6040518363ffffffff1660e01b81526004016133c092919061441d565b5f604051808303815f87803b1580156133d7575f5ffd5b505af11580156133e9573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f5d60556939d4ab71b3129033c865bf7e828306916fd94fd35019d3d530eb36b3868860405161344c9291906143c2565b60405180910390a350505050979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166134b0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83163b156135c6576040517f1626ba7e000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff851690631626ba7e9061352390869086906004016144b0565b602060405180830381865afa15801561353e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061356291906144c8565b7fffffffff00000000000000000000000000000000000000000000000000000000160361358e57505050565b8282826040517f02d51bb200000000000000000000000000000000000000000000000000000000815260040161098493929190613fd1565b80516041146136085780516040517f1d9f5a5f000000000000000000000000000000000000000000000000000000008152610984918391604190600401614507565b5f8160408151811061361c5761361c613e12565b016020015160f81c9050600481101561363d5761363a601b8261452b565b90505b602082015160408301517f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08111156136a7578585856040517f02d51bb200000000000000000000000000000000000000000000000000000000815260040161098493929190613fd1565b604080515f8082526020820180845288905260ff861692820192909252606081018490526080810183905260019060a0016020604051602081039080840390855afa1580156136f8573d5f5f3e3d5ffd5b5050506020604051035190508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461376f578686866040517f02d51bb200000000000000000000000000000000000000000000000000000000815260040161098493929190613fd1565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613799575f5ffd5b50565b80356137a781613778565b919050565b5f602082840312156137bc575f5ffd5b81356137c781613778565b9392505050565b5f5f83601f8401126137de575f5ffd5b50813567ffffffffffffffff8111156137f5575f5ffd5b6020830191508360208260051b850101111561380f575f5ffd5b9250929050565b5f5f5f5f60408587031215613829575f5ffd5b843567ffffffffffffffff81111561383f575f5ffd5b61384b878288016137ce565b909550935050602085013567ffffffffffffffff81111561386a575f5ffd5b613876878288016137ce565b95989497509550505050565b5f60208284031215613892575f5ffd5b5035919050565b60208101600483106138d2577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561394c5761394c6138d8565b604052919050565b5f82601f830112613963575f5ffd5b813567ffffffffffffffff81111561397d5761397d6138d8565b6139ae60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613905565b8181528460208386010111156139c2575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f606084860312156139f0575f5ffd5b833592506020840135613a0281613778565b9150604084013567ffffffffffffffff811115613a1d575f5ffd5b613a2986828701613954565b9150509250925092565b5f5f83601f840112613a43575f5ffd5b50813567ffffffffffffffff811115613a5a575f5ffd5b60208301915083602082850101111561380f575f5ffd5b5f5f5f5f5f5f5f6080888a031215613a87575f5ffd5b8735613a9281613778565b9650602088013567ffffffffffffffff811115613aad575f5ffd5b613ab98a828b016137ce565b909750955050604088013567ffffffffffffffff811115613ad8575f5ffd5b613ae48a828b016137ce565b909550935050606088013567ffffffffffffffff811115613b03575f5ffd5b613b0f8a828b01613a33565b989b979a50959850939692959293505050565b5f5f5f60608486031215613b34575f5ffd5b505081359360208301359350604090920135919050565b5f5f5f5f5f5f60c08789031215613b60575f5ffd5b8635613b6b81613778565b95506020870135613b7b81613778565b9450604087013567ffffffffffffffff811115613b96575f5ffd5b613ba289828a01613954565b969995985095966060810135965060808101359560a090910135945092505050565b5f8151808452602084019350602083015f5b82811015613bf65781511515865260209586019590910190600101613bd6565b5093949350505050565b602081525f6137c76020830184613bc4565b5f5f5f5f5f5f5f60c0888a031215613c28575f5ffd5b873567ffffffffffffffff811115613c3e575f5ffd5b8801601f81018a13613c4e575f5ffd5b803567ffffffffffffffff811115613c6857613c686138d8565b8060051b613c7860208201613905565b9182526020818401810192908101908d841115613c93575f5ffd5b6020850192505b83831015613cd957823567ffffffffffffffff811115613cb8575f5ffd5b613cc78f602083890101613954565b83525060209283019290910190613c9a565b9a50505050602089013596505060408801359450613cf96060890161379c565b93506080880135925060a088013567ffffffffffffffff811115613b03575f5ffd5b5f8151808452602084019350602083015f5b82811015613bf6578151865260209586019590910190600101613d2d565b602081525f6137c76020830184613d1b565b5f5f5f5f5f5f5f60c0888a031215613d73575f5ffd5b873567ffffffffffffffff811115613d89575f5ffd5b613d958a828b01613954565b97505060208801359550604088013594506060880135613cf981613778565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6137c76020830184613db4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b803580151581146137a7575f5ffd5b5f60208284031215613e5e575f5ffd5b6137c782613e3f565b8183526020830192505f815f5b84811015613bf6578135613e8781613778565b73ffffffffffffffffffffffffffffffffffffffff1686526020958601959190910190600101613e74565b604081525f613ec5604083018688613e67565b8281036020808501919091528482528591015f5b85811015613f0057613eea83613e3f565b1515825260209283019290910190600101613ed9565b50979650505050505050565b5f60208284031215613f1c575f5ffd5b81516137c781613778565b805163ffffffff811681146137a7575f5ffd5b5f5f5f5f5f5f5f60e0888a031215613f50575f5ffd5b87516bffffffffffffffffffffffff81168114613f6b575f5ffd5b6020890151909750613f7c81613778565b60408901519096509450613f9260608901613f27565b9350613fa060808901613f27565b9250613fae60a08901613f27565b915060c088015160068110613fc1575f5ffd5b8091505092959891949750929550565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201525f6140056060830184613db4565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361406b5761406b61400e565b5060010190565b5f60208284031215614082575f5ffd5b5051919050565b8183525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156140b9575f5ffd5b8260051b80836020870137939093016020019392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff86166020820152608060408201525f614164608083018688614089565b82810360608401526141778185876140d2565b9998505050505050505050565b81810381811115610d9557610d9561400e565b80820180821115610d9557610d9561400e565b5f60a0820173ffffffffffffffffffffffffffffffffffffffff8916835260a0602084015280885180835260c08501915060208a0192505f5b8181101561421757835173ffffffffffffffffffffffffffffffffffffffff168352602093840193909201916001016141e3565b5050838103604085015261422b8189613bc4565b9150508281036060840152614241818688614089565b905082810360808401526141778185613d1b565b81515f90829060208501835b8281101561429557815173ffffffffffffffffffffffffffffffffffffffff16845260209384019390910190600101614261565b509195945050505050565b848152606060208201525f6142b9606083018587614089565b82810360408401526142cb8185613bc4565b979650505050505050565b604081525f6142e9604083018688614089565b82810360208401526142cb818587613e67565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261432e575f5ffd5b9190910192915050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261436b575f5ffd5b83018035915067ffffffffffffffff821115614385575f5ffd5b60200191503681900382131561380f575f5ffd5b848152836020820152606060408201525f6143b86060830184866140d2565b9695505050505050565b828152604060208201525f6143da6040830184613d1b565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff86168152846020820152836040820152608060608201525f6142cb6080830184866140d2565b604081525f61442f6040830185613d1b565b828103602084015280845180835260208301915060208160051b840101602087015f5b838110156144a2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086840301855261448c838351613db4565b6020958601959093509190910190600101614452565b509098975050505050505050565b828152604060208201525f6143da6040830184613db4565b5f602082840312156144d8575f5ffd5b81517fffffffff00000000000000000000000000000000000000000000000000000000811681146137c7575f5ffd5b606081525f6145196060830186613db4565b60208301949094525060400152919050565b60ff8181168382160190811115610d9557610d9561400e56fea26469706673582212205361abf960db68d3b3bae8075574e1aeeffc915036bea9a2bf06b78902652cc364736f6c634300081c00330000000000000000000000003c1ff68f5aa342d296d4dee4bb1cacca912d95fe0000000000000000000000007f69b6783855772d10a4bc2afaae650599f040db