3 txs
4 calls
constructor
constructor(address _intentBondFactory, address _intentOracle, address _summerToken, address _accessManager)
functions
accessManager
viewfunction accessManager() view returns (address)
ADMIRALS_QUARTERS_ROLE
viewfunction ADMIRALS_QUARTERS_ROLE() view returns (bytes32)
BUFFER_TIME
viewfunction BUFFER_TIME() view returns (uint256)
DECAY_CONTROLLER_ROLE
viewfunction DECAY_CONTROLLER_ROLE() view returns (bytes32)
generateRole
purefunction generateRole(uint8 roleName, address roleTargetContract) pure returns (bytes32)
GOVERNOR_ROLE
viewfunction GOVERNOR_ROLE() view returns (bytes32)
GUARDIAN_ROLE
viewfunction GUARDIAN_ROLE() view returns (bytes32)
hasAdmiralsQuartersRole
viewfunction hasAdmiralsQuartersRole(address account) view returns (bool)
hasCommitted
viewfunction hasCommitted(tuple intent) view returns (uint256 requiredNotional, uint256 arkAssets, bool isCommited)
intentBondFactory
viewfunction intentBondFactory() view returns (address)
intentOracle
viewfunction intentOracle() view returns (address)
intentSolvers
viewfunction intentSolvers(bytes32 intentId) view returns (address solver)
intentSolveTime
viewfunction intentSolveTime(bytes32 intentId) view returns (uint256 solveTime)
intentStates
viewfunction intentStates(bytes32 intentId) view returns (uint8 state)
MAX_PRICE_AGE
viewfunction MAX_PRICE_AGE() view returns (uint256)
MAX_TERM
viewfunction MAX_TERM() view returns (uint256)
MIN_TERM
viewfunction MIN_TERM() view returns (uint256)
solverEscrows
viewfunction solverEscrows(address solver) view returns (address escrow)
summerToken
viewfunction summerToken() view returns (address)
SUPER_KEEPER_ROLE
viewfunction SUPER_KEEPER_ROLE() view returns (bytes32)
addSolverEscrow
nonpayablefunction addSolverEscrow(address solver, address asset)
createIntent
nonpayablefunction createIntent(tuple intent)
removeSolverEscrow
nonpayablefunction removeSolverEscrow(address solver)
resignBySolver
nonpayablefunction resignBySolver(tuple intent)
resignByUser
nonpayablefunction resignByUser(tuple intent)
settleIntent
nonpayablefunction settleIntent(tuple intent)
solveIntent
nonpayablefunction solveIntent(tuple intent, uint256 escrowedYield)
events
IntentActivated
event IntentActivated(address indexed ark, address indexed solver, uint256 startTime)
IntentCreated
event IntentCreated(bytes32 orderId, (address user, uint256 requiredNotional, uint256 requiredBond, uint256 term, uint256 targetYield, address token, address oracle, uint256 expiry) intent)
IntentResignedByArk
event IntentResignedByArk(address indexed ark, address indexed solver, uint256 escrowedYield)
IntentResignedBySolver
event IntentResignedBySolver(address indexed ark, address indexed solver, uint256 slashedAmount, uint256 escrowedYield)
IntentSettled
event IntentSettled(address indexed ark, address indexed solver, uint256 escrowedYield)
IntentSolved
event IntentSolved(address indexed ark, address indexed solver, uint256 escrowedYield)
SolverEscrowAdded
event SolverEscrowAdded(address indexed solver, address indexed escrow, address indexed asset)
SolverEscrowRemoved
event SolverEscrowRemoved(address indexed solver)
errors
CallerIsNotAdmin
error CallerIsNotAdmin(address caller)
CallerIsNotAuthorizedToBoard
error CallerIsNotAuthorizedToBoard(address caller)
CallerIsNotCommander
error CallerIsNotCommander(address caller)
CallerIsNotContractSpecificRole
error CallerIsNotContractSpecificRole(address caller, bytes32 role)
CallerIsNotCurator
error CallerIsNotCurator(address caller)
CallerIsNotDecayController
error CallerIsNotDecayController(address caller)
CallerIsNotFoundation
error CallerIsNotFoundation(address caller)
CallerIsNotGovernor
error CallerIsNotGovernor(address caller)
CallerIsNotGuardian
error CallerIsNotGuardian(address caller)
CallerIsNotGuardianOrGovernor
error CallerIsNotGuardianOrGovernor(address caller)
CallerIsNotKeeper
error CallerIsNotKeeper(address caller)
CallerIsNotRaft
error CallerIsNotRaft(address caller)
CallerIsNotRaftOrCommander
error CallerIsNotRaftOrCommander(address caller)
CallerIsNotSuperKeeper
error CallerIsNotSuperKeeper(address caller)
DirectGrantIsDisabled
error DirectGrantIsDisabled(address caller)
DirectRevokeIsDisabled
error DirectRevokeIsDisabled(address caller)
IntentHandler__ConstructorParamsInvalid
error IntentHandler__ConstructorParamsInvalid(string reason)
IntentHandler__InsufficientBond
error IntentHandler__InsufficientBond()
IntentHandler__IntentAlreadyExists
error IntentHandler__IntentAlreadyExists()
IntentHandler__IntentExpired
error IntentHandler__IntentExpired()
IntentHandler__IntentNotFound
error IntentHandler__IntentNotFound()
IntentHandler__IntentNotSolved
error IntentHandler__IntentNotSolved()
IntentHandler__InvalidOracle
error IntentHandler__InvalidOracle()
IntentHandler__InvalidState
error IntentHandler__InvalidState()
IntentHandler__SolverEscrowAlreadyExists
error IntentHandler__SolverEscrowAlreadyExists()
IntentHandler__SolverEscrowNotFound
error IntentHandler__SolverEscrowNotFound()
IntentHandler__TooLittleEscrowed
error IntentHandler__TooLittleEscrowed()
IntentHandler__UnauthorizedCaller
error IntentHandler__UnauthorizedCaller()
InvalidAccessManagerAddress
error InvalidAccessManagerAddress(address invalidAddress)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x610120604052348015610010575f5ffd5b506040516144f33803806144f383398181016040528101906100329190610510565b8060015f819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100aa575f6040517f47bd7c1d0000000000000000000000000000000000000000000000000000000081526004016100a19190610583565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77f98724414000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161010391906105d6565b602060405180830381865afa15801561011e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101429190610624565b61018357806040517f47bd7c1d00000000000000000000000000000000000000000000000000000000815260040161017a9190610583565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610226576040517f62dfc84400000000000000000000000000000000000000000000000000000000815260040161021d906106cf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610294576040517f62dfc84400000000000000000000000000000000000000000000000000000000815260040161028b9061075d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610302576040517f62dfc8440000000000000000000000000000000000000000000000000000000081526004016102f9906107eb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610370576040517f62dfc84400000000000000000000000000000000000000000000000000000000815260040161036790610879565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250508373ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663b952a3fe306040518263ffffffff1660e01b81526004016104139190610583565b5f604051808303815f87803b15801561042a575f5ffd5b505af115801561043c573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff168152505050505050610897565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6104df826104b6565b9050919050565b6104ef816104d5565b81146104f9575f5ffd5b50565b5f8151905061050a816104e6565b92915050565b5f5f5f5f60808587031215610528576105276104b2565b5b5f610535878288016104fc565b9450506020610546878288016104fc565b9350506040610557878288016104fc565b9250506060610568878288016104fc565b91505092959194509250565b61057d816104d5565b82525050565b5f6020820190506105965f830184610574565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6105d08161059c565b82525050565b5f6020820190506105e95f8301846105c7565b92915050565b5f8115159050919050565b610603816105ef565b811461060d575f5ffd5b50565b5f8151905061061e816105fa565b92915050565b5f60208284031215610639576106386104b2565b5b5f61064684828501610610565b91505092915050565b5f82825260208201905092915050565b7f53756d6d657220746f6b656e2063616e6e6f74206265207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6106b960238361064f565b91506106c48261065f565b604082019050919050565b5f6020820190508181035f8301526106e6816106ad565b9050919050565b7f496e74656e7420626f6e6420666163746f72792063616e6e6f74206265207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f610747602a8361064f565b9150610752826106ed565b604082019050919050565b5f6020820190508181035f8301526107748161073b565b9050919050565b7f496e74656e74206f7261636c652063616e6e6f74206265207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6107d560248361064f565b91506107e08261077b565b604082019050919050565b5f6020820190508181035f830152610802816107c9565b9050919050565b7f416363657373206d616e616765722063616e6e6f74206265207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61086360258361064f565b915061086e82610809565b604082019050919050565b5f6020820190508181035f83015261089081610857565b9050919050565b60805160a05160c05160e05161010051613bc461092f5f395f6125f201525f81816107fd01526125ce01525f81816107c101526116cc01525f81816106ed01528181610d3001528181610dda015261223501525f81816113790152818161142501528181611720015281816117cc01528181611a3801528181611ae401528181611ea501528181611f5101526122ed0152613bc45ff3fe608060405234801561000f575f5ffd5b50600436106101a7575f3560e01c80639d7f7e86116100f7578063e3541fb811610095578063f043b3fc1161006f578063f043b3fc146104bb578063f0604829146104ed578063f9ddf50d1461050b578063fdcb606814610529576101a7565b8063e3541fb81461042b578063e38a2a0f1461045b578063ebc136d01461048b576101a7565b8063b93e1af4116100d1578063b93e1af4146103b3578063bc7cf6e5146103d1578063c0b534c2146103ef578063ccc574901461040d576101a7565b80639d7f7e861461035b578063a89f38a314610379578063af496dab14610397576101a7565b806369b3054b116101645780637936a5451161013e5780637936a545146102d5578063934cadcc146103055780639886bf63146103215780639aabaf441461033f576101a7565b806369b3054b1461026b5780636d1f8f351461029b5780636eb0c55c146102b7576101a7565b8063076f4158146101ab57806322918cc4146101c757806324ea54f4146101e357806353450c68146102015780635ff8a66b1461021d57806366e943f11461024d575b5f5ffd5b6101c560048036038101906101c09190612a0f565b610547565b005b6101e160048036038101906101dc9190612a4f565b610b83565b005b6101eb610ed5565b6040516101f89190612a93565b60405180910390f35b61021b60048036038101906102169190612a4f565b610ef9565b005b61023760048036038101906102329190612ad6565b611304565b6040516102449190612b74565b60405180910390f35b610255611321565b6040516102629190612a93565b60405180910390f35b61028560048036038101906102809190612bb0565b611345565b6040516102929190612a93565b60405180910390f35b6102b560048036038101906102b09190612a4f565b611377565b005b6102bf6116ca565b6040516102cc9190612c49565b60405180910390f35b6102ef60048036038101906102ea9190612c62565b6116ee565b6040516102fc9190612cad565b60405180910390f35b61031f600480360381019061031a9190612c62565b61171e565b005b610329611a2e565b6040516103369190612cd5565b60405180910390f35b61035960048036038101906103549190612a4f565b611a36565b005b610363611e79565b6040516103709190612cd5565b60405180910390f35b610381611e7f565b60405161038e9190612a93565b60405180910390f35b6103b160048036038101906103ac9190612cee565b611ea3565b005b6103bb612233565b6040516103c89190612d4c565b60405180910390f35b6103d9612257565b6040516103e69190612cd5565b60405180910390f35b6103f761225d565b6040516104049190612a93565b60405180910390f35b610415612281565b6040516104229190612a93565b60405180910390f35b61044560048036038101906104409190612ad6565b6122a5565b6040516104529190612cd5565b60405180910390f35b61047560048036038101906104709190612ad6565b6122ba565b6040516104829190612d74565b60405180910390f35b6104a560048036038101906104a09190612c62565b6122ea565b6040516104b29190612da7565b60405180910390f35b6104d560048036038101906104d09190612a4f565b6123ac565b6040516104e493929190612dc0565b60405180910390f35b6104f56125c5565b6040516105029190612cd5565b60405180910390f35b6105136125cc565b6040516105209190612e15565b60405180910390f35b6105316125f0565b60405161053e9190612d74565b60405180910390f35b5f73ffffffffffffffffffffffffffffffffffffffff1660025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610608576040517f2293a46000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8260405160200161061a9190612eec565b6040516020818303038152906040528051906020012090506001600681111561064657610645612b01565b5b60015f8381526020019081526020015f205f9054906101000a900460ff16600681111561067657610675612b01565b5b146106ad576040517f0c0c924300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260e001514211156106eb576040517f7e0108f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631c5642163385604001516040518363ffffffff1660e01b815260040161074a929190612f06565b602060405180830381865afa158015610765573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107899190612f57565b6107bf576040517fb445ba0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663907abef47f0000000000000000000000000000000000000000000000000000000000000000610e106040518363ffffffff1660e01b815260040161083c929190612f06565b602060405180830381865afa158015610857573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087b9190612f57565b156108b2576040517f2aa37f7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81836080015110156108f0576040517f46466aa000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260015f8381526020019081526020015f205f6101000a81548160ff0219169083600681111561092457610923612b01565b5b02179055504260045f8381526020019081526020015f20819055503360035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610a218185608001518660a0015173ffffffffffffffffffffffffffffffffffffffff166126149092919063ffffffff16565b8360a0015173ffffffffffffffffffffffffffffffffffffffff166323b872dd333087608001516040518463ffffffff1660e01b8152600401610a6693929190612f82565b6020604051808303815f875af1158015610a82573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa69190612f57565b508073ffffffffffffffffffffffffffffffffffffffff166326b3293f8560a0015185856040518463ffffffff1660e01b8152600401610ae893929190612fb7565b5f604051808303815f87803b158015610aff575f5ffd5b505af1158015610b11573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff16845f015173ffffffffffffffffffffffffffffffffffffffff167f273859443f0e693ddae97f79eeb5b005e711cf93542949eff08a3601b06e55ee85604051610b759190612cd5565b60405180910390a350505050565b5f81604051602001610b959190612eec565b6040516020818303038152906040528051906020012090505f60015f8381526020019081526020015f205f9054906101000a900460ff16905060026006811115610be257610be1612b01565b5b816006811115610bf557610bf4612b01565b5b14158015610c28575060036006811115610c1257610c11612b01565b5b816006811115610c2557610c24612b01565b5b14155b15610c5f576040517f284c37e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1660035f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cf4576040517f2293a46000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660015f8481526020019081526020015f205f6101000a81548160ff02191690836006811115610d2857610d27612b01565b5b02179055505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635a13d5f4336040518263ffffffff1660e01b8152600401610d879190612d74565b602060405180830381865afa158015610da2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc69190613000565b90505f600282610dd69190613085565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634bf3d7bd33836040518363ffffffff1660e01b8152600401610e33929190612f06565b5f604051808303815f87803b158015610e4a575f5ffd5b505af1158015610e5c573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff16855f015173ffffffffffffffffffffffffffffffffffffffff167fd9ca5d2511f80aaf0c13933f87a5d1d592edcb983eb60f28b790fd0bb47b10a7838860800151604051610ec69291906130b5565b60405180910390a35050505050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504181565b5f81604051602001610f0b9190612eec565b6040516020818303038152906040528051906020012090505f60015f8381526020019081526020015f205f9054906101000a900460ff16905060026006811115610f5857610f57612b01565b5b816006811115610f6b57610f6a612b01565b5b14610fa2576040517f284c37e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260e00151421015610fe0576040517f284c37e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460015f8481526020019081526020015f205f6101000a81548160ff0219169083600681111561101457611013612b01565b5b02179055505f60035f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8173ffffffffffffffffffffffffffffffffffffffff1663d2701f998760a00151885f0151886040518463ffffffff1660e01b81526004016110f2939291906130dc565b6020604051808303815f875af115801561110e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111329190613000565b90505f865f015173ffffffffffffffffffffffffffffffffffffffff1663372709366040518163ffffffff1660e01b8152600401602060405180830381865afa158015611181573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a59190613125565b73ffffffffffffffffffffffffffffffffffffffff1663c8169aa16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ed573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112119190613125565b90508660a0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b8152600401611252929190612f06565b6020604051808303815f875af115801561126e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112929190612f57565b508373ffffffffffffffffffffffffffffffffffffffff16875f015173ffffffffffffffffffffffffffffffffffffffff167f8f21dd2bd73ec6847f369fd5352ddd650df8ea44d2df9da62274a177e8e8c44c846040516112f39190612cd5565b60405180910390a350505050505050565b6001602052805f5260405f205f915054906101000a900460ff1681565b7f0d186688925976bbe6755ae984501c8e3e2b103a7af59fd803ab9c6d891ae7e081565b5f8282604051602001611359929190613200565b60405160208183030381529060405280519060200120905092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166391d148546113be600130611345565b336040518363ffffffff1660e01b81526004016113dc92919061322b565b602060405180830381865afa1580156113f7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061141b9190612f57565b1580156114df57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166391d148547f0d186688925976bbe6755ae984501c8e3e2b103a7af59fd803ab9c6d891ae7e0336040518363ffffffff1660e01b815260040161149e92919061322b565b602060405180830381865afa1580156114b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114dd9190612f57565b155b1561152157336040517fa41a3a040000000000000000000000000000000000000000000000000000000081526004016115189190612d74565b60405180910390fd5b5f816040516020016115339190612eec565b6040516020818303038152906040528051906020012090505f600681111561155e5761155d612b01565b5b60015f8381526020019081526020015f205f9054906101000a900460ff16600681111561158e5761158d612b01565b5b146115c5576040517f4240cde600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62015180826060015110806115e157506301e133808260600151115b15611618576040517f284c37e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428260e0015111611655576040517f7e0108f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805f8381526020019081526020015f205f6101000a81548160ff0219169083600681111561168857611687612b01565b5b02179055507f33478454869cdf205731406ee6833700b296f4bf0d73cf323b83bc2bd6df5d6081836040516116be929190613252565b60405180910390a15050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6002602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166391d14854611765600130611345565b336040518363ffffffff1660e01b815260040161178392919061322b565b602060405180830381865afa15801561179e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117c29190612f57565b15801561188657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166391d148547f0d186688925976bbe6755ae984501c8e3e2b103a7af59fd803ab9c6d891ae7e0336040518363ffffffff1660e01b815260040161184592919061322b565b602060405180830381865afa158015611860573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118849190612f57565b155b156118c857336040517fa41a3a040000000000000000000000000000000000000000000000000000000081526004016118bf9190612d74565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611989576040517f6ebfcf2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690558073ffffffffffffffffffffffffffffffffffffffff167f3f6f51ca7d1c39259bd0bb0a7350fc589a1494fd56b3b515d8e8210eaaade4e560405160405180910390a250565b6301e1338081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166391d14854611a7d600130611345565b336040518363ffffffff1660e01b8152600401611a9b92919061322b565b602060405180830381865afa158015611ab6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ada9190612f57565b158015611b9e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166391d148547f0d186688925976bbe6755ae984501c8e3e2b103a7af59fd803ab9c6d891ae7e0336040518363ffffffff1660e01b8152600401611b5d92919061322b565b602060405180830381865afa158015611b78573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9c9190612f57565b155b15611be057336040517fa41a3a04000000000000000000000000000000000000000000000000000000008152600401611bd79190612d74565b60405180910390fd5b5f81604051602001611bf29190612eec565b6040516020818303038152906040528051906020012090505f60015f8381526020019081526020015f205f9054906101000a900460ff16905060026006811115611c3f57611c3e612b01565b5b816006811115611c5257611c51612b01565b5b03611d74575f60035f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663d2701f998660a0015184876040518463ffffffff1660e01b8152600401611d2c939291906130dc565b6020604051808303815f875af1158015611d48573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190613000565b505050611dd3565b60016006811115611d8857611d87612b01565b5b816006811115611d9b57611d9a612b01565b5b14611dd2576040517f284c37e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600560015f8481526020019081526020015f205f6101000a81548160ff02191690836006811115611e0757611e06612b01565b5b02179055505f73ffffffffffffffffffffffffffffffffffffffff16835f015173ffffffffffffffffffffffffffffffffffffffff167f35388167b66a21fbf982c7befe3b2530415331aa0cc3f3689726dc7143fd90ea5f604051611e6c91906132b3565b60405180910390a3505050565b610e1081565b7fb00be3d6a5434b97b328543d1486d56adcb7e74080170d1cdd7e0306c3d9ba3d81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166391d14854611eea600130611345565b336040518363ffffffff1660e01b8152600401611f0892919061322b565b602060405180830381865afa158015611f23573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f479190612f57565b15801561200b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166391d148547f0d186688925976bbe6755ae984501c8e3e2b103a7af59fd803ab9c6d891ae7e0336040518363ffffffff1660e01b8152600401611fca92919061322b565b602060405180830381865afa158015611fe5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120099190612f57565b155b1561204d57336040517fa41a3a040000000000000000000000000000000000000000000000000000000081526004016120449190612d74565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461210e576040517f837cc0ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f3060405161211c90612815565b6121269190612d74565b604051809103905ff08015801561213f573d5f5f3e3d5ffd5b5090508060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f18cdb2e7294840fde112c7262bc5a802021612312ce8f8c25444fb5fec6a5af360405160405180910390a4505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61025881565b7f025d8bbf3268be680d2605ebf6da15063b9915615bf1087dab336efc1bf970cb81565b7f7935bd0ae54bc31f548c14dba4d37c5c64b3f8ca900cb468fb8abd54d5894f5581565b6004602052805f5260405f205f915090505481565b6003602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166391d148547fb00be3d6a5434b97b328543d1486d56adcb7e74080170d1cdd7e0306c3d9ba3d846040518363ffffffff1660e01b815260040161236692919061322b565b602060405180830381865afa158015612381573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a59190612f57565b9050919050565b5f5f5f835f816040516020016123c29190612eec565b6040516020818303038152906040528051906020012090505f60068111156123ed576123ec612b01565b5b60015f8381526020019081526020015f205f9054906101000a900460ff16600681111561241d5761241c612b01565b5b03612454576040517f0c0c924300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f866040516020016124669190612eec565b6040516020818303038152906040528051906020012090505f60015f8381526020019081526020015f205f9054906101000a900460ff169050600260068111156124b3576124b2612b01565b5b8160068111156124c6576124c5612b01565b5b146124db575f5f5f96509650965050506125bc565b876020015196505f61025860045f8581526020019081526020015f20544261250391906132cc565b109050801561251d57875f5f9750975097505050506125bc565b5f895f015190508073ffffffffffffffffffffffffffffffffffffffff166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa15801561256d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125919190613000565b9750888810156125ad5788885f985098509850505050506125bc565b88886001985098509850505050505b50509193909250565b6201518081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f8373ffffffffffffffffffffffffffffffffffffffff1663095ea7b38484604051602401612644929190612f06565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506126928482612721565b61271b57612710848573ffffffffffffffffffffffffffffffffffffffff1663095ea7b3865f6040516024016126c99291906132ff565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061277a565b61271a848261277a565b5b50505050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f51905082801561276f57505f8214612753576001811461276e565b5f8673ffffffffffffffffffffffffffffffffffffffff163b115b5b935050505092915050565b5f5f60205f8451602086015f885af180612799576040513d5f823e3d81fd5b3d92505f519150505f82146127b25760018114156127cd565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561280f57836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016128069190612d74565b60405180910390fd5b50505050565b6108688061332783390190565b5f604051905090565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61287982612833565b810181811067ffffffffffffffff8211171561289857612897612843565b5b80604052505050565b5f6128aa612822565b90506128b68282612870565b919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128e4826128bb565b9050919050565b6128f4816128da565b81146128fe575f5ffd5b50565b5f8135905061290f816128eb565b92915050565b5f819050919050565b61292781612915565b8114612931575f5ffd5b50565b5f813590506129428161291e565b92915050565b5f610100828403121561295e5761295d61282f565b5b6129696101006128a1565b90505f61297884828501612901565b5f83015250602061298b84828501612934565b602083015250604061299f84828501612934565b60408301525060606129b384828501612934565b60608301525060806129c784828501612934565b60808301525060a06129db84828501612901565b60a08301525060c06129ef84828501612901565b60c08301525060e0612a0384828501612934565b60e08301525092915050565b5f5f6101208385031215612a2657612a2561282b565b5b5f612a3385828601612948565b925050610100612a4585828601612934565b9150509250929050565b5f6101008284031215612a6557612a6461282b565b5b5f612a7284828501612948565b91505092915050565b5f819050919050565b612a8d81612a7b565b82525050565b5f602082019050612aa65f830184612a84565b92915050565b612ab581612a7b565b8114612abf575f5ffd5b50565b5f81359050612ad081612aac565b92915050565b5f60208284031215612aeb57612aea61282b565b5b5f612af884828501612ac2565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60078110612b3f57612b3e612b01565b5b50565b5f819050612b4f82612b2e565b919050565b5f612b5e82612b42565b9050919050565b612b6e81612b54565b82525050565b5f602082019050612b875f830184612b65565b92915050565b60038110612b99575f5ffd5b50565b5f81359050612baa81612b8d565b92915050565b5f5f60408385031215612bc657612bc561282b565b5b5f612bd385828601612b9c565b9250506020612be485828601612901565b9150509250929050565b5f819050919050565b5f612c11612c0c612c07846128bb565b612bee565b6128bb565b9050919050565b5f612c2282612bf7565b9050919050565b5f612c3382612c18565b9050919050565b612c4381612c29565b82525050565b5f602082019050612c5c5f830184612c3a565b92915050565b5f60208284031215612c7757612c7661282b565b5b5f612c8484828501612901565b91505092915050565b5f612c9782612c18565b9050919050565b612ca781612c8d565b82525050565b5f602082019050612cc05f830184612c9e565b92915050565b612ccf81612915565b82525050565b5f602082019050612ce85f830184612cc6565b92915050565b5f5f60408385031215612d0457612d0361282b565b5b5f612d1185828601612901565b9250506020612d2285828601612901565b9150509250929050565b5f612d3682612c18565b9050919050565b612d4681612d2c565b82525050565b5f602082019050612d5f5f830184612d3d565b92915050565b612d6e816128da565b82525050565b5f602082019050612d875f830184612d65565b92915050565b5f8115159050919050565b612da181612d8d565b82525050565b5f602082019050612dba5f830184612d98565b92915050565b5f606082019050612dd35f830186612cc6565b612de06020830185612cc6565b612ded6040830184612d98565b949350505050565b5f612dff82612c18565b9050919050565b612e0f81612df5565b82525050565b5f602082019050612e285f830184612e06565b92915050565b612e37816128da565b82525050565b612e4681612915565b82525050565b61010082015f820151612e615f850182612e2e565b506020820151612e746020850182612e3d565b506040820151612e876040850182612e3d565b506060820151612e9a6060850182612e3d565b506080820151612ead6080850182612e3d565b5060a0820151612ec060a0850182612e2e565b5060c0820151612ed360c0850182612e2e565b5060e0820151612ee660e0850182612e3d565b50505050565b5f61010082019050612f005f830184612e4c565b92915050565b5f604082019050612f195f830185612d65565b612f266020830184612cc6565b9392505050565b612f3681612d8d565b8114612f40575f5ffd5b50565b5f81519050612f5181612f2d565b92915050565b5f60208284031215612f6c57612f6b61282b565b5b5f612f7984828501612f43565b91505092915050565b5f606082019050612f955f830186612d65565b612fa26020830185612d65565b612faf6040830184612cc6565b949350505050565b5f606082019050612fca5f830186612d65565b612fd76020830185612cc6565b612fe46040830184612a84565b949350505050565b5f81519050612ffa8161291e565b92915050565b5f602082840312156130155761301461282b565b5b5f61302284828501612fec565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61308f82612915565b915061309a83612915565b9250826130aa576130a961302b565b5b828204905092915050565b5f6040820190506130c85f830185612cc6565b6130d56020830184612cc6565b9392505050565b5f6060820190506130ef5f830186612d65565b6130fc6020830185612d65565b6131096040830184612a84565b949350505050565b5f8151905061311f816128eb565b92915050565b5f6020828403121561313a5761313961282b565b5b5f61314784828501613111565b91505092915050565b6003811061316157613160612b01565b5b50565b5f81905061317182613150565b919050565b5f61318082613164565b9050919050565b5f8160f81b9050919050565b5f61319d82613187565b9050919050565b6131b56131b082613176565b613193565b82525050565b5f8160601b9050919050565b5f6131d1826131bb565b9050919050565b5f6131e2826131c7565b9050919050565b6131fa6131f5826128da565b6131d8565b82525050565b5f61320b82856131a4565b60018201915061321b82846131e9565b6014820191508190509392505050565b5f60408201905061323e5f830185612a84565b61324b6020830184612d65565b9392505050565b5f610120820190506132665f830185612a84565b6132736020830184612e4c565b9392505050565b5f819050919050565b5f61329d6132986132938461327a565b612bee565b612915565b9050919050565b6132ad81613283565b82525050565b5f6020820190506132c65f8301846132a4565b92915050565b5f6132d682612915565b91506132e183612915565b92508282039050818111156132f9576132f8613058565b5b92915050565b5f6040820190506133125f830185612d65565b61331f60208301846132a4565b939250505056fe60a060405234801561000f575f5ffd5b50604051610868380380610868833981810160405281019061003191906100d0565b60015f819055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506100fb565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61009f82610076565b9050919050565b6100af81610095565b81146100b9575f5ffd5b50565b5f815190506100ca816100a6565b92915050565b5f602082840312156100e5576100e4610072565b5b5f6100f2848285016100bc565b91505092915050565b6080516107486101205f395f818160ea015281816101c7015261020101526107485ff3fe608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806326b3293f1461004e57806357e2c8101461006a578063cff91e0e14610088578063d2701f99146100b8575b5f5ffd5b6100686004803603810190610063919061059b565b6100e8565b005b6100726101c5565b60405161007f91906105fa565b60405180910390f35b6100a2600480360381019061009d9190610613565b6101e9565b6040516100af919061064d565b60405180910390f35b6100d260048036038101906100cd9190610666565b6101fe565b6040516100df919061064d565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461016d576040517f5c427cd900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101756102ee565b8160015f8381526020019081526020015f20819055506101b83330848673ffffffffffffffffffffffffffffffffffffffff16610332909392919063ffffffff16565b6101c06103b4565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001602052805f5260405f205f915090505481565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610284576040517f5c427cd900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028c6102ee565b60015f8381526020019081526020015f2054905060015f8381526020019081526020015f205f90556102df83828673ffffffffffffffffffffffffffffffffffffffff166103bd9092919063ffffffff16565b6102e76103b4565b9392505050565b60025f5403610329576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f81905550565b6103ae848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401610367939291906106b6565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061043c565b50505050565b60015f81905550565b610437838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016103f09291906106eb565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061043c565b505050565b5f5f60205f8451602086015f885af18061045b576040513d5f823e3d81fd5b3d92505f519150505f821461047457600181141561048f565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b156104d157836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016104c891906105fa565b60405180910390fd5b50505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610504826104db565b9050919050565b610514816104fa565b811461051e575f5ffd5b50565b5f8135905061052f8161050b565b92915050565b5f819050919050565b61054781610535565b8114610551575f5ffd5b50565b5f813590506105628161053e565b92915050565b5f819050919050565b61057a81610568565b8114610584575f5ffd5b50565b5f8135905061059581610571565b92915050565b5f5f5f606084860312156105b2576105b16104d7565b5b5f6105bf86828701610521565b93505060206105d086828701610554565b92505060406105e186828701610587565b9150509250925092565b6105f4816104fa565b82525050565b5f60208201905061060d5f8301846105eb565b92915050565b5f60208284031215610628576106276104d7565b5b5f61063584828501610587565b91505092915050565b61064781610535565b82525050565b5f6020820190506106605f83018461063e565b92915050565b5f5f5f6060848603121561067d5761067c6104d7565b5b5f61068a86828701610521565b935050602061069b86828701610521565b92505060406106ac86828701610587565b9150509250925092565b5f6060820190506106c95f8301866105eb565b6106d660208301856105eb565b6106e3604083018461063e565b949350505050565b5f6040820190506106fe5f8301856105eb565b61070b602083018461063e565b939250505056fea26469706673582212204fd85121d01682140eb8c28ae06c5ae9dedb2de7810272ca16d275077609c2fe64736f6c634300081c0033a264697066735822122068f6d0236d51f11c94b0a7700719fb20df2d68b8a1c830e205cbf08b8d65994c64736f6c634300081c003300000000000000000000000039a1b82f989bd26552dbf95f0483d8a83654b6ff0000000000000000000000008a6aecaa8c5241b72ba8c8d5d67102341ee0c553000000000000000000000000932ccb7d2a6f1821a1ecee9e1279ac30e0d4db32000000000000000000000000603821f86dedc794a3225d62afe1f175fe4ae861